Model Revision tool for computing Boolean network repair operations.
Project description
pymodrev: A python Model Revision tool for Boolean logical models
pymodrev is a Python-based reimplementation of ModRev, a tool for automated consistency checking and repair of Boolean network models using Answer Set Programming (ASP). Given a Boolean model and a set of experimental observations (steady-state or time-series), pymodrev determines whether the model explains the data. If inconsistencies are found, it identifies minimal repair operations to fix the model.
Built on top of the Clingo ASP solver and the pyfunctionhood library, pymodrev brings modern usability and extensibility to the model revision process by offering:
- ✅ Full parity with ModRev's core logic, using the same ASP encodings
- ✅ Modular architecture with pluggable update policies (synchronous, asynchronous, complete, steady-state)
- ✅ Pure Python interface, ideal for integration with scientific workflows
- ✅ In-memory model and observation management, enabling multiple consistency checks without reloading
- ✅ Command-line interface for batch processing and reproducibility
Install
You can install pymodrev directly from source or via PyPI.
To install from source (when you are inside the pymodrev directory):
$ pip install .
To install from PyPI:
$ pip install pymodrev
This will automatically install dependencies like bitarray, pyfunctionhood, and clingo.
Getting Started
Boolean models can be specified using the following formats:
.lp- using original ModRev ASP encoding.bnet- using the BoolNet format (only boolean rules).ginml/.zginml- using the widely used GINsim format (conserving the model layout information)
To run pymodrev, use the following command structure:
$ pymodrev -h
usage: pymodrev [-h] -m MODEL -obs OBS [UPDATER ...] -t {c,r,m} [--exhaustive-search] [--sub-opt] [--all-opt]
[-v {0,1,2}] [-d]
options:
-h, --help show this help message and exit
-m, --model MODEL Input model file.
-obs, --observations OBS [UPDATER ...]
List of observation files and updater pairs.
Each observation must be followed by its updater type.
Example: -obs obs1.lp asyncupdater obs2.lp syncupdater
-t, --task {c,r,m} Specify the task to perform (default=r):
c - check for consistency
r - get repairs
m - get repaired models
--exhaustive-search Force exhaustive search of function repair operations (default=false).
--sub-opt Show sub-optimal solutions found (default=false).
--all-opt Computes all optimal solutions (default=true).
Stops at first optimal solution if false.
-v, --verbose {0,1,2}
Specify output verbose level (default=2):
0 - compact format
1 - json format
2 - human-readable format
-d, --debug Enable debug mode.
Example: check consistency
Using option -t c, pymodrev will report the minimal set of nodes that need to be repaired in order to make the model consistent with the given observations.
$ pymodrev -m examples/boolean_cell_cycle/03/model.bnet -obs examples/boolean_cell_cycle/03/steadystate.lp steadystateupdater -t c
This network is inconsistent!
node(s) needing repair: "p27", "rb", "cdc20", "cycd"
present in profile(s): "p1"
Example: get repairs
Using option -t r, pymodrev will report the minimal set of repair operations for the model to be consistent with the given observations.
$ pymodrev -m examples/boolean_cell_cycle/03/model.bnet -obs examples/boolean_cell_cycle/03/steadystate.lp steadystateupdater -t r
### Found solution with 4 repair operations.
Inconsistent node p27.
Repair #1:
Change function of p27 to: (cyca && !cycb && cycd && !p27) || (!cycb && !cyce)
Inconsistent node rb.
Repair #1:
Change function of rb to: (!cycb && cycd && !p27) || (!cycb && cycd && cyce) || (!cycb && !cyca)
Inconsistent node cdc20.
Repair #1:
Flip sign of edge (cycb,cdc20) to: positive
Inconsistent node cycd.
Repair #1:
Flip sign of edge (cycd,cycd) to: positive
Example: get repaired models
Using option -t m, pymodrev will apply the repairs to the model and write to disk the repaired models consistent with the given observations.
$ pymodrev -m examples/boolean_cell_cycle/03/model.bnet -obs examples/boolean_cell_cycle/03/steadystate.lp steadystateupdater -t m
Repaired models keep the original name followed by a number, representing the number of minimal alternative repairs. For example, one could have:
model_1.bnet ... model_2.bnet, if there were only two possible minimal repaired models.model_01.bnet ... model_18.bnet, if there were eighteen possible minimal repaired models.
Authors
- Filipe Gouveia (https://github.com/FilipeGouveia)
- Antonio Romeu (https://github.com/antonioromeu)
- Pedro T. Monteiro (https://github.com/ptgm)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pymodrev-0.1.0.tar.gz.
File metadata
- Download URL: pymodrev-0.1.0.tar.gz
- Upload date:
- Size: 88.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16cb4bf274dc09841018de1cb6d0f74029336bcde1d854db5e9020d0daf22dc1
|
|
| MD5 |
dddd15483fedbf8dd3994a722d21fa5d
|
|
| BLAKE2b-256 |
fc51ba681a7a7df0bd303737688c64fadc4e382c6a2aefe4e49d87c4487e8f3f
|
Provenance
The following attestation bundles were made for pymodrev-0.1.0.tar.gz:
Publisher:
python-publish.yml on ptgm/pymodrev
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pymodrev-0.1.0.tar.gz -
Subject digest:
16cb4bf274dc09841018de1cb6d0f74029336bcde1d854db5e9020d0daf22dc1 - Sigstore transparency entry: 1188797940
- Sigstore integration time:
-
Permalink:
ptgm/pymodrev@b33f4e5ea3932f209e6c6841342d96ce54abde36 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ptgm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@b33f4e5ea3932f209e6c6841342d96ce54abde36 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pymodrev-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pymodrev-0.1.0-py3-none-any.whl
- Upload date:
- Size: 59.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f89cf83f65f6aefedc46dbe2a4e2329cf710310bd17d92f0ab5ab6eb2ed58597
|
|
| MD5 |
6c9068291051186a82a72602c7d978b9
|
|
| BLAKE2b-256 |
068f71d0219449506cf50649f3c4fa3e891f2c89ca64d3719e857ca5c5f63e8c
|
Provenance
The following attestation bundles were made for pymodrev-0.1.0-py3-none-any.whl:
Publisher:
python-publish.yml on ptgm/pymodrev
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pymodrev-0.1.0-py3-none-any.whl -
Subject digest:
f89cf83f65f6aefedc46dbe2a4e2329cf710310bd17d92f0ab5ab6eb2ed58597 - Sigstore transparency entry: 1188797941
- Sigstore integration time:
-
Permalink:
ptgm/pymodrev@b33f4e5ea3932f209e6c6841342d96ce54abde36 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/ptgm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@b33f4e5ea3932f209e6c6841342d96ce54abde36 -
Trigger Event:
push
-
Statement type: