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.0.tar.gz (702.1 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.0-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.0-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.11.0-cp314-cp314-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rust_ephem-0.11.0-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.0-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.11.0-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.0-cp313-cp313-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rust_ephem-0.11.0-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.0-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.11.0-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.0-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rust_ephem-0.11.0-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.0-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.11.0-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.0-cp311-cp311-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

rust_ephem-0.11.0-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.0.tar.gz.

File metadata

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

File hashes

Hashes for rust_ephem-0.11.0.tar.gz
Algorithm Hash digest
SHA256 aa18992f6f2513ef96a8611ccd31b6e034a784e20e5d7c49784c179fba6310ba
MD5 913119a30a3ff6afbc8e19b40dd707d3
BLAKE2b-256 7d8dbbfb6aa2db6f9ed99cb8eb3242aeb50b99b456b726e157d081beafcc797a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e620e87d6e4b54b6f55a11914cd9e1e3ee7e14d15d7fefd602f75993d68f83d
MD5 12c7cbee59191723af9b0c8adc1723bc
BLAKE2b-256 4c6eeffb2771afae88bd5187b992cf58adf541ad854ac33fdc67b31c0bfe0435

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 44dfe53b4028c330b414a79c4bef9b80987d342a6a80b7a59976aac64fe280c4
MD5 f2c42671a0643b2a6143ff159e266362
BLAKE2b-256 48a1760a218e659dbac8eace5c7ff93993af5dd9b0d8dfa876cc6be60c0f6618

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 373f39956d6480ef45e4635c45b18a02c7d6712be5b45db42313302f4fd2c077
MD5 273dd77728474cbd1be901627f145784
BLAKE2b-256 b5f76b0d60946f408f21b8ec6efdd0502943262235ea01cfd4724f8f32669fa2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1b89ff8c15e276d3eae4b81b169caf73ec791b809ef926c09757b9fa5619001b
MD5 d536893f323a6b74ccafc1b37e8e5b74
BLAKE2b-256 3838a95e69293882b360aa9f8879d53c314d5ffe8907f8de13591cd6b8bc7bf7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 693694d5bb9d8b1de8910495080e87258b0f59b7cf29beba67a1ba59f7c9d6fa
MD5 d7cd988b570c806916c123bb618bfc6b
BLAKE2b-256 cb032553b297237e2eea8ed1e7d739b26e272f4945659414353b25d9f3211b84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 26ff62bb7f6750eb08be82ba7773ffa6c6482d6375c068c80824a06a7ad45121
MD5 96a16b800a59fb09c08d527c89c825c3
BLAKE2b-256 68c80362294528558cc3bd712f9ae31b91c1a0362f1065048dae85375ffc4265

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c26b99b8fbc3bd0de2c257edab374fdf9ba091233af8462719a96ed773f6ec8b
MD5 7f7d19fa935b757312fbe65b9a17a98f
BLAKE2b-256 70a8478f3e1c035fc230f3a828fd3c4bdca2a085c9d6015d1151f1244fa89617

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9d7258465d4bbf37f0df93f4097f492876c94a9a379f85b3fb3ea4241304b69b
MD5 512264e53100b13040ad7bd3cc9ddf80
BLAKE2b-256 9cded14319f12362114438a0d6f3575a11ef2f2ddd0a6d73306eb8a21533e7bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4ea5c6cf37ce58b51c659c5be3ba0397d2664a26e1d235e55d1385bfd3176971
MD5 42b368b662fae2114202d03daf59d78b
BLAKE2b-256 475bd1fa5f02baaed949130ba9a1532b021aad4354cdae5803052d7674a578d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 321f9fa7c53d2afc93e6065f482d59eb0bbbeffa0f5f9a21d512337e6b951757
MD5 f8dda3b408897b4428149fb645c6a061
BLAKE2b-256 c86dab90b8b619e1a780e971124dc2abb3e69e0a63f70ea7b999211793dcb285

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59d4c081cb07208f0adf2e87a155bdd6ba3d39477c01a2591de2a03302fb54ed
MD5 a5f6c3aa4aee2c4274be992cc51dc533
BLAKE2b-256 03d3c3b41814b16befe3f3b38e8832f6248d640d12a5143af0f0212b3330a034

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6cdeecc9da8dc55f86f173c7d44aae1311b2a44e8c38f8c1153c1f125036b8a6
MD5 e247d5dbec720365c076f2a792417a02
BLAKE2b-256 51d4d4b000487507fe76df0b24a44c262f6a90f417627488999bda08a8a435b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 885d7f89c8f560102336ce2ca3af78929e39ac6298c2727c6212387525476f1d
MD5 3b949299bc4f3b3f66482b91a704e3d5
BLAKE2b-256 729c09864c1d1c5942c74c44a6a878515ba20af27c9f076c3fd04157f97a6837

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5a3ada15d1b8591fd8924310e50eb074a7cef9686a8aad2e32fb2645cfb810aa
MD5 4f96c5591b600b9ff761117244ceee4e
BLAKE2b-256 8df680467b89407191df56693e06331ea45ed022159a14abb42ba4bdc0b1aa3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39097e80d82af27ace696aece9253f71cd50e1c3bd425af5de0b69a1f5515270
MD5 cc4ba405df27871f04afad3ae36ff2f1
BLAKE2b-256 66d55da8c0a05693a3733e37559cc329408e185e6c49382e8228b4b2076306c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 65f3e8ff3ef2dc780c8abe5dac6282eb0e576b61a4575b0c3329c3e00567edf4
MD5 d508dbee12a4491434344207c8d6465f
BLAKE2b-256 8752950eb5185b06c1563299a038e38f4f70c148cf05bc0c63645e0ae5ff02c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5b68dfdab965ce9ffcd5a23230a03075b18931a78dfd6e319c8246655ee27c44
MD5 263b13c0bac38ad3da342b335c1cca39
BLAKE2b-256 a7853f8617a9ad2a4b2790ea127db842843994a2a9b3b4d16a6acfe34a0f6afe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b263b41380b65a8407c547a89c3cf5933789623b1f85a0b8dd3ebeb38ab4ba59
MD5 50dd3ccce845bf14fb46eadd6b2439d2
BLAKE2b-256 ff15b3bb4d64f8d0b8920de0c340fcf697f1cc14a1f17113a397eec90306393f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7620691f4b30f2088580ad96b10ff363c15732fb7b24f142f616a296b0267d30
MD5 08580c8ab87dd688d9a24ffaef0fc4f2
BLAKE2b-256 1e401661d2aac4f5e29b1067744e2347bd140f1a5f7bf5c89c81430b64f7e3dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for rust_ephem-0.11.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2daa9b9c96e2c361ca319a87eb3f2abeecc5abc4c48c15f7887bfae85601767c
MD5 29f3bd8294e22c4b72834e7cd2d96624
BLAKE2b-256 da7152c16df53783420b0e2fee3667640b7d03de576b32e1adb7a83b02a8c84c

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