lnccbrown / lnccbrown/HSSM

Choice-only RLSSM: ssms.rl presets (ssm-simulators >= 0.13) not buildable through the RV path — smoke tests skipped

Open
#1,052 3 comments 0 reactions 0 assignees View on GitHub

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

  1. RLSSMConfig.from_ssms_model("2AB_RW_InvTempSoftmax") works — resolves via ssms.rl, maps decision_process = "inv_temp_softmax_2" (registered), param list correct.
  2. hssm.RLSSM(...) RV construction passes the preset name to ssms.hssm_support, which only knows model_config names → warns You supplied a model '2AB_RW_InvTempSoftmax', which is currently not supported in the ssm_simulators package and installs a fallback RV.
  3. The fallback RV's perform closure captures an unpicklable ssms State object; 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.rl preset simulator) instead of forwarding the preset name to hssm_support.
  • ssm-simulators side (alternative/complementary): register the RL presets in model_config, or extend hssm_support to consult ssms.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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.