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.

Gaussianization Tutorial Master List

A reconciled, exhaustive curriculum spanning what currently exists in rbig, gauss_flows, and research_notebook/projects/gaussianization, plus gaps surfaced from the package APIs, open issues, and design docs. Goal: the most complete Gaussianization tutorial sequence we could ship.

Companion to ../gaussian_processes/TUTORIAL_MASTER_LIST.md. Cross-listed items (spatial-extremes margins, spatiotemporal applications, Kalman / filtering) are flagged 🔁 and tagged with xref:GP#X.Y.

Legend — Source columns:

Scope tag: 🧱 fundamental · 🔬 research · 🌉 bridge · 🔁 cross-listed

Refs column: gh:<repo>#N = open GitHub issue · dd:path = design-doc path · api:foo = exported symbol · xref:GP#X.Y = cross-ref to GP master list.

Framing: Gaussianization is a transformation to a target Gaussian, so this curriculum is organized along three axes: (1) what we map with — 1D marginals, rotations, couplings, ODEs, surjections; (2) how we fit it — iterative / greedy vs. end-to-end NLL; (3) what we do with it — sampling, density, IT measures, inverse problems, filtering, fair learning. Normalizing-flow cousins (MAF / IAF / NSF / Glow / FFJORD) are treated as bridges, not first-class entries, except where they’re the canonical implementation of a Gaussianization idea.


Curriculum at a glance

A bird’s-eye view of the parts and their subparts. Skim this first to orient; the detailed per-tutorial tables live below.


Part 0 — Foundations

0.A — Change of variables & log-determinant

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.1Change of variables from scratch — 1D, 2D, dd-D, both directionsK 00_foundations/00_change_of_variables🧱pedagogical anchor; verifies CoV against gauss_flows log-det
0.2Composition of bijectors & additive log-determinantK 00_foundations/01_composition_logdet🧱rotations are free; flowjax.Chain
0.3Forward vs. inverse parameterisation — “density estimation” vs. “generation” trade-offsK 00_foundations/02_forward_vs_inverse🧱optimistix root-find + implicit-adjoint gradients

0.B — Why standard Gaussian as target

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.4Why N(0,I)\mathcal{N}(0,I)? Max-entropy + separability + trivial primitivesK 00_foundations/03_why_standard_gaussian🧱rbig.negentropy/total_correlation; sets up 16.B (prox), 14.A (IT), 17 (Kalman)

0.C — Density destructors

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.5Density destructors — Inouye & Ravikumar 2018 framingK 00_foundations/04_density_destructors🧱unifies flow / Gaussianization / destructor
0.6Gaussianization = iterated whitening + nonlinearity — intuition picturesK 00_foundations/04_density_destructors🧱rbig.AnnealedRBIG; two-moons → N(0,I) morph

0.D — Numerical mechanics

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.7Numerical stability for bijectors — jitter, mixed precision, tail expansionsK 00_foundations/05_numerical_mechanics🧱pairs with xref:GP#0.11 (jitter / safe Cholesky)
0.8Log-determinant accumulation across deep stacksK 00_foundations/05_numerical_mechanics🧱float32 vs float64 drift
0.9Roundtrip invertibility tests in CIK 00_foundations/05_numerical_mechanics🧱caught gh:gauss_flows#108 (fixed in 0.1.7)

0.E — Diagnostics

Key equations / models:

#TutorialSourceScopeRefs / Notes
0.10QQ-plot & moment-based Gaussianity diagnosticsK 00_foundations/06_gaussianity_diagnostics🧱QQ + skew/kurtosis before vs after
0.11Negentropy as a convergence signal for RBIGK 00_foundations/06_gaussianity_diagnostics🧱rbig.negentropy; feeds 3.B stopping criterion
0.12Multivariate Gaussianity tests (Henze–Zirkler, energy)K 00_foundations/06_gaussianity_diagnostics🧱energy distance to N(0,I); HZ noted

Part 1 — 1D Marginal Transforms

The atomic operation of Gaussianization: turn each coordinate’s distribution into a standard Gaussian via zi=Φ1(Fi(xi))z_i = \Phi^{-1}(F_i(x_i)) for some monotone CDF estimator FiF_i.

1.A — Empirical CDF & histograms

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.1Marginal transforms — ECDF & histogramsK 01_marginal_transforms/00_ecdf_histograms🧱rank → uniform → normal; rbig + gf.HistogramCDF
1.2Boundary issues & support extensionK 01_marginal_transforms/00_ecdf_histograms🧱pdf_extension; tail ±\pm\infty handling
1.3Glivenko–Cantelli & finite-sample biasK 01_marginal_transforms/00_ecdf_histograms🧱DKW n1/2n^{-1/2} rate; degenerate ECDF Jacobian

