Source code for neet.boolean.conv

.. currentmodule:: neet.boolean.conv

.. testsetup:: conv

    from neet.boolean import LogicNetwork
    from neet.boolean.conv import *
    from neet.boolean.examples import s_pombe
    from neet.synchronous import transitions

Network Type Conversion

Some algorithms are more efficiently implemented on particular network type.
This module allows the user to convert between network types, though not all
conversions are possible. For example, not every
:class:`neet.boolean.LogicNetwork` can be converted to a
:class:`neet.boolean.WTNetwork`, though the reverse direction is always
from .logicnetwork import LogicNetwork
from .wtnetwork import WTNetwork

[docs]def wt_to_logic(net): """ Convert a :class:`neet.boolean.WTNetwork` to a :class:`neet.boolean.LogicNetwork`. .. rubric:: Examples .. doctest:: conv >>> s_pombe_logical = wt_to_logic(s_pombe) >>> isinstance(s_pombe_logical, LogicNetwork) True >>> transitions(s_pombe_logical) == transitions(s_pombe) True :param net: a network to convert :type net: :class:`neet.boolean.WTNetwork` :return: an equivalent :class:`neet.boolean.LogicNetwork` """ if not isinstance(net, WTNetwork): raise TypeError("'net' must be a WTNetwork") truth_table = [] for node, weights in enumerate(net.weights): indices = tuple([i for i, v in enumerate(weights) if v != 0 or i == node]) conditions = set() for dec_state in range(2**len(indices)): bin_state = '{0:0{1}b}'.format(dec_state, len(indices)) prod = sum([weights[i] * int(s) for i, s in zip(indices, bin_state)]) if (prod > net.thresholds[node] or (prod == net.thresholds[node] and bin_state[indices.index(node)] == '1')): conditions.add(bin_state) truth_table.append((indices, conditions)) return LogicNetwork(truth_table, net.names, reduced=True)