Choice-only RLSSM: ssms.rl presets (ssm-simulators >= 0.13) not buildable through the RV path — smoke tests skipped
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 124
- Forks
- 24
- Avg merge
- 19h 32m
- Merged PRs (30d)
- 60
Description
Summary
ssm-simulators 0.13 ships the choice-only RL presets (ssms/rl/preset.py: 2AB_RW_InvTempSoftmax et al.). HSSM's config layer already bridges them, but the RV/simulator path does not — building an hssm.RLSSM from a preset produces a fallback RV that crashes at logp-compile time with a cryptic numba error. The four smoke tests in tests/rl/test_choice_only_rl.py::TestChoiceOnlyRealSSMSSmoke are skipped pending this wiring (previously they were skipped implicitly because no released ssm-simulators had ssms.rl; the aDDM PR #967 bumping the pin to >=0.13.1 was the first branch to un-skip them).
State per preset (ssm-simulators 0.13.1)
| preset | ssms.rl.resolve_model |
in ssms.config.model_config |
pre-skip behavior |
|---|---|---|---|
2AB_RW_InvTempSoftmax |
OK | no | ran → failed |
2AB_RW_DualAlpha_InvTempSoftmax |
KeyError | no | skipped |
3AB_RW_InvTempSoftmax |
OK | no | ran → failed |
4AB_RW_InvTempSoftmax |
KeyError | no | skipped |
model_config registers the decision-process kernels as inv_temp_softmax_2/3/4 instead.
Failure mechanism
RLSSMConfig.from_ssms_model("2AB_RW_InvTempSoftmax")works — resolves viassms.rl, mapsdecision_process = "inv_temp_softmax_2"(registered), param list correct.hssm.RLSSM(...)RV construction passes the preset name tossms.hssm_support, which only knowsmodel_confignames → warnsYou supplied a model '2AB_RW_InvTempSoftmax', which is currently not supported in the ssm_simulators packageand installs a fallback RV.- The fallback RV's
performclosure captures an unpicklable ssmsStateobject;model.compile_logp()under the numba backend then dies in cloudpickle:
TypeError: cannot pickle 'State' object(numba object-mode lifting of the RV perform).
Repro
# on a branch with ssm-simulators >= 0.13.1 (e.g. PR #967)
uv run pytest "tests/rl/test_choice_only_rl.py::TestChoiceOnlyRealSSMSSmoke" -q
# before the skip-guard fix: 2 failed (2AB/3AB), 2 skipped; after: 4 skipped
Fix directions
- HSSM side: have the RLSSM RV construction use the resolved decision-process/kernel name (or the
ssms.rlpreset simulator) instead of forwarding the preset name tohssm_support. - ssm-simulators side (alternative/complementary): register the RL presets in
model_config, or extendhssm_supportto consultssms.rl.resolve_model. - Robustness (secondary): an unsupported model currently warns and then fails much later with the opaque numba pickle error — consider raising cleanly at construction instead.
The skip guard added in PR #967 keys on model_name in ssms.config.model_config, so the tests un-skip themselves as soon as either fix lands.
Discovered during the full-suite validation of #967 (aDDM), which first resolved ssm-simulators 0.13.x.
🤖 Generated with Claude Code
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Run the four smoke tests in tests/rl/test_choice_only_rl.py::TestChoiceOnlyRealSSMSSmoke with ssm-simulators 0.13.1, then trace RLSSMConfig.from_ssms_model and RLSSM RV construction through hssm_support. The work is complete when the choice-only presets build without the fallback RV and all four smoke tests run successfully, including compile_logp.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- machine-learning, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100