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'
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'
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
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
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'
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 == {}
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'
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
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 == {}
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
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)
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
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 == {}
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)
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"]
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 == {}
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 == {}
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'
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)
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