Changelog¶
All notable changes to multimodalsrm will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
Changed¶
- Grouped GP marginal prediction reuses each parameter draw's factorization across output features and evaluates response covariance at unique query times. Query batches and one-draw conditioning state bound temporary memory. White and OU noise, feature masks, and draw-specific latent rotations retain the same conditional moments; run-baseline predictions retain their existing calculation. Caches live only within the current prediction result.
0.2.0 — 2026-09-22¶
Added¶
- Grouped state-space filtering and smoothing extended to learned responses.
Node grouping at exact
(modality, native timestamp)pairs now also covers learned responses under strictly positive noise priors, including changing event order and coincident times. Noiseless support retains scalar updates. - Grouped fixed-response state-space filtering and smoothing. Observations that
share an exact
(modality, native timestamp)are collapsed into single nodes for filtering and RTS smoothing, rather than repeating a Kalman update and storing a transition per observed scalar. In a synthetic fixed-Bateman case 8,002 scalar events become 257 nodes and complete fit time falls from 19.6 s to 8.0 s, with both fits converging to the same objective. Grouping engages automatically insidelinear_algebra="state_space"when responses are fixed and noise support is strictly positive; learned responses and priors admitting zero variance keep scalar updates. Timestamps are compared exactly, with no binning or added jitter, and archive schemas and historical fit evidence are preserved. BatemanSCRas the shared skin-conductance response for R and GP workflows. Exposes positive rise/decay time constants and lag, with vectorized R cell integration, complex-step derivatives, and a compact two-state realization for differentiable state-space MAP. Retains the toolbox's 90-second finite support and continuous L2 normalization, and handles equal and nearly equal time constants without singular partial fractions. Dense and grouped GP require explicit response quadrature; state-space MAP checks a uniform bound for the truncated tail. It replacesBachSCR(see Removed); archives are never silently converted, so switching an existing analysis requires an explicit response change and a refit.- A
bayesian-cudaextra, and one-time advice when a visible NVIDIA card goes unused. The extra installs the pinned JAX CUDA plugin on Linux x86_64 and resolves to the CPU runtime elsewhere. A fit process warns once when an NVIDIA driver is visible but JAX initialized its CPU backend, unless the platform was pinned through the environment. -
A one-time warning when the CPU factorization callback runs oversubscribed. The symmetric factorization runs LAPACK POTRF/POTRI inside a JAX host callback while XLA's own thread pool already occupies the cores. On a 64-core Linux workstation the BLAS default of one thread per core slowed a 2,727-dimension factorization by up to 10x relative to 16 threads. The callback now emits a
RuntimeWarningonce per process when the visible BLAS pool exceeds half the physical cores. No thread limits are changed and no numerical behavior changes. -
Optional R-MSRM warm start for the first GP MAP restart.
SearchConfig(r_init=True)seeds the first full-training restart from a bounded CPU R-MSRM fit, which supplies loadings, offsets, residual noise variances and Gaussian response estimates. It is off by default: GP priors, native timestamps, remaining prior-quantile restarts and convergence checks are unchanged, and a numerical failure retains the historical start with a warning and a recorded reason. The measured benefit is scale-dependent — small synthetic cases show fewer iterations but no reduction in total time, and an evaluation on a real recording did not reproduce the larger synthetic gain — so enabling it is a per-analysis decision. Archives missing the setting restore it as false without rewriting saved fit evidence.
Changed¶
- Posterior mixing diagnostics are computed in batched NumPy over every quantity
at once. Rank-normalized split R-hat, bulk and 5%/95% tail ESS, Monte Carlo
errors and BFMI reproduce ArviZ's definitions to rounding. The diagnostics phase
of a 57,758-quantity posterior drops from 106 s to under 1 s at 15 draws, and
from about 160 s to under 40 s at 1,200 draws. The summary is a small
array-backed table rather than a pandas DataFrame, so ArviZ, xarray and pandas
all leave the
bayesianextra, and ArviZ joins thetestextra as the reference implementation.
Removed¶
- Breaking:
BachSCRis removed. UseBatemanSCRfor skin-conductance workflows.BachSCRis no longer importable or accepted by R or GP fitting, and its separate rational approximation, quadrature formula, parameter constraints and serialization registration are gone. GP archives containing Bach records now fail before model reconstruction with migration guidance: reproduce them in their original environment, or configureBatemanSCRand refit from the original observations. No fitted parameters or archives are converted automatically. Remaining response identifiers and archive schemas are unchanged.
0.1.0 — 2026-09-22¶
First package release of the extracted models.
Added¶
- Extract R-MSRM and GP-MSRM production modules from the frozen source handoff, retaining model objectives, response conventions, priors and numerical behavior.
- Expose
multimodalsrm.MultimodalSRMandmultimodalsrm.bayesian.BayesianMultimodalSRMwith optional Bayesian dependencies. - Transfer focused synthetic core/Bayesian tests and add small R fitting and GP MAP/archive-replay examples.
- Document supported posterior workflows, numerical backends, legacy archive compatibility and the source-bound warmup checkpoint contract.
- Retain Linux/macOS installed-wheel and installed-sdist CI, integration/version gates and release-driven Trusted Publishing infrastructure.
- Add a searchable Zensical documentation site with GitHub Pages deployment.
- Separate fast PR checks from the full Linux/macOS release suite.
Test evidence belongs to the integration record and corresponding CI run; this changelog makes no calibration or recovery claim. Learned FIR responses remain deferred.