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 (G < 10, ~17 MB):

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. Two scripts live in scripts/:

  • download_gaia_catalog.py — ESA Gaia Archive TAP server. Canonical Gaia source, but the server enforces a hard 3,000,000-row output limit per async job for anonymous users, so bulk queries top out at G ≈ 11.5.
  • download_gaia_flatiron.py — Flatiron Institute's flathub service. Serves the full Gaia DR3 catalog without the faint-end cap; use this if you need G > 11.5. flathub is not on PyPI — install it from the upstream repo.

Both produce byte-compatible output and share the Hipparcos bright-star merge. See the Star Catalog docs page for setup, CLI flags, and the on-disk format.

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

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.4.tar.gz (153.6 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.4-cp314-cp314-win_amd64.whl (478.5 kB view details)

Uploaded CPython 3.14Windows x86-64

tetra3rs-0.7.4-cp314-cp314-manylinux_2_28_x86_64.whl (597.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.4-cp314-cp314-manylinux_2_28_aarch64.whl (579.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.4-cp314-cp314-macosx_11_0_arm64.whl (537.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tetra3rs-0.7.4-cp313-cp313-win_amd64.whl (463.4 kB view details)

Uploaded CPython 3.13Windows x86-64

tetra3rs-0.7.4-cp313-cp313-manylinux_2_28_x86_64.whl (597.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.4-cp313-cp313-manylinux_2_28_aarch64.whl (579.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.4-cp313-cp313-macosx_11_0_arm64.whl (536.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tetra3rs-0.7.4-cp312-cp312-win_amd64.whl (463.3 kB view details)

Uploaded CPython 3.12Windows x86-64

tetra3rs-0.7.4-cp312-cp312-manylinux_2_28_x86_64.whl (597.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.4-cp312-cp312-manylinux_2_28_aarch64.whl (579.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.4-cp312-cp312-macosx_11_0_arm64.whl (537.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tetra3rs-0.7.4-cp311-cp311-win_amd64.whl (465.2 kB view details)

Uploaded CPython 3.11Windows x86-64

tetra3rs-0.7.4-cp311-cp311-manylinux_2_28_x86_64.whl (597.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.4-cp311-cp311-manylinux_2_28_aarch64.whl (579.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.4-cp311-cp311-macosx_11_0_arm64.whl (537.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tetra3rs-0.7.4-cp310-cp310-win_amd64.whl (465.2 kB view details)

Uploaded CPython 3.10Windows x86-64

tetra3rs-0.7.4-cp310-cp310-manylinux_2_28_x86_64.whl (597.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.4-cp310-cp310-manylinux_2_28_aarch64.whl (579.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.4-cp310-cp310-macosx_11_0_arm64.whl (537.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: tetra3rs-0.7.4.tar.gz
  • Upload date:
  • Size: 153.6 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.4.tar.gz
Algorithm Hash digest
SHA256 6d22bf0ca57e2d8d8c974bd072cad68172587e3e760add68081076fec2cf0f94
MD5 1ce1386dba7907f81e101907911b3a35
BLAKE2b-256 683688ca4d7fdd280d556bdc4c589e0c732dc68a6b063ccdad4b12cce928def7

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4.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.4-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.4-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 478.5 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.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d18ca504ba73a915016011e8c5e44335ec5305e42a1f941649510be4540096fc
MD5 82fc7e36e61d7bcba719f46dae07c56c
BLAKE2b-256 b519297e4003686d44701a8922d529925799fec141c3a7b78e5655207187a278

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 282e7b2ba334e99c26fb5b49a556ea3e7aa9d018020eeadc0d349505f595459a
MD5 f270754eaa0eb57c8f01d31bfe072c63
BLAKE2b-256 43c4013a1feefd9a7df5cde64ac6613e4953d5ac8e3bb721d278e014b0212b1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 90e2db5e71f48887e28e3a243d87a1cd54cfd613e7c86adfef03b3865ac687da
MD5 4a1f9825e4c0b85d93c6c47f2000dcfd
BLAKE2b-256 6fd2076c45da31d6af1603b89ddcf81947ff3aa3a0dca3d99ea8b6dbd159dbaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 20683bd561adda7c93094218ded45267fb37c166b300f8e93531bd1f30009e23
MD5 e8218bb8af307247608085a65e17f269
BLAKE2b-256 89b9d753d7882e514a231de55fa5d377de8f3a03d81106dfa5e3d41075226a00

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 463.4 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.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 6c702528556b8e73ec38d26f11d07c7a90bbf68e6beaca9e92ecf16510dd180c
MD5 e166912a9598558444e5e4b863a7b30e
BLAKE2b-256 04f8f8c2e4b5b7e4df63d371bd617cdd28792f7dc9cfe1d372888c761d6d4363

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3721cc73f8e637ef0ee147288b78d71b82125676fd1bb5116a92cc8101b2f3fd
MD5 e1e4fb8ced9dae26e8a56d547be64b65
BLAKE2b-256 739adb38c1c5ac162831f484114604e4192c07290d78eca212a31fbe50094d68

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bdaac82352393e01236ffffc1c7b3d953af33424ab6137ea1436086ea63c3789
MD5 f2c63a61b9749edaf1c026e0bcbb1cff
BLAKE2b-256 bdeda5a7692fd7ae3418096b1fc73c1d910654128602db1db5ad29c5e41ff0a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1dcbf73c5cd78cb864eb26fcda5f7bffe6a965d69bb724a6b7f020fb44249454
MD5 3d975bcd7f396d11d938c5e237cb9a6b
BLAKE2b-256 34b711eafdd2dccdd70b35e31f9878bd6349d2898394ac01073ba1c44cf68c23

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 463.3 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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 fbfab4815106ee71b6516047cbc95d8b616f78c26fe4cd285c55eb9e59be27ba
MD5 687fcf541e6afdd6f3f82522e02c80b1
BLAKE2b-256 73116e697318589801343464706e581c8eea45773a5d90f6fcd1d929b5396f8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ed2a18969d3763e2ad740bdb2bc46baeb5056c7ad22d9a7193dac72243f5427
MD5 eb8ad90e32f15cba1a2265ca9f3cba63
BLAKE2b-256 ebc00af1379305c5b551248efd6b041c61539ee025125b613acb06007de75bf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2f07a5b899c517642fd665f237bb68df64870769c1bc7135ef4dfb271844cbf1
MD5 4a9e9938d1dc906262fc2040724cad53
BLAKE2b-256 5cbbed5f1cfa1fe56c61b2b22a0dcbe65aa5f13ad9922185d50565a6ba3a6ea3

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fd981e08ac0ed61e56a0aad1f340b55cc750e6a8e5fffe86c904e1bbfda40c57
MD5 7d582345024ba24b587cc497dd85b404
BLAKE2b-256 27d369df25c9eede90475a6f1ca9177892a0c3920e439595d85ecb596614cfae

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 465.2 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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4f34affde99fa31f701882f6da03d11fd27e40d00454897e71769b9abd567e0d
MD5 37223bdda713b6dbf25ea737d6cf4ecb
BLAKE2b-256 7bf673ba3c96eb3858a5e5adb78a5a330289a8dfca6afcfffbb3eb2928209438

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 106c6088eba85375014d1c45dbd724326f2da660b88a412c0661303b187a053b
MD5 c6e340949bce50e7d0c92018f730f5d9
BLAKE2b-256 5aac3e4e5d4bb5d0d8190b075557a7ebcee19b80abaecefdc9c813ddd98b244c

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9bd6bd6dff30a1997a5ed33015f9d51244a48f22ad12fdf26c8759e0dbe44506
MD5 f20fe82f846f6ee24959b0d5ca07fe02
BLAKE2b-256 aa44eea29556e10a024c1c1e15f0c4318644cc313183bb3e3da14370a09d0544

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f41d3e61b18df8710b79e443047992ffff3a6dba4597a9b369bcf630e7a8f02
MD5 49e85aa08ce30ad3f08a82c8b14c8c34
BLAKE2b-256 ef7b08000e812561dbeca98e9a2ced0417e43ab5e0197a5fe9e699f9d9f1d79e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: tetra3rs-0.7.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 465.2 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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 708c7f1637830ebbb74248f5f124228d03ee542f6acafdc231a5b9677c0c452a
MD5 b446abaa5515ffcbea8fc89ef24ec142
BLAKE2b-256 154a210228c37444386eac7f9882e4253e79568de33977ce0efbc0d61ce98b47

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 17cda0f83feb8248e2a1e88d2c57939167b34d27be56da24f785e75b2c562e40
MD5 29cf1f69405e60a0be39eff08e2f2efc
BLAKE2b-256 1c70e1df5d887b0a83d998189cad3d22daa8f345c1706e66b61864b70d0063b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 893ca4cd37a93ed6a02a038cf0076f2b417e7a9634d6c89e5ddd8da33b373445
MD5 71c53ef64f34586e420f7f7628038a2a
BLAKE2b-256 cecd1b24bb8b6caf1d712f77307a40fee28b64b21604733854622344b8cf1f0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tetra3rs-0.7.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 21acb28ff59133b15c1cd618993c3a6d13861b8b0551a0f4127f2643d7e89d4d
MD5 e8d8f50336ecb699ef311c841730eb75
BLAKE2b-256 d8745fb9460b015a8fcecd0643be1f040844ee15ca745efb36ed804349fb573d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tetra3rs-0.7.4-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