exonware-xwnode 0.0.1.22__py3-none-any.whl → 0.0.1.23__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.
Files changed (248) hide show
  1. exonware/__init__.py +1 -1
  2. exonware/xwnode/__init__.py +18 -5
  3. exonware/xwnode/add_strategy_types.py +165 -0
  4. exonware/xwnode/common/__init__.py +1 -1
  5. exonware/xwnode/common/graph/__init__.py +30 -0
  6. exonware/xwnode/common/graph/caching.py +131 -0
  7. exonware/xwnode/common/graph/contracts.py +100 -0
  8. exonware/xwnode/common/graph/errors.py +44 -0
  9. exonware/xwnode/common/graph/indexing.py +260 -0
  10. exonware/xwnode/common/graph/manager.py +568 -0
  11. exonware/xwnode/common/management/__init__.py +3 -5
  12. exonware/xwnode/common/management/manager.py +2 -2
  13. exonware/xwnode/common/management/migration.py +3 -3
  14. exonware/xwnode/common/monitoring/__init__.py +3 -5
  15. exonware/xwnode/common/monitoring/metrics.py +6 -2
  16. exonware/xwnode/common/monitoring/pattern_detector.py +1 -1
  17. exonware/xwnode/common/monitoring/performance_monitor.py +5 -1
  18. exonware/xwnode/common/patterns/__init__.py +3 -5
  19. exonware/xwnode/common/patterns/flyweight.py +5 -1
  20. exonware/xwnode/common/patterns/registry.py +202 -183
  21. exonware/xwnode/common/utils/__init__.py +25 -11
  22. exonware/xwnode/common/utils/simple.py +1 -1
  23. exonware/xwnode/config.py +3 -8
  24. exonware/xwnode/contracts.py +4 -105
  25. exonware/xwnode/defs.py +413 -159
  26. exonware/xwnode/edges/strategies/__init__.py +86 -4
  27. exonware/xwnode/edges/strategies/_base_edge.py +2 -2
  28. exonware/xwnode/edges/strategies/adj_list.py +287 -121
  29. exonware/xwnode/edges/strategies/adj_matrix.py +316 -222
  30. exonware/xwnode/edges/strategies/base.py +1 -1
  31. exonware/xwnode/edges/strategies/{edge_bidir_wrapper.py → bidir_wrapper.py} +45 -4
  32. exonware/xwnode/edges/strategies/bitemporal.py +520 -0
  33. exonware/xwnode/edges/strategies/{edge_block_adj_matrix.py → block_adj_matrix.py} +77 -6
  34. exonware/xwnode/edges/strategies/bv_graph.py +664 -0
  35. exonware/xwnode/edges/strategies/compressed_graph.py +217 -0
  36. exonware/xwnode/edges/strategies/{edge_coo.py → coo.py} +46 -4
  37. exonware/xwnode/edges/strategies/{edge_csc.py → csc.py} +45 -4
  38. exonware/xwnode/edges/strategies/{edge_csr.py → csr.py} +94 -12
  39. exonware/xwnode/edges/strategies/{edge_dynamic_adj_list.py → dynamic_adj_list.py} +46 -4
  40. exonware/xwnode/edges/strategies/edge_list.py +168 -0
  41. exonware/xwnode/edges/strategies/edge_property_store.py +2 -2
  42. exonware/xwnode/edges/strategies/euler_tour.py +560 -0
  43. exonware/xwnode/edges/strategies/{edge_flow_network.py → flow_network.py} +2 -2
  44. exonware/xwnode/edges/strategies/graphblas.py +449 -0
  45. exonware/xwnode/edges/strategies/hnsw.py +637 -0
  46. exonware/xwnode/edges/strategies/hop2_labels.py +467 -0
  47. exonware/xwnode/edges/strategies/{edge_hyperedge_set.py → hyperedge_set.py} +2 -2
  48. exonware/xwnode/edges/strategies/incidence_matrix.py +250 -0
  49. exonware/xwnode/edges/strategies/k2_tree.py +613 -0
  50. exonware/xwnode/edges/strategies/link_cut.py +626 -0
  51. exonware/xwnode/edges/strategies/multiplex.py +532 -0
  52. exonware/xwnode/edges/strategies/{edge_neural_graph.py → neural_graph.py} +2 -2
  53. exonware/xwnode/edges/strategies/{edge_octree.py → octree.py} +69 -11
  54. exonware/xwnode/edges/strategies/{edge_quadtree.py → quadtree.py} +66 -10
  55. exonware/xwnode/edges/strategies/roaring_adj.py +438 -0
  56. exonware/xwnode/edges/strategies/{edge_rtree.py → rtree.py} +43 -5
  57. exonware/xwnode/edges/strategies/{edge_temporal_edgeset.py → temporal_edgeset.py} +24 -5
  58. exonware/xwnode/edges/strategies/{edge_tree_graph_basic.py → tree_graph_basic.py} +78 -7
  59. exonware/xwnode/edges/strategies/{edge_weighted_graph.py → weighted_graph.py} +188 -10
  60. exonware/xwnode/errors.py +3 -6
  61. exonware/xwnode/facade.py +20 -20
  62. exonware/xwnode/nodes/strategies/__init__.py +29 -9
  63. exonware/xwnode/nodes/strategies/adjacency_list.py +650 -177
  64. exonware/xwnode/nodes/strategies/aho_corasick.py +358 -183
  65. exonware/xwnode/nodes/strategies/array_list.py +36 -3
  66. exonware/xwnode/nodes/strategies/art.py +581 -0
  67. exonware/xwnode/nodes/strategies/{node_avl_tree.py → avl_tree.py} +77 -6
  68. exonware/xwnode/nodes/strategies/{node_b_plus_tree.py → b_plus_tree.py} +81 -40
  69. exonware/xwnode/nodes/strategies/{node_btree.py → b_tree.py} +79 -9
  70. exonware/xwnode/nodes/strategies/base.py +469 -98
  71. exonware/xwnode/nodes/strategies/{node_bitmap.py → bitmap.py} +12 -12
  72. exonware/xwnode/nodes/strategies/{node_bitset_dynamic.py → bitset_dynamic.py} +11 -11
  73. exonware/xwnode/nodes/strategies/{node_bloom_filter.py → bloom_filter.py} +15 -2
  74. exonware/xwnode/nodes/strategies/bloomier_filter.py +519 -0
  75. exonware/xwnode/nodes/strategies/bw_tree.py +531 -0
  76. exonware/xwnode/nodes/strategies/contracts.py +1 -1
  77. exonware/xwnode/nodes/strategies/{node_count_min_sketch.py → count_min_sketch.py} +3 -2
  78. exonware/xwnode/nodes/strategies/{node_cow_tree.py → cow_tree.py} +135 -13
  79. exonware/xwnode/nodes/strategies/crdt_map.py +629 -0
  80. exonware/xwnode/nodes/strategies/{node_cuckoo_hash.py → cuckoo_hash.py} +2 -2
  81. exonware/xwnode/nodes/strategies/{node_xdata_optimized.py → data_interchange_optimized.py} +21 -4
  82. exonware/xwnode/nodes/strategies/dawg.py +876 -0
  83. exonware/xwnode/nodes/strategies/deque.py +321 -153
  84. exonware/xwnode/nodes/strategies/extendible_hash.py +93 -0
  85. exonware/xwnode/nodes/strategies/{node_fenwick_tree.py → fenwick_tree.py} +111 -19
  86. exonware/xwnode/nodes/strategies/hamt.py +403 -0
  87. exonware/xwnode/nodes/strategies/hash_map.py +354 -67
  88. exonware/xwnode/nodes/strategies/heap.py +105 -5
  89. exonware/xwnode/nodes/strategies/hopscotch_hash.py +525 -0
  90. exonware/xwnode/nodes/strategies/{node_hyperloglog.py → hyperloglog.py} +6 -5
  91. exonware/xwnode/nodes/strategies/interval_tree.py +742 -0
  92. exonware/xwnode/nodes/strategies/kd_tree.py +703 -0
  93. exonware/xwnode/nodes/strategies/learned_index.py +533 -0
  94. exonware/xwnode/nodes/strategies/linear_hash.py +93 -0
  95. exonware/xwnode/nodes/strategies/linked_list.py +316 -119
  96. exonware/xwnode/nodes/strategies/{node_lsm_tree.py → lsm_tree.py} +219 -15
  97. exonware/xwnode/nodes/strategies/masstree.py +130 -0
  98. exonware/xwnode/nodes/strategies/{node_persistent_tree.py → persistent_tree.py} +149 -9
  99. exonware/xwnode/nodes/strategies/priority_queue.py +544 -132
  100. exonware/xwnode/nodes/strategies/queue.py +249 -120
  101. exonware/xwnode/nodes/strategies/{node_red_black_tree.py → red_black_tree.py} +183 -72
  102. exonware/xwnode/nodes/strategies/{node_roaring_bitmap.py → roaring_bitmap.py} +19 -6
  103. exonware/xwnode/nodes/strategies/rope.py +717 -0
  104. exonware/xwnode/nodes/strategies/{node_segment_tree.py → segment_tree.py} +106 -106
  105. exonware/xwnode/nodes/strategies/{node_set_hash.py → set_hash.py} +30 -29
  106. exonware/xwnode/nodes/strategies/{node_skip_list.py → skip_list.py} +74 -6
  107. exonware/xwnode/nodes/strategies/sparse_matrix.py +427 -131
  108. exonware/xwnode/nodes/strategies/{node_splay_tree.py → splay_tree.py} +55 -6
  109. exonware/xwnode/nodes/strategies/stack.py +244 -112
  110. exonware/xwnode/nodes/strategies/{node_suffix_array.py → suffix_array.py} +5 -1
  111. exonware/xwnode/nodes/strategies/t_tree.py +94 -0
  112. exonware/xwnode/nodes/strategies/{node_treap.py → treap.py} +75 -6
  113. exonware/xwnode/nodes/strategies/{node_tree_graph_hybrid.py → tree_graph_hybrid.py} +46 -5
  114. exonware/xwnode/nodes/strategies/trie.py +153 -9
  115. exonware/xwnode/nodes/strategies/union_find.py +111 -5
  116. exonware/xwnode/nodes/strategies/veb_tree.py +856 -0
  117. exonware/xwnode/strategies/__init__.py +5 -51
  118. exonware/xwnode/version.py +3 -3
  119. {exonware_xwnode-0.0.1.22.dist-info → exonware_xwnode-0.0.1.23.dist-info}/METADATA +23 -3
  120. exonware_xwnode-0.0.1.23.dist-info/RECORD +130 -0
  121. exonware/xwnode/edges/strategies/edge_adj_list.py +0 -353
  122. exonware/xwnode/edges/strategies/edge_adj_matrix.py +0 -445
  123. exonware/xwnode/nodes/strategies/_base_node.py +0 -307
  124. exonware/xwnode/nodes/strategies/node_aho_corasick.py +0 -525
  125. exonware/xwnode/nodes/strategies/node_array_list.py +0 -179
  126. exonware/xwnode/nodes/strategies/node_hash_map.py +0 -273
  127. exonware/xwnode/nodes/strategies/node_heap.py +0 -196
  128. exonware/xwnode/nodes/strategies/node_linked_list.py +0 -413
  129. exonware/xwnode/nodes/strategies/node_trie.py +0 -257
  130. exonware/xwnode/nodes/strategies/node_union_find.py +0 -192
  131. exonware/xwnode/queries/executors/__init__.py +0 -47
  132. exonware/xwnode/queries/executors/advanced/__init__.py +0 -37
  133. exonware/xwnode/queries/executors/advanced/aggregate_executor.py +0 -50
  134. exonware/xwnode/queries/executors/advanced/ask_executor.py +0 -50
  135. exonware/xwnode/queries/executors/advanced/construct_executor.py +0 -50
  136. exonware/xwnode/queries/executors/advanced/describe_executor.py +0 -50
  137. exonware/xwnode/queries/executors/advanced/for_loop_executor.py +0 -50
  138. exonware/xwnode/queries/executors/advanced/foreach_executor.py +0 -50
  139. exonware/xwnode/queries/executors/advanced/join_executor.py +0 -50
  140. exonware/xwnode/queries/executors/advanced/let_executor.py +0 -50
  141. exonware/xwnode/queries/executors/advanced/mutation_executor.py +0 -50
  142. exonware/xwnode/queries/executors/advanced/options_executor.py +0 -50
  143. exonware/xwnode/queries/executors/advanced/pipe_executor.py +0 -50
  144. exonware/xwnode/queries/executors/advanced/subscribe_executor.py +0 -50
  145. exonware/xwnode/queries/executors/advanced/subscription_executor.py +0 -50
  146. exonware/xwnode/queries/executors/advanced/union_executor.py +0 -50
  147. exonware/xwnode/queries/executors/advanced/window_executor.py +0 -51
  148. exonware/xwnode/queries/executors/advanced/with_cte_executor.py +0 -50
  149. exonware/xwnode/queries/executors/aggregation/__init__.py +0 -21
  150. exonware/xwnode/queries/executors/aggregation/avg_executor.py +0 -50
  151. exonware/xwnode/queries/executors/aggregation/count_executor.py +0 -38
  152. exonware/xwnode/queries/executors/aggregation/distinct_executor.py +0 -50
  153. exonware/xwnode/queries/executors/aggregation/group_executor.py +0 -50
  154. exonware/xwnode/queries/executors/aggregation/having_executor.py +0 -50
  155. exonware/xwnode/queries/executors/aggregation/max_executor.py +0 -50
  156. exonware/xwnode/queries/executors/aggregation/min_executor.py +0 -50
  157. exonware/xwnode/queries/executors/aggregation/sum_executor.py +0 -50
  158. exonware/xwnode/queries/executors/aggregation/summarize_executor.py +0 -50
  159. exonware/xwnode/queries/executors/array/__init__.py +0 -9
  160. exonware/xwnode/queries/executors/array/indexing_executor.py +0 -51
  161. exonware/xwnode/queries/executors/array/slicing_executor.py +0 -51
  162. exonware/xwnode/queries/executors/base.py +0 -257
  163. exonware/xwnode/queries/executors/capability_checker.py +0 -204
  164. exonware/xwnode/queries/executors/contracts.py +0 -166
  165. exonware/xwnode/queries/executors/core/__init__.py +0 -17
  166. exonware/xwnode/queries/executors/core/create_executor.py +0 -96
  167. exonware/xwnode/queries/executors/core/delete_executor.py +0 -99
  168. exonware/xwnode/queries/executors/core/drop_executor.py +0 -100
  169. exonware/xwnode/queries/executors/core/insert_executor.py +0 -39
  170. exonware/xwnode/queries/executors/core/select_executor.py +0 -152
  171. exonware/xwnode/queries/executors/core/update_executor.py +0 -102
  172. exonware/xwnode/queries/executors/data/__init__.py +0 -13
  173. exonware/xwnode/queries/executors/data/alter_executor.py +0 -50
  174. exonware/xwnode/queries/executors/data/load_executor.py +0 -50
  175. exonware/xwnode/queries/executors/data/merge_executor.py +0 -50
  176. exonware/xwnode/queries/executors/data/store_executor.py +0 -50
  177. exonware/xwnode/queries/executors/defs.py +0 -93
  178. exonware/xwnode/queries/executors/engine.py +0 -221
  179. exonware/xwnode/queries/executors/errors.py +0 -68
  180. exonware/xwnode/queries/executors/filtering/__init__.py +0 -25
  181. exonware/xwnode/queries/executors/filtering/between_executor.py +0 -80
  182. exonware/xwnode/queries/executors/filtering/filter_executor.py +0 -79
  183. exonware/xwnode/queries/executors/filtering/has_executor.py +0 -70
  184. exonware/xwnode/queries/executors/filtering/in_executor.py +0 -70
  185. exonware/xwnode/queries/executors/filtering/like_executor.py +0 -76
  186. exonware/xwnode/queries/executors/filtering/optional_executor.py +0 -76
  187. exonware/xwnode/queries/executors/filtering/range_executor.py +0 -80
  188. exonware/xwnode/queries/executors/filtering/term_executor.py +0 -77
  189. exonware/xwnode/queries/executors/filtering/values_executor.py +0 -71
  190. exonware/xwnode/queries/executors/filtering/where_executor.py +0 -44
  191. exonware/xwnode/queries/executors/graph/__init__.py +0 -15
  192. exonware/xwnode/queries/executors/graph/in_traverse_executor.py +0 -51
  193. exonware/xwnode/queries/executors/graph/match_executor.py +0 -51
  194. exonware/xwnode/queries/executors/graph/out_executor.py +0 -51
  195. exonware/xwnode/queries/executors/graph/path_executor.py +0 -51
  196. exonware/xwnode/queries/executors/graph/return_executor.py +0 -51
  197. exonware/xwnode/queries/executors/ordering/__init__.py +0 -9
  198. exonware/xwnode/queries/executors/ordering/by_executor.py +0 -50
  199. exonware/xwnode/queries/executors/ordering/order_executor.py +0 -51
  200. exonware/xwnode/queries/executors/projection/__init__.py +0 -9
  201. exonware/xwnode/queries/executors/projection/extend_executor.py +0 -50
  202. exonware/xwnode/queries/executors/projection/project_executor.py +0 -50
  203. exonware/xwnode/queries/executors/registry.py +0 -173
  204. exonware/xwnode/queries/parsers/__init__.py +0 -26
  205. exonware/xwnode/queries/parsers/base.py +0 -86
  206. exonware/xwnode/queries/parsers/contracts.py +0 -46
  207. exonware/xwnode/queries/parsers/errors.py +0 -53
  208. exonware/xwnode/queries/parsers/sql_param_extractor.py +0 -318
  209. exonware/xwnode/queries/strategies/__init__.py +0 -24
  210. exonware/xwnode/queries/strategies/base.py +0 -236
  211. exonware/xwnode/queries/strategies/cql.py +0 -201
  212. exonware/xwnode/queries/strategies/cypher.py +0 -181
  213. exonware/xwnode/queries/strategies/datalog.py +0 -70
  214. exonware/xwnode/queries/strategies/elastic_dsl.py +0 -70
  215. exonware/xwnode/queries/strategies/eql.py +0 -70
  216. exonware/xwnode/queries/strategies/flux.py +0 -70
  217. exonware/xwnode/queries/strategies/gql.py +0 -70
  218. exonware/xwnode/queries/strategies/graphql.py +0 -240
  219. exonware/xwnode/queries/strategies/gremlin.py +0 -181
  220. exonware/xwnode/queries/strategies/hiveql.py +0 -214
  221. exonware/xwnode/queries/strategies/hql.py +0 -70
  222. exonware/xwnode/queries/strategies/jmespath.py +0 -219
  223. exonware/xwnode/queries/strategies/jq.py +0 -66
  224. exonware/xwnode/queries/strategies/json_query.py +0 -66
  225. exonware/xwnode/queries/strategies/jsoniq.py +0 -248
  226. exonware/xwnode/queries/strategies/kql.py +0 -70
  227. exonware/xwnode/queries/strategies/linq.py +0 -238
  228. exonware/xwnode/queries/strategies/logql.py +0 -70
  229. exonware/xwnode/queries/strategies/mql.py +0 -68
  230. exonware/xwnode/queries/strategies/n1ql.py +0 -210
  231. exonware/xwnode/queries/strategies/partiql.py +0 -70
  232. exonware/xwnode/queries/strategies/pig.py +0 -215
  233. exonware/xwnode/queries/strategies/promql.py +0 -70
  234. exonware/xwnode/queries/strategies/sparql.py +0 -220
  235. exonware/xwnode/queries/strategies/sql.py +0 -275
  236. exonware/xwnode/queries/strategies/xml_query.py +0 -66
  237. exonware/xwnode/queries/strategies/xpath.py +0 -223
  238. exonware/xwnode/queries/strategies/xquery.py +0 -258
  239. exonware/xwnode/queries/strategies/xwnode_executor.py +0 -332
  240. exonware/xwnode/queries/strategies/xwquery.py +0 -456
  241. exonware_xwnode-0.0.1.22.dist-info/RECORD +0 -214
  242. /exonware/xwnode/nodes/strategies/{node_ordered_map.py → ordered_map.py} +0 -0
  243. /exonware/xwnode/nodes/strategies/{node_ordered_map_balanced.py → ordered_map_balanced.py} +0 -0
  244. /exonware/xwnode/nodes/strategies/{node_patricia.py → patricia.py} +0 -0
  245. /exonware/xwnode/nodes/strategies/{node_radix_trie.py → radix_trie.py} +0 -0
  246. /exonware/xwnode/nodes/strategies/{node_set_tree.py → set_tree.py} +0 -0
  247. {exonware_xwnode-0.0.1.22.dist-info → exonware_xwnode-0.0.1.23.dist-info}/WHEEL +0 -0
  248. {exonware_xwnode-0.0.1.22.dist-info → exonware_xwnode-0.0.1.23.dist-info}/licenses/LICENSE +0 -0
