I don't observe anything weird. Here I see the following with the linesOn 20.04.2015 18:19, Bo Wu wrote:
> Hi all,
>
> I found something weird in deleting vertices and edges of a graph. Say I simply create a graph like:
>
> g = Graph(directed=False)
> g.add_vertex(7)
> g.add_edge(g.vertex(0), g.vertex(1))
> g.add_edge(g.vertex(1), g.vertex(2))
> g.add_edge(g.vertex(2), g.vertex(3))
> g.add_edge(g.vertex(3), g.vertex(4))
> g.add_edge(g.vertex(2), g.vertex(5))
> g.add_edge(g.vertex(5), g.vertex(6))
>
> del_list = [g.vertex(1), g.vertex(3)]
>
> for v in reversed(sorted(del_list)):
> print 'deleting vertex', int(v)
> ## for ve in v.out_edges():
> ## print 'deleting edges', ve.source(), ve.target()
> ## g.remove_edge(ve)
> g.remove_vertex(v, fast=True)
>
> The above code will delete vertex 3 first, then vertex 1 as expected. However, in order to keep correct topology, we should delete some related edges first, like the three commented lines (start with "##").
>
> But if you uncomment the three lines, weird thing happens: the program will delete vertex 1 first, then vertex 3.
>
> Of course I can sort the vertex index instead of vertex descriptor to avoid the problem. But I am wondering where is wrong. Could anyone explain this?
uncommented:
deleting vertex 3
deleting edges 3 2
deleting edges 3 4
deleting vertex 1
deleting edges 1 0
deleting edges 1 2
First vertex 3, then 1.
However there is indeed a problem with your code. In the documentation:
https://graph-tool.skewed.de/static/doc/quickstart.html#iterating-over-the-neighbourhood-of-a-vertex
there is this following warning:
You should never remove vertex or edge descriptors when iterating
over them, since this invalidates the iterators. If you plan to
remove vertices or edges during iteration, you must first store them
somewhere (such as in a list) and remove them only after no iterator
is being used. Removal during iteration will cause bad things to
happen.
This is what you are trying to do if you uncomment the lines, and it
might cause problems. Don't do that; store the edges in a list first.
Best,
Tiago
--
Tiago de Paula Peixoto <tiago@skewed.de>
_______________________________________________
graph-tool mailing list
graph-tool@skewed.de
http://lists.skewed.de/mailman/listinfo/graph-tool