jaseci 1.4.2.6__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of jaseci might be problematic. Click here for more details.

Files changed (187) hide show
  1. jaseci/__init__.py +3 -37
  2. jaseci-2.0.0.dist-info/METADATA +65 -0
  3. jaseci-2.0.0.dist-info/RECORD +4 -0
  4. {jaseci-1.4.2.6.dist-info → jaseci-2.0.0.dist-info}/WHEEL +1 -2
  5. jaseci/VERSION +0 -1
  6. jaseci/cli_tools/__init__.py +0 -0
  7. jaseci/cli_tools/book_tools.py +0 -457
  8. jaseci/cli_tools/jsctl.py +0 -500
  9. jaseci/cli_tools/tests/__init__.py +0 -0
  10. jaseci/cli_tools/tests/test_jsctl.py +0 -556
  11. jaseci/extens/__init__.py +0 -0
  12. jaseci/extens/act_lib/__init__.py +0 -0
  13. jaseci/extens/act_lib/date.py +0 -118
  14. jaseci/extens/act_lib/elastic.py +0 -87
  15. jaseci/extens/act_lib/file.py +0 -77
  16. jaseci/extens/act_lib/file_handler.py +0 -190
  17. jaseci/extens/act_lib/internal.py +0 -19
  18. jaseci/extens/act_lib/jaseci.py +0 -62
  19. jaseci/extens/act_lib/mail.py +0 -10
  20. jaseci/extens/act_lib/maths.py +0 -168
  21. jaseci/extens/act_lib/net.py +0 -192
  22. jaseci/extens/act_lib/rand.py +0 -83
  23. jaseci/extens/act_lib/regex.py +0 -85
  24. jaseci/extens/act_lib/request.py +0 -170
  25. jaseci/extens/act_lib/std.py +0 -236
  26. jaseci/extens/act_lib/storage.py +0 -53
  27. jaseci/extens/act_lib/stripe.py +0 -338
  28. jaseci/extens/act_lib/task.py +0 -14
  29. jaseci/extens/act_lib/tests/__init__.py +0 -0
  30. jaseci/extens/act_lib/tests/std_test_code.py +0 -37
  31. jaseci/extens/act_lib/tests/test_date.py +0 -26
  32. jaseci/extens/act_lib/tests/test_elastic.py +0 -159
  33. jaseci/extens/act_lib/tests/test_file.py +0 -116
  34. jaseci/extens/act_lib/tests/test_file_lib.py +0 -40
  35. jaseci/extens/act_lib/tests/test_mail_lib.py +0 -33
  36. jaseci/extens/act_lib/tests/test_maths.py +0 -147
  37. jaseci/extens/act_lib/tests/test_net_lib.py +0 -62
  38. jaseci/extens/act_lib/tests/test_regex.py +0 -61
  39. jaseci/extens/act_lib/tests/test_std.py +0 -51
  40. jaseci/extens/act_lib/tests/test_std_lib.py +0 -36
  41. jaseci/extens/act_lib/tests/test_url.py +0 -32
  42. jaseci/extens/act_lib/tests/test_vector.py +0 -36
  43. jaseci/extens/act_lib/tests/test_webtool.py +0 -44
  44. jaseci/extens/act_lib/tests/test_zlib.py +0 -24
  45. jaseci/extens/act_lib/url.py +0 -80
  46. jaseci/extens/act_lib/vector.py +0 -158
  47. jaseci/extens/act_lib/webtool.py +0 -29
  48. jaseci/extens/act_lib/zip.py +0 -34
  49. jaseci/extens/api/__init__.py +0 -0
  50. jaseci/extens/api/actions_api.py +0 -171
  51. jaseci/extens/api/alias_api.py +0 -140
  52. jaseci/extens/api/architype_api.py +0 -197
  53. jaseci/extens/api/config_api.py +0 -129
  54. jaseci/extens/api/global_api.py +0 -85
  55. jaseci/extens/api/graph_api.py +0 -168
  56. jaseci/extens/api/health_api.py +0 -21
  57. jaseci/extens/api/interface.py +0 -269
  58. jaseci/extens/api/jac_api.py +0 -172
  59. jaseci/extens/api/jsorc_api.py +0 -317
  60. jaseci/extens/api/logger_api.py +0 -90
  61. jaseci/extens/api/master_api.py +0 -134
  62. jaseci/extens/api/object_api.py +0 -102
  63. jaseci/extens/api/prometheus_api.py +0 -75
  64. jaseci/extens/api/queue_api.py +0 -141
  65. jaseci/extens/api/sentinel_api.py +0 -271
  66. jaseci/extens/api/share_api.py +0 -64
  67. jaseci/extens/api/super_api.py +0 -65
  68. jaseci/extens/api/tests/__init__.py +0 -0
  69. jaseci/extens/api/tests/test_architype_api.py +0 -66
  70. jaseci/extens/api/tests/test_global_api.py +0 -179
  71. jaseci/extens/api/tests/test_graph_api.py +0 -64
  72. jaseci/extens/api/tests/test_logger_api.py +0 -43
  73. jaseci/extens/api/tests/test_object_api.py +0 -20
  74. jaseci/extens/api/tests/test_sentinel_api.py +0 -66
  75. jaseci/extens/api/tests/test_uncommon.py +0 -107
  76. jaseci/extens/api/tests/test_user_api.py +0 -32
  77. jaseci/extens/api/tests/test_walker_api.py +0 -316
  78. jaseci/extens/api/user_api.py +0 -166
  79. jaseci/extens/api/walker_api.py +0 -299
  80. jaseci/extens/api/webhook_api.py +0 -77
  81. jaseci/extens/svc/__init__.py +0 -0
  82. jaseci/extens/svc/elastic_svc.py +0 -366
  83. jaseci/extens/svc/kube_svc.py +0 -432
  84. jaseci/extens/svc/mail_svc.py +0 -156
  85. jaseci/extens/svc/prome_svc.py +0 -378
  86. jaseci/extens/svc/redis_svc.py +0 -63
  87. jaseci/extens/svc/storage_svc.py +0 -193
  88. jaseci/extens/svc/stripe_svc.py +0 -51
  89. jaseci/extens/svc/task_svc.py +0 -155
  90. jaseci/extens/svc/tasks.py +0 -302
  91. jaseci/jac/__init__.py +0 -0
  92. jaseci/jac/interpreter/__init__.py +0 -0
  93. jaseci/jac/interpreter/architype_interp.py +0 -219
  94. jaseci/jac/interpreter/interp.py +0 -1784
  95. jaseci/jac/interpreter/sentinel_interp.py +0 -260
  96. jaseci/jac/interpreter/tests/__init__.py +0 -0
  97. jaseci/jac/interpreter/tests/test_interp.py +0 -42
  98. jaseci/jac/interpreter/walker_interp.py +0 -249
  99. jaseci/jac/ir/__init__.py +0 -0
  100. jaseci/jac/ir/ast.py +0 -73
  101. jaseci/jac/ir/ast_builder.py +0 -249
  102. jaseci/jac/ir/jac_code.py +0 -151
  103. jaseci/jac/ir/passes/__init__.py +0 -6
  104. jaseci/jac/ir/passes/ast_prune_pass.py +0 -9
  105. jaseci/jac/ir/passes/codegen_pass.py +0 -244
  106. jaseci/jac/ir/passes/ir_pass.py +0 -29
  107. jaseci/jac/ir/passes/printer_pass.py +0 -23
  108. jaseci/jac/ir/passes/pt_prune_pass.py +0 -29
  109. jaseci/jac/ir/passes/schedule.py +0 -23
  110. jaseci/jac/ir/passes/stats_pass.py +0 -16
  111. jaseci/jac/jac.g4 +0 -450
  112. jaseci/jac/jac_parse/__init__.py +0 -0
  113. jaseci/jac/jac_parse/jacLexer.py +0 -809
  114. jaseci/jac/jac_parse/jacListener.py +0 -853
  115. jaseci/jac/jac_parse/jacParser.py +0 -9192
  116. jaseci/jac/jac_set.py +0 -120
  117. jaseci/jac/jsci_vm/__init__.py +0 -0
  118. jaseci/jac/jsci_vm/disasm.py +0 -94
  119. jaseci/jac/jsci_vm/inst_ptr.py +0 -31
  120. jaseci/jac/jsci_vm/machine.py +0 -188
  121. jaseci/jac/jsci_vm/op_codes.py +0 -82
  122. jaseci/jac/jsci_vm/tests/__init__.py +0 -0
  123. jaseci/jac/jsci_vm/tests/test_codegen.py +0 -31
  124. jaseci/jac/machine/__init__.py +0 -0
  125. jaseci/jac/machine/jac_scope.py +0 -86
  126. jaseci/jac/machine/jac_value.py +0 -227
  127. jaseci/jac/machine/machine_state.py +0 -386
  128. jaseci/jac/tests/__init__.py +0 -0
  129. jaseci/jac/tests/book_code.py +0 -624
  130. jaseci/jac/tests/test_book.py +0 -380
  131. jaseci/jac/tests/test_lang_14.py +0 -49
  132. jaseci/jsorc/__init__.py +0 -7
  133. jaseci/jsorc/jsorc.py +0 -642
  134. jaseci/jsorc/jsorc_settings.py +0 -211
  135. jaseci/jsorc/jsorc_utils.py +0 -298
  136. jaseci/jsorc/live_actions.py +0 -365
  137. jaseci/jsorc/manifests/__init__.py +0 -0
  138. jaseci/jsorc/manifests/database.yaml +0 -109
  139. jaseci/jsorc/manifests/elastic.yaml +0 -6029
  140. jaseci/jsorc/manifests/prometheus.yaml +0 -1383
  141. jaseci/jsorc/manifests/redis.yaml +0 -64
  142. jaseci/jsorc/memory.py +0 -258
  143. jaseci/jsorc/redis.py +0 -140
  144. jaseci/jsorc/remote_actions.py +0 -158
  145. jaseci/jsorc/tests/__init__.py +0 -0
  146. jaseci/jsorc/tests/test_actions.py +0 -542
  147. jaseci/jsorc/tests/test_jsorc.py +0 -112
  148. jaseci/prim/__init__.py +0 -0
  149. jaseci/prim/ability.py +0 -94
  150. jaseci/prim/architype.py +0 -90
  151. jaseci/prim/edge.py +0 -173
  152. jaseci/prim/element.py +0 -233
  153. jaseci/prim/graph.py +0 -27
  154. jaseci/prim/master.py +0 -67
  155. jaseci/prim/node.py +0 -533
  156. jaseci/prim/obj_mixins.py +0 -238
  157. jaseci/prim/sentinel.py +0 -282
  158. jaseci/prim/super_master.py +0 -31
  159. jaseci/prim/walker.py +0 -261
  160. jaseci/svc/__init__.py +0 -0
  161. jaseci/tests/__init__.py +0 -0
  162. jaseci/tests/infer.py +0 -39
  163. jaseci/tests/jac_test_code.py +0 -1293
  164. jaseci/tests/jac_test_progs.py +0 -774
  165. jaseci/tests/test_core.py +0 -153
  166. jaseci/tests/test_jac.py +0 -824
  167. jaseci/tests/test_node.py +0 -89
  168. jaseci/tests/test_progs.py +0 -702
  169. jaseci/tests/test_stack.py +0 -220
  170. jaseci/tests/test_stripe.py +0 -225
  171. jaseci/utils/__init__.py +0 -0
  172. jaseci/utils/actions/__init__.py +0 -0
  173. jaseci/utils/actions/actions_manager.py +0 -254
  174. jaseci/utils/actions/actions_optimizer.py +0 -517
  175. jaseci/utils/actions/actions_state.py +0 -95
  176. jaseci/utils/file_handler.py +0 -171
  177. jaseci/utils/gprof2dot.py +0 -3786
  178. jaseci/utils/id_list.py +0 -169
  179. jaseci/utils/json_handler.py +0 -70
  180. jaseci/utils/log_utils.py +0 -57
  181. jaseci/utils/test_core.py +0 -62
  182. jaseci/utils/utils.py +0 -387
  183. jaseci-1.4.2.6.dist-info/LICENSE +0 -21
  184. jaseci-1.4.2.6.dist-info/METADATA +0 -39
  185. jaseci-1.4.2.6.dist-info/RECORD +0 -185
  186. jaseci-1.4.2.6.dist-info/entry_points.txt +0 -3
  187. jaseci-1.4.2.6.dist-info/top_level.txt +0 -1
