Пример #1
0
def test_intervalgraph_to_snapshot_graph():

    # With interval edges
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 15), (6, 4, 19, 20), (2, 4, 13, 16), (3, 2, 10, 11)])
    S = G.to_snapshot_graph(edge_data=False, edge_interval_data=True)
    actual = []
    for g in S:
        actual.append(g.edges(data=True))
    assert list(actual[0]) == [(1, 2, {'begin': 10, 'end': 11}), (2, 3, {'begin': 10, 'end': 11})]
    assert list(actual[1]) == [(2, 4, {'begin': 11, 'end': 15})]
    assert list(actual[2]) == [(2, 4, {'begin': 13, 'end': 16})]
    assert list(actual[3]) == [(2, 4, {'begin': 13, 'end': 16})]
    assert list(actual[4]) == []
    assert list(actual[5]) == [(6, 4, {'begin': 19, 'end': 20})]

    # With impulse edges
    G2 = dnx.IntervalGraph()
    G2.add_edges_from([(1, 2, 11, 11), (2, 4, 15, 15), (6, 4, 19, 19)])
    S2 = G2.to_snapshot_graph(edge_data=False, edge_interval_data=True)
    actual2 = []
    for g in S2:
        actual2.append(g.edges(data=True))
    assert list(actual2[0]) == [(1, 2, {'begin': 11, 'end': 11})]
    assert list(actual2[1]) == [(2, 4, {'begin': 15, 'end': 15})]
    assert list(actual2[2]) == [(6, 4, {'begin': 19, 'end': 19})]
Пример #2
0
def test_intervalgraph_add_nodes_from():
    G = dnx.IntervalGraph()
    G.add_nodes_from('Hello')
    G.add_nodes_from([1, 2], size=10)

    assert 'e' in G._node
    assert G._node[1]['size'] == 10
Пример #3
0
def test_intervalgraph_remove_edge_default():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 12), (6, 4, 9, 10), (1, 2, 15, 16)])

    assert G.has_edge(1, 2)
    G.remove_edge(1, 2)
    assert G.has_edge(1, 2) == False
Пример #4
0
def test_intervalgraph_to_subgraph_default():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)])
    H = G.to_subgraph(4, 12)

    assert sorted(list(H.edges())) == [(1, 2), (2, 4)]
    assert isinstance(H, nx.classes.graph.Graph)
Пример #5
0
def test_intervalgraph_to_subgraph_edge_data():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)], weight=1.5)
    H = G.to_subgraph(4, 12, edge_data=True)

    assert list(H.edges(data=True)) == [(1, 2, {'weight': 1.5}), (2, 4, {'weight': 1.5})]
    assert isinstance(H, nx.classes.graph.Graph)
Пример #6
0
def test_intervalgraph_has_edge():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 12)])
    assert G.has_edge(1, 2)

    assert G.has_edge(1, 2, begin=2) == True
    assert G.has_edge(2, 4, begin=12) == False
Пример #7
0
def test_intervalgraph_add_edges_from():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 12)])
    G.add_edges_from([(3, 4, 19, 20), (1, 4, 3, 4)], label='WN2898')

    assert list(G.edges(data=True)) == [((1, 4, 3, 4), {'label': 'WN2898'}), ((1, 2, 10, 11), {}),
                                        ((2, 4, 11, 12), {}), ((3, 4, 19, 20), {'label': 'WN2898'})]
Пример #8
0
def test_intervalgraph_to_subgraph_edge_interval_data():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)])
    H = G.to_subgraph(4, 12, edge_interval_data=True)

    assert list(H.edges(data=True)) == [(1, 2, {'begin': 3, 'end': 6}), (2, 4, {'begin': 5, 'end': 11})]
    assert isinstance(H, nx.classes.graph.Graph)
Пример #9
0
def test_intervalgraph_to_subgraph_multigraph():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)])
    M = G.to_subgraph(4, 12, multigraph=True)

    assert list(M.edges()) == [(1, 2), (2, 4)]
    assert isinstance(M, nx.classes.graph.Graph)
Пример #10
0
def test_intervalgraph_remove_edge_slice():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 12), (6, 4, 9, 10), (1, 2, 15, 16)])

    assert G.has_edge(1, 2, begin=2, end=11)
    G.remove_edge(1, 2, begin=2, end=11)
    assert G.has_edge(1, 2, begin=2, end=11) == False
    assert G.has_edge(1, 2)
Пример #11
0
def test_intervalgraph_add_node():
    G = dnx.IntervalGraph()
    G.add_node(1)
    G.add_node('Hello')
    G.add_node(3, weight=0.1)

    assert G.number_of_nodes() == 3
    assert G._node[3]['weight'] == 0.1
Пример #12
0
def test_intervalgraph_has_node():
    G = dnx.IntervalGraph()
    G.add_node(1)
    G.add_edge(3, 4, 5, 6)

    assert G.has_node(1)
    assert G.has_node(3, begin=2)
    assert G.has_node(3, end=2) == False
Пример #13
0
def test_intervalgraph_number_of_nodes():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 5, 6), (3, 4, 11, 12)])

    assert G.number_of_nodes() == 4
    assert G.number_of_nodes(begin=6) == 2
    assert G.number_of_nodes(begin=5, end=8) == 2
    assert G.number_of_nodes(end=11) == 2
Пример #14
0
def test_intervalgraph_degree():
    G = dnx.IntervalGraph()
    G.add_edge(1, 2, 3, 5)
    G.add_edge(2, 3, 8, 11)
    assert G.degree(2) == 2
    assert G.degree(2, 2) == 2
    assert G.degree(2, end=8) == 1
    assert G.degree() == 4 / 3
    assert G.degree(2, delta=True) == [(3, 1), (5, 0), (8, 1)]
Пример #15
0
def test_intervalgraph_to_snapshots_default():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)])
    S = G.to_snapshots(2, return_length=True)

    assert len(S[0]) == 2
    assert S[1] == 8.5
    assert sorted(list(S[0][0].edges())) == [(1, 2), (2, 4)]
    assert sorted(list(S[0][1].edges())) == [(2, 4), (4, 6)]
Пример #16
0
def test_intervalgraph_nodes_slice():
    G = dnx.IntervalGraph()
    G.add_edge(1, 2, 3, 4)
    G.add_edge(4, 5, 6, 7)
    G.add_edge(7, 8, 9, 10)

    assert sorted(list(G.nodes(begin=4))) == [4, 5, 7, 8]
    assert sorted(list(G.nodes(end=7))) == [1, 2, 4, 5]
    assert sorted(list(G.nodes(4, 7))) == [4, 5]
Пример #17
0
def test_intervalgraph_to_subgraph_node_data():
    G = dnx.IntervalGraph()
    G.add_node(1, size=1.2)
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)])
    H = G.to_subgraph(4, 12, node_data=True)

    assert list(H.edges()) == [(1, 2), (2, 4)]
    assert list(H.nodes(data=True)) == [(1, {'size': 1.2}), (2, {}), (4, {})]
    assert isinstance(H, nx.classes.graph.Graph)
Пример #18
0
def test_intervalgraph_load_from_text_comments():
    path = os.path.join(current_dir, 'inputoutput_text/intervalgraph_load_from_text_comments.txt')
    desired = dnx.IntervalGraph()
    desired.add_edge(1, 2, 3, 4.0)
    desired.add_edge(5, 6, 7, 8.0)
    desired.add_edge(9, 10, 11, 12.0, weight=1.0)
    desired.add_edge(13, 14, 15, 16.0, weight=2.0)

    actual = dnx.IntervalGraph.load_from_txt(path, comments='@')

    assert actual.edges(data=True) == desired.edges(data=True)
Пример #19
0
def test_intervalgraph_load_from_text_inputtypes():
    path = os.path.join(current_dir, 'inputoutput_text/intervalgraph_load_from_text_default.txt')
    desired = dnx.IntervalGraph()
    desired.add_edge('1', '2', 3.0, 4.0)
    desired.add_edge('5', '6', 7.0, 8.0)
    desired.add_edge('9', '10', 11.0, 12.0, weight=1.0)
    desired.add_edge('13', '14', 15.0, 16.0, weight=2.0)

    actual = dnx.IntervalGraph.load_from_txt(path, nodetype=str, intervaltype=float)

    assert actual.edges(data=True) == desired.edges(data=True)
Пример #20
0
def test_intervalgraph_load_from_text_delimiter():
    path = os.path.join(current_dir, 'inputoutput_text/intervalgraph_load_from_text_delimiter.txt')
    desired = dnx.IntervalGraph()
    desired.add_edge(1, 2, 3.0, 4.0)
    desired.add_edge(5, 6, 7.0, 8.0)
    desired.add_edge(9, 10, 11.0, 12.0, weight=1.0)
    desired.add_edge(13, 14, 15.0, 16.0, weight=2.0)

    actual = dnx.IntervalGraph.load_from_txt(path, delimiter='\t')

    assert actual.edges(data=True) == desired.edges(data=True)
