Skip to main content

sidereon_core/astro/frames/
mod.rs

1//! High-accuracy frame transforms (Skyfield-compatible, 0-ULP).
2//!
3//! The precise frame-transform substrate that used to be `pub(crate)` inside
4//! `orbis_nif`, now a public part of the core crate. It exposes:
5//!
6//! - [`nutation`] - IAU 2000A nutation in longitude/obliquity, mean obliquity,
7//!   the nutation rotation matrix, and the equation-of-equinoxes complementary
8//!   terms. Depends on [`crate::astro::data::iau2000a`] + [`crate::astro::math::mat3`].
9//! - [`precession`] - IAU 2006 precession matrix and the ICRS->J2000 frame bias.
10//!   Depends on [`crate::astro::math::mat3`].
11//! - [`orientation`] - a cacheable full GCRF<->ITRF Earth-orientation
12//!   evaluation built from the existing transform substrate.
13//! - [`transforms`] - the transform engine: TEME->GCRS, GCRS->ITRS,
14//!   ITRS->geodetic (WGS84), geodetic->ITRS, and topocentric az/el/range.
15//!   Depends on [`nutation`], [`precession`], [`crate::astro::math::mat3`],
16//!   and [`crate::astro::time::scales`].
17//!
18//! The numerics are byte-for-byte identical to the `orbis_nif` originals so the
19//! existing Skyfield 0-ULP parity (`test/skyfield_parity_test.exs`) holds. The
20//! only changes on relocation are visibility (`pub(crate)` -> `pub`) and import
21//! paths; the operation order, summation order, transcendental sequence, and the
22//! single sanctioned `mul_add` site are preserved exactly.
23//!
24//! Per the crate-boundary invariant, the Rustler decode/encode shims
25//! (`*_impl`, `parse_datetime_tuple`) stay in `orbis_nif`; only the pure
26//! float-producing compute functions live here.
27
28pub mod nutation;
29pub mod orientation;
30pub mod precession;
31pub mod transforms;
32
33pub use orientation::{EarthOrientation, EarthOrientationProvider, TdbEarthOrientationProvider};