Changelog¶
0.6.5 (2026-10-08)¶
Features¶
- api: adopt and document naming conventions, renaming with deprecated aliases (#617) (e97145c)
- api: export is_eigen_reducible, add a top-level all, check doc page placement (#616) (4242879)
- distributions: shared AbstractMultivariateNormal base for both MVN classes (#613) (37bc8c2)
- inference: add dense_innovation to ensemble_kalman_gain (#608) (caf9c94)
- inference: document natural-parameter conventions and add blr convention="precision" (#611) (66cdb3c)
- linalg: add diag_inv(method="xdiag") (G16) (#628) (9fb9c1e)
- operators: finish the gh-136 rename with SumOfKroneckersSqrt and sum_of_kroneckers_sample (#610) (2397c4b)
- operators: orthonormal fast path for LowRankUpdate on a scaled identity (#606) (475f169)
- primitives: add Hutch++ to trace (G17) (#629) (e2e8fec)
- primitives: add mixture_quantile and a Chandrupatla root finder (#627) (82b7b8f)
- randomized: add column_id and cur (G17) (#632) (651c9b1), closes #486 #511
- ssm: add a square-root parallel Kalman filter (#630) (4cb317d)
- ssm: add SDE linearization and drift path-KL helpers (#623) (e41dc42)
- ssm: differentiate dare through an optimistix implicit adjoint (#624) (d0a7db0)
- strategies: add NystromLogdet (G17) (#631) (52abe44)
- strategies: add SketchAndPrecondLSMR and sketch_and_solve (G15) (#625) (f91cbff)
Bug Fixes¶
- deps: make the dense pseudo-inverse references robust to numpy 2.5 (#600) (fc3f05e)
- inference: keep obs_noise structured in etkf_transform and take one eigh (#607) (051e843)
- inference: small-fixes checklist from the v0.2.0 review (#612) (041fafe)
- land the review fixes for #639, #623 and #627 (CG atol rescaling, Taylor KL, quantile edge cases) (#646) (16837bf)
- operators: inherit symmetric/PSD tags in InterpolatedOperator (#601) (9b3917a)
Performance Improvements¶
0.6.4 (2026-10-07)¶
Deprecations¶
Back-filled in #300: the deprecations in effect as of 0.6.4. Every one is removed in 0.7.0 (see the deprecation policy in docs/api/index.md). The items promised for 0.5.0 missed that date and move to 0.7.0.
- operators:
SumKronecker→SumOfKroneckers(#136);SVDLowRankUpdate→LowRankUpdate(..., orthonormal=True)orsvd_low_rank_plus_diag;Circulant(symmetric=None)value-inferred symmetry (the default becomesFalse) - linalg: the legacy three-positional
conditional_variance(base_diag, A_X, S_u)→conditional_variance(K_XX_diag, K_XZ, A_X, S_u=S_u) - expfam:
to_expectation→to_mean_cov;to_natural→mean_cov_to_natural - gp:
base_conditional→sparse_conditional;collapsed_elbo(K_diag=)→K_xx_diag=; the ignoredsolver=ofcollapsed_elboandgauss_kl;predict_variance(K_cross, K_test_diag, operator)→predict_variance(cache, K_cross, K_test_diag) - strategies:
BBMMSolver.cg_tolerance/cg_max_iter/lanczos_iterandLSMRSolver.maxiter(and their constructor keywords) →rtol/max_steps/lanczos_order(#405); an SLQ logdet of a non-symmetric-tagged operator (will raise) - ssm:
InfiniteHorizonState→FilterState; the oldinfinite_horizon_smootherargument order;dare(P_init=);parallel_kalman_filter(solver=)withoutwoodbury_innovation=True;form="sqrt"→psd_project=True; the stackedQ[0] = P_0layout (naturals_to_ssm,ssm_to_naturals,udl_from_ssm_params) andnaturals_to_ssm(solver=); the ignoredprocess_noiseargument of the RTS smoothers
Features¶
- expfam: add to_mean_cov and deprecate the misnamed to_expectation/to_natural (#545) (51cf276)
- quadrature: let ep_tilted_moments take any point-based integrator (#575) (bc4d10a)
- strategies: thread a PRNG key to stochastic logdets and seed CGSolver/MINRESSolver (#590) (8710dfa)
Bug Fixes¶
- distributions: let project take an untagged Cholesky factor, and sufficient_stats any batch rank (#347) (#547) (9fc76af)
- frontend: default linear_solve to AutoSolver and attach preconditioners through Composed/Auto (#596) (efd32cf)
- gp, quadrature: small-fixes checklist from the v0.2.0 review (#589) (6b31bad)
- gp: cache the Cholesky factor in PredictionCache and take the cache first in predict_variance (#582) (071d748)
- gp: document conditional_interpolate as two-filter fusion and add rts_interpolate (#566) (662253d)
- gp: document love_cache's one-signed Lanczos bias and add a convergence diagnostic (#564) (d57c2d9)
- linalg: diag_inv takes structured inverses and safe_cholesky densifies only on retry (#573) (a79d0a4)
- linalg: solve_matrix factors once only for dense PSD operators (#570) (56cbba7)
- operators: add Circulant(symmetric=) and deprecate value-inferred symmetry (#567) (681900d)
- primitives: cholesky and sqrt unwrap scalar Mul/Div and keep structure (#563) (398757e)
- primitives: close small dispatch gaps in trace, tagged MaskedOperator solve and linear_solve negation (#585) (8b2953a), closes #391
- primitives: flag silent densification with DenseFallbackWarning at the caller (#587) (4a8b52a), closes #406
- primitives: forward stochastic options through every wrapper in trace/diag/frobenius_norm (#581) (6ac0201), closes #320
- primitives: logdet(KroneckerSum) uses general eigvals for non-symmetric factors (#560) (a670b31)
- primitives: one rank= rule for eig, eigvals and svd (#584) (b708680), closes #383
- primitives: sqrt_matmul shifts KroneckerSum and BlockTriDiag structurally (#579) (6eb2310), closes #337
- primitives: structured diag/trace for Toeplitz and FFT-diagonalised operators (#574) (2d10a88), closes #373
- primitives: submatrix keeps LowRankUpdate and lineax wrapper structure (#576) (269162d)
- quadrature: warn about the unscented alpha=1e-3 default in float32 (#572) (e2340c7)
- solve: accept a gaussx strategy in gaussx.solve and a lineax solver in linear_solve (#595) (1bd1540)
- strategies: check SLQ symmetry, make Jacobi gradient- and sign-safe, reject rectangular LSMR logdets (#597) (b7caaa9)
- strategies: keep the SLQ logdet gradient finite through a Lanczos breakdown (#593) (8eb9c8d)
- strategies: resolve CG tolerances from the dtype and add throw= to the CG family (#571) (1e2ad62)
- strategies: stop MINRES at convergence, differentiate it implicitly, and raise on exhaustion (#577) (52452f3)
Performance Improvements¶
- preconditioners: read the diagonal without materialising, and take a column function in from_operator (#594) (2325beb)
- quadrature: compute kernel expectations without the dead (P, N², N²) covariance (#578) (5e4b643)
0.6.3 (2026-10-05)¶
Features¶
Bug Fixes¶
- distributions: draw sample noise in the parameter dtype (#381) (#528) (852dabc)
- distributions: give batched MVN entropies the batch shape (#319) (#542) (bc189c0)
- distributions: make log(2 pi) a Python float so it follows the active dtype (#369) (#527) (7db7647)
- distributions: route MultivariateNormal.sample through sample_mvn and keep structured precisions structured (#538) (1e12d54)
- distributions: validate only the observed entries in MaskedLGSSM, and allow round-off in the Lanczos bracket test (#469) (#526) (6d37c2c)
- linalg: centre stable_squared_distances and accumulate its norms in the wide dtype (#414) (#533) (ebd69e6)
- operators: derive dtypes from inputs at the remaining default-dtype sites (#408) (#532) (835981e)
- primitives: return non-finite from a singular dense solve instead of raising (#537) (c91bf01)
- quadrature: keep ep_tilted_moments in the cavity dtype and floor its variance relative to the cavity (#400) (#531) (526b94f)
- ssm: build SumSDE's L with block_diag so it keeps the component dtype (#397) (#530) (3f4fd86)
- ssm: give infinite_horizon_filter's carry the model dtype (#386) (#529) (b15fd35)
Performance Improvements¶
0.6.2 (2026-10-03)¶
Bug Fixes¶
0.6.1 (2026-10-03)¶
Bug Fixes¶
- add helpful error message for numpyro extras (#512) (a2870e1)
- distributions: add BYM2GMRF, the BYM2 pair with its exact density and draws (#518) (e9f3201), closes #508
- primitives: inv_quad_logdet's default is exact for structured operators (#517) (2360f45), closes #340
- strategies: AutoSolver keeps every structured operator on its exact path (#514) (dfb0b89), closes #321
- strategies: differentiate CG solves through data-dependent preconditioners (#513) (0da6c41)
0.6.0 (2026-10-02)¶
⚠ BREAKING CHANGES¶
- sparse: cholesky(SparseOperator) now returns a SparseCholeskyFactor of the permuted matrix (solve, logdet, solve_lower_transpose, selected_inverse, diag_inv) instead of a dense lx.MatrixLinearOperator, and no longer raises above AutoSolver's size threshold.
- randomized: NystromPreconditioner.from_operator now requires a keyword-only shift (μ, e.g. the noise variance σ²) and its operator is the PSD part A (e.g. K), not the system A + μI; build it from K and pass σ² instead of building it from K + σ²I. Its fields are now basis, eigenvalues and shift (the old scale field is gone), and as_operator ignores its argument. For the old Rayleigh–Ritz projection use gaussx.randomized_eigh(op, rank, n_power_iter=0), which projects onto orth(AΩ) rather than orth(Ω) and so is more accurate, not identical.
Features¶
- distributions: add GaussianMRF, IntrinsicGMRF and ConstrainedGMRF (G6) (#505) (99d39f5)
- gmrf: add precision builders, SPDE on meshes and grids, fem_matrices, fem_projector and SpectralFunction (G7) (#502) (b888637)
- inference: add laplace_mode with implicit gradients, and binomial and negative-binomial likelihoods (G8) (0c64f4e)
- inference: add vb_mean_correction, the low-rank variational-Bayes correction of the Laplace mean (G10) (c65d82f)
- primitives: add pseudo_logdet; theta_design's default Hessian works through sparse log-determinants (G5) (#504) (0018e75)
- randomized: add randomized_nystrom and rebuild NystromPreconditioner on it with an explicit shift (G13) (#501) (46b248b)
- randomized: add range_finder, qb, randomized_svd and randomized_eigh with method="randomized" on svd/eig (G12) (#500) (a7a5ab2)
- sparse: add sparse cholesky with cached symbolic analysis, takahashi selected inverse and exact vjps (G4) (a15380c)
Bug Fixes¶
- gmrf: generalized_variance_scale takes diag(S⁻¹) and its correction from one sparse factor (G4) (a15380c)
- inference: import gaussx without numpyro; laplace_mode sits behind the optional-numpyro guard (G8) (0c64f4e)
- inference: vb_mean_correction sits behind the optional-numpyro guard too (G10) (c65d82f)
- sparse: second-order gradients through the sparse logdet and solve are correct (G4) (a15380c)
- sparse: typecheck without the optional scikit-sparse installed (G4) (a15380c)
0.5.0 (2026-10-02)¶
⚠ BREAKING CHANGES¶
- randomized: PartialCholeskyPreconditioner(rank, shift).as_operator(op) now treats op as the system K + shift·I and factors op − shift·I (fixes #345). To factor a noiseless K directly, use PartialCholeskyPreconditioner.from_operator(K, rank, shift=σ²), which also builds the preconditioner once (#371).
Features¶
- linalg: structured selected inverses and shifted-Kronecker diag_inv; fix BlockTriDiag tags (G3) (#489) (6529589)
- operators: add SparseOperator with a static SparsityPattern (G1) (#488) (56799a0)
- primitives: add eigh_generalized with a schur-complement path for singular b (G2) (#490) (80db3c5), closes #471
- quadrature: add theta_design with eb, grid and ccd designs (G9) (#492) (f691dd4)
- randomized: add rp_cholesky and a build-once PartialCholeskyPreconditioner; stop counting noise twice (G14) (14ea1f1)
- sketching: add sketching operators and move hadamard_transform from kernellib (G11) (#491) (7275881)
0.4.1 (2026-10-02)¶
Bug Fixes¶
0.4.0 (2026-09-29)¶
⚠ BREAKING CHANGES¶
- periodic: PeriodicSDE.state_dim is 2 * (n_harmonics + 1), was 2 * n_harmonics.
Bug Fixes¶
- dare: solve by doubling so slow dynamics converge; refuse a non-converged steady state (#294) (#445) (70b3f38)
- kalman: symmetrise the filter and smoother covariances (#388) (#447) (b358060)
- periodic: add the missing j = 0 harmonic so k(0) equals the variance (#289) (#444) (e2aa904)
- periodic: exact scaled Bessel weights for any lengthscale (#291) (#443) (7029e9a)
Performance Improvements¶
- composition: SumSDE.discretise is the block diagonal of its components (#318) (#446) (33f36ad)
- nonlinear_kalman: validate only rules that can go indefinite; Cholesky solves (#331) (#451) (418ce42)
- spingp,ssm_natural: factor R once; N block factorisations in naturals_to_ssm (#403) (#449) (f603059)
0.3.1 (2026-09-29)¶
Bug Fixes¶
- base_conditional: accept a 1-D f, validate shapes, clip diagonal variances at 0 (#363) (#438) (dc8e1d2)
- block_tridiag: support a single block (N = 1) in mv, transpose, cholesky and solve (#304) (#429) (9c4a5d8)
- diagonalised: complex transpose is Aᵀ, and only real outputs are auto-tagged symmetric (#330) (#433) (9b03a08)
- diagonalised: reject a non-conjugate-even symbol for a real-output circulant (#325) (#432) (0431898)
- ensemble: validate etkf_transform inputs like its siblings (#341) (#435) (43b9560)
- low_rank_update: reciprocal-free Woodbury capacitance so zero weights stay exact (#307) (#430) (0e00263)
- markov_gaussian: support a single step (zero transitions) in log_prob and the precision views (#348) (#436) (a3d6b02)
- natural_gradient: gauss_newton_precision(J, base=prior) keeps the Woodbury structure (#334) (#434) (b0a2bf0)
- sum_kronecker: never whiten by a non-positive diagonal anchor factor (#317) (#431) (51bb045)
- tilted_moments: pass a non-positive cavity variance through instead of returning NaN (#357) (#437) (c732eac)
- toeplitz: reject a complex column at construction (#368) (#439) (75dd026)
0.3.0 (2026-09-29)¶
⚠ BREAKING CHANGES¶
- low_rank_update: low_rank_plus_diag(diag, U, ...) is no longer PSD-tagged from the sign of diag (pass psd=True), and value-equal but distinct factors (V = U.copy()) are no longer inferred symmetric (pass V=U or tags=lx.symmetric_tag).
Bug Fixes¶
- inv: keep inv(LowRankUpdate) structured under jit; general Woodbury branch (#328) (#423) (5570352)
- kronecker_sum: finite gradients through solve/sqrt at repeated eigenvalues (#295) (#421) (0fa19b3)
- kronecker_sum: make the KroneckerSumSqrt PSD guard jit-safe (#420) (19a1ba2), closes #292
- low_rank_update: infer tags from structure only, never array values (#422) (d7d891e), closes #343
- masked: differentiable, cache-stable capacitance solve; trace-safe transpose (#290) (#427) (ca6fc00)
- ssm_natural: check Q[0] == P_0 at run time so tracing cannot skip it (#359) (#426) (4a328b2)
- strategies: make strategy and preconditioner config static pytree data (#419) (bfc4bf4), closes #301
0.2.0 (2026-09-25)¶
⚠ BREAKING CHANGES¶
- the kernel operators, kernel approximations, kernel statistics, Falkon, EigenPro, batched kernel matvecs and stable_rbf_kernel are removed from gaussx. Import them from kernellib:
kernellib.<name>for operators, Nystrom / RFF, Falkon and EigenPro;kernellib.functional.<name>for hsic, mmd_squared, center_kernel, centering_operator and stable_rbf_kernel.
Features¶
0.1.0 (2026-09-24)¶
⚠ BREAKING CHANGES¶
- operators: the
greenandcapacitance_invattributes are removed (replaced bycapacitance_lu). No downstream package reads them.
Features¶
- operators: add DiagonalisedOperator and Circulant; diagonalised Kronecker-sum solves (#268) (a9b65e9)
- operators: solve(MaskedOperator) via the capacitance method (#269) (d951677)
Bug Fixes¶
0.0.29 (2026-09-24)¶
Features¶
- kernels: falkon_preconditioner for Nyström KRR (gh-49, 1/3) (#253) (9e02c71)
- kernels: falkon_solve, Falkon's preconditioned CG (gh-49, 2/3) (#254) (8926d82)
- linalg: add EigenFactorization and kronecker_sum_solve; fix non-symmetric KroneckerSum solve (#264) (074e540)
Bug Fixes¶
0.0.28 (2026-09-24)¶
Features¶
- distributions: structure-aware sample_mvn dispatch (gh-78) (#249) (ca4fedd)
- primitives: contour-integral matrix square roots and joint inv-quad/logdet (gh-39, gh-43) (#244) (b6f5003)
0.0.27 (2026-09-23)¶
Bug Fixes¶
- operators: exact gradients through the SumOfKroneckers solve; cavity precision_floor (#246) (77f3382)
0.0.26 (2026-08-28)¶
Features¶
- ssm,distributions: add UDL factorisation and MarkovGaussian chain distribution (gh-65, gh-76) (#242) (58e90a6)
0.0.25 (2026-08-26)¶
Features¶
- inference: ensemble Kalman inversion step (gh-230) (#239) (5348f18)
- ssm: mean-field block-diagonal Kalman filter and smoother (gh-29) (#240) (15d82f3)
0.0.24 (2026-08-26)¶
Bug Fixes¶
- root: guard pivoted-Cholesky against rank-deficient inf columns (gh-236) (#238) (71ff499)
- safe_cholesky reverse-mode AD + SDE kernel dtype promotion (gh-229, gh-224) (#232) (7dc00a1)
0.0.23 (2026-08-25)¶
Features¶
0.0.22 (2026-08-21)¶
Bug Fixes¶
- ssm,quadrature: preserve input dtype under x64 (gh-219) (#221) (b29f4f8)
- ssm: report a Lyapunov-consistent diffusion for ProductSDE (gh-219) (#222) (f38ffe7)
0.0.21 (2026-08-20)¶
Features¶
Bug Fixes¶
0.0.20 (2026-08-19)¶
Features¶
- inference: enkf_analysis — perturbed-observation ensemble Kalman update (#214) (2328fa1)
- quadrature,inference: cubature moment matching, SLR, and diagonal sites (#212) (3bc48cf)
0.0.19 (2026-08-18)¶
Features¶
0.0.18 (2026-06-10)¶
⚠ BREAKING CHANGES¶
- core: SumOperator, ScaledOperator, and ProductOperator are factory functions returning lineax-native operators, no longer classes; isinstance checks against them will break. is_diagonal of a product of diagonal operators now correctly reports True.
Features¶
- core: consolidate on lineax 0.1.1 and matfree 0.6 with expanded structured dispatch (#194) (c56d40e)
- inference: ensemble DA primitives — localization, inflation, ETKF (#190) (b1aa7bc)
0.0.17 (2026-06-02)¶
Features¶
- solvers: unified solver substrate — front door, preconditioners, capacitance, tridiagonal (#188) (e6633fb)
0.0.16 (2026-05-29)¶
Features¶
- gp: add Matheron-rule posterior sample updates (#180) (2369222)
- kernels: add EigenPro spectral preconditioning for kernel SGD (#182) (a66bab1)
- linalg: add structured sandwich covariance transform (#177) (25392b4)
- primitives: add root and inverse-root decomposition primitives (#181) (c6809ce)
- ssm: add opt-in Woodbury innovation covariance (#178) (0b745df)
- ssm: add square-root form for parallel Kalman filtering (#179) (3e7e1d4)
0.0.15 (2026-05-12)¶
Features¶
- operators: add FFT-based Toeplitz sampling via circulant embedding (#172) (8dc8376)
- operators: add matrix-free Lanczos sampling for SumKronecker (#174) (b39deb3)
- operators: add structured KroneckerSum sqrt and sampling (#173) (3cdd9a0)
- recipes: add Bessel-corrected ensemble covariances and Kalman gain (#175) (e0b3218)
0.0.14 (2026-05-03)¶
Bug Fixes¶
0.0.13 (2026-05-03)¶
Features¶
- add batched input support to kernel operators (#141) (165a6f6)
- ssm: operator-typed Kalman family + time-varying generalisation (#162) (cdf898d)
0.0.12 (2026-05-02)¶
Features¶
- route all linear algebra through dispatch infrastructure and expose solver parameter (#154) (400754a)
- structural dispatch for eigh/submatrix/lyapunov; cleaner inverse + trace_product (#158) (98140fc)
0.0.11 (2026-05-02)¶
Features¶
Bug Fixes¶
- address PR review comments (f4a9371)
0.0.10 (2026-04-08)¶
Features¶
- add 6 features — infinite-horizon KF, collapsed ELBO, OILMM, Psi stats, emission model, grid interpolation (#96) (b2b1e1f)
- add 6 standalone sugar/recipe features (#27, #32, #33, #34, #35, #69) (#93) (cb40d2a)
0.0.9 (2026-04-07)¶
Features¶
- add 5 features — implicit op params, stable distances, batched matvec, gauss_kl, conditional (#50, #51, #73, #74, #86) (#89) (92b37cc)
- add KernelOperator and ImplicitCrossKernelOperator (#46, #48) (#87) (64b03b4)
- add MINRESSolver and Gaussian 3-parameterization conversions (#45, #75) (#91) (73a62b7)
0.0.8 (2026-04-07)¶
Features¶
- add 7 new lineax operators (#37, #38, #41, #42, #44) (#85) (ccf012f)
- add correct_variance flag and ComposedSolver (#81) (901dd53)
- integrator unification — GaussHermiteIntegrator, unified ELL & ELBO (#83) (47cee23)
0.0.7 (2026-03-31)¶
Features¶
- add SSM expectation params and Joseph-form covariance update (#17) (45ffc4e)
- recipes: add SSM expectation params and Joseph-form covariance update (45ffc4e)
0.0.6 (2026-03-31)¶
Features¶
0.0.5 (2026-03-31)¶
Features¶
- add new operators, distributions, uncertainty propagation, and enriched docs (#13) (6aada55)
- add structured operators, uncertainty propagation, and enriched docs (6aada55)
0.0.4 (2026-03-30)¶
Features¶
- add NumPyro-compatible MultivariateNormal distributions (#11) (98248d7)
- add v0.2–v0.4 layers (strategies, sugar, expfam, recipes, matfree backends) (#8) (a07d878)
- distributions: add NumPyro-compatible MultivariateNormal distributions (98248d7)
0.0.3 (2026-03-30)¶
Features¶
Bug Fixes¶
- point docs nav to .ipynb notebooks for rendered outputs (c4f16d3)
- render .ipynb notebooks instead of .py in docs (#5) (066b28e)
- stabilize sparse variational GP optimization (36f7910)
0.0.2 (2026-03-30)¶
Features¶
- add BlockDiag, Kronecker, and LowRankUpdate operators (0ee2b64)
- add DenseSolver and CGSolver strategies (91ccaed)
- add JAX ecosystem dependencies and update project metadata (cae329c)
- add Layer 0 primitives with structural dispatch (f91da41)
- add structural tags and query helpers (2e6ebe3)
- gaussx v0.0.1 — structured linear algebra foundations (0518464)
- rename mypackage to gaussx (e70a1aa)
- scaffold gaussx package and test directory layout (da4705e)
- wire up gaussx public API exports (d2b39ec)
Bug Fixes¶
- address operator review findings (d8a8b12)
Changelog¶
All notable changes to this project will be documented in this file.
See Conventional Commits for commit guidelines.