Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

filterax Tutorial Master List

A reconciled, exhaustive curriculum spanning what currently exists in filterax, gaussx, pipekit, and research_notebook, plus gaps surfaced from the filterax public API, open GitHub issues, and the design_docs/ series under filterax/docs/design_docs/. Goal: the most complete ensemble-DA / data-assimilation tutorial sequence we could ship.

GP / SVI tutorials live in ../../gaussian_processes/TUTORIAL_MASTER_LIST.md. Cross-listed items (state-space GPs, ensemble VI, structured Gaussians, sigma points, shrinkage) are flagged πŸ”.

Legend β€” Source columns:

Scope tag: 🧱 fundamental Β· πŸ”¬ research Β· πŸŒ‰ bridge Β· πŸ” cross-listed (GP master list)

Refs column: gh#N = open GitHub issue Β· dd:path = filterax docs/design_docs/<path> Β· api:foo = filterax exported symbol.


Curriculum at a glanceΒΆ


Part 0 β€” Bayesian Filtering & DA FoundationsΒΆ

0.A β€” The filtering problemΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.1The filtering problem from scratch β€” joint factorisation, filtering vs smoothing vs forecastingβ€”πŸ§±pedagogical entry β€” graphical-model diagram, three target densities, recursion identity; sets the language for Parts 1–4
0.2Sequential Bayesian inference as natural-form additionβ€”πŸ§± πŸ”mirrors GP 0.6 / 0.4; conjugate update = Ξ·t+1=Ξ·t+H⊀Rβˆ’1yt\eta_{t+1} = \eta_t + H^\top R^{-1} y_t; batch = sequential = any order

0.B β€” Linear-Gaussian Kalman filterΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.3Kalman filter from scratch β€” derivation, closed-form recursion, log-marginal likelihoodβ€”πŸ§±uses SquareRootKF for parametric ground truth; visual covariance ellipses; six-equation cheat sheet
0.4Joseph-form covariance update β€” float32 stress test, PSD preservationβ€”πŸ§± πŸ”mirrors GP 0.5; four equivalent forms (standard / symmetric / information / Joseph) with PSD checks

0.C β€” The forecast β†’ analysis β†’ inflate cycleΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.5Anatomy of one DA cycle β€” forecast / analysis / inflate, why each step existsβ€”πŸ§±dd:architecture.md; three-panel diagram (prior cloud β†’ posterior cloud β†’ inflated cloud)
0.6Why ensembles? β€” sample-covariance limits, rank ≀ Neβˆ’1N_e βˆ’ 1, when ensemble beats parametricβ€”πŸ§±eigenvalue-spectrum plot vs NeN_e; rank deficit and the null direction visualised

0.D β€” Variational DA (3D/4D-Var) contrastΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.73D-Var vs Kalman β€” duality (Kalman = sequential 3D-Var with B=PfB = P^f)β€”πŸ§± πŸŒ‰pairs with R projects/plume_simulation/notebooks/assimilation/00_3dvar_derivation.md; minimisation = closed-form same answer
0.84D-Var with adjoints β€” and how differentiable EnKF (Part 8) comparesβ€”πŸ§± πŸŒ‰dd:features/differentiable_da.md Β§4; cost / memory / Jacobian comparison table

0.E β€” Information vs covariance formΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.9Information vs covariance form β€” when each wins, conjugate-update identitiesβ€”πŸ§± πŸ”mirrors GP 0.4; sparsity-of-Ξ› vs density-of-Ξ£ table; round-trip cost diagram

Part 1 β€” Layer 0 PrimitivesΒΆ

filterax’s pure-function building blocks. Every L1 / L2 algorithm composes from these.

1.A β€” Ensemble statisticsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.1Ensemble mean, anomalies, sample covariance β€” the three primitives every filter starts fromβ€”πŸ§±api: ensemble_mean, ensemble_anomalies, ensemble_covariance; rank-deficit visualised; equivalence Pe=X⊀X/(Neβˆ’1)P_e = X^\top X / (N_e-1) via QR / SVD
1.2Cross-covariance for nonlinear HH β€” implicit derivative-free linearisationβ€”πŸ§±api: cross_covariance; sanity check against finite-difference Jacobian; identity CxH=PeH⊀C^{xH} = P_e H^\top for linear HH
1.3Low-rank covariance as a structured operator β€” Woodbury identity previewβ€”πŸ§± πŸ”bridges to GP 1.B / 1.10; api: gaussx.LowRankUpdate; solve / logdet routing diagram

