Skip to main content

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.

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 a per-star likelihood ratio with a bounded 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 standard camera-intrinsics model (free optical center, focal scale, and full Brown-Conrady k1, k2, k3, p1, p2 — the same parameter set as OpenCV's calibrateCamera) from one or more solved images via calibrate_camera, with alternating per-image WCS refinement and global sigma-clipped LS fit. Handles mosaic cameras (e.g. TESS) where the optical axis sits far off the detector
  • 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 .

Quick start

Star catalog

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

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

Rust: Download the pre-built binary catalog (G < 10, ~17 MB):

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

Or generate your own with a custom magnitude limit. Two scripts live in scripts/:

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

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

Example

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

// 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_max_error_rad: Some((2.0_f32).to_radians()),
    // 15° horizontal FOV estimate, 1024×1024 image
    ..SolveConfig::new((15.0_f32).to_radians(), 1024, 1024)
};

// The solve returns Result<Solution, SolveFailure>; a Solution's
// fields are all guaranteed present.
if let Ok(solution) = db.solve_from_centroids(&centroids, &solve_config) {
    println!("Attitude: {}", solution.qicrs2cam);
    println!("Matched {} stars in {:.1} ms",
        solution.num_matches, solution.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, match them to centroids, and accept only if the likelihood ratio bounds the false-positive probability 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: Some(prev_solution.qicrs2cam),
    hint_uncertainty_rad: 1.0_f32.to_radians(),
    ..SolveConfig::with_camera_model(prev_solution.camera_model.clone())
};
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):

Rust:

use tetra3::{earth_barycentric_velocity, SolveConfig};

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

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

Python:

from datetime import datetime
import tetra3rs

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

Catalog support

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

Tests

Unit tests run with the default feature set:

cargo test

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

cargo test --features image

SkyView integration test

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

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

TESS integration test

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

The test suite includes:

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

Credits

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

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

License

MIT License. See LICENSE for details.

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

Metadata

Release files for tetra3rs 0.14.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tetra3rs 0.14.0
File Size Uploaded Provenance
tetra3rs-0.14.0.tar.gz 254.8 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for tetra3rs 0.14.0
File
tetra3rs-0.14.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
tetra3rs-0.14.0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details
tetra3rs-0.14.0-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details
tetra3rs-0.14.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
tetra3rs-0.14.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
tetra3rs-0.14.0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
tetra3rs-0.14.0-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details
tetra3rs-0.14.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
tetra3rs-0.14.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
tetra3rs-0.14.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
tetra3rs-0.14.0-cp312-cp312-manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64 Details
tetra3rs-0.14.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
tetra3rs-0.14.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
tetra3rs-0.14.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
tetra3rs-0.14.0-cp311-cp311-manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64 Details
tetra3rs-0.14.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
tetra3rs-0.14.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
tetra3rs-0.14.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
tetra3rs-0.14.0-cp310-cp310-manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64 Details
tetra3rs-0.14.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 14.0 MB

Release files / tetra3rs-0.14.0.tar.gz

Download URL tetra3rs-0.14.0.tar.gz
Size 254.8 kB
Tags Source
SHA-256 checksum
How to use checksums
63a442d070d6eb2867e3124c4bea68220f0b8cfc16942eab5f00aa13e2c0a4e1
BLAKE2b-256 checksum
How to use checksums
3060af97c6844aee22ebacaae20316f28535ab02a69046b56cb920d97ebc9e14
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp314-cp314-win_amd64.whl

Download URL tetra3rs-0.14.0-cp314-cp314-win_amd64.whl
Size 622.1 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
9e44e615037653c69343ccf27af43056d43cb4a37035df8e051133d81a8cbb97
BLAKE2b-256 checksum
How to use checksums
c17fcddde23d402bfcf4b9c02e5e2607e9bec6d18b2aa04b107ee23c8a689f2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL tetra3rs-0.14.0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 745.3 kB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f335c09b990510dceb749d50a93d17f46f974d9bf59ea8055ec6c2cdd9a1cd3c
BLAKE2b-256 checksum
How to use checksums
e67b051ad7a3581a748111130d7cddb6b18a78eabcfd787c442c4b9073ceef7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL tetra3rs-0.14.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 716.4 kB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8787ce14238fca4477acc714e44ae5103d8cb8987a41c4ffbe4a6b346270b28b
BLAKE2b-256 checksum
How to use checksums
c1a104d1dfa6cfcfa7f1fbf94e7e2c071e8b07f1296e0c0dbe92edbad7023953
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL tetra3rs-0.14.0-cp314-cp314-macosx_11_0_arm64.whl
Size 665.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
366e65979b75302ebda2e839f2f0404acd8eccfab70d78014ae92831d1a785e3
BLAKE2b-256 checksum
How to use checksums
1130062ae011462404be22a02dd6e9c1a749639d00b92a73770574b2370744f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp313-cp313-win_amd64.whl

Download URL tetra3rs-0.14.0-cp313-cp313-win_amd64.whl
Size 603.9 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4b5c5dab2cdf64cf14aac7555cc0b10d77f635041b7f83d6abd08c7d37d52d90
BLAKE2b-256 checksum
How to use checksums
0ec9396c5c7730cea33cb086dedabd7beab16fef1f9e060dd50020579e7e31e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL tetra3rs-0.14.0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 745.3 kB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d307b8495eb0b1fa8caa6e8e2ecec6cdb96c002e86697422599f6a793e818b8e
BLAKE2b-256 checksum
How to use checksums
5faa91c4226eff2d4b54388ad6e3084641ca5a6f69b3d65748522d87e5f3f00e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL tetra3rs-0.14.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 716.4 kB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
bd60a6fed1cfc627b23b81961853d54098370d0087e5d81a405b96517f4498f5
BLAKE2b-256 checksum
How to use checksums
179f7fe4edb169336ff63e8a1a89b352c465da79d3db3c3388a08c56c874a57b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL tetra3rs-0.14.0-cp313-cp313-macosx_11_0_arm64.whl
Size 665.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5190a238f221b4884da300d89127d810b880a38068a4dcf70703be04cdbb8fd0
BLAKE2b-256 checksum
How to use checksums
33d6faae51148ac5178c2c11f9196863b48c0a35275ed2b90da049ad151c226e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp312-cp312-win_amd64.whl

