Module olivia.tests.test_model

Expand source code
from olivia.model import OliviaNetwork
import networkx as nx
import numpy as np

from olivia.packagemetrics import Reach, Surface, Impact


def aux_get_intraedges(net):
    return [net.dag.nodes[n]['intra_edges'] for n in net.dag]


def aux_get_weights(net):
    return [net.dag.edges[e]['weight'] for e in net.dag.edges]


G = nx.DiGraph()
G.add_edges_from((['a', 'b'],
                  ['b', 'c'],
                  ['c', 'd'],
                  ['d', 'e'],
                  ['e', 'b'],
                  ['d', 'f'],
                  ['f', 'g'],
                  ['g', 'j'],
                  ['f', 'i'],
                  ['f', 'h'],
                  ['i', 'h'],
                  ['h', 'i'],
                  ['i', 'j'],
                  ['h', 'k'],
                  ['j', 'k'],
                  ['k', 'j'],
                  ['a', 'l']))
net = OliviaNetwork()
net.build_model(G)


def test_simple_network():
    net = OliviaNetwork()
    net.build_model(nx.path_graph(4, create_using=nx.DiGraph))
    assert set(net.dag.edges) == {(1, 0), (2, 1), (3, 2)}, 'Edge set does not match'
    assert net.dag.graph['mapping'] == {3: 0, 2: 1, 1: 2, 0: 3}, 'Wrong mapping'
    assert aux_get_weights(net) == [1, 1, 1], 'Non unitary weights'
    assert aux_get_intraedges(net) == [0, 0, 0, 0], 'Non null intra-edge counts'
    assert set(nx.path_graph(4, create_using=nx.DiGraph).in_edges()) == set(net.network.in_edges())


def test_scc_network():
    assert set(net.dag.edges) == {(1, 0),
                                  (2, 0),
                                  (3, 1),
                                  (3, 2),
                                  (4, 3),
                                  (6, 4),
                                  (6, 5)}, 'Edge set does not match'
    assert net.dag.graph['mapping'] == {'k': 0,
                                        'j': 0,
                                        'g': 1,
                                        'h': 2,
                                        'i': 2,
                                        'f': 3,
                                        'e': 4,
                                        'c': 4,
                                        'b': 4,
                                        'd': 4,
                                        'l': 5,
                                        'a': 6}, 'Wrong mapping'
    assert aux_get_weights(net) == [1, 2, 1, 2, 1, 1, 1], 'Weights do not match'
    assert aux_get_intraedges(net) == [2, 0, 2, 0, 4, 0, 0], 'Intra-edge counts do  not match'
    assert set(G.in_edges()) == set(net.network.in_edges())


def test_io():
    net.save('test.olv')
    net2 = OliviaNetwork('test.olv')
    assert net.dag.edges == net2.dag.edges, 'Edge set does not match'
    assert net.dag.graph['mapping'] == net2.dag.graph['mapping'], 'Wrong mapping'
    assert aux_get_weights(net) == aux_get_weights(net2), 'Weights do not match'
    assert aux_get_intraedges(net) == aux_get_intraedges(net2), 'Intra-edge counts do  not match'


def test_metric_cache():
    net = OliviaNetwork()
    net.build_model(nx.path_graph(4, create_using=nx.DiGraph))
    for func in {Reach, Surface, Impact}:
        metric = net.get_metric(func)
        assert np.array_equal(metric.values, net.get_metric(func).values)


def test_len():
    assert len(OliviaNetwork()) == 0
    assert len(net) == 12


def test_iter():
    void_net = OliviaNetwork()
    assert len([n for n in void_net]) == 0
    assert {n for n in net} == {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'j', 'i', 'h', 'k', 'l'}

def test_clusters():
    assert list(OliviaNetwork().sccs()) == []
    assert list(net.sccs()) == [{'j', 'k'}, {'g'}, {'h', 'i'}, {'f'}, {'b', 'c', 'd', 'e'}, {'l'}, {'a'}]