1.B β€” Gain & innovationΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.4The ensemble Kalman gain β€” Bessel correction, Woodbury dispatch for structured RRβ€”πŸ§±api: kalman_gain; dd:architecture.md; cost table for dense / diagonal / Toeplitz RR
1.5Innovation covariance & gaussx structural dispatch β€” diag / low-rank / Toeplitz RRβ€”πŸ§± πŸ”api: innovation_covariance; pairs with GP 1.4 (Toeplitz) and 1.3 (Kronecker)

1.C β€” Likelihood & innovation statisticsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.6Predictive log-likelihood as the universal training signalβ€”πŸ§±api: log_likelihood, innovation_statistics, InnovationStatistics; gradient sanity check (βˆ’Sβˆ’1v-S^{-1}v); feeds Parts 7 and 8

1.D β€” PerturbationsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.7Perturbed observations & R-aware samplingβ€”πŸ§±api: perturbed_observations; fast-path vs dense-fallback paths, deterministic-key reproducibility

1.E β€” Localisation kernelsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.8Localisation taper zoo β€” visual + differentiability tableβ€”πŸ§± πŸ”api: gaspari_cohn, gaussian_taper, hard_cutoff, soar_taper; pairs with GP 2.A (kernel zoo); plot ρ(d/r)\rho(d/r) side-by-side
1.9Generic localize(cov, coords, taper_fn) β€” assembling localised covariancesβ€”πŸ§±api: localize; ETKF-localized vs LETKF-localized comparison
1.10Adaptive localisation (Anderson) β€” empirical correlation β†’\to taperβ€”πŸ”¬api: adaptive_localization; dd:features/localization_inflation.md

1.F β€” Inflation primitivesΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.11Multiplicative & additive inflation primitivesβ€”πŸ§±api: inflate_multiplicative, inflate_additive; spread-vs-step diagram
1.12Relaxation: RTPS vs RTPPβ€”πŸ§±api: inflate_rtps, inflate_rtpp; spread-recovery curves; Ξ±=0\alpha=0 / Ξ±=1\alpha=1 limiting cases
1.13Adaptive inflation & Ledoit-Wolf shrinkageβ€”πŸ”¬ πŸ”api: inflate_adaptive, ledoit_wolf_shrinkage; pairs with GP 0.10 (jitter / shrinkage)

1.G β€” Patches & domain decompositionΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.14Domain decomposition β€” patches for high-dim spatial DAβ€”πŸ”¬api: create_patches, assign_obs_to_patches, blend_patches; dd:architecture.md; 2D grid example with overlap visualisation

Part 2 β€” Layer 1 Sequential FiltersΒΆ

Each filter as its own tutorial. Verified against the closed-form Kalman update on a linear-Gaussian problem; the existing tests/test_filters.py baselines are the template.

2.A β€” Stochastic / perturbed-observationΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.1Stochastic EnKF (Evensen 1994) β€” perturbed-obs analysisβ€”πŸ§±api: filters.StochasticEnKF; dd:features/filters.md; MC-noise vs NeN_e plot; pairs with 3.9 (key threading)

2.B β€” Deterministic square-root familyΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.2ETKF (Bishop 2001) β€” ensemble transform, symmetric sqrtβ€”πŸ§±api: filters.ETKF; dd:features/filters.md; rank-NyN_y spectrum trick walked through; gradient-stability sanity check
2.3EnSRF batch form (Whitaker & Hamill 2002) β€” separate mean & perturbation updatesβ€”πŸ§±api: filters.EnSRF; equivalence with ETKF in batch mode (Tippett 2003 Β§3)
2.4Serial EnSRF β€” scalar obs processing, no eighβ€”πŸ§±api: filters.EnSRF_Serial; per-obs scalar gain; diagonal-RR requirement
2.5ESTKF (Nerger 2012) β€” (Neβˆ’1)(N_e βˆ’ 1) error subspace, mean-preserving projectionβ€”πŸ§±api: filters.ESTKF; L∈RNeΓ—(Neβˆ’1)L \in \mathbb{R}^{N_e \times (N_e-1)} Householder construction; reduced eigh cost

