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.

[!WARNING] 0.6.0 is a breaking release. The .rkyv solver database file format changed (sharded pattern catalog to support multiscale databases > 2 GB), and the Rust SolverDatabase::pattern_catalog field type changed from Vec<PatternEntry> to PatternCatalog. .rkyv files written by 0.5.x or earlier will not load under 0.6.0 — regenerate via generate_from_gaia. 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
  • Zero-copy deserialization — databases serialize with rkyv for instant loading. The pattern catalog is sharded so databases of any size (including wide-FOV-range multiscale databases that exceed 2 GB) can be saved and loaded safely
  • Centroid extraction — detect stars from images with local background subtraction, connected-component labeling, and quadratic sub-pixel peak refinement (requires image feature)
  • Camera model — unified intrinsics struct (focal length, optical center, parity, distortion) used throughout the pipeline
  • Distortion calibration — fit SIP polynomial or radial distortion models from one or more solved images via calibrate_camera
  • 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 zero-copy rkyv.

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.rkyv")?;

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

// 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) or .csv Default; merged catalog with proper motion. Binary format 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.6.1.tar.gz (136.0 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.6.1-cp314-cp314-win_amd64.whl (491.7 kB view details)

Uploaded CPython 3.14Windows x86-64

tetra3rs-0.6.1-cp314-cp314-manylinux_2_28_x86_64.whl (619.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

tetra3rs-0.6.1-cp314-cp314-manylinux_2_28_aarch64.whl (596.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.1-cp314-cp314-macosx_11_0_arm64.whl (550.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tetra3rs-0.6.1-cp313-cp313-win_amd64.whl (477.1 kB view details)

Uploaded CPython 3.13Windows x86-64

tetra3rs-0.6.1-cp313-cp313-manylinux_2_28_x86_64.whl (619.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tetra3rs-0.6.1-cp313-cp313-manylinux_2_28_aarch64.whl (596.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.1-cp313-cp313-macosx_11_0_arm64.whl (550.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tetra3rs-0.6.1-cp312-cp312-win_amd64.whl (477.4 kB view details)

Uploaded CPython 3.12Windows x86-64

tetra3rs-0.6.1-cp312-cp312-manylinux_2_28_x86_64.whl (619.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tetra3rs-0.6.1-cp312-cp312-manylinux_2_28_aarch64.whl (596.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.1-cp312-cp312-macosx_11_0_arm64.whl (550.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tetra3rs-0.6.1-cp311-cp311-win_amd64.whl (479.9 kB view details)

Uploaded CPython 3.11Windows x86-64

tetra3rs-0.6.1-cp311-cp311-manylinux_2_28_x86_64.whl (618.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tetra3rs-0.6.1-cp311-cp311-manylinux_2_28_aarch64.whl (597.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.1-cp311-cp311-macosx_11_0_arm64.whl (551.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tetra3rs-0.6.1-cp310-cp310-win_amd64.whl (479.9 kB view details)

Uploaded CPython 3.10Windows x86-64

tetra3rs-0.6.1-cp310-cp310-manylinux_2_28_x86_64.whl (619.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tetra3rs-0.6.1-cp310-cp310-manylinux_2_28_aarch64.whl (597.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.1-cp310-cp310-macosx_11_0_arm64.whl (551.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for tetra3rs-0.6.1.tar.gz
Algorithm Hash digest
SHA256 414f03a4465d5ffe7f89d64a595b5238078392f7fc63c7fe402bc5cc06e10cdb
MD5 9f3307262abbc4cb527f21232da6f34f
BLAKE2b-256 13fcb81250cd9131102a0be08275bc9fb16d4ff0968f04e7454e17427b02acc4

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 491.7 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.6.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ac48ac2bb5323dc90f1e16bf688bbcc5b97b01a2355f1d682af651c8caf4180b
MD5 f92bccd0400e2c4397d1a08a19cda82b
BLAKE2b-256 7311cd89c54b05c1c104d965a78f22561353351a890b2d26b4adeac75e8ccfcc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5199250c14b93412e0f5e6d64a97ac77e1996e1a186701f6549ed9c0dd13ed29
MD5 1fd79e3523de7f48fe5a288683bb3157
BLAKE2b-256 112c924d58f1e9443bf0e5589a5a736d4db4e3f8a802365c820c4e3a7ab60dc9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 efe041c0d8e32f349d9b248bf7be60a4a716e3e3614e82e0f3e45c1791b1d917
MD5 a65928ae7b069cf977aa229ed1bad94c
BLAKE2b-256 879f4260bb228504ae8afa90f772c76e26a39467ed25ca22cda71aae5e4fba60

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7536672f2b0113697fedc19bf17a4ea1a2fb7269fe24f4a9700b6dd766273ff9
MD5 244556ea35410fa2c259bde51bb82470
BLAKE2b-256 88fba4c422bf2fd3cf6acb55969420440fa09eb7893421f69fa3c25f689c45a3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 477.1 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.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4cb399c354ff7b78159daa2c5cadd417ab49eeca10fea45a5da4fd0310117449
MD5 942f286a0df685d2ded5af98f134ff6c
BLAKE2b-256 1138df20607cf97bb686fad26659087cd3fc6254c5cb02dfacf54e9aac9fbd5b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c4f96328331a5543bafa54bbf32bc6129f2d244219e5553ff8ab0c6f5fd1f7c9
MD5 98ef1734d4769c4c3a832c2a760d11d9
BLAKE2b-256 79647e98ea427fa6b82ee4ce47ee8ae481233ea0d3cf60207c13ff8bd4e7c53c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9e48f1bc69c0d84acc8bcd31695c38258940f04d8b70ff1187dee9e048007daf
MD5 d83f8f9130a3a83e4baec5bcf1271c22
BLAKE2b-256 722dda68758fef3a941682cc6df9a0e7675973a4a77d90a3f95e533390912a55

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0fc952161cb151a5703d88b686043936f45a4614a6071a520eb5b6ea2179aff0
MD5 9f2838c2648a4428f47e9841f1139c20
BLAKE2b-256 06dffee64d8664f64514d0634e295edd859664408bce41b3ac47a0ab1e5edc8c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 477.4 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.6.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 33ac535082b4cc1776dc3e802c0681668c79297c9b59dc5f50045e7f95599ab1
MD5 bcfd095a21f918c54aa7dcd07de85279
BLAKE2b-256 b63d1a9a7ef0d9e0611fa274c7af0d53b6b150fd8eb6c8e41cc710c80d1e3416

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c96400ad007257fd9d65f6b6ecfa134dfc6b21757429d3ca3f4cca390512f258
MD5 23f3e430b4b850bcd247c6d88c78e58a
BLAKE2b-256 78a5f1f6f07ebefd64a18c0e13a5adebe386b0b7732f35ee6699e77e11963260

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 adfe19386bb515f80e3ad5b4b216304a5ec84d79e796ec28b1ead044091082da
MD5 72341c6d71bce8780a380b45db7af8f4
BLAKE2b-256 22e634806290009ae8b382c7f4a04233c69131c651c5f21019df32f1edb4a999

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d700a0e89159c861a4ec1aadd5aa70f6c065090206b3c1c99e24a59b1d85fe61
MD5 7667df0375357f08135d1e87b35b1ab5
BLAKE2b-256 5d087aea63660f3b2b4e132e57c9ff4b403c3dddb5a2a7af7ea6a89d7c6b275d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 479.9 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.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e3e1c1dae4b1e23bd4262ce3a31ba62ac8b921ed87ed9e8ffa72e440c2a8a31c
MD5 2e5556e60f70ea8bc3fcbf8cc2a8194a
BLAKE2b-256 63b127a094e339592ccde156732edaa0045dc2979a0b2f73f4dc3136bcc337e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3d8633fb4b2eace0fb58e923294683da3bd9033b1a3cf2983f86ee445f16c741
MD5 308be05dd708d8635b5ec36f77270871
BLAKE2b-256 599de25990d2e21cfa77c41935a053381f7160a4b782753cfeb99a4453bd92c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e55cf54d4bc90ecce6aa32bd11a99c93579b55e457a86cc6e940dda966c361ec
MD5 ca23861fd9777ea54c306b526eb490f4
BLAKE2b-256 fa388a1f7ca74127636cda5e9e20dbe84eaab7267be8e7a21fdb3610c7466f4e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e708bb3c73f83ef9af8a41c25c74a8c2a82ec929bf6240a56a2b8f90d3f917e0
MD5 e42814cad516b7a6d1c481031e399081
BLAKE2b-256 d84155f423b01a765da59fdd29ec6e8da0ff2c13bc7cb38c09dcc03ad5cdb480

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 479.9 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.6.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f21d56df60a46521bff942f5a8b5751a29944b3000a45dae4bdfed702b58a87c
MD5 1cf545268d096347686afaef1b11f72c
BLAKE2b-256 d1bdb3b6b4f2d148bfb423925ef31c7c6c6e43e092a88655181965d309555f78

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 897ce0cd6d7ee472b055cbf44b88e6778ba56d3b04d66ef07519a34d801d66a7
MD5 ad18295d8f5b943222d8217e6ef38ff3
BLAKE2b-256 5a1a5cb0cef3bc1d1e6d2d5d26477ea2259a64817d7a24b0b0ed039d919b00ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4df2898629777a080295d6634e90796be7f310ca00f3f483a51246dbbe22f7e2
MD5 97afbac04971c1ecc22320f4546548a8
BLAKE2b-256 474b6c66765ac8a87cc4faaa0f9accdf1baa4a19498077803c388c08255b0a4f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d16ab45b91ae0fb0697dd9e391a7a019e1eb97a22cd268245a7985d6fb7878b1
MD5 5ceb8c6e1d9ca97d698501002db185b8
BLAKE2b-256 d8f8ca8ac9a98da484003db666f7428a4464b46448472fec5d5eedd0d9c771bf

See more details on using hashes here.

Provenance

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