uv run demo-1d # → output/demo_1d.gifuv run demo-2d # → output/demo_2d.gifuv run demo-multi-mass # → output/demo_multi_mass.gifuv run demo-multi-mass-2d # → output/demo_multi_mass_2d.gifuv run demo-model-comparison # → output/demo_model_comparison.gifuv run demo-echolocation-3d # → output/demo_echolocation_3d.gifuv run demo-density # → output/demo_density.png
The echolocation range study behind the site page:
uv run scripts/scan_echolocation_range.py --seed-block 0 --workers 8 --per-run
This runs the declared development grid on seeds 0–11. The code locks protected blocks starting at 400 to the scenario-default controls and rejects command-line overrides. Those defaults and the acceptance tolerances are scientifically frozen from the Task 11 development calibration. The 400–411 block was then run exactly once; its tracked results are fixed-case regression evidence, not a population reliability estimate.
Use the library
A complete simulate-then-infer round trip, executed live on this page — if you can read the output below, the install instructions above work:
For fixed-K inference, pass an integer to n_masses; to drive the filter observation-by-observation (e.g. for animation), use build_particle_filter — see The Particle Filter. The position and mass ranges are true support: the point-mass API conditions their uniform rectangle on strict mass ordering and \(|2\Phi|\le0.1\) physical validity.