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.10.0.tar.gz (1.0 MB view details)

Uploaded Source

Built Distributions

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

sidereon-0.10.0-cp39-abi3-win_amd64.whl (4.3 MB view details)

Uploaded CPython 3.9+Windows x86-64

sidereon-0.10.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view details)

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

sidereon-0.10.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.8 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

sidereon-0.10.0-cp39-abi3-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

sidereon-0.10.0-cp39-abi3-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for sidereon-0.10.0.tar.gz
Algorithm Hash digest
SHA256 6b0cd4ccc688883873deee8d058d6571b2cffe9ca57aa910620659ee9916bfd1
MD5 8c5d9ec102f537357c21ef77425e3f46
BLAKE2b-256 68a5e01c2af2183e6ba046ef2b8ce777e63251dd461c7d9ae76de45dc24c403c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: sidereon-0.10.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 4.3 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.10.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dcac26af962a722bd365e01a743eaa13f69b6424afeb0a67d5448d868a13d9a8
MD5 cc7fb4e09c98dea1dd3d4f7e4aa31d73
BLAKE2b-256 d9d2ab29237106475dfc548141eed1497940431b052265a68864d28ce025dd96

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sidereon-0.10.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 88c056ab205b8c747d7d44ada49b820e91bb15464d77ed816f77cd15955bd927
MD5 4c0ad0d6e49801a599919033baf3a8f5
BLAKE2b-256 40f64b0311a977c78d10b21cb55277342f23e5f796c3d10bad49839dbb9f800b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sidereon-0.10.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9883370efc2be4e17e3f869a9e6bdaaf4df50380777bb8fdba457ec795683d7e
MD5 175d9a0ba5d8c234e578cd6edc9a0195
BLAKE2b-256 93494ec7e479bc6dada5eeb4e954b6c9f54d2b9cfeb7fd04ca354450deeeb3c7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sidereon-0.10.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 006e555dd630b42b2f22571c4ecf4ee16c2e403438bcf71af889ea32195b2ad4
MD5 5bcaffa84281f9cf2443cd5052ea72b2
BLAKE2b-256 50b5a971f84852693e799b784b165f2d3700a501c988e3d3b32c1673a6a860fb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for sidereon-0.10.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1d7c10b932ffe15aee006b0d0402075f6447e6f325b3671a16d7c768098c2786
MD5 e4f4006921f4f69f0a5dcc0b92a0994a
BLAKE2b-256 9393cfe27b2d5a71be993e70a4a4f9497fbc0743575f95aae45a4815cc814d99

See more details on using hashes here.

Provenance

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