PyDecisionGraph 0.3.2.post1__cp315-cp315-win_amd64.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.
Files changed (148) hide show
  1. decision_graph/__infra__.pxd +1 -0
  2. decision_graph/__init__.pxd +1 -0
  3. decision_graph/__init__.py +39 -0
  4. decision_graph/decision_tree/__init__.pxd +2 -0
  5. decision_graph/decision_tree/__init__.py +85 -0
  6. decision_graph/decision_tree/bake/__infra__.pxd +502 -0
  7. decision_graph/decision_tree/bake/__init__.pxd +502 -0
  8. decision_graph/decision_tree/bake/__init__.py +29 -0
  9. decision_graph/decision_tree/bake/c_action.cp315-win_amd64.pyd +0 -0
  10. decision_graph/decision_tree/bake/c_action.h +324 -0
  11. decision_graph/decision_tree/bake/c_action.pxd +54 -0
  12. decision_graph/decision_tree/bake/c_action.pyi +126 -0
  13. decision_graph/decision_tree/bake/c_action.pyx +65 -0
  14. decision_graph/decision_tree/bake/c_allocator_protocol.cp315-win_amd64.pyd +0 -0
  15. decision_graph/decision_tree/bake/c_allocator_protocol.pxd +24 -0
  16. decision_graph/decision_tree/bake/c_allocator_protocol.pyi +61 -0
  17. decision_graph/decision_tree/bake/c_allocator_protocol.pyx +109 -0
  18. decision_graph/decision_tree/bake/c_bake.cp315-win_amd64.pyd +0 -0
  19. decision_graph/decision_tree/bake/c_bake.h +629 -0
  20. decision_graph/decision_tree/bake/c_bake.pxd +52 -0
  21. decision_graph/decision_tree/bake/c_bake.pyi +151 -0
  22. decision_graph/decision_tree/bake/c_bake.pyx +142 -0
  23. decision_graph/decision_tree/bake/c_collections.cp315-win_amd64.pyd +0 -0
  24. decision_graph/decision_tree/bake/c_collections.h +692 -0
  25. decision_graph/decision_tree/bake/c_collections.pxd +52 -0
  26. decision_graph/decision_tree/bake/c_collections.pyi +193 -0
  27. decision_graph/decision_tree/bake/c_collections.pyx +161 -0
  28. decision_graph/decision_tree/bake/c_const.cp315-win_amd64.pyd +0 -0
  29. decision_graph/decision_tree/bake/c_const.h +395 -0
  30. decision_graph/decision_tree/bake/c_const.pxd +56 -0
  31. decision_graph/decision_tree/bake/c_const.pyi +305 -0
  32. decision_graph/decision_tree/bake/c_const.pyx +278 -0
  33. decision_graph/decision_tree/bake/c_edge.cp315-win_amd64.pyd +0 -0
  34. decision_graph/decision_tree/bake/c_edge.h +511 -0
  35. decision_graph/decision_tree/bake/c_edge.pxd +117 -0
  36. decision_graph/decision_tree/bake/c_edge.pyi +192 -0
  37. decision_graph/decision_tree/bake/c_edge.pyx +270 -0
  38. decision_graph/decision_tree/bake/c_eval.h +848 -0
  39. decision_graph/decision_tree/bake/c_eval.pxd +40 -0
  40. decision_graph/decision_tree/bake/c_expr.cp315-win_amd64.pyd +0 -0
  41. decision_graph/decision_tree/bake/c_expr.h +1900 -0
  42. decision_graph/decision_tree/bake/c_expr.pxd +129 -0
  43. decision_graph/decision_tree/bake/c_expr.pyi +280 -0
  44. decision_graph/decision_tree/bake/c_expr.pyx +272 -0
  45. decision_graph/decision_tree/bake/c_hierarchy.cp315-win_amd64.pyd +0 -0
  46. decision_graph/decision_tree/bake/c_hierarchy.h +731 -0
  47. decision_graph/decision_tree/bake/c_hierarchy.pxd +71 -0
  48. decision_graph/decision_tree/bake/c_hierarchy.pyi +409 -0
  49. decision_graph/decision_tree/bake/c_hierarchy.pyx +277 -0
  50. decision_graph/decision_tree/bake/c_logic_group.cp315-win_amd64.pyd +0 -0
  51. decision_graph/decision_tree/bake/c_logic_group.h +1226 -0
  52. decision_graph/decision_tree/bake/c_logic_group.pxd +162 -0
  53. decision_graph/decision_tree/bake/c_logic_group.pyi +264 -0
  54. decision_graph/decision_tree/bake/c_logic_group.pyx +308 -0
  55. decision_graph/decision_tree/bake/c_node.cp315-win_amd64.pyd +0 -0
  56. decision_graph/decision_tree/bake/c_node.h +2660 -0
  57. decision_graph/decision_tree/bake/c_node.pxd +381 -0
  58. decision_graph/decision_tree/bake/c_node.pyi +438 -0
  59. decision_graph/decision_tree/bake/c_node.pyx +639 -0
  60. decision_graph/decision_tree/bake/c_reconstruct.cp315-win_amd64.pyd +0 -0
  61. decision_graph/decision_tree/bake/c_reconstruct.pxd +63 -0
  62. decision_graph/decision_tree/bake/c_reconstruct.pyi +60 -0
  63. decision_graph/decision_tree/bake/c_reconstruct.pyx +252 -0
  64. decision_graph/decision_tree/bake/c_var.cp315-win_amd64.pyd +0 -0
  65. decision_graph/decision_tree/bake/c_var.h +2054 -0
  66. decision_graph/decision_tree/bake/c_var.pxd +205 -0
  67. decision_graph/decision_tree/bake/c_var.pyi +271 -0
  68. decision_graph/decision_tree/bake/c_var.pyx +228 -0
  69. decision_graph/decision_tree/capi/__infra__.pxd +33 -0
  70. decision_graph/decision_tree/capi/__init__.pxd +33 -0
  71. decision_graph/decision_tree/capi/__init__.py +57 -0
  72. decision_graph/decision_tree/capi/c_abc.cp315-win_amd64.pyd +0 -0
  73. decision_graph/decision_tree/capi/c_abc.pxd +246 -0
  74. decision_graph/decision_tree/capi/c_abc.pyi +770 -0
  75. decision_graph/decision_tree/capi/c_abc.pyx +1532 -0
  76. decision_graph/decision_tree/capi/c_collection.cp315-win_amd64.pyd +0 -0
  77. decision_graph/decision_tree/capi/c_collection.pxd +22 -0
  78. decision_graph/decision_tree/capi/c_collection.pyi +245 -0
  79. decision_graph/decision_tree/capi/c_collection.pyx +138 -0
  80. decision_graph/decision_tree/capi/c_node.cp315-win_amd64.pyd +0 -0
  81. decision_graph/decision_tree/capi/c_node.pxd +95 -0
  82. decision_graph/decision_tree/capi/c_node.pyi +492 -0
  83. decision_graph/decision_tree/capi/c_node.pyx +551 -0
  84. decision_graph/decision_tree/exc.py +189 -0
  85. decision_graph/decision_tree/native/__init__.py +57 -0
  86. decision_graph/decision_tree/native/abc.py +1167 -0
  87. decision_graph/decision_tree/native/collection.py +134 -0
  88. decision_graph/decision_tree/native/node.py +521 -0
  89. decision_graph/includes/decision_graph/decision_tree/bake/c_action.c +16320 -0
  90. decision_graph/includes/decision_graph/decision_tree/bake/c_action.h +324 -0
  91. decision_graph/includes/decision_graph/decision_tree/bake/c_allocator_protocol.c +12473 -0
  92. decision_graph/includes/decision_graph/decision_tree/bake/c_bake.c +16485 -0
  93. decision_graph/includes/decision_graph/decision_tree/bake/c_bake.h +629 -0
  94. decision_graph/includes/decision_graph/decision_tree/bake/c_collections.c +17381 -0
  95. decision_graph/includes/decision_graph/decision_tree/bake/c_collections.h +692 -0
  96. decision_graph/includes/decision_graph/decision_tree/bake/c_const.c +20815 -0
  97. decision_graph/includes/decision_graph/decision_tree/bake/c_const.h +395 -0
  98. decision_graph/includes/decision_graph/decision_tree/bake/c_edge.c +20696 -0
  99. decision_graph/includes/decision_graph/decision_tree/bake/c_edge.h +511 -0
  100. decision_graph/includes/decision_graph/decision_tree/bake/c_eval.h +848 -0
  101. decision_graph/includes/decision_graph/decision_tree/bake/c_expr.c +22065 -0
  102. decision_graph/includes/decision_graph/decision_tree/bake/c_expr.h +1900 -0
  103. decision_graph/includes/decision_graph/decision_tree/bake/c_hierarchy.c +23267 -0
  104. decision_graph/includes/decision_graph/decision_tree/bake/c_hierarchy.h +731 -0
  105. decision_graph/includes/decision_graph/decision_tree/bake/c_logic_group.c +22434 -0
  106. decision_graph/includes/decision_graph/decision_tree/bake/c_logic_group.h +1226 -0
  107. decision_graph/includes/decision_graph/decision_tree/bake/c_node.c +28385 -0
  108. decision_graph/includes/decision_graph/decision_tree/bake/c_node.h +2660 -0
  109. decision_graph/includes/decision_graph/decision_tree/bake/c_reconstruct.c +15955 -0
  110. decision_graph/includes/decision_graph/decision_tree/bake/c_var.c +16881 -0
  111. decision_graph/includes/decision_graph/decision_tree/bake/c_var.h +2054 -0
  112. decision_graph/includes/decision_graph/decision_tree/capi/c_abc.c +59196 -0
  113. decision_graph/includes/decision_graph/decision_tree/capi/c_collection.c +19967 -0
  114. decision_graph/includes/decision_graph/decision_tree/capi/c_node.c +39229 -0
  115. decision_graph/logic_group/__init__.py +25 -0
  116. decision_graph/logic_group/base.py +100 -0
  117. decision_graph/logic_group/pending_request.py +384 -0
  118. decision_graph/webui/__init__.py +24 -0
  119. decision_graph/webui/bake/__init__.py +65 -0
  120. decision_graph/webui/bake/app.py +488 -0
  121. decision_graph/webui/bake/static/d3.v7.min.js +2 -0
  122. decision_graph/webui/bake/static/script.js +1440 -0
  123. decision_graph/webui/bake/static/style.css +920 -0
  124. decision_graph/webui/bake/templates/index.html +183 -0
  125. decision_graph/webui/bake/templates/offline.html +184 -0
  126. decision_graph/webui/capi/__init__.py +54 -0
  127. decision_graph/webui/capi/app.py +366 -0
  128. decision_graph/webui/capi/main.py +53 -0
  129. decision_graph/webui/capi/static/d3.v7.min.js +2 -0
  130. decision_graph/webui/capi/static/script.js +1026 -0
  131. decision_graph/webui/capi/static/style.css +656 -0
  132. decision_graph/webui/capi/templates/index.html +93 -0
  133. decision_graph/webui/capi/templates/offline.html +94 -0
  134. decision_graph/webui/native/__init__.py +54 -0
  135. decision_graph/webui/native/app.py +366 -0
  136. decision_graph/webui/native/main.py +53 -0
  137. decision_graph/webui/native/static/d3.v7.min.js +2 -0
  138. decision_graph/webui/native/static/script.js +1026 -0
  139. decision_graph/webui/native/static/style.css +656 -0
  140. decision_graph/webui/native/templates/index.html +93 -0
  141. decision_graph/webui/native/templates/offline.html +94 -0
  142. pydecisiongraph-0.3.2.post1.dist-info/METADATA +136 -0
  143. pydecisiongraph-0.3.2.post1.dist-info/RECORD +148 -0
  144. pydecisiongraph-0.3.2.post1.dist-info/WHEEL +5 -0
  145. pydecisiongraph-0.3.2.post1.dist-info/licenses/LICENSE +373 -0
  146. pydecisiongraph-0.3.2.post1.dist-info/top_level.txt +2 -0
  147. tests/bake_c_evaluator.cp315-win_amd64.pyd +0 -0
  148. tests/bake_eval_probe.cp315-win_amd64.pyd +0 -0