1.B — KDE / Gaussian-mixture CDFs

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.4KDE-based 1D CDF GaussianizationK 01_marginal_transforms/01_kde_mixture_cdf🧱rbig.KDEGaussianizer
1.5Gaussian-mixture CDF — analytic forward & inverseK 01_marginal_transforms/01_kde_mixture_cdf🧱gf.MixtureGaussianCDF; analytic log-det
1.6Bandwidth / component-count selectionK 01_marginal_transforms/01_kde_mixture_cdf🧱Scott/Silverman; BIC

1.C — Monotone-spline CDFs

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.7Monotone cubic spline CDF GaussianizationK 01_marginal_transforms/02_spline_cdf🧱PCHIP (Fritsch–Carlson); rbig.SplineGaussianizer
1.8Rational-quadratic spline as a 1D bijectorK 01_marginal_transforms/02_spline_cdf🧱gf.RQSplineMarginal; exact inverse + analytic log-det; feeds 5.B

1.D — Mixture-CDF as a learnable bijector

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.9Mixture-CDF Gaussianization layer end-to-endK 01_marginal_transforms/03_learnable_mixture_cdf🧱end-to-end MLE with optax
1.10Differentiating through the mixture-CDF — implicit-function gradientK 01_marginal_transforms/04_inversion_strategies🧱unroll / one-step / adjoint; gh:gauss_flows#111; pairs with xref:GP#0.10

1.E — Inversion strategies

Key equations / models:

#TutorialSourceScopeRefs / Notes
1.11Bisection vs. Newton for monotone CDF inversionK 01_marginal_transforms/04_inversion_strategies🧱safeguarded hybrid (Brent)
1.12Vectorised batched root-find across leading axesK 01_marginal_transforms/04_inversion_strategies🧱jax.vmap

Part 2 — Rotations & Orthogonal Mixers

The “between-coordinate” half of Gaussianization: orthogonal mixers that redistribute information across dimensions so the next marginal pass has something to do.

2.A — Linear-rotation zoo

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.1Rotation choices — PCA / ICA / random / PicardK 02_rotations/00_rotation_zoo🧱rbig PCA/ICA/Random/Picard rotations
2.2Why rotation matters between marginal passesK 02_rotations/00_rotation_zoo🧱marginal-only stalls; rotation drives TC→0

2.B — Householder products & trainable orthogonals

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.3Householder products as trainable orthogonalsK 02_rotations/01_householder_orthogonal🧱gf.HouseholderRotation; log-det 0 under training
2.4Cayley & exponential parameterisations of O(d)O(d)K 02_rotations/01_householder_orthogonal🧱gf.OrthogonalRotation (Cayley) + jsl.expm; SO(d)SO(d) vs O(d)O(d) parity wall

2.C — Fixed orthogonal & PCA warm starts

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.5Fixed orthogonal & from_data PCA factoryK 02_rotations/02_fixed_pca_warmstart🧱gf.FixedRotation.from_data; NonTrainable; raw-matrix drift
2.6Initialising a Householder stack from a target QQK 02_rotations/02_fixed_pca_warmstart🧱Householder/QR decomposition → eqx.tree_at; warm vs cold start

2.D — Invertible 1×1 conv (LU parameterization)

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.7Invertible 1×1 conv as a per-pixel orthogonal mixerK 02_rotations/03_conv1x1_actnorm🧱gf.Invertible1x1Conv (LU); $\log

2.E — ActNorm & per-channel affine

Key equations / models:

#TutorialSourceScopeRefs / Notes
2.8ActNorm — data-dependent affine pre-conditioningK 02_rotations/03_conv1x1_actnorm🧱gf.ActNorm/ActNorm1D; data-dependent init; gh:gauss_flows#112 (add from_data)

Part 3 — Iterative Gaussianization (RBIG)

The classical, non-parametric Gaussianization algorithm: alternate marginal CDFs (Part 1) with a rotation (Part 2) until the joint converges to N(0,I)\mathcal{N}(0,I).

3.A — Canonical RBIG loop

Key equations / models:

#TutorialSourceScopeRefs / Notes
3.1RBIG walkthrough — the iterated algorithmK 03_iterative_rbig/00_rbig_loop🧱marginal→rotate loop; rbig + smooth gf.fit_rbig
3.2RBIG demo on 2-D toy distributionsK 03_iterative_rbig/00_rbig_loop🧱two-moons morph; forward density / inverse generation

3.B — Convergence & stopping criteria

Key equations / models:

#TutorialSourceScopeRefs / Notes
3.3RBIG loss / negentropy as a stopping signalK 03_iterative_rbig/01_convergence_stopping🧱total_correlation validated; tc_per_layer_; score/entropy
3.4Depth selection — fixed-K vs. early-stopK 03_iterative_rbig/01_convergence_stopping🧱zero_tolerance/tol early-stop vs fixed cap

