Пример #1
0
def test_read_gexf_property_graph_from_file(tmpdir):
    tmpfile = tmpdir.join("gexf.out")
    tmpfilename = str(tmpfile)

    # write file json with escaped characters
    with open(tmpfilename, "w") as f:
        f.write(expected2)

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    def import_id_cb(id):
        return 'v{}'.format(id)

    read_gexf(g, tmpfilename, import_id_cb=import_id_cb)

    print(g.vertices)
    print(g.edges)
    print(g.vertex_attrs)
    print(g.edge_attrs)

    assert g.vertices == {'vv1', 'vv2', 'vv3'}
    assert g.edges == {'e0', 'e1'}
    assert g.edge_tuple('e0') == ('vv1', 'vv2', 1.0)
    assert g.vertex_attrs['vv1']['label'] == '0'
    assert g.edge_attrs['e0']['id'] == 'e12'
    
Пример #2
0
def test_read_gexf_property_graph_from_string():

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    def import_id_cb(id):
        return 'v{}'.format(id)

    parse_gexf(g, expected2, import_id_cb=import_id_cb)

    print(g.vertices)
    print(g.edges)
    print(g.vertex_attrs)
    print(g.edge_attrs)

    assert g.vertices == {'vv1', 'vv2', 'vv3'}
    assert g.edges == {'e0', 'e1'}
    assert g.edge_tuple('e0') == ('vv1', 'vv2', 1.0)
    assert g.vertex_attrs['vv1']['label'] == '0'
    assert g.edge_attrs['e0']['id'] == 'e12'
Пример #3
0
def test_property_graph_from_filename_without_importid_no_simple(tmpdir):
    tmpfile = tmpdir.join("graphml.out")
    tmpfilename = str(tmpfile)

    # write file json with escaped characters
    with open(tmpfilename, "w") as f:
        f.write(expected2)

    g = create_graph(
        directed=True,
        allowing_self_loops=False,
        allowing_multiple_edges=True,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(),
        edge_supplier=create_edge_supplier(),
    )

    read_graphml(g, tmpfilename, validate_schema=True, simple=False)

    assert g.vertices == {"v0", "v1", "v2", "v3"}
    assert g.edges == {"e0", "e1", "e2", "e3"}

    assert dict(g.edge_attrs) == {}

    # check that we also see the weights, even if they do not appear in
    # the properties
    assert g.edge_attrs["e1"]["weight"] == 4.4

    # test weight changes also by set
    g.set_edge_weight("e1", 100.4)
    assert g.edge_attrs["e1"]["weight"] == 100.4
Пример #4
0
def test_property_graph_non_weighted_from_string_without_importid():

    g = create_graph(
        directed=True,
        allowing_self_loops=False,
        allowing_multiple_edges=True,
        weighted=False,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(),
        edge_supplier=create_edge_supplier(),
    )

    parse_graphml(g, expected2, validate_schema=True, simple=True)

    assert g.vertices == {"v0", "v1", "v2", "v3"}
    assert g.edges == {"e0", "e1", "e2", "e3"}

    assert g.edge_attrs == {
        "e0": {"source": "0", "target": "1"},
        "e1": {"source": "0", "target": "2"},
        "e2": {"source": "0", "target": "3"},
        "e3": {"source": "2", "target": "3"},
    }

    # check that we also see the weights, even if they do not appear in
    # the properties
    assert g.edge_attrs["e1"]["weight"] == 1.0

    with pytest.raises(ValueError):
        g.edge_attrs["e1"]["weight"] = 2.0
Пример #5
0
def test_read_dot_property_graph_from_filename(tmpdir):
    tmpfile = tmpdir.join("dot.out")
    tmpfilename = str(tmpfile)

    expected=r"""digraph G {
  v1 [ color="red" ];
  v2 [ color="blue" ];
  v1 -> v2 [ capacity="5.0" ];
}
"""

    # write file json with escaped characters
    with open(tmpfilename, "w") as f:
        f.write(expected)

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    read_dot(g, tmpfilename)

    assert g.vertices == {'v0', 'v1'}
    assert g.edge_tuple('e0') == ('v0', 'v1', 1.0)
    assert g.vertex_attrs['v0']['color'] == 'red'
    assert g.vertex_attrs['v1']['color'] == 'blue'
    assert g.edge_attrs['e0']['capacity'] == '5.0'
