Skip to main content

High-performance satellite ephemeris and visibility calculations with Rust and astropy integration

Project description

rust-ephem logo

rust-ephem

PyPI version Python 3.10+ Rust License Documentation

Fast ephemeris generation and target visibility calculations for space and ground-based telescopes.

rust-ephem is a Rust library with Python bindings for high-performance satellite and planetary ephemeris calculations. It propagates Two-Line Element (TLE) data and SPICE kernels, outputs standard coordinate frames (ITRS, GCRS), and integrates with astropy for Python workflows. It achieves meters-level accuracy for Low Earth Orbit (LEO) satellites with proper time corrections. It also supports ground-based observatory ephemerides.

Built for performance: generates ephemerides for thousands of time steps using Rust's speed and efficient memory handling. Ideal for visibility calculators where speed is critical (e.g. APIs serving many users) and large-scale ephemeris tasks where it outperforms pure-Python libraries by an order of magnitude.

rust-ephem outputs ephemerides as astropy SkyCoord objects, eliminating manual conversions and enabling seamless integration with astropy-based workflows. By default, it includes Sun and Moon positions in SkyCoord with observer location and velocity, correctly handling motion effects like Moon parallax in LEO spacecraft. It also supports ephemerides for other solar system bodies.

rust-ephem also has a constraint system that enables flexible evaluation of observational constraints for ephemeris planning, including Sun and Moon proximity, Earth limb avoidance, and generic body proximity. It supports logical operators (AND, OR, NOT, XOR) for combining constraints, with Python operator overloading (&, |, ~, ^) for intuitive composition. Built on Pydantic models, it allows JSON serialization and direct evaluation against ephemeris objects for efficient visibility and planning calculations.

Features

  • Rust for Speed: Full featured Python module built on a Rust core for maximum efficiency
  • Multiple Ephemeris Types: TLE (SGP4), SPICE kernels, ground observatories, CCSDS OEM files supported
  • Coordinate Frames: TEME, ITRS, GCRS with automatic transformations
  • Astropy Integration: Direct SkyCoord output for satellite, Sun, Moon, Earth and other solar system body positions
  • High Accuracy: UT1-UTC and polar motion corrections using IERS EOP data
  • Constraint System: Calculate target visibility with Sun/Moon avoidance, Earth limb, eclipses with logical operators (&, |, ~)
  • JPL Horizons Fallback: Automatically query NASA JPL Horizons for bodies not in SPICE kernels, including asteroids and comets
  • Type Support: strong type support for use with mypy, pyright etc.

Installation

pip install rust-ephem

Note that if a binary wheel for your operating system dos not exist on PyPI, this will build from source. This will require your computer to have a valid Rust installation, and other dependencies may be required. If you require a specific architecture, please put in an Issue.

Quick Start

Satellite Ephemeris from TLE

This example generates an ephemeris for the ISS from a TLE. The TLE is downloaded automatically (and cached) from Celestrak.

import rust_ephem
from datetime import datetime, timezone

# Define time range
begin = datetime(2024, 1, 1, 0, 0, 0, tzinfo=timezone.utc)
end = datetime(2024, 1, 1, 1, 0, 0, tzinfo=timezone.utc)

# Create ephemeris from NORAD ID (fetches from Celestrak)
ephem = rust_ephem.TLEEphemeris(
    norad_id=25544,  # ISS
    begin=begin,
    end=end,
    step_size=60
)

# Access positions as astropy SkyCoord
satellite = ephem.gcrs      # Satellite in GCRS frame
sun = ephem.sun             # Sun position
moon = ephem.moon           # Moon position

# Or access raw position/velocity data (km, km/s)
print(f"Position: {ephem.gcrs_pv.position[0]}")
print(f"Velocity: {ephem.gcrs_pv.velocity[0]}")

Ground Observatory

Ground-based observatories can also have an ephemeris generated for them. This is useful if you need a one-system-fits all approach that includes both space and ground based telescopes.

import rust_ephem
from datetime import datetime, timezone