3.C — Rotation-choice studies

Key equations / models:

#TutorialSourceScopeRefs / Notes
3.5Rotation choices revisited — convergence comparisonK 03_iterative_rbig/02_rotation_choices🧱PCA/ICA/Picard 1 layer vs random ~14 (also 2.A)
3.6Picard rotation for fast RBIGK 03_iterative_rbig/02_rotation_choices🔬rbig.PicardRotation; fast scalable ICA

3.D — RBIG as warm-start for parametric flows → moved to Part 4

Warm-starting is a parametric-flow concern: a greedy RBIG fit only matters once there is a trainable flow to initialise. These two tutorials are therefore covered in Part 4 — Parametric Gaussianization Flows, alongside NLL training.

Key equations / models:

#TutorialSourceScopeRefs / Notes
3.7Iterative Gaussianization warm-start (diagonal)K 04_parametric_flows/01_rbig_warmstart🧱fit_rbig seeds gaussianization_flow; equal-budget → better optimum
3.8RBIG warm-start for coupling flowsK 05_coupling/05_coupling_warmstart🌉fit_rbig_coupling; the zero-kernel contract

3.E — Boundary issues & support extension

Key equations / models:

#TutorialSourceScopeRefs / Notes
3.9Boundary issues & tail handling in RBIGK 03_iterative_rbig/03_boundary_support🧱bound_correct/pdf_extension/KDE; tail round-trip (also 1.2)
3.10Dequantisation for discrete inputsK 03_iterative_rbig/03_boundary_support🧱+U[0,1) noise; pairs with 8.B

Part 4 — Parametric Gaussianization Flows

Stack the rotation + marginal blocks into a differentiable graph and train end-to-end with maximum likelihood.

4.A — NLL training of stacked blocks

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.1Gaussianization flow on two-moons end-to-endK 04_parametric_flows/00_nll_training🧱gf.gaussianization_flow + optax; iterative vs parametric
4.2Gaussianization flow 2D — FlowJax variantF 01_gaussianization_flow_2d🌉(upstream gauss_flows demo)
4.3NLL loss anatomy — base + log-det decompositionK 04_parametric_flows/00_nll_training🧱logp=logpZ+logdetJ\log p = \log p_Z + \log\lvert\det J\rvert confirmed vs log_prob

4.B — Diagonal vs. coupling marginal flow

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.4Diagonal vs. coupling — parameter-fair expressiveness studyK 05_coupling/04_diagonal_vs_coupling🧱matched by param count; coupling more param-efficient; feeds 5.E

4.C — Factory walkthroughs

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.5gaussianization_flow walkthroughK 04_parametric_flows/00_nll_training🧱gf.gaussianization_flow + fit-by-optax
4.6coupling_gaussianization_flow walkthroughK 05_coupling/04_diagonal_vs_coupling🧱gf.coupling_gaussianization_flow (RQ-spline)

4.D — Layer-wise inspection

Key equations / models:

#TutorialSourceScopeRefs / Notes
4.7Layer-wise inspection of a Gaussianization flowK 04_parametric_flows/02_layerwise_inspection🧱per-layer pushforward; rotation↔marginal push-pull; unroll_scan

Part 5 — Coupling-based Gaussianization

Coupling is the expressive engine of modern Gaussianization: split coordinates with a mask, apply a per-coordinate bijector whose parameters are predicted by a conditioner from the unchanged half.

5.A — The coupling pattern

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.1Coupling pattern from RealNVP to mixture-CDF couplingK 05_coupling/00_coupling_pattern🧱split/condition/transform; gf.AffineCoupling
5.2Coupling flow 2D — FlowJax variantF 02_coupling_flow_2d🌉
5.3Triangular Jacobian — why coupling log-det is freeK 05_coupling/00_coupling_pattern🧱log|det| = sum of active-half scales, verified

5.B — Bijector menu for coupling

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.4Affine coupling — RealNVP foundationK 05_coupling/01_bijector_menu🧱gf.AffineCoupling; linear per-coordinate map
5.5Mixture-CDF couplingK 05_coupling/01_bijector_menu🧱gf.MixtureGaussianCDFCoupling
5.6Deep sigmoid couplingK 05_coupling/01_bijector_menu🧱gf.DeepSigmoidCoupling; expressive but harder to train
5.7Rational-quadratic spline (NSF) couplingK 05_coupling/01_bijector_menu🧱gf.RQSplineCoupling; modern default (also 1.8)

5.C — Conditioner architectures (headline)

