exonware-xwnode 0.0.1.12__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.
- exonware/__init__.py +14 -0
- exonware/xwnode/__init__.py +127 -0
- exonware/xwnode/base.py +676 -0
- exonware/xwnode/config.py +178 -0
- exonware/xwnode/contracts.py +730 -0
- exonware/xwnode/errors.py +503 -0
- exonware/xwnode/facade.py +460 -0
- exonware/xwnode/strategies/__init__.py +158 -0
- exonware/xwnode/strategies/advisor.py +463 -0
- exonware/xwnode/strategies/edges/__init__.py +32 -0
- exonware/xwnode/strategies/edges/adj_list.py +227 -0
- exonware/xwnode/strategies/edges/adj_matrix.py +391 -0
- exonware/xwnode/strategies/edges/base.py +169 -0
- exonware/xwnode/strategies/flyweight.py +328 -0
- exonware/xwnode/strategies/impls/__init__.py +13 -0
- exonware/xwnode/strategies/impls/_base_edge.py +403 -0
- exonware/xwnode/strategies/impls/_base_node.py +307 -0
- exonware/xwnode/strategies/impls/edge_adj_list.py +353 -0
- exonware/xwnode/strategies/impls/edge_adj_matrix.py +445 -0
- exonware/xwnode/strategies/impls/edge_bidir_wrapper.py +455 -0
- exonware/xwnode/strategies/impls/edge_block_adj_matrix.py +539 -0
- exonware/xwnode/strategies/impls/edge_coo.py +533 -0
- exonware/xwnode/strategies/impls/edge_csc.py +447 -0
- exonware/xwnode/strategies/impls/edge_csr.py +492 -0
- exonware/xwnode/strategies/impls/edge_dynamic_adj_list.py +503 -0
- exonware/xwnode/strategies/impls/edge_flow_network.py +555 -0
- exonware/xwnode/strategies/impls/edge_hyperedge_set.py +516 -0
- exonware/xwnode/strategies/impls/edge_neural_graph.py +650 -0
- exonware/xwnode/strategies/impls/edge_octree.py +574 -0
- exonware/xwnode/strategies/impls/edge_property_store.py +655 -0
- exonware/xwnode/strategies/impls/edge_quadtree.py +519 -0
- exonware/xwnode/strategies/impls/edge_rtree.py +820 -0
- exonware/xwnode/strategies/impls/edge_temporal_edgeset.py +558 -0
- exonware/xwnode/strategies/impls/edge_tree_graph_basic.py +271 -0
- exonware/xwnode/strategies/impls/edge_weighted_graph.py +411 -0
- exonware/xwnode/strategies/manager.py +775 -0
- exonware/xwnode/strategies/metrics.py +538 -0
- exonware/xwnode/strategies/migration.py +432 -0
- exonware/xwnode/strategies/nodes/__init__.py +50 -0
- exonware/xwnode/strategies/nodes/_base_node.py +307 -0
- exonware/xwnode/strategies/nodes/adjacency_list.py +267 -0
- exonware/xwnode/strategies/nodes/aho_corasick.py +345 -0
- exonware/xwnode/strategies/nodes/array_list.py +209 -0
- exonware/xwnode/strategies/nodes/base.py +247 -0
- exonware/xwnode/strategies/nodes/deque.py +200 -0
- exonware/xwnode/strategies/nodes/hash_map.py +135 -0
- exonware/xwnode/strategies/nodes/heap.py +307 -0
- exonware/xwnode/strategies/nodes/linked_list.py +232 -0
- exonware/xwnode/strategies/nodes/node_aho_corasick.py +520 -0
- exonware/xwnode/strategies/nodes/node_array_list.py +175 -0
- exonware/xwnode/strategies/nodes/node_avl_tree.py +371 -0
- exonware/xwnode/strategies/nodes/node_b_plus_tree.py +542 -0
- exonware/xwnode/strategies/nodes/node_bitmap.py +420 -0
- exonware/xwnode/strategies/nodes/node_bitset_dynamic.py +513 -0
- exonware/xwnode/strategies/nodes/node_bloom_filter.py +347 -0
- exonware/xwnode/strategies/nodes/node_btree.py +357 -0
- exonware/xwnode/strategies/nodes/node_count_min_sketch.py +470 -0
- exonware/xwnode/strategies/nodes/node_cow_tree.py +473 -0
- exonware/xwnode/strategies/nodes/node_cuckoo_hash.py +392 -0
- exonware/xwnode/strategies/nodes/node_fenwick_tree.py +301 -0
- exonware/xwnode/strategies/nodes/node_hash_map.py +269 -0
- exonware/xwnode/strategies/nodes/node_heap.py +191 -0
- exonware/xwnode/strategies/nodes/node_hyperloglog.py +407 -0
- exonware/xwnode/strategies/nodes/node_linked_list.py +409 -0
- exonware/xwnode/strategies/nodes/node_lsm_tree.py +400 -0
- exonware/xwnode/strategies/nodes/node_ordered_map.py +390 -0
- exonware/xwnode/strategies/nodes/node_ordered_map_balanced.py +565 -0
- exonware/xwnode/strategies/nodes/node_patricia.py +512 -0
- exonware/xwnode/strategies/nodes/node_persistent_tree.py +378 -0
- exonware/xwnode/strategies/nodes/node_radix_trie.py +452 -0
- exonware/xwnode/strategies/nodes/node_red_black_tree.py +497 -0
- exonware/xwnode/strategies/nodes/node_roaring_bitmap.py +570 -0
- exonware/xwnode/strategies/nodes/node_segment_tree.py +289 -0
- exonware/xwnode/strategies/nodes/node_set_hash.py +354 -0
- exonware/xwnode/strategies/nodes/node_set_tree.py +480 -0
- exonware/xwnode/strategies/nodes/node_skip_list.py +316 -0
- exonware/xwnode/strategies/nodes/node_splay_tree.py +393 -0
- exonware/xwnode/strategies/nodes/node_suffix_array.py +487 -0
- exonware/xwnode/strategies/nodes/node_treap.py +387 -0
- exonware/xwnode/strategies/nodes/node_tree_graph_hybrid.py +1434 -0
- exonware/xwnode/strategies/nodes/node_trie.py +252 -0
- exonware/xwnode/strategies/nodes/node_union_find.py +187 -0
- exonware/xwnode/strategies/nodes/node_xdata_optimized.py +369 -0
- exonware/xwnode/strategies/nodes/priority_queue.py +209 -0
- exonware/xwnode/strategies/nodes/queue.py +161 -0
- exonware/xwnode/strategies/nodes/sparse_matrix.py +206 -0
- exonware/xwnode/strategies/nodes/stack.py +152 -0
- exonware/xwnode/strategies/nodes/trie.py +274 -0
- exonware/xwnode/strategies/nodes/union_find.py +283 -0
- exonware/xwnode/strategies/pattern_detector.py +603 -0
- exonware/xwnode/strategies/performance_monitor.py +487 -0
- exonware/xwnode/strategies/queries/__init__.py +24 -0
- exonware/xwnode/strategies/queries/base.py +236 -0
- exonware/xwnode/strategies/queries/cql.py +201 -0
- exonware/xwnode/strategies/queries/cypher.py +181 -0
- exonware/xwnode/strategies/queries/datalog.py +70 -0
- exonware/xwnode/strategies/queries/elastic_dsl.py +70 -0
- exonware/xwnode/strategies/queries/eql.py +70 -0
- exonware/xwnode/strategies/queries/flux.py +70 -0
- exonware/xwnode/strategies/queries/gql.py +70 -0
- exonware/xwnode/strategies/queries/graphql.py +240 -0
- exonware/xwnode/strategies/queries/gremlin.py +181 -0
- exonware/xwnode/strategies/queries/hiveql.py +214 -0
- exonware/xwnode/strategies/queries/hql.py +70 -0
- exonware/xwnode/strategies/queries/jmespath.py +219 -0
- exonware/xwnode/strategies/queries/jq.py +66 -0
- exonware/xwnode/strategies/queries/json_query.py +66 -0
- exonware/xwnode/strategies/queries/jsoniq.py +248 -0
- exonware/xwnode/strategies/queries/kql.py +70 -0
- exonware/xwnode/strategies/queries/linq.py +238 -0
- exonware/xwnode/strategies/queries/logql.py +70 -0
- exonware/xwnode/strategies/queries/mql.py +68 -0
- exonware/xwnode/strategies/queries/n1ql.py +210 -0
- exonware/xwnode/strategies/queries/partiql.py +70 -0
- exonware/xwnode/strategies/queries/pig.py +215 -0
- exonware/xwnode/strategies/queries/promql.py +70 -0
- exonware/xwnode/strategies/queries/sparql.py +220 -0
- exonware/xwnode/strategies/queries/sql.py +275 -0
- exonware/xwnode/strategies/queries/xml_query.py +66 -0
- exonware/xwnode/strategies/queries/xpath.py +223 -0
- exonware/xwnode/strategies/queries/xquery.py +258 -0
- exonware/xwnode/strategies/queries/xwnode_executor.py +332 -0
- exonware/xwnode/strategies/queries/xwquery_strategy.py +424 -0
- exonware/xwnode/strategies/registry.py +604 -0
- exonware/xwnode/strategies/simple.py +273 -0
- exonware/xwnode/strategies/utils.py +532 -0
- exonware/xwnode/types.py +912 -0
- exonware/xwnode/version.py +78 -0
- exonware_xwnode-0.0.1.12.dist-info/METADATA +169 -0
- exonware_xwnode-0.0.1.12.dist-info/RECORD +132 -0
- exonware_xwnode-0.0.1.12.dist-info/WHEEL +4 -0
- exonware_xwnode-0.0.1.12.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,78 @@
|
|
1
|
+
"""
|
2
|
+
Centralized version management for xwnode.
|
3
|
+
|
4
|
+
Company: eXonware.com
|
5
|
+
Author: Eng. Muhammad AlShehri
|
6
|
+
Email: connect@exonware.com
|
7
|
+
Generation Date: October 07, 2025
|
8
|
+
|
9
|
+
This module provides centralized version management for the entire xwnode project.
|
10
|
+
All version references should import from this module to ensure consistency.
|
11
|
+
"""
|
12
|
+
|
13
|
+
# =============================================================================
|
14
|
+
# VERSION CONFIGURATION
|
15
|
+
# =============================================================================
|
16
|
+
|
17
|
+
# Main version - update this to change version across entire project
|
18
|
+
__version__ = "0.0.1.12"
|
19
|
+
|
20
|
+
# Version components for programmatic access
|
21
|
+
VERSION_MAJOR = 0
|
22
|
+
VERSION_MINOR = 0
|
23
|
+
VERSION_PATCH = 1
|
24
|
+
VERSION_BUILD = 12# Set to None for releases, or build number for dev builds
|
25
|
+
|
26
|
+
# Version metadata
|
27
|
+
VERSION_SUFFIX = "" # e.g., "dev", "alpha", "beta", "rc1"
|
28
|
+
VERSION_STRING = __version__ + VERSION_SUFFIX
|
29
|
+
|
30
|
+
# =============================================================================
|
31
|
+
# VERSION UTILITIES
|
32
|
+
# =============================================================================
|
33
|
+
|
34
|
+
def get_version() -> str:
|
35
|
+
"""Get the current version string."""
|
36
|
+
return VERSION_STRING
|
37
|
+
|
38
|
+
def get_version_info() -> tuple:
|
39
|
+
"""Get version as a tuple (major, minor, patch, build)."""
|
40
|
+
return (VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_BUILD)
|
41
|
+
|
42
|
+
def get_version_dict() -> dict:
|
43
|
+
"""Get version information as a dictionary."""
|
44
|
+
return {
|
45
|
+
"version": VERSION_STRING,
|
46
|
+
"major": VERSION_MAJOR,
|
47
|
+
"minor": VERSION_MINOR,
|
48
|
+
"patch": VERSION_PATCH,
|
49
|
+
"build": VERSION_BUILD,
|
50
|
+
"suffix": VERSION_SUFFIX
|
51
|
+
}
|
52
|
+
|
53
|
+
def is_dev_version() -> bool:
|
54
|
+
"""Check if this is a development version."""
|
55
|
+
return VERSION_SUFFIX in ("dev", "alpha", "beta") or VERSION_BUILD is not None
|
56
|
+
|
57
|
+
def is_release_version() -> bool:
|
58
|
+
"""Check if this is a release version."""
|
59
|
+
return not is_dev_version()
|
60
|
+
|
61
|
+
# =============================================================================
|
62
|
+
# EXPORTS
|
63
|
+
# =============================================================================
|
64
|
+
|
65
|
+
__all__ = [
|
66
|
+
"__version__",
|
67
|
+
"VERSION_MAJOR",
|
68
|
+
"VERSION_MINOR",
|
69
|
+
"VERSION_PATCH",
|
70
|
+
"VERSION_BUILD",
|
71
|
+
"VERSION_SUFFIX",
|
72
|
+
"VERSION_STRING",
|
73
|
+
"get_version",
|
74
|
+
"get_version_info",
|
75
|
+
"get_version_dict",
|
76
|
+
"is_dev_version",
|
77
|
+
"is_release_version"
|
78
|
+
]
|
@@ -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,132 @@
|
|
1
|
+
exonware/__init__.py,sha256=Vi5DAJ4T6FJohu_fUfJaDnf3crA_7yDjWfCZVZMlTZk,324
|
2
|
+
exonware/xwnode/__init__.py,sha256=4pxs28AdzEN1hGLs7ljH4t0YdzwLSjRJukRY2f5JCTc,3814
|
3
|
+
exonware/xwnode/base.py,sha256=VUKA1SX_w-bY6GclC93S6OZOc5roctzzcfBmv1XLC68,23830
|
4
|
+
exonware/xwnode/config.py,sha256=Kt8oFMhLmb-3rZdxWle-_Z3PGJj04XhZUp7K9FUnxN0,5707
|
5
|
+
exonware/xwnode/contracts.py,sha256=UHVk-7RWt-hVPJlRKVU8MnC9yE6QDAxzXji3f3UN4RE,20693
|
6
|
+
exonware/xwnode/errors.py,sha256=JZCrGdK31LlrE5cY1_s5Jb6x7zsBF0WUiE2PCWfIdNk,18396
|
7
|
+
exonware/xwnode/facade.py,sha256=rccyUyT5Gj9DgTY8DSfq8Ae7GGGq5Z5OtepPU1ENy8I,16029
|
8
|
+
exonware/xwnode/types.py,sha256=uioV6DW9nnQ0p3ZIdhYNQ5XtbQB2_INIljUkeCZox9o,34471
|
9
|
+
exonware/xwnode/version.py,sha256=STJKugNKyqorci-VuYL4keM4h4L9B_K77pEjgk7rT_c,2379
|
10
|
+
exonware/xwnode/strategies/__init__.py,sha256=_Ywl_Mq1Ucz3TZteuWO3B4vy7Ird7iCWAAXXVadXcc8,7568
|
11
|
+
exonware/xwnode/strategies/advisor.py,sha256=NIDK8S-nV69-V0Hur7e4Z1Ao1Gnia_d6SRBc1gxoJ9U,18184
|
12
|
+
exonware/xwnode/strategies/flyweight.py,sha256=FZHLsHYFIPQQNwBrwsHYysMxevM5KW4zk3EdARa9rmE,11316
|
13
|
+
exonware/xwnode/strategies/manager.py,sha256=9hlCDblaxasdAwGXO-vdEyG0V7NvUPjTiA3SUxk-BFM,33902
|
14
|
+
exonware/xwnode/strategies/metrics.py,sha256=j3V1duSZ2_tHH7dEeL3NCVwEb96XNzjYaymkt8_LJmc,19447
|
15
|
+
exonware/xwnode/strategies/migration.py,sha256=w_YEpNiVtYBA50mGvfTVyLFz-GViyT5Adzmvlp8P4gk,20181
|
16
|
+
exonware/xwnode/strategies/pattern_detector.py,sha256=5ncMOVUw1QJHrD4yo5dNANfDed_jeLsU_mWpND4Wtxo,21661
|
17
|
+
exonware/xwnode/strategies/performance_monitor.py,sha256=AqLW9k13DZILxn8Fa4JMmf1k67GESBiodREsANJfs-c,17467
|
18
|
+
exonware/xwnode/strategies/registry.py,sha256=4GJua8Wnha7Yzq2jBm73GBa8XvQhzsfqUY5omTTxc7U,28733
|
19
|
+
exonware/xwnode/strategies/simple.py,sha256=3hylQDJ9CRSIKdu3sc3qYJa2bQlVo7AlMQ3a0THNLxs,9079
|
20
|
+
exonware/xwnode/strategies/utils.py,sha256=ma_C5Xpgpo0053jEWqzco4-KNyBOWanJhKvQ3Masq84,17554
|
21
|
+
exonware/xwnode/strategies/edges/__init__.py,sha256=se25WUDZfWx37jNS3OKubhlsLAd9XumnQTGJyU7MnkI,771
|
22
|
+
exonware/xwnode/strategies/edges/adj_list.py,sha256=RdvQayElMahOa239urnWqwQVkui8phj-0fsyI8FsUvM,8162
|
23
|
+
exonware/xwnode/strategies/edges/adj_matrix.py,sha256=pAsW5s264WvwUEYX7Ezgl-DW87kP8V6LZeDOuVXevqU,14744
|
24
|
+
exonware/xwnode/strategies/edges/base.py,sha256=AjEviyy3IJY3fMCgDMfxFvo5OFb72hddqAMMYmBQ-_w,6207
|
25
|
+
exonware/xwnode/strategies/impls/__init__.py,sha256=gQYeyN0Uz-AudFdUPCsFGYFGMu67wHS0XtuXbCHILQc,244
|
26
|
+
exonware/xwnode/strategies/impls/_base_edge.py,sha256=hmOEL3M0wz95h6FrcTBf9dzSiwemRuNyNH9bgk27AY8,13602
|
27
|
+
exonware/xwnode/strategies/impls/_base_node.py,sha256=TE7ND2qSQnruJ01h1JtLI3WIzoJiLPdJnan5HeFWvwA,10270
|
28
|
+
exonware/xwnode/strategies/impls/edge_adj_list.py,sha256=_QvMiSnX5Zt4pUqu6O06IceDTCKB8sOMBs5XYWte3Co,13986
|
29
|
+
exonware/xwnode/strategies/impls/edge_adj_matrix.py,sha256=Iyb2TCI7n9xCH-ZwQVZQLrJV_6MOIwKz1iECLA2rhVU,17551
|
30
|
+
exonware/xwnode/strategies/impls/edge_bidir_wrapper.py,sha256=wSv4XMVoBjjuAb9m22t5ZG3_XSynJYwmeUQe7fnLFQ0,18050
|
31
|
+
exonware/xwnode/strategies/impls/edge_block_adj_matrix.py,sha256=2TVJhSFyxqvbgPNNHnFhqsgD4ETzKS0IOS5lBEaDfok,21142
|
32
|
+
exonware/xwnode/strategies/impls/edge_coo.py,sha256=o9unqJeOuT5skhr4OSNCRTtGnvdsBSK6F8iFEQkGv_g,19970
|
33
|
+
exonware/xwnode/strategies/impls/edge_csc.py,sha256=wYtxoE7_-Ulaxhk9L8oq9VZbD4dZ1tCNESijY-wydU4,16781
|
34
|
+
exonware/xwnode/strategies/impls/edge_csr.py,sha256=My4-weNwJ9SS6cVr_aoEz2hZOJltRB23DakTEEHr90o,18634
|
35
|
+
exonware/xwnode/strategies/impls/edge_dynamic_adj_list.py,sha256=gl9CpS02LAqzNrZ7nhVWNE5iBTYLRw1SlSUrmZEXfoY,19668
|
36
|
+
exonware/xwnode/strategies/impls/edge_flow_network.py,sha256=Fgy36PBGuR-47SrNat7cc7SdDUSppScAY7bJ8m6uqJg,21473
|
37
|
+
exonware/xwnode/strategies/impls/edge_hyperedge_set.py,sha256=oYEtaen8pXX9fIKClTP9wxJ7aqTOJ_hS68WlHkw8Vf4,20764
|
38
|
+
exonware/xwnode/strategies/impls/edge_neural_graph.py,sha256=wFoYGdxh3wV2P0KmbKGkAmUyLmRtdXB_dYlGQVBYlmc,25117
|
39
|
+
exonware/xwnode/strategies/impls/edge_octree.py,sha256=NxNxaVQze97IZvkPGSkp7cuIZSj1XZ7VpEdfiLmH9YA,22969
|
40
|
+
exonware/xwnode/strategies/impls/edge_property_store.py,sha256=s5e70_soYYSZIqjBXU_zWY9FXI_bQjFmZzknu6qPQr0,25630
|
41
|
+
exonware/xwnode/strategies/impls/edge_quadtree.py,sha256=Br8v3F0Pi5G8T1UA_3IXQ6cvNQ1oJOOYAZ9GeQ2f_M8,20149
|
42
|
+
exonware/xwnode/strategies/impls/edge_rtree.py,sha256=0xGjjAzhno_PmCr-fc1JQCb1SVyLyE_J20CEYKDy118,31454
|
43
|
+
exonware/xwnode/strategies/impls/edge_temporal_edgeset.py,sha256=RjGu_u6C8sr4U7Oc4PhmxxvXMH7dycOpBVE4N1yO1qY,22127
|
44
|
+
exonware/xwnode/strategies/impls/edge_tree_graph_basic.py,sha256=GjQAT1kAcOw8eCqsIKbr7NJpXM2_FWCXk_XJN1fAlaE,9996
|
45
|
+
exonware/xwnode/strategies/impls/edge_weighted_graph.py,sha256=1w9qBMUgOf_s0bAXryXOZe_XrBOLpdofYCQNZguJfZs,16508
|
46
|
+
exonware/xwnode/strategies/nodes/__init__.py,sha256=YMVKzCrYUOWDL8taFMHtYjhKQqfe5B14jn1GfobSXXM,1197
|
47
|
+
exonware/xwnode/strategies/nodes/_base_node.py,sha256=TE7ND2qSQnruJ01h1JtLI3WIzoJiLPdJnan5HeFWvwA,10270
|
48
|
+
exonware/xwnode/strategies/nodes/adjacency_list.py,sha256=ftrdilIYIagAe0oiEekLISTiEpKfjrgWQoCZ6lF7QGc,8941
|
49
|
+
exonware/xwnode/strategies/nodes/aho_corasick.py,sha256=V4FFQ4BybB83UVEf9ftxyeWn6KOsNAj9emyHzj_qp8M,12408
|
50
|
+
exonware/xwnode/strategies/nodes/array_list.py,sha256=M7xCvjeqQvLHQSmgGVSudOLdpWNQ_Vph5CAsEHzesas,7076
|
51
|
+
exonware/xwnode/strategies/nodes/base.py,sha256=u_xQcNWRa5Dlibtu1PKEIqAOq5-6kLX5staSMEYUuoI,8936
|
52
|
+
exonware/xwnode/strategies/nodes/deque.py,sha256=ITyDbWYRJmyP_l0mVihAFP_Gd1vlVtXmopSyTobc4js,6382
|
53
|
+
exonware/xwnode/strategies/nodes/hash_map.py,sha256=sDZy4Rw9OWD9FNZEGHzf8vUUF3rsP3aMkyqbIhMlrHs,4489
|
54
|
+
exonware/xwnode/strategies/nodes/heap.py,sha256=IimQiSiIvrncwiQ37M_UmW_8XwDf-2bgV6wodiLi_4k,10334
|
55
|
+
exonware/xwnode/strategies/nodes/linked_list.py,sha256=UdbVpSrXtb0KI7aLLbaWy4m02BiS4rxgJxV_1uR33q4,7764
|
56
|
+
exonware/xwnode/strategies/nodes/node_aho_corasick.py,sha256=tBkIihgzwZFSsLZJwkuLKBm1OF0UMP8C7PV4v4OY3XQ,18567
|
57
|
+
exonware/xwnode/strategies/nodes/node_array_list.py,sha256=Ny39_KqDZrxmWd2axU_jYJRD36csiz2lW2DwW5XRTGU,6036
|
58
|
+
exonware/xwnode/strategies/nodes/node_avl_tree.py,sha256=yo6CI_fdE4bmLv4b8a37xYol-52tkkrBVNbPURswjv8,12830
|
59
|
+
exonware/xwnode/strategies/nodes/node_b_plus_tree.py,sha256=8f_Qt5OupULH3We0aNDEpbJOwzmlXISBGJLjxw5hkdM,18867
|
60
|
+
exonware/xwnode/strategies/nodes/node_bitmap.py,sha256=bh8SpeA2g8246hM3cchRcbYS1LFWlUUFjmOOGD6fx-Y,15060
|
61
|
+
exonware/xwnode/strategies/nodes/node_bitset_dynamic.py,sha256=gqWvwzQJoCMCkzBF9h3BjKAZrF4toFlLLqbFf_XrPyI,18843
|
62
|
+
exonware/xwnode/strategies/nodes/node_bloom_filter.py,sha256=wl8Gb-SZjtBvpVleiKLI0T99fyz7uXkPhTo-7ybyJFQ,13205
|
63
|
+
exonware/xwnode/strategies/nodes/node_btree.py,sha256=GrOhmp18VcEOhGZ1B5V41XSQIe5QleJjpmvNNwh7Fq0,12254
|
64
|
+
exonware/xwnode/strategies/nodes/node_count_min_sketch.py,sha256=i1Nw2c_UcgxokkhKRQhn7_xV63G9xZYenMHmKhu8sAY,17916
|
65
|
+
exonware/xwnode/strategies/nodes/node_cow_tree.py,sha256=Dd3mj_GPJQvxyjJDE8xtfHfRKuZP4LiujE7rjUbV_t0,17109
|
66
|
+
exonware/xwnode/strategies/nodes/node_cuckoo_hash.py,sha256=HkwLYMfzDxBZ-UhLviBmU1v2yo1R-0sCqGkl3_ugHDQ,14958
|
67
|
+
exonware/xwnode/strategies/nodes/node_fenwick_tree.py,sha256=GXZQQmvf1hxqvD_srijmfz8E9orsIw7sqUW6CRSWNwI,10714
|
68
|
+
exonware/xwnode/strategies/nodes/node_hash_map.py,sha256=zCgcWJrYix5CQglNHb3-Hen80Ci1GkErLAMD6hnK4Oo,8667
|
69
|
+
exonware/xwnode/strategies/nodes/node_heap.py,sha256=GXr9XtcyjmMRkozizPBzg4YH79iFqC3ALFjYlQ7x-VA,6906
|
70
|
+
exonware/xwnode/strategies/nodes/node_hyperloglog.py,sha256=XyUApNd6C07_C8czNQGUEqilo3WCfhiT1BgEZEoRdX4,14840
|
71
|
+
exonware/xwnode/strategies/nodes/node_linked_list.py,sha256=b9kBKSkR3DnTuVeID1okmu0fsin5vS7hnoCDfF6rORc,13436
|
72
|
+
exonware/xwnode/strategies/nodes/node_lsm_tree.py,sha256=u_0dF9OYZ8PC_tYKQdBSxOrFM2dZjEi_tLseYQE-GE4,14743
|
73
|
+
exonware/xwnode/strategies/nodes/node_ordered_map.py,sha256=A_HliRy-kGE1ffWdnzFZu0Z-kmirzq1b_72fYUmXIUI,14513
|
74
|
+
exonware/xwnode/strategies/nodes/node_ordered_map_balanced.py,sha256=IWLUtU_1mCK8oZkSww61FNKzOTrPemzti9fXjn_XtpU,20495
|
75
|
+
exonware/xwnode/strategies/nodes/node_patricia.py,sha256=N7kesjteKI9Su33emZxL_lmN9tGY2z2eP6wsPfKGGwY,18683
|
76
|
+
exonware/xwnode/strategies/nodes/node_persistent_tree.py,sha256=RRcx6UKXdLbPOuNkJoM12V_C2XDO8yw98cfbb6a8WBI,14338
|
77
|
+
exonware/xwnode/strategies/nodes/node_radix_trie.py,sha256=ygtXpv4dRsykNvHn4LaScqHgGGIArzTykUuhgMNL_z8,17129
|
78
|
+
exonware/xwnode/strategies/nodes/node_red_black_tree.py,sha256=rkEGR_LzPwfR7D2mKVv6LyscNmAkwdWMY6sI0pIGo7I,17693
|
79
|
+
exonware/xwnode/strategies/nodes/node_roaring_bitmap.py,sha256=vgHGS_eU1jWcRMBwti5wt14lYEvilcRGfLOVqTV50IQ,20432
|
80
|
+
exonware/xwnode/strategies/nodes/node_segment_tree.py,sha256=1kVO0zJbkibGWOrYMK1aKvbPB2VpyTM_tU8s41dESgY,10767
|
81
|
+
exonware/xwnode/strategies/nodes/node_set_hash.py,sha256=kX3m8PWUuI3obsnNSIHHpe7ttCcvG1crW8PVo0AP4nM,13302
|
82
|
+
exonware/xwnode/strategies/nodes/node_set_tree.py,sha256=KD33G-VvOSgqOx1exGNGnk15t7RC-LGYH9otcwHS5Ks,15851
|
83
|
+
exonware/xwnode/strategies/nodes/node_skip_list.py,sha256=EsVOCii9qILZuCDf41FOGAHkU4jesKPF7lNPdClbWVQ,11354
|
84
|
+
exonware/xwnode/strategies/nodes/node_splay_tree.py,sha256=lyaevu3mF5ItXU0jUcM8ANMlWi6YjF5AyJ1USJ-Dtag,13180
|
85
|
+
exonware/xwnode/strategies/nodes/node_suffix_array.py,sha256=_roNIfPAH_kRYk_0Iz-1EExk4z-7Hwe-KDg26Z_-Ako,16877
|
86
|
+
exonware/xwnode/strategies/nodes/node_treap.py,sha256=7JMSw6WIBXaLSGyPG278L_yDsIab_yA6uJUX12eEG5c,13790
|
87
|
+
exonware/xwnode/strategies/nodes/node_tree_graph_hybrid.py,sha256=iPO1RyzTTU6YYe5E1bhTB1L4Q1nEH449XSTujhr2sbs,53680
|
88
|
+
exonware/xwnode/strategies/nodes/node_trie.py,sha256=tzp4AmFhp6TMB94W78hlMsKxGyOrblq29UuFA-qOgDU,8571
|
89
|
+
exonware/xwnode/strategies/nodes/node_union_find.py,sha256=URFotyf9i4C2xYSC9-zOVTQ6lqLplwkgYuFYhFKUtfM,7163
|
90
|
+
exonware/xwnode/strategies/nodes/node_xdata_optimized.py,sha256=zM16B4X3FXpTeG4iKhnKG9aweuQB3vj_bNh_S406wBI,14418
|
91
|
+
exonware/xwnode/strategies/nodes/priority_queue.py,sha256=NWye9qfvyO7Gnq6U2DD2F4xNqqRtJ9zwUGUpC5rbtLA,7821
|
92
|
+
exonware/xwnode/strategies/nodes/queue.py,sha256=9Ja6cLsKSGRKhNUr2A4vOeHnGi5x66-Cqe_RxZKKU8g,5282
|
93
|
+
exonware/xwnode/strategies/nodes/sparse_matrix.py,sha256=4rIB4kxLViorGBDHEm3w5GcDIs8UPtQLBUVZgscu7yk,7141
|
94
|
+
exonware/xwnode/strategies/nodes/stack.py,sha256=2dm7vea9H6rczDaIiMTUy-lWYxfjZQ-bS11TiWAATpY,5049
|
95
|
+
exonware/xwnode/strategies/nodes/trie.py,sha256=y4eCbuHGaLWR3ZlJgxs28sctYV-nPJ322_00S2mX-0g,8989
|
96
|
+
exonware/xwnode/strategies/nodes/union_find.py,sha256=xY2qlgcd6MbwClhjP_ap0JRgNCe7KfXo39pXL_B3RJg,10279
|
97
|
+
exonware/xwnode/strategies/queries/__init__.py,sha256=owo_-AvdZK3VdrRU22jXmjga_tU78_SOZyk8UBXGPQs,617
|
98
|
+
exonware/xwnode/strategies/queries/base.py,sha256=TWeRSl3O5XVlUVKlf_ufALuYoUCgdPMOaNt6cCnBgB4,8357
|
99
|
+
exonware/xwnode/strategies/queries/cql.py,sha256=Yx3bRzSj3AxWi6CdI4MesLbELCDjTLbjq6uhrchbCHw,7524
|
100
|
+
exonware/xwnode/strategies/queries/cypher.py,sha256=mRrEKPSVGS0BdeZd6RKVns7Oaar2tHT6VBoJHyvDC8c,6560
|
101
|
+
exonware/xwnode/strategies/queries/datalog.py,sha256=j2H7vynFQIK-pEiIZrz-Iafwyd8A3WIglJsN2dzunOQ,2740
|
102
|
+
exonware/xwnode/strategies/queries/elastic_dsl.py,sha256=75Hs2GgqpafdgmbMg2ihJ40z_x27q8x8wF-aj7z6j6s,2771
|
103
|
+
exonware/xwnode/strategies/queries/eql.py,sha256=mRK_SQ38x_PSymdH-mUgci0cTvyfoi0HUyL2mC2DYfM,2685
|
104
|
+
exonware/xwnode/strategies/queries/flux.py,sha256=VKThk77wPII3Vx7KYfZG1JSda_1xSGpr4eyKUmxlBDU,2747
|
105
|
+
exonware/xwnode/strategies/queries/gql.py,sha256=HASkLV7LRhrMbuA8MMDM6tMWSVvmRQNjm3DljCsBQZ4,2409
|
106
|
+
exonware/xwnode/strategies/queries/graphql.py,sha256=MaWYdvm5zHXt6Op3fHlCrJHiJ2bZ2JFr8U1pHPIWXd4,7402
|
107
|
+
exonware/xwnode/strategies/queries/gremlin.py,sha256=kVJ4QhiNz0_wOsA_7yO6TjFR9vHCanCxsxW1Uu3rtzc,6850
|
108
|
+
exonware/xwnode/strategies/queries/hiveql.py,sha256=ruUYyKTeRF4saYQ_odBa9hejqrnxLlBbK-mpsTB1OKU,7813
|
109
|
+
exonware/xwnode/strategies/queries/hql.py,sha256=ycTZd__Zgyr8YauVKskN_dchQmO1BeuDn3Cc2Qtf0L0,2692
|
110
|
+
exonware/xwnode/strategies/queries/jmespath.py,sha256=15VaeT7K1496TyAtpk0juCPH8UtFtJ-PuRA6MWR2dQQ,7963
|
111
|
+
exonware/xwnode/strategies/queries/jq.py,sha256=D7gIMHTBbnQWkHHwDKRhVeycc0DLoobk-ZUX_baYdCk,2333
|
112
|
+
exonware/xwnode/strategies/queries/json_query.py,sha256=mGW6y8g6MWjl2ou0T-EIARH8hAT1TT1W24t-GkCAMwc,2306
|
113
|
+
exonware/xwnode/strategies/queries/jsoniq.py,sha256=p_sz6zxz1nOSf8L7p8-VI6o2PW0fl21ltTw0OHTHF54,8162
|
114
|
+
exonware/xwnode/strategies/queries/kql.py,sha256=dOw7HpU_GDjydmwKmg4nkdm0FFHlH8RjcggwhN-zbAc,2671
|
115
|
+
exonware/xwnode/strategies/queries/linq.py,sha256=1kcQ5w9tnjQm0dl7JyZNnwDGruZ1PWgkxPWRGjnN2m4,7994
|
116
|
+
exonware/xwnode/strategies/queries/logql.py,sha256=tlPH5XEQ5Fm_HVEP2BKuC5FLV7oUHkuQ_qaV0j2-bTw,2744
|
117
|
+
exonware/xwnode/strategies/queries/mql.py,sha256=c3oTkzHJ5BqwL1lxd8icTNVGtkYGXONKEsUH6a52USw,2554
|
118
|
+
exonware/xwnode/strategies/queries/n1ql.py,sha256=wPjWyi2_os2V4F59fZbHx-65ajsInX4OuYzKOm7QFU8,7852
|
119
|
+
exonware/xwnode/strategies/queries/partiql.py,sha256=UIeYH7DwmUo6lJA6Y9nktOZjzV-mLFrVxEtdQMPgSwM,2717
|
120
|
+
exonware/xwnode/strategies/queries/pig.py,sha256=0oAFo0oxRlS_M71m-hq2qBm0U2Bh3bK7aopNBu0etEk,8530
|
121
|
+
exonware/xwnode/strategies/queries/promql.py,sha256=SW2V_gATxk_y76OlVM8mDrBBkpg-A1nuxixA0MF-VFI,2714
|
122
|
+
exonware/xwnode/strategies/queries/sparql.py,sha256=0UgpPl9gfyg5mZPDFjeCRBo1RgganVsU14uI2Jj_tOU,7443
|
123
|
+
exonware/xwnode/strategies/queries/sql.py,sha256=aNUSE_dCcrOVbtB9sSRh2AnLdq2GVxZ6p10D_30G2_8,10212
|
124
|
+
exonware/xwnode/strategies/queries/xml_query.py,sha256=-0e-Slk6QZlG46zvAAF77YAfqhr4Bk6Bg8gb-X_3bpM,2329
|
125
|
+
exonware/xwnode/strategies/queries/xpath.py,sha256=Ofau8Kmq9iKk2Uc4PHY_XYdMlYEL_iRmonz_bBZphH4,9120
|
126
|
+
exonware/xwnode/strategies/queries/xquery.py,sha256=8mAdVGjc0AOY0UPi_BU6vF-XqEiKetJtb6np0f-bASc,8692
|
127
|
+
exonware/xwnode/strategies/queries/xwnode_executor.py,sha256=8iEjfwGaH6NYCrjf3e49hFE_4EzYfLt50FKuEur1sx4,12191
|
128
|
+
exonware/xwnode/strategies/queries/xwquery_strategy.py,sha256=JSjgI8hx8p_deblUm1br6-6oj_-Cf0znPomyxc3GyPI,16193
|
129
|
+
exonware_xwnode-0.0.1.12.dist-info/METADATA,sha256=8HJxldH_5uqOEy45YHfSnb5mVCpuO38_1FwSeYH_C24,5790
|
130
|
+
exonware_xwnode-0.0.1.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
131
|
+
exonware_xwnode-0.0.1.12.dist-info/licenses/LICENSE,sha256=w42ohoEUfhyT0NgiivAL4fWg2AMRLGnfXPMAR4EO-MU,1094
|
132
|
+
exonware_xwnode-0.0.1.12.dist-info/RECORD,,
|
@@ -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.
|