All notable changes to bossanova are documented here.
0.1.0.dev25 (2026-03-09)¶
Bug Fix use
:separator in rho keys for correct effect name parsingBug Fix correct plot_ranef() guard and attribute for varying effects
Bug Fix update grouseticks_three_term_correlated parity to validate structure only
Bug Fix add explicit per-factor RE dims for multi-factor mixed models
Bug Fix prediction bootstrap now replays full prediction path
Bug Fix remove unsupported BCa bootstrap for mixed models
Bug Fix use exact finite-sample permutation p-value formula
Bug Fix update container diagram script for split state modules
Bug Fix include percentile CIs in permutation params DataFrame
Docs regenerate changelog
Docs rewrite quickstart explore/predict sections with Titanic dataset
Docs consolidate CLAUDE.md, style guide, and design constraints (80% reduction)
Docs reorganize project root — move MyST ref to docs, remove style guide pointer
Docs add llms.txt generation for AI-friendly documentation
Docs add cross-type comparison grid table to compare() docstring
Docs normalize container lifecycle docstrings
Docs add ast-grep to code search tools, update Linear CLI gotchas
Feature add donate_argnums support to ops.jit() for memory efficiency
Feature add formula syntax to model.predict() for grid-based predictions
Feature support cross-type model comparison (lm↔lmer, glm↔glmer)
Feature enable CV comparison for mixed models (lmer/glmer)
Feature add holdout_group for group-aware CV splitting
Feature vmap-accelerated GLM bootstrap inference
Feature match R/lmerTest summary display for mixed models
Improvement deduplicate model/ tests
Improvement replace inline inference column assertions with helper
Improvement relocate misplaced tests to correct layer directories
Improvement split oversized test file and deduplicate fixtures
Improvement 3.3x faster API doc generation via caching loader (67s → 20s)
Improvement add donate_argnums to GLM solver JIT cache
Improvement remove unused viz modules (cognition, dag, lattice, layout)
Improvement tighten targeted container validator contracts
Improvement split state containers by lifecycle
Improvement thin model/core.py back to a proper facade
Release v0.1.0.dev25
0.1.0.dev24 (2026-03-04)¶
Bug Fix include interaction columns in simulation DGP
Docs regenerate changelog
Feature add formula syntax to plot_predict and remove plot_fit
Release v0.1.0.dev24
0.1.0.dev23 (2026-03-04)¶
Bug Fix include pinned-condition columns in crossed EMM output grid
Docs regenerate changelog
Release v0.1.0.dev23
0.1.0.dev22 (2026-03-04)¶
Bug Fix make jointtest coding-invariant with Type III L matrix averaging
Docs regenerate changelog
Improvement deduplicate 4 coefficient operator closures into 2 factories
Improvement vmap-accelerated LM bootstrap and matmul permutation inference
Improvement vectorize per-df inference loops in marginal inference
Improvement vectorize EMM g-computation loops with batched einsum
Release v0.1.0.dev22
0.1.0.dev21 (2026-03-04)¶
Bug Fix use exact g-computation for response-scale GLM slopes and bootstrap
Bug Fix response-scale GLM dispatch for permutation and crossed EMMs
Bug Fix continuous at-values now cross with RHS conditions in explore()
Bug Fix explore formula edge cases — 5 bugs, 6 error message gaps
Bug Fix BCa z₀ float32 precision loss and flaky hypothesis test
Bug Fix apply delta-method response-scale transform in at-values EMM paths
Bug Fix reject string responses with family-specific errors for non-binomial GLMs
Bug Fix preserve model state and thread palette through plot_explore()
Bug Fix auto-detect condition columns in plot_explore() dispatch functions
Bug Fix remove verified dead code and configure deadcode tool
Bug Fix close Col constant gaps and remove orphan schema constants
Bug Fix store boot design matrices in uncrossed AME slopes for exact bootstrap
Bug Fix replace bare string column names with Col constants across 22 files
Bug Fix remove silently ignored
whatparam and wiresolverthrough .fit()Bug Fix resolve layer violations and module boundary issues
Bug Fix widen MathDisplay.to_markdown path type to accept Path
Bug Fix reject dict-form corr in varying() instead of silently ignoring
Docs regenerate changelog
Docs consolidate cheatsheet model comparison around compare()
Docs update cheatsheet
Docs enhance tests-as-linear-models with GLM formulas and null distributions
Docs add synced R equivalent tabs to cheatsheet
Docs fix explore() docstring grammar and cheatsheet formula syntax
Docs add executable distribution showcase and normalize docstrings
Docs fix docstring inaccuracies across model, compare, and distributions
Docs audit and clean up project knowledge docs
Feature auto-compute profile CIs for variance components on mixed boot/perm
Feature add pytest-cov coverage reporting with docs embedding
Feature add semantic internal API docs (functions + containers reference)
Improvement vectorize t-distribution calls in Satterthwaite inference
Improvement vectorize QR vcov unpermutation with np.ix_
Improvement split marginal/compute.py into resolve.py + co-locate contrast dispatchers
Improvement unify distributions — facade over internal analytical system
Improvement cache last PIRLS result to avoid redundant post-Stage 1 re-evaluation
Improvement pre-compute ZL_dense and replace sp.diags with broadcasting in PIRLS
Improvement cache symbolic Cholesky in Satterthwaite Richardson extrapolation
Improvement factor out sigma from Satterthwaite Richardson extrapolation
Improvement extract 3 implementation blocks from model class to internal/
Improvement make FormulaStructure required in build_model_spec_from_formula
Improvement clean up naming, dead code, and missing annotations
Improvement reduce cognitive complexity in detect_categoricals and compute_cv_metrics
Improvement remove dead code and fix container re-exports
Improvement clarify sandwich no-op branches and use abstractmethod on StatefulTransform
Improvement decompose _dispatch_marginal_core into focused helpers (complexity 68 → <15)
Release v0.1.0.dev21
0.1.0.dev20 (2026-03-03)¶
Bug Fix update benchmarking suite for current API
Bug Fix drop missing-data rows before finite-difference slope computation
Docs regenerate changelog for v0.1.0.dev19 release
Docs add indented sub-bullets, pre-release sections, and postprocessors to changelog
Docs consolidate public api docs and rename
Docs update quickstart contrast coding to inline formula syntax
Docs sync project docs with current codebase structure
Docs add symbex recipes to Code Exploration section
Docs regenerate GLM, LMER, GLMER benchmark reports
Docs add cheatsheet
Feature add post-publish steps to release script (commit, tag, changelog, docs)
Feature standardize git history and expand changelog with commit body details
Feature add standalone R inference benchmarking and use lmerTest for LMER
Improvement consolidate benchmarking docs into single unified page
Improvement default GLMER to analytical Schur vcov, eliminating post-fit Hessian cost
Release v0.1.0.dev20
0.1.0.dev19 (2026-03-02)¶
Bug Fix rename plot_explore units param to effect_scale for consistency
Bug Fix relax scipy assertion tolerances and merge paired/repeated-measures docs
Bug Fix prevent ShapeError when calling .infer(how=“cv”) after predict/plot_predict
Docs clean up API docs rendering — details blocks, hyperlinks, TOC, and docstrings
Docs restore function hyperlinks in distributions summary table
Docs clean up container-overview page — lowercase title, fix mermaid, replace classDiagrams with tables
Docs make explore/infer kwargs explicit and fix docstring rendering
Docs model attribute descriptions and stray }} in API docs
Docs escape pipes in code spans within API doc table rows
Docs link explore() docstring to quickstart cheatsheet
Docs cap API doc headings at h5 to satisfy MyST depth limit
Docs rename docs and re-add linear models docs
Docs add formula and explore reference tables to model docstrings
Docs replace set_contrasts with inline formula syntax in model docstring
Docs regenerate changelog after fix→docs commit message corrections
Feature add hyperlinks to internal API overview tables
Feature add to_markdown/to_csv export methods for Quarto embedding
Feature make summary() context-adaptive for explore analyses and inference modes
Feature add auto-generated changelog with seaborn-style pill badges
Feature add release: commit type, backfill legacy releases in changelog
Release v0.1.0.dev19
0.1.0.dev18 (2026-03-02)¶
Bug Fix null-safe jaq filter in Linear CLI example
Bug Fix remove case bootstrap stubs for mixed models
Bug Fix remove lambda template NotImplementedError stub
Bug Fix remove stale operations.profile from docs build
Bug Fix handle h7+ headings in API docs post-processing
Bug Fix propagate CVState from params CV inference to diagnostics
Docs refactor docs and tutorials
Docs add formula syntax, transforms, and contrast coding reference tables
Docs complete quickstart — fix numbering, fill placeholders, resolve TODOs
Docs update code-review.md — resolve EJO-209, EJO-212, EJO-213
Docs move style guide to docs site, add to engineering section
Docs relax file size limits to cohesion-based policy
Docs overhaul internal API docs with call-chains and domain module structure
Docs promote Internal API to top-level nav, add auto-generated overview and post-processing
Docs fix duplicate titles, hide author block on API pages, add viz to overview
Docs auto-discover modules in API docs build scripts
Docs flatten API sidebar — top-level public pages, no domain grouping
Docs fix 4,000+ MyST build warnings in API docs post-processing
Docs consolidate build system, rename help/ to api/, auto-discover TOC
Feature add type-based dispatch to plot_explore for means, slopes, and contrasts
Feature normalize plot function signatures (height/aspect, prettify, col_wrap)
Feature improve model API docs — narrow exports, expand plot docstrings, post-process headings
Feature grayscale design matrix styling
Feature wire in schemas, add validators, implement AIC/BIC compare
Feature consolidate CI bands, implement RE operators, improve Welch DF errors
Feature formula-syntax contrast coding — replace factor()/T()/S() with treatment(), sum(), helmert(), sequential(), poly()
Feature add release orchestrator and align test/parity commands
Feature add rerun option for stale/missing/failed suites in release Step 1
Improvement extract infer dispatch, power analysis from model class
Improvement formalize verb-domain naming convention, rename 20 internal functions
Improvement consolidate resample module, remove 2,301 dead lines
Improvement replace **kwargs with explicit params in fit, infer, marginal dispatch
Improvement remove dead code, kill last **kwargs in internal/
Improvement dissolve operations/, promote domain modules to internal/
Improvement delete operations/ facade, update all consumers to direct imports
Improvement absorb loose files into domain modules, dissolve common/
Improvement absorb last loose files into domain modules
Release v0.1.0.dev18
0.1.0.dev17 (2026-02-25)¶
Bug Fix use full-precision values in MAR hypothesis tests to avoid sigfig rounding artifacts
Feature add ModelResult proxy for consistent notebook rendering
Feature improve plot labels, add bootstrap p-values, rename plot_mee to plot_explore
Improvement rename weights→how, units→effect_scale, fix AME slope SE
0.1.0.dev16 (2026-02-25)¶
Docs rewrite marginal effects tutorial with full syntax reference
Feature add g-computation (weights=“observed”) averaging for GLM explore()
Feature add marginaleffects R parity tests for g-computation validation
Release v0.1.0.dev16
0.1.0.dev15 (2026-02-25)¶
Docs work-in-progress tutorial
Feature round DataFrame output to 4 significant figures by default
Feature auto-display results in REPL/notebook via context-aware repr
Feature add contrast registry, treatment/sum/helmert functions, remove revpairwise
Feature add bracket contrast expression parser for explore()
Feature wire bracket contrast computation into explore() pipeline
Feature add RHS bracket contrasts for interaction and slope contrasts
Feature add compound variable bracket contrasts for interaction cells
Improvement replace regex explore parser with scanner+parser architecture
Release v0.1.0.dev15
0.1.0.dev14 (2026-02-24)¶
Bug Fix pass precision=None in compare tests that check exact numerical identities
Docs add R/emmeans syntax comparisons to marginal effects tutorial
Docs rewrite marginal effects tutorial with single-dataset narrative
Feature fix binomial string response, bracket contrast syntax, consolidate formula parser
Feature clean up explore() formula output and syntax ergonomics
Feature add simulate(power=...) power analysis API
Feature unify @ syntax in explore formulas, remove bare bracket syntax
Feature accept file paths in model(data=) and add power analysis tutorial
Feature summary() displays without print(), bump 0.1.0.dev14
0.1.0.dev13 (2026-02-23)¶
Docs bump version to v0.1.0.dev12 in myst.yml
Feature add precision kwarg to compare() for controlling float display
Release publish 0.1.0.dev13 to PyPI
0.1.0.dev12 (2026-02-23)¶
Bug Fix resample_bundle valid_mask crash with NA rows
Bug Fix remove unused pytest imports in edge case test files
Bug Fix align diagnostic array lengths in extract_residuals for NA data
Bug Fix method-aware .params/.effects schemas with correct column sets and df values
Bug Fix consolidate jax_enable_x64 to single authoritative location in init.py
Bug Fix .resamples returns raw resampled values instead of aggregated summary
Bug Fix CV ablation produces non-zero PRE for categorical and interaction terms
Bug Fix bracket syntax on categorical variables in explore(); add marginal effects stress test tutorial
Docs new penguins-based quickstart, move learn/ guides to wip/
Docs update CLAUDE.md with fast/slow test tier documentation
Docs miscellaneous documentation updates
Docs new wip tutorial for inference approaches
Docs remove legacy docs, relocate benchmarks to engineering section
Feature Welch ANOVA, BCa bootstrap, inference fixes
feat: support Welch ANOVA in jointtest() and per-contrast Satterthwaite df
feat: route mixed model bootstrap to parametric path with BCa acceleration
fix: use L_matrix for permutation SE and null distribution on multi-row slopes
fix: group-aware CV splitting for mixed models with small group counts
test: cross-grid smoke test for all model types x methods x args
Feature cluster-robust SEs for mixed models, HC→CR transparent dispatch
Improvement absorb redteam tests into consolidated model edge-case files
Improvement clean-up public model class and separate out guards
Release publish 0.1.0.dev12 to PyPI
0.1.0.dev11 (2026-02-11)¶
Release container validators, Linear migration
fix: add validators to 36 bare container fields
fix: replace Monte Carlo MVT with scipy CDF + root-finding
refactor: make errors and what explicit params on model.infer()
chore: migrate issue tracking to Linear
0.1.0.dev10 (2026-02-11)¶
Release ECS refactor — unified model API
feat: unified model class replacing per-type classes (lm/glm/lmer/glmer)
feat: frozen attrs containers (ModelSpec, DataBundle, FitState, InferenceState)
feat: operations as pure functions on containers
feat: explore() for marginal effects with crossed slopes
feat: Tukey HSD/MVT multiplicity adjustment
refactor: extract Schur complement vcov to shared maths module
refactor: consolidate estimated-dispersion family set
docs: ECS architecture proposal and container-first workflow
test: comprehensive container and operation tests
0.1.0.dev5 (2026-01-31)¶
Release MyST docs, weighted fitting
feat: adaptive Gauss-Hermite quadrature (nAGQ > 1) for GLMER
feat: BCa confidence intervals for mixed models (cluster jackknife)
feat: profile likelihood CIs and result_varying property
feat: prettify parameter and standardized plot styling
refactor: standardize CI band rendering across viz
refactor: deduplicate theta bounds and inverse link dispatch
docs: comprehensive marginal effects guide
test: consolidate recovery tests into single parametrized file
0.1.0.dev4 (2026-01-31)¶
Release NumPy backend, Pyodide, API stabilization
feat: NumPy backend for Pyodide/browser compatibility
feat: interactive Pyodide demo page (try in browser)
feat: rename .anova() to .jointtest()
feat: weights support with column name API
feat: centralize DataFrame column names via Col namespace
refactor: move weights from init to .fit()
refactor: extract implementation blocks from model class
docs: replace legacy tutorials with marimo-converted content
test: Pyodide smoke tests for lm/lmer public APIs
0.1.0.dev0 (2026-01-27)¶
Release first PyPI publish — formula rewrite, API cleanup
feat: vendored formula parser with Wilkinson notation
feat: expressions module for Polars statistical transforms
feat: distribution algebra with expressive composition
feat: compare() function for multi-model comparison
feat: unified lmplot-style visualization
feat: hypothesis property-based tests
refactor: split model.py and design.py into focused mixins
docs: MyST documentation site with API generation
chore: first PyPI publish as bossanova 0.1.0.dev0
0.0.2 (2025-12-19)¶
Feature R distributions, JAX optimizations, initial resampling
feat: Richardson extrapolation for exact lmerTest parity
feat: numerical gradients for Satterthwaite df
feat: prediction uncertainties for LMER
feat: initial resampling module (permutation, bootstrap)
perf: JAX gradient checkpointing for memory efficiency
refactor: consolidate model diagnostics
Feature JIT, grammar, bootstrap, polars migration
perf: JAX JIT optimizations for LMER module
perf: build Z matrix directly in sparse COO format
perf: keep ZΛ sparse in PLS solver
feat: bootstrap enhancements — BCa CIs, semi-parametric, parallelization
feat: resampling methods for all model types (permutation, bootstrap, CV)
feat: grammar module for declarative resampling inference
refactor: migrate data handling to Polars
Feature simulation, parity testing, consolidation
feat: LMER/GLMER bootstrap implementation with parity tests
feat: GLM bootstrap and permutation methods
feat: complete anova/confint coverage for all models
feat: 3+ term random effects support
feat: Satterthwaite df for emmeans contrasts
feat: boundary tolerance check for singular fits
feat: predict(newdata) support
docs: user-facing inference guide
Feature bossanova package extraction, GLM/GLMER maturation
feat: extract bossanova as standalone package from nltools
feat: rename emmeans API to mee (marginal estimated effects)
feat: theta/variance components bootstrap (which=‘theta’, which=‘all’)
feat: unified infer() method for post-hoc inference switching
feat: inference=None mode for faster fitting
feat: InstEval benchmark suite
feat: nAGQ parameter for faster GLMER fitting
refactor: separate fit() and infer() for cleaner workflow
refactor: standardize naming conventions for 0.1.0 release
0.0.1 (2025-11-25)¶
Bug Fix achieve lme4 parity — 8-phase refactor
fix: optimizer settings and REML deviance computation
fix: nested/crossed random effects initialization
fix: categorical variable encoding to match R’s lme4
fix: BOBYQA optimizer defaults to match lme4/minqa rhobeg
fix: Satterthwaite df for diagonal (||) structures
refactor: systematic parity analysis with R reference maps
test: comprehensive parity testing infrastructure
Feature nltools port and early stats foundation
feat: port statistics, resampling, ISC, and adjacency modules from nltools
feat: add regress, FDR, Holm-Bonferroni correction functions
test: add initial test suite for core stats functions
chore: set up package structure with pyproject.toml build
Feature clean-slate JAX foundation
feat: pure JAX implementation with JIT compilation
feat: auto-batching memory management for large datasets
feat: dual-formulation SVD ridge regression beating himalaya
perf: AOT compilation integration for ridge CV
refactor: delete legacy nltools code, start from scratch
Feature LMER v1 — sparse Cholesky solver, formula parsing
feat: initial LMER solver with sparse Cholesky factorization
feat: formula parsing for random effects specifications
feat: symbolic factorization caching for repeated solves
feat: model diagnostics and profile likelihood CIs
feat: support complex random effects structures (crossed, nested)
refactor: replace jaxopt with optax for optimization
Feature complete model suite — pre-parity baseline
feat: implement LM model with emmeans support
feat: implement GLM model with logistic/Poisson families
feat: initial GLMER with two-stage optimization
feat: Satterthwaite degrees of freedom for LMER
feat: ANOVA model comparison for mixed models
feat: marginal effects estimation and contrasts
feat: uncorrelated random slopes (|| syntax)
feat: GLMER Hessian-based vcov for lme4 parity
feat: R-style distribution functions (60 functions, 15 families)
feat: design-based simulation for power analysis