Expand description
Named operation-order recipes for the GNSS estimation substrate.
Phase-2 collapses the three thick estimator stacks (spp, rtk/rtk_filter,
precise_positioning) onto one shared substrate plus thin, runtime-selectable
strategies. The single hard constraint is that each external reference’s
bit-exactness (Skyfield for SPP, RTKLIB for RTK, the PPP oracle for PPP) must
be preserved to 0 ULP. Different references need different floating-point
operation orders for the same physical quantity, so the substrate never
“simplifies” a parity-sensitive formula into one shared form. Instead every
such choice is a NAMED variant: a strategy selects the op-order it needs by
enum value rather than by owning a copy of the helper.
This module names the recipes; the substrate and strategies route every caller through them. Each reference-faithful strategy resolves to the single op-order it was already using, so threading the recipe through the shared spine reproduces the prior code path bit-for-bit and leaves every existing 0-ULP golden unchanged.
The Canonical* variants belong to the single consistent IERS-rigorous
model (the bounded-tolerance canonical strategy, P6). They are NOT used by
any reference-faithful strategy; canonical is an additional selectable
strategy that changes nothing about the references. The SPP canonical range
and frame variants (RangeRecipe::CanonicalLightTimeClosedFormSagnac,
FrameRecipe::CanonicalWgs84) are implemented and driven by
EstimationRecipe::canonical_spp; the RTK and PPP canonical square-root
solve (NormalRecipe::CanonicalSquareRoot on
SolverRecipe::OwnedDeterministicCholesky) by
EstimationRecipe::canonical_rtk and EstimationRecipe::canonical_ppp.
Canonical SPP, RTK, and PPP are all wired.
Structs§
- Ambiguity
IdPolicy - The integer-ambiguity identity/eligibility policy a strategy resolves under: the strategy DATA that replaces the RTK-vs-PPP algorithm-tree split. The LAMBDA resolution kernel is common; only these fields differ between the reference strategies. Named in P3; consumed by the runtime selector in P4.
- Estimation
Recipe - The full operation-order recipe a strategy composes: one variant per stage.
Defaultand the named constructors reproduce the CURRENT behavior of each existing strategy, so selecting a recipe never changes a reference golden.
Enums§
- Differencing
Mode - How a strategy forms its integer-ambiguity identifiers, and against what they
are referenced. Naming this lets the RTK and PPP fixed solvers share one
LAMBDA resolution kernel
([
crate::estimation::substrate::ambiguity::resolve_integer_lattice]) and differ only in DATA rather than in separate algorithm trees. - Frame
Recipe - Local-frame / ENU / az-el basis construction operation order.
- Normal
Recipe - Normal-equation assembly tie-breaking / fold order. The tie order is the pivot/elimination convention that fixes the bit pattern of the reduced system.
- Partial
Resolution - Whether partial ambiguity resolution is attempted when the full-set integer fix fails its ratio test, and with what floor on the retained subset size.
- Range
Recipe - Geometric range / light-time / transmit-time operation order. Each variant names an existing range model; the substrate selects the op-order rather than copying the helper.
- Reference
Target - The reference a reference-faithful strategy is bit-exact against. The
external oracles (Skyfield, RTKLIB, the PPP oracle) are CI validation targets
whose goldens stay 0-ULP unchanged through P0-P5;
Self::OwnedDeterministicis instead pinned to the owned solver’s own frozen-bits golden (P5). - Residual
Norm Recipe - The operation order used to normalize one residual against its weight before
the sigma comparison in a per-residual screen. Naming the order keeps each
screen bit-identical while the formula lives in exactly one place
([
crate::estimation::substrate::qc::normalized_residual]). - Sagnac
Recipe - Earth-rotation (Sagnac) correction operation order.
- Screen
Kind - The residual-screen family a strategy applies after (or, for the filter,
before) a solve. Strategy DATA for the P4 selector; the chi-square variant is
the SPP RAIM aggregate test, the rest are per-residual sigma screens that
share [
crate::estimation::substrate::qc::normalized_residual]. - Solver
Recipe - Linear-solve / factorization operation order. Determinism note: the legacy
SPP path is nalgebra LU (not bit-portable end-to-end), preserved as a named
variant; the owned deterministic kernel (P5) owns the dense subproblem
factorization with its own goldens. Its determinism scope is the
factorization, not the surrounding nalgebra reductions that build the
subproblem – see
Self::OwnedDeterministicTrf. - Strategy
Id - Runtime-selectable strategy identity.
Referencestrategies are 0-ULP bit-exact to an external reference and remain the validation oracles;Canonicalis the single bounded-tolerance “best” model (P6). Canonical SPP, RTK, and PPP are all wired. - Technique
- Estimation technique: which physical observation model and parameter set a strategy estimates.