Changelog#

0.3.0 (2026-08-06)#

⚠ BREAKING CHANGES#

  • Phase 6 API consistency (D1–D4) (#89)

Features#

  • add entropy, varentropy, and Renyi entropy to exponential families (#63) (559feae)

  • finance: local-quadratic transaction-cost QP (#78) (986a7aa)

  • finance: mean-risk optimization — efficient surface & frontier (Phase E) (#61) (63e0a9b)

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)

  • review roadmap Phase 3 correctness (B2–B8) (#85) (5b7237e)

Performance#

  • Phase 5 efficiency (E1–E7) from 2026-07-12 review (#88) (a8f9a8c)

Refactoring#

  • Phase 6 API consistency (D1–D4) (#89) (716214f)

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)

  • land Phase 8a + linkcheck fix on master (#73) (f68985f)

  • 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)

  • reviews: add 2026-07-12 full package review (#79) (4c13a63)

  • 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#

  • em: EM fitter hardening + VG alpha_min bound (Phases 4–5) (#58) (8e98499)

  • em: Phase 4 fitter hardening — diverged guard, track_ll, stateless det target (#57) (dd32481)

Bug Fixes#

  • em: distribution-specific floor for VG/NInvG prior moments (B2) (#51) (5fa19f7)

  • em: floor posterior b_post to prevent VG EM overflow (#45) (5a0ecfb)

  • em: floor posterior b_post to prevent VG EM overflow (#47) (b9b2167)

  • em: preserve sign of M-step denominator near Gaussian limit (#50) (0d5ea29)

Refactoring#

  • em: complete Phase 3 — posterior-GIG consolidation + hardening tests (R1-R3, T1/T1b/T3) (#56) (ff1f462)

  • em: consolidate posterior GIG map and b_post floor (R1, R2) (#55) (e014151)

Documentation#

  • em: complete D2 cross-link fix and mark M1/M2/B1/B2/D1 done (#52) (ef2e2a8)

  • plans: add EM robustness follow-ups plan from b_post-floor review (#48) (fbb0ad0)

  • tech: correct b_post floor asymptotics in VG EM tech note (#49) (fab19be)

0.2.6 (2026-06-05)#

Bug Fixes#

  • docs: flatten myst-nb cell_input inner highlight box (#43) (8f522f1)

0.2.5 (2026-06-03)#

Bug Fixes#

  • docs: remove nested box around code cells (#42) (6426e30)

Documentation#

  • address Phase 3 review (DJ30, VG NaN repro, cross-family divergences) (#41) (a1c3779)

  • author Phase 3 tutorial tree and site navigation (#39) (d637e7a)

0.2.4 (2026-05-28)#

Documentation#

  • split internal knowledge into dev-notes/ (Phase 2) (#36) (7cbacbb)

0.2.3 (2026-05-27)#

Features#

  • finance: Phase D CVaR layer with Univariate* projection (#33) (c1ed422)

Documentation#

  • bootstrap MyST-nb infrastructure and Kami theme (Phase 1) (#35) (1c3563d)

0.2.2 (2026-05-24)#

Features#

  • distributions: add cdf/ppf with pure-JAX PINV (#31) (d73c5fc)

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#

  • em: CPU digamma Newton for Gamma/InvGamma from_expectation (56f079a)

  • em: scan-based IncrementalEMFitter and Phase 5 benchmarks (a9bf108)

  • solver: stable jitted Newton for GIG warm-start and Gamma digamma (1a9c5d5)

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)