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