Skip to main content
        .   °                .......                                     °   
       |  |                :.   .:                                   (   )
       | °  |                .'   '.                                    |°  |
       |° . |                |     |                                     ° \
      (______)               `_____'                                  (_______) 
▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
  ▄▄▄▄▄▄▄▄▄   ▄▄▄▄▄▄▄▄▄▄  ▄▄          ▄▄▄▄▄▄▄▄▄▄            ▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄▄ 
 ▐░░░░░░░░░▌ ▐░░░░░░░░░░▌▐░░▌      ▐░▌▐░░░░░░░░░░▌▐░▌      ▐░▌▐░░░░░░░░░░▌▐░░░░░░░░░░▌▐░░░░░░░░░░▌
 ▐░█▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀ ▐░▌░▌     ▐░▌▐░█▀▀▀▀▀▀▀▀ ▐░▌      ▐░▌ ▀▀▀▀█░█▀▀▀ ▐░█▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀█░▌
 ▐░█▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌   ▐░▌▐░▌         ▐░█▄▄▄▄▄▄█░▌     ▐░▌    ▐░▌      ▐░▌▐░█▄▄▄▄▄▄█░▌
 ▐░░░░░░░░░▌ ▐░░░░░░░░░░▌▐░▌  ▐░▌  ▐░▌▐░▌         ▐░░░░░░░░░░▌     ▐░▌    ▐░▌      ▐░▌▐░░░░░░░░░░▌
 ▐░█▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀ ▐░▌   ▐░▌ ▐░▌▐░▌         ▐░█▀▀▀▀▀▀█░▌     ▐░▌    ▐░▌      ▐░▌▐░█▀▀▀▀▀▀▀▀ 
 ▐░█▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄▄ ▐░▌     ▐░▐░▌▐░█▄▄▄▄▄▄▄▄ ▐░▌      ▐░▌     ▐░▌    ▐░█▄▄▄▄▄▄█░▌▐░▌          
 ▐░░░░░░░░░▌ ▐░░░░░░░░░░▌▐░▌      ▐░░▌▐░░░░░░░░░░▌▐░▌      ▐░▌     ▐░▌    ▐░░░░░░░░░░▌▐░▌          
  ▀▀▀▀▀▀▀▀▀   ▀▀▀▀▀▀▀▀▀▀          ▀▀  ▀▀▀▀▀▀▀▀▀▀                       ▀▀▀▀▀▀▀▀▀▀             

Benchtop

Parallel in-silico experiments for biological models

Benchtop runs simulation benchmarks defined in a PEtab-inspired format. Given a YAML configuration and companion TSV/SBML files, it schedules conditions in dependency order, simulates across multiple CPU cores, caches intermediate results, and computes observables for model–data comparison.

Documentation

Full documentation: https://benchtop.readthedocs.io/en/latest/

Sphinx sources live in docs/. To build locally after pip install -e ".[docs]":

python -m sphinx -b html docs docs/_build/html

Features

  • PEtab-style benchmarks — Define experiments with YAML plus standard TSV files for conditions, measurements, observables, and parameters.
  • Parallel execution — Distributes simulation tasks across processes using a round-robin worker pool.
  • Preequilibration support — Topologically sorts conditions so preequilibration runs before dependent simulations.
  • Single-cell replication — Run multiple stochastic replicates per condition via cell_count.
  • Result caching — Persists per-simulation pickle files and a cache index; supports resuming incomplete runs.
  • Observable calculation — Evaluates observable formulas from simulation trajectories and aligns them with experimental measurements.
  • Pluggable simulators — Built-in Tellurium wrapper; optional AMICI support via extras.

How it works

flowchart LR
    YAML[Benchmark YAML] --> Loader[FileLoader]
  Loader --> Exp[Experiment]
  Exp --> Org[Organizer]
  Org -->|topological task order| Pool[Worker pool]
  Pool --> Sim[Simulator wrapper]
  Sim --> Cache[ResultCache]
  Cache --> Obs[ObservableCalculator]
  Obs --> Results[results/*.pkl]
  1. FileLoader reads the benchmark YAML and loads PEtab TSV/SBML files into memory.
  2. Organizer builds a dependency-aware task list (conditions × cell replicates) and assigns work to workers.
  3. Workers load the SBML model, apply condition parameters, run preequilibration when needed, and simulate.
  4. ResultCache stores raw trajectories as pickle files alongside a JSON index.
  5. ObservableCalculator downsamples trajectories, evaluates observable formulas, and packages results next to experimental data.

Requirements

Installation

Benchtop is registered on PyPI and pip installable:

pip install benchtop

To build from source,navigate to the repository root:

pip install -e .

For AMICI support (optional):

pip install -e ".[amici]"

This installs the benchtop CLI entry point.

Quick start

Command line

Run a single benchmark:

benchtop experiment -p src/tests/data/LR-benchmark.yaml -s tellurium -c 4

Run all benchmarks in a directory:

benchtop experiment --run_all path/to/benchmarks/ -s tellurium

Useful flags:

Flag Description
-p, --path Path to benchmark YAML
-s, --simulator Simulator backend (tellurium or amici)
-c, --cores Number of parallel processes (default: CPU count)
--cache_dir Directory for simulation cache (default: ./.cache)
--load_index Resume from an existing cache index
--No_Observables Skip observable calculation after simulation
-v, --verbose Enable debug logging

Python API

from benchtop.experiment import Experiment

experiment = Experiment(
    "src/tests/data/LR-benchmark.yaml",
    cores=4,
    cache_dir="./.cache",
    verbose=True,
)

experiment.run("tellurium")
experiment.calculate_observables()

You can also pass a custom simulator class that extends AbstractSimulator instead of a registry name.

A worked example is available in demo/in-silico-experiment-demo.ipynb.

Benchmark configuration

A benchmark is a directory containing a YAML file that references PEtab-style data files. Example (src/tests/data/LR-benchmark.yaml):

format_version: 1
parameter_file: LR Model - Parameters.tsv
problems:
  - name: test-benchmark
    condition_files:
      - conditions.tsv
    measurement_files:
      - measurements.tsv
    observable_files:
      - observables.tsv
    sbml_files:
      - LR-model.xml
    cell_count: 3

Note: The cell_count attribute is only applicable to Benchtop and specifies the number of replicates to simulate per-condition.

Data files

File Purpose
Parameter TSV Model parameters (parameterId, parameterScale, nominalValue, …)
conditions.tsv Simulation conditions — maps conditionId to parameter overrides
measurements.tsv Links observables to conditions, optional preequilibration, and measurement timepoints
observables.tsv Observable definitions (observableId, observableFormula, noiseFormula)
SBML One or more model files (.xml or .sbml)

When preequilibrationConditionId is set in measurements.tsv, Benchtop runs the preequilibration condition first and uses its final state as the initial condition for the simulation.

Results

After observable calculation, results are written as a pickle file in a results/ subdirectory next to the benchmark YAML (named after the problem or today's date). Each entry in the results dictionary contains:

  • conditionId and cell replicate index
  • Per-observable experiment, simulation, and time arrays

Simulators

Benchtop uses a small registry of simulator wrappers in src/wrappers/. Each wrapper implements AbstractSimulator with load, modify, and simulate methods.

Name Class Install
tellurium TelluriumSimulator Included by default
amici AmiciSimulator pip install -e ".[amici]"

To add a new backend, create a wrapper under src/wrappers/ and register it in src/benchtop/registry.py.

Project structure

Benchtop/
├── demo/                          # Jupyter notebook walkthrough
├── src/
│   ├── benchtop/                  # Core library
│   │   ├── experiment.py          # Main experiment orchestrator
│   │   ├── _organizer.py          # Task scheduling and topological sort
│   │   ├── _worker.py             # Per-simulation worker logic
│   │   ├── _record.py             # Results dictionary management
│   │   ├── _results_cacher.py     # Pickle cache and index
│   │   ├── _observable_calculator.py
│   │   ├── _abstract_simulator.py # Simulator interface
│   │   ├── file_loader.py         # YAML and TSV loading
│   │   ├── registry.py            # Simulator lookup
│   │   ├── launcher.py            # CLI entry point
│   │   └── arguments.py           # CLI argument parsing
│   ├── wrappers/                  # Simulator backends
│   └── tests/                     # Test suite and example data
├── pyproject.toml
└── README.md

Running tests

From the repository root:

cd src/tests
python run_tests.py

The test suite uses the LR receptor benchmark in src/tests/data/ and exercises experiment execution, caching, workers, organizers, records, and observable calculation.

Authors

License

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

benchtop-0.1.1.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

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

benchtop-0.1.1-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file benchtop-0.1.1.tar.gz.

File metadata

  • Download URL: benchtop-0.1.1.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for benchtop-0.1.1.tar.gz
Algorithm Hash digest
SHA256 bb6a1fe6a88a081140ab99971e6482c3bcba8314afe92f311b959d62571add34
MD5 cba4c18d1b4922e388f8e8905ca4959a
BLAKE2b-256 cd47c37a4e0e9b85d8a173bda0aaa13d3ae71605b4232300342f76ca31a61b30

See more details on using hashes here.

Provenance

The following attestation bundles were made for benchtop-0.1.1.tar.gz:

Publisher: publish.yml on JonahRileyHuggins/Benchtop

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

File details

Details for the file benchtop-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: benchtop-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 44.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for benchtop-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1e0e48ed0fac032b97f60abda3a112944825878b42825ec3245f93fe247f03c0
MD5 e71027b381925a2db0baa2b457ad9502
BLAKE2b-256 b9b1be9be722ae2e74068fb0ec70f084c63a1da4b913f85a53c94d35da7e3cf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for benchtop-0.1.1-py3-none-any.whl:

Publisher: publish.yml on JonahRileyHuggins/Benchtop

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

Release history Release notifications | RSS feed

0.1.4.1

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2.2

2 files

0.1.2.1

2 files

0.1.2

2 files

This release

0.1.1 This release

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