v0.1.0a1
Pre-release
Pre-release
First public alpha of PYSTILT — a typed Python implementation of the
R-STILT framework for Stochastic
Time-Inverted Lagrangian Transport modeling.
Core transport
Receptor— typed release point with support for single-point, multi-point,
and vertical-column configurations; AGL and MSL altitude referencesSimulation— runs HYSPLIT, reads back trajectories, and computes footprints
in a single object; lazy I/O with parquet trajectories and netCDF footprintsTrajectories— particle-track container with plume-dilution weighting
(hnf_plume) and self-describing Arrow/parquet serializationFootprint— rasterized surface-influence function with Gaussian smoothing,
time integration, domain clipping, and named multi-footprint supportModel— project-level coordinator; owns receptors, met sources, config,
output index, and execution dispatch
Configuration
ModelConfig— flat YAML project config; all transport, met, footprint, and
execution parameters in one fileSTILTParams/TransportParams/ErrorParams— typed parameter objects
that map directly to HYSPLITSETUP.CFGentries; config-time validation
(e.g.hnf_plumecross-checksvarsiwantcolumns at construction)FootprintConfig— grid, projection, smoothing, and time-integration spec
with a content-addressed hash for output namingMetConfig— ARL met archive configuration with optional subgrid extraction
HYSPLIT interface
- Bundled
hycs_stdbinaries for Linux and macOS (Apple Silicon supported via
Rosetta 2); custom binary path accepted viaexe_dir HYSPLITDriver— writesCONTROLandSETUP.CFG, symlinks data files,
streams stdout to a log, and parsesPARTICLE_STILT.DAT- Error-trajectory support via
WINDERR/ZIERR/ZICONTROL - Process-group cleanup with
SIGTERM→SIGKILLescalation on timeout
Execution
- Local parallel execution (joblib) for notebook and workstation use
- Slurm array-job executor for HPC clusters
- Pull-mode workers over a claim-capable PostgreSQL index (
stilt pull-worker,
stilt serve) for distributed streaming pipelines - Push-mode chunk dispatch for immutable Slurm batch runs
- Kubernetes executor scaffolding (not yet functional)
Output storage and indexing
- SQLite index (default, WAL mode, NFS-safe) and PostgreSQL index for
distributed workers; upsert-idempotent registration LocalStoreandFsspecStorefor local and cloud (S3/GCS/ABS) output roots- Content-addressed footprint naming; simulation status tracking with
failure-reason extraction from HYSPLIT logs
Observations (stilt.observations)
ObservationandScenecontainers for normalized measurement data- Sensor helpers, receptor builders, and line-of-sight geometry for slant-path
columns (X-STILT style) - Footprint-weighted concentration operators and uncertainty propagation
- First-order chemistry and vertical-operator particle transforms
CLI
stilt run/stilt submit— local and HPC dispatchstilt pull-worker/stilt serve— claim-based worker and REST servicestilt register— register receptors against an existing project indexpython -m stiltalias
Tests
- R-STILT parity: 20 fidelity scenarios in
tests/fixtures/r_stilt_reference.py
validate PYSTILT footprints against a pinned commit of
uataq/stilt (e2feb358) atrtol=1e-7
per cell; scenarios cover point/column/multipoint receptors, 6 h and 24 h
backward runs, forward runs, HNF plume dilution on/off, smoothing factors
0–2, longlat and UTM projected grids, AGL/MSL altitude references, winter
and summer HRRR meteorology, hourly and integrated time bins, and error
trajectories withsiguverr - Synthetic footprint tests: hand-crafted particle DataFrames in
tests/r_stilt/test_footprint_synth.pyisolate specific code paths
(single-particle Gaussian, boundary fenceposts, dateline crossing, global
grid, latitude bandwidth scaling) - Unit and integration tests cover HYSPLIT driver, config validation,
meteorology staging, output storage, SQLite and PostgreSQL index backends,
execution dispatch, and the observation layer