Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
348 commits
Select commit Hold shift + click to select a range
19cb82d
Merge improve/shared-jit-compilation
hmgaudecker Apr 10, 2026
0ec706a
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 10, 2026
27a4a3e
Merge branch 'improve/jax-settings' into improve/lazy-diagnostics
hmgaudecker Apr 10, 2026
9d0a5c8
Merge branch 'improve/jax-settings' into improve/shared-jit-compilation
hmgaudecker Apr 10, 2026
cfb9d43
Merge branch 'improve/jax-settings' into improve/parallel-aot-compila…
hmgaudecker Apr 10, 2026
1f99c59
Merge branch 'improve/lazy-diagnostics' of github.com:OpenSourceEcono…
hmgaudecker Apr 10, 2026
1baff20
Merge branch 'improve/shared-jit-compilation' of github.com:OpenSourc…
hmgaudecker Apr 10, 2026
c53b124
Merge branch 'improve/parallel-aot-compilation' of github.com:OpenSou…
hmgaudecker Apr 10, 2026
717ac97
Fix review: int sentinel for discrete states, exception type, docstring
hmgaudecker Apr 10, 2026
b08b3be
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 10, 2026
7b64456
Merge branch 'fix/heterogeneous-initial-conditions' into improve/shar…
hmgaudecker Apr 10, 2026
4fd4fbb
Merge branch 'fix/heterogeneous-initial-conditions' into improve/para…
hmgaudecker Apr 10, 2026
58556b9
Add xfail tests for NaN diagnostic bugs
hmgaudecker Apr 10, 2026
978b041
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 10, 2026
1f6de61
Merge branch 'improve/lazy-diagnostics' into improve/parallel-aot-com…
hmgaudecker Apr 10, 2026
8dc0bc9
Fix NaN diagnostics: mesh grids, guard errors, widen exception catch
hmgaudecker Apr 10, 2026
755f1da
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 10, 2026
86ae1bc
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 10, 2026
1503b22
Fix review: JAX arrays for period/age, docstring, partition wording
hmgaudecker Apr 11, 2026
f8bc758
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 11, 2026
b66a320
Fix dtype mismatch: wrap period as jnp.int32 in lower_args
hmgaudecker Apr 11, 2026
bac103c
Change checking if jit enabled + Fix test
mj023 Apr 12, 2026
0638b55
Merge remote-tracking branch 'origin/main' into fix-series-in-fixed-p…
hmgaudecker Apr 12, 2026
42022aa
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 12, 2026
317450d
Merge branch 'fix-series-in-fixed-params' into fix/skip-unreachable-t…
hmgaudecker Apr 12, 2026
b691f5b
Merge branch 'fix-series-in-fixed-params' into improve/jax-settings
hmgaudecker Apr 12, 2026
9f821ae
Merge branch 'fix-series-in-fixed-params' into fix/heterogeneous-init…
hmgaudecker Apr 12, 2026
c23a0a6
Merge branch 'fix-series-in-fixed-params' into improve/lazy-diagnostics
hmgaudecker Apr 12, 2026
2e51e9d
Merge branch 'fix-series-in-fixed-params' into improve/shared-jit-com…
hmgaudecker Apr 12, 2026
41bfd40
Merge branch 'fix-series-in-fixed-params' into improve/parallel-aot-c…
hmgaudecker Apr 12, 2026
4c676bf
Merge branch 'improve/parallel-aot-compilation' of github.com:OpenSou…
hmgaudecker Apr 12, 2026
22c0c18
Fix AOT compilation deduplication for fixed_params models
hmgaudecker Apr 12, 2026
b97c16c
Support derived_categoricals in fixed_params conversion
hmgaudecker Apr 12, 2026
f12e167
Remove Model dependency from pandas_utils, eliminate callback pattern
hmgaudecker Apr 12, 2026
d4a9586
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 12, 2026
719cc8d
Merge branch 'fix/cross-grid-outcome-mapping' into fix/skip-unreachab…
hmgaudecker Apr 12, 2026
e11e378
Merge branch 'fix/cross-grid-outcome-mapping' into improve/jax-settings
hmgaudecker Apr 12, 2026
b81487d
Merge branch 'fix/cross-grid-outcome-mapping' into fix/heterogeneous-…
hmgaudecker Apr 12, 2026
b780485
Merge branch 'fix/cross-grid-outcome-mapping' into improve/lazy-diagn…
hmgaudecker Apr 12, 2026
bb2fdc3
Fix test call site for initial_conditions_from_dataframe decomposed args
hmgaudecker Apr 12, 2026
6e0d9dd
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 12, 2026
ecf0f01
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 12, 2026
ab90dcc
Fix test call site for initial_conditions_from_dataframe decomposed args
hmgaudecker Apr 12, 2026
51d4f68
Merge branch 'improve/parallel-aot-compilation' of github.com:OpenSou…
hmgaudecker Apr 12, 2026
6b10231
Restore derived_categoricals parameter for fixed_params Series conver…
hmgaudecker Apr 12, 2026
fc8a5ac
Restore derived_categoricals parameter for fixed_params Series conver…
hmgaudecker Apr 12, 2026
80a659b
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 12, 2026
01ce5df
Merge branch 'fix/cross-grid-outcome-mapping' into fix/skip-unreachab…
hmgaudecker Apr 12, 2026
3516e91
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 12, 2026
cf6a46c
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 12, 2026
9605f80
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 12, 2026
cd87c89
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 12, 2026
2d10798
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 12, 2026
ab898ce
Fix review: docstrings, test for derived_categoricals + fixed_params
hmgaudecker Apr 13, 2026
e81e85e
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 13, 2026
d9f10ad
Merge branch 'fix/cross-grid-outcome-mapping' into fix/skip-unreachab…
hmgaudecker Apr 13, 2026
b12260e
Merge branch 'fix/cross-grid-outcome-mapping' into improve/jax-settings
hmgaudecker Apr 13, 2026
1261346
Merge branch 'fix/cross-grid-outcome-mapping' into fix/heterogeneous-…
hmgaudecker Apr 13, 2026
6636b87
Merge branch 'fix/cross-grid-outcome-mapping' into improve/lazy-diagn…
hmgaudecker Apr 13, 2026
5724923
Merge branch 'fix/cross-grid-outcome-mapping' into improve/shared-jit…
hmgaudecker Apr 13, 2026
bf68891
Merge branch 'fix/cross-grid-outcome-mapping' into improve/parallel-a…
hmgaudecker Apr 13, 2026
74829a8
Move derived_categoricals to Regime with Model-level broadcasting
hmgaudecker Apr 13, 2026
1eb2ba8
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 13, 2026
7aceb2d
Merge branch 'fix-series-in-fixed-params' into fix/skip-unreachable-t…
hmgaudecker Apr 13, 2026
fbddc03
Merge branch 'fix-series-in-fixed-params' into improve/jax-settings
hmgaudecker Apr 13, 2026
01852d7
Merge branch 'fix-series-in-fixed-params' into fix/heterogeneous-init…
hmgaudecker Apr 13, 2026
0fe0bef
Merge branch 'fix-series-in-fixed-params' into improve/lazy-diagnostics
hmgaudecker Apr 13, 2026
fde634f
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 13, 2026
50b6bfa
Merge branch 'improve/lazy-diagnostics' into improve/parallel-aot-com…
hmgaudecker Apr 13, 2026
2444ab4
Accept raw categorical classes in derived_categoricals, inline wrappers
hmgaudecker Apr 13, 2026
839754e
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 13, 2026
77a809e
Merge branch 'fix-series-in-fixed-params' into fix/skip-unreachable-t…
hmgaudecker Apr 13, 2026
4900c12
Merge branch 'fix-series-in-fixed-params' into improve/jax-settings
hmgaudecker Apr 13, 2026
bf1fb16
Merge branch 'fix-series-in-fixed-params' into fix/heterogeneous-init…
hmgaudecker Apr 13, 2026
88258d4
Merge branch 'fix-series-in-fixed-params' into improve/lazy-diagnostics
hmgaudecker Apr 13, 2026
abf5321
Merge branch 'fix-series-in-fixed-params' into improve/shared-jit-com…
hmgaudecker Apr 13, 2026
1811cd1
Merge branch 'fix-series-in-fixed-params' into improve/parallel-aot-c…
hmgaudecker Apr 13, 2026
ea701ea
Restore enable_jit and max_compilation_workers in solve() calls
hmgaudecker Apr 13, 2026
12b182e
Revert raw-class acceptance, remove leaked downstream code, clean up
hmgaudecker Apr 13, 2026
46a0322
Extract _process_params on Model, make build_regimes_and_template sta…
hmgaudecker Apr 13, 2026
09f5f41
Rename _apply_fixed_params, make it self-contained; rename invalid va…
hmgaudecker Apr 13, 2026
7ee656b
Reorder parameters: ages before regimes in PR #308 files
hmgaudecker Apr 13, 2026
d168e6a
Unify discrete grid collection for states and actions
hmgaudecker Apr 13, 2026
6fcab75
Fix: remove falsy check that skipped partialling zero-valued fixed pa…
hmgaudecker Apr 13, 2026
4f763cc
Rename _remove_fixed_from_template -> _remove_fixed_params_from_template
hmgaudecker Apr 13, 2026
206fdf7
Fix code review findings: docstrings, import, derived_categoricals
hmgaudecker Apr 13, 2026
19fc695
Merge branch 'fix-series-in-fixed-params' into fix/cross-grid-outcome…
hmgaudecker Apr 13, 2026
2e72d98
Merge branch 'fix/cross-grid-outcome-mapping' into fix/skip-unreachab…
hmgaudecker Apr 13, 2026
6142caa
Merge branch 'fix/cross-grid-outcome-mapping' into improve/jax-settings
hmgaudecker Apr 13, 2026
6fe7db2
Merge branch 'fix/cross-grid-outcome-mapping' into fix/heterogeneous-…
hmgaudecker Apr 13, 2026
af6e214
Merge branch 'fix/cross-grid-outcome-mapping' into improve/lazy-diagn…
hmgaudecker Apr 13, 2026
8badea9
Merge branch 'fix/cross-grid-outcome-mapping' into improve/shared-jit…
hmgaudecker Apr 13, 2026
ff8651b
Restore InvalidValueFunctionError import after merge
hmgaudecker Apr 13, 2026
d5404e2
Expose __version__ from lcm._version in package init
hmgaudecker Apr 13, 2026
1ba9eb6
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 13, 2026
1614dd2
Update lock file.
hmgaudecker Apr 13, 2026
9f1cd52
Update lock file.
hmgaudecker Apr 14, 2026
04e1f34
prek autoupdate
hmgaudecker Apr 14, 2026
cddadd1
Fix benchmark CI: regenerate _version.py after checkout
hmgaudecker Apr 14, 2026
0486216
Fix: use python -m pip (pip not on PATH in pixi env)
hmgaudecker Apr 14, 2026
a9266ab
Merge remote-tracking branch 'origin/main' into fix/cross-grid-outcom…
hmgaudecker Apr 14, 2026
a05035c
Merge remote-tracking branch 'origin/fix/cross-grid-outcome-mapping' …
hmgaudecker Apr 14, 2026
b3fb23e
Merge remote-tracking branch 'origin/fix/skip-unreachable-targets' in…
hmgaudecker Apr 14, 2026
efa2973
Merge remote-tracking branch 'origin/improve/jax-settings' into fix/h…
hmgaudecker Apr 14, 2026
71a9033
Merge remote-tracking branch 'origin/fix/heterogeneous-initial-condit…
hmgaudecker Apr 14, 2026
b4179d6
Merge remote-tracking branch 'origin/improve/lazy-diagnostics' into i…
hmgaudecker Apr 14, 2026
d7b9f38
Merge remote-tracking branch 'origin/improve/shared-jit-compilation' …
hmgaudecker Apr 14, 2026
8858f58
Fix indentation of Returns block in _build_outcome_mapping docstring
hmgaudecker Apr 14, 2026
3a612dd
Merge branch 'fix/cross-grid-outcome-mapping' into fix/skip-unreachab…
hmgaudecker Apr 14, 2026
a2bdb95
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 14, 2026
b49599b
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 14, 2026
1db92bc
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 14, 2026
461428d
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 14, 2026
904d7fd
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 14, 2026
43c6bc2
Fix: write _version.py directly via git describe (no pip/uv needed)
hmgaudecker Apr 14, 2026
8ba31b4
Replace io_callback with debug.callback + NaN-poisoning for incomplet…
hmgaudecker Apr 15, 2026
fdd10fe
Merge branch 'main' into fix/skip-unreachable-targets
hmgaudecker Apr 15, 2026
fd65dc0
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 15, 2026
8b030b2
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 15, 2026
78a1bc3
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 15, 2026
ae1ac94
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 15, 2026
dbac868
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 15, 2026
ad3c6b2
Fix ty ignore rule: unresolved-attribute, not attr-defined
hmgaudecker Apr 15, 2026
e8618f0
Replace io_callback with debug.callback + NaN-poisoning for incomplet…
hmgaudecker Apr 15, 2026
f21721a
Revert "Fix ty ignore rule: unresolved-attribute, not attr-defined"
hmgaudecker Apr 15, 2026
e319faf
Revert "Replace io_callback with debug.callback + NaN-poisoning for i…
hmgaudecker Apr 15, 2026
573c643
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 15, 2026
0dbdb52
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 15, 2026
508b185
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 15, 2026
210bc2e
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 15, 2026
00a0fc6
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 15, 2026
091d2f0
Apply debug.callback + NaN-poisoning changes for shared-JIT Q_and_F
hmgaudecker Apr 15, 2026
d17c670
Remove xfail from test_incomplete_per_target_reachable_target
hmgaudecker Apr 15, 2026
e2e6030
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 15, 2026
6956a5c
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 15, 2026
3a72673
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 15, 2026
b168b84
Move incomplete target check outside JIT to preserve compilation cache
hmgaudecker Apr 16, 2026
4f18ef0
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 16, 2026
d3d6e68
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 16, 2026
072731d
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 16, 2026
ce46f9c
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 16, 2026
22a6d1d
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 16, 2026
d402cf6
Drop unused incomplete_targets from get_Q_and_F and grouping key
hmgaudecker Apr 16, 2026
f01ec16
Make compute_intermediates JIT-compiled via productmap; drop CPU fall…
hmgaudecker Apr 16, 2026
6d7ce6a
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 16, 2026
baf9396
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 16, 2026
f2ed944
Replace stray np usage with jnp in _enrich_with_diagnostics
hmgaudecker Apr 16, 2026
61b4864
Add max_compilation_workers parameter to Model.simulate()
hmgaudecker Apr 16, 2026
a8dc3ed
Fix incomplete-target validation: cover self-transitions, clarify errors
hmgaudecker Apr 16, 2026
e224fb6
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 16, 2026
ea8aa18
Guard JAX_COMPILATION_CACHE_DIR default against missing home directory
hmgaudecker Apr 16, 2026
a271618
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 16, 2026
e354895
Improve state-column errors and move discrete sentinel to module scope
hmgaudecker Apr 16, 2026
41ddbe3
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 16, 2026
ec96c60
Sync compute_intermediates with get_Q_and_F, clean up stale docs
hmgaudecker Apr 16, 2026
cb5b14a
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 16, 2026
e19346d
Simplify target partitioning and re-apply upstream validator fixes
hmgaudecker Apr 16, 2026
d8b9a0d
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 16, 2026
9b01969
Review follow-ups on parallel-AOT compilation
hmgaudecker Apr 16, 2026
fdf4e2a
Narrow _ShockGrid through walrus, use RegimeName consistently
hmgaudecker Apr 17, 2026
2511a83
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 17, 2026
9acfb17
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 17, 2026
743a62c
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
26fdf08
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
1834e29
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
85d1a9f
Rename regime-name loop variable to `regime_name` in get_Q_and_F
hmgaudecker Apr 17, 2026
f7af008
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 17, 2026
c95725b
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 17, 2026
3126d64
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
77f913d
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
d08b2be
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
5bf49aa
Clarify incomplete-target validation entry point in comment
hmgaudecker Apr 17, 2026
e9202b9
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 17, 2026
133606b
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 17, 2026
13ada7e
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
56d12d2
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
57a7d72
Drop redundant internal_regime parameter from transition validators
hmgaudecker Apr 17, 2026
199e83c
Merge branch 'fix/skip-unreachable-targets' into improve/jax-settings
hmgaudecker Apr 17, 2026
e413c62
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 17, 2026
738caab
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
65f9fc4
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
b124121
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
7f0342a
Merge branch 'main' into improve/jax-settings
hmgaudecker Apr 17, 2026
3f06e9b
Merge branch 'improve/jax-settings' into fix/heterogeneous-initial-co…
hmgaudecker Apr 17, 2026
afc901a
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
1de27ec
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
5a21d33
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
09a6dad
Merge branch 'main' into fix/heterogeneous-initial-conditions
hmgaudecker Apr 17, 2026
464e2ce
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
9fde26c
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
91056a3
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
f8963e1
Reorder tests/test_regime_state_mismatch.py for minimal diff vs main
hmgaudecker Apr 17, 2026
d4f0aa8
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
51e7082
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
860f9b5
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
e3aa514
Allow H to shadow state/action names in its signature
hmgaudecker Apr 17, 2026
5cb3b9d
Merge branch 'feature/h-allows-state-shadowing' into improve/parallel…
hmgaudecker Apr 17, 2026
ce595c0
Drop redundant `compute_regime_transition_probs is not None` asserts
hmgaudecker Apr 17, 2026
4f1d8f0
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
f3dccc8
Fuse compute_intermediates with on-device reductions in a single JIT
hmgaudecker Apr 17, 2026
249f603
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
b9d087d
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
df7ff24
Add Google-style Args/Returns to lazy-diagnostics helpers
hmgaudecker Apr 17, 2026
badfb67
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
1b98c67
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
fabcd87
Address sub-80 code-review findings on #315.
hmgaudecker Apr 17, 2026
4a7ec0c
Merge branch 'fix/heterogeneous-initial-conditions' into improve/lazy…
hmgaudecker Apr 17, 2026
9e62d63
Address sub-80 code-review findings on #317.
hmgaudecker Apr 17, 2026
2ccd90b
Add end-to-end NaN diagnostic test (exposes diagnostic-path regression).
hmgaudecker Apr 17, 2026
b3ab467
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 17, 2026
8a5db22
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 17, 2026
5f482ac
Address sub-80 code-review findings on #319.
hmgaudecker Apr 17, 2026
2dbccad
Merge branch 'main' into improve/lazy-diagnostics
hmgaudecker Apr 18, 2026
511aca3
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 18, 2026
859e328
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 18, 2026
7832e61
Condition NaN diagnostics on feasibility; reorder summary.
hmgaudecker Apr 18, 2026
8caadc8
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 18, 2026
57442fb
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 18, 2026
744d988
Split diagnostic builders into src/lcm/regime_building/diagnostics.py.
hmgaudecker Apr 18, 2026
1f70c42
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 18, 2026
ebd73bc
Consolidate diagnostic builders in src/lcm/regime_building/diagnostic…
hmgaudecker Apr 18, 2026
b68f0f5
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 18, 2026
c2e829c
Add end-to-end NaN diagnostic test (fails on current HEAD).
hmgaudecker Apr 18, 2026
f8a94a2
Wrap compute_intermediates closure with @with_signature (fixes diagno…
hmgaudecker Apr 18, 2026
38d6562
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 18, 2026
e00d711
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 18, 2026
2945765
Let H consume DAG function outputs
hmgaudecker Apr 17, 2026
c10deb6
Drop duplicate test_nan_diagnostics_end_to_end block from #317 cascade.
hmgaudecker Apr 18, 2026
55b55e5
Drop duplicate test_nan_diagnostics_end_to_end block from #318 cascade.
hmgaudecker Apr 18, 2026
ac1908b
Encode discount-factor heterogeneity as a `discount_type` state.
hmgaudecker Apr 18, 2026
fb2ab54
Drop duplicate test_nan_diagnostics_end_to_end (cascade merge leftover).
hmgaudecker Apr 18, 2026
dff30e8
Regenerate f64 Mahler-Yum regression fixture.
hmgaudecker Apr 18, 2026
d16af3c
Annotate `functions` dict in test_custom_aggregator to satisfy ty.
hmgaudecker Apr 18, 2026
38375df
Rename _h_dag_fn / _get_h_dag_fn → _h_dag_func / _get_h_dag_func.
hmgaudecker Apr 18, 2026
45da18c
Walk H's DAG dependencies in state-usage validation.
hmgaudecker Apr 18, 2026
ee0efcc
Lock in H's permissive kwarg contract via tests.
hmgaudecker Apr 18, 2026
393c217
Made docstring more precise based on review comment.
hmgaudecker Apr 19, 2026
11335e4
Merge branch 'improve/lazy-diagnostics' into improve/shared-jit-compi…
hmgaudecker Apr 19, 2026
62c7ecb
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 19, 2026
961ea5b
Merge branch 'improve/parallel-aot-compilation' into feature/h-consum…
hmgaudecker Apr 19, 2026
28be9b5
Merge branch 'main' into improve/shared-jit-compilation
hmgaudecker Apr 19, 2026
8fa6ff9
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 19, 2026
e0c6175
Merge branch 'improve/parallel-aot-compilation' into feature/h-consum…
hmgaudecker Apr 19, 2026
fa9ca67
Remove stale duplicate _build_compute_intermediates_per_period call.
hmgaudecker Apr 19, 2026
080ca93
Remove stale duplicate _build_compute_intermediates_per_period call.
hmgaudecker Apr 19, 2026
2c60762
Merge branch 'improve/shared-jit-compilation' into improve/parallel-a…
hmgaudecker Apr 19, 2026
d3d398d
Merge branch 'improve/parallel-aot-compilation' into feature/h-consum…
hmgaudecker Apr 19, 2026
b734391
Merge branch 'main' into improve/parallel-aot-compilation
hmgaudecker Apr 19, 2026
2ae0803
Merge branch 'improve/parallel-aot-compilation' into feature/h-consum…
hmgaudecker Apr 19, 2026
b39aab6
Merge branch 'main' into feature/h-consumes-dag-outputs
hmgaudecker Apr 19, 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
15 changes: 3 additions & 12 deletions benchmarks/bench_mahler_yum.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,13 @@ def _build(self):
create_inputs,
)

