You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
States should inherit all declared axes by default, with bracket syntax only needed for asymmetric (per-state) overrides.
Problem
Currently every state gets an empty axis set unless explicitly listed in state_axes. This means a model with 3 axes and 5 states requires a state_axes block mapping every state to every axis, even when they all share the same structure. The talk and proposed spec syntax show bare state: [S, E, I, R] with the expectation that all states expand over all declared axes automatically.
Proposed Behavior
Default: All states inherit all declared axes (full Cartesian product).
Override via bracket syntax:S[age] means S only carries the age axis. I[age,strain] means I carries both. A bare S means "inherit all axes."
Explicit state_axes: Still supported as an alternative to bracket syntax for backward compatibility.
spec:
axes:
- {name: age, type: continuous, coords: [0, 5, 18, 50, 65, 100]}
- {name: vax, coords: [unvaccinated, 1dose, waned]}# All states get both axes by default:state: [S, E, I, R]# Or override per-state:state: [S[age,vax], E[age,vax], I[age,vax,strain], R[age]]
Scope
When no state_axes block and no bracket syntax: every state inherits all axes
Parse bracket syntax in state list entries to extract per-state axis overrides
Validate bracket axis references against declared axes
Preserve backward compatibility with explicit state_axes block
Update tests and documentation
Related
Shown in InsightNet talk slides 3, 4, 5 as assumed behavior
Summary
States should inherit all declared axes by default, with bracket syntax only needed for asymmetric (per-state) overrides.
Problem
Currently every state gets an empty axis set unless explicitly listed in
state_axes. This means a model with 3 axes and 5 states requires astate_axesblock mapping every state to every axis, even when they all share the same structure. The talk and proposed spec syntax show barestate: [S, E, I, R]with the expectation that all states expand over all declared axes automatically.Proposed Behavior
S[age]means S only carries theageaxis.I[age,strain]means I carries both. A bareSmeans "inherit all axes."state_axes: Still supported as an alternative to bracket syntax for backward compatibility.Proposed Syntax
Scope
state_axesblock and no bracket syntax: every state inherits all axesstatelist entries to extract per-state axis overridesstate_axesblockRelated
coord_shifttransition type for axis-coordinate transitions #47 — coord_shift (relies on states carrying the shifted axis)