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'}]