start_params_without_beta = {
k: v for k, v in START_PARAMS.items() if k != "beta"
}

self.model = MAHLER_YUM_MODEL
common_params, initial_states, _discount_factor_type = create_inputs(
common_params, initial_states = create_inputs(
seed=0,
n_simulation_subjects=_N_SUBJECTS,
**start_params_without_beta,
**START_PARAMS,
)
self.model_params = {
"alive": {
"discount_factor": START_PARAMS["beta"]["mean"],
**common_params,
},
}
self.model_params = {"alive": common_params}
self.initial_conditions = {
**initial_states,
"regime": jnp.full(
Expand Down
37 changes: 14 additions & 23 deletions docs/examples/mahler_yum_2024.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,35 +27,26 @@ from lcm_examples.mahler_yum_2024 import (
create_inputs,
)

# Build inputs (params, initial states, discount factor types)
start_params_without_beta = {k: v for k, v in START_PARAMS.items() if k != "beta"}
common_params, initial_states, discount_factor_types = create_inputs(
n_subjects = 1_000

# Build inputs: per-subject initial states include `discount_type`
# (small/large), and `params["discount_factor"]["discount_factor_by_type"]`
# carries the two-element beta array that the `discount_factor` DAG
# function indexes with the state.
common_params, initial_states = create_inputs(
seed=7235,
n_simulation_subjects=1_000,
**start_params_without_beta,
n_simulation_subjects=n_subjects,
**START_PARAMS,
)

beta_mean = START_PARAMS["beta"]["mean"]
beta_std = START_PARAMS["beta"]["std"]

# Select initial states with high discount factor type
selected_ids_high = jnp.flatnonzero(discount_factor_types)
initial_states_high = {
state: values[selected_ids_high] for state, values in initial_states.items()
}

# Solve and simulate for high discount factor type
# One solve, one simulate — both discount types are handled inside the
# regime via the `discount_type` state.
result = MAHLER_YUM_MODEL.simulate(
params={
"alive": {
"discount_factor": beta_mean + beta_std,
**common_params,
},
},
params={"alive": common_params},
initial_conditions={
**initial_states_high,
**initial_states,
"regime": jnp.full(
selected_ids_high.shape[0],
n_subjects,
MAHLER_YUM_MODEL.regime_names_to_ids["alive"],
),
},
Expand Down
11 changes: 11 additions & 0 deletions src/lcm/model_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
)
from lcm.params.sequence_leaf import SequenceLeaf
from lcm.regime import Regime
from lcm.regime_building.h_dag import (
get_h_accepted_params,
get_h_dag_target_names,
)
from lcm.regime_building.processing import (
InternalRegime,
process_regimes,
Expand Down Expand Up @@ -205,6 +209,7 @@ def _validate_all_variables_used(regimes: Mapping[str, Regime]) -> list[str]:
Each state or action must appear in at least one of:
- The concurrent valuation (utility or constraints)
- A transition function
- An H-DAG target function (a regime function whose output H consumes)

Args:
regimes: Mapping of regime names to regimes to validate.
Expand All @@ -219,6 +224,11 @@ def _validate_all_variables_used(regimes: Mapping[str, Regime]) -> list[str]:
variable_names = set(regime.states) | set(regime.actions)
user_functions = dict(regime.get_all_functions(phase="solve"))

h_accepted_params = get_h_accepted_params(user_functions)
h_dag_target_names = get_h_dag_target_names(
functions=user_functions, h_accepted_params=h_accepted_params
)

targets = [
"utility",
*list(regime.constraints),
Expand All @@ -228,6 +238,7 @@ def _validate_all_variables_used(regimes: Mapping[str, Regime]) -> list[str]:
if name.startswith("next_")
and not getattr(user_functions[name], "_is_auto_identity", False)
),
*h_dag_target_names,
]
reachable = get_ancestors(
user_functions, targets=targets, include_targets=False
Expand Down
63 changes: 63 additions & 0 deletions src/lcm/regime_building/Q_and_F.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from dags import concatenate_functions, with_signature
from jax import Array

from lcm.regime_building.h_dag import get_h_dag_target_names
from lcm.regime_building.next_state import (
get_next_state_function_for_solution,
get_next_stochastic_weights_function,
Expand Down Expand Up @@ -135,6 +136,13 @@ def get_Q_and_F(
exclude=frozenset(),
)

# Resolve H arguments that are regime-function outputs (e.g. a
# `discount_factor` DAG function that indexes a per-type Series by a
# state). `None` when H only needs state/action/user-param values.
_h_dag_func = _get_h_dag_func(
functions=functions, h_accepted_params=_H_accepted_params
)

@with_signature(
args=arg_names_of_Q_and_F, return_annotation="tuple[FloatND, BoolND]"
)
Expand Down Expand Up @@ -203,6 +211,8 @@ def Q_and_F(
H_kwargs = {
k: v for k, v in states_actions_params.items() if k in _H_accepted_params
}
if _h_dag_func is not None:
H_kwargs |= _h_dag_func(**states_actions_params)
Q_arr = _H_func(utility=U_arr, E_next_V=E_next_V, **H_kwargs)

# Handle cases when there is only one state.
Expand Down Expand Up @@ -301,6 +311,9 @@ def get_compute_intermediates(
_H_accepted_params = frozenset(
get_union_of_args([_H_func]) - {"utility", "E_next_V"}
)
_h_dag_func = _get_h_dag_func(
functions=functions, h_accepted_params=_H_accepted_params
)

arg_names_of_compute_intermediates = _get_arg_names_of_Q_and_F(
[
Expand Down Expand Up @@ -357,6 +370,8 @@ def compute_intermediates(
H_kwargs = {
k: v for k, v in states_actions_params.items() if k in _H_accepted_params
}
if _h_dag_func is not None:
H_kwargs |= _h_dag_func(**states_actions_params)
Q_arr = _H_func(utility=U_arr, E_next_V=E_next_V, **H_kwargs)

return U_arr, F_arr, E_next_V, Q_arr, active_regime_probs
Expand Down Expand Up @@ -536,6 +551,54 @@ def _outer(**kwargs: Float1D) -> FloatND:
)


def _get_h_dag_func(
*,
functions: FunctionsMapping,
h_accepted_params: frozenset[str],
) -> Callable[..., dict[str, Any]] | None:
"""Compile a DAG that resolves H arguments computed by regime functions.

`H` may name any argument supported by regime functions: states,
actions, flat params, or outputs of other user-provided functions.
Names in H's signature are resolved at runtime from, in order:

1. `states_actions_params` (states, actions, and flat params — the
same scalar pool every regime function draws from), and
2. DAG-output functions, compiled here.

This helper handles only (2): for every name in H's signature that
is also a user-provided function, compile a DAG target so its
output can be merged into `H_kwargs` alongside the values supplied
by (1). If no such names exist, return `None`.

Args:
functions: Regime functions (user and generated).
h_accepted_params: Names H accepts beyond `utility` / `E_next_V`.

Returns:
A callable mapping `states_actions_params` kwargs to a dict of
the resolved DAG outputs, or `None` if H needs no DAG outputs.

"""
dag_targets = tuple(
sorted(
get_h_dag_target_names(
functions=functions, h_accepted_params=h_accepted_params
)
)
)

if not dag_targets:
return None

return concatenate_functions(
functions={k: v for k, v in functions.items() if k != "H"},
targets=list(dag_targets),
return_type="dict",
enforce_signature=False,
)


def _get_U_and_F(
*,
functions: FunctionsMapping,
Expand Down
72 changes: 72 additions & 0 deletions src/lcm/regime_building/h_dag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
"""H's DAG-target bookkeeping, shared between runtime and validation.

The default Bellman aggregator `H(utility, E_next_V, discount_factor)` —
and any user-supplied H — may declare parameters that are not
states/actions/user-params but are outputs of regime functions
registered under the same name (e.g. a `discount_factor` DAG function
that indexes a per-type Series by a `discount_type` state).

This module exposes:

- `get_h_accepted_params`: H's signature minus `utility` / `E_next_V`.
- `get_h_dag_target_names`: those H parameters that are *also* regime
functions. Q_and_F compiles these into a runtime DAG;
`_validate_all_variables_used` uses them as reachability targets so
states consumed only via H's DAG dependencies count as "used".
"""

from collections.abc import Callable, Mapping
from typing import Any

from lcm.utils.functools import get_union_of_args


def get_h_accepted_params(
functions: Mapping[str, Callable[..., Any]],
) -> frozenset[str]:
"""H's signature parameters, minus `utility` and `E_next_V`.

Empty when the regime has no `H` (terminal regimes).

Args:
functions: Mapping of regime function names to callables (user
and generated).

Returns:
Frozenset of parameter names H accepts beyond `utility` / `E_next_V`.

"""
h_func = functions.get("H")
if h_func is None:
return frozenset()
return frozenset(get_union_of_args([h_func]) - {"utility", "E_next_V"})


def get_h_dag_target_names(
*,
functions: Mapping[str, Callable[..., Any]],
h_accepted_params: frozenset[str],
) -> frozenset[str]:
"""Names of regime functions whose outputs H consumes via the DAG.

These are H's signature parameters that are also regime functions,
minus `H`, `utility`, `feasibility` (H cannot consume its own
output; `utility` is wired directly from `U_and_F`; `feasibility`
is never a legitimate H input).

Args:
functions: Mapping of regime function names to callables (user
and generated).
h_accepted_params: Names H accepts beyond `utility` / `E_next_V`
(typically the output of `get_h_accepted_params`).

Returns:
Frozenset of regime function names whose outputs are routed
into H at runtime.

"""
return frozenset(h_accepted_params) & set(functions) - {
"H",
"utility",
"feasibility",
}
2 changes: 2 additions & 0 deletions src/lcm_examples/mahler_yum_2024/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
DEAD_REGIME,
MAHLER_YUM_MODEL,
START_PARAMS,
DiscountType,
Education,
Effort,
Health,
Expand All @@ -26,6 +27,7 @@
"DEAD_REGIME",
"MAHLER_YUM_MODEL",
"START_PARAMS",
"DiscountType",
"Education",
"Effort",
"Health",
Expand Down
Loading