begin = datetime(2024, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
end = datetime(2024, 1, 1, 13, 0, 0, tzinfo=timezone.utc)

# Mauna Kea Observatory
obs = rust_ephem.GroundEphemeris(
    latitude=19.8207,
    longitude=-155.468,
    height=4205.0,  # meters
    begin=begin,
    end=end,
    step_size=60
)

# Sun and Moon positions from observatory
sun = obs.sun
moon = obs.moon

Target Visibility

rust-ephem can calculate visibilities for celestial targets. It does this by defining constraints, which are True when a target cannot be observed. These constraints can be combined using logical operators, and then evaluated using the telescope Ephemeris. Note the | (or) operator is used here to combine the Sun and Moon constraint, as if we used & (and) the constraint would only be true if the target was too close to the Sun and Moon.

import rust_ephem
from rust_ephem.constraints import SunConstraint, MoonConstraint

# Initialize planetary ephemeris (required for constraints)
rust_ephem.ensure_planetary_ephemeris()

# Create combined constraint: avoid Sun within 45° OR Moon within 10°
constraint = SunConstraint(min_angle=45.0) | MoonConstraint(min_angle=10.0)

# Evaluate against ephemeris for a target (Crab Nebula)
result = constraint.evaluate(ephem, target_ra=83.63, target_dec=22.01)

# Get visibility windows
for window in result.visibility:
    print(f"{window.start_time} to {window.end_time}")

Shared-Axis Multi-Instrument Constraints (Boresight Offsets)

For observatories with multiple instruments on the same mount, you can require that the primary target direction is also valid for a secondary instrument whose boresight is offset by fixed Euler angles.

Two roll concepts are supported:

  • boresight_offset(..., roll_deg=<value>, ...) — the fixed mechanical roll of the instrument relative to the spacecraft coordinate frame. Defaults to 0.0 (instrument aligned with spacecraft). This is a property of the hardware, not the observation.
  • evaluate(..., target_roll=...) / in_constraint_batch(..., target_roll=...) — the commanded spacecraft roll at observation time, applied on top of the instrument offset. This is separate so you can test different roll states without redefining the instrument.
  • boresight_offset(..., roll_reference=...) defaults to "north" (celestial-north-projected +Z at roll=0). Use "sun" if you need Sun-projected +Z at roll=0.
  • instantaneous_field_of_regard with no target_roll sweeps all spacecraft roll angles and counts a direction accessible if any roll satisfies the constraint, giving the maximum reachable sky.

Remember: constraints are True when the target is not visible. So if either primary or secondary instrument is blocked, the combined constraint should be True (use |).

import rust_ephem
from rust_ephem.constraints import SunConstraint, MoonConstraint

rust_ephem.ensure_planetary_ephemeris()

# Primary instrument constraints (evaluated at commanded pointing)
primary = (
  SunConstraint(min_angle=45.0)
  | MoonConstraint(min_angle=12.0)
)

# Secondary instrument constraints (evaluated at boresight-offset direction)
secondary = (
  SunConstraint(min_angle=45.0)
  | MoonConstraint(min_angle=12.0)
)
secondary_offset = secondary.boresight_offset(
    pitch_deg=1.2,     # roll_deg=0.0 (default) = instrument aligned with spacecraft
    yaw_deg=-0.8,
)

# Commanded pointing is invalid if either instrument is blocked
combined = primary | secondary_offset

result = combined.evaluate(ephem, target_ra=83.63, target_dec=22.01)
print(result.all_satisfied)

# Evaluate same pointing at a specific spacecraft roll state
result_roll = combined.evaluate(
  ephem,
  target_ra=83.63,
  target_dec=22.01,
  target_roll=95.0,
)
print(result_roll.all_satisfied)

Pydantic constraint configs support the same pattern:

from rust_ephem.constraints import SunConstraint, MoonConstraint

primary = SunConstraint(min_angle=45.0) | MoonConstraint(min_angle=12.0)
secondary = SunConstraint(min_angle=45.0) | MoonConstraint(min_angle=12.0)
combined = primary | secondary.boresight_offset(pitch_deg=1.2, yaw_deg=-0.8)  # roll_deg=0.0, FoR sweeps all spacecraft rolls

# Apply spacecraft roll at evaluation time
result = combined.evaluate(ephem, target_ra=83.63, target_dec=22.01, target_roll=95.0)

Threshold Combinator (k-of-n Violated)

Use at_least when you want a combined constraint to be blocked only after a minimum number of sub-constraints are violated.

from rust_ephem.constraints import SunConstraint, MoonConstraint, EclipseConstraint

sun = SunConstraint(min_angle=45.0)
moon = MoonConstraint(min_angle=10.0)
eclipse = EclipseConstraint(umbra_only=True)

# Block target when at least 2 of these 3 constraints are violated
constraint = sun.at_least(2, moon, eclipse)

result = constraint.evaluate(ephem, target_ra=83.63, target_dec=22.01)
print(result.all_satisfied)

Notes:

  • Constraints are True when blocked/not visible.
  • min_violated=1 behaves like OR over violations.
  • min_violated=len(constraints) behaves like AND over violations.

Instantaneous Field of Regard (steradians)

You can compute the visible sky solid angle at a single timestamp for any constraint (single or combined):

from rust_ephem.constraints import SunConstraint, MoonConstraint

constraint = SunConstraint(min_angle=45.0) | MoonConstraint(min_angle=12.0)

# Evaluate at a single ephemeris index (fastest path)
field_sr = constraint.instantaneous_field_of_regard(
  ephemeris=ephem,
  index=0,
  n_points=20000,
)

print(f"Field of regard: {field_sr:.3f} sr")
print(f"Visible sky fraction: {field_sr / (4.0 * 3.141592653589793):.2%}")

Notes:

  • Exactly one of time or index must be provided.
  • Return value is in steradians, range [0, 4π].
  • Constraints are True when blocked/not visible, so this computes area where constraints are False.

JPL Horizons Fallback

For bodies not available in SPICE kernels (asteroids, comets, spacecraft, etc.), enable JPL Horizons fallback with use_horizons=True:

import rust_ephem

eph = rust_ephem.TLEEphemeris(norad_id=25544, begin=begin, end=end)

# Query Ceres (NAIF ID 1) using JPL Horizons
result = eph.get_body("1", use_horizons=True)
print(result)  # SkyCoord position

# Also works with moving_body_visibility constraints
from rust_ephem.constraints import moving_body_visibility, SunConstraint
constraint = SunConstraint(min_angle=45)
visibility = moving_body_visibility(
    constraint=constraint,
    ephemeris=eph,
    body="2",  # Pallas
    use_horizons=True
)

TLE Sources

rust-ephem supports multiple ways to fetch TLE data for the TLEEphemeris class:

# Direct TLE strings
ephem = rust_ephem.TLEEphemeris(tle1, tle2, begin, end, step_size)

# From file path
ephem = rust_ephem.TLEEphemeris(tle="path/to/satellite.tle", begin=begin, end=end)

# From URL (cached for 24 hours)
ephem = rust_ephem.TLEEphemeris(tle="https://celestrak.org/...", begin=begin, end=end)

# From NORAD ID (Celestrak, or Space-Track.org with credentials)
ephem = rust_ephem.TLEEphemeris(norad_id=25544, begin=begin, end=end)

# From satellite name
ephem = rust_ephem.TLEEphemeris(norad_name="ISS", begin=begin, end=end)

# Using fetch_tle
tle = fetch_tle(norad_id=25544)
ephem = rust_ephem.TLEEphemeris(tle=tle, begin=begin, end=end)

For Space-Track.org integration, set credentials via environment variables or .env file:

SPACETRACK_USERNAME=your_username
SPACETRACK_PASSWORD=your_password

Documentation

For comprehensive documentation including:

Visit rust-ephem.readthedocs.io

Building from Source

A full Rust toolchain should be installed.

# Install maturin
pip install maturin

# Build and install in development mode
maturin develop

# Or build a release wheel
maturin build --release
pip install target/wheels/*.whl

License

Apache 2.0

Contributing

Contributions welcome! Please open an issue or pull request.

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

rust_ephem-0.11.1.tar.gz (702.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rust_ephem-0.11.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

rust_ephem-0.11.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

rust_ephem-0.11.1-cp314-cp314-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rust_ephem-0.11.1-cp314-cp314-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

rust_ephem-0.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rust_ephem-0.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

rust_ephem-0.11.1-cp313-cp313-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rust_ephem-0.11.1-cp313-cp313-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rust_ephem-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rust_ephem-0.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

rust_ephem-0.11.1-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rust_ephem-0.11.1-cp312-cp312-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rust_ephem-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rust_ephem-0.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

rust_ephem-0.11.1-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rust_ephem-0.11.1-cp311-cp311-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rust_ephem-0.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rust_ephem-0.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

rust_ephem-0.11.1-cp310-cp310-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rust_ephem-0.11.1-cp310-cp310-macosx_10_12_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file rust_ephem-0.11.1.tar.gz.

File metadata

  • Download URL: rust_ephem-0.11.1.tar.gz
  • Upload date:
  • Size: 702.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for rust_ephem-0.11.1.tar.gz
Algorithm Hash digest
SHA256 f9fa5de45b7b8bfcb33cd487bcafc7e98bca22f30b2013ac9d793e2a0386d89d
MD5 f56064937312f08b46f5b68c592d74fa
BLAKE2b-256 101ccfc16c2b270a7c0982a5f770e950d1b3a747f786f22b865dc999fed1d542

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2e7ea385f621681dbe169c02a11e223c8ce68c7010215a43e4f0af25eed15ce1
MD5 95852a41d8fc5e1c3ab9d7a317e49315
BLAKE2b-256 be8f27ffa25889feeed75cae900fe8367170df0ed59683b7ec9c49f80950a0fc

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 aab43920e75dbd6eefc0489bda801680386b1c306b4de05a8875ba45c0d96732
MD5 74e0552ab0af5e07fdad5d41640b57d9
BLAKE2b-256 ecf25ad3af1ceb2acca55318358b7f592dd36aef172fa14927504c45dbfbfe15

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f45d44c3a3fb98951adf79444cbeb3d8190ceee348598db96f635af118c5ac8d
MD5 ba66653afc033eb9a5cd25024624ad78
BLAKE2b-256 cde841354d9105af5d1593df520b1cfd062ddd8356eceea68d50052ebe5a3368

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8f1c99de8212eb4c19d6f0639d9dd2e6750516148d19ec5b13345ab46f5ab244
MD5 e5e87ca9ad3aad471b85cea864048548
BLAKE2b-256 f0c259c25a792487219d26e6226cc488d670b4b4eeab08e4bcf99a3c73a0443d

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 23413f163ab5d76318e40d24a39e628b9939ec2bbbbf582b1441beae70efbd28
MD5 1312a66606ac371dea3ad3bb0dec0192
BLAKE2b-256 9b72f561724e7f1ed04425265c89dfa3bcbe8ca5b8bf8c99fe1bdb17fe93e81d

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec91842f0f8898816b15e03fdbb5f1a98e50f0e80c9c209fd664359479ced991
MD5 3efd385a7138b54b7082b21c4ff38cfe
BLAKE2b-256 5909c3dac51eb88be4d3456acda0e2090ad4632aba1431ac88d3517a762bac17

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 90e5dc39c8f1be4bc1954d94681228450949e8ba68d22a727c1aa6cb29a4d9c1
MD5 4262ec952cdc2293d4e0dd330f69db8f
BLAKE2b-256 c3696c09db5885a4a5ecbed60aa55137f650074c7208302357d320b7f42f7b81

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1fb22ba09c32be3e9adf79144b524810130e28c76f6b514ec5515c19b3fa61de
MD5 694ea8ef5b3b93b8c711d50f986128cf
BLAKE2b-256 b7eaaa58739754bb787464dddf670589526804e515dae77bde005532267af1df

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dd8ec5079d34ac04da5e17f8e79973b9b1fe98643d028f79aec43aa3a51dd39c
MD5 b4a40f7c9f95b19952cae72833248e17
BLAKE2b-256 e5e104535a19dee2b71a8bce6899ce80571b6add2734a59a91cc7f10db6b9952

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0f767bde09485f28d3d08bdb1387fa75b31ecd366e521b853f87d8e5a4a0d0fb
MD5 7afbca7bb1ca93c34e7eea866ad956af
BLAKE2b-256 1235c5ac14717e5cee68c3fb2f14ad5b65c36b0bdbb427e2d8263d63a849b01f

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1b3bcd6c477fb4423c54bfd960eda10a0a63ce9b4d3522f9e9ddb6295d97f8b
MD5 966af6a897c15c9291784d6c4b74f06f
BLAKE2b-256 14015097a689733378792bd1a194b73920e7c72e2a4e772d5e6ff78ee516650b

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b79566e7e6db12b45637e5d6ab3293eaf50067a176de349c71790115f9e2e4ca
MD5 9c0f2e4226db1494dd280b7c62ad44c8
BLAKE2b-256 910a54a7324fdfa6f13a1d468b821fdf6261ef87a253710def670d6651c3733e

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 807e1c479d6e296b5428c8ccc92e67ec7261459cb8fb181d93e67c720a3bf82e
MD5 4602974d5161cac695385dc9eba99209
BLAKE2b-256 4912782c4671cfb21c3f4678f78acb112397763668375a08ea861b19ba91eb3f

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5105ad301a77bdfe78bea3a70495904afdf85dfb7ec22c03107810d46c811708
MD5 3e1da4430dc6579ce049856b5f1db36f
BLAKE2b-256 6afcc9d55669512bce538191af1eee5cfbfd7c88a8ac0bd82658230ad1ad9246

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8be957992f6f8f174aa6b3ac2a0d83f03352d5f650575f05cf3adca6e2324ede
MD5 6b96a3dcbcc594990662b30fcd05ee5b
BLAKE2b-256 19197b4f67e8491dfe7f84846ed00c45abb757120f959d2b729dc82fbb6b3f88

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1a1f1a5981fb621129ccaa0b79335222dab908ba0d72770b0126f7914135d5f4
MD5 bd52742b0bbf8ac31280891c56b52b30
BLAKE2b-256 e38b5d4dc65147648e3cde7122921c28eb3bae390480eaadaf3dfd7f1d4a33ac

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9dc4f00ed4640a33df79616a416881ec928eb9f1b5e186b68e0cd0d6b6cd6288
MD5 da1fb2f8abef97731ee7555083f92e50
BLAKE2b-256 8191ffb8efacb8495a9f8a92d53001bbda1a93197c978ca7dba348f8a8a07c6a

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6d0a63bc9ca4f29383ffa91677762265268a5522c85de6ea2d36bf22869f5680
MD5 40d65e8ab69776138a2cf8a6dcf100ba
BLAKE2b-256 aebb47ac173663d5eea5fdb6cef049ee3da724ae1ab0ed0b88cbc881d5bea405

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 210a8bc76944473322091a76bd0d25c9dc58d707f347061d4d859ff6c4540bee
MD5 4419d25e67f57b2a6e2ec57e078cdc4c
BLAKE2b-256 79cb59b8a0bdc799406c16bc3ac14926a234a54f86c3e5ace8fd9d12cee6cbe6

See more details on using hashes here.

File details

Details for the file rust_ephem-0.11.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rust_ephem-0.11.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 57b37fc5feeb6e60f7428bb7f5bd706f96c79c3b9984ce72be2fe1e0a9613489
MD5 75503b3106834f1ab6feddc7e7c5305a
BLAKE2b-256 875079fa7022225b060509be41ab7ae82d5c9582440ec91fb6ff059e06d53ba1

See more details on using hashes here.

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