Пример #6
0
def test_read_csv_property_graph_from_string():

    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     vertex_supplier=create_vertex_supplier(),
                     edge_supplier=create_edge_supplier())

    input_string = """1,2
2,3
3,4
4,1
"""

    def import_id_cb(id):
        return 'v{}'.format(int(id) + 1)

    parse_csv(g, input_string, import_id_cb=import_id_cb)

    print(g.vertices)

    assert g.vertices == {'v2', 'v3', 'v4', 'v5'}
    assert g.edge_tuple('e2') == ('v4', 'v5', 1.0)
    assert g.vertex_attrs == {}
    assert g.edge_attrs == {}
Пример #7
0
def test_read_dot_property_graph_from_string1():

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    expected=r"""digraph G {
  v1 [ color="red" ];
  v2 [ color="blue" ];
  v1 -> v2 [ capacity="5.0" ];
}
"""

    parse_dot(g, expected)

    assert g.vertices == {'v0', 'v1'}
    assert g.edge_tuple('e0') == ('v0', 'v1', 1.0)
    assert g.vertex_attrs['v0']['color'] == 'red'
    assert g.vertex_attrs['v1']['color'] == 'blue'
    assert g.edge_attrs['e0']['capacity'] == '5.0'
Пример #8
0
def build_property_graph():
    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     edge_supplier=create_edge_supplier(type='int'))

    for i in range(1, 11):
        g.add_vertex(i)

    g.add_edge(10, 1)
    g.add_edge(10, 2)
    g.add_edge(10, 3)
    g.add_edge(10, 4)
    g.add_edge(10, 5)
    g.add_edge(10, 6)
    g.add_edge(10, 7)
    g.add_edge(10, 8)
    g.add_edge(10, 9)

    g.add_edge(1, 2)
    g.add_edge(2, 3)
    g.add_edge(3, 4)
    g.add_edge(4, 5)
    g.add_edge(5, 6)
    g.add_edge(6, 7)
    g.add_edge(7, 8)
    g.add_edge(8, 9)
    g.add_edge(9, 1)

    return g
Пример #9
0
def test_read_csv_property_graph_from_file(tmpdir):
    tmpfile = tmpdir.join("csv.out")
    tmpfilename = str(tmpfile)

    input_string = """1,2
2,3
3,4
4,1
"""

    with open(tmpfilename, "w") as f:
        f.write(input_string)

    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     vertex_supplier=create_vertex_supplier(),
                     edge_supplier=create_edge_supplier())

    def import_id_cb(id):
        return 'v{}'.format(int(id) + 1)

    read_csv(g, tmpfilename, import_id_cb=import_id_cb)

    print(g.vertices)

    assert g.vertices == {'v2', 'v3', 'v4', 'v5'}
    assert g.edge_tuple('e2') == ('v4', 'v5', 1.0)
    assert g.vertex_attrs == {}
    assert g.edge_attrs == {}
Пример #10
0
def test_edge_supplier():

    es = utils.create_edge_supplier()

    assert es() == 'e0'
    assert es() == 'e1'
    assert es() == 'e2'

    es = utils.create_edge_supplier(prefix='edge')
    assert es() == 'edge0'
    assert es() == 'edge1'
    assert es() == 'edge2'

    es = utils.create_edge_supplier(type='int', prefix='edge')
    assert es() == 0
    assert es() == 1
    assert es() == 2

    es = utils.create_edge_supplier(type='int', start=3)
    assert es() == 3
    assert es() == 4
    assert es() == 5
Пример #11
0
def test_read_sparse6_property_graph_from_string1():

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    parse_graph6sparse6(g, ':Cca')

    assert g.vertices == {'v0', 'v1', 'v2', 'v3'}
    assert g.edge_tuple('e0') == ('v0', 'v1', 1.0)
