Skip to main content

Fast star plate solver written in Rust

Project description

tetra3rs

Crates.io PyPI docs.rs Docs License Status

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

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

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

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

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

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

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

Features

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

Installation

Rust

The crate is published on crates.io as tetra3:

cargo add tetra3

Python

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

pip install tetra3rs

To build from source (requires a Rust toolchain):

pip install .

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

Quick start

Star catalog

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

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

Rust: Download the pre-built binary catalog:

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

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

Example

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

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

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

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

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

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

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

Algorithm overview

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

Parity flip detection

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

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

Tracking mode

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

Rust:

use tetra3::SolveConfig;

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

Python:

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

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

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

Stellar aberration correction

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

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

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

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

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

Rust:

use tetra3::{earth_barycentric_velocity, SolveConfig};

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

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

Python:

from datetime import datetime
import tetra3rs

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

Catalog support

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

Tests

Unit tests run with the default feature set:

cargo test

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

cargo test --features image

SkyView integration test

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

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

TESS integration test

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

The test suite includes:

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

Roadmap (not in order)

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

Credits

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

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

License

MIT License. See LICENSE for details.

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

Project details


Download files

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

Source Distribution

tetra3rs-0.7.1.tar.gz (142.3 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.1-cp314-cp314-win_amd64.whl (479.8 kB view details)

Uploaded CPython 3.14Windows x86-64

tetra3rs-0.7.1-cp314-cp314-manylinux_2_28_x86_64.whl (598.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.1-cp314-cp314-manylinux_2_28_aarch64.whl (581.7 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.1-cp314-cp314-macosx_11_0_arm64.whl (537.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tetra3rs-0.7.1-cp313-cp313-win_amd64.whl (464.2 kB view details)

Uploaded CPython 3.13Windows x86-64

tetra3rs-0.7.1-cp313-cp313-manylinux_2_28_x86_64.whl (598.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.1-cp313-cp313-manylinux_2_28_aarch64.whl (581.3 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.1-cp313-cp313-macosx_11_0_arm64.whl (537.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tetra3rs-0.7.1-cp312-cp312-win_amd64.whl (464.5 kB view details)

Uploaded CPython 3.12Windows x86-64

tetra3rs-0.7.1-cp312-cp312-manylinux_2_28_x86_64.whl (599.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.1-cp312-cp312-manylinux_2_28_aarch64.whl (581.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.1-cp312-cp312-macosx_11_0_arm64.whl (537.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tetra3rs-0.7.1-cp311-cp311-win_amd64.whl (466.5 kB view details)

Uploaded CPython 3.11Windows x86-64

tetra3rs-0.7.1-cp311-cp311-manylinux_2_28_x86_64.whl (598.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.1-cp311-cp311-manylinux_2_28_aarch64.whl (581.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.1-cp311-cp311-macosx_11_0_arm64.whl (539.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tetra3rs-0.7.1-cp310-cp310-win_amd64.whl (466.6 kB view details)

Uploaded CPython 3.10Windows x86-64

tetra3rs-0.7.1-cp310-cp310-manylinux_2_28_x86_64.whl (598.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

tetra3rs-0.7.1-cp310-cp310-manylinux_2_28_aarch64.whl (582.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

tetra3rs-0.7.1-cp310-cp310-macosx_11_0_arm64.whl (539.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: tetra3rs-0.7.1.tar.gz
  • Upload date:
  • Size: 142.3 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.1.tar.gz
Algorithm Hash digest
SHA256 842534ec8e6c42c9bb31532f15f1f5fd56f6eff1780b73f1aa1881f14e0e750e
MD5 fbb3e5d6c0ec9030efff80b858101181
BLAKE2b-256 bdddd74122f420726161b2cf2dafbf31b210620acfa9a92c44119469d2a5ca46

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.7.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 479.8 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.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 86c9e29a5b68abf87405bc5788ed929e092e8305cd81306708d946ddcc17071a
MD5 a82288461841f8808cee9c13c480eec9
BLAKE2b-256 8ad87c5ec0d3c41bef9c72e0f49bc0dea61b886cc482ea670da42acd9cd3b179

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 385264aeaa3c7bf89b5c8bab163ecd20254521c1aab912ee9b79707598aa2a58
MD5 f04dd5939bae9a1add348f799af10dc1
BLAKE2b-256 2dd65fbdff8b996de8e808f9b4df91ed4d1bb6eacffe16957beaa5d37194dd64

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 27b7a3148bbcd18e84a50d6b0339cf17aefca86c3ba2425a6b4416b73cd148e0
MD5 b0508c5329576e31b6d71e39f18b7025
BLAKE2b-256 f8d89b26a967c394e7e9508329567d08256bf6e4b1d3fe92b5a0bd66ddb51099

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6320b94b77bd556a560fe6ab71265b751fc53c845bcbca36d99ac664ba64b3e7
MD5 aabfdc733fac6d4e34769041e9add195
BLAKE2b-256 6351a70a8da1272d7300296e33a2d6da2df295a54e0e48cfd7d8eafe44c277c1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.7.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 464.2 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 eff8000f37845559949c0896f597ca0ca6f0f5a19c72aa4fdf9f3e860c502b61
MD5 bdb137996c25f67648bf4064afb26faa
BLAKE2b-256 69894d5470d0fae7f2b98913782cf1c7d3ea2ed2891a6e49b26f84cc98fbe01e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a81f44ed5db634e47a519eceed6b03bc8a352e1686e15cbc2936122eeb194767
MD5 b0c89ff6e00fdb24f69b44df735aa278
BLAKE2b-256 21f48afb172fd4d057a0b5c8d0ae815cbe0dcbeddbb52ca429b3800c60f245da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 352820fa1dd3982b9a3ce6a397d6f8c94472b47d84f0865f5b4ee7c21636784c
MD5 96e4913b1bce0b03b922865409ae0985
BLAKE2b-256 27a10bbe9bfb80c902771c4d35c0e59385413dfbc061041062f18b3dc40d66c8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4c6a858fb126572c542a43a5f7e244100556c2502435e98803cf80e6ab3c686
MD5 d1dd60504304d6709b1254b3527cea06
BLAKE2b-256 567a87667ee053a81c554543293ee2960c6943e56bf1adcdbb7344a07d7bc57a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.7.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 464.5 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ad721caa3595b8a21c5ff155d5a59a4f2777b938b147c07a222a20cfea8cb122
MD5 ae61d75b9937d4b01e7f249eb0f44d02
BLAKE2b-256 e32842fcb8bc48b33c1fb13ea696e71e266341f45a751e5ef944816b3d9c07cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5067f120ff1c33641dfae11625bad3e93f85b256fe659763ef1b4200bee5fecb
MD5 27657ebd20fdfaacfa96e238b61d9534
BLAKE2b-256 686d26a6506ec98586303041e6f20baa0069aee39388cdb0d4e1e0712a346a49

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d86c2551825f2ef3ab5ce7d66991b896f4b1ece493cb3b3d5c0849cb4cd10e3c
MD5 1ba581a923b51a7acf23ea403836aa46
BLAKE2b-256 feed4858945315e043223b13dcdf524fcff5bf5e345fae33f3fe7ca761ce9e41

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f844bdab5ee71e0d2b4665a7b69e91400e93b8f8ae4388ff350090e3f26e08d7
MD5 09b34fda1bd2b163b05147219a24efb3
BLAKE2b-256 e4f6cc357e4aaa05a02adf77f6f99096cadaf9d21e519a55d6305206f2193854

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.7.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 466.5 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b66ca7773d1de5695c1009720b812bf35e86501bcb4b638e670be21ce3dec2b5
MD5 dee1ccf3ac13907961be422e1dcc4d4f
BLAKE2b-256 3f060e3ef3fcbb5c0844ca631114b9d8e2187e54e1f4b97013bbad083ee84b6f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dda5ce9f1a68c8f7b8e07c3382527dffd2a92f9d3d2b7de2c7f6715fcbcd453e
MD5 9893e01298acaa88eb0f2e782f30f8f9
BLAKE2b-256 f6c3316aad46a2f1144a3bf1952f255d24cfed1b53b00692449f4635acc0caa9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2249bc80e3c4c72e070219610ca7f4bb5b87d5b2e2df89819225bec5e130890c
MD5 c58e55f1f1e95b8132c47f091c97819d
BLAKE2b-256 3537220ed0d5fc67c59ba56d6f20e0461d57f7c949b02ded9c57972c706c4c6f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e75fdaf2b3e24d840051c4fef06eeb9b5d475da4640de14f82ea5aad3a384d5
MD5 1a1a2548d70a2137170f8d40f97bdd49
BLAKE2b-256 03a068c0e5b9256c900fbcff2d763f87429bfc28c0b36ae4ce546c364ed1b55f

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: tetra3rs-0.7.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 466.6 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1df113f80337d85d0286c2266a90afa474383a587ad758cafab65ab78650d897
MD5 3d54bd4170b7312dcaa44fb438205d60
BLAKE2b-256 1789b3de50c8ba5f301d07e717e70cb6d8612a4e2b023e83c66b5cfae4c8837f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2c0270cf64d5074f1e10480856340f925c892a3b20465eb630fc29862f69ba9a
MD5 2ef28ab1293a6b3baa4f593d39590aad
BLAKE2b-256 b3f9fca3ac59ae07dc756dfb03582e155b51fd0cb43d2f660acdbd022b7d773a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f74659741a262a47cfab419fbbe77df4b81d0283fc37dd242f97965160afef8c
MD5 85fe2a0369c0ec0b54be6f88ee64fd7f
BLAKE2b-256 654fac28da0f284b006116a2ff1ab066ba2e3ecd52d378db88e376cf793a91d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for tetra3rs-0.7.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 854d528ef321799f2f2c424b545837bddd1ef529ad269839c702b3362b4d27e9
MD5 5cf5999e6fd687af1cec34ca1edc8048
BLAKE2b-256 11256efc58ded6ca73e698cb7731a1e5a4d1fedaf18ad453cde76dbf698e0c84

See more details on using hashes here.

Provenance

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