utils.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import sys
  2. sys.path.append("../state")
  3. from modelverse_state.main import ModelverseState
  4. import json
  5. class MvSWrapper(object):
  6. def __init__(self):
  7. self.mvs = ModelverseState("../bootstrap/minimal.m.gz")
  8. self.mapping = {
  9. "RD": self.mvs.read_dict,
  10. "RR": self.mvs.read_root,
  11. "RO": self.mvs.read_outgoing,
  12. "RI": self.mvs.read_incoming,
  13. "RE": self.mvs.read_edge,
  14. "RDE": self.mvs.read_dict_edge,
  15. "RDK": self.mvs.read_dict_keys,
  16. "RDN": self.mvs.read_dict_node,
  17. "RDNE": self.mvs.read_dict_node_edge,
  18. "RRD": self.mvs.read_reverse_dict,
  19. "RV": self.mvs.read_value,
  20. "CN": self.mvs.create_node,
  21. "CNV": self.mvs.create_nodevalue,
  22. "CE": self.mvs.create_edge,
  23. "DE": self.mvs.delete_edge,
  24. "DN": self.mvs.delete_node,
  25. "CD": self.mvs.create_dict,
  26. }
  27. def execute(self, command, params):
  28. params = json.loads(json.dumps(params))
  29. retval = self.mapping[command](*params)
  30. retval = json.loads(json.dumps(retval))
  31. return [retval[0]]
  32. def add_new_task(root, mvs, taskname):
  33. hierarchy = mvs.execute("RD", [root, "__hierarchy"])[0]
  34. initial = mvs.execute("RD", [hierarchy, "__IP"])[0]
  35. task_root = mvs.execute("CN", [])[0]
  36. _globals = mvs.execute("CN", [])[0]
  37. frame = mvs.execute("CN", [])[0]
  38. evalstack = mvs.execute("CN", [])[0]
  39. symbols = mvs.execute("CN", [])[0]
  40. _input = mvs.execute("CN", [])[0]
  41. _output = mvs.execute("CN", [])[0]
  42. returnvalue = mvs.execute("CN", [])[0]
  43. phase = mvs.execute("CNV", ["init"])[0]
  44. mvs.execute("CD", [root, taskname, task_root])
  45. mvs.execute("CD", [task_root, "frame", frame])
  46. mvs.execute("CD", [task_root, "globals", _globals])
  47. mvs.execute("CD", [task_root, "input", _input])
  48. mvs.execute("CD", [task_root, "last_input", _input])
  49. mvs.execute("CD", [task_root, "output", _output])
  50. mvs.execute("CD", [task_root, "last_output", _output])
  51. mvs.execute("CD", [frame, "evalstack", evalstack])
  52. mvs.execute("CD", [frame, "returnvalue", returnvalue])
  53. mvs.execute("CD", [frame, "phase", phase])
  54. mvs.execute("CD", [frame, "IP", initial])
  55. mvs.execute("CD", [frame, "symbols", symbols])
  56. def execute_until_finished(mvk, mvs, operation="execute_rule", params=[]):
  57. taskname = "task_1"
  58. if operation == "initialize_new_task":
  59. return add_new_task(mvk.root, mvs, taskname)
  60. response = None
  61. while 1:
  62. mvs_commands = mvk.execute_yields(taskname, operation, params, response)
  63. if mvs_commands is None:
  64. break
  65. response = []
  66. for command, param in mvs_commands:
  67. response.append(mvs.execute(command, param)[0])
  68. def get_inst(root, mvs):
  69. task_root = mvs.execute("RD", [root, "task_1"])[0]
  70. task_frame = mvs.execute("RD", [task_root, "frame"])[0]
  71. inst = mvs.execute("RD", [task_frame, "IP"])[0]
  72. return mvs.execute("RV", [inst])[0]["value"]
  73. def get_phase(root, mvs):
  74. task_root = mvs.execute("RD", [root, "task_1"])[0]
  75. task_frame = mvs.execute("RD", [task_root, "frame"])[0]
  76. phase = mvs.execute("RD", [task_frame, "phase"])[0]
  77. return mvs.execute("RV", [phase])[0]
  78. def get_returnvalue(root, mvs):
  79. task_root = mvs.execute("RD", [root, "task_1"])[0]
  80. task_frame = mvs.execute("RD", [task_root, "frame"])[0]
  81. returnvalue = mvs.execute("RD", [task_frame, "returnvalue"])[0]
  82. return mvs.execute("RV", [returnvalue])[0]
  83. def get_inst_ref(root, mvs):
  84. task_root = mvs.execute("RD", [root, "task_1"])[0]
  85. task_frame = mvs.execute("RD", [task_root, "frame"])[0]
  86. return mvs.execute("RD", [task_frame, "IP"])[0]
  87. def get_returnvalue_ref(root, mvs):
  88. task_root = mvs.execute("RD", [root, "task_1"])[0]
  89. task_frame = mvs.execute("RD", [task_root, "frame"])[0]
  90. return mvs.execute("RD", [task_frame, "returnvalue"])[0]
  91. def get_phase_ref(root, mvs):
  92. task_root = mvs.execute("RD", [root, "task_1"])[0]
  93. task_frame = mvs.execute("RD", [task_root, "frame"])[0]
  94. phase = mvs.execute("RD", [task_frame, "phase"])[0]
  95. return phase
  96. def read_primitive_interfaces(root, mvs):
  97. hierarchy = mvs.execute("RD", [root, "__hierarchy"])[0]
  98. primitives = mvs.execute("RD", [hierarchy, "primitives"])[0]
  99. keys = mvs.execute("RDK", [primitives])[0]
  100. d = {}
  101. for k in keys:
  102. value = mvs.execute("RDN", [primitives, k])[0]
  103. name = mvs.execute("RV", [k])[0]
  104. d[name] = value
  105. return d