1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2026 Vallés Puig, Ramon
//! # Reference Frames Module
//!
//! This module re-exports astronomical reference frames defined in `affn`
//! and adds siderust-specific extensions including planetary body-fixed
//! frames and historical catalog frames.
//!
//! ## Predefined Frames (from `affn`)
//!
//! The following reference frames are available (from `affn`):
//!
//! - [`ICRS`]: International Celestial Reference System (quasi-inertial, fundamental reference).
//! - [`ICRF`]: International Celestial Reference Frame (ICRS realization via VLBI).
//! - [`Horizontal`]: Local horizon system (altitude-azimuth).
//! - [`EquatorialMeanJ2000`]: Mean equator/equinox of J2000 (FK5/J2000 mean).
//! - [`EquatorialMeanOfDate`]: Mean equator/equinox of date (precessed, no nutation).
//! - [`EquatorialTrueOfDate`]: True equator/equinox of date (precession + nutation).
//! - [`EclipticMeanJ2000`]: Mean ecliptic coordinate system at J2000.
//! - [`EclipticOfDate`]: Mean ecliptic coordinate system of date.
//! - [`EclipticMeanOfDate`]: Alias for [`EclipticOfDate`] (naming parity).
//! - [`EclipticTrueOfDate`]: True ecliptic coordinate system of date.
//! - [`ITRF`]: International Terrestrial Reference Frame (Earth-fixed).
//! - [`ECEF`]: Earth-Centered, Earth-Fixed (geocentric, rotating with the Earth).
//! - [`Galactic`]: Galactic coordinate system (IAU 1958).
//! - [`GCRS`]: Geocentric Celestial Reference System.
//! - [`CIRS`]: Celestial Intermediate Reference System.
//! - [`TIRS`]: Terrestrial Intermediate Reference System.
//!
//! ## Siderust-Specific Frames
//!
//! All frames are now defined in `affn` and re-exported here.
//!
//! ## Planetary Body-Fixed Frames (from `affn`)
//!
//! The following body-fixed frame marker types are defined in `affn`
//! (behind `feature = "astro"`) and re-exported here. The generic
//! [`IauRotationParams`] type comes from [`crate::astro`], while body-specific
//! constants (e.g. `MARS_ROTATION`) are defined in [`crate::bodies::solar_system`]
//! and re-exported by [`planetary`]. `FrameRotationProvider`
//! implementations live in `transform::providers`.
//!
//! - [`MercuryFixed`]: Mercury IAU 2015 body-fixed rotation model.
//! - [`VenusFixed`]: Venus IAU 2015 body-fixed rotation model.
//! - [`MarsFixed`]: Mars IAU 2015 body-fixed rotation model.
//! - [`MoonPrincipalAxes`]: Moon principal axes (selenocentric) frame.
//! - [`JupiterSystemIII`]: Jupiter System III magnetic-field-based rotation.
//! - [`SaturnFixed`]: Saturn IAU body-fixed rotation model.
//! - [`UranusFixed`]: Uranus IAU body-fixed rotation model.
//! - [`NeptuneFixed`]: Neptune IAU body-fixed rotation model.
//! - [`PlutoFixed`]: Pluto IAU body-fixed rotation model.
//!
//! Each frame type provides its canonical name via [`ReferenceFrame::frame_name()`].
//! Planetocentric body-fixed frames use latitude/longitude/radius naming
//! via [`SphericalNaming`].
//!
//! ## Extending
//!
//! To define a new reference frame, use the derive macro:
//!
//! ```rust
//! use affn::prelude::*;
//!
//! #[derive(Debug, Copy, Clone, ReferenceFrame)]
//! struct MyCustomFrame;
//! assert_eq!(MyCustomFrame::frame_name(), "MyCustomFrame");
//! ```
/// Planetary body-fixed frame markers and their IAU rotation-parameter constants.
// Re-export trait infrastructure from affn
pub use ;
// Re-export ellipsoid traits and predefined ellipsoids from affn
pub use ;
// Re-export the generic ellipsoidal Position type for direct use
pub use Position as EllipsoidalPosition;
// Re-export all astronomical frame types from affn
pub use ;
// Re-export siderust-specific frame types
pub use ;
// NOTE: The `Horizontal` frame type uses the **North-clockwise** azimuth convention
// (0deg = North, increasing through East). If you are importing data that uses a
// different convention (e.g. South-origin or counter-clockwise), use the helpers in
// [`crate::coordinates::horizontal`] to convert before constructing `Horizontal`
// coordinates.
// =============================================================================
// MutableFrame: Marker for Transformable Frames
// =============================================================================
/// Marker trait for frames that support time-independent mutual transformations.
///
/// This trait is implemented for frames between which coordinate
/// transformations are currently supported (ICRS, EclipticMeanJ2000, EquatorialMeanJ2000).