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.10.1.tar.gz (681.2 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.10.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.10.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

rust_ephem-0.10.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.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

rust_ephem-0.10.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.10.1-cp313-cp313-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rust_ephem-0.10.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.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rust_ephem-0.10.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.10.1-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rust_ephem-0.10.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.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rust_ephem-0.10.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.10.1-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rust_ephem-0.10.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.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rust_ephem-0.10.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.10.1-cp310-cp310-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rust_ephem-0.10.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.10.1.tar.gz.

File metadata

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

File hashes

Hashes for rust_ephem-0.10.1.tar.gz
Algorithm Hash digest
SHA256 0cbef140903310cc01a0f6bc6a329c84e0d639128d94bab3f7436f81d153b004
MD5 9481daac8a3b2f120a777a093443a94c
BLAKE2b-256 206d4d63db09824c977bc70bb4f4b1fb54596aff528909d4d1e162dbeafbe6c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e8131c119efcb81b471c2bddab86037bf75a3dce4869d6166cb35c597c064e0e
MD5 c24ff230b3899fac61a337dc38842b87
BLAKE2b-256 d7fdd9ad4c677e6e479ce14bf4ee959d662e23929dfb75b5d028cd97b4f1a5b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 547d3b4e38efadb3266bbd09a1f6266432408c67c02e30c32a4df21de35d8f7d
MD5 6f3b48866117d07587af54dcdb43cfd9
BLAKE2b-256 cc48268edcee3533e178d2b467bd0603b346e76a1bc63596072c988492c58690

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 315718761540817c693289b27ccf8ee7121e89a98228d15a0e3c45baa1e5398e
MD5 7c4a72bff54b9102d711b50c377e96ec
BLAKE2b-256 660b78f70e1a0be1d9bc1b5df4f21d6754976fc385653898a45aa7bc550451fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a904b79f7ddea31a42bdd67986a8814cc4a8d6c4d6a60b4dd36768d71b80fac3
MD5 916c0b55fa012ca2e7e917791c53a173
BLAKE2b-256 dfffdf982a636fa644a3af938ca350cbcb15a0ea4e90571deb628dffbbb20d80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 22938ae86d1df9cc3e897f5a58fcb4649c1c75621e2b57cdc60d3b900dc8f36f
MD5 47cd45a9d7908315942fe1293f0a3d0d
BLAKE2b-256 9d1e8f97487f0661dc7d5516500a993bbb1d4b62f020f9ca1d7f856b13f0ce60

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 27d9d8be509bfff38688203a5e8783689ff79d434ef42386b1d2c471d866f017
MD5 d751739447a126aa687c145f10ac050b
BLAKE2b-256 799833696ef4fc0de83a9b453643369213045b6428a9c39796e1123dded641d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c5d922ab2d6d66dbc14dbb9a8e4d5c95628c84dea115dc3ad628ed23f19a9c54
MD5 6c01c14d4c377ea1d34497d4d27e5c73
BLAKE2b-256 a3271177159603a9a0c64dd5008ea5eeb7ab473478cbf4ce558914edf1ac69f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 35c6b12838b8303fe3d9c420ac9ac621bb1fd3766860f0d2881d54fc11b1d72c
MD5 72de41cafa59ee8878bd0fd88e1a6207
BLAKE2b-256 ad533449839bbdc3574afb4179d16c25af3118cdac3169cdf9b1d07356b18b34

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cb6dba8fa2c31d0da1766e443d8e8964fff01bd96bfe2426904133862f1644df
MD5 90642fc4d03c433aa418b96e94632fb0
BLAKE2b-256 678f41cc35803803e9cfac4241bdfbecb0ba8cbe260162d0af8d5ab88e470742

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2d0707aaa66b5f43fca3677b30b7abb23735b36b7a060bd0f92aa0f12e9bbab2
MD5 0236d01012a81c91e40c4a694bd2dd2b
BLAKE2b-256 a0e2175bac84bbc31bd6b1f8986ba0a371bd902cd91011572d10f861f50aba93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 16a330bc7c609ff74dc87bb63cc6051f0d3259cb1a33bde32a26872fbf57f2b3
MD5 6f643a6fffe08b814d01517c3b72684c
BLAKE2b-256 706eb9f3e942b8151cccd438a91e1ddd4eed3ed0c2ef2eaafc1d6d8dedaf98f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 043872177808811930215681d939ac743508c949675a62a603133fd65d98510b
MD5 ec8b5d0f95167aa206b981f1578c9fab
BLAKE2b-256 4ca2c972a4cded6b5707f73117db5acb12de6352577df6a3a5bb731a19bed4a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c542070290b146001620deda8ab288161d31a1a5660c3fde8a96c394b9f520b1
MD5 11da37807cf0d757ec2ee88819cff1b1
BLAKE2b-256 a7f53d21d36aaac024a98135281392f193a775a8f89be9d820c17e3da5e0b3ae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0520bb97460cfc8ee80dfd6772157c12e1843d993546d39a2463a5feba35f38e
MD5 1478115f779d634b7e04fd1ad4506c06
BLAKE2b-256 80d988f18601acafb1c28aa2c706c1dc2e58d19b43602ffbcee9c31ad9d268cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 519509fc98085a40c529af7918175e247818e70cfa87ab1d6fb10faea2a76abf
MD5 c8e2d566ae52e8ab985d2cc48cd0a93e
BLAKE2b-256 3ffc034a3c4781a6e8ac89b1a6ec8539724892d62175547261852db58f815351

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 75d3c086032daf95d87bc0e9215317dbb487df9e58a53d4027608b90936b9391
MD5 24ef314f4ed1c6e698846bfd94e66779
BLAKE2b-256 87d5e2d6b2ce9d995d19507d2a5c13a0392b8c4f668c904e12906faec43b1b59

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cc495cf0b51372654b3935f724fdd70c2c6732b21fd3259e5dfa9226b458542
MD5 d2638c2b2c336e7eaa94d2f7ebc003ed
BLAKE2b-256 0f0516dc1ed95ad6e95504b12d8ed049ff495f447fec9c8729d3908b06027e44

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2674900fe130f13596d5439713e4314fe5c6fd54f78655f6f111d82437b9858c
MD5 07cd9a52a4d87cee03551e4db2c94133
BLAKE2b-256 6b4821a8fbda0c794da31240029c8add5af50f240dca19ef5f67e121434874c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5548a8b61604f4dc8fa50de1bedae6a372d332b8655f269619f06bb60cb7f92a
MD5 87fafaef81d4883c9302fbb31cda3f29
BLAKE2b-256 e3e12da2c0b79f08223f6b75729144ddcce4064be551475e63ae6f86e203ed6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.10.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 be9851b26952a50a7393ce3acf8e2bacb73f18bff1dabd8fc56d05642cba147d
MD5 387c26dcc084493c8c55056426c48932
BLAKE2b-256 f27c0179b2b6d661f5015cea8c239bc7f9a44725b17ca5f0ed59ed51eb3d546b

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