2.C β€” LocalisedΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.6LETKF (Hunt 2007) β€” local ETKF with R-localisationβ€”πŸ§±api: filters.LETKF; requires diagonal RR; per-point compute diagram
2.7LETKF hard-cutoff vs taper-only β€” why explicit cutoff mattersβ€”πŸŒ‰regression context for test_letkf_hard_cutoff_at_radius; far-obs invariance demo

2.D β€” Symmetry-breaking variantsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.8ETKF_Livings β€” mean-preserving random rotationβ€”πŸ”¬api: filters.ETKF_Livings; rotation construction via Householder + random O(Neβˆ’1)O(N_e-1); cov preserved, ensemble realisations differ

2.E β€” Parametric (non-ensemble)ΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.9SquareRootKF β€” Cholesky-form parametric KFβ€”πŸ§± πŸ”api: filters.SquareRootKF; ground truth for Part 0.B; pairs with GP 8.D (parametric Kalman)

2.F β€” Selection guideΒΆ

#TutorialSourceScopeRefs / Notes
2.10Filter selection β€” when each L1 variant wins (table + worked examples)β€”πŸ§±reads like an extended design_docs/decisions.md D-row; deterministic vs stochastic, batch vs serial, localised vs global

Part 3 β€” Layer 2 Forecast-Analysis LoopsΒΆ

3.A β€” Protocols & extension pointsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
3.1The protocol family β€” AbstractDynamics / AbstractObsOperator / AbstractInflator / AbstractLocalizer / AbstractSchedulerβ€”πŸ§±api: filterax._src._protocols; dd:architecture.md; class diagram with extension points
3.2Plugging in a JAX dynamics modelβ€”πŸ§±identity / linear / Lorenz-63 / SDE wrappers; pure-function rule
3.3Plugging in a nonlinear obs operator β€” neural decoder warm-up for Part 8β€”πŸŒ‰dd:features/differentiable_da.md Β§6.B; equinox-based eqx.nn.MLP example

3.B β€” L2 model walkthroughsΒΆ

#TutorialSourceScopeRefs / Notes
3.4L2 ETKF end-to-end β€” forecast β†’ analysis β†’ likelihood loggingβ€”πŸ§±api: ETKF; mirrors test_l2_etkf_assimilate_smoke; AssimilationResult field walkthrough
3.5L2 EnSRF & L2 StochasticEnKF β€” when batch vs perturbed-obs mattersβ€”πŸ§±api: EnSRF, StochasticEnKF; side-by-side spread plots
3.6L2 LETKF with state_coords / obs_coordsβ€”πŸ§±api: LETKF; 1D-grid worked example with localisation radius sweep

3.C β€” Inflator integrationΒΆ

#TutorialSourceScopeRefs / Notes
3.7Adding MultiplicativeInflator / RTPS / RTPP to the L2 loopβ€”πŸ§±api: MultiplicativeInflator, RTPS, RTPP; spread-trajectory comparison
3.8AdditiveInflator & per-cycle key threadingβ€”πŸ”¬api: AdditiveInflator; jr.fold_in(base_key, step) pattern

3.D β€” Stochastic key handlingΒΆ

#TutorialSourceScopeRefs / Notes
3.9jr.fold_in per window β€” why naive StochasticEnKF repeats draws (regression for test_stochastic_enkf_l2_uses_independent_keys_per_window)β€”πŸŒ‰api: StochasticEnKF.assimilate; demo of identical-draw bug without folding

Part 4 β€” Backward-Pass SmoothersΒΆ

4.A β€” Sequential smoothersΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.1EnKS (Evensen & van Leeuwen 2000) β€” standard backward passβ€”πŸ§±api: smoothers.EnKS; dd:features/smoothers.md; backward-scan diagram; final-time identity
4.2EnsembleRTS β€” RTS interpretation, model-error placeholderβ€”πŸ§±api: smoothers.EnsembleRTS; equivalence with EnKS without explicit QQ
4.3FixedLagSmoother β€” windowed lookahead, online interpretationβ€”πŸ”¬api: smoothers.FixedLagSmoother; lag=0 / lag=T-1 limits; rolling-buffer interpretation

4.B β€” Square-root smoothersΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.4EnsembleSqrtSmoother β€” deterministic sqrt backward passβ€”πŸ”¬api: smoothers.EnsembleSqrtSmoother; dd:features/smoothers.md Gap 4; perts-in-column-span demo

