# SPDX-License-Identifier: AGPL-3.0-only
# Copyright (C) 2026 SWGY, Inc.
# 1. Generate the synthetic benchmark (baseline scenario)
uv run iohmm-evac simulate \
--scenario baseline --seed 0 \
--output ./output/baseline.parquet
# 2. Fit the IO-HMM with random initialization, 10 restarts
uv run iohmm-evac fit \
--input ./output/baseline.parquet \
--output ./output/fit/ \
--restarts 10 --seed 0
# 3. Compute recovery diagnostics
uv run iohmm-evac diagnose recovery \
--fit ./output/fit/ \
--truth ./output/baseline.parquet
# 4. Generate baseline figures (occupancy, trajectories, departures, emissions)
uv run iohmm-evac report all \
--input ./output/baseline.parquet \
--output-dir ./output/figures/
# 5. Generate recovery figures
uv run iohmm-evac report recovery-confusion \
--fit ./output/fit/ \
--truth ./output/baseline.parquet \
--output ./output/figures/recovery_confusion.png
uv run iohmm-evac report parameter-recovery \
--fit ./output/fit/ \
--truth ./output/baseline.parquet \
--output ./output/figures/parameter_recovery.png
# 6. Run scenario sweep across all four scenarios
uv run iohmm-evac sweep run \
--output-dir ./output/sweep/ \
--seed 0
# 7. Generate sweep comparison figures
uv run iohmm-evac report sweep-all \
--input-dir ./output/sweep/ \
--output-dir ./output/figures/
# 8. Run the parametric bootstrap (~10 minutes on 12 cores)
uv run iohmm-evac bootstrap fit \
--input ./output/baseline.parquet \
--warm-start ./output/fit/ \
--output-dir ./output/bootstrap/fits/ \
--n-replicates 50 --jobs -1 --seed 0
# 9. Run the warning-shift sweep on the bootstrap replicates
uv run iohmm-evac bootstrap shift-sweep \
--bootstrap-dir ./output/bootstrap/fits/ \
--output ./output/bootstrap/shift_sweep.parquet \
--seed 0
# 10. Generate the bootstrap-band figure
uv run iohmm-evac report bootstrap-bands \
--input ./output/bootstrap/shift_sweep.parquet \
--output ./output/figures/bootstrap_bands.png