Download URL tetra3rs-0.14.0-cp312-cp312-win_amd64.whl
Size 603.7 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
12400e1b532f505db413415cd588be945fbd48dd52462c679d07cac963fab251
BLAKE2b-256 checksum
How to use checksums
a3903d5e293464978dbdf75fc7bd45bbe8c93955115337bd692eaff48cf06f07
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL tetra3rs-0.14.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 745.4 kB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1abfe8d390c6c8f27693c3fd9483aee492c50441b3b7e1d264259045622a86e4
BLAKE2b-256 checksum
How to use checksums
0205352c902639c6b13c84d4eb15286928ca07a20c8aca0153ccc4cfcb4b9a16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp312-cp312-manylinux_2_28_aarch64.whl

Download URL tetra3rs-0.14.0-cp312-cp312-manylinux_2_28_aarch64.whl
Size 717.7 kB
Tags CPython 3.12 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f79cecc67c3e81fa201fb2340391132bba29d8b5a03736aaa5fc84b3a2cbe213
BLAKE2b-256 checksum
How to use checksums
03c9c80f5a5880c40d69915859e80126b4a44780f24d103d1f97405c835f9aae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL tetra3rs-0.14.0-cp312-cp312-macosx_11_0_arm64.whl
Size 665.7 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6162dc16060d92615d8c5f1b0f88dd229d21f50958dbf11ad1b8e29d2667edad
BLAKE2b-256 checksum
How to use checksums
dce99ea1212c507676b2cbd860712192a6ecfb985e1301f7792caa9d862547fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp311-cp311-win_amd64.whl

Download URL tetra3rs-0.14.0-cp311-cp311-win_amd64.whl
Size 608.8 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
6d86cca25fdb6fb827da3bd1a93a69f0e9b403b4232e8a24576dd09b271a3ea3
BLAKE2b-256 checksum
How to use checksums
3d5f642f64bf62d6d2792f1b14b62895301827b5eac5995686f53c8c6d0cd4b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL tetra3rs-0.14.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 747.4 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c5418666015b8acf5e503702d34936003202700b47e63da629724e672f8f0547
BLAKE2b-256 checksum
How to use checksums
515a68e7a536d2dd42b3250706ff03c0a5417946be5c92c9e02a940212fdb534
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp311-cp311-manylinux_2_28_aarch64.whl

Download URL tetra3rs-0.14.0-cp311-cp311-manylinux_2_28_aarch64.whl
Size 720.8 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1c66ac96f1400b505ce68182c6ee7c36b29a47b423b2252724dd2460b9478d67
BLAKE2b-256 checksum
How to use checksums
adf26514ef1b5bd99db2b42a298ce572cee19ba850cb08f70d438fe887c34563
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL tetra3rs-0.14.0-cp311-cp311-macosx_11_0_arm64.whl
Size 670.9 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a5b4bf590103b16878e3ffacc72c5b21b564355080cba385ea21ee0b24e635d2
BLAKE2b-256 checksum
How to use checksums
777bb813ac619de2d5f724d83fa9c56ad5ad7017ed4ecd817fb9c53c26fd7b66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp310-cp310-win_amd64.whl

Download URL tetra3rs-0.14.0-cp310-cp310-win_amd64.whl
Size 608.9 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4d5792055b7f6beeae33335d566fd71b34b7137dfc514f2edb7fa8259796e9d4
BLAKE2b-256 checksum
How to use checksums
232a50b556c9f52809eb3c9984ce9157301047c0d2dc1e99232053aa571d96f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL tetra3rs-0.14.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 747.6 kB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9e0b7d8d6ed018fb30c9da96b36f51be918a2ced8c30515f2a2523af17bafc79
BLAKE2b-256 checksum
How to use checksums
008a7addc6b00547c787dd4e6fab8d3c5bc13a9ab3f8fd18b122c4bce8cf1f92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp310-cp310-manylinux_2_28_aarch64.whl

Download URL tetra3rs-0.14.0-cp310-cp310-manylinux_2_28_aarch64.whl
Size 721.3 kB
Tags CPython 3.10 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
90043c4d1e4cb9ad490784b194e9eba946df3e46c7ba17e68aef9b7bd4b909ab
BLAKE2b-256 checksum
How to use checksums
09f684e21ee871cb8e9b9cef0a4ffffd36298e58fc70e6b5678e318333a984c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / tetra3rs-0.14.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL tetra3rs-0.14.0-cp310-cp310-macosx_11_0_arm64.whl
Size 671.2 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0249a38d7edba258473a80f74d5397ec357402f8c66fb5b0ca6c095a3ba75ab4
BLAKE2b-256 checksum
How to use checksums
2f0fb8ba9724f680d8937ff3a5ee725a61ef4f56f0102fcc9e222033db87ad3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Security for tetra3rs 0.14.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 21 files in this release have been uploaded with provenance metadata.

Select from 21 files

Attestation for tetra3rs-0.14.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page