4.C β€” Iterative smoothersΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.5IES (Chen & Oliver 2013) β€” iterative ensemble smoother for inverse problemsβ€”πŸ”¬api: smoothers.IES; dd:features/smoothers.md Gap 5; anchor-to-ΞΈ0\theta_0 visualisation; Ξ± ablation

4.D β€” Selection & memory trade-offsΒΆ

#TutorialSourceScopeRefs / Notes
4.6Smoother selection guide β€” offline vs online, deterministic vs iterative, memory budgetβ€”πŸ§±extends features/smoothers.md Β§5 comparison table; flow chart for picking smoother

Part 5 β€” Ensemble Kalman Processes (Inversion & Sampling)ΒΆ

5.A β€” Inversion (EKI family)ΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.1EKI (Iglesias, Law & Stuart 2013) β€” iterative ensemble inversionβ€”πŸ§±api: EKI, processes.EKI; dd:features/processes.md; one-step Kalman equivalence on the sample cov
5.2TEKI β€” Tikhonov-regularised EKI with prior pullβ€”πŸŒ‰api: processes.TEKI; augmented-identity block; unidentifiable-parameter shrinkage demo
5.3GNKI β€” Gauss-Newton with explicit ensemble Jacobianβ€”πŸ”¬api: processes.GNKI; requires J>NpJ > N_p; one-step linear-Gaussian convergence
5.4ETKI β€” deterministic / sqrt EKI variantβ€”πŸ”¬api: processes.ETKI; deterministic transform analog
5.5SparseInversion β€” LΒΉ proximal soft-threshold on EKI stepβ€”πŸ”¬api: processes.SparseInversion; Schneider-Stuart-Wu 2022; inactive-parameter-to-zero demo

5.B β€” Sampling (EKS family)ΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.6EKS (Garbuno-IΓ±igo 2020) β€” ergodic sampler, no collapseβ€”πŸ§± πŸ”api: EKS, processes.EKS_Process; cross-listed with GP 12.x (ensemble VI); spread-vs-time vs EKI plot

5.C β€” Parametric (UKI)ΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.7UKI β€” unscented Kalman inversion, parametric mean / covβ€”πŸ§±api: UKI, processes.UKI; dd:features/processes.md; sigma-point cloud diagram
5.8Sigma-point utilities β€” reusable for filter ops in Part 2β€”πŸ§± πŸ”api: processes.sigma_points; mirrors GP 6.3; reconstruction-of-mean-and-cov sanity check

5.D β€” Regularised / sparseΒΆ

Covered in 5.A (TEKI, SparseInversion); listed here for navigation.

5.E β€” SchedulersΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.9Scheduler zoo β€” fixed, data-misfit, EKS-stableβ€”πŸ§±api: FixedScheduler, DataMisfitController, EKSStableScheduler; convergence-trajectory comparison
5.10DataMisfitController past convergence β€” algo_time β‰₯ 1 safetyβ€”πŸŒ‰regression context for test_eki_update_is_finite_after_algo_time_one; Ξ”t=0\Delta t = 0 floor; no-NaN guarantee

Part 6 β€” Localisation, Inflation, CalibrationΒΆ

6.A β€” Why localisationΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
6.1Spurious correlations & sample-cov rank β€” visual + spectrum demoβ€”πŸ§±dd:features/localization_inflation.md; correlation heat-map at small / large NeN_e
6.2R-localisation vs B-localisation β€” when each is correctβ€”πŸ§±Hunt 2007 Β§2; B-loc preserves PSD only with specific tapers; R-loc requires diagonal RR

6.B β€” Why inflationΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
6.3Filter divergence β€” overconfident analysis rejects obsβ€”πŸ§±dd:features/localization_inflation.md; trajectory-plot demo with / without inflation
6.4Multiplicative vs RTPS vs RTPP β€” when each winsβ€”πŸ§±calibration table; spread-trajectory comparison; failure modes

6.C β€” Adaptive variantsΒΆ

#TutorialSourceScopeRefs / Notes
6.5Adaptive localisation in operationβ€”πŸ”¬api: adaptive_localization; empirical-correlation threshold demo
6.6Adaptive inflation (Anderson 2007 / Miyoshi 2011)β€”πŸ”¬api: inflate_adaptive; observation-space hierarchical inflation update

6.D β€” Shrinkage estimatorsΒΆ

