PyDecisionGraph 0.3.2.post1__cp315-cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-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.cp315t-win_amd64.pyd +0 -0
  148. tests/bake_eval_probe.cp315t-win_amd64.pyd +0 -0
@@ -0,0 +1,162 @@
1
+ from libcpp cimport bool as c_bool
2
+
3
+ from cbase.allocator_protocol cimport allocator_protocol
4
+ from cbase.bytemap cimport BoundByteMap, bytemap
5
+
6
+ from .c_hierarchy cimport dcg_breakpoint_node, dcg_root_node
7
+ from .c_node cimport LogicNode, dcg_node
8
+
9
+
10
+ cdef extern from "decision_graph/decision_tree/bake/c_logic_group.h":
11
+ const size_t DCG_LGM_DEFAULT_CAPACITY
12
+
13
+ ctypedef enum dcg_logic_group_type:
14
+ DCG_LG_BASE
15
+ DCG_LG_MAPPING
16
+
17
+ ctypedef struct dcg_logic_group:
18
+ dcg_logic_group_type lgtype
19
+ const char* name
20
+ dcg_logic_group* parent
21
+
22
+ ctypedef struct dcg_lgm_state:
23
+ dcg_logic_group** groups
24
+ size_t n_groups
25
+ size_t groups_capacity
26
+ dcg_node** nodes
27
+ size_t n_nodes
28
+ size_t nodes_capacity
29
+ dcg_breakpoint_node** breakpoints
30
+ size_t n_breakpoints
31
+ size_t breakpoints_capacity
32
+ c_bool inspection_mode
33
+ c_bool vigilant_mode
34
+
35
+ ctypedef struct dcg_action_node:
36
+ pass
37
+
38
+ ctypedef enum dcg_node_type:
39
+ DCG_NODE_NOACTION
40
+
41
+ ctypedef struct dcg_logic_group_manager:
42
+ allocator_protocol* allocator
43
+ bytemap registry
44
+ dcg_logic_group** groups
45
+ size_t n_groups
46
+ size_t groups_capacity
47
+ dcg_node** nodes
48
+ size_t n_nodes
49
+ size_t nodes_capacity
50
+ dcg_breakpoint_node** breakpoints
51
+ size_t n_breakpoints
52
+ size_t breakpoints_capacity
53
+ dcg_lgm_state* shelved
54
+ size_t n_shelved
55
+ size_t shelved_capacity
56
+ c_bool inspection_mode
57
+ c_bool vigilant_mode
58
+
59
+ const char* c_dcg_logic_group_type_name(dcg_logic_group_type lgtype) noexcept nogil
60
+
61
+ void* c_dcg_lgm_reserve(void** block, size_t* capacity, size_t count, size_t element_size, allocator_protocol* allocator) noexcept nogil
62
+ int c_dcg_lgm_push_group(dcg_logic_group_manager* mgr, dcg_logic_group* group) noexcept nogil
63
+ int c_dcg_lgm_push_node(dcg_logic_group_manager* mgr, dcg_node* node) noexcept nogil
64
+ int c_dcg_lgm_push_breakpoint(dcg_logic_group_manager* mgr, dcg_breakpoint_node* breakpoint) noexcept nogil
65
+
66
+ int c_dcg_logic_group_init(dcg_logic_group* group, dcg_logic_group_type lgtype, const char* name) noexcept nogil
67
+ dcg_logic_group* c_dcg_logic_group_new(dcg_logic_group_type lgtype, const char* name, allocator_protocol* allocator) noexcept nogil
68
+ void c_dcg_logic_group_dealloc(dcg_logic_group* group) noexcept nogil
69
+ void c_dcg_logic_group_free(dcg_logic_group* group) noexcept nogil
70
+
71
+ dcg_logic_group_manager* c_dcg_lgm_new(allocator_protocol* allocator) noexcept nogil
72
+ int c_dcg_lgm_init(dcg_logic_group_manager* mgr, allocator_protocol* allocator) noexcept nogil
73
+ void c_dcg_lgm_dealloc(dcg_logic_group_manager* mgr) noexcept nogil
74
+ void c_dcg_lgm_free(dcg_logic_group_manager* mgr) noexcept nogil
75
+ void c_dcg_lgm_clear(dcg_logic_group_manager* mgr) noexcept nogil
76
+
77
+ int c_dcg_lgm_register(dcg_logic_group_manager* mgr, dcg_logic_group* group) noexcept nogil
78
+ dcg_logic_group* c_dcg_lgm_find(const dcg_logic_group_manager* mgr, const char* name, size_t name_len) noexcept nogil
79
+
80
+ int c_dcg_lgm_enter_group(dcg_logic_group_manager* mgr, dcg_logic_group* group) noexcept nogil
81
+ int c_dcg_lgm_exit_group(dcg_logic_group_manager* mgr, dcg_logic_group* group) noexcept nogil
82
+ int c_dcg_lgm_enter_node(dcg_logic_group_manager* mgr, dcg_node* node) noexcept nogil
83
+ int c_dcg_lgm_connect_awaiting(dcg_logic_group_manager* mgr, dcg_node* node) noexcept nogil
84
+ int c_dcg_lgm_exit_node(dcg_logic_group_manager* mgr, dcg_node* node) noexcept nogil
85
+ int c_dcg_lgm_label_node(dcg_logic_group_manager* mgr, dcg_node* node) noexcept nogil
86
+ int c_dcg_lgm_install_breakpoint(dcg_logic_group_manager* mgr, dcg_breakpoint_node* breakpoint) noexcept nogil
87
+ int c_dcg_lgm_break_inspection(dcg_logic_group_manager* mgr, dcg_logic_group* group) noexcept nogil
88
+
89
+ int c_dcg_node_root_ctx_shelve(dcg_root_node* root, dcg_logic_group_manager* mgr) noexcept nogil
90
+ int c_dcg_node_root_ctx_unshelve(dcg_root_node* root, dcg_logic_group_manager* mgr) noexcept nogil
91
+ int c_dcg_lgm_shelve(dcg_logic_group_manager* mgr) noexcept nogil
92
+ int c_dcg_lgm_unshelve(dcg_logic_group_manager* mgr) noexcept nogil
93
+
94
+ dcg_logic_group* c_dcg_lgm_active_group(const dcg_logic_group_manager* mgr) noexcept nogil
95
+ dcg_node* c_dcg_lgm_active_node(const dcg_logic_group_manager* mgr) noexcept nogil
96
+ size_t c_dcg_lgm_breakpoint_count(const dcg_logic_group_manager* mgr) noexcept nogil
97
+
98
+ int c_dcg_node_auto_connect(dcg_node* node, dcg_logic_group_manager* mgr) noexcept nogil
99
+ dcg_action_node* c_dcg_node_connect_new_action(dcg_node_type action_type, const char* repr, c_bool auto_connect, ssize_t sig, void* action_data, dcg_logic_group_manager* mgr, allocator_protocol* allocator) noexcept nogil
100
+ dcg_action_node* c_dcg_node_connect_new_action_trade(dcg_node_type action_type, c_bool auto_connect, dcg_logic_group_manager* mgr, allocator_protocol* allocator) noexcept nogil
101
+ dcg_action_node* c_dcg_node_connect_new_action_clear(c_bool auto_connect, dcg_logic_group_manager* mgr, allocator_protocol* allocator) noexcept nogil
102
+ dcg_node* c_dcg_node_connect_new_placeholder(c_bool auto_connect, dcg_logic_group_manager* mgr, allocator_protocol* allocator) noexcept nogil
103
+
104
+
105
+ cdef class LogicGroupNameRegistry(BoundByteMap):
106
+ cdef void* _ws_key_buf
107
+
108
+ @staticmethod
109
+ cdef LogicGroupNameRegistry c_from_header(dcg_logic_group_manager* header, bint owner=?)
110
+
111
+
112
+ cdef class LogicGroupManager:
113
+ cdef dcg_logic_group_manager* header
114
+ cdef bint owner
115
+
116
+ cdef list node_stack
117
+
118
+ cdef readonly LogicGroupNameRegistry registry
119
+
120
+ cdef void c_register(self, dcg_logic_group* group)
121
+
122
+ cdef dcg_logic_group* c_find(self, const char* name)
123
+
124
+ cdef void c_enter_group(self, dcg_logic_group* group)
125
+
126
+ cdef void c_exit_group(self, dcg_logic_group* group)
127
+
128
+ cdef int c_label_node(self, dcg_node* node)
129
+
130
+ cdef void c_break_inspection(self, dcg_logic_group* group)
131
+
132
+ cdef void c_shelve(self)
133
+
134
+ cdef void c_unshelve(self)
135
+
136
+ cpdef void node_stack_append(self, LogicNode node)
137
+
138
+ cpdef void node_stack_pop(self, LogicNode node)
139
+
140
+
141
+ cdef LogicGroupManager LGM
142
+
143
+
144
+ cdef class LogicGroup:
145
+ cdef dcg_logic_group* header
146
+ cdef bint owner
147
+
148
+ @staticmethod
149
+ cdef inline LogicGroup c_from_header(dcg_logic_group* header, bint owner=False)
150
+
151
+ cdef void c_free_header(self)
152
+
153
+ cdef void c_break(self, dcg_logic_group* scope)
154
+
155
+
156
+ cdef class LogicGroupWrapperRegistry(BoundByteMap):
157
+ cdef void* _ws_key_buf
158
+
159
+ @staticmethod
160
+ cdef LogicGroupWrapperRegistry c_from_header(bytemap* header, bint owner=?)
161
+
162
+ cdef LogicGroupWrapperRegistry GROUP_REGISTRY
@@ -0,0 +1,264 @@
1
+ """The logic group layer: the scopes a graph is built inside, and the manager.
2
+
3
+ A logic group is a scope, not a node: it carries a name, a type and a parent, and
4
+ a build entered into it is inside it. The manager is the build's state - which
5
+ group is active, which node is active, what has been entered and not yet left -
6
+ and it is what a `with` block talks to.
7
+
8
+ Groups register themselves with the manager under their name, and by their
9
+ address in the wrapper registry, so a group reached from C comes back as the
10
+ instance the build made.
11
+ """
12
+
13
+ from typing import Any, Self
14
+
15
+ from cbase.bytemap import BoundByteMap
16
+
17
+ from .c_node import LogicNode
18
+
19
+
20
+ class LogicGroupNameRegistry(BoundByteMap):
21
+ """The manager's name index: a group's name to the group itself."""
22
+
23
+ def __getitem__(self, key: str) -> LogicGroup:
24
+ """The group registered under a name.
25
+
26
+ Args:
27
+ key: The group's name.
28
+
29
+ Returns:
30
+ The group wrapper registered under it.
31
+
32
+ Raises:
33
+ KeyError: When no group is registered under that name.
34
+ """
35
+ ...
36
+
37
+
38
+ class LogicGroupManager:
39
+ """The state of a build: the stacks of groups, nodes and breakpoints.
40
+
41
+ It is the caller's struct, not an allocated block, and it keeps the
42
+ allocator it was initialised with. A node entered with the `with` statement
43
+ is placed by this manager - into the active node's reserved arm - and the
44
+ manager knows the group a node belongs to.
45
+ """
46
+
47
+ def __init__(self) -> None:
48
+ """Initialize an empty manager: no groups, no nodes, no breakpoints."""
49
+ ...
50
+
51
+ def register(self, group: LogicGroup) -> None:
52
+ """Register a group under its name and its address.
53
+
54
+ Args:
55
+ group: Group to register - by name when it has one, always by
56
+ address.
57
+ """
58
+ ...
59
+
60
+ def find(self, name: str) -> LogicGroup | None:
61
+ """The group registered under a name.
62
+
63
+ Args:
64
+ name: The group's name.
65
+
66
+ Returns:
67
+ The group, or None when no group is registered under that name.
68
+ """
69
+ ...
70
+
71
+ def shelve(self) -> None:
72
+ """Put the current build away, to be taken back by ``unshelve``."""
73
+ ...
74
+
75
+ def unshelve(self) -> None:
76
+ """Take back a build that was shelved."""
77
+ ...
78
+
79
+ def clear(self) -> None:
80
+ """Empty the manager: every stack, shelved state included."""
81
+ ...
82
+
83
+ def label_node(self, node: LogicNode) -> None:
84
+ """Label a node with the names of the groups it was built inside.
85
+
86
+ Args:
87
+ node: Node to label.
88
+ """
89
+ ...
90
+
91
+ def node_stack_append(self, node: LogicNode) -> None:
92
+ """Push a node onto the manager's node stack.
93
+
94
+ Args:
95
+ node: Node being entered.
96
+ """
97
+ ...
98
+
99
+ def node_stack_pop(self, node: LogicNode) -> None:
100
+ """Pop a node off the manager's node stack.
101
+
102
+ Args:
103
+ node: Node being left.
104
+ """
105
+ ...
106
+
107
+ @property
108
+ def registry(self) -> LogicGroupNameRegistry:
109
+ """The manager's own name index."""
110
+ ...
111
+
112
+ @property
113
+ def inspection_mode(self) -> bool:
114
+ """Whether a build records the path an evaluation takes."""
115
+ ...
116
+
117
+ @inspection_mode.setter
118
+ def inspection_mode(self, value: bool) -> None:
119
+ """Set the inspection flag."""
120
+ ...
121
+
122
+ @property
123
+ def vigilant_mode(self) -> bool:
124
+ """Whether the layer reports a mistake where it is made."""
125
+ ...
126
+
127
+ @vigilant_mode.setter
128
+ def vigilant_mode(self, value: bool) -> None:
129
+ """Set the vigilant flag."""
130
+ ...
131
+
132
+ @property
133
+ def active_group(self) -> LogicGroup | None:
134
+ """The group a build is currently inside, or None outside any group."""
135
+ ...
136
+
137
+ @property
138
+ def active_node(self) -> LogicNode | None:
139
+ """The node a build is currently inside, or None outside any node."""
140
+ ...
141
+
142
+ @property
143
+ def address(self) -> int:
144
+ """The manager's own address, which is how the layer names it to C."""
145
+ ...
146
+
147
+ @property
148
+ def n_groups(self) -> int:
149
+ """How many groups are entered."""
150
+ ...
151
+
152
+ @property
153
+ def n_nodes(self) -> int:
154
+ """How many nodes are entered."""
155
+ ...
156
+
157
+ @property
158
+ def n_breakpoints(self) -> int:
159
+ """How many breakpoints are queued and waiting."""
160
+ ...
161
+
162
+
163
+ class LogicGroup:
164
+ """A scope a graph is built inside.
165
+
166
+ A group carries a name, a type and a parent, and a build entered into it is
167
+ inside it - `with group:` enters, and leaving restores whatever was active
168
+ before.
169
+ """
170
+
171
+ def __init__(self, *, name: str | None = None, parent: LogicGroup | None = None, **kwargs: Any) -> None:
172
+ """Build a group of the base type.
173
+
174
+ Args:
175
+ name: The group's name.
176
+ parent: The group it is built inside, if any.
177
+
178
+ Raises:
179
+ MemoryError: When the block cannot be allocated.
180
+ """
181
+ ...
182
+
183
+ def __repr__(self) -> str:
184
+ """The group's own text: its class and its name."""
185
+ ...
186
+
187
+ def __enter__(self) -> Self:
188
+ """Enter the group as the scope of the build inside it.
189
+
190
+ Returns:
191
+ This group.
192
+ """
193
+ ...
194
+
195
+ def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> bool:
196
+ """Leave the group, restoring what was active before it.
197
+
198
+ Returns:
199
+ False, so an exception raised inside the block keeps travelling.
200
+ """
201
+ ...
202
+
203
+ def break_(self, scope: LogicGroup | None = None) -> None:
204
+ """Raise an inspection breakpoint inside this group.
205
+
206
+ Args:
207
+ scope: The group to break out of; this one when not given.
208
+ """
209
+ ...
210
+
211
+ @classmethod
212
+ def break_active(cls, scope: LogicGroup | None = None) -> None:
213
+ """Raise an inspection breakpoint in the build that is running.
214
+
215
+ Args:
216
+ scope: The group to break out of.
217
+ """
218
+ ...
219
+
220
+ @property
221
+ def name(self) -> str | None:
222
+ """The group's name, or None for a group that has none."""
223
+ ...
224
+
225
+ @property
226
+ def parent(self) -> LogicGroup | None:
227
+ """The group this one was built inside, or None."""
228
+ ...
229
+
230
+ @property
231
+ def lgtype(self) -> int:
232
+ """The group's C type, as the enumerator's value."""
233
+ ...
234
+
235
+ @property
236
+ def address(self) -> int:
237
+ """The group's C block, which is what the registry is keyed by."""
238
+ ...
239
+
240
+
241
+ class LogicGroupWrapperRegistry(BoundByteMap):
242
+ """The wrapper every group is looked up by, keyed by its block's address.
243
+
244
+ The same rule the node registry keeps: a lookup that finds the address
245
+ answers with the wrapper the layer holds, and one that misses builds a new
246
+ wrapper over the block.
247
+ """
248
+
249
+ def __getitem__(self, key: int) -> LogicGroup:
250
+ """The wrapper at an address, rebuilding it when it is not held.
251
+
252
+ Args:
253
+ key: Address of the C group block.
254
+
255
+ Returns:
256
+ The group wrapper for that address.
257
+ """
258
+ ...
259
+
260
+
261
+ # The manager every build runs through, and the registry every group is looked
262
+ # up by.
263
+ LGM: LogicGroupManager
264
+ GROUP_REGISTRY: LogicGroupWrapperRegistry