Skip to main content

No project description provided

Project description

Arrow

“... even if the previous millisecond is closer to us than the birth of the universe, it is equally out of reach.” ― Jean-Christophe Valtat, Luminous Chaos

Concept

This library implements a generalized version of the Gillespie Algorithm, a stochastic approach to numerically solving discrete systems. Each iteration, the algorithm will calculate the propensities for each reaction given a rate and the counts of the reactants present in the current state of the system, then selects one reaction to occur and the interval of time between the previous reaction and the current reaction. Iterating this produces a trajectory (or history) of the state vector over the course of the simulation.

Installation

Add the following to your requirements.txt, or pip install stochastic-arrow:

stochastic-arrow

Usage

The arrow library presents a single class as an interface, StochasticSystem, which operates on a set of reactions (encoded as a numpy matrix of stoichiometrix coefficients) and associated reaction rates:

from arrow import StochasticSystem
import numpy as np

# Each row is a reaction and each column is a molecular species (or other
# entity). The first reaction here means that the first and second elements
# combine to create the third, while the fourth is unaffected.
stoichiometric_matrix = np.array([
    [1, 1, -1, 0],
    [-2, 0, 0, 1],
    [-1, -1, 1, 0]], np.int64)

# Once we have a matrix of reactions, we can
# construct the system.
system = StochasticSystem(stoichiometric_matrix)

Now that the system has been instantiated, we can invoke it with any initial state vector and set of reaction rates and then run it for a given time interval:

# This gives the initial state of the system (counts of each molecular species,
# for instance).
state = np.array([1000, 1000, 0, 0])

# We also specify how long we want the simulation to run. Here we set it to one
# second.
duration = 1

# Each reaction has an associated rate for how probable that reaction is.
rates = np.array([3.0, 1.0, 1.0])

Once we have an initial state and rates, we can run the simulation for the given duration. evolve returns a dictionary with five keys:

  • steps - the number of steps the simulation took
  • time - at what time point each event took place
  • events - the events that occurred
  • occurrences - the number of times each event occurred (derived directly from events)
  • outcome - the final state of the system
result = system.evolve(state, duration, rates)

If you are interested in the history of states for plotting or otherwise, these can be derived from the list of events and the stoichiometric matrix, along with the inital state. reenact_events will do this for you:

from arrow import reenact_events

history = reenact_events(stoichiometry, result['events'], state)

Testing

arrow uses pytest. To test it:

> make clean compile
> pytest

NOTE: make compile without an explicit clean might not fully build the extension.

There are more command line features in test_arrow:

> python -m arrow.test.test_arrow --complexation

> python -m arrow.test.test_arrow --plot

> python -m arrow.test.test_arrow --obsidian

> python -m arrow.test.test_arrow --memory

> python -m arrow.test.test_arrow --time

Changelog

Version 0.3.0

  • Introduced backwards-incompatible API change for supplying rates at evolve() time rather than __init__() for StochasticSystem.

Project details


Download files

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

Source Distribution

stochastic-arrow-0.4.2.tar.gz (132.8 kB view details)

Uploaded Source

Built Distribution

stochastic_arrow-0.4.2-cp38-cp38-macosx_10_13_x86_64.whl (83.4 kB view details)

Uploaded CPython 3.8 macOS 10.13+ x86-64

File details

Details for the file stochastic-arrow-0.4.2.tar.gz.

File metadata

  • Download URL: stochastic-arrow-0.4.2.tar.gz
  • Upload date:
  • Size: 132.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for stochastic-arrow-0.4.2.tar.gz
Algorithm Hash digest
SHA256 fcb859cb82d0007bdf144b75e7f77e6799e3ba1f8b1b5e70fb984b49389cc130
MD5 0b36523c4bc82c080e878eb26deab837
BLAKE2b-256 3e42bac49ee9d97c23aed76bcd402b55559dc84d7d8fdd37188ff32668d07b6d

See more details on using hashes here.

File details

Details for the file stochastic_arrow-0.4.2-cp38-cp38-macosx_10_13_x86_64.whl.

File metadata

  • Download URL: stochastic_arrow-0.4.2-cp38-cp38-macosx_10_13_x86_64.whl
  • Upload date:
  • Size: 83.4 kB
  • Tags: CPython 3.8, macOS 10.13+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for stochastic_arrow-0.4.2-cp38-cp38-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9e76fc0ada9d6c1af6edaac2c2e938c8f99df6c1f9d9c3ddd4b47ca5489dc7ac
MD5 6790acc91f8018449364c9a2dfc35d67
BLAKE2b-256 c66b8a41e7d83bb2faff864826968d60a4a4875934b3850677e0d7e2a72b3055

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page