|
@@ -2,34 +2,21 @@ from modelverse_kernel.primitives import PrimitiveFinished
|
|
|
import modelverse_jit.runtime as jit_runtime
|
|
|
|
|
|
def reverseKeyLookupMulti(a, b, **remainder):
|
|
|
- edges, = yield [("RO", [a])]
|
|
|
- b_val, = yield [("RV", [b])]
|
|
|
+ edges, b_val, result = yield [("RO", [a]), ("RV", [b]), ("CN", [])]
|
|
|
expanded_edges = yield [("RE", [i]) for i in edges]
|
|
|
values = yield [("RV", [i[1]]) for i in expanded_edges]
|
|
|
- result, = yield [("CN", [])]
|
|
|
|
|
|
+ # Keep results in a local Python set, as we want to bundle as many requests as possible
|
|
|
+ todo = set()
|
|
|
for i, edge in enumerate(values):
|
|
|
if b_val == edge:
|
|
|
- # Found our edge: edges[i]
|
|
|
- outgoing, = yield [("RO", [edges[i]])]
|
|
|
- value, = yield [("RE", [outgoing[0]])]
|
|
|
- yield [("CE", [result, value[1]])]
|
|
|
+ todo.add(i)
|
|
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ outgoings = yield [("RO", [edges[i]]) for i in todo]
|
|
|
+ values = yield [("RE", [outgoing[0]]) for outgoing in outgoings]
|
|
|
+ yield [("CE", [result, value[1]]) for value in values]
|
|
|
|
|
|
- """
|
|
|
- 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):
|
|
|
edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
|
|
@@ -54,16 +41,6 @@ def set_copy(a, **remainder):
|
|
|
_ = yield [("CE", [b, i[1]]) for i in exp_links]
|
|
|
raise PrimitiveFinished(b)
|
|
|
|
|
|
-def construct_const(**remainder):
|
|
|
- v, = yield [("CNV", [{"value": "constant"}])]
|
|
|
-
|
|
|
- # Get input: keep trying until we get something
|
|
|
- inp, = yield [("CALL_KWARGS", [jit_runtime.get_input, remainder])]
|
|
|
-
|
|
|
- yield [("CD", [v, "node", inp])]
|
|
|
-
|
|
|
- raise PrimitiveFinished(v)
|
|
|
-
|
|
|
def instantiated_name(a, b, **remainder):
|
|
|
name_value, = yield [("RV", [b])]
|
|
|
if name_value == "":
|