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//! - [`transforms`] - the transform engine: TEME->GCRS, GCRS->ITRS,
12//! ITRS->geodetic (WGS84), geodetic->ITRS, and topocentric az/el/range.
13//! Depends on [`nutation`], [`precession`], [`crate::astro::math::mat3`],
14//! and [`crate::astro::time::scales`].
15//!
16//! The numerics are byte-for-byte identical to the `orbis_nif` originals so the
17//! existing Skyfield 0-ULP parity (`test/skyfield_parity_test.exs`) holds. The
18//! only changes on relocation are visibility (`pub(crate)` -> `pub`) and import
19//! paths; the operation order, summation order, transcendental sequence, and the
20//! single sanctioned `mul_add` site are preserved exactly.
21//!
22//! Per the crate-boundary invariant, the Rustler decode/encode shims
23//! (`*_impl`, `parse_datetime_tuple`) stay in `orbis_nif`; only the pure
24//! float-producing compute functions live here.
25
26pub mod nutation;
27pub mod precession;
28pub mod transforms;