Hello,
Since past couple days I encounter a new RuntimeError that I fail to
explain. See below the end of the error stack :
File "utils/graph.py", line 345, in multiple_shortest_path p =
graph.vertex(pred_map[v])
File "/usr/lib/python2.7/dist-packages/graph_tool/__init__.py", line 1777,
in vertex v = libcore.get_vertex(self.__graph, int(i), use_index)
RuntimeError: Edge filter is active but vertex filter is not. This is a bug.
This error is raised in a customized version of the
*graph_tool.topology.shortest_path *function. This function (named
multiple_shortest_path) is "optimized" to compute multiple shortest paths from
a source vertex to a set of targets. This function is presented below.
Would anybody have some hints on the reason of this intermittent error ?
Thanks,
F.
def multiple_shortest_path(graph, source, targets, distances, pred_map):
"""
:param graph: a GraphTool.Graph instance.
:param source: origin vertex id in *graph*
:param targets: the vertices ids (in *graph*) for which we compute
the shortest paths
:param distances: a property map that contains distances from
source vertex to each vertex
:param* pred_map: a property map of predecessor computed by
graph_tool.shortest_distance*
"""
# sort the targets from the farthest to the closest
targets, _ = zip(*sorted([(graph.vertex(t), distances.a[t]) for t
in targets], key=lambda x: x[1]))
vlists = {}
for tgt in targets:
if pred_map[tgt] == int(tgt) and tgt != source:
# Ain't no path to target (should not happen, but better
safe than sorry)
vlists[tgt] = []
v = tgt
vlist = [tgt]
# we crawl back the predecessor map until the source is reached
while v != source:
# one step more toward the source
p = graph.vertex(pred_map[v])
if p in vlists:
# we already know the shortest_path (avoid useless
crawl back to the source)
vlist = vlists[p] + vlist
v = graph.vertex(vlist[0])
else:
# saves the current step
vlist.insert(0, p)
# predecessor vertex becomes the current vertex
(recall we crawl back from target until source)
v = p
# Saves the vertices list from target to source (ie. the
shortest path wrt. the predecessor map)
vlists[tgt] = vlist
return vlists
attachment.html (7.37 KB)