#TutorialSourceScopeRefs / Notes
6.7Ledoit-Wolf shrinkage for ensemble covβ€”πŸ”¬ πŸ”api: ledoit_wolf_shrinkage; pairs with GP 0.11 (jitter / safe Cholesky); analytic shrinkage intensity

Part 7 β€” Diagnostics & VerificationΒΆ

7.A β€” Basic spread / RMSE / rankΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
7.1Ensemble spread & RMSE β€” minimal pair for β€œis the filter aliveβ€β€”πŸ§±dd:features/diagnostics.md; trajectory plots; spread-RMSE ratio reading
7.2Rank histograms & reliabilityβ€”πŸ§±Talagrand diagrams; under- / well- / over-dispersive signatures

7.B β€” Innovation diagnosticsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
7.3Innovation chi-squared & Mahalanobisβ€”πŸ§±api: innovation_statistics; pass/fail thresholds; cycle-averaged plots
7.4Desroziers diagnostic β€” observation-error tuningβ€”πŸ”¬dd:features/diagnostics.md; recovering RR from posterior innovations

7.C β€” Reliability & sharpnessΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
7.5Spread-skill relationshipβ€”πŸŒ‰calibration scatter Οƒt\sigma_t vs $
7.6CRPS β€” calibration without Gaussianityβ€”πŸŒ‰ πŸ”mirrors GP calibration tutorials; ensemble-vs-pointwise CRPS
7.7DFS β€” degrees of freedom for signalβ€”πŸ”¬observability metric; per-obs contribution table
7.8Effective sample size (ESS)β€”πŸ”¬ πŸ”bridges to particle filters in Part 10; degeneracy threshold

7.D β€” Predictive likelihoodΒΆ

#TutorialSourceScopeRefs / Notes
7.9Log predictive density as the training loss β€” connects to Part 8β€”πŸ§±api: InnovationStatistics.log_likelihood; running sum over windows; sanity gradient sign

Part 8 β€” Differentiable DAΒΆ

See dd:features/differentiable_da.md.

8.A β€” Theory & gradient stabilityΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.1Why differentiable β€” learning dynamics, obs ops, hyperparams end-to-endβ€”πŸ§±dd:features/differentiable_da.md Β§1; four motivating use cases
8.2Stochastic vs deterministic filters under grad β€” eigh degeneracy & the rank-NyN_y trickβ€”πŸ”¬regression context for #82; api: _etkf_inner_spectrum; before / after gradient plot

8.B β€” differentiable_assimilate mechanicsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.3The scan + vmap + remat idiom β€” single fused XLA Whileβ€”πŸ§±api: differentiable_assimilate; dd:features/differentiable_da.md Β§8
8.4Carry-dtype unification & extension kwargs (LETKF coords)β€”πŸŒ‰regression context for test_diff_assimilate_handles_mixed_time_dtypes; mixed-dtype trace error reproduction

8.C β€” Training patternsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.5Pattern A β€” learn dynamics parameters (Neural ODE through filter)β€”πŸ”¬dd:features/differentiable_da.md Β§6.A; loss-vs-epoch curve; gradient-sign sanity
8.6Pattern B β€” learn observation operator (neural decoder)β€”πŸ”¬dd:features/differentiable_da.md Β§6.B; neural RTM example (plumax Tier IV v2)
8.7Pattern C β€” meta-learn inflation / localisation radius / RR diagβ€”πŸ”¬dd:features/differentiable_da.md Β§6.C; constrained-via-exp reparameterisation

8.D β€” Memory & rematΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.8jax.checkpoint placement β€” O(T)O(\sqrt{T}) memory under reverse-modeβ€”πŸ§±dd:features/differentiable_da.md Β§5.1; checkpoint-on-body vs checkpoint-on-scan
8.9ROAD-EnKF β€” local-gradient approximation, O(1)O(1) memoryβ€”πŸ”¬dd:features/differentiable_da.md Β§6.D; not yet implemented β€” gap

8.E β€” Loss zooΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.10NLL vs MSE vs CRPS vs spread-skill β€” pick your gradient signalβ€”πŸ§±dd:features/differentiable_da.md Β§3; calibration vs accuracy trade-off table

Part 9 β€” optax IntegrationΒΆ

