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.2.tar.gz (977.8 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.2-cp39-abi3-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.9+Windows x86-64

sidereon-0.9.2-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.2-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.2-cp39-abi3-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

sidereon-0.9.2-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.2.tar.gz.

File metadata

  • Download URL: sidereon-0.9.2.tar.gz
  • Upload date:
  • Size: 977.8 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.2.tar.gz
Algorithm Hash digest
SHA256 a51f56c9532959b41db3cc14a707504ff2d9bf9b2b81600aa52d1db4f9e4ecb8
MD5 3ab397a99db317e1f25461eb749cbffa
BLAKE2b-256 e81bfc360535df21c44c11032df899bd7b3a560006429b8fde3ee4f5b0a1c58b

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.2.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.2-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: sidereon-0.9.2-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.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9b338cdf5782056db82726af968c76664977f363cc65c5ffcef36d4004f987da
MD5 8984c08c3f944a6289fa3054f398a5fe
BLAKE2b-256 fcb9ccb2151a7cb839a1e5e7e83ed40defc6a771b59820c9d3a21f9c2ed45e0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.2-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.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 65ec81f87ed32683986e8e401e94f97685715382fa338ed0ec588d75d06daa22
MD5 ff2d53b1dce36ae1a2194abc3c9a278e
BLAKE2b-256 f6da43395d4cde02160394c8015c944087a7bd153c40c4d39e3ecc19112241ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.2-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.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8980e41c11f536a2a036b76ac9aecce93befb9c4f0fd1def13942f60f8b007cc
MD5 bf24d17894cbc2e536069d8f81d58df9
BLAKE2b-256 210ea386ae2da022e4dad22027fb6f6ba676388b6a2c6c549a40cd70898a78d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.2-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.2-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 75c52849960ef4310753c32d9f7a8cace5d0820e00313fe71d50921c50014dbe
MD5 b811956f4b3be5000ed9e77f50eb5364
BLAKE2b-256 479959336282459b0653f2b4dcf874ea52d9b2e76b481bd32284439d6162d3f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.2-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.2-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for sidereon-0.9.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8d46561efb345299a35b5c48d8cb44d1530601a1fef362e3e2ae813a55f08952
MD5 5268bab769a668ed022e4f6e683dd8d2
BLAKE2b-256 153797f4aea72c3f571d1aab300bfbd01a0fa39ba4e91d2e7560c8cf3347606f

See more details on using hashes here.

Provenance

The following attestation bundles were made for sidereon-0.9.2-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