Development

uv sync
uv run pytest
uv run python tests/make_fixtures.py     # regenerate the test logs
uv run python examples/make_demo.py      # regenerate the sample logs

The test fixtures are small, hand-written logs, one per case: a healthy run, a run that hangs in its coupling setup, two attempts in one file, a generic SLURM job from an unknown code, output without timestamps, and the degenerate cases (empty, truncated, and not a log file at all). No real log is committed, since such files are too large; the figures in this documentation are generated from examples/demo.log.

Module layout

Module

logfile.py

line grammar: timestamps, rank labels, streaming reads

profile.py

loading, composing and detecting YAML profiles

extract.py

one streaming pass over a log, producing a RunLog

tables.py

the two table shapes printed by models and MPI stacks

health.py

conversion of a RunLog into checks and a grade

plots.py

the figures

report.py

HTML, Markdown and PDF rendering

cli.py

discovery, cache, parallelism, the watch loop

Formatting is black via pre-commit:

pre-commit install

Building this documentation

The documentation is Sphinx with MyST Markdown sources under docs/:

uv run --group docs sphinx-build -b html docs docs/_build/html

Open docs/_build/html/index.html. Add -W to turn warnings into errors, which is what the GitHub Actions workflow does before publishing to GitHub Pages on every push to main.

License

BSD 3-Clause. See LICENSE.