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.

In [1]:

```
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()
```

In [2]:

```
import bonesis
```

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:

In [3]:

```
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
```

Out[3]:

The observations are the following:

- with no signal, the system stays steady will all nodes inactive
- with signal, starting from all nodes being inactive, one can observe a transient activation of the output node, and eventually reach a steady state where input and intermediate nodes are active, and the output inactive

In [4]:

```
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:

In [5]:

```
bo = bonesis.BoNesis(dom, data)
```

We impose that the `zero`

observation is steady, i.e., is a fixed point:

In [6]:

```
bo.fixed(bo.obs("zero"));
```

We describe the dynamics observed from the signal activation:

In [7]:

```
~bo.obs("init") >= ~bo.obs("trans") >= bo.fixed(bo.obs("end"));
```

The following code enumarates *all* compatible MPBNs with the influence graph and observations.

In [8]:

```
for bn in bo.boolean_networks(quiet=True):
print(bn)
```

Only one is found.

In [ ]:

```
```