Пример #12
0
def test_anyhashableg_dimacs_increase_to_positive_id(tmpdir):
    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     edge_supplier=create_edge_supplier(type='int'))

    for i in range(0, 10):
        g.add_vertex(i)

    g.add_edge(0, 1)
    g.add_edge(0, 2)
    g.add_edge(0, 3)
    g.add_edge(0, 4)
    g.add_edge(0, 5)
    g.add_edge(0, 6)
    g.add_edge(0, 7)
    g.add_edge(0, 8)
    g.add_edge(0, 9)

    g.add_edge(1, 2)
    g.add_edge(2, 3)
    g.add_edge(3, 4)
    g.add_edge(4, 5)
    g.add_edge(5, 6)
    g.add_edge(6, 7)
    g.add_edge(7, 8)
    g.add_edge(8, 9)
    g.add_edge(9, 1)

    def increase_vid(id):
        return id + 1

    tmpfile = tmpdir.join("dimacs.out")
    tmpfilename = str(tmpfile)
    write_dimacs(g,
                 tmpfilename,
                 format="shortestpath",
                 export_vertex_id_cb=increase_vid)

    with open(tmpfilename, "r") as f:
        contents = f.read()
        print(contents)

    assert contents == dimacs_sp_expected
Пример #13
0
def test_read_dimacs_property_graph_from_string():

    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     vertex_supplier=create_vertex_supplier(),
                     edge_supplier=create_edge_supplier())

    parse_dimacs(g, dimacs_sp_expected)

    assert g.vertices == {
        'v0', 'v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7', 'v8', 'v9'
    }
    assert g.edge_tuple('e6') == ('v0', 'v7', 1.0)
    assert g.vertex_attrs == {}
    assert g.edge_attrs == {}
Пример #14
0
def test_read_sparse6_property_graph_from_string():

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    def import_id_cb(id):
        return 'vv{}'.format(id)

    parse_graph6sparse6(g, ':Cca', import_id_cb=import_id_cb)

    assert g.vertices == {'vv0', 'vv1', 'vv2', 'vv3'}
    assert g.edge_tuple('e0') == ('vv0', 'vv1', 1.0)
Пример #15
0
def test_property_graph_from_string():

    g = create_graph(
        directed=True,
        allowing_self_loops=False,
        allowing_multiple_edges=True,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(),
        edge_supplier=create_edge_supplier(),
    )

    def import_id_cb(id):
        return "vertex-{}".format(id)

    parse_graphml(
        g, expected2, import_id_cb=import_id_cb, validate_schema=True, simple=True
    )

    assert g.vertices == {"vertex-0", "vertex-1", "vertex-2", "vertex-3"}
    assert g.edges == {"e0", "e1", "e2", "e3"}

    assert g.edge_attrs["e1"]["weight"] == 4.4
def test_listenable_property_graph():

    g = create_graph(
        directed=True,
        allowing_self_loops=True,
        allowing_multiple_edges=True,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(),
        edge_supplier=create_edge_supplier(),
    )

    vertices = []

    def listener(element, event):
        if event == GraphEvent.VERTEX_ADDED:
            vertices.append(element)

    g.add_listener(listener)

    complete_graph(g, 5)

    assert vertices == ["v0", "v1", "v2", "v3", "v4"]
Пример #17
0
def test_read_dimacs_property_graph_from_file(tmpdir):
    tmpfile = tmpdir.join("dimacs.out")
    tmpfilename = str(tmpfile)

    # write file json with escaped characters
    with open(tmpfilename, "w") as f:
        f.write(dimacs_sp_expected)

    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     vertex_supplier=create_vertex_supplier(),
                     edge_supplier=create_edge_supplier())

    read_dimacs(g, tmpfilename)

    assert g.vertices == {
        'v0', 'v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7', 'v8', 'v9'
    }
    assert g.edge_tuple('e6') == ('v0', 'v7', 1.0)
    assert g.vertex_attrs == {}
    assert g.edge_attrs == {}
Пример #18
0
def test_read_csv_property_graph_from_string1():

    g = create_graph(directed=False,
                     allowing_self_loops=False,
                     allowing_multiple_edges=False,
                     weighted=True,
                     any_hashable=True,
                     vertex_supplier=create_vertex_supplier(),
                     edge_supplier=create_edge_supplier())

    input_string = """1,2
2,3
3,4
4,1
"""

    parse_csv(g, input_string)

    print(g.vertices)

    assert g.vertices == {'v0', 'v1', 'v2', 'v3'}
    assert g.edge_tuple('e2') == ('v2', 'v3', 1.0)
    assert g.vertex_attrs == {}
    assert g.edge_attrs == {}
