PropertyMaps 'reuse' values assigned to deleted vertices/edges
While I was unit-testing my code, I came across some strange behaviour, which I traced back to graph-tool
.
If I have some property maps and delete vertices/edges from the corresponding graph and then add some other vertex/edge, the property map 'reuses' the previously assigned values, corresponding to already-deleted vertices/edges.
It is best illustrated by the following:
>>> g = gt.Graph()
>>> eprop_obj = g.new_edge_property("object")
>>> v = g.add_vertex()
>>> e = g.add_edge(v,v)
>>> eprop_obj[e]
>>> eprop_obj[e] = "eprop"
>>> g.remove_edge(e)
>>> eprop_obj[e] # as expected
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/graph_tool/__init__.py", line 403, in __getitem__
return self.__map[self.__key_trans(k)]
ValueError: invalid edge descriptor
>>> e = g.add_edge(v,v)
>>> eprop_obj[e] #NOTE: would be the same if I did v2 = g.add_vertex() ; e = g.add_edge(v,v2)
'eprop'
>>> vprop_obj = g.new_vertex_property("object")
>>> vprop_obj[v] = "vprop"
>>> g.remove_vertex(v)
>>> vprop_obj[v] # as expected
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/graph_tool/__init__.py", line 403, in __getitem__
return self.__map[self.__key_trans(k)]
ValueError: invalid vertex descriptor: 0
>>> eprop_obj[e] # as expected
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/graph_tool/__init__.py", line 403, in __getitem__
return self.__map[self.__key_trans(k)]
ValueError: invalid vertex descriptor: 0
>>> v2 = g.add_vertex()
>>> eprop_obj[e] #NOTE: gets reset
>>> vprop_obj[v2] #NOTE: bug strikes again!
'vprop'