BANG is a Python package dedicated to analysis, simulation, and control of Boolean networks with the help of CUDA.
- High-performance simulation: GPU-accelerated computations for Boolean network simulations.
- Effective block-based attractor detection (PBN): Efficiently find attractors in large networks.
- Visualization: Built-in support for visualizing network dynamics.
- Parsing: Easy-to-use parsing of PBNs from ASSA-PBN and SBML formats.
BANG is available on PyPI and can be installed using pip. Ensure you have Python 3.10 or higher.
pip install bang-gpu
For the latest development version, you can clone the repository and install it manually. First you need to clone the repository:
git clone https://github.com/zpp20/bang.git
cd bang
Now, you can install the package:
pip install .
You can define a Boolean network using a set of parameters of a Probabilistic Boolean Network. For example:
from bang import PBN
pbn = PBN(
<
A2CA
span class="pl-c"># number of nodes
3,
# number of functions
[1, 1, 1],
# number of parents in functions
[2, 2, 1],
# functions
[[True, True, True, False], [False, True, False, False], [True, False]],
# indexes of the parents in the functions
[[0, 1], [0, 1], [1]],
# probabilities that the functions are chosen
[[1.0], [1.0], [1.0]],
# probability of a random perturbation at any step
0.0,
# initial state
[3],
)
Run a simulation for a specified number of steps:
# Set the initial state (otherwise the default is all False)
pbn.set_initial_state([[True, False, True]])
# Simulate the network for 10 steps
pbn.simple_steps(10)
# Access the simulation history
print("Trajectory history:", pbn.history)
# Access the final state
print("Last state:", pbn.last_state)
If you want to run the simulation on the CPU instead of the GPU:
# Simulate the network on the CPU for 10 steps
pbn.simple_steps(n_steps=10, device="cpu")
To detect attractors in the network, you can use the attractor_detection
method:
# Detect attractors in the network using the block-based method
attractors = pbn.blocks_detect_attractors()
print("Attractors found:", attractors)
You can visualize the state transitions of the network:
# Plot the evolution of the trajectory simulated in the 1st thread
pbn.trajectory_graph(1)
The easiest way to set up all the necessary development dependencies is to use pip
with the dev
extras:
pip install -e ".[dev]"
BANG uses black
for code formatting and isort
for import sorting. It also uses ruff
To ensure code quality, you can run the following commands:
# Format the code
black .
isort .
BANG uses pytest
for testing. To run the tests, you can use the following command:
pytest tests/
BANG uses ruff
for linting. To run the linter, you can use the following command:
ruff check .
In order to release a new version of BANG, you need to follow these steps:
-
Update the version in
pyproject.toml
. -
Commit the changes with a message like "Bump version to X.Y.Z".
-
Tag the commit with the new version number:
git tag vX.Y.Z
. Beware that the tag must be in the formatvX.Y.Z[-prerelease]
(e.g.,v1.0.0
). -
Push the changes and the tag to the remote repository:
git push origin main --tags
.
-
If the tag indicates a pre-release version and is not on the main branch, CD will deploy the package to TestPyPI.
-
If the commit is on main and the tag does not contain a prerelease version, it will be deployed to PyPI.