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 near-Earth observers, stellar aberration is dominated by Earth's orbital velocity around the Sun (~30 km/s). The surface velocity due to Earth's rotation (~0.46 km/s at the equator) and LEO orbital velocity (~7.5 km/s) are small by comparison and can usually be neglected.

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.0.tar.gz (135.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.6.0-cp314-cp314-win_amd64.whl (490.1 kB view details)

Uploaded CPython 3.14Windows x86-64

tetra3rs-0.6.0-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.0-cp314-cp314-manylinux_2_28_aarch64.whl (596.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.0-cp314-cp314-macosx_11_0_arm64.whl (550.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tetra3rs-0.6.0-cp313-cp313-win_amd64.whl (475.3 kB view details)

Uploaded CPython 3.13Windows x86-64

tetra3rs-0.6.0-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.0-cp313-cp313-manylinux_2_28_aarch64.whl (596.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.0-cp313-cp313-macosx_11_0_arm64.whl (550.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tetra3rs-0.6.0-cp312-cp312-win_amd64.whl (475.6 kB view details)

Uploaded CPython 3.12Windows x86-64

tetra3rs-0.6.0-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.0-cp312-cp312-manylinux_2_28_aarch64.whl (596.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.0-cp312-cp312-macosx_11_0_arm64.whl (550.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tetra3rs-0.6.0-cp311-cp311-win_amd64.whl (478.1 kB view details)

Uploaded CPython 3.11Windows x86-64

tetra3rs-0.6.0-cp311-cp311-manylinux_2_28_x86_64.whl (618.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tetra3rs-0.6.0-cp311-cp311-manylinux_2_28_aarch64.whl (597.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.0-cp311-cp311-macosx_11_0_arm64.whl (550.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tetra3rs-0.6.0-cp310-cp310-win_amd64.whl (478.2 kB view details)

Uploaded CPython 3.10Windows x86-64

tetra3rs-0.6.0-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.0-cp310-cp310-manylinux_2_28_aarch64.whl (597.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tetra3rs-0.6.0-cp310-cp310-macosx_11_0_arm64.whl (551.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: tetra3rs-0.6.0.tar.gz
  • Upload date:
  • Size: 135.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.6.0.tar.gz
Algorithm Hash digest
SHA256 3db777a29e7bc29701ae268cd098d8a327e58cdfec29df1e8b2f8f79884a906b
MD5 c5cd6d4ae136a52f9c9cc905542b69d0
BLAKE2b-256 5f3042e27bbe3ef03b58229c25c063cee478823cca6cbfd44396957bfaaf4ec6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 490.1 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.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 5786a2a9e550d922fd7d50648be2812cfaffc8a5c6c166efb98f702d6fbeed51
MD5 47582780ddf7b8070bd2bfe08f6f7b1b
BLAKE2b-256 42fbb9563ab8c303c76479934b3a2a91207ea44056010b36a99f87841bc012d3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 95fe101e754f36154094f5bf6b4b2ced54c2de6fcedf72a99402552eb225e2a7
MD5 1fd9b750be51b2fc9ad0b35330ef9965
BLAKE2b-256 8a48b74a17d9c18f89be4e99ab81b6241889e07d3d3da6e289f68c720f5b27b0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d0e2f401be320fc4cfa36302e9c8a3cc70ca927b57b7677121b6b89708371b61
MD5 e1a60c52006416e628545ef2ea95fb78
BLAKE2b-256 f34edb8113c725d4910232f35a1c15a80a942ed520fb1bca81dc299a8aaa298b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8712356f527816868c481f23f108c37c8b43230aaae6302cd6c944ee65feaa99
MD5 79b0e6d4da4056b6f6674116fa212ac4
BLAKE2b-256 a19385cb47d2b21a91e3b32599db22ddcf272e2bdc2d3d6e081749b0564f64ae

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 475.3 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3612f86ae113e35d05756254dfca3f66d8085dd696bad172dbe1b8d08ee9d81a
MD5 5e8b7a4599ac895bf462cf286e62c755
BLAKE2b-256 876f8bc7255185baab2fd05602e2d564cd244da752481b12f1cf7449f61c3da4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 866edb5b8b00aae9ad47cdd18e962850d3601791797501fc8012eb9412bc0daa
MD5 4a11e4a6bd0e5bbe089f05a481654fb2
BLAKE2b-256 5d47cbbf59f699dc8865ab777f151d28de534377dbbaf3f1fc448f3c19e6677c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f6756b6f27985bc9def7c462eb792182ee527e1725141288918affca68d4c674
MD5 6247688792bfc142d3a69512a0d6bb3d
BLAKE2b-256 e0f0f4687300536b90cae49111387f843cbef088cd0c9bb2d9bf01f7626a00c5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d6b68e5b29149603272d831d640bd2e3b6b403cae337bf8b871f881c10eef29
MD5 3b139d5b00af55dcbfcb80f3e98f1edd
BLAKE2b-256 97d8cbfd83187e44b3de8ae3e9719e5bdf5438c9540d3c95504a94174998fcbb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 475.6 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1045db1be84992b3ae5ab24e04ca34e61ac71be6204c213ecdc81ce1b82ca65a
MD5 ff7f272aad108fd715619d64c3a52c0a
BLAKE2b-256 d12427eb770bc4ea7947ae9a69d29b356adb543147f99f56aa51557bc4c74813

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 41582c67348dbdc92d7f56b9fbe4c09a377fde150167f5bb181fc676e388bc09
MD5 4affb8e69b509ccf34878a234aed9c2f
BLAKE2b-256 71aaa7876f31823f298ba7b54e74138c2f3bf9544dadbf08cb406e0956435877

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 9518a342df1234bfe7b5910da19126daf643a8ec83e123af7875647fda0a3d9d
MD5 24d76acdc6f720c325fc860b400afe7b
BLAKE2b-256 61cb79f4763cbe9bc0ede26dbdbd1957ba0c7d137fbe58f3c0b7b1ad444d11d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8acdb3efaedfab414ab8b972144df9d0f5a1d8758c966ea8bdd6c759537ce6d7
MD5 9103e4bda2014feb1d2ec8463a0295c2
BLAKE2b-256 22ffa540ab331d0f7c0aa1a4a7697f7e5b3d38bc1a84141ee60ff4a56fd32a5c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 478.1 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f75a2758b02ddc3ae18be3fe040c4f41c28161ba96f30d700cf53db88bd1a468
MD5 c13ccda060bcb5e958b8842c5154603d
BLAKE2b-256 9594e5c7773755de048285ea06531b36b103fa1b1ca1f314d3bc1d364cbd7ee1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 09290c945f7a0069a23b3efc668121c5f09a3b2bab016bb43ea930c63fa6c4c1
MD5 acf3a1ab14dad797b51857cc021a268a
BLAKE2b-256 50c1bae17db96b2ef9ce5c9028613029120cf0b2d0e3b53aa79ca34b395cb45c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6af3ede23e544cfd6d874f80004fc2f3463530d1f898d03a39cad3ba660bdd80
MD5 5ec9cbf6da56b2cc9d0f66bf29773aae
BLAKE2b-256 0aaacf0114f19eb29d87c83558c2127184f2917f4d9ef7a8c35de476093af597

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 81b2e4b21b7397f8f292ec3914a1e40e9f204b6be4407bd099a0142400f21887
MD5 0391f8b80a5d61c68bb5ae4a701372a6
BLAKE2b-256 b018504a24ef5fa9727cc4bd2d188e5fdf07f570f8a12f625c12d38b3e9432e7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.6.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 478.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.6.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8479ab563c0d21335d6fe0076b2ca208c1426fec338768b64469725b560d4932
MD5 9d27685817135c452553f530ea519c82
BLAKE2b-256 12765e9e39622db95f44a9ac5cb6aa29cf2b0cd3bd1fc7fd53e1684d3fbcf0ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d368bc2c0a89129a230f5016982cc037bfc05ee94e661ba0f113063e225de46d
MD5 d6bcf1c9479a4b51c28508719d088af7
BLAKE2b-256 4a7661952b3802b81e99833df57794269a706caba1d7cc961174fa793a120c72

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7dec84b67d927fe0f2e93d38ba76a1230414bc3533ee6ed1b2057ff41bba8a48
MD5 9742e7e93b68e1703ff43fb663bfd3bd
BLAKE2b-256 06225a3dd9093eda765848e9931861a577286d020f245941cb524d306ee1f03e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.6.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51e9497b705f7db615463fbe25d983a35a7e728845396afd3edccb58ebc0ea27
MD5 56e56834ec3c767ed24d0108b711cf55
BLAKE2b-256 ca68840d13fe8ba2facf3768c270d2f21ece67e506562931c35b382074d72bc2

See more details on using hashes here.

Provenance

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