def test_possible_paths():
    """Test to generate all possible paths."""
    paths = PathCollection()
    paths.add('a', 'a', 'b', 'b', 'a')

    null = NullModel()
    assert len(null.possible_relations(paths, length=3)) == 16
Example #2
0
    def fit(self,
            data: PathCollection,
            max_order: Optional[int] = None,
            null_models: bool = True) -> None:
        """Fit data to a MultiOrderModel"""

        # Check max order
        if max_order is not None:
            self._max_order = max_order

        # store data
        self.data = data

        for order in list(
                range(self._current_max_order() + 1, self.max_order + 1)):

            LOG.debug('Generating %s-th order layer ...', order)

            # generate higher order network
            _hon = HigherOrderNetwork.from_paths(data,
                                                 order=order,
                                                 subpaths=True)

            # calculate transition matrices for the higher-order networks
            _mat = _hon.transition_matrix(count=True, transposed=True)

            _null = None
            if null_models:
                # generate null model
                _null = NullModel.from_paths(data, order=order)

            self.layers[order]['hon'] = _hon
            self.layers[order]['T'] = _mat
            self.layers[order]['null'] = _null
def test_degrees_of_reedom():
    """Tets degrees of freedom"""
    paths = PathCollection()
    paths.add('a', 'c', 'd', frequency=2)
    paths.add('b', 'c', 'e', frequency=2)

    null = NullModel.from_paths(paths, order=0)
    assert null.degrees_of_freedom() == 4

    null = NullModel.from_paths(paths, order=1)
    assert null.degrees_of_freedom() == 1

    null = NullModel.from_paths(paths, order=2)
    assert null.degrees_of_freedom() == 2

    null = NullModel.from_paths(paths, order=3)
    assert null.degrees_of_freedom() == 0
Example #4
0
    def __init__(self, network, max_order=1):
        """Initialize multi-oder model."""
        self.network = network
        self.null = NullModel(self.network)
        self.max_order = max_order

        # initialize variables

        self.layers = {}
        self.null_models = {}
        self.transition_matrices = {}
def test_from_network():

    net = Network()
    net.add_edge('a', 'c', count=10)
    net.add_edge('c', 'd', count=10)
    net.add_edge('b', 'c', count=10)
    net.add_edge('c', 'e', count=10)

    null = NullModel.from_network(net, order=2)

    assert null.number_of_edges() == 4
    assert null.number_of_nodes() == 4

    for e in null.edges.uids:
        assert null.edges.counter[e] == 5.0
Example #6
0
def test_from_network():

    net = Network()
    net.add_edge('a', 'c', frequency=10)
    net.add_edge('c', 'd', frequency=10)
    net.add_edge('b', 'c', frequency=10)
    net.add_edge('c', 'e', frequency=10)

    null = NullModel.from_network(net, order=2)

    assert null.number_of_edges() == 4
    assert null.number_of_nodes() == 4

    for e in null.edges:
        assert e['frequency'] == 5.0
Example #7
0
def test_basic():
    """Test basic functions"""

    paths = PathCollection()
    paths.add('a', 'c', 'd', uid='a-c-d', frequency=10)
    paths.add('b', 'c', 'e', uid='b-c-e', frequency=10)

    # null = NullModel()
    # null.fit(paths, order=2)

    null = NullModel.from_paths(paths, order=2)

    assert null.number_of_edges() == 4
    assert null.number_of_nodes() == 4

    for e in null.edges:
        assert e['frequency'] == 5.0
Example #8
0
    def degrees_of_freedom(self, order: int = 1, mode: str = 'path') -> int:

        # TODO add checks for the max order
        max_order = order

        # initialize degrees of freedom
        dof = 0

        for order in range(0, max_order + 1):

            # check if the null model for the given order is
            # already calculated if not calculate new null model
            if self.layers[order].get('null', None) is None:
                self.layers[order]['null'] = NullModel.from_paths(self.data,
                                                                  order=order)

            dof += self.layers[order]['null'].degrees_of_freedom(mode=mode)

        return dof
Example #9
0
def test_possible_paths():
    """Test to generate all possible paths."""
    paths = PathCollection()
    paths.add('a', 'a', 'b', 'b', 'a')

    assert len(NullModel.possible_paths(paths.edges, order=3)) == 16