The conditioner is the expressive part — the bijector is just a triangular wrapper that makes log-det free. Every structured-data part (11 / 12 / 13) revisits this menu and picks the modality-appropriate architecture.

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.8MLP & shared-MLP conditionersK 05_coupling/02_conditioner_architectures🧱the conditioner is the expressive engine (MLP)
5.9Conditioner output parameterisation — log-scale clamping for stabilityK 05_coupling/02_conditioner_architectures🧱log_scale_bound → stable training
5.10ResNet & deep MLP conditioners🧱GAP
5.11CNN conditioner for image coupling🧱GAP — referenced by 12.C
5.12RNN / Mamba / Transformer conditioners for sequence coupling🌉GAP — referenced by 11.B
5.13GNN conditioner for graph-structured coupling🔬GAP
5.14Equivariant conditioners🔬GAP — referenced by 12.D / 13.E
5.15Hypernetwork conditioners🔬GAP
5.16Parameter budget vs. expressiveness — when does adding conditioner depth help?K 05_coupling/02_conditioner_architectures🧱conditioner width sweep; diminishing returns
5.17Three-pattern conditional flow constructionF 08_conditional_flow_three_ways🌉also 7.C

5.D — Mask design

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.18Mask design — checkerboard / channel-wise / learnedK 05_coupling/03_mask_design🧱channel-wise + Flip; checkerboard for images
5.19Mask stacking & alternation — every coordinate gets both rolesK 05_coupling/03_mask_design🧱fixed mask leaves half untouched; alternate to fix

5.E — Coupling ↔ diagonal equivalence

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.20Coupling ↔ diagonal equivalence — proof & empirical checkK 05_coupling/06_coupling_equivalence🧱zero-kernel coupling ≡ diagonal flow; training breaks it

5.F — Depth, residual coupling, stability

Key equations / models:

#TutorialSourceScopeRefs / Notes
5.21Depth-vs-expressiveness study for coupling GaussianizationK 05_coupling/07_depth_residual_stability🧱depth → fit; gradient norm vs depth; stabilisers
5.22Residual coupling & Lipschitz constraintsK 05_coupling/07_depth_residual_stability🌉T=x+gT=x+g, Lip<1, Banach inverse; preview of 9.F

Part 6 — Continuous-time Gaussianization (bridge)

A continuous-time bijector is a flow ODE x˙=vθ(x,t)\dot x = v_\theta(x, t) whose pushforward at t=Tt=T matches N(0,I)\mathcal{N}(0,I). This is the “infinite-depth coupling” limit and the bridge to diffusion models (9.E).

6.A — FFJORD

Key equations / models:

#TutorialSourceScopeRefs / Notes
6.1FFJORD 2D — continuous-time GaussianizationF 05_ffjord_2d🧱

6.B — Hutchinson trace estimator

Key equations / models:

#TutorialSourceScopeRefs / Notes
6.2Hutchinson trace for FFJORD log-det🧱GAP — pairs with xref:GP#1.19 (SLQ)

6.C — Matrix-exponential / linear neural flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
6.3Matrix-exponential neural flowF 06_matrix_exponential_neural_flow🌉

6.D — Latent ODEs

Key equations / models:

#TutorialSourceScopeRefs / Notes
6.4Latent ODE on spiralsF 09_latent_ode_spirals🌉also 11.E

Part 7 — Conditional Gaussianization

Make every parameter of the flow depend on a context yy — gives a tractable conditional density p(xy)p(x \mid y).

7.A — Conditioner zoo for marginals & couplings

Key equations / models:

#TutorialSourceScopeRefs / Notes
7.1Building a conditional Gaussianization flow — three patternsF 08_conditional_flow_three_ways🧱(also 5.17)
7.2Conditional marginals — when to make the CDF yy-dependent🧱GAP

7.B — Conditional density estimation

Key equations / models:

#TutorialSourceScopeRefs / Notes
7.3Conditional density estimation benchmarks🧱GAP

7.C — Three-pattern conditional flow

#TutorialSourceScopeRefs / Notes
7.4Three-pattern conditional flow tutorialF 08_conditional_flow_three_ways🧱

7.D — Conditioning for inverse problems

Key equations / models:

#TutorialSourceScopeRefs / Notes
7.5Conditional flow as an amortised posterior — toy inverse problem🌉GAP — feeds 16.E

Part 8 — SurVAE: Surjections & Stochastic Transforms

Generalise bijections to surjections (one direction is many-to-one) and stochastic transforms (one direction adds randomness) while keeping a tractable density / ELBO. Companion proof in survae_flows_proof.md.

8.A — Bijection / surjection / stochastic taxonomy

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.1SurVAE taxonomy with worked examplesR survae_flows_proof.md🧱
8.2Surjective Gaussianization — formal density / ELBO🌉GAP

8.B — Slicing & augmentation surjections

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.3Dequantisation surjection for discrete inputs🧱GAP (also 3.10)
8.4Augmentation surjection — auxiliary uu🌉GAP — feeds 9.B

8.C — Stochastic transforms & ELBO

Key equations / models:

#TutorialSourceScopeRefs / Notes
8.5Stochastic transforms — VAE-as-flow framing🌉GAP

Part 9 — Relaxed-Bijectivity & Non-Invertible Flows

Drop strict invertibility for expressiveness or generality. Each sub-part keeps the density / ELBO / score machinery from going opaque.

9.A — Injective / lossy Gaussianization

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.1Injective decoder + lossy encoder — manifold flows on data of intrinsic dimension mdm\leq d🔬GAP

9.B — Augmented / lifted flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.2Augmented Gaussianization via auxiliary lift🌉GAP

9.C — Continuously-indexed flows (CIF)

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.3Continuously-indexed Gaussianization🔬GAP

9.D — Stochastic normalizing flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.4Stochastic normalizing Gaussianization🔬GAP

9.E — Diffusion as continuous stochastic Gaussianization

The forward diffusion process is a Gaussianization: it transports any data distribution to N(0,I)\mathcal{N}(0,I) along a continuous noise schedule. The probability-flow ODE is its deterministic invertible counterpart and sits in the same family as Part 6.

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.5Forward & reverse SDE — diffusion as stochastic data-to-Gaussian transport🌉GAP — frame as the stochastic-NF cousin of Part 6
9.6Probability-flow ODE — the invertible Gaussianization hidden inside a diffusion model🌉GAP — bridge to 6.A
9.7Flow Matching & Rectified Flow — learning the Gaussianization vector field without simulation🔬GAP — Lipman 2023, Liu 2022
9.8σ0\sigma\to 0 limit & one-step distillation — recovering deterministic Gaussianization from diffusion🔬GAP — connects 9.E ↔ 9.G

9.F — Residual / implicit flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.9Residual flows — Lipschitz coupling🔬GAP

9.G — One-shot / Trumpet-style Gaussianizers

Key equations / models:

#TutorialSourceScopeRefs / Notes
9.10One-shot Gaussianization (Trumpet-style)🔬GAP

9.H — When non-invertibility helps

#TutorialSourceScopeRefs / Notes
9.11Decision recap — which downstream uses (sampling / density / IT / posterior) survive relaxed bijectivity🧱GAP — pedagogical

Part 10 — Non-Euclidean Gaussianization

Push the target back to N(0,I)\mathcal{N}(0,I) when the data lives on a manifold (circle, torus, sphere, Lie group).

10.A — Circle / torus

Key equations / models:

#TutorialSourceScopeRefs / Notes
10.1Circular Gaussianization on the torusF torus_circular_flow🧱

10.B — Sphere

Key equations / models:

#TutorialSourceScopeRefs / Notes
10.2Spherical Gaussianization (global)F 07_global_flow_sphere🌉pairs with xref:GP#7.18 (VISH)

10.C — Lie groups & Riemannian manifolds

Key equations / models:

#TutorialSourceScopeRefs / Notes
10.3Riemannian Gaussianization via tangent-space chart🔬GAP

Part 11 — Time-Series Gaussianization

Sequences have temporal structure: past conditions future. Choose conditioners accordingly (see 5.C and 11.B).

11.A — Per-timestep marginal Gaussianization

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.1Per-timestep marginal Gaussianization🧱GAP
11.2Sliding-window CDF for non-stationary series🧱GAP

11.B — Autoregressive flows for sequences

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.3Autoregressive Gaussianization of sequences🌉GAP — MAF / IAF as the underlying flow
11.4Choosing the temporal conditioner — RNN / Transformer / Mamba / TCN🌉GAP — leans on 5.12

11.C — Conditioning on past context

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.5Causal conditioner mechanics for time-series Gaussianization🧱GAP

11.D — AR(p) in Gaussianized state

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.6AR(p) on a Gaussianized series — closed-form forecasting🌉GAP — bridges to 17.A (normalising Kalman)

11.E — Latent ODEs for irregular series

#TutorialSourceScopeRefs / Notes
11.7Latent ODE Gaussianization for irregular time-seriesF 09_latent_ode_spirals🌉(also 6.D)

11.F — Long-range / hierarchical temporal couplings

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.8Long-range coupling masks for time-series🌉GAP

11.G — Multiscale temporal flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.9Dyadic time-Squeeze & Haar-time wavelets🔬GAP

11.H — Time-series anomaly & changepoint detection

Key equations / models:

#TutorialSourceScopeRefs / Notes
11.10Anomaly detection via log-prob from a temporal Gaussianization flow🌉GAP — pairs with xref:GP#8.31
11.11Changepoint detection in latent space🌉GAP

Part 12 — Spatial / Image Gaussianization

Images have spatial structure: locality + translation symmetry. Multiscale composition is the standard scaling pattern.

12.A — Multiscale Squeeze / unsqueeze

Key equations / models:

#TutorialSourceScopeRefs / Notes
12.1Squeeze / unsqueeze as a multiscale Gaussianization step🧱GAP

