Skip to main content

Fast star plate solver written in Rust

Project description

tetra3rs

Crates.io PyPI docs.rs Docs License Status

A fast, robust lost-in-space star plate solver written in Rust.

Given a set of star centroids extracted from a camera image, tetra3rs identifies the stars against a catalog and returns the camera's pointing direction as a quaternion — no prior attitude estimate required. The goal is to make this fast and robust enough for use in embedded systems such as star trackers on satellites.

Documentation: For tutorials, concept guides, and Python API reference, see the tetra3rs documentation. For Rust API docs, see docs.rs.

[!IMPORTANT] Status: Alpha — The core solver is based on well-vetted algorithms but has only been tested against a limited set of images. The API is not yet stable and may change between releases. Having said that, I've made it work on both low-SNR images taken with a camera in my backyard and with high-star-density images from more-complex telescopes.

[!CAUTION] Database format change in 0.7.0 — older databases will not load. The solver database serialization format moved from rkyv to postcard and the on-disk extension changed from .rkyv to .bin. Existing .rkyv files saved by 0.6.x or earlier — both SolverDatabase and CameraModel — must be regenerated. Pickled tetra3rs objects from older wheels will also fail to unpickle.

Regenerate solver databases with SolverDatabase::generate_from_gaia(...) in Rust, or tetra3rs.SolverDatabase.generate_from_gaia(...) in Python. The bundled gaia-catalog PyPI package handles this transparently for Python users — first solve after upgrading regenerates the cached database automatically.

[!WARNING] Other 0.7.0 breaking changes. The Rust SolverDatabase::pattern_catalog field is now a flat PatternCatalog (the rkyv-era sharding workaround was removed); RadialDistortion gained p1, p2 tangential coefficients (full Brown-Conrady); CalibrateConfig::polynomial_order was replaced by model: DistortionModelType; the public Rust function extract_centroids(path, ...) was removed in favor of extract_centroids_from_image(...). See CHANGELOG.md for the full list.

Features

  • Lost-in-space solving — determines attitude from star patterns with no initial guess
  • Tracking mode — when an attitude hint is available (e.g. the previous frame's solution), skip the 4-star pattern-hash phase and match centroids directly against catalog stars near the hinted boresight. Succeeds with as few as 3 stars, robust to sparse/low-SNR fields, with automatic fallback to lost-in-space if the hint is stale
  • Fast — geometric hashing of 4-star patterns with breadth-first (brightest-first) search
  • Robust — statistical verification via binomial false-positive probability
  • Multiscale — supports a range of field-of-view scales in a single database
  • Proper motion — propagates catalog star positions to any observation epoch
  • Compact binary databases — databases serialize with postcard in a portable, lightweight format with no offset-size limit, so wide-FOV-range multiscale databases of any size load cleanly
  • Centroid extraction — detect stars from in-memory pixel data with local background subtraction, connected-component labeling, and quadratic sub-pixel peak refinement. Accepts an already-decoded image::DynamicImage or a raw &[f32] pixel buffer (requires the image feature)
  • Camera model — unified intrinsics struct (focal length, optical center, parity, distortion) used throughout the pipeline
  • Distortion calibration — fit either a SIP polynomial or a Brown-Conrady radial (k1, k2, k3) distortion model from one or more solved images via calibrate_camera, with alternating per-image WCS refinement and global LS fit (the OpenCV / Zhang's-method shape for radial)
  • WCS output — solve results include FITS-standard WCS fields (CD matrix, CRVAL) and pixel↔sky coordinate conversion methods
  • Stellar aberration — optional correction for the ~20" apparent shift in star positions caused by the observer's barycentric velocity, with a built-in convenience function for Earth's barycentric velocity

Installation

Rust

The crate is published on crates.io as tetra3:

cargo add tetra3

Python

Binary wheels are available on PyPI for Linux (x86_64, ARM64), macOS (ARM64), and Windows (x86_64):

pip install tetra3rs

To build from source (requires a Rust toolchain):

pip install .

[!NOTE] All Python objects (SolverDatabase, CameraModel, SolveResult, CalibrateResult, ExtractionResult, Centroid, RadialDistortion, PolynomialDistortion) support pickle serialization via postcard.

Quick start

Star catalog

tetra3rs uses a merged Gaia DR3 + Hipparcos catalog. The merged catalog uses Gaia for most stars and fills in the brightest stars (G < 4) from Hipparcos where Gaia saturates.

Python: The catalog is bundled in the gaia-catalog package (installed automatically with tetra3rs). No manual download needed — just call generate_from_gaia() with no arguments.

Rust: Download the pre-built binary catalog:

mkdir -p data
curl -o data/gaia_merged.bin "https://storage.googleapis.com/tetra3rs-testvecs/gaia_merged.bin"

Or generate your own with a custom magnitude limit using scripts/download_gaia_catalog.py.

Example

use tetra3::{GenerateDatabaseConfig, SolverDatabase, SolveConfig, Centroid, SolveStatus};

// Generate a database from the Gaia catalog
let config = GenerateDatabaseConfig {
    max_fov_deg: 20.0,
    epoch_proper_motion_year: Some(2025.0),
    ..Default::default()
};
let db = SolverDatabase::generate_from_gaia("data/gaia_merged.bin", &config)?;

// Save the database to disk for fast loading later
db.save_to_file("data/my_database.bin")?;

// ... or load a previously saved database
let db = SolverDatabase::load_from_file("data/my_database.bin")?;

// Solve from image centroids (pixel coordinates, origin at image center)
let centroids = vec![
    Centroid { x: 100.0, y: 200.0, mass: Some(50.0), cov: None },
    Centroid { x: -50.0, y: -10.0, mass: Some(45.0), cov: None },
    // ...
];

let solve_config = SolveConfig {
    fov_estimate_rad: (15.0_f32).to_radians(), // horizontal FOV
    image_width: 1024,
    image_height: 1024,
    fov_max_error_rad: Some((2.0_f32).to_radians()),
    ..Default::default()
};

let result = db.solve_from_centroids(&centroids, &solve_config);
if result.status == SolveStatus::MatchFound {
    let q = result.qicrs2cam.unwrap();
    println!("Attitude: {q}");
    println!("Matched {} stars in {:.1} ms",
        result.num_matches.unwrap(), result.solve_time_ms);
}

Algorithm overview

  1. Pattern generation — select combinations of 4 bright centroids; compute 6 pairwise angular separations and normalize into 5 edge ratios (a geometric invariant)
  2. Hash lookup — quantize the edge ratios into a key and probe a precomputed hash table for matching catalog patterns
  3. Attitude estimation — solve Wahba's problem via SVD to find the rotation from catalog (ICRS) to camera frame
  4. Verification — project nearby catalog stars into the camera frame, count matches, and accept only if the false-positive probability (binomial CDF) is below threshold
  5. Refinement — re-estimate the rotation using all matched star pairs via iterative SVD passes
  6. WCS fit — constrained 3-DOF tangent-plane refinement (rotation angle θ + CRVAL offset) with sigma-clipping, producing FITS-standard WCS output (CD matrix, CRVAL)

Parity flip detection

Some imaging systems produce mirror-reflected images (e.g. FITS files with CDELT1 < 0, or optics with an odd number of reflections). In these cases the initial rotation estimate yields a reflection (determinant < 0) rather than a proper rotation. The solver detects this by checking the determinant of the rotation matrix; when negative, it negates the x-coordinates of all centroid vectors and recomputes the rotation.

The SolveResult includes a parity_flip flag (bool / True/False in Python) indicating whether this correction was applied. This is critical for pixel↔sky coordinate conversions: when parity_flip is True, the mapping between pixel x-coordinates and camera-frame x must include a sign flip.

Tracking mode

When you already have a rough attitude estimate — typically the previous frame's solution in a video-rate star tracker, a propagated gyro estimate, or a coarse attitude sensor — you can skip the lost-in-space pattern-hash phase entirely by passing an attitude_hint:

Rust:

use tetra3::SolveConfig;

// Reuse the camera model from the previous solve so the refined focal length carries over.
let config = SolveConfig {
    attitude_hint: prev_result.qicrs2cam,
    hint_uncertainty_rad: 1.0_f32.to_radians(),
    camera_model: prev_result.camera_model.clone().unwrap(),
    ..SolveConfig::new((15.0_f32).to_radians(), 1024, 1024)
};
let result = db.solve_from_centroids(&centroids, &config);

Python:

# `attitude_hint` accepts either a 4-element [w, x, y, z] quaternion
# (Hamilton, scalar-first) or a 3×3 rotation matrix.
result = db.solve_from_centroids(
    centroids,
    fov_estimate_deg=15.0,
    image_shape=(1024, 1024),
    camera_model=prev_result.camera_model,
    attitude_hint=prev_result.quaternion,  # or .rotation_matrix_icrs_to_camera
    hint_uncertainty_deg=1.0,
)

The solver projects catalog stars near the hinted boresight, nearest-neighbor matches them to centroids, and runs the same Wahba SVD + verification + WCS refine path as lost-in-space. Tracking succeeds with as few as 3 matched stars (lost-in-space needs 4) and is robust to pattern-hash failures from sparse / low-SNR fields. On failure it falls back to lost-in-space automatically — set strict_hint=True (strict_hint: true in Rust) to opt out of the fallback.

See docs/concepts/tracking.md for details on hint uncertainty, quaternion convention, and limitations.

Stellar aberration correction

Stellar aberration is the apparent displacement of star positions caused by the finite speed of light combined with the observer's velocity — analogous to how rain appears to fall at an angle when you're moving. For Earth-based observers, this shifts apparent star positions by up to ~20" (v/c ≈ 10⁻⁴ rad). Without correction, the solved attitude is biased by up to ~20".

To correct for aberration, pass the observer's barycentric velocity (ICRS, km/s) via SolveConfig::observer_velocity_km_s. The solver applies a first-order correction (s' = s + β − s(s·β)) to all catalog star vectors before matching and refinement, producing an unbiased attitude.

The convenience function earth_barycentric_velocity() provides an approximate Earth velocity using a circular-orbit model (~0.5 km/s accuracy, sufficient for the ~20" effect):

[!NOTE] Enabling aberration correction shifts the entire solved pointing by up to ~20", not just the within-field residuals. This is the physically correct result — without it, the reported attitude is biased by the observer's velocity. Most plate solvers (e.g. astrometry.net) do not account for aberration, so comparing results may show a systematic offset of up to ~20" when this correction is enabled.

[!NOTE] For a near-Earth observer, Earth's orbital motion around the Sun (~30 km/s) dominates stellar aberration, producing ~20″ shifts. Earth's surface-rotation contribution (~0.46 km/s at the equator) is only ~0.3″ and can usually be neglected. LEO orbital velocity (~7.5 km/s) is ~25% of Earth's orbital velocity and produces ~5″ additional direction error — not negligible for star trackers on LEO spacecraft. Pass the observer's full barycentric velocity (Earth-around-Sun + spacecraft-around-Earth + ground-based surface rotation, as appropriate) to get an unbiased attitude.

Rust:

use tetra3::{earth_barycentric_velocity, SolveConfig};

// days since J2000.0 (2000 Jan 1 12:00 TT)
let v = earth_barycentric_velocity(9321.0);

let config = SolveConfig {
    observer_velocity_km_s: Some(v),
    ..SolveConfig::new((10.0_f32).to_radians(), 1024, 1024)
};

Python:

from datetime import datetime
import tetra3rs

v = tetra3rs.earth_barycentric_velocity(datetime(2025, 7, 10))
result = db.solve_from_centroids(
    centroids,
    fov_estimate_deg=10.0,
    image_shape=img.shape,
    observer_velocity_km_s=v,
)

Catalog support

Catalog Format Notes
Gaia DR3 + Hipparcos .bin (binary, magic GDR3) Default; merged catalog with proper motion. Bundled in gaia-catalog PyPI package
Hipparcos only hip2.dat Legacy; requires hipparcos feature flag

Tests

Unit tests run with the default feature set:

cargo test

Integration tests require the image feature and test data files. Test data is automatically downloaded from Google Cloud Storage on first run and cached in data/:

cargo test --features image

SkyView integration test

Solves 10 synthetic star field images (10° FOV) generated from NASA's SkyView virtual observatory, which composites archival survey data into FITS images at any sky position. These use simple CDELT WCS (orthogonal, uniform pixel scale). Each image is solved and the resulting RA/Dec/Roll is compared against the FITS header WCS.

cargo test --test skyview_solve_test --features image -- --nocapture

TESS integration test

Solves Full Frame Images (~12° FOV) from NASA's TESS (Transiting Exoplanet Survey Satellite), a space telescope that images large swaths of sky to detect exoplanets via stellar transits. TESS images have significant optical distortion and use CD-matrix WCS with SIP polynomial corrections. The science region is trimmed from the raw 2136×2078 frame to 2048×2048 before centroid extraction.

The test suite includes:

  • 3-image basic solve — solves each image and verifies the boresight is within 30' of the FITS WCS solution.
  • 3-image distortion fit — fits a 4th-order polynomial distortion model from each solved image, re-solves, and verifies the center pixel RA/Dec is within 1' of the FITS WCS solution.
  • 10-image multi-image calibration — solves 10 images from the same CCD (Camera 1, CCD 1) across different sectors with 4 tiered solve+calibrate passes (progressively tighter match radius and higher polynomial order). After calibration, all 10 images achieve RMSE < 9" and center pixel agreement with FITS WCS < 3".
cargo test --test tess_solve_test --features image -- --nocapture

Roadmap (not in order)

  • Deeper Gaia catalog — support fainter limiting magnitudes for narrow-FOV cameras

Credits

This project is based upon the tetra3 / cedar-solve algorithms.

  • cedar-solve — Steven Rosenthal's Python plate solver, which this implementation closely follows for the star quad generation and matching. (excellent work!)
  • tetra3 — the original Python implementation by Gustav Pettersson at ESA
  • Paper: G. Pettersson, "Tetra3: a fast and robust star identification algorithm," ESA GNC Conference, 2023

License

MIT License. See LICENSE for details.

This project is a derivative of tetra3 and cedar-solve, both licensed under Apache 2.0 (which in turn derive from Tetra by brownj4, MIT licensed). The upstream license notices are included in the LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tetra3rs-0.7.0.tar.gz (141.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tetra3rs-0.7.0-cp314-cp314-win_amd64.whl (475.4 kB view details)

Uploaded CPython 3.14Windows x86-64

tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_x86_64.whl (595.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_aarch64.whl (576.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.0-cp314-cp314-macosx_11_0_arm64.whl (533.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tetra3rs-0.7.0-cp313-cp313-win_amd64.whl (460.6 kB view details)

Uploaded CPython 3.13Windows x86-64

tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl (595.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl (575.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.0-cp313-cp313-macosx_11_0_arm64.whl (532.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tetra3rs-0.7.0-cp312-cp312-win_amd64.whl (460.8 kB view details)

Uploaded CPython 3.12Windows x86-64

tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl (595.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl (576.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.0-cp312-cp312-macosx_11_0_arm64.whl (533.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tetra3rs-0.7.0-cp311-cp311-win_amd64.whl (462.8 kB view details)

Uploaded CPython 3.11Windows x86-64

tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl (594.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl (576.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.0-cp311-cp311-macosx_11_0_arm64.whl (534.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tetra3rs-0.7.0-cp310-cp310-win_amd64.whl (462.8 kB view details)

Uploaded CPython 3.10Windows x86-64

tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl (594.9 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl (576.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.0-cp310-cp310-macosx_11_0_arm64.whl (534.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file tetra3rs-0.7.0.tar.gz.

File metadata

  • Download URL: tetra3rs-0.7.0.tar.gz
  • Upload date:
  • Size: 141.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tetra3rs-0.7.0.tar.gz
Algorithm Hash digest
SHA256 419c2a58a6c73f4fc89de4159bc35e516156debec749c7949c3fca9bad1a6b1e
MD5 12f613f426ca6a7196d9331d8fc2f174
BLAKE2b-256 d423bc7a75564b42c349cfdbebead7e64a61c177317bb21cabc154243f48bfc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0.tar.gz:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 475.4 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tetra3rs-0.7.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a281853317caf0c6c715acc97e6a3923a7f4e10e8302852b347cd8521b5aa418
MD5 9c77feaf021b3299e4a5e02fc544bf9b
BLAKE2b-256 ee816cacb7945405f27aa52290b10b9056bc3c287e322f949a706dc0eca3151a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0aa87df08b39ce0385c71a90f19b3d37194e2a0a8e761f3dfb303e048b1c5ef4
MD5 8577b9cc06c2741189e68732ba565274
BLAKE2b-256 c133d08034e44247a92abadf7115167e0908f2e27dd7891973b82300e8903aad

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 84f0c626b9050cd47128b6b1c1c5a81ca9cc5395ecd46daba3f61baa0688aecb
MD5 d139683652ee1f9a2cf87fa2e50aee75
BLAKE2b-256 0cbc3f0574267a5988b37da0d6450592ddd97e2e948ba650894936be7e97da69

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp314-cp314-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9024188c4b27e0dd7d7ffebdce2a0c3c4c9b383c4eb2b6859ca219af7775616
MD5 0b0e98eda204ea6dab9f0063bd4faf94
BLAKE2b-256 e1e093074963c403cdf1e6c28a0e8784592ea7c46707fa6c49cbfc5885d5c8dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 460.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tetra3rs-0.7.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 5357319ca641ae0d563f8ea782b85a219df300d44c18fb2461b97223d6c7de3a
MD5 7fcc9745b3acdb864dac222c139f72d6
BLAKE2b-256 1a687560ccd81ac4ab719ea81e55cddb44b5c2834cb3fc03944a2d88e42b556a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a1c13b23b6d5d7d3e8dd7181120a8fe89da6848f306bb110dea3bed17957c07e
MD5 37d917065699c4918193a79d6c8e4a6b
BLAKE2b-256 29834ebdb8ecaaace8cd8539de03ba66a4458eba802e41b5503e0b86e57c9f32

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ea4d503c3966ba010ed0d5d645b00c4a8461fc14d07eacce27346429e2ec0c49
MD5 9093aedf85ee48629c8248da5f20ab45
BLAKE2b-256 cb841548d78b7378fa08066714a32882625c12365755308d43ca9d69f9edbe1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff5503b5c268ec556917dcda563584da8ce23f537eae1b0f38fe9b09533c764c
MD5 576cd93e809685f61c1c2fa9b7a6a817
BLAKE2b-256 dbfd18ea8a317f7398314f687d4362586cc83adeae010fa9304205a519a51776

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 460.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tetra3rs-0.7.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b0dc13cb501b3070868aca2b8ac1bd1b017d960531e1e61c4590e2c117b81359
MD5 d088f09c797d0922f1e64bcf563c0ad6
BLAKE2b-256 4892c003c66a0de454157d63056ce7befb842a49ba4b620f9026667a7f015653

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 04f66f690af28640423d84693a9205a962c80fb53a203dcf5b1f24d35d4d6794
MD5 f040a1d3f22cfcf242dc0fbfe5af8f4d
BLAKE2b-256 cc23ea84b677a6c51ef959a12aeaea2b926373f65daf578567a3459026f6d88e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 24028ccb97bd94e5e1025c421db4380f5eb64796496230b8fe292d4460dd1a68
MD5 5f3c6d6e2ce94ac41896eef14f356303
BLAKE2b-256 54c3755846c00dfeef4a34774f251520187df2d67ac4aca218c9abf3a69565da

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ff87feecf0eb6679dd07bc45338081ff07f4239dd8e5f6c9bce05da00cda45a
MD5 6f3dc03e719a39725d9e7dc6a0dfdd4c
BLAKE2b-256 d914695bbfe2bf72c97a3036e62ec7ac51ff553428631417e734444e5ff39a96

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 462.8 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tetra3rs-0.7.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2593b0f5f44a775076d56c36434e8bea73d5c2764c441423cd8f48632cfbe182
MD5 2203a851144dc6ab8bd4afecb52906f3
BLAKE2b-256 44d489dba60e9f988326e1f8b27c2953f1d0929dfa9797df498064eb7a84bbec

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 379bf734cd417172568a11942a32923b41dd8e8c5d2dc59cee9f34696be88899
MD5 bcdbc0a26aeb8f443b8af05daba209ec
BLAKE2b-256 04a636ca6cbabf06c5207877e7cada565b1c83fbff086e9db57371f27432e7f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a8ad256ee1817b1aa6f3d9f8eb35603c757c905da7f201eb27779c6fba7ce031
MD5 87860a4de8b073a42f5ae5970cf73594
BLAKE2b-256 34932e717ccb3b6eb5d71e819cd482d8b41750562a87df296eb7dbfaf6be9c4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c21ef82db67907c0958391d6b79d6de971108d2a3f6eb1e4b0961d86c13441d
MD5 2b59172120ecc3a56bfaf1fd267fe5c4
BLAKE2b-256 ad1721e2fb1a6001f8666e583df9ec3d9c42e90053e3d458a60326da0a1f3414

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 462.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tetra3rs-0.7.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d453b0fdf225b0e6b8535794dadb534b1c32127613741d091acb03f6abdf619f
MD5 d667c6f6c9a59eefe4578ebf69324e70
BLAKE2b-256 e70e5e09b4320a8c2ba2ae2c2c6c94ccb24694edc1b49a041740fad93e400c60

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9e2c9fe1f91bb0ddf1dbbbb6aad6c1f57bcea3246cdb267cdb166f6121c18f5e
MD5 c44d3aa069da925713e6463b6bc20430
BLAKE2b-256 374280d6a1d15ff16b140e00d0181fc601916a1c454ef975a7e4cc65f000c452

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 07c394d351e3bcd532e9732c384d5d4beb5cd954faff8547a9620d11891e94dd
MD5 4a79e7c55a57a9f721d66c84f791f027
BLAKE2b-256 8e447beefaf3df3237be8ed1330b5ba56c8174e303629ad6409ec823a4a82055

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tetra3rs-0.7.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a523d30deb26ae650ffc0d49838df0158c3978434a2f12dcd040a41669e995fa
MD5 99fe4ae8d445a55d2357a38cc2db213f
BLAKE2b-256 6a44fb549931778a0227d2f63bb604329578f791b0edc38a4edb42976615d544

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on ssmichael1/tetra3rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page