9.A β€” Process transformsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.1filterax.optax.eki β€” EKI as a gradient transformβ€”πŸ§±api: filterax.optax.eki; dd:features/optax_ekp.md; three-iter convergence smoke
9.2filterax.optax.eks β€” EKS as a gradient transformβ€”πŸ§±api: filterax.optax.eks; per-step key-advance demonstration
9.3filterax.optax.uki β€” UKI with parametric carryβ€”πŸŒ‰api: filterax.optax.uki; mean / covariance both updated

9.B β€” Composition with optax chainsΒΆ

#TutorialSourceScopeRefs / Notes
9.4Composing with optax.chain β€” gradient clipping, masking, scheduling on top of EKIβ€”πŸŒ‰dd:features/optax_ekp.md; clip_by_global_norm example; mask-by-param-name

9.C β€” Hybrid SGD + EKIΒΆ

#TutorialSourceScopeRefs / Notes
9.5Hybrid pipelines β€” SGD on neural-net params + EKI on physics params, single optax.chainβ€”πŸ”¬bridges to Part 8 (Pattern A/B); per-leaf transform via optax.multi_transform

Part 10 β€” Sequential Variational InferenceΒΆ

The bridge into broader filtering / sequential-VI work. Each tutorial sits next to a filterax / pyrox primitive and points at the GP master list where overlap exists.

10.A β€” FoundationsΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
10.1Sequential VI from scratch β€” recursive ELBO, Gaussian limit = Kalmanβ€”πŸ§± πŸ”pairs with GP 6.14 (variational guides); duality diagram
10.2Variational EnKF β€” interpreting ETKF as ELBO ascentβ€”πŸ”¬research bridge; minimisation-vs-update derivation

10.B β€” Particle filters & SMCΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
10.3Bootstrap particle filter β€” proposal = priorβ€”πŸ§±not in filterax core; build from primitives; reweighting & degeneracy demo
10.4Auxiliary particle filterβ€”πŸŒ‰optimal proposal q(xt∣xtβˆ’1,yt)q(x_t \mid x_{t-1}, y_t); variance-reduction plots
10.5SMC samplers β€” annealed posteriorsβ€”πŸ”¬ πŸ”overlaps GP MCMC tutorials; tempered-sequence visualisation

10.C β€” Variational SMCΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
10.6Variational SMC (Naesseth 2018) β€” amortised proposal trained against ELBOβ€”πŸ”¬research bridge; learnable-proposal example
10.7Filtering variational objectives (Maddison 2017) β€” IWAE-style filteringβ€”πŸ”¬comparison with bootstrap PF on Lorenz

10.D β€” Ensemble VI for SSMsΒΆ

#TutorialSourceScopeRefs / Notes
10.8EKS as ensemble VI β€” Garbuno-IΓ±igo 2020 readingβ€”πŸ”¬ πŸ”cross-listed with GP 12.x; api: EKS; ergodicity & posterior recovery
10.9Reich-style ensemble VI β€” coupling-based posterior approximationβ€”πŸ”¬research; OT-coupling-as-resampling

10.E β€” Amortised / streaming inferenceΒΆ

#TutorialSourceScopeRefs / Notes
10.10Amortised filter β€” neural encoder qΟ•(xt∣y1:t)q_\phi(x_t \mid y_{1:t}) trained through differentiable_assimilateβ€”πŸ”¬builds on Part 8; encoder ELBO recipe
10.11Streaming amortised inference β€” online updates without retrainingβ€”πŸ”¬bounded-memory amortisation; recurrent encoder

10.F β€” Sequential VB comparisonΒΆ

#TutorialSourceScopeRefs / Notes
10.12Sequential VB (Beal & Ghahramani 2003; Honkela 2003) β€” when classical VB beats ensembleβ€”πŸŒ‰ πŸ”pairs with GP 6.16 (CVI); cost / accuracy table

Part 11 β€” Ecosystem IntegrationsΒΆ

11.A β€” gaussx (structured covariances)ΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.1Diagonal RR β†’ Woodbury gain β€” never densifyβ€”πŸ§± πŸ”api: gaussx.LowRankUpdate, gaussx.solve_rows; pairs with GP 1.9
11.2Toeplitz / Kronecker RR β€” spatial obs noiseβ€”πŸŒ‰ πŸ”dd:integrations/geostack.md; pairs with GP 1.4 / 1.3

