예제 #1
0
def test_network_degrees():
    """Test node degrees of a network"""

    a = Node('a')
    net = Network(directed=False)
    net.add_edges((a, 'b'), ('b', 'c'), ('c', 'a'))
    assert isinstance(list(net.nodes.keys())[0], (str, int))
예제 #2
0
def test_mean_degree():
    """Test the mean degree calculation."""
    # net = pp.generators.Molloy_Reed([2]*500)

    net = Network(directed=False)
    net.add_edges(('a', 'b'), ('b', 'c'), ('c', 'a'))

    mean_degree = pp.statistics.mean_degree(net)
    assert mean_degree == 2.0
예제 #3
0
def test_remove_edge():
    """Test to remove an edge from the network."""

    net = Network()
    a = Node('a')
    b = Node('b')
    c = Node('c')
    e = Edge(a, b, uid='e')
    f = Edge(b, a, uid='f')
    g = Edge(b, c, uid='g')
    net.add_edge(e)
    net.add_edge(f)

    net.remove_edge(g)

    assert net.number_of_edges() == 2
    assert isinstance(net.edges['e'], Edge)
    assert g not in net.edges
    assert net.edges['a', 'b'] in net.edges

    assert net.successors['a'] == {b}
    assert net.outgoing['a'] == {e}
    assert net.incident_edges['a'] == {e, f}

    net.remove_edge(e)

    assert net.number_of_edges() == 1
    assert net.successors['a'] == set()
    assert net.outgoing['a'] == set()
    assert net.incident_edges['a'] == {f}

    net.remove_edge('f')

    assert net.number_of_edges() == 0
    assert net.incident_edges['a'] == set()

    a = Node('a')
    b = Node('b')
    e = Edge(a, b, uid='e')
    f = Edge(a, b, uid='f')
    g = Edge(a, b, uid='g')

    net = Network(multiedges=True)
    net.add_edges(e, f, g)

    assert net.number_of_edges() == 3
    assert e and f and g in net.edges['a', 'b']

    net.remove_edge('a', 'b', uid='g')
    assert net.number_of_edges() == 2
    assert g not in net.edges['a', 'b']

    net.remove_edge('a', 'b')
    assert net.number_of_edges() == 0
    assert len(net.edges['a', 'b']) == 0
예제 #4
0
def test_adjacency_matrix():
    """Test the adjacency matrix of a network."""
    net = Network()
    net.add_edges(('a', 'b'), ('b', 'c'))

    A1 = net.adjacency_matrix()
    assert A1[0, 1] == 1.0
    assert A1[1, 2] == 1.0

    A2 = pp.algorithms.matrices.adjacency_matrix(net)
    assert A2[0, 1] == 1.0
    assert A2[1, 2] == 1.0
예제 #5
0
def test_network_edges():
    """Test the edges of a network"""

    net = Network(directed=False)
    net.add_edges(('a', 'b'), ('b', 'c'), ('c', 'd'))
    assert net.number_of_edges() == 3
    assert isinstance(list(net.edges), list)

    # np does not allow to sample from iterables
    # edge = np.random.choice(list(net.edges.values()))
    edge = random.choice(list(net.edges))
    assert edge in net.edges
예제 #6
0
def test_sql_write_network():
    """Write network to sql database."""
    net = Network()
    net.add_edges(('a', 'b'), ('a', 'c'))
    pp.io.sql.write(net,
                    filename='network.db',
                    table='test',
                    if_exists='replace')

    net = pp.io.sql.read_network(db_file='network.db', table='test')

    assert isinstance(net, Network)
    assert net.number_of_nodes() == 3
    assert net.number_of_edges() == 2
예제 #7
0
def test_adjacency_matrix():
    """Test the adjacency matrix of a network."""
    net = Network()
    net.add_edges(('a', 'b'), ('b', 'c'))

    n = net.nodes.index

    A1 = net.adjacency_matrix()
    assert A1[n['a'], n['b']] == 1.0
    assert A1[n['b'], n['c']] == 1.0

    A2 = pp.algorithms.matrices.adjacency_matrix(net)
    assert A2[n['a'], n['b']] == 1.0
    assert A2[n['b'], n['c']] == 1.0
예제 #8
0
def test_add_edges():
    """Test assigning edges form a list."""
    net = Network()
    ab = Edge(Node('a'), Node('b'))

    net.add_edges(ab, ('b', 'c'))

    assert net.number_of_edges() == 2

    net = Network()
    edges = [("A", "B"), ("B", "C")]
    net.add_edges(edges)

    assert net.number_of_edges() == 2
    assert net.number_of_nodes() == 3

    net = Network()
    edges = [("a", "b"),
             ("b", "c"),
             ("c", "d"),
             ("c", "e")]
    edges = [tuple(Node(x) for x in e) for e in edges]
    # with pytest.raises(Exception):
    #     net.add_edges(edges)

    net = Network()

    net.add_edges(('a', 'b'), ('b', 'c'))
예제 #9
0
def test_iadd_networks():
    """Test to add networks together"""
    net_1 = Network()
    net_1.add_edges(('a', 'b'), ('b', 'c'))

    net_2 = Network()
    net_2.add_edges(('x', 'y'), ('y', 'z'))

    net_1 += net_2

    assert net_1.number_of_nodes() == 6
    assert net_1.number_of_edges() == 4
    assert net_2.number_of_nodes() == 3
    assert net_2.number_of_edges() == 2

    # test same node objects
    a = Node('a')
    b = Node('b')
    c = Node('c')

    net_1 = Network()
    net_2 = Network()
    net_1.add_edge(a, b)
    net_2.add_edge(b, c)

    net_1 += net_2
    assert net_1.number_of_nodes() == 3
    assert net_1.number_of_edges() == 2
    assert net_2.number_of_nodes() == 2
    assert net_2.number_of_edges() == 1

    # nodes with same uids but different objects
    net_1 = Network()
    net_2 = Network()
    net_1.add_edge(a, b)
    net_2.add_edge('b', c)

    with pytest.raises(Exception):
        net_1 += net_2

    # test same edge objects
    a = Node('a')
    b = Node('b')
    c = Node('c')

    net_1 = Network()
    net_2 = Network()
    net_1.add_edge(a, b, uid='e1')
    net_2.add_edge(a, b, uid='e2')

    with pytest.raises(Exception):
        net_1 += net_2
    # assert net_1.number_of_edges() == 2
    # assert net_1.number_of_nodes() == 2
    # assert 'e1' in net_1.edges and 'e2' in net_1.edges

    # edges with same uids but different objects
    net_1 = Network()
    net_2 = Network()
    net_1.add_edge(a, b, uid='e1')
    net_2.add_edge(a, b, uid='e1')

    with pytest.raises(Exception):
        net_1 += net_2

    # add multiple networks
    net_1 = Network()
    net_2 = Network()
    net_3 = Network()
    net_1.add_edge('a', 'b')
    net_2.add_edge('c', 'd')
    net_3.add_edge('e', 'f')
    net_1 += net_2 + net_3

    assert net_1.number_of_edges() == 3
    assert net_1.number_of_nodes() == 6
예제 #10
0
def test_csv_write_network():
    """Write network to csv."""
    net = Network()
    net.add_edges(('a', 'b'), ('a', 'c'))
    pp.io.csv.write(net, 'network.csv')