12.B — Invertible 1×1 conv & Haar wavelet

Key equations / models:

#TutorialSourceScopeRefs / Notes
12.2Invertible 1×1 conv in image flows🧱GAP
12.3Haar wavelet bijector🧱GAP — pairs with xref:GP#1.4 (Toeplitz / FFT)

12.C — Patch-based image flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
12.4Patch-based Gaussianization flow🌉GAP — direct dependency of 16.D
12.5Patch stationarity diagnostics & overlap-add inference🌉GAP

12.D — Equivariant flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
12.6Translation-equivariant image Gaussianization🌉GAP
12.7Rotation-equivariant flows for natural images🔬GAP — pairs with 5.14

12.E — Spatial random-field Gaussianization (GRF prior)

Key equations / models:

#TutorialSourceScopeRefs / Notes
12.8Spatial random-field Gaussianization🔬GAP — 🔁

12.F — Image-rotation diagnostics

Key equations / models:

#TutorialSourceScopeRefs / Notes
12.9Image rotations in RBIGB 12_image_rotations🌉

12.G — Glow end-to-end

#TutorialSourceScopeRefs / Notes
12.10Glow architecture end-to-end on natural images🌉GAP — composes 2.D, 2.E, 5.A, 12.A, 12.B

Part 13 — Spatiotemporal Fields & Videos

Lat × lon × time tensors and videos. Inherits machinery from Parts 11 and 12.

13.A — Separable space×time coupling

Key equations / models:

#TutorialSourceScopeRefs / Notes
13.1Separable space×time coupling for fields🌉GAP

13.B — Frame-conditioned video flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
13.2Frame-conditioned video Gaussianization🔬GAP

13.C — Spatiotemporal RBIG (lat × lon × time)

Key equations / models:

#TutorialSourceScopeRefs / Notes
13.3RBIG on climate tensors (lat × lon × time)🔬GAP — 🔁

13.D — Latent ODEs for field dynamics

#TutorialSourceScopeRefs / Notes
13.4Latent ODE Gaussianization for field dynamics🔬GAP — composes 6.D + 12.E

13.E — Equivariant spatiotemporal flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
13.5Equivariant spatiotemporal Gaussianization🔬GAP

13.F — Climate-field scale-up

Key equations / models:

#TutorialSourceScopeRefs / Notes
13.6Scaling Gaussianization to global climate fields🔬GAP

13.G — Multiscale spatiotemporal

Key equations / models:

#TutorialSourceScopeRefs / Notes
13.73D Haar wavelets for spatiotemporal Gaussianization🔬GAP — composes 11.G + 12.A
13.8Video Glow — multiscale spatiotemporal architecture🔬GAP

Part 14 — Information-Theoretic Estimation

A killer downstream use of Gaussianization: once T#p=N(0,I)T_\#p = \mathcal{N}(0,I), IT functionals decompose trivially.

14.A — Entropy & negentropy from Gaussianized residual

Key equations / models:

#TutorialSourceScopeRefs / Notes
14.1Entropy & negentropy from RBIGB 06_information_theory🧱

14.B — Mutual information & total correlation

Key equations / models:

#TutorialSourceScopeRefs / Notes
14.2Mutual information & total correlation via Gaussianization🧱GAP — builds on 14.1

14.C — KL between empirical distributions

Key equations / models:

#TutorialSourceScopeRefs / Notes
14.3Empirical KL via dual Gaussianization🧱GAP

14.D — Dependence measures

#TutorialSourceScopeRefs / Notes
14.41D dependence — RBIG-MI vs HSIC / MMDB 09_dependence_1d🧱
14.52D dependence casesB 10_dependence_2d🧱

14.E — Real-data IT pipelines

#TutorialSourceScopeRefs / Notes
14.6Real-world IT estimation pipelinesB 11_real_world_it🔬
14.7Dimensionality reduction via GaussianizationB 13_dimensionality_reduction🔬

14.F — Bias-variance & sample complexity

Key equations / models:

#TutorialSourceScopeRefs / Notes
14.8Bias-variance of RBIG-based IT estimators🔬GAP

Part 15 — Fair Learning with Frozen Gaussianization Flows 🔬

Pretrain a flow on a dataset, freeze its weights, then use the Gaussianised representation as a differentiable independence loss inside any predictor. Active research — drops into fairkl.models.FairModelWrapper as a replacement for CKALoss.

15.A — Frozen flow as differentiable independence loss

Key equations / models:

#TutorialSourceScopeRefs / Notes
15.1Why Gaussianisation makes independence “easy”🧱GAP — pedagogical anchor for Part 15
15.2Pretrain + freeze workflowK 05_fair_gauss_pretrain🧱api: pretrain.fit_and_freeze, freeze.freeze_flow