Пример #19
0
def test_read_gexf_property_graph_from_string1():

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(), 
        edge_supplier=create_edge_supplier()
    )

    parse_gexf(g, expected2)

    print(g.vertices)
    print(g.edges)
    print(g.vertex_attrs)
    print(g.edge_attrs)

    assert g.vertices == {'v0', 'v1', 'v2'}
    assert g.edges == {'e0', 'e1'}
    assert g.edge_tuple('e0') == ('v0', 'v1', 1.0)
    assert g.vertex_attrs['v0']['label'] == '0'
    assert g.edge_attrs['e0']['id'] == 'e12'
Пример #20
0
def test_read_anyhashableg_sparse6_graph_from_file(tmpdir):
    tmpfile = tmpdir.join("gml.out")
    tmpfilename = str(tmpfile)

    with open(tmpfilename, "w") as f:
        f.write(":Cca")

    g = create_graph(
        directed=False,
        allowing_self_loops=False,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(type='int'),
        edge_supplier=create_edge_supplier(type='int'),
    )

    def import_id_cb(id):
        return int(id)

    read_graph6sparse6(g, tmpfilename, import_id_cb=import_id_cb)

    assert g.vertices == {0, 1, 2, 3}
    assert g.edge_tuple(0) == (0, 1, 1.0)
Пример #21
0
def test_as_unweighted_on_property_graphs():
    g = create_graph(
        directed=True,
        allowing_self_loops=True,
        allowing_multiple_edges=False,
        weighted=True,
        any_hashable=True,
        vertex_supplier=create_vertex_supplier(),
        edge_supplier=create_edge_supplier(),
    )

    g.add_vertex()
    g.add_vertex()
    g.add_vertex()
    g.add_vertex()
    g.add_edge('v0', 'v1')
    g.add_edge('v1', 'v2')
    g.add_edge('v2', 'v3')

    g.set_edge_weight('e0', 100.0)
    g.set_edge_weight('e1', 50.0)
    g.set_edge_weight('e2', 25.0)

    g.vertex_attrs['v0']['before'] = 'v0'
    g.vertex_attrs['v1']['before'] = 'v1'
    g.edge_attrs['e0']['before'] = 'e0'
    g.edge_attrs['e1']['before'] = 'e1'

    g1 = as_unweighted(g)

    assert g.type.directed == g1.type.directed
    assert g.type.allowing_self_loops == g1.type.allowing_self_loops
    assert g.type.allowing_multiple_edges == g1.type.allowing_multiple_edges
    assert g.type.weighted != g1.type.weighted

    assert g1.get_edge_weight('e0') == 1.0
    assert g1.get_edge_weight('e1') == 1.0
    assert g1.get_edge_weight('e2') == 1.0

    # test that properties still exist
    assert g.vertex_attrs['v0']['before'] == 'v0'
    assert g.vertex_attrs['v1']['before'] == 'v1'
    assert g.edge_attrs['e0']['before'] == 'e0'
    assert g.edge_attrs['e1']['before'] == 'e1'

    assert g1.vertex_attrs['v0']['before'] == 'v0'
    assert g1.vertex_attrs['v1']['before'] == 'v1'
    assert g1.edge_attrs['e0']['before'] == 'e0'
    assert g1.edge_attrs['e1']['before'] == 'e1'

    # test adding a property in g
    g.vertex_attrs['v0']['after'] = 'v0'
    assert g1.vertex_attrs['v0']['after'] == 'v0'

    # test adding a property in g1
    g1.edge_attrs['e0']['after'] = 'e0'
    assert g.edge_attrs['e0']['after'] == 'e0'

    # test deleting a property from g
    del g.vertex_attrs['v1']['before']
    with pytest.raises(KeyError):
        g1.vertex_attrs['v1']['before']

    with pytest.raises(ValueError):
        g1.edge_attrs['e0']['weight'] = 200.0

    g.edge_attrs['e0']['weight'] = 200.0
    assert g.edge_attrs['e0']['weight'] == 200.0
    assert g1.edge_attrs['e0']['weight'] == 1.0