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 with atmospheric drag and orbital-decay estimation, batch and constellation arcs, pass prediction, look angles, and coverage analysis.
- Orbital mechanics: classical, equinoctial, and modified equinoctial elements, anomaly conversions and Kepler propagation, Lambert transfers, initial orbit determination (IOD), and relative motion in RIC/RTN/LVLH frames with Clohessy-Wiltshire propagation.
- GNSS positioning: single-point positioning (SPP), RTK (float and fixed), PPP (float and fixed), DGNSS, a robust solve driver with RAIM fault detection and exclusion (FDE), and DOP.
- GNSS corrections and products: SBAS and RTCM SSR corrections applied to broadcast ephemeris, Bias-SINEX code and phase biases (DCB/OSB), Klobuchar and NeQuick-G ionosphere, IONEX maps, and troposphere models.
- Ephemeris and time: broadcast ephemeris and precise SP3 products, JPL SPK (DAF/.bsp) kernels, uniform satellite-state sampling across broadcast and precise sources, 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, and angular geometry (separation, position angle, phase angle, beta angle).
- Observation and almanac: apparent places for the Sun, Moon, and any SPK body (astrometric and apparent RA/Dec plus az/el, with refraction and polar motion), sub-solar and sub-observer points, the terminator, parallactic angle, satellite visual magnitude, moonrise/moonset, seasons, moon phases, planetary events, meridian transits, and lunar and solar eclipses.
- Terrain: DTED elevation lookup and geoid (EGM96) height conversion.
- RF: link budget (FSPL, EIRP, C/N0, antenna gain).
- Formats: parse and serialize TLE/OMM, CCSDS OEM/OPM/CDM, RINEX, CRINEX, SP3, IONEX, ANTEX, Bias-SINEX, SBAS logs, and RTCM.
- Data acquisition: the
sidereon.datamodule downloads and caches GNSS products (SP3 and IONEX from IGS/MGEX analysis centers, including merged multi-center SP3) and DTED terrain tiles.
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:
- sidereon: the Rust core and engine
- sidereon-c: C interface
- sidereon-ex: Elixir interface
- sidereon-wasm: WebAssembly interface
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sidereon-0.12.0.tar.gz.
File metadata
- Download URL: sidereon-0.12.0.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac6900e9855b005b015df01d91abe2665eac252bf63287df1a9abe8f74d00aa7
|
|
| MD5 |
e3db8fd6b9a68acff4a42792aa099166
|
|
| BLAKE2b-256 |
2cdda00eb0ad310430bfbbd48fd9291daa498479ba0674d62c4c3dd11e5939b4
|
Provenance
The following attestation bundles were made for sidereon-0.12.0.tar.gz:
Publisher:
release.yml on neilberkman/sidereon-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sidereon-0.12.0.tar.gz -
Subject digest:
ac6900e9855b005b015df01d91abe2665eac252bf63287df1a9abe8f74d00aa7 - Sigstore transparency entry: 2064817564
- Sigstore integration time:
-
Permalink:
neilberkman/sidereon-python@871078497039234060c3c12d531c7924efc2ca00 -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/neilberkman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@871078497039234060c3c12d531c7924efc2ca00 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sidereon-0.12.0-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: sidereon-0.12.0-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 5.2 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b68152f856e586cfae7f0b634c855002c50ca914b4b10d54fd754bec2da0a78a
|
|
| MD5 |
1c5e27093508b7a8da15d1df39d620fd
|
|
| BLAKE2b-256 |
cbe5b347f72af2105d62ace7d7c765f6529f516513d594a03dc02046e829ae30
|
Provenance
The following attestation bundles were made for sidereon-0.12.0-cp39-abi3-win_amd64.whl:
Publisher:
release.yml on neilberkman/sidereon-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sidereon-0.12.0-cp39-abi3-win_amd64.whl -
Subject digest:
b68152f856e586cfae7f0b634c855002c50ca914b4b10d54fd754bec2da0a78a - Sigstore transparency entry: 2064817567
- Sigstore integration time:
-
Permalink:
neilberkman/sidereon-python@871078497039234060c3c12d531c7924efc2ca00 -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/neilberkman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@871078497039234060c3c12d531c7924efc2ca00 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sidereon-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: sidereon-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 5.8 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7661baaee6bfe39b84f357ae73e54c7b29c7fc4d46ad3a297000530f4ac06c26
|
|
| MD5 |
3b9d3e3d760ab9c02eaa49ddb1cdc35c
|
|
| BLAKE2b-256 |
3dfaf03e60706dda20a4b2fe6ceb11769ec3025eed9d581a397dd973863f762e
|
Provenance
The following attestation bundles were made for sidereon-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on neilberkman/sidereon-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sidereon-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
7661baaee6bfe39b84f357ae73e54c7b29c7fc4d46ad3a297000530f4ac06c26 - Sigstore transparency entry: 2064817565
- Sigstore integration time:
-
Permalink:
neilberkman/sidereon-python@871078497039234060c3c12d531c7924efc2ca00 -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/neilberkman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@871078497039234060c3c12d531c7924efc2ca00 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sidereon-0.12.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: sidereon-0.12.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 5.8 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87170f7c66301e6aacb168a8d17dd3e97ceb3841e946e4b1d8f0d195df576ceb
|
|
| MD5 |
94ed4f1c9bcfc3ac28d84d5b1d05d077
|
|
| BLAKE2b-256 |
ed14ca7bb446a89fdcf2db93da0ef96699c680a73876aa04417bdff9e32bd85c
|
Provenance
The following attestation bundles were made for sidereon-0.12.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on neilberkman/sidereon-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sidereon-0.12.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
87170f7c66301e6aacb168a8d17dd3e97ceb3841e946e4b1d8f0d195df576ceb - Sigstore transparency entry: 2064817569
- Sigstore integration time:
-
Permalink:
neilberkman/sidereon-python@871078497039234060c3c12d531c7924efc2ca00 -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/neilberkman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@871078497039234060c3c12d531c7924efc2ca00 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sidereon-0.12.0-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: sidereon-0.12.0-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.5 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
967f51806c65a72d2c989a1661409d1f25f72ac4aaf26bc67daacfcd119b1d69
|
|
| MD5 |
0627a2909901e6256f8bdc0a70b38a00
|
|
| BLAKE2b-256 |
23241fa74d891fb8c5cd0244ac3aac1f02c58bc8b3e92588ed4d68829d7a7f6d
|
Provenance
The following attestation bundles were made for sidereon-0.12.0-cp39-abi3-macosx_11_0_arm64.whl:
Publisher:
release.yml on neilberkman/sidereon-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sidereon-0.12.0-cp39-abi3-macosx_11_0_arm64.whl -
Subject digest:
967f51806c65a72d2c989a1661409d1f25f72ac4aaf26bc67daacfcd119b1d69 - Sigstore transparency entry: 2064817566
- Sigstore integration time:
-
Permalink:
neilberkman/sidereon-python@871078497039234060c3c12d531c7924efc2ca00 -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/neilberkman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@871078497039234060c3c12d531c7924efc2ca00 -
Trigger Event:
push
-
Statement type:
File details
Details for the file sidereon-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: sidereon-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.7 MB
- Tags: CPython 3.9+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
777e52bed8ec735ddb356d08d25f479573c2a387156132bad418439eb6942917
|
|
| MD5 |
f0c414795572f1803acd6256848fb9fd
|
|
| BLAKE2b-256 |
aa74816809a9e05e5c463d60edaf3d12ce61989e485ed48d1249a5fc3cbb6f04
|
Provenance
The following attestation bundles were made for sidereon-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl:
Publisher:
release.yml on neilberkman/sidereon-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sidereon-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl -
Subject digest:
777e52bed8ec735ddb356d08d25f479573c2a387156132bad418439eb6942917 - Sigstore transparency entry: 2064817577
- Sigstore integration time:
-
Permalink:
neilberkman/sidereon-python@871078497039234060c3c12d531c7924efc2ca00 -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/neilberkman
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@871078497039234060c3c12d531c7924efc2ca00 -
Trigger Event:
push
-
Statement type: