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.2.2.tar.gz (35.1 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.2.2-py3-none-any.whl (47.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for benchtop-0.1.2.2.tar.gz
Algorithm Hash digest
SHA256 aeafd3e2350e841b99be878eed2f539299fe0fd4c22b15eacadf125594900e52
MD5 7c7d4974371ba7f05afe66dd842d0eb8
BLAKE2b-256 24b516428dc3f2579087156f83c7330f3d78c482bca8965f268e43c7931fd650

See more details on using hashes here.

Provenance

The following attestation bundles were made for benchtop-0.1.2.2.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.2.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for benchtop-0.1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a7baafbbbc1aad37c491e597a2659fcf5136cae7b9e464759ccdedceb8a4de8e
MD5 96c7fc79ac43c0672ebb8cc76039cf91
BLAKE2b-256 7739272fc1dc1d0a13be1a7301f9482878343f2641c7f1098f745b9a983e6f2d

See more details on using hashes here.

Provenance

The following attestation bundles were made for benchtop-0.1.2.2-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

This release

0.1.2.2 This release

2 files

0.1.2.1

2 files

0.1.2

2 files

0.1.1

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