|
1 | 1 | """
|
2 |
| - getindex(g) |
| 2 | + getindex(meta_graph) |
3 | 3 |
|
4 |
| -Return graph metadata. |
| 4 | +Return meta_graph metadata. |
5 | 5 | """
|
6 |
| -Base.getindex(g::MetaGraph) = g.graph_data |
| 6 | +function Base.getindex(meta_graph::MetaGraph) |
| 7 | + meta_graph.graph_data |
| 8 | +end |
7 | 9 |
|
8 | 10 | """
|
9 |
| - getindex(g, label) |
| 11 | + getindex(meta_graph, label) |
10 | 12 |
|
11 | 13 | Return vertex metadata for `label`.
|
12 | 14 | """
|
13 |
| -Base.getindex(g::MetaGraph, label) = g.vertex_properties[label][2] |
| 15 | +function Base.getindex(meta_graph::MetaGraph, label) |
| 16 | + meta_graph.vertex_properties[label][2] |
| 17 | +end |
14 | 18 |
|
15 | 19 | """
|
16 |
| - getindex(g, label_1, label_2) |
| 20 | + getindex(meta_graph, label_1, label_2) |
17 | 21 |
|
18 | 22 | Return edge metadata for the edge between `label_1` and `label_2`.
|
19 | 23 | """
|
20 |
| -Base.getindex(g::MetaGraph, label_1, label_2) = g.edge_data[arrange(g, label_1, label_2)] |
| 24 | +function Base.getindex(meta_graph::MetaGraph, label_1, label_2) |
| 25 | + meta_graph.edge_data[arrange(meta_graph, label_1, label_2)] |
| 26 | +end |
21 | 27 |
|
22 | 28 | """
|
23 |
| - haskey(g, label) |
| 29 | + haskey(meta_graph, label) |
24 | 30 |
|
25 |
| -Determine whether a graph `g` contains the vertex `label`. |
| 31 | +Determine whether a meta_graph `meta_graph` contains the vertex `label`. |
26 | 32 | """
|
27 |
| -Base.haskey(g::MetaGraph, label) = haskey(g.vertex_properties, label) |
| 33 | +function Base.haskey(meta_graph::MetaGraph, label) |
| 34 | + haskey(meta_graph.vertex_properties, label) |
| 35 | +end |
28 | 36 |
|
29 | 37 | """
|
30 |
| - haskey(g, label_1, label_2) |
| 38 | + haskey(meta_graph, label_1, label_2) |
31 | 39 |
|
32 |
| -Determine whether a graph `g` contains an edge from `label_1` to `label_2`. |
| 40 | +Determine whether a meta_graph `meta_graph` contains an edge from `label_1` to `label_2`. |
33 | 41 |
|
34 |
| -The order of `label_1` and `label_2` only matters if `g` is a digraph. |
| 42 | +The order of `label_1` and `label_2` only matters if `meta_graph` is a digraph. |
35 | 43 | """
|
36 |
| -function Base.haskey(g::MetaGraph, label_1, label_2) |
37 |
| - return ( |
38 |
| - haskey(g, label_1) && |
39 |
| - haskey(g, label_2) && |
40 |
| - haskey(g.edge_data, arrange(g, label_1, label_2)) |
41 |
| - ) |
| 44 | +function Base.haskey(meta_graph::MetaGraph, label_1, label_2) |
| 45 | + haskey(meta_graph, label_1) && |
| 46 | + haskey(meta_graph, label_2) && |
| 47 | + haskey(meta_graph.edge_data, arrange(meta_graph, label_1, label_2)) |
42 | 48 | end
|
43 | 49 |
|
44 | 50 | """
|
45 |
| - setindex!(g, data, label) |
| 51 | + setindex!(meta_graph, data, label) |
46 | 52 |
|
47 | 53 | Set vertex metadata for `label` to `data`.
|
48 | 54 | """
|
49 |
| -function Base.setindex!(g::MetaGraph, data, label) |
50 |
| - if haskey(g, label) |
51 |
| - set_data!(g, label, data) |
| 55 | +function Base.setindex!(meta_graph::MetaGraph, data, label) |
| 56 | + if haskey(meta_graph, label) |
| 57 | + set_data!(meta_graph, label, data) |
52 | 58 | else
|
53 |
| - add_vertex!(g, label, data) |
| 59 | + add_vertex!(meta_graph, label, data) |
54 | 60 | end
|
55 |
| - return nothing |
| 61 | + nothing |
56 | 62 | end
|
57 | 63 |
|
58 | 64 | """
|
59 |
| - setindex!(g, data, label_1, label_2) |
| 65 | + setindex!(meta_graph, data, label_1, label_2) |
60 | 66 |
|
61 | 67 | Set edge metadata for `(label_1, label_2)` to `data`.
|
62 | 68 | """
|
63 |
| -function Base.setindex!(g::MetaGraph, data, label_1, label_2) |
64 |
| - if haskey(g, label_1, label_2) |
65 |
| - set_data!(g, label_1, label_2, data) |
| 69 | +function Base.setindex!(meta_graph::MetaGraph, data, label_1, label_2) |
| 70 | + if haskey(meta_graph, label_1, label_2) |
| 71 | + set_data!(meta_graph, label_1, label_2, data) |
66 | 72 | else
|
67 |
| - add_edge!(g, label_1, label_2, data) |
| 73 | + add_edge!(meta_graph, label_1, label_2, data) |
68 | 74 | end
|
69 |
| - return nothing |
| 75 | + nothing |
70 | 76 | end
|
71 | 77 |
|
72 | 78 | """
|
73 |
| - delete!(g, label) |
| 79 | + delete!(meta_graph, label) |
74 | 80 |
|
75 | 81 | Delete vertex `label`.
|
76 | 82 | """
|
77 |
| -function Base.delete!(g::MetaGraph, label) |
78 |
| - if haskey(g, label) |
79 |
| - v = code_for(g, label) |
80 |
| - _rem_vertex!(g, label, v) |
| 83 | +function Base.delete!(meta_graph::MetaGraph, label) |
| 84 | + if haskey(meta_graph, label) |
| 85 | + _rem_vertex!(meta_graph, label, code_for(meta_graph, label)) |
81 | 86 | end
|
82 |
| - return nothing |
| 87 | + nothing |
83 | 88 | end
|
84 | 89 |
|
85 | 90 | """
|
86 |
| - delete!(g, label_1, label_2) |
| 91 | + delete!(meta_graph, label_1, label_2) |
87 | 92 |
|
88 | 93 | Delete edge `(label_1, label_2)`.
|
89 | 94 | """
|
90 |
| -function Base.delete!(g::MetaGraph, label_1, label_2) |
91 |
| - v1, v2 = code_for(g, label_1), code_for(g, label_2) |
92 |
| - rem_edge!(g, v1, v2) |
93 |
| - return nothing |
| 95 | +function Base.delete!(meta_graph::MetaGraph, label_1, label_2) |
| 96 | + rem_edge!(meta_graph, code_for(meta_graph, label_1), code_for(meta_graph, label_2)) |
| 97 | + nothing |
94 | 98 | end
|
95 | 99 |
|
96 | 100 | """
|
97 |
| - _copy_props!(oldg, newg, vmap) |
| 101 | + _copy_props!(old_meta_graph, new_meta_graph, code_map) |
98 | 102 |
|
99 |
| -Copy properties from `oldg` to `newg` following vertex map `vmap`. |
| 103 | +Copy properties from `old_meta_graph` to `new_meta_graph` following vertex map `code_map`. |
100 | 104 | """
|
101 |
| -function _copy_props!(oldg::G, newg::G, vmap) where {G<:MetaGraph} |
102 |
| - for (newv, oldv) in enumerate(vmap) |
103 |
| - oldl = oldg.vertex_labels[oldv] |
104 |
| - _, data = oldg.vertex_properties[oldl] |
105 |
| - newg.vertex_labels[newv] = oldl |
106 |
| - newg.vertex_properties[oldl] = (newv, data) |
| 105 | +function _copy_props!(old_meta_graph::MetaGraph, new_meta_graph::MetaGraph, code_map) |
| 106 | + for (new_code, old_code) in enumerate(code_map) |
| 107 | + old_label = old_meta_graph.vertex_labels[old_code] |
| 108 | + _, data = old_meta_graph.vertex_properties[old_label] |
| 109 | + new_meta_graph.vertex_labels[new_code] = old_label |
| 110 | + new_meta_graph.vertex_properties[old_label] = (new_code, data) |
107 | 111 | end
|
108 |
| - for newe in edges(newg.graph) |
109 |
| - vertex_labels = newg.vertex_labels |
110 |
| - v1, v2 = Tuple(newe) |
111 |
| - label_1 = vertex_labels[v1] |
112 |
| - label_2 = vertex_labels[v2] |
113 |
| - newg.edge_data[arrange(newg, label_1, label_2, v1, v2)] = oldg.edge_data[arrange( |
114 |
| - oldg, label_1, label_2 |
115 |
| - )] |
| 112 | + for new_edge in edges(new_meta_graph.graph) |
| 113 | + vertex_labels = new_meta_graph.vertex_labels |
| 114 | + code_1, code_2 = Tuple(new_edge) |
| 115 | + label_1 = vertex_labels[code_1] |
| 116 | + label_2 = vertex_labels[code_2] |
| 117 | + new_meta_graph.edge_data[arrange(new_meta_graph, label_1, label_2, code_1, code_2)] = |
| 118 | + old_meta_graph.edge_data[arrange(old_meta_graph, label_1, label_2)] |
116 | 119 | end
|
117 |
| - return nothing |
| 120 | + nothing |
118 | 121 | end
|
119 | 122 |
|
120 | 123 | # TODO - It would be nice to be able to apply a function to properties.
|
|
0 commit comments