reproduce.sh

# 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