@@ -1,192 +0,0 @@
1
- """
2
- Union-Find Node Strategy Implementation
3
-
4
- This module implements the UNION_FIND strategy for efficient set operations.
5
- """
6
-
7
- from typing import Any, Iterator, Dict, List, Set
8
- from .base import ANodeGraphStrategy
9
- from .contracts import NodeType
10
- from ...defs import NodeMode, NodeTrait
11
- from ..utils import (
12
- UnionFind,
13
- safe_to_native_conversion,
14
- create_basic_metrics,
15
- create_basic_backend_info,
16
- create_size_tracker,
17
- create_access_tracker,
18
- update_size_tracker,
19
- record_access,
20
- get_access_metrics
21
- )
22
-
23
-
24
- class UnionFindStrategy(ANodeGraphStrategy):
25
- """
26
- Union-Find node strategy for efficient set operations.
27
-
28
- Optimized for union, find, and connected oper
29
-
30
- # Strategy type classification
31
- STRATEGY_TYPE = NodeType.GRAPH
32
- ations on disjoint sets.
33
- """
34
-
35
- def __init__(self, traits: NodeTrait = NodeTrait.NONE, **options):
36
- """Initialize the union-find strategy."""
37
- super().__init__(NodeMode.UNION_FIND, traits, **options)
38
- self._union_find = UnionFind()
39
- self._size_tracker = create_size_tracker()
40
- self._access_tracker = create_access_tracker()
41
-
42
- def get_supported_traits(self) -> NodeTrait:
43
- """Get the traits supported by the union-find strategy."""
44
- return (NodeTrait.SET_OPERATIONS | NodeTrait.HIERARCHICAL)
45
-
46
- # ============================================================================
47
- # CORE OPERATIONS
48
- # ============================================================================
49
-
50
- def put(self, key: Any, value: Any = None) -> None:
51
- """Store a key-value pair (creates a new set)."""
52
- str_key = str(key)
53
- if str_key not in self._union_find.parent:
54
- update_size_tracker(self._size_tracker, 1)
55
- self._union_find.make_set(str_key, value)
56
- record_access(self._access_tracker, 'put_count')
57
-
58
- def get(self, key: Any, default: Any = None) -> Any:
59
- """Retrieve a value by key."""
60
- str_key = str(key)
61
- record_access(self._access_tracker, 'get_count')
62
- return self._union_find.values.get(str_key, default)
63
-
64
- def has(self, key: Any) -> bool:
65
- """Check if key exists."""
66
- return str(key) in self._union_find.parent
67
-
68
- def remove(self, key: Any) -> bool:
69
- """Remove a key-value pair."""
70
- str_key = str(key)
71
- if str_key in self._union_find.parent:
72
- # Remove from all data structures
73
- del self._union_find.parent[str_key]
74
- if str_key in self._union_find.rank:
75
- del self._union_find.rank[str_key]
76
- if str_key in self._union_find.values:
77
- del self._union_find.values[str_key]
78
- update_size_tracker(self._size_tracker, -1)
79
- record_access(self._access_tracker, 'delete_count')
80
- return True
81
- return False
82
-
83
- def delete(self, key: Any) -> bool:
84
- """Remove a key-value pair (alias for remove)."""
85
- return self.remove(key)
86
-
87
- def clear(self) -> None:
88
- """Clear all data."""
89
- self._union_find = UnionFind()
90
- self._size_tracker['size'] = 0
91
-
92
- def keys(self) -> Iterator[str]:
93
- """Get all keys."""
94
- return iter(self._union_find.parent.keys())
95
-
96
- def values(self) -> Iterator[Any]:
97
- """Get all values."""
98
- return iter(self._union_find.values.values())
99
-
100
- def items(self) -> Iterator[tuple[str, Any]]:
101
- """Get all key-value pairs."""
102
- return iter(self._union_find.values.items())
103
-
104
- def __len__(self) -> int:
105
- """Get the number of items."""
106
- return self._size_tracker['size']
107
-
108
- def to_native(self) -> Dict[str, Any]:
109
- """Convert to native Python dict with set structure info."""
110
- result = {}
111
- for key in self._union_find.parent.keys():
112
- result[key] = {
113
- 'value': safe_to_native_conversion(self._union_find.values.get(key)),
114
- 'root': self._union_find.find(key),
115
- 'set_id': self._union_find.find(key)
116
- }
117
- return result
118
-
119
- @property
120
- def is_list(self) -> bool:
121
- """This is not a list strategy."""
122
- return False
123
-
124
- @property
125
- def is_dict(self) -> bool:
126
- """This behaves like a dict but with set semantics."""
127
- return True
128
-
129
- # ============================================================================
130
- # UNION-FIND SPECIFIC OPERATIONS
131
- # ============================================================================
132
-
133
- def make_set(self, element: str, value: Any = None) -> None:
134
- """Create a new set containing only the given element."""
135
- if element not in self._union_find.parent:
136
- update_size_tracker(self._size_tracker, 1)
137
- self._union_find.make_set(element, value)
138
-
139
- def find(self, element: str) -> str:
140
- """Find the root of the set containing element (with path compression)."""
141
- return self._union_find.find(element)
142
-
143
- def union(self, element1: str, element2: str) -> bool:
144
- """Union the sets containing element1 and element2."""
145
- return self._union_find.union(element1, element2)
146
-
147
- def connected(self, element1: str, element2: str) -> bool:
148
- """Check if two elements are in the same set."""
149
- return self._union_find.connected(element1, element2)
150
-
151
- def get_set_members(self, element: str) -> Set[str]:
152
- """Get all members of the set containing the given element."""
153
- return self._union_find.get_set_members(element)
154
-
155
- def get_all_sets(self) -> List[Set[str]]:
156
- """Get all disjoint sets."""
157
- return self._union_find.get_all_sets()
158
-
159
- def get_set_count(self) -> int:
160
- """Get the number of disjoint sets."""
161
- return self._union_find.get_set_count()
162
-
163
- def get_set_size(self, element: str) -> int:
164
- """Get the size of the set containing the given element."""
165
- return self._union_find.get_set_size(element)
166
-
167
- # ============================================================================
168
- # PERFORMANCE CHARACTERISTICS
169
- # ============================================================================
170
-
171
- def backend_info(self) -> Dict[str, Any]:
172
- """Get backend implementation info."""
173
- return create_basic_backend_info(
174
- 'UNION_FIND',
175
- 'UnionFind with path compression and union by rank',
176
- complexity={
177
- 'find': 'O(α(n)) amortized where α is inverse Ackermann',
178
- 'union': 'O(α(n)) amortized where α is inverse Ackermann',
179
- 'connected': 'O(α(n)) amortized where α is inverse Ackermann'
180
- }
181
- )
182
-
183
- def metrics(self) -> Dict[str, Any]:
184
- """Get performance metrics."""
185
- base_metrics = create_basic_metrics('UNION_FIND', self._size_tracker['size'])
186
- access_metrics = get_access_metrics(self._access_tracker)
187
- base_metrics.update(access_metrics)
188
- base_metrics.update({
189
- 'set_count': self._union_find.get_set_count(),
190
- 'avg_set_size': self._size_tracker['size'] / max(1, self._union_find.get_set_count())
191
- })
192
- return base_metrics
@@ -1,47 +0,0 @@
1
- """
2
- #exonware/xwnode/src/exonware/xwnode/queries/executors/__init__.py
3
-
4
- Query Operation Executors
5
-
6
- This package implements the execution layer for 50 XWQuery Script operations.
7
-
8
- Company: eXonware.com
9
- Author: Eng. Muhammad AlShehri
10
- Email: connect@exonware.com
11
- Version: 0.0.1.22
12
- Generation Date: 08-Oct-2025
13
- """
14
-
15
- from .contracts import (
16
- IOperationExecutor,
17
- Action,
18
- ExecutionContext,
19
- ExecutionResult
20
- )
21
- from .defs import OperationCapability, OperationType, ExecutionStatus
22
- from .errors import ExecutorError, OperationExecutionError, ValidationError, UnsupportedOperationError
23
- from .base import AOperationExecutor
24
- from .registry import OperationRegistry, get_operation_registry, register_operation
25
-
26
- __all__ = [
27
- # Contracts
28
- 'IOperationExecutor',
29
- 'Action',
30
- 'ExecutionContext',
31
- 'ExecutionResult',
32
- # Types
33
- 'OperationCapability',
34
- 'OperationType',
35
- 'ExecutionStatus',
36
- # Errors
37
- 'ExecutorError',
38
- 'OperationExecutionError',
39
- 'ValidationError',
40
- 'UnsupportedOperationError',
41
- # Base
42
- 'AOperationExecutor',
43
- # Registry
44
- 'OperationRegistry',
45
- 'get_operation_registry',
46
- 'register_operation',
47
- ]
@@ -1,37 +0,0 @@
1
- """Advanced operation executors."""
2
-
3
- from .join_executor import JoinExecutor
4
- from .union_executor import UnionExecutor
5
- from .with_cte_executor import WithCteExecutor
6
- from .aggregate_executor import AggregateExecutor
7
- from .foreach_executor import ForeachExecutor
8
- from .let_executor import LetExecutor
9
- from .for_loop_executor import ForLoopExecutor
10
- from .window_executor import WindowExecutor
11
- from .describe_executor import DescribeExecutor
12
- from .construct_executor import ConstructExecutor
13
- from .ask_executor import AskExecutor
14
- from .subscribe_executor import SubscribeExecutor
15
- from .subscription_executor import SubscriptionExecutor
16
- from .mutation_executor import MutationExecutor
17
- from .pipe_executor import PipeExecutor
18
- from .options_executor import OptionsExecutor
19
-
20
- __all__ = [
21
- 'JoinExecutor',
22
- 'UnionExecutor',
23
- 'WithCteExecutor',
24
- 'AggregateExecutor',
25
- 'ForeachExecutor',
26
- 'LetExecutor',
27
- 'ForLoopExecutor',
28
- 'WindowExecutor',
29
- 'DescribeExecutor',
30
- 'ConstructExecutor',
31
- 'AskExecutor',
32
- 'SubscribeExecutor',
33
- 'SubscriptionExecutor',
34
- 'MutationExecutor',
35
- 'PipeExecutor',
36
- 'OptionsExecutor',
37
- ]
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/aggregate_executor.py
4
-
5
- AGGREGATE Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class AggregateExecutor(AUniversalOperationExecutor):
20
- """
21
- AGGREGATE operation executor.
22
-
23
- Window aggregation operations
24
-
25
- Capability: Universal
26
- Operation Type: AGGREGATION
27
- """
28
-
29
- OPERATION_NAME = "AGGREGATE"
30
- OPERATION_TYPE = OperationType.AGGREGATION
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute AGGREGATE operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_aggregate(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_aggregate(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute aggregate logic."""
49
- # Implementation here
50
- return {'result': 'AGGREGATE executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/ask_executor.py
4
-
5
- ASK Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class AskExecutor(AUniversalOperationExecutor):
20
- """
21
- ASK operation executor.
22
-
23
- Boolean query (yes/no result)
24
-
25
- Capability: Universal
26
- Operation Type: ADVANCED
27
- """
28
-
29
- OPERATION_NAME = "ASK"
30
- OPERATION_TYPE = OperationType.ADVANCED
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute ASK operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_ask(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_ask(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute ask logic."""
49
- # Implementation here
50
- return {'result': 'ASK executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/construct_executor.py
4
-
5
- CONSTRUCT Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class ConstructExecutor(AUniversalOperationExecutor):
20
- """
21
- CONSTRUCT operation executor.
22
-
23
- Constructs new data structures
24
-
25
- Capability: Universal
26
- Operation Type: ADVANCED
27
- """
28
-
29
- OPERATION_NAME = "CONSTRUCT"
30
- OPERATION_TYPE = OperationType.ADVANCED
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute CONSTRUCT operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_construct(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_construct(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute construct logic."""
49
- # Implementation here
50
- return {'result': 'CONSTRUCT executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/describe_executor.py
4
-
5
- DESCRIBE Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class DescribeExecutor(AUniversalOperationExecutor):
20
- """
21
- DESCRIBE operation executor.
22
-
23
- Describes structure/schema
24
-
25
- Capability: Universal
26
- Operation Type: ADVANCED
27
- """
28
-
29
- OPERATION_NAME = "DESCRIBE"
30
- OPERATION_TYPE = OperationType.ADVANCED
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute DESCRIBE operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_describe(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_describe(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute describe logic."""
49
- # Implementation here
50
- return {'result': 'DESCRIBE executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/for_loop_executor.py
4
-
5
- FOR Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class ForLoopExecutor(AUniversalOperationExecutor):
20
- """
21
- FOR operation executor.
22
-
23
- For loop construct
24
-
25
- Capability: Universal
26
- Operation Type: CONTROL_FLOW
27
- """
28
-
29
- OPERATION_NAME = "FOR"
30
- OPERATION_TYPE = OperationType.CONTROL_FLOW
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute FOR operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_for_loop(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_for_loop(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute for_loop logic."""
49
- # Implementation here
50
- return {'result': 'FOR executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/foreach_executor.py
4
-
5
- FOREACH Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class ForeachExecutor(AUniversalOperationExecutor):
20
- """
21
- FOREACH operation executor.
22
-
23
- Iterates over collections
24
-
25
- Capability: Universal
26
- Operation Type: CONTROL_FLOW
27
- """
28
-
29
- OPERATION_NAME = "FOREACH"
30
- OPERATION_TYPE = OperationType.CONTROL_FLOW
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute FOREACH operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_foreach(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_foreach(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute foreach logic."""
49
- # Implementation here
50
- return {'result': 'FOREACH executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/join_executor.py
4
-
5
- JOIN Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class JoinExecutor(AUniversalOperationExecutor):
20
- """
21
- JOIN operation executor.
22
-
23
- Joins data from multiple sources
24
-
25
- Capability: Universal
26
- Operation Type: JOINING
27
- """
28
-
29
- OPERATION_NAME = "JOIN"
30
- OPERATION_TYPE = OperationType.JOINING
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute JOIN operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_join(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_join(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute join logic."""
49
- # Implementation here
50
- return {'result': 'JOIN executed', 'params': params}
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- #exonware/xwnode/src/exonware/xwnode/queries/executors/advanced/let_executor.py
4
-
5
- LET Executor
6
-
7
- Company: eXonware.com
8
- Author: Eng. Muhammad AlShehri
9
- Email: connect@exonware.com
10
- Version: 0.0.1.22
11
- Generation Date: 09-Oct-2025
12
- """
13
-
14
- from typing import Any, Dict, List
15
- from ..base import AUniversalOperationExecutor
16
- from ..contracts import Action, ExecutionContext, ExecutionResult
17
- from ..defs import OperationType
18
-
19
- class LetExecutor(AUniversalOperationExecutor):
20
- """
21
- LET operation executor.
22
-
23
- Variable binding/assignment
24
-
25
- Capability: Universal
26
- Operation Type: CONTROL_FLOW
27
- """
28
-
29
- OPERATION_NAME = "LET"
30
- OPERATION_TYPE = OperationType.CONTROL_FLOW
31
- SUPPORTED_NODE_TYPES = [] # Universal
32
-
33
- def _do_execute(self, action: Action, context: ExecutionContext) -> ExecutionResult:
34
- """Execute LET operation."""
35
- params = action.params
36
- node = context.node
37
-
38
- result_data = self._execute_let(node, params, context)
39
-
40
- return ExecutionResult(
41
- success=True,
42
- data=result_data,
43
- operation=self.OPERATION_NAME,
44
- metadata={'operation': self.OPERATION_NAME}
45
- )
46
-
47
- def _execute_let(self, node: Any, params: Dict, context: ExecutionContext) -> Dict:
48
- """Execute let logic."""
49
- # Implementation here
50
- return {'result': 'LET executed', 'params': params}