15.B — G-XCOV vs G-HSIC vs CKA

Key equations / models:

#TutorialSourceScopeRefs / Notes
15.3G-XCOV: cross-covariance after Gaussianization🧱api: GaussianizedXCovLoss
15.4G-HSIC: HSIC in Gaussianised features🌉api: GaussianizedHSICLoss
15.5CKA baseline comparison🌉GAP

15.C — Pretrain + freeze workflow

#TutorialSourceScopeRefs / Notes
15.6Diagnostics — NLL curve, QQ-plots, skew/kurt, freeze + invertibilityK 05_fair_gauss_pretrain🧱

15.D — Synthetic fairness sweeps & Pareto curves

#TutorialSourceScopeRefs / Notes
15.7Synthetic regression: G-XCOV vs CKA Pareto sweep over fairness weight μK 06_fair_gauss_synthetic🔬

15.E — Adult census case study

#TutorialSourceScopeRefs / Notes
15.8UCI Adult — AUC vs DP / EO differencesK 07_fair_gauss_adult🔬

15.F — Drop-in with FairModelWrapper

#TutorialSourceScopeRefs / Notes
15.9Integrating G-XCOV / G-HSIC with fairkl.FairModelWrapperR docs/fair_gaussianization_experiment.md🌉engineering doc

15.G — Open research directions

#TutorialSourceScopeRefs / Notes
15.10Follow-up experiment design (approaches A–G)R docs/fair_gaussianization_followups.md🔬active research

Part 16 — Plug-and-Play Priors with Gaussianization

The central pedagogical hook: the proximal operator of a Gaussianized prior is closed-form in latent spacezz/(1+1/τ)z \mapsto z/(1 + 1/\tau) for the standard Gaussian — so PnP-ADMM / HQS schemes with a Gaussianization prior have no inner solver.

16.A — PnP recap (denoiser-as-prior)

Key equations / models:

#TutorialSourceScopeRefs / Notes
16.1PnP framework recap — denoiser-as-prior🧱GAP

16.B — Closed-form prox in Gaussianized latent space

Key equations / models:

#TutorialSourceScopeRefs / Notes
16.2Closed-form prox in Gaussianized space — the central trick🌉GAP — pedagogical anchor for Part 16
16.3Score of a Gaussianization prior — algorithmic derivation🧱GAP

16.C — HQS / ADMM with Gaussianization

Key equations / models:

#TutorialSourceScopeRefs / Notes
16.4Gaussianization-HQS for linear inverse problems🔬GAP
16.5Gaussianization-ADMM with dual update🔬GAP

16.D — Patch-based PnP for images

Key equations / models:

#TutorialSourceScopeRefs / Notes
16.6Patch-based Gaussianization PnP🔬GAP — direct dep on 12.4
16.7Overlap-add patch aggregation & boundary handling🔬GAP

16.E — Linear inverse problems

#TutorialSourceScopeRefs / Notes
16.8Deblurring with Gaussianization prior🔬GAP
16.9Super-resolution🔬GAP
16.10Inpainting🔬GAP
16.11Compressed sensing🔬GAP

16.F — Comparison with score / diffusion PnP

Key equations / models:

#TutorialSourceScopeRefs / Notes
16.12Gaussianization-PnP vs score / diffusion PnP — head-to-head🔬GAP — pairs with 9.E

Part 17 — Filtering & Data Assimilation with Gaussianization

Gaussianize a non-Gaussian state / observation / QoI, run a closed-form Kalman recursion in latent space, then invert.

17.A — Normalizing Kalman filter (closed-form)

Key equations / models:

#TutorialSourceScopeRefs / Notes
17.1Normalizing Kalman filter — closed form via state Gaussianization🔬GAP — pairs with xref:GP#8.1
17.2RTS smoother in Gaussianized space🔬GAP — pairs with xref:GP#8.1

17.B — State vs observation vs QoI Gaussianization

Key equations / models:

#TutorialSourceScopeRefs / Notes
17.3Observation Gaussianization for non-Gaussian likelihoods🌉GAP
17.4QoI Gaussianization for posterior summaries🧱GAP
17.5State vs obs vs QoI — when each wins (decision tree)🧱GAP — pedagogical

17.C — Gaussianized ensemble Kalman filter

Key equations / models:

#TutorialSourceScopeRefs / Notes
17.6Gaussianized EnKF🔬GAP — pairs with xref:GP#8.23

17.D — Non-Gaussian likelihoods in DA

Key equations / models:

#TutorialSourceScopeRefs / Notes
17.7Gaussianization for non-Gaussian observation likelihoods🔬GAP — bridge to xref:GP#8.29-31

17.E — Sequential Bayesian updates in latent space

#TutorialSourceScopeRefs / Notes
17.8Sequential Bayesian update in latent space — natural-parameter addition🧱GAP — pairs with xref:GP#0.6

