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.

Status: 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 round-trips its writable formats losslessly, cross-validated against Orekit and SPICE. Next: the v1.0 API / representation freeze and a published deprecation policy. 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.

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.4.0.tar.gz (476.8 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.4.0-py3-none-any.whl (274.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: orbit_formats-0.4.0.tar.gz
  • Upload date:
  • Size: 476.8 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.4.0.tar.gz
Algorithm Hash digest
SHA256 5308f91aecb148697d9231ce73d291c9dd10ce1ad11139c06da57b9f720a94bc
MD5 a912bafec70c33da384f95d1178c4149
BLAKE2b-256 8381a9c1529c7a230aad8be8da70c8e341262ebe682cc9ae940b5fc79dbf67fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_formats-0.4.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.4.0-py3-none-any.whl.

File metadata

  • Download URL: orbit_formats-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 274.4 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 66f3ffb5bfd3fb47bd12a1f0b2234e8909560bf7810b4d99b3a948363645dadb
MD5 22c4511247633cc841d38b1f00512f21
BLAKE2b-256 9c33f76e2920803612c92be7ddf157fca4c3d3f779c10939353d9af67b73bdeb

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_formats-0.4.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