exonware-xwnode 0.0.1.12__tar.gz
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.
- exonware_xwnode-0.0.1.12/.gitignore +280 -0
- exonware_xwnode-0.0.1.12/LICENSE +21 -0
- exonware_xwnode-0.0.1.12/PKG-INFO +169 -0
- exonware_xwnode-0.0.1.12/README.md +131 -0
- exonware_xwnode-0.0.1.12/docs/COMPETITOR_ANALYSIS.md +100 -0
- exonware_xwnode-0.0.1.12/docs/ENHANCED_STRATEGY_SYSTEM.md +311 -0
- exonware_xwnode-0.0.1.12/docs/MIGRATION_SUMMARY.md +165 -0
- exonware_xwnode-0.0.1.12/docs/PROJECT_PHASES.md +173 -0
- exonware_xwnode-0.0.1.12/docs/XSYSTEM_INTEGRATION.md +211 -0
- exonware_xwnode-0.0.1.12/docs/XWQUERY_SCRIPT.md +1593 -0
- exonware_xwnode-0.0.1.12/examples/demo_sql_results.py +288 -0
- exonware_xwnode-0.0.1.12/examples/enhanced_strategy_demo.py +253 -0
- exonware_xwnode-0.0.1.12/examples/enhanced_xnode_demo.py +301 -0
- exonware_xwnode-0.0.1.12/examples/simple_sql_test.py +468 -0
- exonware_xwnode-0.0.1.12/examples/sql_demo_results.py +307 -0
- exonware_xwnode-0.0.1.12/examples/test_sql_actions.py +470 -0
- exonware_xwnode-0.0.1.12/examples/test_xwquery_script_system.py +233 -0
- exonware_xwnode-0.0.1.12/examples/xwnode_sql_actions.sql +299 -0
- exonware_xwnode-0.0.1.12/examples/xwquery_conversion_examples.py +480 -0
- exonware_xwnode-0.0.1.12/examples/xwquery_script_demo.py +331 -0
- exonware_xwnode-0.0.1.12/pyproject.toml +119 -0
- exonware_xwnode-0.0.1.12/requirements.txt +83 -0
- exonware_xwnode-0.0.1.12/src/exonware/__init__.py +14 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/__init__.py +127 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/base.py +676 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/config.py +178 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/contracts.py +730 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/errors.py +503 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/facade.py +460 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/__init__.py +158 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/advisor.py +463 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/edges/__init__.py +32 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/edges/adj_list.py +227 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/edges/adj_matrix.py +391 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/edges/base.py +169 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/flyweight.py +328 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/__init__.py +13 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/_base_edge.py +403 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/_base_node.py +307 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_adj_list.py +353 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_adj_matrix.py +445 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_bidir_wrapper.py +455 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_block_adj_matrix.py +539 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_coo.py +533 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_csc.py +447 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_csr.py +492 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_dynamic_adj_list.py +503 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_flow_network.py +555 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_hyperedge_set.py +516 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_neural_graph.py +650 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_octree.py +574 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_property_store.py +655 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_quadtree.py +519 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_rtree.py +820 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_temporal_edgeset.py +558 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_tree_graph_basic.py +271 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/impls/edge_weighted_graph.py +411 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/manager.py +775 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/metrics.py +538 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/migration.py +432 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/__init__.py +50 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/_base_node.py +307 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/adjacency_list.py +267 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/aho_corasick.py +345 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/array_list.py +209 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/base.py +247 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/deque.py +200 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/hash_map.py +135 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/heap.py +307 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/linked_list.py +232 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_aho_corasick.py +520 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_array_list.py +175 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_avl_tree.py +371 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_b_plus_tree.py +542 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_bitmap.py +420 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_bitset_dynamic.py +513 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_bloom_filter.py +347 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_btree.py +357 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_count_min_sketch.py +470 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_cow_tree.py +473 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_cuckoo_hash.py +392 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_fenwick_tree.py +301 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_hash_map.py +269 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_heap.py +191 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_hyperloglog.py +407 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_linked_list.py +409 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_lsm_tree.py +400 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_ordered_map.py +390 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_ordered_map_balanced.py +565 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_patricia.py +512 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_persistent_tree.py +378 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_radix_trie.py +452 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_red_black_tree.py +497 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_roaring_bitmap.py +570 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_segment_tree.py +289 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_set_hash.py +354 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_set_tree.py +480 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_skip_list.py +316 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_splay_tree.py +393 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_suffix_array.py +487 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_treap.py +387 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_tree_graph_hybrid.py +1434 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_trie.py +252 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_union_find.py +187 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/node_xdata_optimized.py +369 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/priority_queue.py +209 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/queue.py +161 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/sparse_matrix.py +206 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/stack.py +152 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/trie.py +274 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/nodes/union_find.py +283 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/pattern_detector.py +603 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/performance_monitor.py +487 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/__init__.py +24 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/base.py +236 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/cql.py +201 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/cypher.py +181 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/datalog.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/elastic_dsl.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/eql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/flux.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/gql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/graphql.py +240 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/gremlin.py +181 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/hiveql.py +214 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/hql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/jmespath.py +219 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/jq.py +66 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/json_query.py +66 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/jsoniq.py +248 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/kql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/linq.py +238 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/logql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/mql.py +68 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/n1ql.py +210 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/partiql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/pig.py +215 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/promql.py +70 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/sparql.py +220 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/sql.py +275 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/xml_query.py +66 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/xpath.py +223 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/xquery.py +258 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/xwnode_executor.py +332 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/queries/xwquery_strategy.py +424 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/registry.py +604 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/simple.py +273 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/strategies/utils.py +532 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/types.py +912 -0
- exonware_xwnode-0.0.1.12/src/exonware/xwnode/version.py +78 -0
- exonware_xwnode-0.0.1.12/src/xwnode.py +19 -0
- exonware_xwnode-0.0.1.12/tests/README.md +183 -0
- exonware_xwnode-0.0.1.12/tests/XWQUERY_SCRIPT_TEST_SUMMARY.md +202 -0
- exonware_xwnode-0.0.1.12/tests/__init__.py +9 -0
- exonware_xwnode-0.0.1.12/tests/conftest.py +357 -0
- exonware_xwnode-0.0.1.12/tests/core/__init__.py +9 -0
- exonware_xwnode-0.0.1.12/tests/core/conftest.py +29 -0
- exonware_xwnode-0.0.1.12/tests/core/debug_test.py +17 -0
- exonware_xwnode-0.0.1.12/tests/core/runner.py +55 -0
- exonware_xwnode-0.0.1.12/tests/core/simple_test.py +230 -0
- exonware_xwnode-0.0.1.12/tests/core/test_a_plus_presets.py +277 -0
- exonware_xwnode-0.0.1.12/tests/core/test_basic.py +268 -0
- exonware_xwnode-0.0.1.12/tests/core/test_core.py +358 -0
- exonware_xwnode-0.0.1.12/tests/core/test_core_final.py +358 -0
- exonware_xwnode-0.0.1.12/tests/core/test_core_focused.py +217 -0
- exonware_xwnode-0.0.1.12/tests/core/test_core_old.py +298 -0
- exonware_xwnode-0.0.1.12/tests/core/test_core_query_convert.py +398 -0
- exonware_xwnode-0.0.1.12/tests/core/test_core_simple.py +241 -0
- exonware_xwnode-0.0.1.12/tests/core/test_errors.py +411 -0
- exonware_xwnode-0.0.1.12/tests/core/test_facade.py +288 -0
- exonware_xwnode-0.0.1.12/tests/core/test_navigation.py +405 -0
- exonware_xwnode-0.0.1.12/tests/core/test_xnode_core.py +463 -0
- exonware_xwnode-0.0.1.12/tests/core/test_xwnode_query_action_executor.py +482 -0
- exonware_xwnode-0.0.1.12/tests/core/test_xwquery_script_strategy.py +607 -0
- exonware_xwnode-0.0.1.12/tests/delete/__init__ copy.py +12 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/README.md +184 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/__init__.py +19 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/conftest.py +168 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/runner.py +132 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/src/xlib/xdata/__init__.py +0 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/test_performance_modes.py +554 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/test_runner.py +145 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/core_tests/README.md +56 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/core_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/core_tests/conftest.py +37 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/core_tests/runner.py +98 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/core_tests/test_xnode_core.py +403 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/error_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/error_tests/conftest.py +28 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/error_tests/runner.py +98 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/error_tests/test_errors.py +425 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/integration_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/integration_tests/conftest.py +102 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/integration_tests/runner.py +98 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/integration_tests/test_integration.py +365 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/model_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/model_tests/conftest.py +11 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/model_tests/runner.py +98 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/model_tests/test_model.py +236 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/navigation_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/navigation_tests/conftest.py +96 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/navigation_tests/runner.py +98 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/navigation_tests/test_navigation.py +407 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/PERFORMANCE_IMPROVEMENTS.md +186 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/PERFORMANCE_SUMMARY.md +168 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/README.md +71 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/conftest.py +67 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/perf_xnode.csv +32 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/perf_xnode.py +268 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/perf_xnode_detailed.csv +10 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/runner.py +303 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/src/xlib/xdata/__init__.py +0 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/perf_test/test_performance.py +218 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/test_adaptive_mode.py +262 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/test_auto3_phase1.py +568 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/test_graph_functionality.py +322 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/test_new_features.py +479 -0
- exonware_xwnode-0.0.1.12/tests/delete/delete_old_backup/original_location/unit/test_query_functionality.py +421 -0
- exonware_xwnode-0.0.1.12/tests/delete/run_all_tests_clean.py +191 -0
- exonware_xwnode-0.0.1.12/tests/delete/runner copy.py +132 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core/test_errors.py +411 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core/test_facade.py +256 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core/test_navigation.py +405 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core/test_xnode_core.py +463 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core_tests/README.md +56 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core_tests/conftest.py +42 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/core_tests/runner.py +105 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/error_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/error_tests/conftest.py +28 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/error_tests/runner.py +105 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/graph/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/graph/test_graph_ops.py +322 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/integration/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/integration/test_end_to_end.py +365 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/integration_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/integration_tests/conftest.py +102 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/integration_tests/runner.py +105 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/model_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/model_tests/conftest.py +11 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/model_tests/runner.py +105 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/model_tests/test_model.py +210 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/navigation_tests/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/navigation_tests/conftest.py +96 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/navigation_tests/runner.py +105 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/README.md +166 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/__init__.py +10 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/conftest.py +180 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/runner.py +490 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/test_adaptive_mode.py +270 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/test_config.py +18 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/test_dual_adaptive_mode.py +219 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/test_performance_benchmark.py +245 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_mode/test_performance_comparison.py +319 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/PERFORMANCE_IMPROVEMENTS.md +186 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/PERFORMANCE_SUMMARY.md +168 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/README.md +71 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/__init__.py +8 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/conftest.py +67 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/perf_xnode.csv +34 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/perf_xnode.py +269 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/perf_xnode_detailed.csv +10 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/runner.py +361 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/src/xlib/xdata/__init__.py +0 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/test_performance.py +218 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/perf_test/test_performance_modes_comparison.py +516 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/performance/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/performance/test_optimization.py +592 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/performance/test_performance_modes.py +546 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/performance/test_xsystem_integration.py +353 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/production_ready/test_production_features.py +396 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/query/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/query/test_native_query.py +421 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/structures/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/structures/test_linear.py +277 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_adaptive_mode.py +263 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_advanced_operations.py +254 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_aplus_improvements.py +347 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_auto3_phase1.py +568 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_auto3_phase2.py +613 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_auto3_phase3.py +700 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_auto3_phase4.py +879 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_new_features.py +479 -0
- exonware_xwnode-0.0.1.12/tests/delete/unit copy/test_tree_graph_hybrid.py +174 -0
- exonware_xwnode-0.0.1.12/tests/integration/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/integration/runner.py +27 -0
- exonware_xwnode-0.0.1.12/tests/integration/test_end_to_end.py +365 -0
- exonware_xwnode-0.0.1.12/tests/integration/test_installation_modes.py +81 -0
- exonware_xwnode-0.0.1.12/tests/integration/test_xwnode_xwsystem_lazy_serialization.py +141 -0
- exonware_xwnode-0.0.1.12/tests/integration/test_xwquery_script_end_to_end.py +526 -0
- exonware_xwnode-0.0.1.12/tests/run_all_tests.py +191 -0
- exonware_xwnode-0.0.1.12/tests/runner.py +47 -0
- exonware_xwnode-0.0.1.12/tests/test_all_strategies.py +257 -0
- exonware_xwnode-0.0.1.12/tests/test_basic_xwnode_creation.py +91 -0
- exonware_xwnode-0.0.1.12/tests/test_basic_xwnode_only.py +72 -0
- exonware_xwnode-0.0.1.12/tests/test_comprehensive_new_strategies.py +398 -0
- exonware_xwnode-0.0.1.12/tests/test_comprehensive_strategies.py +438 -0
- exonware_xwnode-0.0.1.12/tests/test_final_inheritance_verification.py +198 -0
- exonware_xwnode-0.0.1.12/tests/test_final_strategy_summary.py +198 -0
- exonware_xwnode-0.0.1.12/tests/test_functionality.py +214 -0
- exonware_xwnode-0.0.1.12/tests/test_import.py +52 -0
- exonware_xwnode-0.0.1.12/tests/test_inheritance_hierarchy.py +260 -0
- exonware_xwnode-0.0.1.12/tests/test_migration.py +62 -0
- exonware_xwnode-0.0.1.12/tests/test_minimal_xwnode.py +45 -0
- exonware_xwnode-0.0.1.12/tests/test_minimal_xwnode_simple.py +45 -0
- exonware_xwnode-0.0.1.12/tests/test_query_strategies.py +446 -0
- exonware_xwnode-0.0.1.12/tests/test_real_strategies.py +192 -0
- exonware_xwnode-0.0.1.12/tests/test_runner.py +145 -0
- exonware_xwnode-0.0.1.12/tests/test_simple_edges.py +170 -0
- exonware_xwnode-0.0.1.12/tests/test_simple_import.py +116 -0
- exonware_xwnode-0.0.1.12/tests/test_simple_inheritance.py +161 -0
- exonware_xwnode-0.0.1.12/tests/test_simple_new_strategies.py +192 -0
- exonware_xwnode-0.0.1.12/tests/test_simple_proof.py +49 -0
- exonware_xwnode-0.0.1.12/tests/test_standalone_xwnode.py +81 -0
- exonware_xwnode-0.0.1.12/tests/test_strategy_bases.py +493 -0
- exonware_xwnode-0.0.1.12/tests/test_strategy_bases_simple.py +493 -0
- exonware_xwnode-0.0.1.12/tests/test_strategy_verification.py +298 -0
- exonware_xwnode-0.0.1.12/tests/test_xwnode_base_only.py +73 -0
- exonware_xwnode-0.0.1.12/tests/test_xwnode_edges_comprehensive.py +229 -0
- exonware_xwnode-0.0.1.12/tests/test_xwnode_with_edges.py +130 -0
- exonware_xwnode-0.0.1.12/tests/test_xwquery_script_runner.py +363 -0
- exonware_xwnode-0.0.1.12/tests/unit/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/unit/runner.py +27 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_graph_ops.py +322 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_linear.py +277 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_native_query.py +421 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_optimization.py +592 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_performance_modes.py +546 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_xsystem_integration.py +353 -0
- exonware_xwnode-0.0.1.12/tests/unit/test_xwquery_script_integration.py +553 -0
- exonware_xwnode-0.0.1.12/tests/utilities/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/utilities/benchmarks/__init__.py +1 -0
- exonware_xwnode-0.0.1.12/tests/utilities/benchmarks/benchmarks.py +375 -0
- exonware_xwnode-0.0.1.12/tests/verify_installation.py +71 -0
@@ -0,0 +1,280 @@
|
|
1
|
+
# ========================================
|
2
|
+
# eXonware {LIBRARY_NAME} .gitignore
|
3
|
+
# ========================================
|
4
|
+
|
5
|
+
# CI/CD Tools (keep private)
|
6
|
+
.ci/
|
7
|
+
|
8
|
+
# ========================================
|
9
|
+
# Python
|
10
|
+
# ========================================
|
11
|
+
__pycache__/
|
12
|
+
*.py[cod]
|
13
|
+
*$py.class
|
14
|
+
*.so
|
15
|
+
.Python
|
16
|
+
build/
|
17
|
+
develop-eggs/
|
18
|
+
dist/
|
19
|
+
downloads/
|
20
|
+
eggs/
|
21
|
+
.eggs/
|
22
|
+
lib/
|
23
|
+
lib64/
|
24
|
+
parts/
|
25
|
+
sdist/
|
26
|
+
var/
|
27
|
+
wheels/
|
28
|
+
pip-wheel-metadata/
|
29
|
+
share/python-wheels/
|
30
|
+
*.egg-info/
|
31
|
+
.installed.cfg
|
32
|
+
*.egg
|
33
|
+
MANIFEST
|
34
|
+
|
35
|
+
# PyInstaller
|
36
|
+
*.manifest
|
37
|
+
*.spec
|
38
|
+
|
39
|
+
# Installer logs
|
40
|
+
pip-log.txt
|
41
|
+
pip-delete-this-directory.txt
|
42
|
+
|
43
|
+
# Unit test / coverage reports
|
44
|
+
htmlcov/
|
45
|
+
.tox/
|
46
|
+
.nox/
|
47
|
+
.coverage
|
48
|
+
.coverage.*
|
49
|
+
.cache
|
50
|
+
nosetests.xml
|
51
|
+
coverage.xml
|
52
|
+
*.cover
|
53
|
+
*.py,cover
|
54
|
+
.hypothesis/
|
55
|
+
.pytest_cache/
|
56
|
+
cover/
|
57
|
+
|
58
|
+
# Translations
|
59
|
+
*.mo
|
60
|
+
*.pot
|
61
|
+
|
62
|
+
# Django stuff
|
63
|
+
*.log
|
64
|
+
local_settings.py
|
65
|
+
db.sqlite3
|
66
|
+
db.sqlite3-journal
|
67
|
+
|
68
|
+
# Flask stuff
|
69
|
+
instance/
|
70
|
+
.webassets-cache
|
71
|
+
|
72
|
+
# Scrapy stuff
|
73
|
+
.scrapy
|
74
|
+
|
75
|
+
# Sphinx documentation
|
76
|
+
docs/_build/
|
77
|
+
|
78
|
+
# PyBuilder
|
79
|
+
.pybuilder/
|
80
|
+
target/
|
81
|
+
|
82
|
+
# Jupyter Notebook
|
83
|
+
.ipynb_checkpoints
|
84
|
+
|
85
|
+
# IPython
|
86
|
+
profile_default/
|
87
|
+
ipython_config.py
|
88
|
+
|
89
|
+
# pyenv
|
90
|
+
# For a library or package, you might want to ignore these files since the code is
|
91
|
+
# intended to run in multiple environments; otherwise, check them in:
|
92
|
+
# .python-version
|
93
|
+
|
94
|
+
# pipenv
|
95
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
96
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
97
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
98
|
+
# install all needed dependencies.
|
99
|
+
#Pipfile.lock
|
100
|
+
|
101
|
+
# poetry
|
102
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
103
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
104
|
+
# commonly ignored for libraries.
|
105
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
106
|
+
#poetry.lock
|
107
|
+
|
108
|
+
# pdm
|
109
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
110
|
+
#pdm.lock
|
111
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
112
|
+
# in version control.
|
113
|
+
# https://pdm.fming.dev/#use-with-ide
|
114
|
+
.pdm.toml
|
115
|
+
|
116
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
117
|
+
__pypackages__/
|
118
|
+
|
119
|
+
# Celery stuff
|
120
|
+
celerybeat-schedule
|
121
|
+
celerybeat.pid
|
122
|
+
|
123
|
+
# SageMath parsed files
|
124
|
+
*.sage.py
|
125
|
+
|
126
|
+
# Environments
|
127
|
+
.env
|
128
|
+
.venv
|
129
|
+
env/
|
130
|
+
venv/
|
131
|
+
ENV/
|
132
|
+
env.bak/
|
133
|
+
venv.bak/
|
134
|
+
|
135
|
+
# Spyder project settings
|
136
|
+
.spyderproject
|
137
|
+
.spyproject
|
138
|
+
|
139
|
+
# Rope project settings
|
140
|
+
.ropeproject
|
141
|
+
|
142
|
+
# mkdocs documentation
|
143
|
+
/site
|
144
|
+
|
145
|
+
# mypy
|
146
|
+
.mypy_cache/
|
147
|
+
.dmypy.json
|
148
|
+
dmypy.json
|
149
|
+
|
150
|
+
# Pyre type checker
|
151
|
+
.pyre/
|
152
|
+
|
153
|
+
# pytype static type analyzer
|
154
|
+
.pytype/
|
155
|
+
|
156
|
+
# Cython debug symbols
|
157
|
+
cython_debug/
|
158
|
+
|
159
|
+
# ========================================
|
160
|
+
# IDEs and Editors
|
161
|
+
# ========================================
|
162
|
+
|
163
|
+
# Visual Studio Code
|
164
|
+
.vscode/
|
165
|
+
!.vscode/settings.json
|
166
|
+
!.vscode/tasks.json
|
167
|
+
!.vscode/launch.json
|
168
|
+
!.vscode/extensions.json
|
169
|
+
!.vscode/*.code-snippets
|
170
|
+
|
171
|
+
# Local History for Visual Studio Code
|
172
|
+
.history/
|
173
|
+
|
174
|
+
# Built Visual Studio Code Extensions
|
175
|
+
*.vsix
|
176
|
+
|
177
|
+
# PyCharm
|
178
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
179
|
+
# be added to the global gitignore or merged into this file. For a more nuclear
|
180
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
181
|
+
.idea/
|
182
|
+
|
183
|
+
# Sublime Text
|
184
|
+
*.tmlanguage.cache
|
185
|
+
*.tmPreferences.cache
|
186
|
+
*.stTheme.cache
|
187
|
+
*.sublime-workspace
|
188
|
+
*.sublime-project
|
189
|
+
|
190
|
+
# Vim
|
191
|
+
*~
|
192
|
+
*.swp
|
193
|
+
*.swo
|
194
|
+
*tmp
|
195
|
+
|
196
|
+
# Emacs
|
197
|
+
*~
|
198
|
+
\#*\#
|
199
|
+
/.emacs.desktop
|
200
|
+
/.emacs.desktop.lock
|
201
|
+
*.elc
|
202
|
+
auto-save-list
|
203
|
+
tramp
|
204
|
+
.\#*
|
205
|
+
|
206
|
+
# ========================================
|
207
|
+
# Operating Systems
|
208
|
+
# ========================================
|
209
|
+
|
210
|
+
# Windows
|
211
|
+
Thumbs.db
|
212
|
+
Thumbs.db:encryptable
|
213
|
+
ehthumbs.db
|
214
|
+
ehthumbs_vista.db
|
215
|
+
*.stackdump
|
216
|
+
[Dd]esktop.ini
|
217
|
+
$RECYCLE.BIN/
|
218
|
+
*.cab
|
219
|
+
*.msi
|
220
|
+
*.msix
|
221
|
+
*.msm
|
222
|
+
*.msp
|
223
|
+
*.lnk
|
224
|
+
|
225
|
+
# macOS
|
226
|
+
.DS_Store
|
227
|
+
.AppleDouble
|
228
|
+
.LSOverride
|
229
|
+
Icon
|
230
|
+
._*
|
231
|
+
.DocumentRevisions-V100
|
232
|
+
.fseventsd
|
233
|
+
.Spotlight-V100
|
234
|
+
.TemporaryItems
|
235
|
+
.Trashes
|
236
|
+
.VolumeIcon.icns
|
237
|
+
.com.apple.timemachine.donotpresent
|
238
|
+
.AppleDB
|
239
|
+
.AppleDesktop
|
240
|
+
Network Trash Folder
|
241
|
+
Temporary Items
|
242
|
+
.apdisk
|
243
|
+
|
244
|
+
# Linux
|
245
|
+
*~
|
246
|
+
.fuse_hidden*
|
247
|
+
.directory
|
248
|
+
.Trash-*
|
249
|
+
.nfs*
|
250
|
+
|
251
|
+
# ========================================
|
252
|
+
# Development Tools
|
253
|
+
# ========================================
|
254
|
+
|
255
|
+
# Backup files
|
256
|
+
*.bak
|
257
|
+
*.backup
|
258
|
+
*.tmp
|
259
|
+
*.temp
|
260
|
+
|
261
|
+
# Log files
|
262
|
+
*.log
|
263
|
+
logs/
|
264
|
+
|
265
|
+
# Database files
|
266
|
+
*.sqlite
|
267
|
+
*.sqlite3
|
268
|
+
*.db
|
269
|
+
|
270
|
+
# Configuration files with secrets
|
271
|
+
config.ini
|
272
|
+
secrets.json
|
273
|
+
.secrets
|
274
|
+
credentials.json
|
275
|
+
|
276
|
+
# Local environment files
|
277
|
+
.env.local
|
278
|
+
.env.development.local
|
279
|
+
.env.test.local
|
280
|
+
.env.production.local
|
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 eXonware.com - Eng. Muhammad AlShehri
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1,169 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: exonware-xwnode
|
3
|
+
Version: 0.0.1.12
|
4
|
+
Summary: Node-based data processing and graph computation library
|
5
|
+
Project-URL: Homepage, https://exonware.com
|
6
|
+
Project-URL: Repository, https://github.com/exonware/xwnode
|
7
|
+
Project-URL: Documentation, https://github.com/exonware/xwnode#readme
|
8
|
+
Author-email: "Eng. Muhammad AlShehri" <connect@exonware.com>
|
9
|
+
License: MIT
|
10
|
+
License-File: LICENSE
|
11
|
+
Keywords: computation,data-processing,exonware,graph,node,workflow
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
13
|
+
Classifier: Intended Audience :: Developers
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
15
|
+
Classifier: Operating System :: OS Independent
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
17
|
+
Classifier: Programming Language :: Python :: 3.8
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
24
|
+
Requires-Python: >=3.8
|
25
|
+
Requires-Dist: exonware-xwsystem>=0.0.1
|
26
|
+
Provides-Extra: dev
|
27
|
+
Requires-Dist: black>=23.0.0; extra == 'dev'
|
28
|
+
Requires-Dist: isort>=5.12.0; extra == 'dev'
|
29
|
+
Requires-Dist: mypy>=1.0.0; extra == 'dev'
|
30
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
31
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
32
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
33
|
+
Provides-Extra: full
|
34
|
+
Requires-Dist: exonware-xwsystem[full]>=0.0.1; extra == 'full'
|
35
|
+
Provides-Extra: lazy
|
36
|
+
Requires-Dist: exonware-xwsystem[lazy]>=0.0.1; extra == 'lazy'
|
37
|
+
Description-Content-Type: text/markdown
|
38
|
+
|
39
|
+
# 🚀 **xwnode: Node-Based Data Processing Library**
|
40
|
+
|
41
|
+
**Company:** eXonware.com
|
42
|
+
**Author:** Eng. Muhammad AlShehri
|
43
|
+
**Email:** connect@exonware.com
|
44
|
+
**Version:** 0.0.1.12
|
45
|
+
|
46
|
+
## 🎯 **What is xwnode?**
|
47
|
+
|
48
|
+
xwnode is a powerful Python library for node-based data processing and graph computation. It provides a flexible framework for building data processing workflows using interconnected nodes, enabling complex data transformations and computations through an intuitive graph-based approach.
|
49
|
+
|
50
|
+
## ⚡ **Quick Start**
|
51
|
+
|
52
|
+
### **Installation**
|
53
|
+
|
54
|
+
xwnode offers three installation modes to match your needs:
|
55
|
+
|
56
|
+
#### **Default (Lite) - Minimal Installation**
|
57
|
+
```bash
|
58
|
+
pip install exonware-xwnode
|
59
|
+
# or
|
60
|
+
pip install xwnode
|
61
|
+
```
|
62
|
+
- ✅ Core node functionality
|
63
|
+
- ✅ Basic graph operations
|
64
|
+
- ✅ Essential data processing
|
65
|
+
- ✅ Zero external dependencies (beyond xwsystem)
|
66
|
+
|
67
|
+
#### **Lazy - Auto-Install on Demand**
|
68
|
+
```bash
|
69
|
+
pip install exonware-xwnode[lazy]
|
70
|
+
# or
|
71
|
+
pip install xwnode[lazy]
|
72
|
+
```
|
73
|
+
- ✅ Everything from default
|
74
|
+
- ✅ Automatic dependency installation
|
75
|
+
- ✅ Enterprise serialization on-demand
|
76
|
+
- ✅ Performance monitoring when needed
|
77
|
+
|
78
|
+
#### **Full - Complete Feature Set**
|
79
|
+
```bash
|
80
|
+
pip install exonware-xwnode[full]
|
81
|
+
# or
|
82
|
+
pip install xwnode[full]
|
83
|
+
```
|
84
|
+
- ✅ Everything from lazy
|
85
|
+
- ✅ All xwsystem serialization formats (50+)
|
86
|
+
- ✅ Advanced security features
|
87
|
+
- ✅ Performance monitoring
|
88
|
+
- ✅ Enterprise-grade capabilities
|
89
|
+
|
90
|
+
### **Basic Usage**
|
91
|
+
```python
|
92
|
+
from exonware.xwnode import XWNode, XWQuery, XWFactory
|
93
|
+
# Or use convenience import:
|
94
|
+
# import xwnode
|
95
|
+
|
96
|
+
# Your node-based processing code here
|
97
|
+
node = XWNode({'data': 'example'})
|
98
|
+
```
|
99
|
+
|
100
|
+
## 🎯 **Perfect For:**
|
101
|
+
|
102
|
+
- **🔄 Data Processing Pipelines** - Build complex data transformation workflows
|
103
|
+
- **📊 Graph Computation** - Process data through interconnected node networks
|
104
|
+
- **🔀 Workflow Management** - Create reusable processing components
|
105
|
+
- **🧠 Algorithm Development** - Implement graph-based algorithms and computations
|
106
|
+
- **🔗 System Integration** - Connect different data processing stages
|
107
|
+
|
108
|
+
## 🚀 **Key Features**
|
109
|
+
|
110
|
+
✅ **Node-based architecture** for modular data processing
|
111
|
+
✅ **Graph computation engine** for complex workflows
|
112
|
+
✅ **Flexible data flow** between processing nodes
|
113
|
+
✅ **Reusable components** for common operations
|
114
|
+
✅ **Performance optimized** for large-scale processing
|
115
|
+
✅ **Easy integration** with existing Python data tools
|
116
|
+
|
117
|
+
## 🚀 **Project Phases**
|
118
|
+
|
119
|
+
xWNode follows a structured 5-phase development approach designed to deliver enterprise-grade functionality while maintaining rapid iteration and continuous improvement.
|
120
|
+
|
121
|
+
### **Current Phase: 🧪 Version 0 - Experimental Stage**
|
122
|
+
- **Focus:** Fast applications & usage, refactoring to perfection of software patterns and design
|
123
|
+
- **Status:** 🟢 **ACTIVE** - Foundation complete with core node functionality, graph traversal algorithms, and comprehensive testing
|
124
|
+
|
125
|
+
### **Development Roadmap:**
|
126
|
+
- **Version 1 (Q1 2026):** Production Ready - Enterprise deployment and hardening
|
127
|
+
- **Version 2 (Q2 2026):** Mars Standard Draft Implementation - Cross-platform interoperability
|
128
|
+
- **Version 3 (Q3 2026):** RUST Core & Facades - High-performance multi-language support
|
129
|
+
- **Version 4 (Q4 2026):** Mars Standard Implementation - Full compliance and enterprise deployment
|
130
|
+
|
131
|
+
📖 **[View Complete Project Phases Documentation](docs/PROJECT_PHASES.md)**
|
132
|
+
|
133
|
+
## 📚 **Documentation**
|
134
|
+
|
135
|
+
- **[API Documentation](docs/)** - Complete reference and examples
|
136
|
+
- **[Examples](examples/)** - Practical usage examples
|
137
|
+
- **[Tests](tests/)** - Test suites and usage patterns
|
138
|
+
|
139
|
+
## 🔧 **Development**
|
140
|
+
|
141
|
+
```bash
|
142
|
+
# Install in development mode
|
143
|
+
pip install -e .
|
144
|
+
|
145
|
+
# Run tests
|
146
|
+
python tests/runner.py
|
147
|
+
|
148
|
+
# Run specific test types
|
149
|
+
python tests/runner.py --core
|
150
|
+
python tests/runner.py --unit
|
151
|
+
python tests/runner.py --integration
|
152
|
+
```
|
153
|
+
|
154
|
+
## 🤝 **Contributing**
|
155
|
+
|
156
|
+
1. Fork the repository
|
157
|
+
2. Create a feature branch
|
158
|
+
3. Make your changes
|
159
|
+
4. Add tests
|
160
|
+
5. Run the test suite
|
161
|
+
6. Submit a pull request
|
162
|
+
|
163
|
+
## 📄 **License**
|
164
|
+
|
165
|
+
MIT License - see LICENSE file for details.
|
166
|
+
|
167
|
+
---
|
168
|
+
|
169
|
+
*Built with ❤️ by eXonware.com - Making node-based data processing effortless*
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# 🚀 **xwnode: Node-Based Data Processing Library**
|
2
|
+
|
3
|
+
**Company:** eXonware.com
|
4
|
+
**Author:** Eng. Muhammad AlShehri
|
5
|
+
**Email:** connect@exonware.com
|
6
|
+
**Version:** 0.0.1.12
|
7
|
+
|
8
|
+
## 🎯 **What is xwnode?**
|
9
|
+
|
10
|
+
xwnode is a powerful Python library for node-based data processing and graph computation. It provides a flexible framework for building data processing workflows using interconnected nodes, enabling complex data transformations and computations through an intuitive graph-based approach.
|
11
|
+
|
12
|
+
## ⚡ **Quick Start**
|
13
|
+
|
14
|
+
### **Installation**
|
15
|
+
|
16
|
+
xwnode offers three installation modes to match your needs:
|
17
|
+
|
18
|
+
#### **Default (Lite) - Minimal Installation**
|
19
|
+
```bash
|
20
|
+
pip install exonware-xwnode
|
21
|
+
# or
|
22
|
+
pip install xwnode
|
23
|
+
```
|
24
|
+
- ✅ Core node functionality
|
25
|
+
- ✅ Basic graph operations
|
26
|
+
- ✅ Essential data processing
|
27
|
+
- ✅ Zero external dependencies (beyond xwsystem)
|
28
|
+
|
29
|
+
#### **Lazy - Auto-Install on Demand**
|
30
|
+
```bash
|
31
|
+
pip install exonware-xwnode[lazy]
|
32
|
+
# or
|
33
|
+
pip install xwnode[lazy]
|
34
|
+
```
|
35
|
+
- ✅ Everything from default
|
36
|
+
- ✅ Automatic dependency installation
|
37
|
+
- ✅ Enterprise serialization on-demand
|
38
|
+
- ✅ Performance monitoring when needed
|
39
|
+
|
40
|
+
#### **Full - Complete Feature Set**
|
41
|
+
```bash
|
42
|
+
pip install exonware-xwnode[full]
|
43
|
+
# or
|
44
|
+
pip install xwnode[full]
|
45
|
+
```
|
46
|
+
- ✅ Everything from lazy
|
47
|
+
- ✅ All xwsystem serialization formats (50+)
|
48
|
+
- ✅ Advanced security features
|
49
|
+
- ✅ Performance monitoring
|
50
|
+
- ✅ Enterprise-grade capabilities
|
51
|
+
|
52
|
+
### **Basic Usage**
|
53
|
+
```python
|
54
|
+
from exonware.xwnode import XWNode, XWQuery, XWFactory
|
55
|
+
# Or use convenience import:
|
56
|
+
# import xwnode
|
57
|
+
|
58
|
+
# Your node-based processing code here
|
59
|
+
node = XWNode({'data': 'example'})
|
60
|
+
```
|
61
|
+
|
62
|
+
## 🎯 **Perfect For:**
|
63
|
+
|
64
|
+
- **🔄 Data Processing Pipelines** - Build complex data transformation workflows
|
65
|
+
- **📊 Graph Computation** - Process data through interconnected node networks
|
66
|
+
- **🔀 Workflow Management** - Create reusable processing components
|
67
|
+
- **🧠 Algorithm Development** - Implement graph-based algorithms and computations
|
68
|
+
- **🔗 System Integration** - Connect different data processing stages
|
69
|
+
|
70
|
+
## 🚀 **Key Features**
|
71
|
+
|
72
|
+
✅ **Node-based architecture** for modular data processing
|
73
|
+
✅ **Graph computation engine** for complex workflows
|
74
|
+
✅ **Flexible data flow** between processing nodes
|
75
|
+
✅ **Reusable components** for common operations
|
76
|
+
✅ **Performance optimized** for large-scale processing
|
77
|
+
✅ **Easy integration** with existing Python data tools
|
78
|
+
|
79
|
+
## 🚀 **Project Phases**
|
80
|
+
|
81
|
+
xWNode follows a structured 5-phase development approach designed to deliver enterprise-grade functionality while maintaining rapid iteration and continuous improvement.
|
82
|
+
|
83
|
+
### **Current Phase: 🧪 Version 0 - Experimental Stage**
|
84
|
+
- **Focus:** Fast applications & usage, refactoring to perfection of software patterns and design
|
85
|
+
- **Status:** 🟢 **ACTIVE** - Foundation complete with core node functionality, graph traversal algorithms, and comprehensive testing
|
86
|
+
|
87
|
+
### **Development Roadmap:**
|
88
|
+
- **Version 1 (Q1 2026):** Production Ready - Enterprise deployment and hardening
|
89
|
+
- **Version 2 (Q2 2026):** Mars Standard Draft Implementation - Cross-platform interoperability
|
90
|
+
- **Version 3 (Q3 2026):** RUST Core & Facades - High-performance multi-language support
|
91
|
+
- **Version 4 (Q4 2026):** Mars Standard Implementation - Full compliance and enterprise deployment
|
92
|
+
|
93
|
+
📖 **[View Complete Project Phases Documentation](docs/PROJECT_PHASES.md)**
|
94
|
+
|
95
|
+
## 📚 **Documentation**
|
96
|
+
|
97
|
+
- **[API Documentation](docs/)** - Complete reference and examples
|
98
|
+
- **[Examples](examples/)** - Practical usage examples
|
99
|
+
- **[Tests](tests/)** - Test suites and usage patterns
|
100
|
+
|
101
|
+
## 🔧 **Development**
|
102
|
+
|
103
|
+
```bash
|
104
|
+
# Install in development mode
|
105
|
+
pip install -e .
|
106
|
+
|
107
|
+
# Run tests
|
108
|
+
python tests/runner.py
|
109
|
+
|
110
|
+
# Run specific test types
|
111
|
+
python tests/runner.py --core
|
112
|
+
python tests/runner.py --unit
|
113
|
+
python tests/runner.py --integration
|
114
|
+
```
|
115
|
+
|
116
|
+
## 🤝 **Contributing**
|
117
|
+
|
118
|
+
1. Fork the repository
|
119
|
+
2. Create a feature branch
|
120
|
+
3. Make your changes
|
121
|
+
4. Add tests
|
122
|
+
5. Run the test suite
|
123
|
+
6. Submit a pull request
|
124
|
+
|
125
|
+
## 📄 **License**
|
126
|
+
|
127
|
+
MIT License - see LICENSE file for details.
|
128
|
+
|
129
|
+
---
|
130
|
+
|
131
|
+
*Built with ❤️ by eXonware.com - Making node-based data processing effortless*
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# xWNode: Competitive Landscape Analysis
|
2
|
+
|
3
|
+
## 1. Introduction
|
4
|
+
|
5
|
+
This document provides a comprehensive analysis of the competitive landscape for the `xwnode` library. The purpose is to identify key competitors, understand `xwnode`'s unique market position, and outline its strategic advantages and challenges.
|
6
|
+
|
7
|
+
`xwnode` is positioned as a foundational Python library for node-based data processing and graph computation. It provides a flexible, self-contained framework for building complex data transformation pipelines and managing workflows through an interconnected graph of nodes. Its core value is in providing a structured, modular, and intuitive paradigm for representing and executing complex data operations.
|
8
|
+
|
9
|
+
## 2. Market Positioning
|
10
|
+
|
11
|
+
`xwnode` fits into the broad category of workflow management and data processing pipeline tools. Unlike monolithic data engineering platforms, `xwnode` appears to be a library-first tool, designed to be integrated into larger Python applications.
|
12
|
+
|
13
|
+
Its primary characteristics are:
|
14
|
+
- **Graph-Based Model:** All operations are modeled as a Directed Acyclic Graph (DAG), where nodes represent computational tasks and edges represent data dependencies.
|
15
|
+
- **Library-First:** It's a component to be used within code, not a standalone orchestrator with its own UI or separate scheduler.
|
16
|
+
- **Self-Contained:** With no external dependencies, it provides a core logic engine for graph computation without imposing a large ecosystem of tools on the user.
|
17
|
+
|
18
|
+
## 3. Competitive Landscape Overview
|
19
|
+
|
20
|
+
The competitive landscape for `xnode` is diverse, ranging from general-purpose graph libraries to full-featured workflow orchestrators. The key distinction for positioning `xnode` is its focus as a *library* for building data workflows, rather than a standalone *platform* for running them.
|
21
|
+
|
22
|
+
## 4. Competitor Categories
|
23
|
+
|
24
|
+
### 4.1. Category 1: Workflow Orchestration Platforms
|
25
|
+
|
26
|
+
These are powerful, feature-rich platforms designed for scheduling, monitoring, and executing complex data pipelines. They are typically much heavier than `xnode` and represent a higher level of abstraction.
|
27
|
+
|
28
|
+
- **Apache Airflow:**
|
29
|
+
- **Description:** The dominant open-source platform for programmatically authoring, scheduling, and monitoring workflows. Workflows are defined as Python scripts.
|
30
|
+
- **Competitive Stance:** Airflow is a full-fledged orchestrator, not a library. It is a major competitor for the *use case* of running production data pipelines, but it is not a direct competitor to `xnode` as a *library*. A developer might even use `xnode` *within* an Airflow task to define a complex computation. `xnode` is for defining the *what* (the graph logic), while Airflow is for the *when* and *how* (scheduling and execution).
|
31
|
+
|
32
|
+
- **Prefect:**
|
33
|
+
- **Description:** A modern workflow orchestration tool that focuses on a "Python-first" approach, allowing users to build and monitor dataflows with a simple decorative API.
|
34
|
+
- **Competitive Stance:** Prefect is closer in spirit to `xnode` than Airflow, with a strong emphasis on writing natural Python code. However, like Airflow, it is a complete platform with a UI, a scheduler, and a focus on production monitoring. It competes for the same problem space but at a different scale.
|
35
|
+
|
36
|
+
- **Dagster:**
|
37
|
+
- **Description:** A data orchestrator for machine learning, analytics, and ETL. It emphasizes a data-aware, declarative approach to building pipelines.
|
38
|
+
- **Competitive Stance:** Dagster is also a full platform, but its emphasis on the data assets that flow between computations is philosophically similar to the node-based data flow in `xnode`. Again, it's a platform-level competitor, not a library-level one.
|
39
|
+
|
40
|
+
### 4.2. Category 2: General-Purpose Graph Libraries
|
41
|
+
|
42
|
+
These libraries provide the tools to create, manipulate, and study the structure and dynamics of complex networks.
|
43
|
+
|
44
|
+
- **NetworkX:**
|
45
|
+
- **Description:** The most popular Python library for the creation, manipulation, and study of complex networks of nodes and edges.
|
46
|
+
- **Competitive Stance:** NetworkX is a direct competitor in the domain of graph *representation* and *analysis*. If a developer's primary goal is to model a graph and run classical graph algorithms (e.g., shortest path, centrality), NetworkX is the go-to tool. `xnode` appears to be more focused on using the graph structure for *data processing pipelines* (a DAG of operations), rather than general-purpose graph analysis.
|
47
|
+
|
48
|
+
- **graph-tool / igraph:**
|
49
|
+
- **Description:** High-performance graph libraries (often with C/C++ cores) for advanced network analysis.
|
50
|
+
- **Competitive Stance:** These are specialized, high-performance tools for scientific computing and network science. They compete with NetworkX more than with `xnode` and are focused on analysis, not data pipeline execution.
|
51
|
+
|
52
|
+
### 4.3. Category 3: Dataflow and Stream Processing Libraries
|
53
|
+
|
54
|
+
These libraries are designed to process streams of data, often in a distributed and parallel fashion.
|
55
|
+
|
56
|
+
- **Apache Beam:**
|
57
|
+
- **Description:** An advanced, unified model for defining both batch and streaming data-parallel processing pipelines. It's a high-level API that can run on multiple execution engines (Spark, Flink, etc.).
|
58
|
+
- **Competitive Stance:** Beam is a powerful, high-level abstraction for large-scale data processing. It is far more complex than `xnode` and is designed for distributed systems. `xnode` could be seen as a lightweight, in-process alternative for use cases that do not require the scale or complexity of Beam.
|
59
|
+
|
60
|
+
## 5. Strategic Analysis
|
61
|
+
|
62
|
+
### Strengths
|
63
|
+
|
64
|
+
- **Simplicity and Focus:** As a dependency-free library, `xnode` can be easily integrated into any Python project without pulling in a heavy ecosystem. Its focus on a single task (defining computational graphs) is a strength.
|
65
|
+
- **Flexibility:** Being a library, it gives developers complete control over the execution environment. It can be embedded in a web server, a CLI tool, or even a task within a larger orchestrator like Airflow.
|
66
|
+
- **Intuitive Model:** The node-based graph is a very natural and visual way to represent complex data dependencies and transformations, making workflows easier to design and debug.
|
67
|
+
|
68
|
+
### Weaknesses & Challenges
|
69
|
+
|
70
|
+
- **Lack of Production Features:** Compared to platforms like Airflow or Prefect, `xnode` (by design) lacks a scheduler, a UI, monitoring, alerting, and other features critical for production orchestration. This is a trade-off for its lightweight nature.
|
71
|
+
- **Competition from Established Tools:** The space for workflow management is crowded. `xnode` must clearly articulate its niche as a lightweight, embeddable library to differentiate itself from the feature-rich platforms.
|
72
|
+
- **General-Purpose vs. Specialized:** It faces competition from both sides: powerful orchestration platforms for production pipelines and specialized graph libraries like NetworkX for pure graph analysis.
|
73
|
+
|
74
|
+
## 6. Conclusion
|
75
|
+
|
76
|
+
`xnode`'s primary competitive advantage is its position as a **lightweight, dependency-free, and embeddable graph computation library.** It is not trying to be a full-fledged orchestrator like Airflow or a scientific analysis tool like NetworkX.
|
77
|
+
|
78
|
+
Its ideal niche is for developers who need to:
|
79
|
+
- Define complex, multi-step data transformations within an existing Python application.
|
80
|
+
- Prototype and build data-intensive algorithms using a graph-based mental model.
|
81
|
+
- Create modular and reusable computational components without the overhead of a full orchestration platform.
|
82
|
+
|
83
|
+
Its success will depend on clearly marketing this niche and providing a powerful and ergonomic API for building and executing these computational graphs.
|
84
|
+
|
85
|
+
## 7. Cross-Language Ecosystem Comparison
|
86
|
+
|
87
|
+
### 7.1. Go (Golang)
|
88
|
+
|
89
|
+
- **Paradigm:** The Go ecosystem does not have a single, dominant graph-workflow library. Workflows are often implemented using channels and goroutines to pass data between concurrent processing stages. For more structured needs, developers might use a library like **GoFlow**.
|
90
|
+
- **Competitive Stance:** `xnode` offers a more structured, declarative approach than manually wiring up channels. It provides a higher-level abstraction for defining the flow of data.
|
91
|
+
|
92
|
+
### 7.2. Rust
|
93
|
+
|
94
|
+
- **Paradigm:** The Rust ecosystem has several libraries for dataflow programming and graph-based computation. **`petgraph`** is a popular general-purpose graph library (similar to NetworkX). For dataflow, libraries like **`hydroflow`** are emerging for building complex, high-performance data pipelines.
|
95
|
+
- **Competitive Stance:** Rust's focus on performance and safety makes its dataflow libraries very powerful for systems programming. `xnode` competes by offering the simplicity and flexibility of Python, making it better suited for rapid development and data science applications.
|
96
|
+
|
97
|
+
### 7.3. TypeScript / Node.js
|
98
|
+
|
99
|
+
- **Paradigm:** The Node.js ecosystem has several libraries for managing asynchronous control flow, which can be used to build pipelines (e.g., `async.js`). For more explicit graph-based work, libraries like **`graphlib`** (for representation) or **`Rete.js`** (for visual node-based editors) are used.
|
100
|
+
- **Competitive Stance:** `xnode` provides a more integrated and focused experience for data processing than combining general-purpose async and graph libraries in Node.js. It is philosophically similar to `Rete.js` but is focused on code-first definitions rather than visual programming.
|