%global _empty_manifest_terminate_build 0 Name: python-stochastic-arrow Version: 0.5.2 Release: 1 Summary: please add a summary manually as the author left a blank one License: MIT URL: https://github.com/CovertLab/arrow Source0: https://mirrors.aliyun.com/pypi/web/packages/54/d1/23afc4b2349578db96085c8ed6ee94e407ebc82b39275f707120baa075ae/stochastic-arrow-0.5.2.tar.gz BuildArch: noarch %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](https://en.wikipedia.org/wiki/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 run `pip install stochastic-arrow` to install it [from PyPI](https://pypi.org/project/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: ```python 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: ```python # This gives the initial state of the system (counts of each molecular species, # for instance). import numpy as np 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 ```python result = system.evolve(duration, state, 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: ```python from arrow import reenact_events history = reenact_events(stoichiometry, result['events'], state) ``` ## Testing `arrow` uses [pytest](https://docs.pytest.org/en/latest/). 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 More examples: > python -m arrow.test.test_hang > pytest -m arrow/test/test_arrow.py > pytest -k flagella ## Changelog ### Version 0.5.2 * Update to Cython 0.29.34. (Cython 3.0.0 is now in beta.) ### Version 0.5.1 * Update to Cython 3.0.0a11 for compatibility with Python 3.11. Add `arrow.pxd` to work around a Cython 3.0.0 bug. * Stop using deprecated `numpy.distutils` to avoid warnings and prepare for its removal in Python 3.12. * Make `test_arrow.py --plot` compatible with Python 3. * Fix `PytestReturnNotNoneWarning` warnings from pytest 7.2.0. ### Version 0.5.0 * Add the arrow_hang unit test which catches a nasty edge-case (Issue #48), fix the bug, and make the code more robust to some other potential bugs. ### Version 0.4.4 * Can pickle StochasticSystem instances. ### Version 0.3.0 * Introduced backwards-incompatible API change for supplying rates at `evolve()` time rather than `__init__()` for `StochasticSystem`. %package -n python3-stochastic-arrow Summary: please add a summary manually as the author left a blank one Provides: python-stochastic-arrow BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-stochastic-arrow # 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](https://en.wikipedia.org/wiki/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 run `pip install stochastic-arrow` to install it [from PyPI](https://pypi.org/project/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: ```python 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: ```python # This gives the initial state of the system (counts of each molecular species, # for instance). import numpy as np 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 ```python result = system.evolve(duration, state, 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: ```python from arrow import reenact_events history = reenact_events(stoichiometry, result['events'], state) ``` ## Testing `arrow` uses [pytest](https://docs.pytest.org/en/latest/). 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 More examples: > python -m arrow.test.test_hang > pytest -m arrow/test/test_arrow.py > pytest -k flagella ## Changelog ### Version 0.5.2 * Update to Cython 0.29.34. (Cython 3.0.0 is now in beta.) ### Version 0.5.1 * Update to Cython 3.0.0a11 for compatibility with Python 3.11. Add `arrow.pxd` to work around a Cython 3.0.0 bug. * Stop using deprecated `numpy.distutils` to avoid warnings and prepare for its removal in Python 3.12. * Make `test_arrow.py --plot` compatible with Python 3. * Fix `PytestReturnNotNoneWarning` warnings from pytest 7.2.0. ### Version 0.5.0 * Add the arrow_hang unit test which catches a nasty edge-case (Issue #48), fix the bug, and make the code more robust to some other potential bugs. ### Version 0.4.4 * Can pickle StochasticSystem instances. ### Version 0.3.0 * Introduced backwards-incompatible API change for supplying rates at `evolve()` time rather than `__init__()` for `StochasticSystem`. %package help Summary: Development documents and examples for stochastic-arrow Provides: python3-stochastic-arrow-doc %description help # 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](https://en.wikipedia.org/wiki/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 run `pip install stochastic-arrow` to install it [from PyPI](https://pypi.org/project/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: ```python 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: ```python # This gives the initial state of the system (counts of each molecular species, # for instance). import numpy as np 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 ```python result = system.evolve(duration, state, 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: ```python from arrow import reenact_events history = reenact_events(stoichiometry, result['events'], state) ``` ## Testing `arrow` uses [pytest](https://docs.pytest.org/en/latest/). 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 More examples: > python -m arrow.test.test_hang > pytest -m arrow/test/test_arrow.py > pytest -k flagella ## Changelog ### Version 0.5.2 * Update to Cython 0.29.34. (Cython 3.0.0 is now in beta.) ### Version 0.5.1 * Update to Cython 3.0.0a11 for compatibility with Python 3.11. Add `arrow.pxd` to work around a Cython 3.0.0 bug. * Stop using deprecated `numpy.distutils` to avoid warnings and prepare for its removal in Python 3.12. * Make `test_arrow.py --plot` compatible with Python 3. * Fix `PytestReturnNotNoneWarning` warnings from pytest 7.2.0. ### Version 0.5.0 * Add the arrow_hang unit test which catches a nasty edge-case (Issue #48), fix the bug, and make the code more robust to some other potential bugs. ### Version 0.4.4 * Can pickle StochasticSystem instances. ### Version 0.3.0 * Introduced backwards-incompatible API change for supplying rates at `evolve()` time rather than `__init__()` for `StochasticSystem`. %prep %autosetup -n stochastic-arrow-0.5.2 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "\"/%h/%f\"\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "\"/%h/%f.gz\"\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-stochastic-arrow -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Tue Jun 20 2023 Python_Bot - 0.5.2-1 - Package Spec generated