jaseci/jac/jac_set.py DELETED
@@ -1,120 +0,0 @@
1
- """
2
- Jac's set class for Jaseci
3
-
4
- Adds relevant operators to id_list for operations on sets of nodes and edges
5
- """
6
-
7
- # from jaseci.utils.id_list import id_list
8
- from jaseci.utils.utils import logger
9
- from jaseci.prim.element import Element
10
-
11
-
12
- class JacSet(list):
13
- """
14
- Jac set class for operations in Jac lang
15
- (keeps append ordering and no dups)
16
- """
17
-
18
- def __init__(self, in_list=None):
19
- if in_list:
20
- for i in in_list:
21
- if i not in self:
22
- self.append(i)
23
-
24
- def append(self, item):
25
- if not isinstance(item, Element) or not hasattr(item, "anchor_value"):
26
- logger.error(f"Invalid {type(item)} object {item} to be added to jac_set!")
27
- elif item not in self:
28
- list.append(self, item)
29
-
30
- def add_obj(self, item: Element):
31
- if item not in self:
32
- self.append(item)
33
-
34
- def obj_list(self):
35
- return self
36
-
37
- def __lt__(self, other):
38
- """Returns reduced set where anchor value evals to other"""
39
- ret = JacSet()
40
- for i in self:
41
- if i.anchor_value() < other:
42
- ret.add_obj(i)
43
- return ret
44
-
45
- def __gt__(self, other):
46
- """Returns reduced set where anchor value evals to other"""
47
- ret = JacSet()
48
- for i in self:
49
- if i.anchor_value() > other:
50
- ret.add_obj(i)
51
- return ret
52
-
53
- def __le__(self, other):
54
- """Returns reduced set where anchor value evals to other"""
55
- ret = JacSet()
56
- for i in self:
57
- if i.anchor_value() <= other:
58
- ret.add_obj(i)
59
- return ret
60
-
61
- def __ge__(self, other):
62
- """Returns reduced set where anchor value evals to other"""
63
- ret = JacSet()
64
- for i in self:
65
- if i.anchor_value() >= other:
66
- ret.add_obj(i)
67
- return ret
68
-
69
- def __eq__(self, other):
70
- """Returns reduced set where anchor value evals to other"""
71
- ret = JacSet()
72
- for i in self:
73
- if i.anchor_value() == other:
74
- ret.add_obj(i)
75
- return ret
76
-
77
- def __ne__(self, other):
78
- """Returns reduced set where anchor value evals to other"""
79
- ret = JacSet()
80
- for i in self:
81
- if i.anchor_value() != other:
82
- ret.add_obj(i)
83
- return ret
84
-
85
- def __add__(self, other):
86
- """Returns new set with operation applied"""
87
- ret = JacSet()
88
- for i in self:
89
- ret.add_obj(i)
90
- for i in other:
91
- if i not in ret:
92
- ret.add_obj(i)
93
- return ret
94
-
95
- def __sub__(self, other):
96
- """Returns new set with operation applied"""
97
- ret = JacSet()
98
- for i in self:
99
- if i not in other:
100
- ret.add_obj(i)
101
- return ret
102
-
103
- def __mul__(self, other):
104
- """Returns new set with operation applied, mul is intersection"""
105
- ret = JacSet()
106
- for i in self:
107
- if i in other:
108
- ret.add_obj(i)
109
- return ret
110
-
111
- def __truediv__(self, other):
112
- """Returns new set with operation applied, div is 'outersection'"""
113
- ret = JacSet()
114
- for i in self:
115
- if i not in other:
116
- ret.add_obj(i)
117
- for i in other:
118
- if i not in self:
119
- ret.add_obj(i)
120
- return ret
File without changes
@@ -1,94 +0,0 @@
1
- from jaseci.jac.jsci_vm.op_codes import JsCmp, JsOp, JsType, type_map
2
- from jaseci.jac.jsci_vm.inst_ptr import InstPtr, from_bytes
3
- from jaseci.utils.utils import logger
4
- from base64 import b64decode
5
-
6
-
7
- class DisAsm(InstPtr):
8
- def __init__(self):
9
- InstPtr.__init__(self)
10
- self._asm = []
11
-
12
- def disassemble(self, bytecode, to_screen=True, log_out=False):
13
- if type(bytecode) == str:
14
- bytecode = b64decode(bytecode.encode())
15
- self._bytecode = bytearray(bytecode)
16
- try:
17
- while self._ip < len(self._bytecode):
18
- op = JsOp(self._bytecode[self._ip])
19
- if hasattr(self, f"dis_{op.name}"):
20
- getattr(self, f"dis_{op.name}")()
21
- else:
22
- self._asm.append([op.name])
23
- self._ip += 1
24
- self.print() if to_screen else None
25
- self.log() if log_out else None
26
- return self._asm
27
- except Exception:
28
- logger.error(f"Disassembly Failed on Following Bytecode: {self._bytecode}")
29
- self.print() if to_screen else None
30
- self.log() if log_out else None
31
-
32
- def print(self):
33
- for i in self._asm:
34
- print(*i)
35
-
36
- def log(self):
37
- for i in self._asm:
38
- logger.info(str(i))
39
-
40
- def op_COMPARE(self): # noqa
41
- ctyp = JsCmp(self.offset(1))
42
- self._asm.append([self.cur_op(), ctyp.name])
43
- self._ip += 1
44
-
45
- def op_INCREMENT(self): # noqa
46
- ityp = JsCmp(self.offset(1))
47
- self._asm.append([self.cur_op(), ityp.name])
48
- self._ip += 1
49
-
50
- def dis_LOAD_CONST(self): # noqa
51
- typ = JsType(self.offset(1))
52
- operand2 = self.offset(2)
53
- val = None
54
- if typ in [JsType.TYPE]:
55
- self._asm.append([self.cur_op(), typ.name, JsType(operand2).name])
56
- self._ip += 2
57
- elif typ in [JsType.INT]:
58
- val = from_bytes(type_map[typ], self.offset(3, operand2))
59
- self._asm.append([self.cur_op(), typ.name, operand2, val])
60
- self._ip += 2 + operand2
61
- elif typ in [JsType.STRING]:
62
- str_len = from_bytes(type_map[JsType.INT], self.offset(3, operand2))
63
- val = from_bytes(type_map[typ], self.offset(3 + operand2, str_len))
64
- self._asm.append([self.cur_op(), typ.name, operand2, str_len, val])
65
- self._ip += 2 + operand2 + str_len
66
- elif typ in [JsType.FLOAT]:
67
- val = from_bytes(float, self.offset(2, 8))
68
- self._asm.append([self.cur_op(), typ.name, val])
69
- self._ip += 1 + 8
70
- elif typ in [JsType.BOOL]:
71
- val = bool(self.offset(2))
72
- self._asm.append([self.cur_op(), typ.name, val])
73
- self._ip += 1 + 1
74
-
75
- def dis_LOAD_VAR(self): # noqa
76
- name = from_bytes(str, self.offset(2, self.offset(1)))
77
- self._asm.append([self.cur_op(), self.offset(1), name])
78
- self._ip += 1 + self.offset(1)
79
-
80
- def dis_CREATE_VAR(self): # noqa
81
- name = from_bytes(str, self.offset(2, self.offset(1)))
82
- self._asm.append([self.cur_op(), self.offset(1), name])
83
- self._ip += 1 + self.offset(1)
84
-
85
- def dis_DEBUG_INFO(self): # noqa
86
- byte_len_l = self.offset(1)
87
- line = from_bytes(int, self.offset(2, byte_len_l))
88
- f_offset = byte_len_l + 2
89
- byte_len_f = self.offset(f_offset)
90
- jacfile = (
91
- from_bytes(str, self.offset(f_offset + 1, byte_len_f)) if byte_len_f else 0
92
- )
93
- self._asm.append([self.cur_op(), byte_len_l, line, byte_len_f, jacfile])
94
- self._ip += 2 + byte_len_l + byte_len_f
@@ -1,31 +0,0 @@
1
- from jaseci.jac.jsci_vm.op_codes import JsOp
2
- from struct import unpack
3
-
4
-
5
- def from_bytes(typ, val):
6
- if typ == str:
7
- if val is None:
8
- return ""
9
- return val.decode("unicode_escape")
10
- if typ == float:
11
- return unpack("d", val)[0]
12
- else:
13
- if val is None:
14
- return 0
15
- return typ.from_bytes(val, "little")
16
-
17
-
18
- class InstPtr:
19
- def __init__(self):
20
- self._ip = 0
21
- self._bytecode = None
22
-
23
- def offset(self, delta, range=None):
24
- if range == 0:
25
- return None
26
- elif range is not None:
27
- return self._bytecode[self._ip + delta : self._ip + delta + range]
28
- return self._bytecode[self._ip + delta]
29
-
30
- def cur_op(self):
31
- return JsOp(self.offset(0)).name
@@ -1,188 +0,0 @@
1
- from jaseci.jac.jsci_vm.op_codes import JsCmp, JsOp, JsType, type_map, cmp_op_map
2
- from jaseci.jac.machine.machine_state import MachineState
3
- from jaseci.jac.jsci_vm.inst_ptr import InstPtr, from_bytes
4
- from jaseci.jac.machine.jac_value import JacValue
5
- from jaseci.jac.jsci_vm.disasm import DisAsm
6
-
7
-
8
- class Stack(object):
9
- def __init__(self):
10
- self._stk = []
11
-
12
- def stack_is_empty(self) -> bool:
13
- return len(self._stk) == 0
14
-
15
- def pop(self):
16
- if self.stack_is_empty():
17
- raise Exception("JaseciMachine stack is empty")
18
- return self._stk.pop()
19
-
20
- def push(self, value):
21
- self._stk.append(value)
22
-
23
- def peak_stack(self, count=0):
24
- if not count:
25
- print(list(reversed(self._stk)))
26
- else:
27
- print(list(reversed(self._stk))[0:count])
28
-
29
-
30
- class VirtualMachine(MachineState, Stack, InstPtr):
31
- def __init__(self, **kwargs):
32
- Stack.__init__(self)
33
- InstPtr.__init__(self)
34
- MachineState.__init__(self, **kwargs)
35
- self._op = self.build_op_call()
36
- self._op_id = id(self)
37
-
38
- def reset_vm(self):
39
- Stack.__init__(self)
40
- InstPtr.__init__(self)
41
- if id(self) != self._op_id:
42
- self._op = self.build_op_call()
43
-
44
- def build_op_call(self):
45
- op_map = {}
46
- for op in JsOp:
47
- op_map[op] = getattr(self, f"op_{op.name}")
48
- return op_map
49
-
50
- def run_bytecode(self, bytecode):
51
- self.reset_vm()
52
- self._bytecode = bytearray(bytecode)
53
- try:
54
- while self._ip < len(self._bytecode):
55
- self._op[self._bytecode[self._ip]]()
56
- self._ip += 1
57
- except Exception as e:
58
- self.disassemble(print_out=False, log_out=True)
59
- raise e
60
-
61
- def disassemble(self, print_out=True, log_out=False):
62
- return DisAsm().disassemble(self._bytecode, print_out, log_out)
63
-
64
- def op_PUSH_SCOPE(self): # noqa
65
- pass
66
-
67
- def op_POP_SCOPE(self): # noqa
68
- pass
69
-
70
- def op_ADD(self): # noqa
71
- val = self.pop()
72
- val.value = val.value + self.pop().value
73
- self.push(val)
74
-
75
- def op_SUBTRACT(self): # noqa
76
- val = self.pop()
77
- val.value = val.value - self.pop().value
78
- self.push(val)
79
-
80
- def op_MULTIPLY(self): # noqa
81
- val = self.pop()
82
- val.value = val.value * self.pop().value
83
- self.push(val)
84
-
85
- def op_DIVIDE(self): # noqa
86
- val = self.pop()
87
- val.value = val.value / self.pop().value
88
- self.push(val)
89
-
90
- def op_MODULO(self): # noqa
91
- val = self.pop()
92
- val.value = val.value % self.pop().value
93
- self.push(val)
94
-
95
- def op_POWER(self): # noqa
96
- val = self.pop()
97
- val.value = val.value ** self.pop().value
98
- self.push(val)
99
-
100
- def op_NEGATE(self): # noqa
101
- val = self.pop()
102
- val.value = -(val.value)
103
- self.push(val)
104
-
105
- def op_COMPARE(self): # noqa
106
- ctyp = JsCmp(self.offset(1))
107
- val = self.pop()
108
- val.value = (
109
- cmp_op_map[ctyp](val.value, self.pop().value)
110
- if ctyp != JsCmp.NOT
111
- else cmp_op_map[ctyp](val.value)
112
- )
113
- self.push(val)
114
- self._ip += 1
115
-
116
- def op_AND(self): # noqa
117
- val = self.pop()
118
- val.value = val.value and self.pop().value
119
- self.push(val)
120
-
121
- def op_OR(self): # noqa
122
- val = self.pop()
123
- val.value = val.value or self.pop().value
124
- self.push(val)
125
-
126
- def op_ASSIGN(self): # noqa
127
- dest = self.pop()
128
- self.perform_assignment(dest, self.pop())
129
-
130
- def op_COPY_FIELDS(self): # noqa
131
- dest = self.pop()
132
- self.perform_copy_fields(dest, self.pop())
133
-
134
- def op_INCREMENT(self): # noqa
135
- ityp = JsCmp(self.offset(1))
136
- dest = self.pop()
137
- self.perform_increment(dest, self.pop(), ityp)
138
- self._ip += 1
139
-
140
- def op_LOAD_CONST(self): # noqa
141
- typ = JsType(self.offset(1))
142
- operand2 = self.offset(2)
143
- if typ in [JsType.TYPE]:
144
- val = type_map[JsType(operand2)]
145
- self._ip += 2
146
- elif typ in [JsType.INT]:
147
- val = from_bytes(type_map[typ], self.offset(3, operand2))
148
- self._ip += 2 + operand2
149
- elif typ in [JsType.STRING]:
150
- str_len = from_bytes(type_map[JsType.INT], self.offset(3, operand2))
151
- val = from_bytes(type_map[typ], self.offset(3 + operand2, str_len))
152
- self._ip += 2 + operand2 + str_len
153
- elif typ in [JsType.FLOAT]:
154
- val = from_bytes(float, self.offset(2, 8))
155
- self._ip += 1 + 8
156
- elif typ in [JsType.BOOL]:
157
- val = bool(self.offset(2))
158
- self._ip += 1 + 1
159
- self.push(JacValue(self, value=val))
160
-
161
- def op_LOAD_VAR(self): # noqa
162
- name = from_bytes(str, self.offset(2, self.offset(1)))
163
- self.load_variable(name)
164
- self._ip += 1 + self.offset(1)
165
-
166
- def op_CREATE_VAR(self): # noqa
167
- name = from_bytes(str, self.offset(2, self.offset(1)))
168
- self.load_variable(name, assign_mode=True)
169
- self._ip += 1 + self.offset(1)
170
-
171
- def op_REPORT(self): # noqa
172
- self.report.append(self.pop())
173
-
174
- def op_ACTION_CALL(self): # noqa
175
- pass
176
-
177
- def op_DEBUG_INFO(self): # noqa
178
- byte_len_l = self.offset(1)
179
- line = from_bytes(int, self.offset(2, byte_len_l))
180
- f_offset = byte_len_l + 2
181
- byte_len_f = self.offset(f_offset)
182
- jacfile = (
183
- from_bytes(str, self.offset(f_offset + 1, byte_len_f))
184
- if byte_len_f
185
- else self._cur_jac_ast.loc[2]
186
- )
187
- self._ip += 2 + byte_len_l + byte_len_f
188
- self._cur_jac_ast.loc = [line, 0, jacfile, {}]
@@ -1,82 +0,0 @@
1
- from enum import IntEnum, auto
2
- from jaseci.prim.edge import Edge
3
- from jaseci.prim.node import Node
4
-
5
-
6
- class JsOp(IntEnum):
7
- PUSH_SCOPE = auto()
8
- POP_SCOPE = auto()
9
- ADD = auto()
10
- SUBTRACT = auto()
11
- MULTIPLY = auto()
12
- DIVIDE = auto()
13
- MODULO = auto()
14
- POWER = auto()
15
- NEGATE = auto()
16
- COMPARE = auto()
17
- AND = auto()
18
- OR = auto()
19
- ASSIGN = auto()
20
- COPY_FIELDS = auto()
21
- REPORT = auto()
22
- ACTION_CALL = auto()
23
- INCREMENT = auto() # [type]
24
- LOAD_CONST = auto() # [type, bytes, (val)] / [type, (val)] / [type=type, type]
25
- LOAD_VAR = auto() # [bytes, (name)]
26
- CREATE_VAR = auto() # [bytes, (name)]
27
- DEBUG_INFO = auto() # [bytes, line, bytes, (jacfile)]
28
-
29
-
30
- class JsType(IntEnum):
31
- TYPE = auto()
32
- INT = auto()
33
- FLOAT = auto()
34
- STRING = auto()
35
- LIST = auto()
36
- DICT = auto()
37
- BOOL = auto()
38
- NULL = auto()
39
- NODE = auto()
40
- EDGE = auto()
41
-
42
-
43
- class JsCmp(IntEnum):
44
- EE = auto()
45
- LT = auto()
46
- GT = auto()
47
- LTE = auto()
48
- GTE = auto()
49
- NE = auto()
50
- IN = auto()
51
- NIN = auto()
52
- NOT = auto()
53
- PEQ = auto()
54
- MEQ = auto()
55
- TEQ = auto()
56
- DEQ = auto()
57
-
58
-
59
- type_map = {
60
- JsType.TYPE: type,
61
- JsType.INT: int,
62
- JsType.FLOAT: float,
63
- JsType.STRING: str,
64
- JsType.LIST: list,
65
- JsType.DICT: dict,
66
- JsType.BOOL: bool,
67
- JsType.NULL: None,
68
- JsType.NODE: Node,
69
- JsType.EDGE: Edge,
70
- }
71
-
72
- cmp_op_map = {
73
- JsCmp.NOT: lambda val: not val,
74
- JsCmp.EE: lambda v1, v2: v1 == v2,
75
- JsCmp.LT: lambda v1, v2: v1 < v2,
76
- JsCmp.GT: lambda v1, v2: v1 > v2,
77
- JsCmp.LTE: lambda v1, v2: v1 <= v2,
78
- JsCmp.GTE: lambda v1, v2: v1 >= v2,
79
- JsCmp.NE: lambda v1, v2: v1 != v2,
80
- JsCmp.IN: lambda v1, v2: v1 in v2,
81
- JsCmp.NIN: lambda v1, v2: v1 not in v2,
82
- }
File without changes
@@ -1,31 +0,0 @@
1
- from jaseci.utils.test_core import CoreTest
2
-
3
-
4
- class TestCodegen(CoreTest):
5
- """Unit tests for Jac Walker APIs"""
6
-
7
- fixture_src = __file__
8
-
9
- def test_simple_codegen(self):
10
- ret = self.call(
11
- self.mast,
12
- ["sentinel_register", {"code": self.load_jac("simple.jac")}],
13
- )
14
- # self.log(ret)
15
- ret = self.call(self.mast, ["walker_run", {"name": "most_basic"}])
16
- # self.log(ret)
17
- # from jaseci.jac.ir.passes import PrinterPass
18
- # PrinterPass(self.mast.active_snt()._jac_ast).run()
19
- self.assertEqual(ret["report"][0], 5004)
20
- self.assertEqual(ret["report"][1], 1)
21
- self.assertEqual(ret["report"][2], "ab")
22
- self.assertEqual(ret["report"][3], {"base": 5, "test": 5})
23
- self.assertEqual(ret["report"][4], {"a": 3, "b": 55, "c": 311})
24
-
25
- def test_unicode(self):
26
- ret = self.call(
27
- self.mast,
28
- ["sentinel_register", {"code": self.load_jac("unicode.jac")}],
29
- )
30
- ret = self.call(self.mast, ["walker_run", {"name": "unicode"}])
31
- self.assertEqual(len(ret["report"]), 1)
File without changes
@@ -1,86 +0,0 @@
1
- """
2
- Variable scope manager for Jac
3
-
4
- Utility for all runtime interaction with variables in different scopes
5
- """
6
-
7
- from jaseci.jac.machine.jac_value import JacValue
8
- from jaseci.jsorc.live_actions import get_global_actions
9
-
10
-
11
- class JacScope:
12
- def __init__(self, parent, name, has_obj=None, here=None, visitor=None):
13
- self.parent = parent
14
- self.name = name
15
- self.local_scope = {}
16
- self.has_obj = has_obj if has_obj else self
17
- self.context = {}
18
- self.action_sets = []
19
- self._start_time = 0 # For profiling
20
- self._total_time = 0 # For profiling
21
- self._cum_start_time = None
22
- self.set_refs(here, visitor)
23
- self.setup_actions()
24
-
25
- def setup_actions(self):
26
- allactions = []
27
- for i in self.action_sets:
28
- allactions += i.obj_list()
29
- self.action_sets = get_global_actions()
30
- for i in allactions:
31
- self.add_action(i)
32
-
33
- def add_action(self, act):
34
- group = act.name.split(".")[0]
35
- if "." in act.name:
36
- if group not in self.action_sets.keys():
37
- self.action_sets[group] = {}
38
- action = act.name.split(".")[1]
39
- self.action_sets[group][action] = act
40
- else:
41
- self.action_sets[group] = act
42
-
43
- def set_refs(self, here, visitor):
44
- self.local_scope["here"] = here
45
- self.local_scope["visitor"] = visitor
46
- self.action_sets = []
47
- if here:
48
- self.action_sets += [here.get_architype().get_all_abilities()]
49
- if visitor:
50
- self.action_sets += [visitor.get_architype().get_all_abilities()]
51
-
52
- def get_refs(self):
53
- return {
54
- "here": self.local_scope["here"],
55
- "visitor": self.local_scope["visitor"],
56
- }
57
-
58
- def here(self):
59
- return self.local_scope["here"]
60
-
61
- def visitor(self):
62
- return self.local_scope["visitor"]
63
-
64
- def find_live_attr(self, name, allow_read_only=True):
65
- """Finds binding for variable if not in standard scope"""
66
- # check if var is in walker's context
67
- if "context" in self.has_obj.__dict__ and name in self.has_obj.context.keys():
68
- return JacValue(self.parent, ctx=self.has_obj, name=name)
69
- elif name in self.action_sets.keys():
70
- return JacValue(self.parent, ctx=self.action_sets, name=name)
71
- return None
72
-
73
- def get_live_var(self, name, create_mode=False):
74
- """Returns live variable"""
75
- found = None
76
- # Lock for variable in various locations
77
- if name in self.local_scope.keys():
78
- found = JacValue(self.parent, ctx=self.local_scope, name=name)
79
- else:
80
- found = self.find_live_attr(name)
81
- if found is None and create_mode:
82
- self.local_scope[name] = None
83
- return JacValue(self.parent, ctx=self.local_scope, name=name)
84
- if found:
85
- return found
86
- return None