|
@@ -96,6 +96,8 @@ def reverseKeyLookup(a, b, **remainder):
|
|
|
if edges_out is None or edges_in is None:
|
|
|
yield [("RETURN", [{'value': ""}])]
|
|
|
|
|
|
+ if len(edges_in) > 2:
|
|
|
+ edges_out = set(edges_out)
|
|
|
for edge in edges_in:
|
|
|
if edge in edges_out:
|
|
|
out_edges, = yield [("RO", [edge])]
|
|
@@ -527,23 +529,21 @@ def read_attribute(a, b, c, root, **remainder):
|
|
|
outgoing_names = []
|
|
|
backlinks = {}
|
|
|
edges_out, = yield [("RO", [m])]
|
|
|
- edges_out = set(edges_out)
|
|
|
for i in outgoing_edges:
|
|
|
edges_in, = yield [("RI", [i])]
|
|
|
-
|
|
|
- if edges_in is None:
|
|
|
- continue
|
|
|
+ if len(edges_in) > 2:
|
|
|
+ edges_out = set(edges_out)
|
|
|
|
|
|
for edge in edges_in:
|
|
|
if edge in edges_out:
|
|
|
out_edges, = yield [("RO", [edge])]
|
|
|
# Select one option randomly
|
|
|
- if out_edges:
|
|
|
- out_edge = out_edges.pop()
|
|
|
- e, = yield [("RE", [out_edge])]
|
|
|
- val, = yield [("RV", [e[1]])]
|
|
|
- backlinks[val] = i
|
|
|
- outgoing_names.append(val)
|
|
|
+ out_edge = out_edges.pop()
|
|
|
+ e, = yield [("RE", [out_edge])]
|
|
|
+ val, = yield [("RV", [e[1]])]
|
|
|
+ backlinks[val] = i
|
|
|
+ outgoing_names.append(val)
|
|
|
+ break
|
|
|
|
|
|
if outgoing_names:
|
|
|
# Read out the types and flatten
|
|
@@ -566,9 +566,5 @@ def read_attribute(a, b, c, root, **remainder):
|
|
|
if edge in backlinks:
|
|
|
val, = yield [("RE", [backlinks[edge]])]
|
|
|
yield [("RETURN", [{'id': val[1]}])]
|
|
|
- else:
|
|
|
- outgoing_edges, = yield [("RO", [elem])]
|
|
|
- ee = yield [("RE", [i]) for i in outgoing_edges]
|
|
|
- vals = yield [("RV", [i[1]]) for i in ee]
|
|
|
|
|
|
yield [("RETURN", [{'id': root}])]
|