def test_sorted_clusters():
    assert list(OliviaNetwork().sorted_clusters()) == []
    assert net.sorted_clusters() == [{'b', 'c', 'd', 'e'}, {'j', 'k'}, {'h', 'i'}, {'g'},  {'f'},  {'l'}, {'a'}]

def test_get_item():
    assert [net[n].reach() for n in net.network] == [12, 10, 10, 10, 10, 6, 3, 2, 4, 4, 2, 1]
    assert [net[n].surface() for n in net.network] == [1, 5, 5, 5, 5, 6, 7, 11, 8, 8, 11, 2]
    assert [net[n].impact() for n in net.network] == [17, 15, 15, 15, 15, 10, 3, 2, 6, 6, 2, 0]
    assert [net[n].direct_dependencies() for n in net.network] == [set(),
                                                                   {'a', 'e'},
                                                                   {'b'},
                                                                   {'c'},
                                                                   {'d'},
                                                                   {'d'},
                                                                   {'f'},
                                                                   {'g', 'i', 'k'},
                                                                   {'f', 'h'},
                                                                   {'f', 'i'},
                                                                   {'h', 'j'},
                                                                   {'a'}]
    assert [net[n].direct_dependants() for n in net.network] == [{'b', 'l'},
                                                                 {'c'},
                                                                 {'d'},
                                                                 {'e', 'f'},
                                                                 {'b'},
                                                                 {'g', 'h', 'i'},
                                                                 {'j'},
                                                                 {'k'},
                                                                 {'h', 'j'},
                                                                 {'i', 'k'},
                                                                 {'j'},
                                                                 set()]
    assert [net[n].transitive_dependencies() for n in net.network] == [set(),
                                                                       {'a', 'c', 'd', 'e'},
                                                                       {'a', 'b', 'd', 'e'},
                                                                       {'a', 'b', 'c', 'e'},
                                                                       {'a', 'b', 'c', 'd'},
                                                                       {'a', 'b', 'c', 'd', 'e'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                                                                        'k'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'h'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'i'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                                                                        'j'},
                                                                       {'a'}]
    assert [net[n].transitive_dependants() for n in net.network] == [
        {'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'},
        {'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'g', 'h', 'i', 'j', 'k'},
        {'j', 'k'},
        {'k'},
        {'h', 'j', 'k'},
        {'i', 'j', 'k'},
        {'j'},
        set()]

    assert [net[n].scc() for n in net.network] == [{'a'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'f'},
                                                   {'g'},
                                                   {'j', 'k'},
                                                   {'h', 'i'},
                                                   {'h', 'i'},
                                                   {'j', 'k'},
                                                   {'l'}]

    assert [net[n].coupling_profile() for n in net.network] == [{},
                                                                {'a': {'a', 'e'}, 'e': {'e'}, 'd': {'e'}, 'c': {'e'}},
                                                                {'d': {'b'}, 'a': {'b'}, 'e': {'b'}, 'b': {'b'}},
                                                                {'a': {'c'}, 'e': {'c'}, 'b': {'c'}, 'c': {'c'}},
                                                                {'d': {'d'}, 'a': {'d'}, 'b': {'d'}, 'c': {'d'}},
                                                                {'a': {'d'}, 'b': {'d'}, 'c': {'d'}, 'd': {'d'},
                                                                 'e': {'d'}},
                                                                {'f': {'f'}, 'a': {'f'}, 'b': {'f'}, 'c': {'f'},
                                                                 'd': {'f'}, 'e': {'f'}},
                                                                {'k': {'k'},
                                                                 'i': {'i', 'k'},
                                                                 'f': {'g', 'i', 'k'},
                                                                 'a': {'g', 'i', 'k'},
                                                                 'b': {'g', 'i', 'k'},
                                                                 'c': {'g', 'i', 'k'},
                                                                 'g': {'g', 'k'},
                                                                 'h': {'i', 'k'},
                                                                 'd': {'g', 'i', 'k'},
                                                                 'e': {'g', 'i', 'k'}},
                                                                {'f': {'f', 'h'},
                                                                 'a': {'f', 'h'},
                                                                 'b': {'f', 'h'},
                                                                 'c': {'f', 'h'},
                                                                 'h': {'h'},
                                                                 'd': {'f', 'h'},
                                                                 'e': {'f', 'h'}},
                                                                {'i': {'i'},
                                                                 'f': {'f', 'i'},
                                                                 'a': {'f', 'i'},
                                                                 'b': {'f', 'i'},
                                                                 'c': {'f', 'i'},
                                                                 'd': {'f', 'i'},
                                                                 'e': {'f', 'i'}},
                                                                {'j': {'j'},
                                                                 'i': {'h', 'j'},
                                                                 'f': {'h', 'j'},
                                                                 'a': {'h', 'j'},
                                                                 'b': {'h', 'j'},
                                                                 'c': {'h', 'j'},
                                                                 'g': {'j'},
                                                                 'h': {'h', 'j'},
                                                                 'd': {'h', 'j'},
                                                                 'e': {'h', 'j'}},
                                                                {'a': {'a'}}]
    assert [net[n].coupling_interface_to(m) for n in net.network for m in net.network] == [set(),
                                                                                           {'a', 'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           {'a'},
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'g', 'k'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'k'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'i', 'k'},
                                                                                           {'h'},
                                                                                           {'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'i', 'k'},
                                                                                           {'h'},
                                                                                           {'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'k'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set()]
    assert [net[n].coupling_interface_from(m) for n in net.network for m in net.network] == [set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'a', 'e'},
                                                                                             {'e'},
                                                                                             {'e'},
                                                                                             {'e'},
                                                                                             {'e'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'k'},
                                                                                             {'k'},
                                                                                             {'i', 'k'},
                                                                                             {'i', 'k'},
                                                                                             {'k'},
                                                                                             set(),
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'h'},
                                                                                             {'h'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'i'},
                                                                                             {'i'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'j'},
                                                                                             {'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'j'},
                                                                                             set(),
                                                                                             {'a'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set()]

Functions

def aux_get_intraedges(net)
Expand source code
def aux_get_intraedges(net):
    return [net.dag.nodes[n]['intra_edges'] for n in net.dag]
def aux_get_weights(net)
Expand source code
def aux_get_weights(net):
    return [net.dag.edges[e]['weight'] for e in net.dag.edges]
def test_clusters()
Expand source code
def test_clusters():
    assert list(OliviaNetwork().sccs()) == []
    assert list(net.sccs()) == [{'j', 'k'}, {'g'}, {'h', 'i'}, {'f'}, {'b', 'c', 'd', 'e'}, {'l'}, {'a'}]
def test_get_item()
Expand source code
def test_get_item():
    assert [net[n].reach() for n in net.network] == [12, 10, 10, 10, 10, 6, 3, 2, 4, 4, 2, 1]
    assert [net[n].surface() for n in net.network] == [1, 5, 5, 5, 5, 6, 7, 11, 8, 8, 11, 2]
    assert [net[n].impact() for n in net.network] == [17, 15, 15, 15, 15, 10, 3, 2, 6, 6, 2, 0]
    assert [net[n].direct_dependencies() for n in net.network] == [set(),
                                                                   {'a', 'e'},
                                                                   {'b'},
                                                                   {'c'},
                                                                   {'d'},
                                                                   {'d'},
                                                                   {'f'},
                                                                   {'g', 'i', 'k'},
                                                                   {'f', 'h'},
                                                                   {'f', 'i'},
                                                                   {'h', 'j'},
                                                                   {'a'}]
    assert [net[n].direct_dependants() for n in net.network] == [{'b', 'l'},
                                                                 {'c'},
                                                                 {'d'},
                                                                 {'e', 'f'},
                                                                 {'b'},
                                                                 {'g', 'h', 'i'},
                                                                 {'j'},
                                                                 {'k'},
                                                                 {'h', 'j'},
                                                                 {'i', 'k'},
                                                                 {'j'},
                                                                 set()]
    assert [net[n].transitive_dependencies() for n in net.network] == [set(),
                                                                       {'a', 'c', 'd', 'e'},
                                                                       {'a', 'b', 'd', 'e'},
                                                                       {'a', 'b', 'c', 'e'},
                                                                       {'a', 'b', 'c', 'd'},
                                                                       {'a', 'b', 'c', 'd', 'e'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                                                                        'k'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'h'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'i'},
                                                                       {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                                                                        'j'},
                                                                       {'a'}]
    assert [net[n].transitive_dependants() for n in net.network] == [
        {'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'},
        {'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k'},
        {'g', 'h', 'i', 'j', 'k'},
        {'j', 'k'},
        {'k'},
        {'h', 'j', 'k'},
        {'i', 'j', 'k'},
        {'j'},
        set()]

    assert [net[n].scc() for n in net.network] == [{'a'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'b', 'c', 'd', 'e'},
                                                   {'f'},
                                                   {'g'},
                                                   {'j', 'k'},
                                                   {'h', 'i'},
                                                   {'h', 'i'},
                                                   {'j', 'k'},
                                                   {'l'}]

    assert [net[n].coupling_profile() for n in net.network] == [{},
                                                                {'a': {'a', 'e'}, 'e': {'e'}, 'd': {'e'}, 'c': {'e'}},
                                                                {'d': {'b'}, 'a': {'b'}, 'e': {'b'}, 'b': {'b'}},
                                                                {'a': {'c'}, 'e': {'c'}, 'b': {'c'}, 'c': {'c'}},
                                                                {'d': {'d'}, 'a': {'d'}, 'b': {'d'}, 'c': {'d'}},
                                                                {'a': {'d'}, 'b': {'d'}, 'c': {'d'}, 'd': {'d'},
                                                                 'e': {'d'}},
                                                                {'f': {'f'}, 'a': {'f'}, 'b': {'f'}, 'c': {'f'},
                                                                 'd': {'f'}, 'e': {'f'}},
                                                                {'k': {'k'},
                                                                 'i': {'i', 'k'},
                                                                 'f': {'g', 'i', 'k'},
                                                                 'a': {'g', 'i', 'k'},
                                                                 'b': {'g', 'i', 'k'},
                                                                 'c': {'g', 'i', 'k'},
                                                                 'g': {'g', 'k'},
                                                                 'h': {'i', 'k'},
                                                                 'd': {'g', 'i', 'k'},
                                                                 'e': {'g', 'i', 'k'}},
                                                                {'f': {'f', 'h'},
                                                                 'a': {'f', 'h'},
                                                                 'b': {'f', 'h'},
                                                                 'c': {'f', 'h'},
                                                                 'h': {'h'},
                                                                 'd': {'f', 'h'},
                                                                 'e': {'f', 'h'}},
                                                                {'i': {'i'},
                                                                 'f': {'f', 'i'},
                                                                 'a': {'f', 'i'},
                                                                 'b': {'f', 'i'},
                                                                 'c': {'f', 'i'},
                                                                 'd': {'f', 'i'},
                                                                 'e': {'f', 'i'}},
                                                                {'j': {'j'},
                                                                 'i': {'h', 'j'},
                                                                 'f': {'h', 'j'},
                                                                 'a': {'h', 'j'},
                                                                 'b': {'h', 'j'},
                                                                 'c': {'h', 'j'},
                                                                 'g': {'j'},
                                                                 'h': {'h', 'j'},
                                                                 'd': {'h', 'j'},
                                                                 'e': {'h', 'j'}},
                                                                {'a': {'a'}}]
    assert [net[n].coupling_interface_to(m) for n in net.network for m in net.network] == [set(),
                                                                                           {'a', 'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           {'a'},
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'e'},
                                                                                           {'b'},
                                                                                           {'c'},
                                                                                           {'d'},
                                                                                           {'d'},
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'f'},
                                                                                           {'g', 'i', 'k'},
                                                                                           {'f', 'h'},
                                                                                           {'f', 'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'g', 'k'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'k'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'i', 'k'},
                                                                                           {'h'},
                                                                                           {'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'i', 'k'},
                                                                                           {'h'},
                                                                                           {'i'},
                                                                                           {'h', 'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           {'k'},
                                                                                           set(),
                                                                                           set(),
                                                                                           {'j'},
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set(),
                                                                                           set()]
    assert [net[n].coupling_interface_from(m) for n in net.network for m in net.network] == [set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'a', 'e'},
                                                                                             {'e'},
                                                                                             {'e'},
                                                                                             {'e'},
                                                                                             {'e'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             {'b'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             {'c'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             {'d'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             {'f'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'i', 'k'},
                                                                                             {'g', 'k'},
                                                                                             {'k'},
                                                                                             {'i', 'k'},
                                                                                             {'i', 'k'},
                                                                                             {'k'},
                                                                                             set(),
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             {'f', 'h'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'h'},
                                                                                             {'h'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             {'f', 'i'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'i'},
                                                                                             {'i'},
                                                                                             set(),
                                                                                             set(),
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'j'},
                                                                                             {'j'},
                                                                                             {'h', 'j'},
                                                                                             {'h', 'j'},
                                                                                             {'j'},
                                                                                             set(),
                                                                                             {'a'},
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set(),
                                                                                             set()]
def test_io()
Expand source code
def test_io():
    net.save('test.olv')
    net2 = OliviaNetwork('test.olv')
    assert net.dag.edges == net2.dag.edges, 'Edge set does not match'
    assert net.dag.graph['mapping'] == net2.dag.graph['mapping'], 'Wrong mapping'
    assert aux_get_weights(net) == aux_get_weights(net2), 'Weights do not match'
    assert aux_get_intraedges(net) == aux_get_intraedges(net2), 'Intra-edge counts do  not match'
def test_iter()
Expand source code
def test_iter():
    void_net = OliviaNetwork()
    assert len([n for n in void_net]) == 0
    assert {n for n in net} == {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'j', 'i', 'h', 'k', 'l'}
def test_len()
Expand source code
def test_len():
    assert len(OliviaNetwork()) == 0
    assert len(net) == 12
def test_metric_cache()
Expand source code
def test_metric_cache():
    net = OliviaNetwork()
    net.build_model(nx.path_graph(4, create_using=nx.DiGraph))
    for func in {Reach, Surface, Impact}:
        metric = net.get_metric(func)
        assert np.array_equal(metric.values, net.get_metric(func).values)
def test_scc_network()
Expand source code
def test_scc_network():
    assert set(net.dag.edges) == {(1, 0),
                                  (2, 0),
                                  (3, 1),
                                  (3, 2),
                                  (4, 3),
                                  (6, 4),
                                  (6, 5)}, 'Edge set does not match'
    assert net.dag.graph['mapping'] == {'k': 0,
                                        'j': 0,
                                        'g': 1,
                                        'h': 2,
                                        'i': 2,
                                        'f': 3,
                                        'e': 4,
                                        'c': 4,
                                        'b': 4,
                                        'd': 4,
                                        'l': 5,
                                        'a': 6}, 'Wrong mapping'
    assert aux_get_weights(net) == [1, 2, 1, 2, 1, 1, 1], 'Weights do not match'
    assert aux_get_intraedges(net) == [2, 0, 2, 0, 4, 0, 0], 'Intra-edge counts do  not match'
    assert set(G.in_edges()) == set(net.network.in_edges())
def test_simple_network()
Expand source code
def test_simple_network():
    net = OliviaNetwork()
    net.build_model(nx.path_graph(4, create_using=nx.DiGraph))
    assert set(net.dag.edges) == {(1, 0), (2, 1), (3, 2)}, 'Edge set does not match'
    assert net.dag.graph['mapping'] == {3: 0, 2: 1, 1: 2, 0: 3}, 'Wrong mapping'
    assert aux_get_weights(net) == [1, 1, 1], 'Non unitary weights'
    assert aux_get_intraedges(net) == [0, 0, 0, 0], 'Non null intra-edge counts'
    assert set(nx.path_graph(4, create_using=nx.DiGraph).in_edges()) == set(net.network.in_edges())
def test_sorted_clusters()
Expand source code
def test_sorted_clusters():
    assert list(OliviaNetwork().sorted_clusters()) == []
    assert net.sorted_clusters() == [{'b', 'c', 'd', 'e'}, {'j', 'k'}, {'h', 'i'}, {'g'},  {'f'},  {'l'}, {'a'}]