`iter_all_edges` doesn't honor `set_reversed` status
I'm using graph_tool-2.43. Consider the following code. The giter_all_edges
is a wrapper that needs to manually check the reversed status and adjust the order of edges. I assume that this is a bug, since giter_edges
doesn't have to do this.
from graph_tool import (Graph, Vertex, Edge, GraphView)
def giter_all_edges(g:Graph,v,eprops=[]):
for xs in g.iter_all_edges(v,eprops):
yield tuple([xs[1],xs[0]]+xs[2:]) if g.is_reversed() else xs # <-- Need to manually reverse nodes (!!!)
def giter_edges(g:Graph,eprops=[]):
for xs in g.iter_edges(eprops):
yield xs
# Create a 2-node graph with an edge
g=Graph(directed=True)
v1=g.add_vertex()
v2=g.add_vertex()
e1=g.edge(v1,v2,add_missing=True)
eprop=g.new_ep('int64_t')
edges={}
for s,t in g.iter_edges([]):
eprop[g.edge(s,t)]=111
edges[s]=t
assert len(edges)==1
# Make sure that iterators work correctly
for s,t,e in giter_all_edges(g,v1,[eprop]):
assert eprop[g.edge(s,t)]==111
assert edges[s]==t
for s,t,e in giter_edges(g,[eprop]):
assert eprop[g.edge(s,t)]==111
assert edges[s]==t
# Reverse the graph
g.set_reversed(True)
# Oh no, without the wrapper this would fail
for s,t,e in giter_all_edges(g,v1,[eprop]):
assert eprop[g.edge(s,t)]==111
assert edges[t]==s
# .. and this would not
for s,t,e in giter_edges(g,[eprop]):
assert eprop[g.edge(s,t)]==111
assert edges[t]==s