@@ -0,0 +1,228 @@
1
+ import enum
2
+
3
+ from cpython.object cimport PyObject
4
+ from cpython.unicode cimport PyUnicode_AsUTF8, PyUnicode_FromString
5
+ from libc.stdint cimport uintptr_t
6
+
7
+
8
+ class VarType(enum.IntEnum):
9
+ raw_ptr = VAR_TYPE_RAW_PTR
10
+ string = VAR_TYPE_STRING
11
+ bool = VAR_TYPE_BOOL
12
+ double = VAR_TYPE_DOUBLE
13
+ int = VAR_TYPE_INT
14
+ offset = VAR_TYPE_OFFSET
15
+ time = VAR_TYPE_TIME
16
+ date = VAR_TYPE_DATE
17
+ datetime = VAR_TYPE_DATETIME
18
+ d_vector = VAR_TYPE_D_VECTOR
19
+ d_matrix = VAR_TYPE_D_MATRIX
20
+ node = VAR_TYPE_NODE
21
+ reserved = VAR_TYPE_RESERVED
22
+
23
+ raw_ptr_ref = VAR_TYPE_RAW_PTR_REF
24
+ string_ref = VAR_TYPE_STRING_REF
25
+ bool_ref = VAR_TYPE_BOOL_REF
26
+ double_ref = VAR_TYPE_DOUBLE_REF
27
+ int_ref = VAR_TYPE_INT_REF
28
+ offset_ref = VAR_TYPE_OFFSET_REF
29
+ time_ref = VAR_TYPE_TIME_REF
30
+ date_ref = VAR_TYPE_DATE_REF
31
+ datetime_ref = VAR_TYPE_DATETIME_REF
32
+ d_vector_ref = VAR_TYPE_D_VECTOR_REF
33
+ d_matrix_ref = VAR_TYPE_D_MATRIX_REF
34
+ node_ref = VAR_TYPE_NODE_REF
35
+ inferred = VAR_TYPE_INFERRED
36
+
37
+ raw_ptr_ref_ref = VAR_TYPE_RAW_PTR_REF_REF
38
+ string_ref_ref = VAR_TYPE_STRING_REF_REF
39
+ bool_ref_ref = VAR_TYPE_BOOL_REF_REF
40
+ double_ref_ref = VAR_TYPE_DOUBLE_REF_REF
41
+ int_ref_ref = VAR_TYPE_INT_REF_REF
42
+ offset_ref_ref = VAR_TYPE_OFFSET_REF_REF
43
+ time_ref_ref = VAR_TYPE_TIME_REF_REF
44
+ date_ref_ref = VAR_TYPE_DATE_REF_REF
45
+ datetime_ref_ref = VAR_TYPE_DATETIME_REF_REF
46
+ d_vector_ref_ref = VAR_TYPE_D_VECTOR_REF_REF
47
+ d_matrix_ref_ref = VAR_TYPE_D_MATRIX_REF_REF
48
+ node_ref_ref = VAR_TYPE_NODE_REF_REF
49
+
50
+
51
+ class VarNumeric(enum.IntEnum):
52
+ none = VAR_NUMERIC_NONE
53
+ int = VAR_NUMERIC_INT
54
+ double = VAR_NUMERIC_DOUBLE
55
+
56
+
57
+ cdef void c_dcg_var_pypack(dcg_var_t* out, object value) except *:
58
+ cdef int ret_code
59
+
60
+ if value is None:
61
+ ret_code = c_dcg_var_init(out)
62
+ elif isinstance(value, bytes):
63
+ ret_code = c_dcg_var_init_string(out, <const char*> value)
64
+ elif isinstance(value, str):
65
+ ret_code = c_dcg_var_init_string(out, PyUnicode_AsUTF8(value))
66
+ elif isinstance(value, bool):
67
+ ret_code = c_dcg_var_init_bool(out, value)
68
+ elif isinstance(value, int):
69
+ ret_code = c_dcg_var_init_int(out, <ssize_t> value)
70
+ elif isinstance(value, float):
71
+ ret_code = c_dcg_var_init_double(out, value)
72
+ else:
73
+ # A NODE packs as a node - the same pointer, tagged so that unpacking it
74
+ # hands the wrapper back (see c_dcg_var_pyunpack). The class is the node
75
+ # layer's, one above this one, so it arrives by lazy import (DEPENDENCY.md
76
+ # 3.3); anything else packs as the opaque Python pointer it is.
77
+ from .c_node import LogicNode # up, by lazy import
78
+
79
+ if isinstance(value, LogicNode):
80
+ ret_code = c_dcg_var_init_node(out, <const dcg_node*> <uintptr_t> value.address)
81
+ else:
82
+ ret_code = c_dcg_var_init_ptr(out, <void*> <PyObject*> value)
83
+
84
+ if ret_code != DCG_OK:
85
+ raise ValueError(f'Cannot pack {value!r} into a dcg_var_t.')
86
+
87
+
88
+ cdef object c_dcg_var_pyunpack(const dcg_var_t* var):
89
+ if not var:
90
+ return None
91
+ if c_dcg_var_is_null(var):
92
+ return None
93
+
94
+ cdef dcg_var_type base = c_dcg_var_ref_base(var.dtype)
95
+
96
+ if base == VAR_TYPE_NODE:
97
+ # A node-shaped value is the node itself, so what it unpacks to is the
98
+ # wrapper the layer holds for it. The registry is the node layer's, one
99
+ # above this one, so it arrives by lazy import - the reach DEPENDENCY.md
100
+ # 3.3 records, and the same one the node layer takes for its own class.
101
+ from .c_node import NODE_REGISTRY
102
+ return NODE_REGISTRY[<uintptr_t> c_dcg_var_as_node(var)]
103
+
104
+ if base == VAR_TYPE_BOOL:
105
+ return c_dcg_var_as_bool(var)
106
+ if base == VAR_TYPE_INT or base == VAR_TYPE_OFFSET:
107
+ return c_dcg_var_as_int(var)
108
+ if base == VAR_TYPE_DOUBLE:
109
+ return c_dcg_var_as_double(var)
110
+ if base == VAR_TYPE_STRING:
111
+ return PyUnicode_FromString(c_dcg_var_as_string(var))
112
+ return None
113
+
114
+
115
+ cdef class VarView:
116
+ def __init__(self, uintptr_t address):
117
+ self.header = <const dcg_var_t*> address
118
+
119
+ @staticmethod
120
+ cdef inline VarView c_from_header(const dcg_var_t* var):
121
+ cdef VarView view = VarView.__new__(VarView)
122
+ view.header = var
123
+ return view
124
+
125
+ def __repr__(self):
126
+ if not self.header:
127
+ return f'<{self.__class__.__name__} (Uninitialized)>'
128
+ return f'<{self.__class__.__name__}({self.format()})>'
129
+
130
+ def format(self):
131
+ if not self.header:
132
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
133
+ cdef char buf[DCG_VAR_STRING_MAXLEN]
134
+ cdef int written = c_dcg_var_format(self.header, buf, sizeof(buf))
135
+ if written < 0:
136
+ raise RuntimeError(f'c_dcg_var_format failed with err code: {written}')
137
+ return PyUnicode_FromString(buf)
138
+
139
+ property address:
140
+ def __get__(self):
141
+ if not self.header:
142
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
143
+ return <uintptr_t> self.header
144
+
145
+ property dtype:
146
+ def __get__(self):
147
+ if not self.header:
148
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
149
+ return VarType(self.header.dtype)
150
+
151
+ property type_name:
152
+ def __get__(self):
153
+ if not self.header:
154
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
155
+ return PyUnicode_FromString(c_dcg_var_type_name(self.header.dtype))
156
+
157
+ property is_null:
158
+ def __get__(self):
159
+ if not self.header:
160
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
161
+ return c_dcg_var_is_null(self.header)
162
+
163
+ property is_ref:
164
+ def __get__(self):
165
+ if not self.header:
166
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
167
+ return c_dcg_var_is_ref(self.header.dtype)
168
+
169
+ property ref_level:
170
+ def __get__(self):
171
+ if not self.header:
172
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
173
+ return c_dcg_var_ref_level(self.header.dtype)
174
+
175
+ property ref_base:
176
+ def __get__(self):
177
+ if not self.header:
178
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
179
+ return VarType(c_dcg_var_ref_base(self.header.dtype))
180
+
181
+ property numeric:
182
+ def __get__(self):
183
+ if not self.header:
184
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
185
+ return VarNumeric(c_dcg_var_numeric_of(self.header))
186
+
187
+ property value:
188
+ def __get__(self):
189
+ if not self.header:
190
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
191
+ return c_dcg_var_pyunpack(self.header)
192
+
193
+ property as_bool:
194
+ def __get__(self):
195
+ if not self.header:
196
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
197
+ return c_dcg_var_as_bool(self.header)
198
+
199
+ property as_int:
200
+ def __get__(self):
201
+ if not self.header:
202
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
203
+ return c_dcg_var_as_int(self.header)
204
+
205
+ property as_double:
206
+ def __get__(self):
207
+ if not self.header:
208
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
209
+ return c_dcg_var_as_double(self.header)
210
+
211
+ property as_string:
212
+ def __get__(self):
213
+ if not self.header:
214
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
215
+ cdef const char* text = c_dcg_var_as_string(self.header)
216
+ return None if not text else PyUnicode_FromString(text)
217
+
218
+ property as_ptr:
219
+ def __get__(self):
220
+ if not self.header:
221
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
222
+ return <uintptr_t> <void*> c_dcg_var_as_ptr(self.header)
223
+
224
+ property as_ref:
225
+ def __get__(self):
226
+ if not self.header:
227
+ raise RuntimeError(f'<{self.__class__.__name__}> not initialized!')
228
+ return <uintptr_t> c_dcg_var_as_ref(self.header)
@@ -0,0 +1,33 @@
1
+ __all__ = [
2
+ 'GLOBAL_SINGLETON', 'Singleton',
3
+ 'NodeEdgeCondition', 'ConditionElse', 'ConditionAny', 'ConditionAuto', 'BinaryCondition', 'ConditionTrue', 'ConditionFalse',
4
+ 'NO_CONDITION', 'ELSE_CONDITION', 'AUTO_CONDITION', 'TRUE_CONDITION', 'FALSE_CONDITION',
5
+ 'SkipContextsBlock', 'LogicExpression', 'LogicGroupManager', 'LGM',
6
+ 'LogicGroupFrame', 'LogicGroupStack', 'ShelvedStateFrame', 'ShelvedStateStack', 'LogicGroup',
7
+ 'LogicNodeFrame', 'LogicNodeStack', 'LogicNode', 'BreakpointNode',
8
+ 'ActionNode', 'PlaceholderNode', 'NoAction', 'LongAction', 'ShortAction',
9
+ 'RootLogicNode', 'ContextLogicExpression', 'AttrExpression', 'AttrNestedExpression', 'GetterExpression', 'GetterNestedExpression',
10
+ 'MathExpressionOperator', 'MathExpression', 'ComparisonExpressionOperator', 'ComparisonExpression',
11
+ 'LogicalExpressionOperator', 'LogicalExpression',
12
+ 'LogicMapping', 'LogicSequence', 'LogicGenerator',
13
+ ]
14
+
15
+ from .c_abc cimport (
16
+ GLOBAL_SINGLETON, Singleton,
17
+ NodeEdgeCondition, ConditionElse, ConditionAny, ConditionAuto, BinaryCondition, ConditionTrue, ConditionFalse,
18
+ NO_CONDITION, ELSE_CONDITION, AUTO_CONDITION, TRUE_CONDITION, FALSE_CONDITION,
19
+ SkipContextsBlock, LogicExpression, LogicGroupManager, LGM,
20
+ LogicGroupFrame, LogicGroupStack, ShelvedStateFrame, ShelvedStateStack, LogicGroup,
21
+ LogicNodeFrame, LogicNodeStack, LogicNode, BreakpointNode,
22
+ ActionNode, PlaceholderNode, NoAction, LongAction, ShortAction,
23
+ )
24
+
25
+ from .c_node cimport (
26
+ RootLogicNode, ContextLogicExpression, AttrExpression, AttrNestedExpression, GetterExpression, GetterNestedExpression,
27
+ MathExpressionOperator, MathExpression, ComparisonExpressionOperator, ComparisonExpression,
28
+ LogicalExpressionOperator, LogicalExpression,
29
+ )
30
+
31
+ from .c_collection cimport (
32
+ LogicMapping, LogicSequence, LogicGenerator,
33
+ )
@@ -0,0 +1,33 @@
1
+ __all__ = [
2
+ 'GLOBAL_SINGLETON', 'Singleton',
3
+ 'NodeEdgeCondition', 'ConditionElse', 'ConditionAny', 'ConditionAuto', 'BinaryCondition', 'ConditionTrue', 'ConditionFalse',
4
+ 'NO_CONDITION', 'ELSE_CONDITION', 'AUTO_CONDITION', 'TRUE_CONDITION', 'FALSE_CONDITION',
5
+ 'SkipContextsBlock', 'LogicExpression', 'LogicGroupManager', 'LGM',
6
+ 'LogicGroupFrame', 'LogicGroupStack', 'ShelvedStateFrame', 'ShelvedStateStack', 'LogicGroup',
7
+ 'LogicNodeFrame', 'LogicNodeStack', 'LogicNode', 'BreakpointNode',
8
+ 'ActionNode', 'PlaceholderNode', 'NoAction', 'LongAction', 'ShortAction',
9
+ 'RootLogicNode', 'ContextLogicExpression', 'AttrExpression', 'AttrNestedExpression', 'GetterExpression', 'GetterNestedExpression',
10
+ 'MathExpressionOperator', 'MathExpression', 'ComparisonExpressionOperator', 'ComparisonExpression',
11
+ 'LogicalExpressionOperator', 'LogicalExpression',
12
+ 'LogicMapping', 'LogicSequence', 'LogicGenerator',
13
+ ]
14
+
15
+ from .c_abc cimport (
16
+ GLOBAL_SINGLETON, Singleton,
17
+ NodeEdgeCondition, ConditionElse, ConditionAny, ConditionAuto, BinaryCondition, ConditionTrue, ConditionFalse,
18
+ NO_CONDITION, ELSE_CONDITION, AUTO_CONDITION, TRUE_CONDITION, FALSE_CONDITION,
19
+ SkipContextsBlock, LogicExpression, LogicGroupManager, LGM,
20
+ LogicGroupFrame, LogicGroupStack, ShelvedStateFrame, ShelvedStateStack, LogicGroup,
21
+ LogicNodeFrame, LogicNodeStack, LogicNode, BreakpointNode,
22
+ ActionNode, PlaceholderNode, NoAction, LongAction, ShortAction,
23
+ )
24
+
25
+ from .c_node cimport (
26
+ RootLogicNode, ContextLogicExpression, AttrExpression, AttrNestedExpression, GetterExpression, GetterNestedExpression,
27
+ MathExpressionOperator, MathExpression, ComparisonExpressionOperator, ComparisonExpression,
28
+ LogicalExpressionOperator, LogicalExpression,
29
+ )
30
+
31
+ from .c_collection cimport (
32
+ LogicMapping, LogicSequence, LogicGenerator,
33
+ )
@@ -0,0 +1,57 @@
1
+ import logging
2
+
3
+ from .. import LOGGER
4
+
5
+ LOGGER = LOGGER.getChild('CAPI')
6
+
7
+ from .c_abc import (
8
+ Singleton,
9
+ NodeEdgeCondition, ConditionElse, ConditionAny, ConditionAuto, BinaryCondition, ConditionTrue, ConditionFalse,
10
+ NO_CONDITION, ELSE_CONDITION, AUTO_CONDITION, TRUE_CONDITION, FALSE_CONDITION,
11
+ SkipContextsBlock, LogicExpression, LogicNode,
12
+ LogicGroupManager, LGM, LogicGroup,
13
+ ActionNode, BreakpointNode, PlaceholderNode,
14
+ NoAction, LongAction, ShortAction, CancelAction
15
+ )
16
+
17
+ from .c_node import (
18
+ RootLogicNode, ContextLogicExpression,
19
+ AttrExpression, AttrNestedExpression,
20
+ GetterExpression, GetterNestedExpression,
21
+ MathExpressionOperator, MathExpression,
22
+ ComparisonExpressionOperator, ComparisonExpression,
23
+ LogicalExpressionOperator, LogicalExpression,
24
+ )
25
+
26
+ from .c_collection import (
27
+ LogicMapping,
28
+ LogicSequence,
29
+ LogicGenerator,
30
+ )
31
+
32
+
33
+ def set_logger(logger: logging.Logger):
34
+ global LOGGER
35
+ LOGGER = logger
36
+ c_abc.LOGGER = logger.getChild('abc')
37
+
38
+
39
+ __all__ = [
40
+ 'LOGGER', 'set_logger',
41
+ 'Singleton',
42
+ 'NodeEdgeCondition', 'ConditionElse', 'ConditionAny', 'ConditionAuto', 'BinaryCondition', 'ConditionTrue', 'ConditionFalse',
43
+ 'NO_CONDITION', 'ELSE_CONDITION', 'AUTO_CONDITION', 'TRUE_CONDITION', 'FALSE_CONDITION',
44
+ 'SkipContextsBlock', 'LogicExpression', 'LogicNode',
45
+ 'LogicGroupManager', 'LGM', 'LogicGroup',
46
+ 'ActionNode', 'BreakpointNode', 'PlaceholderNode',
47
+ 'NoAction', 'LongAction', 'ShortAction', 'CancelAction',
48
+
49
+ 'RootLogicNode', 'ContextLogicExpression',
50
+ 'AttrExpression', 'AttrNestedExpression',
51
+ 'GetterExpression', 'GetterNestedExpression',
52
+ 'MathExpressionOperator', 'MathExpression',
53
+ 'ComparisonExpressionOperator', 'ComparisonExpression',
54
+ 'LogicalExpressionOperator', 'LogicalExpression',
55
+
56
+ 'LogicMapping', 'LogicSequence', 'LogicGenerator'
57
+ ]
@@ -0,0 +1,246 @@
1
+ from cpython.object cimport PyObject
2
+ from cpython.pystate cimport PyThreadState
3
+
4
+ cdef extern from "Python.h":
5
+ void PyThreadState_EnterTracing(PyThreadState* tstate)
6
+ void PyThreadState_LeaveTracing(PyThreadState* tstate)
7
+
8
+
9
+ cdef dict GLOBAL_SINGLETON
10
+
11
+
12
+ cdef class Singleton:
13
+ pass
14
+
15
+
16
+ cdef class NodeEdgeCondition(Singleton):
17
+ cdef PyObject* value_addr
18
+
19
+
20
+ cdef class ConditionElse(NodeEdgeCondition):
21
+ pass
22
+
23
+
24
+ cdef class ConditionAny(NodeEdgeCondition):
25
+ pass
26
+
27
+
28
+ cdef class ConditionAuto(NodeEdgeCondition):
29
+ pass
30
+
31
+
32
+ cdef class BinaryCondition(NodeEdgeCondition):
33
+ pass
34
+
35
+
36
+ cdef class ConditionTrue(BinaryCondition):
37
+ pass
38
+
39
+
40
+ cdef class ConditionFalse(BinaryCondition):
41
+ pass
42
+
43
+
44
+ cdef ConditionAny NO_CONDITION
45
+ cdef ConditionElse ELSE_CONDITION
46
+ cdef ConditionAuto AUTO_CONDITION
47
+ cdef ConditionTrue TRUE_CONDITION
48
+ cdef ConditionFalse FALSE_CONDITION
49
+
50
+
51
+ cdef class SkipContextsBlock:
52
+ cdef public bint default_entry_check
53
+
54
+ cdef type skip_exception
55
+ cdef bint tracer_override
56
+ cdef object cframe
57
+ cdef tuple enter_line
58
+
59
+ cdef size_t cframe_tracer_sig_count
60
+ cdef object cframe_tracer
61
+
62
+ cdef size_t global_tracer_sig_count
63
+ cdef object global_tracer
64
+
65
+ cdef size_t global_profiler_sig_count
66
+ cdef object global_profiler
67
+
68
+ cdef bint c_entry_check(self)
69
+
70
+ cdef void c_on_enter(self)
71
+
72
+ cdef void c_on_exit(self)
73
+
74
+
75
+ cdef class LogicExpression(SkipContextsBlock):
76
+ cdef readonly object expression
77
+ cdef readonly type dtype
78
+ cdef readonly str repr
79
+ cdef readonly object uid
80
+
81
+ cdef object c_eval(self, bint enforce_dtype)
82
+
83
+ @staticmethod
84
+ cdef LogicExpression c_cast(object value, type dtype)
85
+
86
+ @staticmethod
87
+ cdef LogicExpression c_math_op(LogicExpression self, object other, object op, str operator_str, type dtype)
88
+
89
+
90
+ cdef struct LogicGroupFrame:
91
+ PyObject* logic_group
92
+ LogicGroupFrame* prev
93
+
94
+
95
+ cdef struct LogicGroupStack:
96
+ LogicGroupFrame* top
97
+ size_t size
98
+
99
+
100
+ cdef struct LogicNodeFrame:
101
+ PyObject* logic_node
102
+ LogicNodeFrame* prev
103
+
104
+
105
+ cdef struct LogicNodeStack:
106
+ LogicNodeFrame* top
107
+ size_t size
108
+
109
+
110
+ cdef struct ShelvedStateFrame:
111
+ LogicGroupStack* active_groups
112
+ LogicNodeStack* active_nodes
113
+ LogicNodeStack* breakpoint_nodes
114
+ LogicNodeStack* active_breakpoints
115
+ bint inspection_mode
116
+ bint vigilant_mode
117
+ ShelvedStateFrame* prev
118
+
119
+
120
+ cdef struct ShelvedStateStack:
121
+ ShelvedStateFrame* top
122
+ size_t size
123
+
124
+
125
+ cdef class LogicGroupManager(Singleton):
126
+ cdef LogicGroupStack* _active_groups
127
+ cdef LogicNodeStack* _active_nodes
128
+ cdef LogicNodeStack* _breakpoint_nodes
129
+ cdef ShelvedStateStack* _shelved_state
130
+
131
+ cdef readonly dict _cache
132
+ cdef public bint inspection_mode
133
+ cdef public bint vigilant_mode
134
+
135
+ @staticmethod
136
+ cdef inline void c_ln_stack_push(LogicNodeStack* stack, LogicNode logic_node)
137
+
138
+ @staticmethod
139
+ cdef inline void c_ln_stack_pop(LogicNodeStack* stack, LogicNode logic_node=*)
140
+
141
+ @staticmethod
142
+ cdef inline void c_ln_stack_remove(LogicNodeStack* stack, LogicNode logic_node)
143
+
144
+ @staticmethod
145
+ cdef inline LogicNodeFrame* c_ln_stack_locate(LogicNodeStack* stack, LogicNode logic_node)
146
+
147
+ @staticmethod
148
+ cdef inline void c_ln_stack_relocate(LogicNodeStack* original_stack, LogicNodeStack* new_stack, LogicNode logic_node)
149
+
150
+ cdef inline LogicGroup c_cached_init(self, str name, type cls, dict kwargs)
151
+
152
+ cdef inline void c_lg_enter(self, LogicGroup logic_group)
153
+
154
+ cdef inline void c_lg_exit(self, LogicGroup logic_group=*)
155
+
156
+ cdef inline void c_ln_enter(self, LogicNode logic_node)
157
+
158
+ cdef inline void c_ln_exit(self, LogicNode logic_node)
159
+
160
+ cdef inline void c_shelve(self)
161
+
162
+ cdef inline void c_unshelve(self)
163
+
164
+ cdef inline void c_clear(self)
165
+
166
+
167
+ cdef LogicGroupManager LGM
168
+
169
+
170
+ cdef class LogicGroup:
171
+ cdef readonly str name
172
+ cdef readonly LogicGroup parent
173
+ cdef readonly type Break
174
+ cdef readonly dict contexts
175
+
176
+ cdef void c_break_inspection(self)
177
+
178
+ cdef void c_break_active(self)
179
+
180
+ cdef void c_break_runtime(self)
181
+
182
+
183
+ cdef class LogicNode(LogicExpression):
184
+ cdef LogicNodeStack* subordinates
185
+ cdef readonly NodeEdgeCondition condition_to_parent
186
+ cdef readonly LogicNode parent
187
+ cdef readonly dict children
188
+ cdef readonly list labels
189
+ cdef readonly bint autogen
190
+
191
+ cdef NodeEdgeCondition c_infer_condition(self, LogicNode child)
192
+
193
+ cdef PlaceholderNode c_get_placeholder(self)
194
+
195
+ cdef void c_append(self, LogicNode child, NodeEdgeCondition condition)
196
+
197
+ cdef void c_overwrite(self, LogicNode new_node, NodeEdgeCondition condition)
198
+
199
+ cdef void c_replace(self, LogicNode original_node, LogicNode new_node)
200
+
201
+ cdef void c_validate(self)
202
+
203
+ cdef tuple c_eval_recursively(self, list path=*, object default=*)
204
+
205
+ cdef void c_auto_fill(self)
206
+
207
+ cdef size_t c_consolidate_placeholder(self)
208
+
209
+
210
+ cdef class BreakpointNode(LogicNode):
211
+ cdef readonly LogicGroup break_from
212
+ cdef readonly bint await_connection
213
+
214
+ cdef void c_connect(self, LogicNode child)
215
+
216
+
217
+ cdef class ActionNode(LogicNode):
218
+ cdef readonly object action
219
+
220
+ cdef void c_auto_connect(self)
221
+
222
+ cdef void c_post_eval(self)
223
+
224
+
225
+ cdef class PlaceholderNode(ActionNode):
226
+ pass
227
+
228
+
229
+ cdef class NoAction(ActionNode):
230
+ cdef readonly ssize_t sig
231
+
232
+
233
+ cdef class LongAction(ActionNode):
234
+ cdef readonly ssize_t sig
235
+
236
+
237
+ cdef class ShortAction(ActionNode):
238
+ cdef readonly ssize_t sig
239
+
240
+
241
+ cdef class CancelAction(ActionNode):
242
+ cdef readonly ssize_t sig
243
+
244
+
245
+ cdef class ClearAction(ActionNode):
246
+ cdef readonly ssize_t sig