In this notebook, we compute the Boolean networks which are compatible with both the interactions motifs of the I3-FFL, and behaviors observed in theoretical analysis of quantitative models, and experiment data from synthetically-designed circuits.
The analysis relies on the in-development tool BoNesis for network inference relying on Most Permissive Boolean Networks. The following cell installs it if necessary.
try:
import bonesis
except:
import os
print("installing bonesis preview")
os.system("pip install --no-cache --user bonesis-preview-20200701.zip")
import importlib
importlib.invalidate_caches()
installing bonesis preview
import bonesis
This notebook has been executed using the docker image colomoto/colomoto-docker:2020-07-01
The network motif is as follows: node a
(input) inhibits c
(output); node a
activates b
; and b
activates c
. The signal acts on a
.
The following cell defines the corresponding influence graph:
dom = bonesis.InfluenceGraph([
("signal", "signal", dict(sign=1, label="+")), # input node
("signal", "a", dict(sign=1, label="+")),
("a", "b", dict(sign=1, label="+")),
("a","c", dict(sign=-1, label="-")),
("b","c", dict(sign=1, label="+"))])
dom
# computing graph layout...
The observations are the following:
data = {
"zero": {"signal": 0, "a": 0, "b": 0, "c": 0},
"init": {"signal": 1, "a": 0, "b": 0, "c": 0},
"trans": {"signal": 1, "c": 1},
"end": {"signal": 1, "a": 1, "b": 1, "c": 0}
}
We instantiate BoNesis on the influence graph and configuration observations:
bo = bonesis.BoNesis(dom, data)
We impose that the zero
observation is steady, i.e., is a fixed point:
bo.fixed(bo.obs("zero"));
We describe the dynamics observed from the signal activation:
~bo.obs("init") >= ~bo.obs("trans") >= bo.fixed(bo.obs("end"));
The following code enumarates all compatible MPBNs with the influence graph and observations.
for bn in bo.boolean_networks(quiet=True):
print(bn)
a <- signal b <- a c <- !a&b signal <- signal
Only one is found.