Skip to main content

Python bindings for the Sidereon GNSS positioning engine (SP3 loading and SPP/RTK/PPP solves)

Project description

sidereon

GNSS and astrodynamics for Python, with answers you can trust.

sidereon is the Python interface to the sidereon engine: a single GNSS and astrodynamics core, written in Rust, exposed here as an idiomatic Python package. You get orbit propagation, precise positioning, frames and time, ephemeris handling, and format parsing through plain Python objects and numpy arrays. The engine is reference-validated (SGP4 is bit-exact to Vallado's implementation; frames and time check against Skyfield and IERS; the positioning stack checks against IGS products), so the numbers match the sources the field already trusts.

The Rust core is compiled into the wheel and linked statically, so the package is fast and the only runtime dependency is numpy. There is no separate native install.

Install

pip install sidereon
import sidereon
print(sidereon.__version__)

Example: where is the ISS in the sky right now?

No data files and no setup: give it a two-line element set and a ground station, and ask for the look angles. Everything that takes time takes unix microseconds (int64) and arrays propagate in one call.

import numpy as np
import sidereon

tle = sidereon.Tle(
    "1 25544U 98067A   24001.50000000  .00016717  00000-0  10270-3 0  9009",
    "2 25544  51.6400 208.8657 0002644 250.3037 109.7782 15.49560812999990",
)
station = sidereon.GroundStation(latitude_deg=51.5, longitude_deg=-0.1, altitude_m=10.0)

# Epochs are unix microseconds (int64); arrays propagate in one call.
epochs_us = np.array([1_704_110_400_000_000], dtype=np.int64)
look = tle.look_angles(station, epochs_us)
print(look.azimuth_deg, look.elevation_deg, look.range_km)

Tle also gives you propagate() (TEME state arcs as numpy arrays) and find_passes() (rise/set/peak over a window). The positioning side has the same shape: a typed config in, a result object with numpy positions and scalar attributes out.

import sidereon

sp3 = sidereon.load_sp3(open("igs_product.sp3", "rb").read())

config = sidereon.SppConfig(
    observations=[
        sidereon.SppObservation("G08", 23_825_519.8),  # PRN, pseudorange (m)
        sidereon.SppObservation("G10", 22_717_690.1),
        # ...more satellites
    ],
    t_rx_j2000_s=646_272_000.0,
    t_rx_second_of_day_s=43_200.0,
    day_of_year=176.5,
    initial_guess=[4_500_000, 500_000, 4_500_000, 0.0],
    corrections=sidereon.SppCorrections(ionosphere=True, troposphere=True),
    with_geodetic=True,
)

solution = sidereon.solve_spp(sp3, config)
print(solution.position)     # numpy [x, y, z] ECEF metres
print(solution.rx_clock_s)   # receiver clock bias, seconds

Capabilities

The Python package mirrors the full breadth of the engine.

  • Orbit propagation: SGP4/SDP4 from TLE/OMM, numerical propagation, batch and constellation arcs, pass prediction, look angles, and coverage analysis.
  • GNSS positioning: single-point positioning (SPP), RTK (float and fixed), PPP (float and fixed), DGNSS, RAIM fault detection, and DOP.
  • Ephemeris and time: broadcast ephemeris and precise SP3 products, JPL SPK (DAF/.bsp) kernels, scale-aware time (UTC/TT/TDB/UT1/GPS), and Earth orientation parameters (EOP).
  • Geometry and events: reference frames, geodetic and ECEF conversions, look angles, eclipse, conjunction screening with collision probability, initial orbit determination (IOD), and orbital elements.
  • Atmosphere: Klobuchar and NeQuick-G ionosphere, IONEX maps, and troposphere models.
  • RF: link budget (FSPL, EIRP, C/N0, antenna gain).
  • Formats: parse and serialize TLE/OMM, CCSDS OEM/OPM/CDM, RINEX, CRINEX, SP3, IONEX, ANTEX, and RTCM.

The binding adds no modeling of its own: every result is exactly what the engine computes, returned as numpy arrays, typed objects, and real Python exceptions (sidereon.SidereonError and friends). Full signatures live in the bundled type stubs (sidereon/__init__.pyi).

One engine, every language

sidereon is one validated core with first-class interfaces, so the numbers are the same everywhere:

See the live demo and docs at sidereon.dev.

Building from source

For contributors: pip install maturin, then maturin develop from the repo. Run the tests with pytest.

License

MIT.

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

sidereon-0.9.1.tar.gz (972.4 kB view details)

Uploaded Source

Built Distributions

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

sidereon-0.9.1-cp39-abi3-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.9+Windows x86-64

sidereon-0.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

sidereon-0.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

sidereon-0.9.1-cp39-abi3-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

sidereon-0.9.1-cp39-abi3-macosx_10_12_x86_64.whl (4.2 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file sidereon-0.9.1.tar.gz.

File metadata

  • Download URL: sidereon-0.9.1.tar.gz
  • Upload date:
  • Size: 972.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sidereon-0.9.1.tar.gz
Algorithm Hash digest
SHA256 1b35ba44985f5456a1c27b65a0f4bb45e46667f7dfa119acec8bd8e4758dc1ab
MD5 bb51a9564314388859dcf7f506202de4
BLAKE2b-256 adbeddb0fd30e05a09c90a8cafc10e6c63c54710ba954e43c145eb1a45750068

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.1.tar.gz:

Publisher: release.yml on neilberkman/sidereon-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sidereon-0.9.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: sidereon-0.9.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sidereon-0.9.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3d9ce923ac830bf2dd071ec6f05606810cb9f2a8adb204287bc2a562f81c80a2
MD5 096d8b5250761d13046db2eefb9c2e45
BLAKE2b-256 a9b47fc69bcdb7b9a1a0243c352f3b4c43ffdb3f56049031f32cc5d6072b304d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.1-cp39-abi3-win_amd64.whl:

Publisher: release.yml on neilberkman/sidereon-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sidereon-0.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d13ecf52e2cb40bd6a03ecc64561c0f9e3d79b80f23835969237c670d40f3d6
MD5 a0d382e8885b1e8d06b5e7890913fed3
BLAKE2b-256 2b7822e83b3a37214c6f333f2382b696d6128e5d32a2c611a1fc5538ae507627

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on neilberkman/sidereon-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sidereon-0.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7715eb7eff7701fd80a33496098d756e529f1244bb057e3122adeb948721b2d5
MD5 bb3ec6925a43ac8fef77aa4da4bcff05
BLAKE2b-256 a54d936387dfbfceb5a81ae35db59591a1c6f28caabf2a42f631a9ca0473751b

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on neilberkman/sidereon-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sidereon-0.9.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 db506ca921f159cf3789c511bc4d8473fff0c9732de50a9f89fc4e63bd903507
MD5 4959e4655be607427aad57fbc3696009
BLAKE2b-256 3c0f3ca1eee088723171b31d38f8ea0f3db789ed13061917f7446a1ba2088510

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release.yml on neilberkman/sidereon-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sidereon-0.9.1-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6dbd53c20e1cfb3b7eadc0ff7837d78417b129e995b82267bee0de8c5924df8c
MD5 6312bde0ebc9ff9ed069ab634d9b81e7
BLAKE2b-256 292282e47b1315df8d00e665eb13ae437dc3fb267d098d149330f1aa1255d8ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.1-cp39-abi3-macosx_10_12_x86_64.whl:

Publisher: release.yml on neilberkman/sidereon-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page