Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
587 commits
Select commit Hold shift + click to select a range
2f2cbd8
Merge branch 'migration-pymc6' into pymc6-migration-doc-updates
digicosmos86 Jul 6, 2026
95e63f1
Merge remote-tracking branch 'origin/pymc6-migration-doc-updates' int…
krishnbera Jul 6, 2026
33fff9d
Add choice-only RL softmax config slice
krishnbera Jul 7, 2026
98ed6ae
Verify real ssms choice-only RLSSM smoke
krishnbera Jul 7, 2026
ea1f8b5
Validate choice-only RLSSM active lapse
krishnbera Jul 7, 2026
b507e62
Fix mypy duplicate computed wrapper name
krishnbera Jul 7, 2026
4570aa9
Format RLSSM config test
krishnbera Jul 7, 2026
2e54308
Address choice-only RL review comments
krishnbera Jul 7, 2026
94a88c4
Merge pull request #1015 from lnccbrown/pymc6-migration-doc-updates
digicosmos86 Jul 7, 2026
3fb3bf5
chore: replace pre-commit with prek
digicosmos86 Jul 6, 2026
d98ec78
chore: update ruff in .pre-commit-config.yaml
digicosmos86 Jul 6, 2026
a88cf4a
chore: update pyproject.toml so that ruff also checks notebooks
digicosmos86 Jul 6, 2026
dd54a64
chore: used ruff format on notebooks
digicosmos86 Jul 6, 2026
65e5ff2
fix: repair malformed notebook cell and fix ruff format issues
digicosmos86 Jul 6, 2026
31bd788
fix: add trailing newline to notebook per end-of-file-fixer
digicosmos86 Jul 6, 2026
c060acf
fix: resolve ruff lint errors in bayesflow_lre_integration.ipynb
digicosmos86 Jul 6, 2026
70689a9
fix: resolve ruff lint errors in bayesflow_nle_onnx_integration.ipynb
digicosmos86 Jul 6, 2026
4fd87a4
fix: resolve ruff lint errors in choice_only_models.ipynb
digicosmos86 Jul 6, 2026
b8a4ffa
fix: resolve ruff lint errors in ddm_hierarchical_tutorial.ipynb
digicosmos86 Jul 6, 2026
81c5159
fix: resolve ruff lint errors in hmm_ddm_regime_switching.ipynb
digicosmos86 Jul 6, 2026
69d7729
fix: resolve ruff lint errors in hssm_tutorial_workshop_1.ipynb
digicosmos86 Jul 6, 2026
1848c59
fix: resolve ruff lint errors in hssm_tutorial_workshop_2.ipynb
digicosmos86 Jul 6, 2026
a23ebba
fix: resolve ruff lint errors in plotting.ipynb
digicosmos86 Jul 6, 2026
01af2ab
fix: resolve ruff lint errors in pymc_to_hssm.ipynb
digicosmos86 Jul 6, 2026
37a0c7f
fix: resolve ruff lint errors in scientific_workflow_hssm.ipynb
digicosmos86 Jul 6, 2026
b31a42a
fix: resolve ruff lint errors in tutorial_bayesian_t_test.ipynb
digicosmos86 Jul 6, 2026
1c00b28
fix: resolve ruff lint error in tutorial_p_outlier_regression.ipynb
digicosmos86 Jul 6, 2026
4ba0ec1
fix: correct no-op annotation to assignment in variational_inference.…
digicosmos86 Jul 6, 2026
bd80058
fix: typo
digicosmos86 Jul 6, 2026
5b1a6a7
chore: update mypy version in pre-commit config
digicosmos86 Jul 6, 2026
6c018c6
fix: resolve ruff lint and format errors in rlssm_advanced.ipynb
digicosmos86 Jul 7, 2026
a90187a
fix: resolve ruff lint and format errors in rlssm_basic.ipynb
digicosmos86 Jul 7, 2026
a584d92
fix: resolve ruff lint and format errors in rlssm_hssm_custom_models.…
digicosmos86 Jul 7, 2026
c1e911b
fix: resolve ruff lint and format errors in rlssm_restless_learner.ipynb
digicosmos86 Jul 7, 2026
5978213
fix: resolve ruff lint and format errors in sbi_nre_integration.ipynb
digicosmos86 Jul 7, 2026
45756b9
chore: updated pyproject.toml to add pyrefly
digicosmos86 Jul 7, 2026
321641d
fix: added back onnxruntime to dev dependencies
digicosmos86 Jul 7, 2026
48fdb8a
Merge remote-tracking branch 'origin/pymc6-migration-doc-updates' int…
krishnbera Jul 7, 2026
421299e
Add choice-only RLSSM tutorial scaffold
krishnbera Jul 7, 2026
aecf5ff
Execute choice-only RLSSM tutorial
krishnbera Jul 7, 2026
0c1f4ef
Merge remote-tracking branch 'origin/migration-pymc6' into choice-onl…
krishnbera Jul 7, 2026
e67e119
docs: add hssm.rl API reference to navigation
cpaniaguam Jul 7, 2026
8a4c01e
docs: add hssm.rl module documentation with RLSSM and utilities
cpaniaguam Jul 7, 2026
e4aa1d0
Merge pull request #1034 from lnccbrown/1033-pymc6-migration-optimize…
digicosmos86 Jul 7, 2026
7ad0bca
Merge pull request #1037 from lnccbrown/cpaniaguam/add-rl-api-reference
cpaniaguam Jul 8, 2026
1901c9c
build: add pyrefly type-checker configuration
digicosmos86 Jul 8, 2026
ef22681
ci: switch pre-commit type-check hook from mypy to pyrefly
digicosmos86 Jul 8, 2026
250ddd2
docs: document pyrefly type-checking and prek in CLAUDE.md
digicosmos86 Jul 8, 2026
2475efd
fix(types): resolve pyrefly errors in base.py
digicosmos86 Jul 8, 2026
7675683
fix(types): suppress pytensor make_node override in blackbox.py
digicosmos86 Jul 8, 2026
335a032
fix(types): suppress pytensor make_node overrides in jax.py
digicosmos86 Jul 8, 2026
098d73a
fix(types): correct mistyped classmethod args in dist.py
digicosmos86 Jul 8, 2026
a82cbbd
fix(types): resolve pyrefly errors in hssm.py
digicosmos86 Jul 8, 2026
d07b7b7
fix(types): suppress check_parameters tensor args in analytical.py
digicosmos86 Jul 8, 2026
04c32a1
fix(types): widen parse_bambi return type in param.py
digicosmos86 Jul 8, 2026
258cef9
fix(types): allow None in UserParam.from_kwargs param arg
digicosmos86 Jul 8, 2026
3287420
fix(types): correct trajectory color dict key types in model_cartoon.py
digicosmos86 Jul 8, 2026
c2f1a5a
fix(types): resolve pyrefly errors in predictive.py
digicosmos86 Jul 8, 2026
b7f9c2c
fix(types): resolve pyrefly errors in quantile_probability.py
digicosmos86 Jul 8, 2026
ad74c2c
fix(types): resolve pyrefly errors in plotting/utils.py
digicosmos86 Jul 8, 2026
0f1ec6c
fix(types): narrow dynamic computed attr access in rl/config.py
digicosmos86 Jul 8, 2026
8e427ae
fix(types): narrow theta annotation in simulator.py
digicosmos86 Jul 8, 2026
b01d261
fix(types): correct get_response_dist return type in utils.py
digicosmos86 Jul 8, 2026
5dc465c
ci: run both pyrefly and mypy in type-checking workflow
digicosmos86 Jul 8, 2026
bf6f628
fix: address review comment on predictive.py:260
digicosmos86 Jul 8, 2026
74b15bc
fix: address review comment on utils.py:192
digicosmos86 Jul 8, 2026
d7c741b
fix: address review comment on base.py:1777
digicosmos86 Jul 8, 2026
862710c
fix: address review comment on utils.py:374
digicosmos86 Jul 8, 2026
034ae50
fix: address review comment on dist.py:478
digicosmos86 Jul 8, 2026
a970e8f
fix(types): convert Integral q to int for mypy
digicosmos86 Jul 8, 2026
8bb7c3e
ci: add mypy back to pre-commit hooks
digicosmos86 Jul 8, 2026
5366bf0
Add analytical LBA4 model support
krishnbera Jul 8, 2026
388da5f
Update src/hssm/modelconfig/lba4_config.py
krishnbera Jul 8, 2026
c5139b1
Merge pull request #1042 from lnccbrown/feature/lba4-hssm
krishnbera Jul 8, 2026
bd900e0
docs: fix pymc_to_hssm for the single-trial ONNX contract (#1021)
AlexanderFengler Jul 9, 2026
c73f71e
docs: retrain BayesFlow LRE network for keras compatibility (#1021)
AlexanderFengler Jul 9, 2026
7a42c88
docs: migrate remaining tutorials to arviz 1.0 plotting + pymc6 APIs …
AlexanderFengler Jul 9, 2026
24b58b0
fix: restore no-jitter behavior for the JAX NUTS samplers (#999)
AlexanderFengler Jul 9, 2026
a52c213
Address choice-only RLSSM review comments
krishnbera Jul 9, 2026
0df1421
Format choice-only RLSSM tutorial notebook
krishnbera Jul 9, 2026
740803e
Merge pull request #1036 from lnccbrown/choice-only-rlssm-pymc6
krishnbera Jul 9, 2026
2175331
Merge pull request #1044 from lnccbrown/999-restore-jax-jitter
krishnbera Jul 9, 2026
bc3f8c2
fix: move redundant else clause
digicosmos86 Jul 9, 2026
6ceb012
Merge branch 'migration-pymc6' into 1040-pyrefly-migration
digicosmos86 Jul 9, 2026
2ce5d88
fix(analytical.py): suppress pyrefly errors
digicosmos86 Jul 9, 2026
d17a07f
Merge pull request #1041 from lnccbrown/1040-pyrefly-migration
digicosmos86 Jul 9, 2026
786fc95
Add four-choice choice-only softmax registry
krishnbera Jul 9, 2026
7eea46e
Fix four-choice softmax test tolerance
krishnbera Jul 9, 2026
46811e3
docs: add main tutorial image alt text
krishnbera Jul 9, 2026
0d67d32
docs: clean pymc6 tutorial review outputs
krishnbera Jul 9, 2026
e288ed3
Discover RLSSM presets from ssms
krishnbera Jul 9, 2026
a465461
Fix RLSSM preset discovery typing
krishnbera Jul 9, 2026
ac0eaf0
DOC Fix scientific workflow trace plots
krishnbera Jul 10, 2026
d265987
Initial plan
Copilot Jul 10, 2026
99c495f
Consolidate trajectory color mapping in model_cartoon.py
Copilot Jul 10, 2026
4ea648b
fix: address model cartoon color review feedback
Copilot Jul 10, 2026
5b8b7f8
fix: address unresolved color review feedback in model_cartoon
Copilot Jul 10, 2026
1df43c1
docs: expand main tutorial beginner guidance
krishnbera Jul 10, 2026
fde94da
docs: revamp readme landing page
krishnbera Jul 10, 2026
0b0b23d
ci: fix dependency and notebook formatting
krishnbera Jul 10, 2026
533d73c
Merge pull request #1048 from lnccbrown/mindRL-challenge
krishnbera Jul 10, 2026
817b035
Merge pull request #1043 from lnccbrown/migration-pymc6-tutorial-upda…
digicosmos86 Jul 10, 2026
c6e88c9
Merge pull request #1019 from lnccbrown/migration-pymc6
digicosmos86 Jul 10, 2026
2b4cb7e
test: cover datatree migration branches
krishnbera Jul 10, 2026
fe3fcd3
test: satisfy lint for datatree coverage tests
krishnbera Jul 10, 2026
a6119bd
test: cover rlssm migration branches
krishnbera Jul 10, 2026
a0cd408
test: cover plotting utility branches
krishnbera Jul 11, 2026
570e9e8
test: document coverage regression tests
krishnbera Jul 11, 2026
c7fb4d8
Address PR review comments
krishnbera Jul 11, 2026
8486952
Merge pull request #1050 from lnccbrown/fix/main-codecov-regressions
krishnbera Jul 11, 2026
e08432f
Docker image, GHCR publish, and Codespaces devcontainer (dockerHSSM) …
AlexanderFengler Jul 12, 2026
80abd11
feat: per-parameter centered/non-centered parameterization (#1014)
AlexanderFengler Jul 13, 2026
b13d453
aDDM: HSSM integration — engine + cartoon plots + fixation continuati…
AndrewZhang599 Jul 13, 2026
86f5171
chore: start merge conflict resolution with origin/main
Copilot Jul 13, 2026
0ac5cb1
fix: resolve merge conflicts with origin/main in model_cartoon.py
Copilot Jul 13, 2026
40f2c22
feat: add cuda13 optional extra
digicosmos86 Jul 13, 2026
d18d201
docs: document cuda13 installation option
digicosmos86 Jul 13, 2026
e6b9184
docs(CLAUDE.md): note cuda13 extra; add AI-agent repo etiquette section
digicosmos86 Jul 13, 2026
1b91d9e
fix: bump cuda12 extra to jax[cuda12]>=0.7.0
digicosmos86 Jul 13, 2026
013a90e
docs(README): streamline installation section around pip
digicosmos86 Jul 13, 2026
b501e46
Merge origin/main into 1053-add-cuda13-support
digicosmos86 Jul 13, 2026
5336911
docs: remove leftover conda instructions
digicosmos86 Jul 13, 2026
8ee99e9
fix: un-annotate the dynamic HSSMRV class attrs to restore PPC on Pyt…
AlexanderFengler Jul 13, 2026
4330d94
test(addm): fix PSIS-degenerate flake in the WAIC/LOO test (seed + re…
AlexanderFengler Jul 13, 2026
43547da
Register jax_funcify for LANLogpVJPOp (issue #1056 prototype)
AlexanderFengler Jul 13, 2026
ff72d0f
Migrate LANLogpOp.grad to the PyTensor 3 pullback API
AlexanderFengler Jul 13, 2026
ed32053
Add JAX-linker gradient tests for LAN Ops + xfail VI-jax e2e test
AlexanderFengler Jul 13, 2026
39f55dc
Apply code-review fixes: cotangent-correct CPN VJP, module-level Ops,…
AlexanderFengler Jul 13, 2026
39a1b7b
feat(vi): add backend argument to vi() inferred from model_config
digicosmos86 Jul 13, 2026
2c9dba4
test(vi): assert vi() forwards resolved backend to pm.fit
digicosmos86 Jul 13, 2026
039a439
chore: bump version to 0.4.1
digicosmos86 Jul 13, 2026
d6e237b
docs(vi): use numpydoc style for backend parameter
digicosmos86 Jul 13, 2026
929baa8
Lock LANLogpOp data configuration on first use (Copilot review)
AlexanderFengler Jul 13, 2026
0bec2b3
test(vi): cover explicit backend overriding pytensor config
digicosmos86 Jul 13, 2026
25bffbf
Address review: plain-language changelog, drop direct pytensor pin
AlexanderFengler Jul 13, 2026
baf9803
fix: align CLAUDE.md Python version with pyproject.toml
digicosmos86 Jul 13, 2026
f80957c
fix: use a single CUDA extra in local dev GPU setup
digicosmos86 Jul 13, 2026
e70da6f
docs: clarify GPU install does not need a separate JAX step
digicosmos86 Jul 13, 2026
1f604b5
Enable vi(backend="jax") end-to-end via scoped PyMC compatibility shims
AlexanderFengler Jul 13, 2026
ace3bad
docs: note JAX CUDA wheels are Linux-only and need an NVIDIA driver
digicosmos86 Jul 13, 2026
bd335b8
docs: describe real Graphviz requirement (dot on PATH)
digicosmos86 Jul 13, 2026
a7b7015
Reference filed upstream issues in _vi_compat docstring
AlexanderFengler Jul 13, 2026
15bcab9
Merge pull request #1060 from lnccbrown/fix-vi-backend-1058
digicosmos86 Jul 13, 2026
bc097c5
Merge pull request #1049 from lnccbrown/copilot/consolidate-trajector…
digicosmos86 Jul 13, 2026
f98b62c
Merge pull request #1054 from lnccbrown/1053-add-cuda13-support
digicosmos86 Jul 14, 2026
a02f149
Merge branch 'main' into debug-issue-1056
krishnbera Jul 14, 2026
eb5eb34
Merge pull request #1059 from lnccbrown/debug-issue-1056
krishnbera Jul 14, 2026
e49b89b
Restore jax-backend VI shim gate lost in #1059/#1060 merge (#1063)
AlexanderFengler Jul 14, 2026
9777d31
Port LBA4 analytical likelihood to JAX
krishnbera Jul 15, 2026
569b463
Test JAX LBA4 sampling
krishnbera Jul 15, 2026
4f30cdc
Fix docs build for marimo tutorial
krishnbera Jul 15, 2026
038fed5
Merge pull request #1064 from lnccbrown/mindRL-challenge
krishnbera Jul 15, 2026
c1a1c82
Merge pull request #1065 from lnccbrown/fix-docs-marimo-dep
krishnbera Jul 15, 2026
1d1d3b4
docs: prepare release v0.4.2
krishnbera Jul 15, 2026
2170320
Merge pull request #1066 from lnccbrown/release-prep/v0.4.2
krishnbera Jul 15, 2026
08fbcf6
chore: downgrade version to 0.4.0
digicosmos86 Jul 15, 2026
5df6543
chore: update changelog.md
digicosmos86 Jul 15, 2026
0657338
fix: align changelog for consolidated 0.4.0 section
digicosmos86 Jul 15, 2026
e6f51e1
Merge pull request #1068 from lnccbrown/rerelease-0.4.0
krishnbera Jul 15, 2026
a0c5b76
ci: manual dispatch for publish, path-filter slow tests & coverage (#…
digicosmos86 Jul 15, 2026
5fb53ec
ci: broaden path filters for slow tests & coverage (#1070)
digicosmos86 Jul 15, 2026
4610101
Merge pull request #1071 from lnccbrown/enhance-release-workflows
digicosmos86 Jul 15, 2026
64223a1
Update choice-only RLSSM tutorial for ssms PPC
krishnbera Jul 15, 2026
1823172
Merge pull request #1084 from lnccbrown/mindRL-challenge
krishnbera Jul 15, 2026
67c3a7f
cpaniaguam Jul 24, 2026
f9449b4
refactor: reorganize unit tests for analytical likelihood
cpaniaguam Jul 24, 2026
c318251
test: relocate LBA unit tests
cpaniaguam Jul 24, 2026
641ea1c
test: add unit tests for Poisson race likelihood
cpaniaguam Jul 24, 2026
b25277b
test: add unit tests for racing diffusion likelihood
cpaniaguam Jul 24, 2026
908142d
test: add LBA likelihood
cpaniaguam Jul 24, 2026
eae3373
test: add integration tests for poisson_race simulator behavior overr…
cpaniaguam Jul 24, 2026
790e4c8
test: remove unnecessary hssm import and floatX setting from poisson_…
cpaniaguam Jul 24, 2026
5895ba7
test: add float32 precision guard for analytical likelihood tests
cpaniaguam Jul 24, 2026
49da735
Merge pull request #1091 from lnccbrown/1090-collect-likelihoods-unit…
cpaniaguam Jul 27, 2026
c04a5ec
test: move tests/rl/test_rldm_likelihood.py to tests/unit/likelihoods…
cpaniaguam Jul 27, 2026
fff232d
test: add integration tests for DDM/WFPT likelihood paths
cpaniaguam Jul 27, 2026
86b3594
refactor: remove legacy RLDM module
cpaniaguam Jul 27, 2026
cbebf07
test: Move unit tests for model configuration retrieval
cpaniaguam Jul 27, 2026
a8670e7
test: move tests/param to tests/unit/param
cpaniaguam Jul 27, 2026
ec0c6c1
Merge pull request #1097 from lnccbrown/remove-legacy-rldm-module
cpaniaguam Jul 27, 2026
9a81141
fix: exclude docs directory from linting
cpaniaguam Jul 27, 2026
9b3c6ce
fix: add ignore rule for too many positional arguments in linting
cpaniaguam Jul 27, 2026
ca0cc8c
test: move tests/test_simulator.py to tests/unit/test_simulator.py
cpaniaguam Jul 27, 2026
46d7d21
test: move tests/test_register.py to tests/unit/test_register.py
cpaniaguam Jul 27, 2026
9ff14c4
test: migrate tests from test_prior.py to unit/test_prior.py
cpaniaguam Jul 27, 2026
dff266e
test: move tests/test_missing_data_mixin.py to tests/unit/test_missin…
cpaniaguam Jul 27, 2026
79876dc
Merge pull request #1093 from lnccbrown/move-tests/rl/test_rldm_likel…
cpaniaguam Jul 27, 2026
61d740c
Merge pull request #1110 from lnccbrown/1109-move-teststest_simulator…
cpaniaguam Jul 27, 2026
0f8a42c
Merge pull request #1099 from lnccbrown/1098-move-teststest_get_model…
cpaniaguam Jul 27, 2026
ec98d11
Merge pull request #1100 from lnccbrown/move-tests/param-to-test/unit…
cpaniaguam Jul 27, 2026
dda0c52
test: move to unit
cpaniaguam Jul 27, 2026
9c06375
Merge pull request #1114 from lnccbrown/1113-group-tests-in-test_prio…
cpaniaguam Jul 27, 2026
2964111
Merge pull request #1112 from lnccbrown/1111-move-teststest_registerp…
cpaniaguam Jul 27, 2026
b00406d
Merge pull request #1116 from lnccbrown/1115-move-teststest_missing_d…
cpaniaguam Jul 27, 2026
e061696
style: reformat docs
cpaniaguam Jul 28, 2026
c37fd2b
fix: remove docs directory from exclusion in linting
cpaniaguam Jul 28, 2026
23a630c
fix: update fixture path to accommodate file relocation
cpaniaguam Jul 28, 2026
8d3621f
Merge pull request #1107 from lnccbrown/ignore-docs-in-linting-workflow
cpaniaguam Jul 28, 2026
4d5e3a9
Merge pull request #1118 from lnccbrown/fix-fixture-path-after-file-r…
cpaniaguam Jul 28, 2026
f4d44a6
Split up test_plotting according to unit/integration tests
cpaniaguam Jul 27, 2026
2a7da90
fix: correct title formatting assertion in test__get_title
cpaniaguam Jul 27, 2026
84a3e94
chore: update TODO comment with issue reference for file relocation
cpaniaguam Jul 27, 2026
9c196d3
fix: add __init__.py files to unit, param, and plotting directories t…
cpaniaguam Jul 28, 2026
c576e5b
fix: use fixed random seed for consistent test results in _process_df…
cpaniaguam Jul 28, 2026
c872840
fix: correct docstring for unit tests of DDM/WFPT likelihood components
cpaniaguam Jul 28, 2026
9a6c81b
feat: add integration tests for quantile-probability plotting functions
cpaniaguam Jul 28, 2026
ee7ca12
Merge pull request #1119 from lnccbrown/1106-plotting-split-clean
cpaniaguam Jul 30, 2026
bce4ca0
Add model.plot_model_cartoon() convenience method (#1132)
AlexanderFengler Aug 3, 2026
584b984
Show posterior uncertainty in plot_predictive by default; add samples…
AlexanderFengler Aug 3, 2026
7e05738
Show posterior uncertainty in plot_model_cartoon as graded bands; dec…
AlexanderFengler Aug 3, 2026
e173ddc
plot_model_cartoon correctness: θ-reduction, seeded RNG, max_t owners…
AlexanderFengler Aug 3, 2026
acff0b9
plot_model_cartoon: hist_height="auto" fits histograms to the availab…
AlexanderFengler Aug 4, 2026
481a564
Merge pull request #1096 from lnccbrown/1095-move-teststest_likelihoo…
cpaniaguam Aug 4, 2026
c8cf627
ci: updated action versions and removed an unnecessary Python install in
digicosmos86 Aug 4, 2026
edd6905
ci: removed the test step in publish workflow
digicosmos86 Aug 4, 2026
3b511ef
ci: removed the PYTENSOR_FLAGS step
digicosmos86 Aug 4, 2026
baff9e3
ci: use v9.0.0 for setup-uv
digicosmos86 Aug 4, 2026
96051d9
ci: setup-env-notebooks also accepts python version now
digicosmos86 Aug 4, 2026
5857790
ci: remove dangling PYTENSOR_FLAGS step env overrides
digicosmos86 Aug 4, 2026
8114267
Merge pull request #1135 from lnccbrown/1086-optimize-ci-workflows
digicosmos86 Aug 5, 2026
80b8f0a
Fixed numpy version (#1137)
AlexanderFengler Aug 8, 2026
b08c17b
Fix HSGP prior handling: hsgp() terms are usable through HSSM (#1121)
AlexanderFengler Aug 9, 2026
5233a21
Re-declare scipy as a direct dependency (#1148)
AlexanderFengler Aug 9, 2026
9f2f6af
Scope the mypy pre-commit hook to src/hssm (#1149)
AlexanderFengler Aug 9, 2026
11195b3
Fix the two failures keeping the slow test suite red (#1150)
AlexanderFengler Aug 9, 2026
064520d
Scheduled drift detection: weekly gates + monthly notebooks re-run ag…
AlexanderFengler Aug 9, 2026
1028dfa
Cartoon: honour keep_boundary in auto height; make two tests able to …
AlexanderFengler Aug 11, 2026
0ae732e
docs: phase-0 safety net — strict build in CI, automated deploy, redi…
AlexanderFengler Aug 11, 2026
fa06520
docs: adopt the shared ecosystem brand bundle (phase 1) (#1156)
AlexanderFengler Aug 11, 2026
74c6a46
implement RSSSM Phase 2: core analytical-backend regime-switching SSM…
fmuia Jun 17, 2026
6d78da7
implement RSSSM Phase 3: LAN emission backend and test coverage
fmuia Jun 17, 2026
398e348
fix RSSSM parameter initialization so the start point has finite grad…
fmuia Jun 17, 2026
c910d08
fix RSSSM gradient stability: scaled forward recursion and in-support…
fmuia Jun 17, 2026
d53fb40
implement RSSSM Phase 4: post-hoc FFBS regime recovery and per-trial …
fmuia Jun 17, 2026
d6cc636
fix RSSSM per-trial log-likelihood: exclude padded trials from loo an…
fmuia Jun 17, 2026
e65886b
implement RSSSM per-regime p_outlier lapse mixture
fmuia Jun 17, 2026
ee70d5d
align RSSSM with plan: eager config validation and opt-in log_likelih…
fmuia Jun 17, 2026
e536540
fix RSSSM p_outlier-as-anchor NaN: exclude p_outlier from label-switc…
fmuia Jun 17, 2026
ea2a581
fix RSSSM no-pooling fixed params and conflicting param specs
fmuia Jun 17, 2026
dc122f3
docs: add RSSSM API reference and changelog entry
fmuia Jun 17, 2026
228e06c
docs: add RSSSM regime-switching tutorials (single- and multi-partici…
fmuia Jun 17, 2026
b6aad3e
test RSSSM edge cases: unoccupied regime, descending anchor, LAN FFBS…
fmuia Jun 17, 2026
ce8377b
docs: expand RSSSM tutorials with full narrative, theory, diagnostics…
fmuia Jun 17, 2026
d9a0b3f
address RSSSM review: choice-only + single-trial guards, eager fixed-…
fmuia Jun 18, 2026
95ef17f
docs: rewrite RSSSM tutorials as K=2 and K=3 supersets of the hand-bu…
fmuia Jun 18, 2026
cb5a6a4
address RSSSM review: predictive-method guards, design-doc scope alig…
fmuia Jun 22, 2026
bdbbace
port RSSSM to the HSSM 0.4.0 stack: xarray DataTree, arviz 1.x, pyten…
fmuia Aug 11, 2026
279065f
address RSSSM review: floatX initvals and panel data, data sanity val…
fmuia Aug 11, 2026
d26d040
address RSSSM review: explicit loglik_kind never substituted, non-fin…
fmuia Aug 11, 2026
68f51f8
reconcile with pre-rebase branch history
fmuia Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 6 additions & 17 deletions .claude/skills/prepare-release/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: prepare-release
description: >
Automate the HSSM pre-release workflow: update changelog, update docs announcement banner,
Automate the HSSM pre-release workflow: update changelog,
build docs locally, and create a draft GitHub release. Use this skill whenever the user mentions
"prepare release", "release prep", "pre-release checklist", "update changelog for release",
or any variation of getting ready to publish a new version of HSSM. Also trigger when the user
Expand All @@ -14,7 +14,6 @@ This skill automates the pre-release checklist for the HSSM package. It assumes
in `pyproject.toml` has already been bumped. The skill walks through four steps:

1. Update the changelog (`docs/changelog.md`)
2. Update the announcement banner (`docs/overrides/main.html`)
3. Build docs locally to verify they compile
4. Run the notebook check workflow in CI
5. Create a draft GitHub release
Expand Down Expand Up @@ -80,17 +79,7 @@ Guidelines for writing the changelog:

After user approval, insert the new version section into `docs/changelog.md` immediately after the `# Changelog` heading on line 1. Add a blank line before and after the new section.

## Step 5: Update the announcement banner

Edit `docs/overrides/main.html`. Find the line containing the version announcement (pattern: `v{OLD_VERSION} is released!`) and replace it with:

```html
<span class="right-margin"> v{VERSION} is released! </span>
```

Only change the version number — leave the surrounding HTML and Jinja2 template structure untouched.

## Step 6: Build docs locally
## Step 5: Build docs locally

Run:

Expand All @@ -105,7 +94,7 @@ Check that the command exits with code 0. If it fails:

If it succeeds, confirm to the user and move on.

## Step 7: Run the notebook check workflow
## Step 6: Run the notebook check workflow

Trigger the `check_notebooks.yml` workflow on the current branch to verify all notebooks execute successfully:

Expand All @@ -125,7 +114,7 @@ Use `gh run watch <RUN_ID>` to stream the status, or poll with `gh run view <RUN
- If the workflow **succeeds**, confirm to the user and proceed to the draft release.
- If the workflow **fails**, show the user the failure details using `gh run view <RUN_ID> --log-failed` and help debug. Do NOT proceed to creating the release until notebooks pass.

## Step 8: Create a draft GitHub release
## Step 7: Create a draft GitHub release

Run:

Expand All @@ -136,9 +125,9 @@ gh release create v{VERSION} --draft --title "v{VERSION}" --generate-notes --tar
The `--draft` flag ensures nothing is published (and therefore no CI release pipeline is triggered).
The `--generate-notes` flag uses GitHub's auto-generated release notes from merged PRs.

## Step 9: Report
## Step 8: Report

Tell the user:
- The draft release URL (from the `gh release create` output)
- A summary of what was done: changelog updated, banner updated, docs build verified, draft release created
- A summary of what was done: changelog updated, docs build verified, draft release created
- Remind them that publishing the release will trigger the full CI pipeline (tests, PyPI publish, docs deploy)
5 changes: 5 additions & 0 deletions .codegraph/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# CodeGraph data files — local to each machine, not for committing.
# Ignore everything in .codegraph/ except this file itself, so transient
# files (the database, daemon.pid, sockets, logs) never show up in git.
*
!.gitignore
31 changes: 31 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"name": "HSSM",

// Reuse the runnable image's Dockerfile so the dev container and the published
// image share one definition (python 3.13, uv, graphviz, non-root `hssm` user).
// Building here (rather than pulling the image) means Codespaces works before the
// image is ever published. Swap for `"image": "ghcr.io/lnccbrown/hssm:latest"`
// once it's on GHCR if you'd rather pull than build.
"build": { "dockerfile": "../Dockerfile", "context": ".." },
"remoteUser": "hssm",

// Editable dev env on top of the image. `uv sync` installs the project + the
// default `dev` group (pytest, ruff, mypy, pre-commit) from uv.lock into .venv.
// ponytail: dev group only — `uv sync --group notebook` / `--group docs` are one
// command away when a contributor needs the heavy notebook/docs stacks.
// onCreateCommand runs during prebuilds, so the venv is baked in → fast startup.
"onCreateCommand": "uv sync",

"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"charliermarsh.ruff",
"ms-python.mypy-type-checker"
],
"settings": {
"python.defaultInterpreterPath": ".venv/bin/python"
}
}
}
}
16 changes: 16 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Keep the build context small. The Dockerfile only COPYs pyproject/README/LICENSE,
# src, and docs/tutorials; everything else is noise.
.git
.github
.venv
**/__pycache__
*.pyc
*.pyo
**/.ipynb_checkpoints
tests
.pytest_cache
.ruff_cache
.mypy_cache
# Only docs/tutorials is copied into the image; drop the rest of docs/ from context.
docs/*
!docs/tutorials
17 changes: 5 additions & 12 deletions .github/setup-env-notebooks/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,18 @@ inputs:
runs:
using: "composite"
steps:
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}

- name: Install BLAS and LAPACK
run: sudo apt-get update && sudo apt-get install -y libblas-dev liblapack-dev
shell: bash

- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@v9.0.0
with:
version: "latest"
python-version: ${{ inputs.python-version }}
enable-cache: true

# (a stale `if: steps.cache.outputs.cache-hit` guard used to sit here —
# no step with id `cache` exists, so it always evaluated true)
- name: Install hssm
if: steps.cache.outputs.cache-hit != 'true'
run: uv sync --group notebook
shell: bash
19 changes: 10 additions & 9 deletions .github/setup-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,26 @@ inputs:
runs:
using: "composite"
steps:
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: ${{ inputs.python-version }}
- name: Checkout repository
uses: actions/checkout@v7

# run_tests.yml sets PYTENSOR_FLAGS=blas__ldflags=... -lblas -llapack; the
# runner image ships only the runtime .so.3 objects, so without the -dev
# packages the linker cannot resolve those flags and PyTensor's C backend
# fails to compile any BLAS-using op.
- name: Install BLAS and LAPACK
run: sudo apt-get update && sudo apt-get install -y libblas-dev liblapack-dev
shell: bash

- name: Checkout repository
uses: actions/checkout@v6

- name: Install uv
uses: astral-sh/setup-uv@v7
uses: astral-sh/setup-uv@v9.0.0
with:
version: "latest"
python-version: ${{ inputs.python-version }}
enable-cache: true

# (a stale `if: steps.cache.outputs.cache-hit` guard used to sit here —
# no step with id `cache` exists, so it always evaluated true)
- name: Install hssm
if: steps.cache.outputs.cache-hit != 'true'
run: uv sync
shell: bash
15 changes: 3 additions & 12 deletions .github/workflows/build_and_publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,16 @@ on:
release:
types:
- published
workflow_dispatch:

jobs:
lint_and_typecheck:
name: Lint and type-check
uses: ./.github/workflows/linting_and_type_checking.yml

run_tests:
name: Run full test suite
uses: ./.github/workflows/run_tests.yml
with:
run_slow_tests: true

# check_notebooks:
# name: Check notebooks
# uses: ./.github/workflows/check_notebooks.yml

publish:
name: Build wheel and publish to test-PyPI, then PyPI, and publish docs
needs: [lint_and_typecheck, run_tests]
needs: [lint_and_typecheck]
runs-on: ubuntu-latest

strategy:
Expand All @@ -32,7 +23,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Setup environment
uses: ./.github/setup-env
Expand Down
57 changes: 42 additions & 15 deletions .github/workflows/build_docs.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,52 @@
name: Build docs
name: Docs

on:
pull_request:
paths: ["docs/**", "mkdocs.yml", "pyproject.toml", "src/hssm/**"]
push:
branches: [main]
paths: ["docs/**", "mkdocs.yml", "pyproject.toml", "src/hssm/**"]
release:
types: [published]
schedule:
- cron: "50 5 * * 1" # weekly link check (Monday, off-peak UTC)
workflow_dispatch:

permissions:
contents: read

jobs:
build_docs:
build:
if: github.event_name != 'schedule'
runs-on: ubuntu-latest

strategy:
fail-fast: true
matrix:
python-version: ["3.13"]

steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Setup environment
uses: ./.github/setup-env
- uses: actions/checkout@v7
- uses: ./.github/setup-env
with:
python-version: ${{ matrix.python-version }}
python-version: "3.13"
- name: Build docs (strict)
run: uv run --group notebook --group docs mkdocs build --strict

- name: Run mkdocs
deploy:
if: github.event_name == 'release' || (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'workflow_dispatch'
needs: build
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v7
- uses: ./.github/setup-env
with:
python-version: "3.13"
- name: Deploy docs
run: uv run --group notebook --group docs mkdocs gh-deploy --force

linkcheck:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: lycheeverse/lychee-action@v2
with:
args: --cache --max-cache-age 1d --no-progress './docs/**/*.md' 'README.md'
fail: true
39 changes: 25 additions & 14 deletions .github/workflows/check_notebooks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,26 @@ name: Check notebooks

on:
workflow_dispatch:
workflow_call: # Called by drift.yml (monthly notebook drift run)

jobs:
check_notebooks:
runs-on: ubuntu-latest
if: ${{ ! contains(github.event.head_commit.message, '[skip fast tests]') }}
env:
PYTENSOR_FLAGS: "blas__ldflags=-L/usr/lib/x86_64-linux-gnu -lblas -llapack"

name: Check notebooks (shard ${{ matrix.shard }})
strategy:
fail-fast: true
# Shards partition the ~37 executed notebooks so no single job can hit
# the 6-hour limit; fail-fast off so a drift run reports the full blast
# radius, not just the first broken shard.
fail-fast: false
matrix:
python-version: ["3.12"]
python-version: ["3.13"]
shard: [0, 1, 2, 3]

steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Setup environment
uses: ./.github/setup-env-notebooks
Expand All @@ -27,18 +31,27 @@ jobs:
- name: Run notebooks
run: |
echo "Running notebooks with Python ${{ matrix.python-version }}"
# List of notebooks to skip (temporarily)
# List of notebooks to skip (temporarily). Entries must be the
# full find-produced path — bare filenames never match the loop
# comparison (the two workshop notebooks executed for months while
# "skipped").
SKIP_NOTEBOOKS=(
"docs/tutorials/tutorial_bayeux.ipynb"
"rlssm_rlwm_model.ipynb"
"rlssm_tutorial.ipynb"
"add_custom_rlssm_model.ipynb"
"hssm_tutorial_workshop_1.ipynb"
"hssm_tutorial_workshop_2.ipynb"
"docs/tutorials/hsgp_regression.ipynb"
"docs/tutorials/hssm_tutorial_workshop_1.ipynb"
"docs/tutorials/hssm_tutorial_workshop_2.ipynb"
"docs/tutorials/rsssm_regime_switching.ipynb"
"docs/tutorials/rsssm_k3.ipynb"
)

EXIT_CODE=0
for notebook in $(find docs -name "*.ipynb"); do
INDEX=0
for notebook in $(find docs -name "*.ipynb" | sort); do
THIS_INDEX=$INDEX
INDEX=$((INDEX + 1))
if [ $((THIS_INDEX % 4)) -ne ${{ matrix.shard }} ]; then
continue
fi
# Check if notebook is in skip list
SKIP=false
for skip_nb in "${SKIP_NOTEBOOKS[@]}"; do
Expand All @@ -61,5 +74,3 @@ jobs:
fi
done
exit $EXIT_CODE
env:
PYTENSOR_FLAGS: ${{ env.PYTENSOR_FLAGS }}
Loading