Skip to main content

sillon

Git for simulations — log, track and query your simulation runs.

PyPI Python License


You ran the simulation four months ago. The figure is in the paper draft. Which parameters produced it, and is the array it was plotted from still on disk?

sillon answers that. It records the parameters, results, figures, metadata and source of every run into a local store, and gives you a CLI and a Python API to query them afterwards. It is local-first, needs no server and no account, and is built for people who run parameter sweeps rather than training loops.

pip install sillon

Log a run

Three lines in a script you already have:

import sillonpy as sp

with sp.track_run(run_name="my_fit", project_name="demo"):
    sp.log_param("degree", 1)                  # what you chose
    coef = np.polyfit(x, y, 1)
    sp.log_result("coef", coef)                # what came out
    sp.add_tag("baseline")

Run it normally. No setup step, no sillon init — the first call creates .sillon/ next to your script. Large arrays go to HDF5 automatically; runs are never overwritten.

Look at it

sillon context            # every run in the project
sillon show my_fit        # one run in detail
sillon projects           # every project on this machine, and where it is
╭─ Project ──────────────────────────────────────────────────────╮
│  10 runs logged in the project                                 │
│                                                                │
│    ID          Run Name        When       Params  Assets  Status   │
│  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   │
│    39629020    trusting_cannon just now     2       2    SUCCESS   │
│    7e7e5330    happy_perlman   just now     2       2    CRASHED   │
╰────────────────────────────────────────────────────────────────╯

Query it

Plain Python — no query language:

import sillonlab as sl

project = sl.load_project()

best = project.query(
    tags="sweep",
    parameters={"degree": lambda d: d <= 3},   # cheap: filtered in SQL
    results={"rmse": lambda v: v < 0.1},       # heavy: only on what survived
).sort_by("rmse")[:5]

print(best.to_dataframe())

What makes it different

The record is trustworthy. A run that crashed is recorded as CRASHED, with the exception type and message — never as a success. A log call that fails raises instead of silently dropping your data.

Figures remember their data. log_figure(fig, used=["coef", "degree"]) records what drew the plot, so sillon show -f can tell you months later:

fit  ← built from: coef, degree

Runs remember their ancestry. track_run(inherit="baseline") records a lineage edge you can walk with sillon lineage, run.parents() and run.children().

Files remember their run. Everything is content-hashed, so sillon whose figures/fit.png tells you which run produced a file you found.

It stays out of the way. Zero configuration, a background daemon you never start, and heavy arrays offloaded without you thinking about it.

Documentation

Quickstart five minutes, end to end
Core concepts the mental model — read once
Logging runs the whole logging API
Querying and analysis working with many runs
Provenance and lineage figures, ancestry, hashes
CLI reference every command
Troubleshooting when something breaks

Runnable examples: a quickstart, a parameter sweep, and figure provenance.

Requirements

Python 3.11+, Linux or macOS. Windows is not supported yet — the client and the daemon talk over a Unix domain socket.

How it works

Your script sends what it logs to a small per-project background daemon, which writes to SQLite (light values, so filtering is fast) and HDF5 (heavy arrays). The CLI and sillonlab both read through one engine, so they never disagree. See Architecture.

Status and roadmap

The logging API, the daemon, the CLI and the analysis library are in daily use.

Not implemented yet, despite appearing in older notes: sillon run (reproduction), sillon watch, sillon estimate, a GUI, Slurm integration, and non-Python clients. If a command is not in the CLI reference, it does not exist.

Contributing

git clone https://github.com/balerat/sillon
cd sillon
pip install -e ".[dev]"
make test

See Contributing and Development setup.

License

Apache-2.0. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sillon-1.3.6.tar.gz (96.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sillon-1.3.6-py3-none-any.whl (110.7 kB view details)

Uploaded Python 3

File details

Details for the file sillon-1.3.6.tar.gz.

File metadata

  • Download URL: sillon-1.3.6.tar.gz
  • Upload date:
  • Size: 96.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sillon-1.3.6.tar.gz
Algorithm Hash digest
SHA256 e3990b5de69e38ca608e44a50d9897f5dc7229b98efdc16e079e77f43dd40fce
MD5 f4e0d1e85016cdc878034c83c5cb33d4
BLAKE2b-256 6cfdbe3903ad1cd6f98916a3eab7dbffa41ee200b36069ef1044ff087e81b8fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for sillon-1.3.6.tar.gz:

Publisher: publish.yml on balerat/sillon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sillon-1.3.6-py3-none-any.whl.

File metadata

  • Download URL: sillon-1.3.6-py3-none-any.whl
  • Upload date:
  • Size: 110.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sillon-1.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 6d373f4846199c0d13b064b680738e0c8d04e2fc0bf305a8112b874256260680
MD5 85b248a878b289cd07fd6e1a925cf6fa
BLAKE2b-256 c032bab9faf5e2accf379a8d484113bef463be586ee68aaca96c96068a3d3ee2

See more details on using hashes here.

Provenance

The following attestation bundles were made for sillon-1.3.6-py3-none-any.whl:

Publisher: publish.yml on balerat/sillon

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.3.6 This release

2 files

1.3.5

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.6

2 files

1.2.5

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.1.2

2 files

1.1.0

2 files

1.0.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page