Skip to content

quantumbrake/cayenne

Folders and files

NameName
Last commit message
Last commit date
Aug 2, 2020
Aug 22, 2020
Aug 22, 2020
Jul 18, 2020
Sep 14, 2019
Aug 9, 2018
Jul 18, 2020
Nov 18, 2018
Nov 18, 2018
Dec 21, 2019
Jul 18, 2020
Nov 10, 2018
Jul 18, 2020
Aug 22, 2020
Jan 5, 2020
Jul 28, 2019
Jul 18, 2020
Jun 6, 2020
Oct 21, 2021
Aug 15, 2020
Aug 3, 2019
Jul 18, 2020
Dec 1, 2018
Jan 29, 2024
Dec 8, 2022
Aug 22, 2020
Aug 22, 2020
Jul 18, 2020

Repository files navigation

Logo for cayenne

cayenne : Python package for stochastic simulations

Travis Build Status Azure Build Status codecov Updates Documentation Status pypi License Code style: black Gitter chat

Introduction

cayenne is a Python package for stochastic simulations. It offers a simple API to define models, perform stochastic simulations with them and visualize the results in a convenient manner.

Currently under active development in the develop branch.

Install

Install with pip:

$ pip install cayenne

Documentation

Usage

A short summary follows, but a more detailed tutorial can be found here. You can define a model as a Python string (or a text file, see docs). The format of this string is loosely based on the excellent antimony library, which is used behind the scenes by cayenne.

from cayenne.simulation import Simulation
model_str = """
        const compartment comp1;
        comp1 = 1.0; # volume of compartment

        r1: A => B; k1;
        r2: B => C; k2;

        k1 = 0.11;
        k2 = 0.1;
        chem_flag = false;

        A = 100;
        B = 0;
        C = 0;
    """
sim = Simulation.load_model(model_str, "ModelString")
# Run the simulation
sim.simulate(max_t=40, max_iter=1000, n_rep=10)
sim.plot()

Plot of species A, B and C

Change simulation algorithm

You can change the algorithm used to perform the simulation by changing the algorithm parameter (one of "direct", "tau_leaping" or "tau_adaptive")

sim.simulate(max_t=150, max_iter=1000, n_rep=10, algorithm="tau_leaping")

Our benchmarks are summarized below, and show direct to be a good starting point. tau_leaping offers greater speed but needs specification and tuning of the tau hyperparameter. The tau_adaptive is less accurate and a work in progress.

Run simulations in parallel

You can run the simulations on multiple cores by specifying the n_procs parameter

sim.simulate(max_t=150, max_iter=1000, n_rep=10, n_procs=4)

Accessing simulation results

You can access all the results or the results for a specific list of species

# Get all the results
results = sim.results
# Get results only for one or more species
results.get_species(["A", "C"])

You can also access the final states of all the simulation runs by

# Get results at the simulation endpoints
final_times, final_states = results.final

Additionally, you can access the state a particular time point of interest t . cayenne will interpolate the value from nearby time points to give an accurate estimate.

# Get results at timepoint "t"
t = 10.0
states = results.get_state(t) # returns a list of numpy arrays

Benchmarks

direct tau_leaping tau_adaptive
cayenne ✔️ Most accurate yet ✔️ Very fast but may need manual tuning Less accurate than GillespieSSA's version
Tellurium ❗ Inaccurate for 2nd order N/A N/A
GillespieSSA Very slow ❗ Inaccurate for initial zero counts ❗ Inaccurate for initial zero counts
BioSimulator.jl ❗ Inaccurate interpolation ❗ Inaccurate for initial zero counts ❗ Inaccurate for initial zero counts

License

Copyright (c) 2018-2020, Dileep Kishore, Srikiran Chandrasekaran. Released under: Apache Software License 2.0

Credits