Vertex label reordering

Hi everyone,

   I've been working around with graph-tool and I have found a strange
behaviour.

   A have this input .dot file

graph G {
0 ;
10 ;
200 ;
1000 ;
0--200 ;
10--200 ;
1000--200 ;
1000--10 ;
}

I load the graph in graph_tool using g=load_graph("example.dot") and
everything is OK. Now I want to know the output_degree of the node with
identifier 200 (index 2). I use:

g.vertex(2).out_degree() that returns 2

Obviously vertex with identifier 200 (index 2) must return 3.

I have executed g.save("graphtool_dump.dot") with the following output:
graph G {
0;
10;
1000;
200;
0--200 ;
10--200 ;
1000--200 ;
1000--10 ;
}

The nodes have been reordered (probably following alphabetic order) and now
the vertex with identifier "200" is in position 3 instead of 2. This
behaviour can be very annoying in some cases, and can lead to confusion.
Does exist any way to avoid this reordering?

Thanks in advance,

Juan

attachment.html (1.06 KB)

Hi Juan,

Juan Manuel Tirado wrote:

Hi everyone,

   I've been working around with graph-tool and I have found a strange
behaviour.

   A have this input .dot file

graph G {
0 ;
10 ;
200 ;
1000 ;
0--200 ;
10--200 ;
1000--200 ;
1000--10 ;
}

I load the graph in graph_tool using g=load_graph("example.dot") and
everything is OK. Now I want to know the output_degree of the node with
identifier 200 (index 2). I use:

g.vertex(2).out_degree() that returns 2

Obviously vertex with identifier 200 (index 2) must return 3.

There is no promise that the ordering in the dot file will correspond to
the indexes, since no implicit ordering in the dot format can always be
assumed; the vertex list may even be absent.

You may check which vertex is which with the "vertex_name" property
which is always loaded with .dot files:

    name = g.vertex_properties['vertex_name']
    for v in g.vertices():
        print int(v), name[v]

Which outputs:

    0 0
    1 10
    2 1000
    3 200

So, vertex 200 is g.vertex(3), which has out_degree 3, as expected.

I have executed g.save("graphtool_dump.dot") with the following output:
graph G {
0;
10;
1000;
200;
0--200 ;
10--200 ;
1000--200 ;
1000--10 ;
}

The nodes have been reordered (probably following alphabetic order) and now
the vertex with identifier "200" is in position 3 instead of 2. This
behaviour can be very annoying in some cases, and can lead to confusion.
Does exist any way to avoid this reordering?

Not really, since this is the way that Boost loads dot files. Note that
it shouldn't matter which index a node has, since its identity is stored
in the 'vertex_name' property shown above. But, if you want more strict
ordering in the output file, I recommend using the graphml format.

Cheers,
Tiago