11.B β€” pipekit (orchestration)ΒΆ

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.3filterax filter as pipekit.AnalysisStep (wrapper pattern D11)β€”πŸ§±dd:integrations/pipekit.md; api: FilterAsAnalysisStep (user wrapper)
11.4Sequential / Graph / Cycle compositionβ€”πŸŒ‰full multi-step Tier IV pipeline; pipekit-side notebook

11.C β€” somax (SDE dynamics)ΒΆ

#TutorialSourceScopeRefs / Notes
11.5somax SDE as AbstractDynamicsβ€”πŸŒ‰dd:examples/integration.md; stochastic forward model worked example

11.D β€” geo_toolz / xr_assimilate (xarray)ΒΆ

#TutorialSourceScopeRefs / Notes
11.6xarray-aware DA β€” coordinate-driven assimilationβ€”πŸŒ‰ πŸ”pairs with coordax tutorials; named-axis filter API

11.E β€” plumax (Tier IV)ΒΆ

#TutorialSourceScopeRefs / Notes
11.7Multi-instrument methane retrieval β€” JointObsOperator, SequentialAssimilation, GeoLocalizer, fixed-lag smootherβ€”πŸ”¬dd:integrations/plumax.md; the canonical end-to-end demo

Part 12 β€” Applied Case Studies (research_notebook)ΒΆ

12.A β€” Canonical DA benchmarksΒΆ

#TutorialSourceScopeRefs / Notes
12.1Lorenz-63 toy DA β€” ETKF / EnSRF / LETKF on the standard benchmarkβ€”πŸ§±mirrors gaussx ensemble_kalman notebook; RMSE-vs-time across filters
12.2Lorenz-96 spatially-extended DA β€” LETKF + adaptive inflationβ€”πŸ”¬operational analogue; per-grid-point posterior

12.B β€” Atmospheric & remote sensingΒΆ

#TutorialSourceScopeRefs / Notes
12.31D heat-equation DA β€” pedagogical PDE state-spaceβ€”πŸ§±ground-truth-from-PDE; visualised assimilation
12.4Plume dispersion DA β€” plume_simulation/matched_filter β†’ EnKFβ€”πŸ”¬pairs with projects/plume_simulation; emission-rate estimation
12.5Multi-instrument retrieval β€” TROPOMI/EMIT/GHGSat-style joint observationβ€”πŸ”¬extends 11.7; per-instrument HH stack

12.C β€” Inverse problemsΒΆ

#TutorialSourceScopeRefs / Notes
12.6Inverse heat conduction β€” EKI parameter estimationβ€”πŸ”¬thermal-conductivity recovery; ensemble-vs-truth contour plot
12.7Subsurface flow history matching β€” IES end-to-endβ€”πŸ”¬reservoir engineering analogue; full Chen-Oliver iteration

12.D β€” Online / streamingΒΆ

#TutorialSourceScopeRefs / Notes
12.8Online streaming smoother β€” fixed-lag with rolling buffer, memory budgetβ€”πŸ”¬api: FixedLagSmoother; live-data DA recipe
12.9Differentiable end-to-end β€” learn dynamics through 100-step assimilationβ€”πŸ”¬full Pattern A demo with checkpointing

Part 13 β€” Reference Surfaces (Zoo)ΒΆ

Explicitly not maintained as core API; lives under zoo/ (gap, planned for #61) for educational / benchmarking use.

13.A β€” Continuous-timeΒΆ

#TutorialSourceScopeRefs / Notes
13.1Continuous-time EnKF β€” derivation from continuous Kalmanβ€”πŸ”¬zoo; SDE form of the ensemble update
13.24D-EnKF β€” observation-time-aware ensemble updateβ€”πŸ”¬zoo; multi-obs-window equivalence

13.B β€” Toy dynamical systemsΒΆ

#TutorialSourceScopeRefs / Notes
13.3Toy systems catalog β€” Lorenz-63 / Lorenz-96, sinusoid, double-well, brownian, OUβ€”πŸŒ‰benchmarking fixtures; reusable AbstractDynamics implementations

13.C β€” Hybrid Var-EnKFΒΆ

#TutorialSourceScopeRefs / Notes
13.4EnVar β€” hybrid 3D/4D-Var-EnKF (Bocquet 2010)β€”πŸ”¬bridges Part 0.D and Parts 2-3; static-B-plus-ensemble-B cost

ReferencesΒΆ