Пример #21
0
def test_intervalgraph_edges_data():
    G = dnx.IntervalGraph()
    G.add_edge(1, 3, 4, 5, weight=8, height=18)
    G.add_edge(1, 2, 10, 11, weight=10)
    G.add_edge(2, 6, 10, 11)

    assert list(G.edges(data="weight")) == [((1, 3, 4, 5), 8), ((1, 2, 10, 11), 10), ((2, 6, 10, 11), None)]
    assert list(G.edges(data="weight", default=5)) == [((1, 3, 4, 5), 8), ((1, 2, 10, 11), 10), ((2, 6, 10, 11), 5)]
    assert list(G.edges(data=True)) == [((1, 3, 4, 5), {'weight': 8, 'height': 18}),
                                        ((1, 2, 10, 11), {'weight': 10}), ((2, 6, 10, 11), {})]
    assert list(G.edges(u=1, begin=2, end=9, data="weight")) == [((1, 3, 4, 5), 8)]
Пример #22
0
def test_intervalgraph_add_edge():
    G = dnx.IntervalGraph()
    G.add_edge(1, 2, 3, 4)
    G.add_edge(1, 3, 4, 5, weight=7, capacity=15, length=342.7)

    assert list(G.edges(data=True)) == [((1, 2, 3, 4), {}),
                                        ((1, 3, 4, 5), {
                                            'capacity': 15,
                                            'length': 342.7,
                                            'weight': 7
                                        })]
Пример #23
0
def test_intervalgraph_remove_node_slice():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 12), (6, 4, 19, 20), (2, 4, 15, 16)])
    assert G.has_node(2, begin=11) == True
    assert G.has_node(4, end=13) == True

    G.remove_node(2, begin=11)
    G.remove_node(4, end=13)

    assert list(G.nodes()) == [1, 2, 4, 6]
    assert G.has_node(2, begin=11) == False
    assert G.has_node(4, end=13) == False
Пример #24
0
def test_intervalgraph_edges_slice():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 10, 11), (2, 4, 11, 12), (6, 4, 19, 20), (2, 4, 15, 16)])

    assert list(G.edges(begin=10)) == [(1, 2, 10, 11), (2, 4, 11, 12), (2, 4, 15, 16), (6, 4, 19, 20)]
    assert list(G.edges(end=11)) == [(1, 2, 10, 11)]
    assert list(G.edges(begin=11, end=15)) == [(2, 4, 11, 12)]
    assert list(G.edges(u=2)) == [(1, 2, 10, 11), (2, 4, 11, 12), (2, 4, 15, 16)]
    assert list(G.edges(v=2)) == [(1, 2, 10, 11), (2, 4, 11, 12), (2, 4, 15, 16)]
    assert list(G.edges(u=2, begin=11)) == [(2, 4, 11, 12), (2, 4, 15, 16)]
    assert list(G.edges(u=2, v=4, end=12)) == [(2, 4, 11, 12)]
    assert list(G.edges(u=1, v=2)) == [(1, 2, 10, 11)]
Пример #25
0
def test_intervalgraph_from_networkx_graph_default():
    desired = dnx.IntervalGraph()
    desired.add_edge(1, 2, 10, 11, weight=1.5)
    desired.add_edge(2, 3, 11, 12)

    graph = nx.Graph()
    graph.add_edge(1, 2, begin=10, end=11, weight=1.5)
    graph.add_edge(2, 3, begin=11, end=12)

    actual = dnx.IntervalGraph.from_networkx_graph(graph)

    assert actual.edges(data=True) == desired.edges(data=True)
Пример #26
0
def test_intervalgraph_from_networkx_graph_timestamp():
    desired = dnx.IntervalGraph()
    desired.add_edge(1, 2, 10, 11, weight=1.5)
    desired.add_edge(2, 3, 11, 12)

    graph = nx.Graph()
    graph.add_edge(1, 2, custom_begin=10, custom_end=11, weight=1.5)
    graph.add_edge(2, 3, custom_begin=11, custom_end=12)

    actual = dnx.IntervalGraph.from_networkx_graph(graph, begin="custom_begin", end="custom_end")

    assert actual.edges(data=True) == desired.edges(data=True)
