Skip to main content

Module recipe

Module recipe 

Source
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§

AmbiguityIdPolicy
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.
EstimationRecipe
The full operation-order recipe a strategy composes: one variant per stage. Default and the named constructors reproduce the CURRENT behavior of each existing strategy, so selecting a recipe never changes a reference golden.

Enums§

DifferencingMode
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.
FrameRecipe
Local-frame / ENU / az-el basis construction operation order.
NormalRecipe
Normal-equation assembly tie-breaking / fold order. The tie order is the pivot/elimination convention that fixes the bit pattern of the reduced system.
PartialResolution
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.
RangeRecipe
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.
ReferenceTarget
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::OwnedDeterministic is instead pinned to the owned solver’s own frozen-bits golden (P5).
ResidualNormRecipe
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]).
SagnacRecipe
Earth-rotation (Sagnac) correction operation order.
ScreenKind
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].
SolverRecipe
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.
StrategyId
Runtime-selectable strategy identity. Reference strategies are 0-ULP bit-exact to an external reference and remain the validation oracles; Canonical is 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.