Skip to content

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 18 May 00:32
3a89033

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)