Skip to main content

Lossless round-trip across orbital state-vector and ephemeris formats.

Project description

orbit-formats

CI Docs PyPI Python versions License: MIT

Lossless round-trip across orbital state-vector and ephemeris formats.

orbit-formats reads and writes the full CCSDS NDM family (OEM, OMM, OPM, OCM, AEM, APM, CDM, TDM, and the combined NDM, in KVN and XML), TLE (two-line / 3LE / catalogue / alpha-5), the Celestrak / Space-Track flat OMM (JSON and CSV), STK ephemeris, STK attitude, SP3, and SPICE SPK (behind the [spk] extra); additionally reads GMAT report and RINEX navigation; rotates Cartesian states across TEME / EME2000 / GCRF / ICRF / ITRF and projects Earth-fixed positions to geodetic longitude / latitude / height; surfaces OPM / OCM maneuvers on the canonical object and projects every time-series category — ephemeris, state, mean-element set, and attitude — to a DataFrame; and round-trips its writable formats losslessly, cross-validated against Orekit and SPICE. See the changelog for released functionality.

What this is

orbit-formats reads any supported orbital state or ephemeris format into a single canonical in-memory representation, writes it back to any supported target, and round-trips losslessly when the two formats can express the same information. When a conversion cannot preserve information — covariance a target cannot hold, the mean-element semantics of a TLE, a value truncated to a format's field width — it emits an explicit, structured warning naming what was lost, never a silent drop.

It consolidates the format-I/O layer that astro-tools projects keep re-implementing into one permissively-licensed (MIT) library that anything in the org — or outside it — can depend on as the single source of format truth.

Quick start

from orbit_formats import read, write

# read auto-detects the format; an OEM becomes a canonical Ephemeris
eph = read("orbit.oem")

# the canonical DataFrame downstream consumers adopt: Epoch, X, Y, Z, VX, VY, VZ
df = eph.to_dataframe()
df.attrs["coordinate_system"], df.attrs["time_scale"]

# round-trip a file byte-for-byte by retaining the source
write(read("orbit.oem", retain_source=True), "copy.oem")

A conversion that cannot carry every field across warns (naming what was lost) rather than dropping data silently; one that cannot be done without modelling — a TLE's mean elements to an ephemeris — is refused, not faked. See the lossy-conversion contract and the conversion-capability matrix.

Supported formats

Format Read Write Canonical form
TLE / 3LE mean-element set
CCSDS OEM (KVN + XML) ephemeris
CCSDS OMM (KVN + XML) mean-element set
OMM JSON / CSV (Celestrak / Space-Track) mean-element set
CCSDS OPM (KVN + XML) state vector
CCSDS OCM (KVN + XML) ephemeris
CCSDS AEM (KVN + XML) attitude
CCSDS APM (KVN + XML) attitude
CCSDS CDM (KVN + XML) conjunction
CCSDS TDM (KVN + XML) tracking
CCSDS combined NDM (KVN + XML) aggregate of NDM messages
GMAT report ephemeris / state
STK ephemeris ephemeris
STK attitude attitude
SP3 (SP3-c / SP3-d) ephemeris
RINEX navigation (3.x) mean-element set / state
SPK ([spk] extra) ephemeris

The canonical representation — a small typed dataclass family unified by a metadata spine — is the format-agnostic form everything reads into and writes from. Every time-series category — Ephemeris, StateVector, MeanElementSet, and Attitude — projects to a pandas DataFrame.

What this is not

  • Not a propagator, integrator, or analysis toolkit — it does only the conversion the formats themselves require.
  • Not a general frame-transformation engine — it performs the time-scale and frame transforms cross-format conversion needs and defers arbitrary transforms to astropy or SPICE.
  • Not a way to turn a TLE's mean elements into an osculating state — that is a propagation, not a format conversion.

Installation

pip install orbit-formats

SPICE SPK support is kept behind an optional extra (heavier binary-kernel dependency):

pip install orbit-formats[spk]

orbit-formats requires Python 3.10, 3.11, or 3.12.

Documentation

Full docs at https://astro-tools.github.io/orbit-formats/.

Development

git clone https://github.com/astro-tools/orbit-formats.git
cd orbit-formats
uv sync --all-groups

See CONTRIBUTING.md for the full branch / PR / test workflow.

Licence

MIT. See LICENSE.

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

orbit_formats-0.5.0.tar.gz (497.4 kB view details)

Uploaded Source

Built Distribution

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

orbit_formats-0.5.0-py3-none-any.whl (284.7 kB view details)

Uploaded Python 3

File details

Details for the file orbit_formats-0.5.0.tar.gz.

File metadata

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

File hashes

Hashes for orbit_formats-0.5.0.tar.gz
Algorithm Hash digest
SHA256 a60099ecc67cf0e6466e19f8c38b2e57ff3048f7499acfdadd5f523dca965f86
MD5 b329bfe7cd381d15fe8c2505ff570f76
BLAKE2b-256 12aa0373c8a4b91a0de303cba209af0985081002024e794505620f76159fceb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_formats-0.5.0.tar.gz:

Publisher: release.yml on astro-tools/orbit-formats

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

File details

Details for the file orbit_formats-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: orbit_formats-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 284.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orbit_formats-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d4313cf213b7861fd63cf4d5bd9138d8286641a951f5c1ff2c170d3b9fa0e19b
MD5 d53946fa67923caaed445a5049b8d977
BLAKE2b-256 4a2a1f4302f04450b9e858a258365b7b1f2e0eaa5ebc10d49ec07d3135887e56

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_formats-0.5.0-py3-none-any.whl:

Publisher: release.yml on astro-tools/orbit-formats

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