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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
//! # sidereon-core
//!
//! The complete Sidereon engine in one crate. It folds the numerical
//! astrodynamics core (orbit propagation, force models, frames, time, SGP4)
//! together with the GNSS domain layer (SP3, broadcast ephemeris, multi-GNSS
//! positioning, RTK/PPP, ionosphere/troposphere, DOP).
//!
//! - The propagation/astro layer is always present under the [`astro`] module.
//! - The GNSS layer lives behind the default-on `gnss` cargo feature, so a
//! propagation-only consumer can build with `--no-default-features` (plus
//! any astro features it wants) and never compile the IONEX/SP3 parsers.
//!
//! The GNSS façade is organized by user-facing tasks:
//!
//! - [`ephemeris`] - precise SP3 and broadcast ephemeris products,
//! - [`rinex`] - RINEX navigation/observation parsing and CRINEX decoding,
//! - [`antex`] - ANTEX receiver and satellite antenna calibration parsing,
//! - [`combinations`] - observable linear combinations such as ionosphere-free,
//! - [`observables`] - forward range, Doppler, and azimuth/elevation prediction,
//! - [`velocity`] - receiver velocity and clock-drift solve from range-rate data,
//! - [`positioning`] - single-point positioning and DOP diagnostics,
//! - [`dgnss`] - code-differential pseudorange correction and rover pairing,
//! - [`quality`] - pseudorange weighting, RAIM, and FDE integrity checks,
//! - [`signal`] - GPS C/A code generation, correlation, and acquisition,
//! - [`ppp_corrections`] - static-arc PPP correction precomputation,
//! - [`atmosphere`] - ionosphere and troposphere corrections,
//! - [`orbit`] - compact reduced-orbit fitting/evaluation.
//!
//! Implementation modules (`sp3`, `rinex_nav`, `spp`, etc.) are crate-private.
//! This is a clean public surface rather than a compatibility shim around the
//! original implementation-shaped module layout.
//!
//! ## Units policy (internal representation)
//!
//! All quantities are stored and computed in **SI base units**, with the frame
//! and datum encoded in the type name (per the spec's frames-in-the-type-system
//! rule), never hidden behind a bare `position_m`:
//!
//! - **Length / position:** meters (`_m`). SP3 positions are ITRF/IGS-frame
//! ECEF meters; SPP receiver positions are WGS84/ITRF-compatible ECEF meters.
//! (The [`astro`] state layer works in kilometers; conversions happen
//! explicitly at the boundary, never implicitly.)
//! - **Time / clock:** seconds (`_s`). Epochs are represented by the [`astro`]
//! time family (`Instant`/`TimeScale`), always scale-tagged; there is no bare
//! ambiguous epoch.
//! - **Velocity:** meters per second (`_m_s`).
//! - **Angles:** radians (`_rad`) internally. Degrees appear only at I/O edges
//! and are named `_deg`.
//! - **Frequency:** hertz (`_hz`).
//!
//! Field and parameter names carry the unit suffix so the unit is visible at
//! every call site. Matrix/vector linear algebra uses `nalgebra`
//! (`DMatrix`/`DVector`) per the spec.
// ---------------------------------------------------------------------------
// Astro / propagation layer. Always present. The GNSS layer below depends on
// it via `crate::astro::*`.
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// GNSS domain layer. Behind the default-on `gnss` feature so a propagation-only
// consumer can opt out. Additional product modules are added as each lands.
// ---------------------------------------------------------------------------
// shared RTK/PPP cycle-slip policy + wide-lane/narrow-lane prep
// shared ANTEX PCV/PCO zenith/azimuth interpolation kernels
// ANTEX receiver/satellite antenna parser + PCO/PCV lookup
// broadcast-ephemeris (GPS LNAV / Galileo I/NAV) orbit + clock
// broadcast-vs-precise (SISRE orbit/clock) accuracy
// carrier-phase combinations, cycle-slip detection, Hatch smoothing
// shared GNSS physical/time constants
// GNSS constellation identity catalog (CelesTrak/NAVCEN)
// Hatanaka (CRINEX) observation-file decoder
// dilution-of-precision geometry (GDOP/PDOP/HDOP/VDOP/TDOP)
// canonical GNSS carrier-frequency table
// GLONASS PZ-90.11 state-vector RK4 propagation
// Klobuchar broadcast model + IONEX ionospheric maps
// navigation-message bit-level codecs (GPS LNAV)
// forward GNSS observable prediction
// static-arc PPP correction tables
// static multi-epoch PPP float solve
// compact mean-element orbit approximation (fitted)
// RINEX clock satellite-bias parsing and interpolation
// RINEX 3 navigation-message parsing (GPS/Galileo broadcast)
// RINEX 3 observation parsing + single-frequency pseudoranges
// RTK double-difference construction
// GPS C/A code, coherent correlation, and acquisition
// SP3-c / SP3-d parser + arbitrary-epoch interpolation
// single-point positioning (least-squares PVT)
// product-staleness graceful degradation for time-varying products
// Saastamoinen zenith + Niell (NMF) mapping troposphere
// receiver velocity / clock-drift least-squares solve
// Phase-2 estimation substrate: named operation-order recipes
// integer least squares ambiguity-resolution kernels
// measurement weighting, RAIM, and FDE integrity checks
// sequential RTK baseline filter - serializable state ABI (kernel migration)
pub use ;
pub use ;
pub use ;