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.
- decision_graph/__infra__.pxd +1 -0
- decision_graph/__init__.pxd +1 -0
- decision_graph/__init__.py +39 -0
- decision_graph/decision_tree/__init__.pxd +2 -0
- decision_graph/decision_tree/__init__.py +85 -0
- decision_graph/decision_tree/bake/__infra__.pxd +502 -0
- decision_graph/decision_tree/bake/__init__.pxd +502 -0
- decision_graph/decision_tree/bake/__init__.py +29 -0
- decision_graph/decision_tree/bake/c_action.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_action.h +324 -0
- decision_graph/decision_tree/bake/c_action.pxd +54 -0
- decision_graph/decision_tree/bake/c_action.pyi +126 -0
- decision_graph/decision_tree/bake/c_action.pyx +65 -0
- decision_graph/decision_tree/bake/c_allocator_protocol.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_allocator_protocol.pxd +24 -0
- decision_graph/decision_tree/bake/c_allocator_protocol.pyi +61 -0
- decision_graph/decision_tree/bake/c_allocator_protocol.pyx +109 -0
- decision_graph/decision_tree/bake/c_bake.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_bake.h +629 -0
- decision_graph/decision_tree/bake/c_bake.pxd +52 -0
- decision_graph/decision_tree/bake/c_bake.pyi +151 -0
- decision_graph/decision_tree/bake/c_bake.pyx +142 -0
- decision_graph/decision_tree/bake/c_collections.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_collections.h +692 -0
- decision_graph/decision_tree/bake/c_collections.pxd +52 -0
- decision_graph/decision_tree/bake/c_collections.pyi +193 -0
- decision_graph/decision_tree/bake/c_collections.pyx +161 -0
- decision_graph/decision_tree/bake/c_const.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_const.h +395 -0
- decision_graph/decision_tree/bake/c_const.pxd +56 -0
- decision_graph/decision_tree/bake/c_const.pyi +305 -0
- decision_graph/decision_tree/bake/c_const.pyx +278 -0
- decision_graph/decision_tree/bake/c_edge.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_edge.h +511 -0
- decision_graph/decision_tree/bake/c_edge.pxd +117 -0
- decision_graph/decision_tree/bake/c_edge.pyi +192 -0
- decision_graph/decision_tree/bake/c_edge.pyx +270 -0
- decision_graph/decision_tree/bake/c_eval.h +848 -0
- decision_graph/decision_tree/bake/c_eval.pxd +40 -0
- decision_graph/decision_tree/bake/c_expr.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_expr.h +1900 -0
- decision_graph/decision_tree/bake/c_expr.pxd +129 -0
- decision_graph/decision_tree/bake/c_expr.pyi +280 -0
- decision_graph/decision_tree/bake/c_expr.pyx +272 -0
- decision_graph/decision_tree/bake/c_hierarchy.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_hierarchy.h +731 -0
- decision_graph/decision_tree/bake/c_hierarchy.pxd +71 -0
- decision_graph/decision_tree/bake/c_hierarchy.pyi +409 -0
- decision_graph/decision_tree/bake/c_hierarchy.pyx +277 -0
- decision_graph/decision_tree/bake/c_logic_group.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_logic_group.h +1226 -0
- decision_graph/decision_tree/bake/c_logic_group.pxd +162 -0
- decision_graph/decision_tree/bake/c_logic_group.pyi +264 -0
- decision_graph/decision_tree/bake/c_logic_group.pyx +308 -0
- decision_graph/decision_tree/bake/c_node.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_node.h +2660 -0
- decision_graph/decision_tree/bake/c_node.pxd +381 -0
- decision_graph/decision_tree/bake/c_node.pyi +438 -0
- decision_graph/decision_tree/bake/c_node.pyx +639 -0
- decision_graph/decision_tree/bake/c_reconstruct.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_reconstruct.pxd +63 -0
- decision_graph/decision_tree/bake/c_reconstruct.pyi +60 -0
- decision_graph/decision_tree/bake/c_reconstruct.pyx +252 -0
- decision_graph/decision_tree/bake/c_var.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/bake/c_var.h +2054 -0
- decision_graph/decision_tree/bake/c_var.pxd +205 -0
- decision_graph/decision_tree/bake/c_var.pyi +271 -0
- decision_graph/decision_tree/bake/c_var.pyx +228 -0
- decision_graph/decision_tree/capi/__infra__.pxd +33 -0
- decision_graph/decision_tree/capi/__init__.pxd +33 -0
- decision_graph/decision_tree/capi/__init__.py +57 -0
- decision_graph/decision_tree/capi/c_abc.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/capi/c_abc.pxd +246 -0
- decision_graph/decision_tree/capi/c_abc.pyi +770 -0
- decision_graph/decision_tree/capi/c_abc.pyx +1532 -0
- decision_graph/decision_tree/capi/c_collection.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/capi/c_collection.pxd +22 -0
- decision_graph/decision_tree/capi/c_collection.pyi +245 -0
- decision_graph/decision_tree/capi/c_collection.pyx +138 -0
- decision_graph/decision_tree/capi/c_node.cp315-win_amd64.pyd +0 -0
- decision_graph/decision_tree/capi/c_node.pxd +95 -0
- decision_graph/decision_tree/capi/c_node.pyi +492 -0
- decision_graph/decision_tree/capi/c_node.pyx +551 -0
- decision_graph/decision_tree/exc.py +189 -0
- decision_graph/decision_tree/native/__init__.py +57 -0
- decision_graph/decision_tree/native/abc.py +1167 -0
- decision_graph/decision_tree/native/collection.py +134 -0
- decision_graph/decision_tree/native/node.py +521 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_action.c +16320 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_action.h +324 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_allocator_protocol.c +12473 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_bake.c +16485 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_bake.h +629 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_collections.c +17381 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_collections.h +692 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_const.c +20815 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_const.h +395 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_edge.c +20696 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_edge.h +511 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_eval.h +848 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_expr.c +22065 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_expr.h +1900 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_hierarchy.c +23267 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_hierarchy.h +731 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_logic_group.c +22434 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_logic_group.h +1226 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_node.c +28385 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_node.h +2660 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_reconstruct.c +15955 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_var.c +16881 -0
- decision_graph/includes/decision_graph/decision_tree/bake/c_var.h +2054 -0
- decision_graph/includes/decision_graph/decision_tree/capi/c_abc.c +59196 -0
- decision_graph/includes/decision_graph/decision_tree/capi/c_collection.c +19967 -0
- decision_graph/includes/decision_graph/decision_tree/capi/c_node.c +39229 -0
- decision_graph/logic_group/__init__.py +25 -0
- decision_graph/logic_group/base.py +100 -0
- decision_graph/logic_group/pending_request.py +384 -0
- decision_graph/webui/__init__.py +24 -0
- decision_graph/webui/bake/__init__.py +65 -0
- decision_graph/webui/bake/app.py +488 -0
- decision_graph/webui/bake/static/d3.v7.min.js +2 -0
- decision_graph/webui/bake/static/script.js +1440 -0
- decision_graph/webui/bake/static/style.css +920 -0
- decision_graph/webui/bake/templates/index.html +183 -0
- decision_graph/webui/bake/templates/offline.html +184 -0
- decision_graph/webui/capi/__init__.py +54 -0
- decision_graph/webui/capi/app.py +366 -0
- decision_graph/webui/capi/main.py +53 -0
- decision_graph/webui/capi/static/d3.v7.min.js +2 -0
- decision_graph/webui/capi/static/script.js +1026 -0
- decision_graph/webui/capi/static/style.css +656 -0
- decision_graph/webui/capi/templates/index.html +93 -0
- decision_graph/webui/capi/templates/offline.html +94 -0
- decision_graph/webui/native/__init__.py +54 -0
- decision_graph/webui/native/app.py +366 -0
- decision_graph/webui/native/main.py +53 -0
- decision_graph/webui/native/static/d3.v7.min.js +2 -0
- decision_graph/webui/native/static/script.js +1026 -0
- decision_graph/webui/native/static/style.css +656 -0
- decision_graph/webui/native/templates/index.html +93 -0
- decision_graph/webui/native/templates/offline.html +94 -0
- pydecisiongraph-0.3.2.post1.dist-info/METADATA +136 -0
- pydecisiongraph-0.3.2.post1.dist-info/RECORD +148 -0
- pydecisiongraph-0.3.2.post1.dist-info/WHEEL +5 -0
- pydecisiongraph-0.3.2.post1.dist-info/licenses/LICENSE +373 -0
- pydecisiongraph-0.3.2.post1.dist-info/top_level.txt +2 -0
- tests/bake_c_evaluator.cp315-win_amd64.pyd +0 -0
- 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
|
+
]
|
|
Binary file
|
|
@@ -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
|