|
@@ -17,26 +17,36 @@ def reverseKeyLookupMulti(a, b, **remainder):
|
|
|
|
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
|
|
+ """
|
|
|
|
+ edges_out, edges_in, result = yield [("RO", [a]), ("RI", [b]), ("CN", [])]
|
|
|
|
+ python_result = set()
|
|
|
|
+ options = set(edges_out) & set(edges_in)
|
|
|
|
+ if options:
|
|
|
|
+ all_destination_edges = yield [("RO", [i]) for i in options]
|
|
|
|
+ for e in all_destination_edges:
|
|
|
|
+ st, = yield [("RE", [edge]) for edge in e]
|
|
|
|
+ s, t = st
|
|
|
|
+ python_result.add(t)
|
|
|
|
+ yield [("CE", [result, i]) for i in python_result]
|
|
|
|
+ raise PrimitiveFinished(result)
|
|
|
|
+ """
|
|
|
|
+
|
|
def reverseKeyLookup(a, b, **remainder):
|
|
def reverseKeyLookup(a, b, **remainder):
|
|
- # Guess, which might work
|
|
|
|
- guess, = yield [("RD", [a, "__%s" % b])]
|
|
|
|
- if guess == b:
|
|
|
|
- result, = yield [("CNV", ["__%s" % b])]
|
|
|
|
|
|
+ edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
|
|
|
|
+ options = set(edges_out) & set(edges_in)
|
|
|
|
+ if options:
|
|
|
|
+ # Select one option randomly
|
|
|
|
+ edge = options.pop()
|
|
|
|
+ out_edges, = yield [("RO", [edge])]
|
|
|
|
+ # Select one option randomly
|
|
|
|
+ out_edge = out_edges.pop()
|
|
|
|
+ e, = yield [("RE", [out_edge])]
|
|
|
|
+ s, t = e
|
|
|
|
+ raise PrimitiveFinished(t)
|
|
|
|
+ else:
|
|
|
|
+ result, = yield [("CNV", ["(unknown: %s)" % b])]
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
- # We failed: do the slow way
|
|
|
|
- edges, = yield [("RO", [a])]
|
|
|
|
- expanded_edges = yield [("RE", [i]) for i in edges]
|
|
|
|
- for i, edge in enumerate(expanded_edges):
|
|
|
|
- if b == edge[1]:
|
|
|
|
- # Found our edge: edges[i]
|
|
|
|
- outgoing, = yield [("RO", [edges[i]])]
|
|
|
|
- result, = yield [("RE", [outgoing[0]])]
|
|
|
|
- raise PrimitiveFinished(result[1])
|
|
|
|
-
|
|
|
|
- result, = yield [("CNV", ["(unknown: %s)" % b])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
-
|
|
|
|
def set_copy(a, **remainder):
|
|
def set_copy(a, **remainder):
|
|
b, = yield [("CN", [])]
|
|
b, = yield [("CN", [])]
|
|
links, = yield [("RO", [a])]
|
|
links, = yield [("RO", [a])]
|