|
@@ -0,0 +1,120 @@
|
|
|
+import sys
|
|
|
+sys.path.append("../state")
|
|
|
+from modelverse_state.main import ModelverseState
|
|
|
+import json
|
|
|
+
|
|
|
+class MvSWrapper(object):
|
|
|
+ def __init__(self):
|
|
|
+ self.mvs = ModelverseState("../bootstrap/minimal.m")
|
|
|
+
|
|
|
+ self.mapping = {
|
|
|
+ "RD": self.mvs.read_dict,
|
|
|
+ "RR": self.mvs.read_root,
|
|
|
+ "RO": self.mvs.read_outgoing,
|
|
|
+ "RI": self.mvs.read_incoming,
|
|
|
+ "RE": self.mvs.read_edge,
|
|
|
+ "RDE": self.mvs.read_dict_edge,
|
|
|
+ "RDK": self.mvs.read_dict_keys,
|
|
|
+ "RDN": self.mvs.read_dict_node,
|
|
|
+ "RDNE": self.mvs.read_dict_node_edge,
|
|
|
+ "RRD": self.mvs.read_reverse_dict,
|
|
|
+ "RV": self.mvs.read_value,
|
|
|
+ "CN": self.mvs.create_node,
|
|
|
+ "CNV": self.mvs.create_nodevalue,
|
|
|
+ "CE": self.mvs.create_edge,
|
|
|
+ "DE": self.mvs.delete_edge,
|
|
|
+ "DN": self.mvs.delete_node,
|
|
|
+ "CD": self.mvs.create_dict,
|
|
|
+ }
|
|
|
+
|
|
|
+ def execute(self, command, params):
|
|
|
+ params = json.loads(json.dumps(params))
|
|
|
+ retval = self.mapping[command](*params)
|
|
|
+ retval = json.loads(json.dumps(retval))
|
|
|
+
|
|
|
+ return [retval[0]]
|
|
|
+
|
|
|
+def add_new_user(root, mvs, username):
|
|
|
+ hierarchy = mvs.execute("RD", [root, "__hierarchy"])[0]
|
|
|
+ initial = mvs.execute("RD", [hierarchy, "__IP"])[0]
|
|
|
+
|
|
|
+ user_root = mvs.execute("CN", [])[0]
|
|
|
+ _globals = mvs.execute("CN", [])[0]
|
|
|
+ frame = mvs.execute("CN", [])[0]
|
|
|
+ evalstack = mvs.execute("CN", [])[0]
|
|
|
+ symbols = mvs.execute("CN", [])[0]
|
|
|
+ _input = mvs.execute("CN", [])[0]
|
|
|
+ _output = mvs.execute("CN", [])[0]
|
|
|
+ returnvalue = mvs.execute("CN", [])[0]
|
|
|
+ phase = mvs.execute("CNV", ["init"])[0]
|
|
|
+
|
|
|
+ mvs.execute("CD", [root, username, user_root])
|
|
|
+ mvs.execute("CD", [user_root, "frame", frame])
|
|
|
+ mvs.execute("CD", [user_root, "globals", _globals])
|
|
|
+ mvs.execute("CD", [user_root, "input", _input])
|
|
|
+ mvs.execute("CD", [user_root, "last_input", _input])
|
|
|
+ mvs.execute("CD", [user_root, "output", _output])
|
|
|
+ mvs.execute("CD", [user_root, "last_output", _output])
|
|
|
+ mvs.execute("CD", [frame, "evalstack", evalstack])
|
|
|
+ mvs.execute("CD", [frame, "returnvalue", returnvalue])
|
|
|
+ mvs.execute("CD", [frame, "phase", phase])
|
|
|
+ mvs.execute("CD", [frame, "IP", initial])
|
|
|
+ mvs.execute("CD", [frame, "symbols", symbols])
|
|
|
+
|
|
|
+def execute_until_finished(mvk, mvs, operation="execute_rule", params=[]):
|
|
|
+ username = "user_1"
|
|
|
+ if operation == "initialize_new_user":
|
|
|
+ return add_new_user(mvk.root, mvs, username)
|
|
|
+ response = None
|
|
|
+ while 1:
|
|
|
+ mvs_commands = mvk.execute_yields(username, operation, params, response)
|
|
|
+ if mvs_commands is None:
|
|
|
+ break
|
|
|
+ response = []
|
|
|
+ for command, param in mvs_commands:
|
|
|
+ response.append(mvs.execute(command, param)[0])
|
|
|
+
|
|
|
+def get_inst(root, mvs):
|
|
|
+ user_root = mvs.execute("RD", [root, "user_1"])[0]
|
|
|
+ user_frame = mvs.execute("RD", [user_root, "frame"])[0]
|
|
|
+ inst = mvs.execute("RD", [user_frame, "IP"])[0]
|
|
|
+ return mvs.execute("RV", [inst])[0]["value"]
|
|
|
+
|
|
|
+def get_phase(root, mvs):
|
|
|
+ user_root = mvs.execute("RD", [root, "user_1"])[0]
|
|
|
+ user_frame = mvs.execute("RD", [user_root, "frame"])[0]
|
|
|
+ phase = mvs.execute("RD", [user_frame, "phase"])[0]
|
|
|
+ return mvs.execute("RV", [phase])[0]
|
|
|
+
|
|
|
+def get_returnvalue(root, mvs):
|
|
|
+ user_root = mvs.execute("RD", [root, "user_1"])[0]
|
|
|
+ user_frame = mvs.execute("RD", [user_root, "frame"])[0]
|
|
|
+ returnvalue = mvs.execute("RD", [user_frame, "returnvalue"])[0]
|
|
|
+ return mvs.execute("RV", [returnvalue])[0]
|
|
|
+
|
|
|
+def get_inst_ref(root, mvs):
|
|
|
+ user_root = mvs.execute("RD", [root, "user_1"])[0]
|
|
|
+ user_frame = mvs.execute("RD", [user_root, "frame"])[0]
|
|
|
+ return mvs.execute("RD", [user_frame, "IP"])[0]
|
|
|
+
|
|
|
+def get_returnvalue_ref(root, mvs):
|
|
|
+ user_root = mvs.execute("RD", [root, "user_1"])[0]
|
|
|
+ user_frame = mvs.execute("RD", [user_root, "frame"])[0]
|
|
|
+ return mvs.execute("RD", [user_frame, "returnvalue"])[0]
|
|
|
+
|
|
|
+def get_phase_ref(root, mvs):
|
|
|
+ user_root = mvs.execute("RD", [root, "user_1"])[0]
|
|
|
+ user_frame = mvs.execute("RD", [user_root, "frame"])[0]
|
|
|
+ phase = mvs.execute("RD", [user_frame, "phase"])[0]
|
|
|
+ return phase
|
|
|
+
|
|
|
+def read_primitive_interfaces(root, mvs):
|
|
|
+ hierarchy = mvs.execute("RD", [root, "__hierarchy"])[0]
|
|
|
+ primitives = mvs.execute("RD", [hierarchy, "primitives"])[0]
|
|
|
+ keys = mvs.execute("RDK", [primitives])[0]
|
|
|
+ d = {}
|
|
|
+ for k in keys:
|
|
|
+ value = mvs.execute("RDN", [primitives, k])[0]
|
|
|
+ name = mvs.execute("RV", [k])[0]
|
|
|
+ d[name] = value
|
|
|
+ return d
|