|
@@ -3,12 +3,12 @@ import time
|
|
|
|
|
|
"""
|
|
"""
|
|
def get_superclasses(a, b, **remainder):
|
|
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])]
|
|
|
|
|
|
+ if 'value' not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+ model_dict, tm_dict = yield [("RD", [a, "model"]),
|
|
|
|
+ ("RD", [a, "type_mapping"])]
|
|
|
|
|
|
- worklist = set([name_value])
|
|
|
|
|
|
+ worklist = set(b['value'])
|
|
found = set([])
|
|
found = set([])
|
|
|
|
|
|
cache_value = {}
|
|
cache_value = {}
|
|
@@ -27,9 +27,11 @@ def get_superclasses(a, b, **remainder):
|
|
link = outgoing.pop()
|
|
link = outgoing.pop()
|
|
|
|
|
|
# If the link is typed by "Inheritance", we add its destination
|
|
# 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])]
|
|
|
|
|
|
+ link_name_node, = yield [("CALL_ARGS", [reverseKeyLookup, [{'id': model_dict}, {'id': link}]])]
|
|
|
|
+ if "value" not in link_name_node:
|
|
|
|
+ link_name_node['id'], = yield [("CNV", [link_name_node['value']])]
|
|
|
|
+
|
|
|
|
+ t_edge, = yield [("RD", [tm_dict, link_name_node['value']])]
|
|
t_edge, = yield [("RV", [t_edge])]
|
|
t_edge, = yield [("RV", [t_edge])]
|
|
if t_edge == "Inheritance":
|
|
if t_edge == "Inheritance":
|
|
edge, = yield [("RE", [link])]
|
|
edge, = yield [("RE", [link])]
|
|
@@ -45,17 +47,20 @@ def get_superclasses(a, b, **remainder):
|
|
result, = yield [("CN", [])]
|
|
result, = yield [("CN", [])]
|
|
yield [("CD", [result, i, result]) for i in found]
|
|
yield [("CD", [result, i, result]) for i in found]
|
|
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def reverseKeyLookupMulti(a, b, **remainder):
|
|
def reverseKeyLookupMulti(a, b, **remainder):
|
|
- edges, b_val, result = yield [("RO", [a]), ("RV", [b]), ("CN", [])]
|
|
|
|
|
|
+ if "value" not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+
|
|
|
|
+ edges, result = yield [("RO", [a['id']]), ("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]
|
|
|
|
|
|
# Keep results in a local Python set, as we want to bundle as many requests as possible
|
|
# Keep results in a local Python set, as we want to bundle as many requests as possible
|
|
todo = set()
|
|
todo = set()
|
|
for i, edge in enumerate(values):
|
|
for i, edge in enumerate(values):
|
|
- if b_val == edge:
|
|
|
|
|
|
+ if b['value'] == edge:
|
|
todo.add(i)
|
|
todo.add(i)
|
|
|
|
|
|
outgoings = yield [("RO", [edges[i]]) for i in todo]
|
|
outgoings = yield [("RO", [edges[i]]) for i in todo]
|
|
@@ -63,13 +68,10 @@ 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)]
|
|
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def reverseKeyLookup(a, b, **remainder):
|
|
def reverseKeyLookup(a, b, **remainder):
|
|
- if a is None or b is None:
|
|
|
|
- result, = yield [("CNV", [""])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
- edges_out, edges_in = yield [("RO", [a]), ("RI", [b])]
|
|
|
|
|
|
+ edges_out, edges_in = yield [("RO", [a['id']]), ("RI", [b['id']])]
|
|
options = set(edges_out) & set(edges_in)
|
|
options = set(edges_out) & set(edges_in)
|
|
if options:
|
|
if options:
|
|
# Select one option randomly
|
|
# Select one option randomly
|
|
@@ -78,48 +80,52 @@ def reverseKeyLookup(a, b, **remainder):
|
|
# Select one option randomly
|
|
# Select one option randomly
|
|
out_edge = out_edges.pop()
|
|
out_edge = out_edges.pop()
|
|
e, = yield [("RE", [out_edge])]
|
|
e, = yield [("RE", [out_edge])]
|
|
- result = e[1]
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': e[1]})
|
|
else:
|
|
else:
|
|
- result, = yield [("CNV", [""])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'value': ""})
|
|
|
|
|
|
def instantiated_name(a, b, **remainder):
|
|
def instantiated_name(a, b, **remainder):
|
|
- name_value, = yield [("RV", [b])]
|
|
|
|
- if name_value == "":
|
|
|
|
- b, = yield [("CNV", ["__" + str(a)])]
|
|
|
|
|
|
+ if "value" not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b["id"]])]
|
|
|
|
+ if "id" not in a:
|
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
|
+
|
|
|
|
+ if b['value'] == "":
|
|
|
|
+ b['value'] = "__" + str(a['id'])
|
|
|
|
+
|
|
raise PrimitiveFinished(b)
|
|
raise PrimitiveFinished(b)
|
|
|
|
|
|
def set_merge(a, b, **remainder):
|
|
def set_merge(a, b, **remainder):
|
|
- keys, = yield [("RDK", [b])]
|
|
|
|
- edges = yield [("CE", [a, a]) for key in keys]
|
|
|
|
|
|
+ keys, = yield [("RDK", [b['id']])]
|
|
|
|
+ edges = yield [("CE", [a['id'], a['id']]) 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)]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def has_value(a, **remainder):
|
|
def has_value(a, **remainder):
|
|
- v, = yield [("RV", [a])]
|
|
|
|
- if v is None:
|
|
|
|
- result, = yield [("CNV", [False])]
|
|
|
|
|
|
+ if "value" not in a:
|
|
|
|
+ a['value'], = yield [("RV", [])]
|
|
|
|
+ if a['value'] is None:
|
|
|
|
+ raise PrimitiveFinished({'value': False})
|
|
else:
|
|
else:
|
|
- result, = yield [("CNV", [True])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'value': True})
|
|
|
|
|
|
def make_reverse_dictionary(a, **remainder):
|
|
def make_reverse_dictionary(a, **remainder):
|
|
reverse, = yield [("CN", [])]
|
|
reverse, = yield [("CN", [])]
|
|
- key_nodes, = yield [("RDK", [a])]
|
|
|
|
- values = yield [("RDN", [a, i]) for i in key_nodes]
|
|
|
|
|
|
+ key_nodes, = yield [("RDK", [a['id']])]
|
|
|
|
+ values = yield [("RDN", [a['id'], 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)]
|
|
- raise PrimitiveFinished(reverse)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': reverse})
|
|
|
|
|
|
def dict_eq(a, b, **remainder):
|
|
def dict_eq(a, b, **remainder):
|
|
- key_nodes, = yield [("RDK", [a])]
|
|
|
|
|
|
+ key_nodes, = yield [("RDK", [a['id']])]
|
|
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['id'], i]) for i in key_values]
|
|
values = yield [("RV", [i]) for i in values]
|
|
values = yield [("RV", [i]) for i in values]
|
|
a_dict = dict(list(zip(key_values, values)))
|
|
a_dict = dict(list(zip(key_values, values)))
|
|
|
|
|
|
- key_nodes, = yield [("RDK", [b])]
|
|
|
|
|
|
+ key_nodes, = yield [("RDK", [b['id']])]
|
|
key_values = yield [("RV", [i]) for i in key_nodes]
|
|
key_values = yield [("RV", [i]) for i in key_nodes]
|
|
- values = yield [("RD", [b, i]) for i in key_values]
|
|
|
|
|
|
+ values = yield [("RD", [b['id'], i]) for i in key_values]
|
|
values = yield [("RV", [i]) for i in values]
|
|
values = yield [("RV", [i]) for i in values]
|
|
b_dict = dict(list(zip(key_values, values)))
|
|
b_dict = dict(list(zip(key_values, values)))
|
|
|
|
|
|
@@ -127,180 +133,212 @@ def dict_eq(a, b, **remainder):
|
|
raise PrimitiveFinished(result)
|
|
raise PrimitiveFinished(result)
|
|
|
|
|
|
def string_substr(a, b, c, **remainder):
|
|
def string_substr(a, b, c, **remainder):
|
|
- a_val, b_val, c_val = yield [("RV", [a]),
|
|
|
|
- ("RV", [b]),
|
|
|
|
- ("RV", [c])]
|
|
|
|
|
|
+ if "value" not in a:
|
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
|
+ if "value" not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+ if "value" not in c:
|
|
|
|
+ c['value'], = yield [("RV", [c['id']])]
|
|
|
|
+
|
|
try:
|
|
try:
|
|
- new_value = a_val[b_val:c_val]
|
|
|
|
|
|
+ new_value = a['value'][b['value']:c['value']]
|
|
except:
|
|
except:
|
|
new_value = ""
|
|
new_value = ""
|
|
|
|
|
|
- result, = yield [("CNV", [new_value])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'value': new_value})
|
|
|
|
|
|
def integer_gt(a, b, **remainder):
|
|
def integer_gt(a, b, **remainder):
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
|
- result, = yield [("CNV", [a_value > b_value])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ if 'value' not in a:
|
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
|
+ if 'value' not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+ raise PrimitiveFinished({'value': a['value'] > b['value']})
|
|
|
|
|
|
def integer_neg(a, **remainder):
|
|
def integer_neg(a, **remainder):
|
|
- a_value, = yield [("RV", [a])]
|
|
|
|
- result, = yield [("CNV", [-a_value])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ if 'value' not in a:
|
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
|
+ raise PrimitiveFinished({'value': -a['value']})
|
|
|
|
|
|
def float_gt(a, b, **remainder):
|
|
def float_gt(a, b, **remainder):
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
|
- result, = yield [("CNV", [a_value > b_value])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ if 'value' not in a:
|
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
|
+ if 'value' not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+ raise PrimitiveFinished({'value': a['value'] > b['value']})
|
|
|
|
|
|
def float_neg(a, **remainder):
|
|
def float_neg(a, **remainder):
|
|
- a_value, = yield [("RV", [a])]
|
|
|
|
- result, = yield [("CNV", [-a_value])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ if 'value' not in a:
|
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
|
+ raise PrimitiveFinished({'value': -a['value']})
|
|
|
|
|
|
def value_neq(a, b, **remainder):
|
|
def value_neq(a, b, **remainder):
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
|
- result, = yield [("CNV", [a_value != b_value])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ if 'value' not in a:
|
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
|
+ if 'value' not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+ raise PrimitiveFinished({'value': a['value'] != b['value']})
|
|
|
|
|
|
def element_neq(a, b, **remainder):
|
|
def element_neq(a, b, **remainder):
|
|
- result, = yield [("CNV", [a != b])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ if 'id' not in a or 'id' not in b:
|
|
|
|
+ raise PrimitiveFinished({'value': False})
|
|
|
|
+ else:
|
|
|
|
+ raise PrimitiveFinished({'value': a['id'] != b['id']})
|
|
|
|
|
|
def list_append(a, b, **remainder):
|
|
def list_append(a, b, **remainder):
|
|
- a_outgoing, = yield [("RO", [a])]
|
|
|
|
- _ = yield [("CD", [a, len(a_outgoing), b])]
|
|
|
|
|
|
+ if "id" not in b:
|
|
|
|
+ b['id'], = yield [("CNV", [b['value']])]
|
|
|
|
+ a_outgoing, = yield [("RO", [a['id']])]
|
|
|
|
+ _ = yield [("CD", [a['id'], len(a_outgoing), b['id']])]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def list_read(a, b, **remainder):
|
|
def list_read(a, b, **remainder):
|
|
- b_value, = yield [("RV", [b])]
|
|
|
|
- result, = yield [("RD", [a, b_value])]
|
|
|
|
|
|
+ if 'value' not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b])]
|
|
|
|
+ result, = yield [("RD", [a['id'], b['value']])]
|
|
if result is None:
|
|
if result is None:
|
|
- raise Exception("List read out of bounds: %s" % b_value)
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise Exception("List read out of bounds: %s" % b['value'])
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def list_len(a, **remainder):
|
|
def list_len(a, **remainder):
|
|
- outgoings, = yield [("RO", [a])]
|
|
|
|
|
|
+ outgoings, = yield [("RO", [a['id']])]
|
|
result, = yield [("CNV", [len(outgoings)])]
|
|
result, = yield [("CNV", [len(outgoings)])]
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def dict_add(a, b, c, **remainder):
|
|
def dict_add(a, b, c, **remainder):
|
|
- new_edge, = yield [("CE", [a, c])]
|
|
|
|
- yield [("CE", [new_edge, b])]
|
|
|
|
|
|
+ if 'id' not in b:
|
|
|
|
+ b['id'], = yield [("CNV", [b['value']])]
|
|
|
|
+ if 'id' not in c:
|
|
|
|
+ c['id'], = yield [("CNV", [c['value']])]
|
|
|
|
+ new_edge, = yield [("CE", [a['id'], c['id']])]
|
|
|
|
+ yield [("CE", [new_edge, b['id']])]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def dict_len(a, **remainder):
|
|
def dict_len(a, **remainder):
|
|
- outgoings, = yield [("RO", [a])]
|
|
|
|
- result, = yield [("CNV", [len(outgoings)])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ outgoings, = yield [("RO", [a['id']])]
|
|
|
|
+ raise PrimitiveFinished({'value': len(outgoings)})
|
|
|
|
|
|
def set_add(a, b, **remainder):
|
|
def set_add(a, b, **remainder):
|
|
- v, = yield [("RV", [b])]
|
|
|
|
- is_in, = yield [("RD", [a, v])]
|
|
|
|
|
|
+ if 'value' not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+ is_in, = yield [("RD", [a['id'], b['value']])]
|
|
if not is_in:
|
|
if not is_in:
|
|
- _, = yield [("CD", [a, v, a])]
|
|
|
|
|
|
+ _, = yield [("CD", [a['id'], b['value'], a['id']])]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def set_add_node(a, b, **remainder):
|
|
def set_add_node(a, b, **remainder):
|
|
- is_in, = yield [("RDN", [a, b])]
|
|
|
|
|
|
+ if 'id' not in b:
|
|
|
|
+ b['id'], = yield [("CNV", [b['value']])]
|
|
|
|
+ is_in, = yield [("RDN", [a['id'], b['id']])]
|
|
if not is_in:
|
|
if not is_in:
|
|
- edge, = yield [("CE", [a, a])]
|
|
|
|
- _, = yield [("CE", [edge, b])]
|
|
|
|
|
|
+ edge, = yield [("CE", [a['id'], a['id']])]
|
|
|
|
+ _, = yield [("CE", [edge, b['id']])]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def set_pop(a, **remainder):
|
|
def set_pop(a, **remainder):
|
|
- outgoing, = yield [("RO", [a])]
|
|
|
|
|
|
+ outgoing, = yield [("RO", [a['id']])]
|
|
if outgoing:
|
|
if outgoing:
|
|
outgoing = outgoing[0]
|
|
outgoing = outgoing[0]
|
|
new_outgoing, = yield [("RO", [outgoing])]
|
|
new_outgoing, = yield [("RO", [outgoing])]
|
|
new_outgoing = new_outgoing[0]
|
|
new_outgoing = new_outgoing[0]
|
|
edge, _ = yield [("RE", [new_outgoing]), ("DE", [outgoing])]
|
|
edge, _ = yield [("RE", [new_outgoing]), ("DE", [outgoing])]
|
|
- raise PrimitiveFinished(edge[1])
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': edge[1]})
|
|
else:
|
|
else:
|
|
raise Exception("POP from empty set")
|
|
raise Exception("POP from empty set")
|
|
print("Pop from empty set!")
|
|
print("Pop from empty set!")
|
|
- raise PrimitiveFinished(remainder["root"])
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': remainder["root"]})
|
|
|
|
|
|
def set_create(**remainder):
|
|
def set_create(**remainder):
|
|
result, = yield [("CN", [])]
|
|
result, = yield [("CN", [])]
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def list_create(**remainder):
|
|
def list_create(**remainder):
|
|
result, = yield [("CN", [])]
|
|
result, = yield [("CN", [])]
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def dict_create(**remainder):
|
|
def dict_create(**remainder):
|
|
result, = yield [("CN", [])]
|
|
result, = yield [("CN", [])]
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def create_tuple(a, b, **remainder):
|
|
def create_tuple(a, b, **remainder):
|
|
|
|
+ if "id" not in a:
|
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
|
+ if "id" not in b:
|
|
|
|
+ b['id'], = yield [("CNV", [b['value']])]
|
|
|
|
+
|
|
result, = yield [("CN", [])]
|
|
result, = yield [("CN", [])]
|
|
- _, _ = yield [("CD", [result, 0, a]),
|
|
|
|
- ("CD", [result, 1, b]),
|
|
|
|
|
|
+ _, _ = yield [("CD", [result, 0, a['id']]),
|
|
|
|
+ ("CD", [result, 1, b['id']]),
|
|
]
|
|
]
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def set_overlap(a, b, **remainder):
|
|
def set_overlap(a, b, **remainder):
|
|
- a_keys, b_keys, res = yield [("RDK", [a]), ("RDK", [b]), ("CN", [])]
|
|
|
|
|
|
+ a_keys, b_keys, res = yield [("RDK", [a['id']]), ("RDK", [b['id']]), ("CN", [])]
|
|
a_values = yield [("RV", [i]) for i in a_keys]
|
|
a_values = yield [("RV", [i]) for i in a_keys]
|
|
b_values = yield [("RV", [i]) for i in b_keys]
|
|
b_values = yield [("RV", [i]) for i in b_keys]
|
|
|
|
|
|
result = set(a_values) & set(b_values)
|
|
result = set(a_values) & set(b_values)
|
|
yield [("CD", [res, value, res]) for value in result]
|
|
yield [("CD", [res, value, res]) for value in result]
|
|
|
|
|
|
- raise PrimitiveFinished(res)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': res})
|
|
|
|
|
|
def list_pop_final(a, **remainder):
|
|
def list_pop_final(a, **remainder):
|
|
- lst, = yield [("RO", [a])]
|
|
|
|
|
|
+ lst, = yield [("RO", [a['id']])]
|
|
length = len(lst)
|
|
length = len(lst)
|
|
- result, result_edge = yield [("RD", [a, length - 1]),
|
|
|
|
- ("RDE", [a, length -1])]
|
|
|
|
|
|
+ result, result_edge = yield [("RD", [a['id'], length - 1]),
|
|
|
|
+ ("RDE", [a['id'], length -1])]
|
|
_, = yield [("DE", [result_edge])]
|
|
_, = yield [("DE", [result_edge])]
|
|
- raise PrimitiveFinished(result)
|
|
|
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def instantiate_node(a, b, c, **remainder):
|
|
def instantiate_node(a, b, c, **remainder):
|
|
- node, dict_entry, typing, name = \
|
|
|
|
|
|
+ if "value" not in c:
|
|
|
|
+ c['value'], = yield [("RV", [c['id']])]
|
|
|
|
+ node, dict_entry, typing = \
|
|
yield [("CN", []),
|
|
yield [("CN", []),
|
|
- ("RD", [a, "model"]),
|
|
|
|
- ("RD", [a, "type_mapping"]),
|
|
|
|
- ("RV", [c]),
|
|
|
|
|
|
+ ("RD", [a['id'], "model"]),
|
|
|
|
+ ("RD", [a['id'], "type_mapping"]),
|
|
]
|
|
]
|
|
|
|
|
|
- if name == "":
|
|
|
|
|
|
+ if c['value'] == "":
|
|
name = "__" + str(node)
|
|
name = "__" + str(node)
|
|
- name_node, = yield [("CNV", [name])]
|
|
|
|
|
|
+ name_node = {'value': name}
|
|
else:
|
|
else:
|
|
name_node = c
|
|
name_node = c
|
|
|
|
|
|
- yield [("CD", [dict_entry, name, node])]
|
|
|
|
- yield [("CD", [typing, name, b])]
|
|
|
|
|
|
+ yield [("CD", [dict_entry, c['value'], node])]
|
|
|
|
+ yield [("CD", [typing, c['value'], b])]
|
|
|
|
|
|
raise PrimitiveFinished(name_node)
|
|
raise PrimitiveFinished(name_node)
|
|
|
|
|
|
def list_insert(a, b, c, **remainder):
|
|
def list_insert(a, b, c, **remainder):
|
|
- # TODO make non-primitive, though compiled
|
|
|
|
- a_outgoing, c_value = yield [("RO", [a]), ("RV", [c])]
|
|
|
|
- links = yield [("RD", [a, i]) for i in range(c_value, len(a_outgoing))] + \
|
|
|
|
- [("RDE", [a, i]) for i in range(c_value, len(a_outgoing))]
|
|
|
|
|
|
+ if "id" not in b:
|
|
|
|
+ b["id"], = yield [("CNV", [b['value']])]
|
|
|
|
+ if "value" not in c:
|
|
|
|
+ c['value'], = yield [("RV", [c['id']])]
|
|
|
|
+
|
|
|
|
+ a_outgoing, = yield [("RO", [a['id']])]
|
|
|
|
+ links = yield [("RD", [a['id'], i]) for i in range(c['value'], len(a_outgoing))] + \
|
|
|
|
+ [("RDE", [a['id'], i]) for i in range(c['value'], len(a_outgoing))]
|
|
|
|
|
|
values = links[:len(links) // 2]
|
|
values = links[:len(links) // 2]
|
|
edges = links[len(links) // 2:]
|
|
edges = links[len(links) // 2:]
|
|
|
|
|
|
- yield [("CD", [a, c_value, b])] + \
|
|
|
|
- [("CD", [a, c_value + 1 + index, value]) for index, value in enumerate(values)] + \
|
|
|
|
|
|
+ yield [("CD", [a['id'], c['value'], b['id']])] + \
|
|
|
|
+ [("CD", [a['id'], c['value'] + 1 + index, value]) for index, value in enumerate(values)] + \
|
|
[("DE", [i]) for i in edges]
|
|
[("DE", [i]) for i in edges]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def list_delete(a, b, **remainder):
|
|
def list_delete(a, b, **remainder):
|
|
- # TODO make non-primitive, though compiled
|
|
|
|
- a_outgoing, b_value = yield [("RO", [a]), ("RV", [b])]
|
|
|
|
- links = yield [("RD", [a, i]) for i in range(b_value, len(a_outgoing))] + \
|
|
|
|
- [("RDE", [a, i]) for i in range(b_value, len(a_outgoing))]
|
|
|
|
|
|
+ if "value" not in b:
|
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
|
+
|
|
|
|
+ a_outgoing, = yield [("RO", [a['id']])]
|
|
|
|
+ links = yield [("RD", [a['id'], i]) for i in range(b['value'], len(a_outgoing))] + \
|
|
|
|
+ [("RDE", [a['id'], i]) for i in range(b['value'], len(a_outgoing))]
|
|
|
|
|
|
values = links[:len(links) // 2]
|
|
values = links[:len(links) // 2]
|
|
edges = links[len(links) // 2:]
|
|
edges = links[len(links) // 2:]
|
|
|
|
|
|
- yield [("CD", [a, b_value + index, value]) for index, value in enumerate(values[1:])] + \
|
|
|
|
|
|
+ yield [("CD", [a['id'], b['value'] + index, value]) for index, value in enumerate(values[1:])] + \
|
|
[("DE", [i]) for i in edges]
|
|
[("DE", [i]) for i in edges]
|
|
raise PrimitiveFinished(a)
|
|
raise PrimitiveFinished(a)
|
|
"""
|
|
"""
|