A Sage graph G
has a backend graph (say GG
) accessible with the private _backend
attribute. The later graph refers to two "C-graphs"" (say G1
and G2
) accessibles via the c-graph
attribute.
Some code with a weighted graph G
to illustrate my question :
import string
ALPHA = string.ascii_uppercase
n = 10
wedges = [(0, 1, 7.0), (0, 3, 1.0), (0, 9, 9.0), (1, 7, 6.0), (2, 8, 7.0),
(2, 9, 2.0), (3, 6, 7.0), (4, 9, 5.0), (5, 9, 6.0), (6, 9, 9.0),
(6, 7, 1.0), (7, 8, 9.0), (7, 9, 5.0), (8, 9, 3.0)]
wedges = [(ALPHA[i], ALPHA[j], 10 * w) for (i, j, w) in wedges]
G = Graph()
G.add_edges(wedges)
G.weighted(True)
for v in G:
print v, ''.join(G[v])
print
print "G type:", type(G)
print "-----------------------------"
GG = G._backend
print "GG type:", type(GG)
print list(GG.iterator_verts())
print "-----------------------------"
G1, G2 = GG.c_graph()
print "G1 type:", type(G1)
print
for i in range(n):
print i, ''.join(map(str, G1.out_neighbors(i)))
outputting:
A BDJ
C JI
B AH
E J
D AG
G DJH
F J
I JHC
H BJIG
J AHCIGEF
G type: <class 'sage.graphs.graph.Graph'>
-----------------------------
GG type: <type 'sage.graphs.base.sparse_graph.SparseGraphBackend'>
['A', 'C', 'B', 'E', 'D', 'G', 'F', 'I', 'H', 'J']
-----------------------------
G1 type: <type 'sage.graphs.base.sparse_graph.SparseGraph'>
0 123
1 04
2 07
3 0456789
4 1367
5 36
6 345
7 234
8 3
9 3
The graphs above G
, GG
and G1
have n=10
vertices. The difference is that G1's vertices are labelled from 0 to n-1
. As you can imagine, the two graph G
and G1
are isomorphic.
So my question is simple: does anybody know how to access the mapping between the vertice sets?
The documentation explains that two dictionaries vertex_ints
and vertex_labels
are available to make translation from vertices id to integers and vice-versa, unfortunately, GG.vertex_ints
and GG.vertex_labels
cause an attribute error.
As you may see, and contrary to what I was expecting, the correpondance is not $i\mapsto G[i]$.