Every run leaves a wake. Log it, version it, and pull it back later. A toolchain to track, store, and analyze the data your simulations leave behind.
$ pip install sillon
Log a run from your sim with sillonpy, query the history with sillonlab, or reach for the sillon CLI.
import sillonpy as sp import numpy as np # start a run — params, results, figures & source are tracked sp.init(run_name="my_fit", project_name="lattice-mbl") sp.add_tag("quasicrystal") x = np.linspace(0, 10, 100) sp.log_param("grid", 512) sp.log_result("coef", np.polyfit(x, evolve(x), 1)) # arrays → HDF5 # ↳ run my_fit sealed on exit · coef stored in the glob
import sillonlab as sl # load the project store and query its history project = sl.load_project() runs = project.query(tags="quasicrystal", results={"coef": lambda v: v[0] < 0}) df = runs.to_dataframe(results=True) # tidy DataFrame coef = project.get("my_fit").load_result("coef") # arrays back # ↳ 14 runs matched · cheap filters first, globs only on survivors
# inspect the trail without opening python $ sillon context # overview of all runs $ sillon show my_fit -p -r # full run detail $ sillon compare my_fit my_fit_2 # diff two runs $ sillon grab my_fit -r coef # pull a result to disk Run name Timestamp Params Status my_fit 2026-06-01 10:00:00 2 SUCCESS my_fit_2 2026-06-02 14:20:00 2 SUCCESS
Drop a couple of lines into a sim and every param, result, figure, and the source itself is recorded. The run seals automatically when it finishes.
Query runs by params, metadata, tags, date, or result values, diff configs, and pull arrays straight back into memory. Your history is addressable.
A CLI for the trail — search, show, compare, grab, report, and prune runs from the terminal without writing a line of glue code.