Changelog#
0.3.0 (2026-08-06)#
⚠ BREAKING CHANGES#
Phase 6 API consistency (D1–D4) (#89)
Features#
Bug Fixes#
divergences: lift operands into gauge before H²/KL (B1, DEC-1) (#84) (6b2cf16)
docs: bust myst-nb cache on normix source changes (#68) (e03e9f4)
docs: remove nested double-border on inline code chips (#64) (74187aa)
docs: stop painting sphinx-design cards black (#74) (4a51f41)
em: hybrid-scale EM convergence for near-zero μ (#75) (9ba2cb0)
ninvg: floor GIG params consistently before log_kv in marginal pdf (#67) (9fea176)
Phase 3 correctness (B2–B8) from 2026-07-12 review (#86) (f159b32)
Performance#
Refactoring#
Documentation#
complete docs refactor Phases 4–5 (notebooks, API, changelog) (#66) (e368e37)
design: review-roadmap Phase 0 — record DEC-1…DEC-5 (#81) (7b65966)
distributions: add Phase 6 per-distribution gallery (#69) (fc770ac)
distributions: compare gauge-invariant EM outputs in gallery (#77) (4d0c046)
plans: add roadmap for the 2026-07-12 package review (#80) (e275b59)
plans: archive completed plans and refresh active-plan status (#59) (fe6703a)
review roadmap Phase 2 agent docs & rules sync (DOC1–DOC7) (#83) (1f47fe3)
rules: adopt pstack workflow skills and archive the survey (#76) (6c5f0d2)
tutorials: add entropy-varentropy frontier figures for GIG and GH (#65) (9a1fc69)
0.2.7 (2026-06-25)#
Features#
Bug Fixes#
Refactoring#
Documentation#
0.2.6 (2026-06-05)#
Bug Fixes#
0.2.5 (2026-06-03)#
Bug Fixes#
Documentation#
0.2.4 (2026-05-28)#
Documentation#
0.2.3 (2026-05-27)#
Features#
Documentation#
0.2.2 (2026-05-24)#
Features#
0.2.1 (2026-05-17)#
Features#
add data for testing (5e2a0a8)
add SP500 return sample for testing (9a44bcb)
base: add NormalMixture and JointNormalMixture base classes (68b35be)
bench: add GH EM path comparison for Phase 6 (796880c)
benchmarks: add EM/Bessel/GIG suite with JSON results and compare (f51f06a)
bessel: Phase 1 — Hankel large-z asymptotic in pure JAX (ca70328)
bessel: Phase 2 — numerical quadrature replaces scipy callback (5fc7a27)
bessel: Phase 3 — Olver uniform expansion, zero scipy callbacks (3fd1385)
CPU Bessel backend for EM hot path (cpu_bessel_design.md) (#16) (d620007)
dependencies: add development dependencies and update package configurations (e5c26b9)
dependencies: add yfinance and new packages to project (f8459c5)
distributions: add Generalized Hyperbolic distribution (9afb121)
distributions: add KL projections and embeddings for GIG and GH families (34635da)
distributions: add Normal-Inverse Gamma and Normal-Inverse Gaussian distributions (6dd5c07)
distributions: add pdf, cdf, mean, var, std, rvs to all distributions (89f3481)
divergences: add Hellinger and KL for exponential families (e870441)
download: add script to download S&P 500 stock data (02382af)
em: add comprehensive mixture model EM benchmark script (fc59cc8)
em: add MCECM and split M-step via _m_step_subordinator (d9b09b8)
em: add NormalMixtureEta and refactor E/M-step API (764a8c4)
em: add Shrinkage combinator and shrinkage target builders (321a983)
em: EMResult, verbose dual-loop fitter, default_init API (2119acb)
em: factor analysis mixtures, orbit regularizations, SP500 study (257bd3f)
em: incremental EM, eta rules, and compute_eta_from_model (5b6e21a)
em: NormalMixtureEta from_expectation and marginal replace facade (c79e24b)
em: Phase 1 EM API generalisation (eta order, AffineRule, MarginalMixture) (128229b)
expectation-to-natural: enhance expectation-to-natural conversion across distributions (4ff70f7)
gamma,inverse_gamma,inverse_gaussian: convert rvs methods from scipy/numpy to JAX (b0e9c27)
gh: add warm-start, pure-JAX Newton for GIG; profiling scripts and tech notes (1f951bd)
gig: add cpu_legacy solver — normix_numpy scipy.kve on CPU, warm-start (cd32363)
gig: add JAX-based GIG sampling — Devroye TDR and PINV (d12a083)
gig: add projection to special-case distributions via expectation parameters (c54043f)
gig: analytical Hessian Newton + JAXopt LBFGS solver variants (706c681)
gig: enhance initialization and conversion methods for special cases (b8a3a6b)
migration: implement JAX-based normix package (Phases 0-5) (fe78846)
mixture: enhance JointNormalMixture with parameter extraction methods (11c5753)
mixtures: implement caching for Cholesky factor of Sigma in JointNormalMixture (1375fa6)
mixtures: joint from_natural, incremental EM converged, optional x64 (06fe127)
normal: Phase 7 — MultivariateNormal as ExponentialFamily, jaxopt plan (34b0921)
notebook: replicate thesis tables on Hellinger vs parameter error (018a0f6)
notebooks: add Bessel function comparison notebook (b391543)
notebooks: add TFP/logbesselk overflow comparison to Bessel notebook (99c0f5d)
notebooks: migrate and standardise 9 distribution notebooks (00e853e)
notebooks: revise mixture distribution notebooks with unified visualization (d6a15f1)
params: add frozen dataclass parameter containers (62b4a48)
scripts: add EM convergence comparison script (d203f38)
scripts: support jax input in GH profiler (88d1f86)
solvers: introduce solve_bregman and solve_bregman_multistart for Bregman divergence minimization (4504249)
utils: lazy-load plotting helpers so matplotlib is optional (776bc70)
Bug Fixes#
em: default m_step_backend to cpu, set cpu e_step for GH fit (6e1429d)
gh: stabilize EM and warm-start; perf(em) CPU E-step for VG/NInvG (77d9841)
gig: analytical grad for log-partition to avoid jax.where NaN at a→0 (ee8cf8b)
handle scalar observations correctly in JointNormalMixture (ec72c0a)
ig,em: rewrite IG CDF in log-space and fix scan iteration count (02d2a8e)
joint: align GIG natural parameters for JGH and JNIG (a5b1550)
resolve docstring formatting issues (68b35be)
scripts: add repo root to profiling harness path (56281c8)
variance_gamma: handle PDF at x=μ (q=0) correctly (0712d00)
Performance#
Refactoring#
add theta0/maxiter/tol to fit_mle; remove long inline derivation comments (db780ac)
AGENTS.md: streamline content and enhance design philosophy section; remove ROADMAP.md and project-overview.mdc (cd16009)
base: add cache infrastructure to Distribution (4251900)
base: ExponentialFamily with cached_property and backward compat (de31437)
bessel: clean up code formatting and fix test (3cd737b)
bessel: lax.cond for single-branch dispatch; JIT-wrap GIG gradient (9346ad6)
centralize _EPS constant, rename L→L_Sigma and _conditional_expectations_impl (f54b93d)
constants: add GIG_THETA_PERTURB, GIG_CLAMP_*, GIG_P_MAX (d9d53e5)
delete legacy doc files before migration (099a743)
distributions: colocate factor mixtures and inline GIG RVS (a3e6022)
distributions: remove legacy CPU solver and update documentation (6e650ae)
distributions: rename GIG→GeneralizedInverseGaussian, centralize constants, add Bregman solvers (2745651)
em_shrinkage_demo: simplify slice controls and enhance documentation (f56efe7)
em: m_step_subordinator naming; JIT-safe GH on jax backend (6a4af9f)
em: use parameter change for convergence, NIG warm start for GH (e516372)
exponential_family: implement log-partition triad architecture (4052d4b)
foundational cleanups across codebase (f5e1245)
gamma,inverse_gamma,inverse_gaussian: add analytical triad methods (4052d4b)
gh: JAX-native default_init for GeneralizedHyperbolic (#26) (ac45107)
gig: migrate to triad architecture, clean up module-level functions (4052d4b)
gig: use from_expectation_params in special-case projections (f1b345e)
hygiene: Phase 5 — centralize x64 config, add return types, GIG tests, log_kv examples (992d063)
joint-mixtures: migrate Joint{VG,NInvG,NIG,GH} to internal attrs (f90aab1)
joint: lift shared natural_params and theta-parsing into JointNormalMixture (9ef80b1)
joint: Phase 4 — remove dead code, add joint EF tests, update docs (12c2270)
marginal-mixtures: migrate VG, NInvG, NIG, GH to direct attr access (80b7eba)
marginal: lift fit, _initialize, m_step, regularize into NormalMixture (e3ea5a9)
mixture-base: JointNormalMixture with cached Cholesky properties (f11bc28)
mixture-base: NormalMixture using cached_property from Distribution (c2f34b8)
mixtures: clean up JointGH expectation-to-natural to clearly use GIG method (eb3e6a5)
mixtures: joint natural params via from_natural (1ccbecf)
mixture: update Cholesky factor handling in JointNormalMixture and related distributions (6a18ba2)
move _bessel.py → utils/bessel.py, rename gig.py → generalized_inverse_gaussian.py (85af01e)
mvn: Cholesky-first storage, eliminate np.linalg.inv from logpdf (2e5f4aa)
params: enhance parameter access with _ParamsBase mixin (748c16f)
redesign parameter storage architecture (9103e66)
remove _natural_params tuple from univariate distributions and fix docstrings (8583446)
remove deprecated wrappers, dummy instances, and simplify internal structure (170d43b)
remove normix_numpy and clean up numpy-version references (b2b8f59)
rename package from pygh to normix (1f251e7)
replace ‘mixing distribution’ terminology with ‘subordinator distribution’ (c28612e)
replace numerical derivatives with log_kv_derivative_v in mixture distributions (5af6a9e)
rules: update best practices and coding style for JAX-based development (162a1ba)
solver: JAX (lower, upper) bounds and vectorized _setup_reparam (a240c3f)
solvers,exponential_family: remove deprecated wrappers, dummy instances, and simplify _cpu_solve (28f56bb)
solvers: replace grad_hess_fn with separate grad_fn + hess_fn (4052d4b)
streamline initialization in mixture distributions (0e7f7d8)
unify Greek-letter naming, add Cholesky logpdf, optimize expectation params (8b9bb5b)
univariate: migrate to internal attributes + dataclass params (1e245b0)
update EM M-steps to use _set_internal fast path (670ee9f)
update GIG and BatchEMFitter to use backend and method parameters (9ebb09e)
update InverseGaussian and related distributions to use delta and eta parameters (e3e8a31)
utils: split into plotting.py and validation.py (c20543d)
vg,nig,ninvg: replace GH delegation with analytical formulas (836a214)
Documentation#
add AGENTS.md and update project documentation (448a311)
add Appendix D — porting bessel.py to JAX without logbesselk (2938d31)
add architecture reference page and clean up leftover _natural_params (3f4b5ed)
add comprehensive efax architecture analysis (0e680f1)
add comprehensive JAX distribution ecosystem survey (0eeaefb)
add JAX design exploration (Equinox, FlowJAX analysis) (d16d7c7)
add JAX ecosystem research for EM algorithm design (1c04370)
add JAX EM algorithm design research (2f51777)
add new sections for CVaR derivatives, effective number of bets, factor analysis, generalized ENB, mean-risk optimization, online EM, shrinkage, and transaction costs (6ff608d)
add parameter storage redesign plan (17ac358)
add tech note on TFP log_bessel_kve crash investigation (9ebfe3b)
agent: add docs publish skill (2eb9ac9)
agents: mention bench_gh_paths in benchmarks context map (e4422d2)
api: format exponential-family docstrings for Sphinx math (726dc01)
arch: add shrinkage_targets to fitting module tree (5be0005)
arch: document divergences module and three-tier design (b4623e4)
architecture: clarify terminology for MultivariateNormal and JointGeneralizedHyperbolic (5bda42d)
arch: link distribution conversions tech note from navigation (a82b2e1)
arch: Phase 4 JIT Newton cache and investigation status (cf48b7d)
bessel: add comparison script and accuracy figures (12a3294)
create Sphinx documentation for JAX version (d74a15f)
design: add CPU-based Bessel design report for EM hot path (638554a)
design: add fitters redesign document and update EM fitter descriptions (94df008)
design: add log-partition triad redesign proposal (6fc96f5)
design: clarify simplicity criterion for special-case distributions (cf06239)
design: expand fitters_redesign for E/M decomposition and efax (ae11c6e)
design: layer EtaUpdateRule predictor over AffineRule (a52ce60)
design: mark EM covariance Phases 1-2.5 complete (5be1d12)
design: refine Design Philosophy with four prioritised principles (f89ef5f)
design: reorganise docs/design into topical files; archive implemented proposals (ed69b35)
design: revise CPU Bessel design — backend parameter, class methods only (13167ee)
design: split EM covariance and finance architecture docs (70bca87)
detailed design — Equinox, FlowJAX, GMMX EM, and batch/online fitting (14e92ba)
em: sync ARCHITECTURE and design docs with fitter/solver API (0ea57b4)
em: update all references to new e_step/m_step/fitter API (06bd40b)
em: η→model API, penalised EM, shrinkage demo (e1f582d)
fix README examples and init docstring (e8db92a)
improve Sphinx documentation (68b35be)
investigations: add test suite performance investigation (15d8f94)
investigations: close Phase 6 benchmark policy with GH path results (36889b7)
investigations: record Phase 3 EM consolidation status (8cf4c58)
investigation: summarize GH GPU slowdown analysis (69815e0)
JAX Bessel function & optimization ecosystem research (bdbde2e)
JAX distribution packages survey and design recommendation (9e7e6e3)
JAX migration feasibility report (07b577b)
joint from_natural, EMResult fields, review follow-up (425c826)
merge design docs → design.md; update ARCHITECTURE.md and README (ff38f01)
notebook: add distribution_conversions demo (7545af9)
notebook: add S&P 500 index empirical study (9c4b352)
notebook: re-execute all 9 notebooks with refactored codebase (da42453)
notebook: refresh GH and GIG distribution notebooks (d009cb1)
notebook: refresh GIG, NInvGam, and SP500 study notebooks (6134ef8)
notebook: use default_init for EM examples (386546d)
plans: add package improvement roadmap from review analysis (c3c1c74)
plans: mark Phase 2 fitter repair as done in roadmap (95872d5)
plans: mark Phase 3 complete in package improvement roadmap (dfeaa54)
readme: document PyPI install and plotting extra (ae18f84)
readme: enable JAX float64 support and update code examples (74caee3)
review: add comprehensive package review for normix (5dfc2a6)
rules: split maintain-* rules, add agent design doc and skills (f373195)
rules: update coding conventions, ARCHITECTURE, design.md, benchmark script (543b86e)
tech_notes: diagnose JAX vs NumPy overhead for GIG solver (e7a88c1)
tech_notes: rerun EM profiling with pure-JAX Bessel architecture (627a483)
tech,arch: add GIG RVS tech note, update architecture (01c6b12)
tech: add distribution conversions note (KL projection and bridges) (c558e32)
theory: add GIG random variate generation algorithm review (3d9008f)
theory: add R GeneralizedHyperbolic package analysis and PINV m… (75d0f83)
theory: add R GeneralizedHyperbolic package analysis and PINV method review (1eb103c)
update architecture docs, add tech_notes, tighten coding rules (6059f92)
update ARCHITECTURE, design, AGENTS, rules, migration plan for triad architecture (728c0cd)
update ARCHITECTURE.md to reflect new solver API names (935d3e5)
update docstrings with proper LaTeX formatting (49c31e3)
update em_gpu_profiling.md for CPU backend; minor notebook update (781a4ae)
update ROADMAP.md and project-overview.mdc for parameter storage redesign (848b056)