17.F — Comparison with EKF / UKF / particle filter

#TutorialSourceScopeRefs / Notes
17.9Gaussianized filter vs EKF / UKF / particle filter — accuracy + cost benchmarks🌉GAP

Part 18 — Geoscience Case Studies

Applied stories. Each entry composes pieces from earlier parts; flagged 🔁 where it cross-references the GP master list.

18.A — Quantile mapping / bias correction

Key equations / models:

#TutorialSourceScopeRefs / Notes
18.1Quantile mapping for climate-model bias correction🔬GAP — direct application of 1.A
18.2Statistical downscaling via conditional Gaussianization🔬GAP — leans on Part 7

18.B — Climate-field anomaly detection

Key equations / models:

#TutorialSourceScopeRefs / Notes
18.3Climate-field anomaly detection via flow log-prob🔬GAP

18.C — Spatial extremes (GEV / Gumbel margins) 🔁

Key equations / models:

#TutorialSourceScopeRefs / Notes
18.4GEV-margin Gaussianization + spatial flow🔬GAP — 🔁 xref:GP#14.A
18.5Gumbel-margin variant🔬GAP

18.D — Ocean SST / sea-level extremes

#TutorialSourceScopeRefs / Notes
18.6SST anomaly Gaussianization🔬GAP
18.7Sea-level extreme tails🔬GAP — 🔁 xref:GP#14.8

18.E — Precipitation Gaussianization

Key equations / models:

#TutorialSourceScopeRefs / Notes
18.8Precipitation Gaussianization with zero-inflation & heavy tails🔬GAP

18.F — Wind / atmospheric tracers

#TutorialSourceScopeRefs / Notes
18.9Wind-vector Gaussianization (angular + magnitude)🔬GAP
18.10Atmospheric tracer concentration Gaussianization🔬GAP

18.G — Satellite-image emulation

#TutorialSourceScopeRefs / Notes
18.11Satellite-image emulation via patch-Gaussianization🔬GAP — composes 12.C + 16

18.H — Climate-data assimilation

#TutorialSourceScopeRefs / Notes
18.12Climate DA with Gaussianized observation operator🔬GAP — 🔁 xref:GP#14.11
18.13Gaussianized EnKF for ocean reanalysis🔬GAP — composes 17.C + 13

Part 19 — Probabilistic-Programming Integration

19.A — FlowDist in NumPyro

Key equations / models:

#TutorialSourceScopeRefs / Notes
19.1FlowDist — wrapping a Gaussianization flow as a NumPyro distribution🧱GAP

19.B — Flows as priors in BHMs

#TutorialSourceScopeRefs / Notes
19.2Flow priors in Bayesian hierarchical models🌉GAP — pairs with xref:GP#11.4

19.C — Flows as guides in SVI

#TutorialSourceScopeRefs / Notes
19.3Flow guides for SVI — beyond mean-field🌉GAP — pairs with xref:GP#6.14

19.D — pyrox integration patterns

#TutorialSourceScopeRefs / Notes
19.4Three-pattern flow integration with pyrox🌉GAP — leans on xref:GP#11.3

Part 20 — Metrics, Calibration, Diagnostics

20.A — NLL / bits-per-dim

Key equations / models:

#TutorialSourceScopeRefs / Notes
20.1NLL & bits-per-dim — what to log and how to compare🧱GAP

20.B — QQ / PIT / coverage for flows

Key equations / models:

#TutorialSourceScopeRefs / Notes
20.2PIT, coverage, and QQ diagnostics for flows🧱GAP — pairs with xref:GP#3.5

20.C — Sample quality

#TutorialSourceScopeRefs / Notes
20.3Sample-quality metrics — FID-style, MMD, energy distance🧱GAP

20.D — Roundtrip invertibility & numerical tolerance

#TutorialSourceScopeRefs / Notes
20.4Roundtrip invertibility tests for deep stacks🧱GAP — pairs with 0.9

20.E — Cross-validation for IT estimators

#TutorialSourceScopeRefs / Notes
20.5CV / bootstrap for IT estimator confidence intervals🧱GAP — pairs with 14.F

Summary of duplications to reconcile

TopicLocationsSuggestion
2D Gaussianization flowK 01_gaussianization_2d, F 01_gaussianization_flow_2dKeep K as Keras canonical; F as FlowJax canonical; both surface from Part 4
2D coupling flowK 02_coupling_flow_2d, F 02_coupling_flow_2dSame — keep both, one per backend
Coupling ↔ diagonal equivalenceK 04_coupling_equivalence, F 04_coupling_equivalenceKeep both; K = pedagogical / Keras, F = FlowJax replicate
Rotation choicesB 08_rotation_choicesSingle canonical; referenced from 2.A and 3.C

Proposed final homes (high-level)