Пример #27
0
def test_interval_graph_to_snapshots_len():
    G = dnx.IntervalGraph()
    G.add_edges_from([(1, 2, 3, 6), (2, 4, 5, 11), (6, 4, 19, 20), (2, 4, 15, 16)])
    S = G.to_snapshots(length_of_snapshots=2, return_length=True)

    assert len(S[0]) == 9
    assert S[1] == 2
    assert sorted(list(S[0][0].edges())) == [(1, 2)]
    assert sorted(list(S[0][1].edges())) == [(1, 2), (2, 4)]
    assert sorted(list(S[0][2].edges())) == [(2, 4)]
    assert sorted(list(S[0][3].edges())) == [(2, 4)]
    assert sorted(list(S[0][4].edges())) == []
    assert sorted(list(S[0][5].edges())) == []
    assert sorted(list(S[0][6].edges())) == [(2, 4)]
    assert sorted(list(S[0][7].edges())) == []
    assert sorted(list(S[0][8].edges())) == [(6, 4)]
Пример #28
0
def test_intervalgraph_save_to_text_delimiter():
    input_path = os.path.join(current_dir, 'inputoutput_text/intervalgraph_save_to_text_delimiter.txt')
    output_path = os.path.join(current_dir, 'inputoutput_text/intervalgraph_save_to_text_delimiter_test.txt')

    G = dnx.IntervalGraph()
    G.add_edge(1, 2, 3, 4.0)
    G.add_edge(5, 6, 7, 8.0)
    G.add_edge(9, 10, 11, 12.0, weight=1.0)
    G.add_edge(13, 14, 15, 16.0, weight=2.0)

    G.save_to_txt(output_path, delimiter='\t')

    with open(input_path, 'r') as input_file:
        desired = input_file.read()
    with open(output_path, 'r') as output_file:
        actual = output_file.read()

    assert actual == desired
Пример #29
0
def test_intervalgraph_from_snapshots_period():
    desired = dnx.IntervalGraph()
    desired.add_edge(1, 2, 0, 2)
    desired.add_edge(6, 7, 0, 2)
    desired.add_edge(5, 6, 0, 2)
    desired.add_edge(1, 4, 2, 4)
    desired.add_edge(1, 3, 0, 4)
    desired.add_edge(10, 11, 0, 4)
    desired.add_edge(8, 9, 0, 4, weight=1)

    sg = dnx.SnapshotGraph()
    sg.add_snapshot([(1, 2), (1, 3)], time=0)
    sg.add_snapshot([(1, 4), (1, 3)], time=1)
    sg.add_edges_from([(5, 6), (7, 6)], [0])
    sg.add_edges_from([(8, 9), (10, 11)], [0, 1])
    sg.add_edges_from([(8, 9)], weight=1)

    actual = dnx.IntervalGraph.from_snapshot_graph(sg, period=2)

    assert len(actual.edges()) == len(desired.edges())
    for edge in actual.edges(data=True):
        assert edge in desired.edges(data=True)
def test_count_temporal_motif():
    G = dnx.ImpulseDiGraph()
    G.add_edge(1, 2, 3)
    G.add_edge(2, 1, 8)
    G.add_edge(2, 3, 8)
    G.add_edge(3, 4, 8)
    G.add_edge(2, 1, 14)
    G.add_edge(4, 5, 15)
    G.add_edge(2, 1, 18)
    G.add_edge(2, 3, 18)
    G.add_edge(2, 3, 20)
    G.add_edge(2, 1, 22)
    G.add_edge(2, 3, 25)

    assert dnx.count_temporal_motif(G, ((1, 2), (1, 3), (1, 2)), 5) == 2
    assert dnx.count_temporal_motif(G, ((1, 2), (1, 3), (1, 2)), 5, get_count_dict=True) == \
           {(2, 1, 2, 3, 2, 1): 1, (2, 3, 2, 1, 2, 3): 1}

    # test simultaneous timestamps
    G.add_edge(1, 2, 30)
    G.add_edge(3, 2, 30)
    G.add_edge(4, 2, 30)
    G.add_edge(2, 5, 32)
    G.add_edge(2, 5, 33)
    assert dnx.count_temporal_motif(G, ((1, 2), (2, 3), (2, 3)), 3) == 3
    assert dnx.count_temporal_motif(G, ((1, 2), (2, 3), (2, 3)), 3, get_count_dict=True) == \
           {(1, 2, 2, 5, 2, 5): 1, (4, 2, 2, 5, 2, 5): 1, (3, 2, 2, 5, 2, 5): 1}
    assert dnx.count_temporal_motif(G, ((1, 2), (3, 2), (4, 2)), 3) == 0

    try:
        G1 = dnx.IntervalGraph()
        dnx.count_temporal_motif(G1, ((1, 2), (1, 3), (1, 2)), 5)
    except TypeError:
        assert 1
    else:
        assert 0