|
@@ -3,7 +3,6 @@ import modelverse_jit.runtime as jit_runtime
|
|
import time
|
|
import time
|
|
|
|
|
|
def reverseKeyLookupMulti(a, b, **remainder):
|
|
def reverseKeyLookupMulti(a, b, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
edges, b_val, result = yield [("RO", [a]), ("RV", [b]), ("CN", [])]
|
|
edges, b_val, result = yield [("RO", [a]), ("RV", [b]), ("CN", [])]
|
|
expanded_edges = yield [("RE", [i]) for i in edges]
|
|
expanded_edges = yield [("RE", [i]) for i in edges]
|
|
values = yield [("RV", [i[1]]) for i in expanded_edges]
|
|
values = yield [("RV", [i[1]]) for i in expanded_edges]
|
|
@@ -19,11 +18,9 @@ def reverseKeyLookupMulti(a, b, **remainder):
|
|
edges = yield [("CE", [result, result]) for value in values]
|
|
edges = yield [("CE", [result, result]) for value in values]
|
|
yield [("CE", [edge, value[1]]) for edge, value in zip(edges, values)]
|
|
yield [("CE", [edge, value[1]]) for edge, value in zip(edges, values)]
|
|
|
|
|
|
- #PROFILE print("[COMPILED]reverseKeyLookupMulti : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
def reverseKeyLookup(a, b, **remainder):
|
|
def reverseKeyLookup(a, b, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
|
|
edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
|
|
options = set(edges_out) & set(edges_in)
|
|
options = set(edges_out) & set(edges_in)
|
|
if options:
|
|
if options:
|
|
@@ -36,46 +33,36 @@ def reverseKeyLookup(a, b, **remainder):
|
|
result = e[1]
|
|
result = e[1]
|
|
else:
|
|
else:
|
|
result, = yield [("CNV", [""])]
|
|
result, = yield [("CNV", [""])]
|
|
- #PROFILE print("[COMPILED]reverseKeyLookup : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
def instantiated_name(a, b, **remainder):
|
|
def instantiated_name(a, b, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
name_value, = yield [("RV", [b])]
|
|
name_value, = yield [("RV", [b])]
|
|
if name_value == "":
|
|
if name_value == "":
|
|
b, = yield [("CNV", ["__" + str(a)])]
|
|
b, = yield [("CNV", ["__" + str(a)])]
|
|
- #PROFILE print("[COMPILED]instantiated_name : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(b)
|
|
raise PrimitiveFinished(b)
|
|
|
|
|
|
def set_merge(a, b, **remainder):
|
|
def set_merge(a, b, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
keys, = yield [("RDK", [b])]
|
|
keys, = yield [("RDK", [b])]
|
|
edges = yield [("CE", [a, a]) for key in keys]
|
|
edges = yield [("CE", [a, a]) for key in keys]
|
|
_ = yield [("CE", [edge, key]) for edge, key in zip(edges, keys)]
|
|
_ = yield [("CE", [edge, key]) for edge, key in zip(edges, keys)]
|
|
- #PROFILE print("[COMPILED]set_merge : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def has_value(a, **remainder):
|
|
def has_value(a, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
v, = yield [("RV", [a])]
|
|
v, = yield [("RV", [a])]
|
|
if v is None:
|
|
if v is None:
|
|
result, = yield [("CNV", [False])]
|
|
result, = yield [("CNV", [False])]
|
|
else:
|
|
else:
|
|
result, = yield [("CNV", [True])]
|
|
result, = yield [("CNV", [True])]
|
|
- #PROFILE print("[COMPILED]has_value : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
def make_reverse_dictionary(a, **remainder):
|
|
def make_reverse_dictionary(a, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
reverse, = yield [("CN", [])]
|
|
reverse, = yield [("CN", [])]
|
|
key_nodes, = yield [("RDK", [a])]
|
|
key_nodes, = yield [("RDK", [a])]
|
|
values = yield [("RDN", [a, i]) for i in key_nodes]
|
|
values = yield [("RDN", [a, i]) for i in key_nodes]
|
|
yield [("CD", [reverse, str(v), k]) for k, v in zip(key_nodes, values)]
|
|
yield [("CD", [reverse, str(v), k]) for k, v in zip(key_nodes, values)]
|
|
- #PROFILE print("[COMPILED]make_reverse_dictionary : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(reverse)
|
|
raise PrimitiveFinished(reverse)
|
|
|
|
|
|
def dict_eq(a, b, **remainder):
|
|
def dict_eq(a, b, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
key_nodes, = yield [("RDK", [a])]
|
|
key_nodes, = yield [("RDK", [a])]
|
|
key_values = yield [("RV", [i]) for i in key_nodes]
|
|
key_values = yield [("RV", [i]) for i in key_nodes]
|
|
values = yield [("RD", [a, i]) for i in key_values]
|
|
values = yield [("RD", [a, i]) for i in key_values]
|
|
@@ -89,11 +76,9 @@ def dict_eq(a, b, **remainder):
|
|
b_dict = dict(zip(key_values, values))
|
|
b_dict = dict(zip(key_values, values))
|
|
|
|
|
|
result, = yield [("CNV", [a_dict == b_dict])]
|
|
result, = yield [("CNV", [a_dict == b_dict])]
|
|
- #PROFILE print("[COMPILED]dict_eq : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
def string_substr(a, b, c, **remainder):
|
|
def string_substr(a, b, c, **remainder):
|
|
- #PROFILE start = time.time()
|
|
|
|
a_val, b_val, c_val = yield [("RV", [a]),
|
|
a_val, b_val, c_val = yield [("RV", [a]),
|
|
("RV", [b]),
|
|
("RV", [b]),
|
|
("RV", [c])]
|
|
("RV", [c])]
|
|
@@ -103,7 +88,6 @@ def string_substr(a, b, c, **remainder):
|
|
new_value = ""
|
|
new_value = ""
|
|
|
|
|
|
result, = yield [("CNV", [new_value])]
|
|
result, = yield [("CNV", [new_value])]
|
|
- #PROFILE print("[COMPILED]string_substr : %s : %s" % (time.time() - start, time.time() - start))
|
|
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
def integer_gt(a, b, **remainder):
|
|
def integer_gt(a, b, **remainder):
|
|
@@ -217,3 +201,51 @@ def set_overlap(a, b, **remainder):
|
|
yield [("CD", [res, value, res]) for value in result]
|
|
yield [("CD", [res, value, res]) for value in result]
|
|
|
|
|
|
raise PrimitiveFinished(res)
|
|
raise PrimitiveFinished(res)
|
|
|
|
+
|
|
|
|
+def get_superclasses(a, b, **remainder):
|
|
|
|
+ model, name = a, b
|
|
|
|
+ model_dict, tm_dict, name_value = yield [("RD", [a, "model"]),
|
|
|
|
+ ("RD", [a, "type_mapping"]),
|
|
|
|
+ ("RV", [b])]
|
|
|
|
+
|
|
|
|
+ worklist = set([name_value])
|
|
|
|
+ found = set([])
|
|
|
|
+
|
|
|
|
+ while worklist:
|
|
|
|
+ name = worklist.pop()
|
|
|
|
+ if name in found:
|
|
|
|
+ continue
|
|
|
|
+ elem, = yield [("RD", [model_dict, name])]
|
|
|
|
+ found.add(name)
|
|
|
|
+
|
|
|
|
+ # Iterate over all outgoing links
|
|
|
|
+ outgoing, = yield [("RO", [elem])]
|
|
|
|
+ outgoing = set(outgoing)
|
|
|
|
+ while (outgoing):
|
|
|
|
+ link = outgoing.pop()
|
|
|
|
+
|
|
|
|
+ # If the link is typed by "Inheritance", we add its destination
|
|
|
|
+ link_name_node, = yield [("CALL_ARGS", [reverseKeyLookup, [model_dict, link]])]
|
|
|
|
+ link_name, = yield [("RV", [link_name_node])]
|
|
|
|
+ t_edge, = yield [("RD", [tm_dict, link_name])]
|
|
|
|
+ t_edge, = yield [("RV", [t_edge])]
|
|
|
|
+ if t_edge == "Inheritance":
|
|
|
|
+ edge, = yield [("RE", [link])]
|
|
|
|
+ src, dst = edge
|
|
|
|
+ # Look up dst's name and add it
|
|
|
|
+ dst_name, = yield [("CALL_ARGS", [reverseKeyLookup, [model_dict, dst]])]
|
|
|
|
+ dst_name_value, = yield [("RV", [dst_name])]
|
|
|
|
+ worklist.add(dst_name_value)
|
|
|
|
+
|
|
|
|
+ result, = yield [("CN", [])]
|
|
|
|
+ yield [("CD", [result, i, result]) for i in found]
|
|
|
|
+
|
|
|
|
+ raise PrimitiveFinished(result)
|
|
|
|
+
|
|
|
|
+def list_pop_final(a, **remainder):
|
|
|
|
+ lst, = yield [("RO", [a])]
|
|
|
|
+ length = len(lst)
|
|
|
|
+ result, result_edge = yield [("RD", [a, length - 1]),
|
|
|
|
+ ("RDE", [a, length -1])]
|
|
|
|
+ _, = yield [("DE", [result_edge])]
|
|
|
|
+ raise PrimitiveFinished(result)
|