additory 0.1.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. additory/__init__.py +15 -0
  2. additory/analysis/__init__.py +48 -0
  3. additory/analysis/cardinality.py +126 -0
  4. additory/analysis/correlations.py +124 -0
  5. additory/analysis/distributions.py +376 -0
  6. additory/analysis/quality.py +158 -0
  7. additory/analysis/scan.py +400 -0
  8. additory/augment/__init__.py +24 -0
  9. additory/augment/augmentor.py +653 -0
  10. additory/augment/builtin_lists.py +430 -0
  11. additory/augment/distributions.py +22 -0
  12. additory/augment/forecast.py +1132 -0
  13. additory/augment/list_registry.py +177 -0
  14. additory/augment/smote.py +320 -0
  15. additory/augment/strategies.py +883 -0
  16. additory/common/__init__.py +157 -0
  17. additory/common/backend.py +355 -0
  18. additory/common/column_utils.py +191 -0
  19. additory/common/distributions.py +737 -0
  20. additory/common/exceptions.py +62 -0
  21. additory/common/lists.py +229 -0
  22. additory/common/patterns.py +240 -0
  23. additory/common/resolver.py +567 -0
  24. additory/common/sample_data.py +182 -0
  25. additory/common/validation.py +197 -0
  26. additory/core/__init__.py +27 -0
  27. additory/core/ast_builder.py +165 -0
  28. additory/core/backends/__init__.py +23 -0
  29. additory/core/backends/arrow_bridge.py +476 -0
  30. additory/core/backends/cudf_bridge.py +355 -0
  31. additory/core/column_positioning.py +358 -0
  32. additory/core/compiler_polars.py +166 -0
  33. additory/core/config.py +342 -0
  34. additory/core/enhanced_cache_manager.py +1119 -0
  35. additory/core/enhanced_matchers.py +473 -0
  36. additory/core/enhanced_version_manager.py +325 -0
  37. additory/core/executor.py +59 -0
  38. additory/core/integrity_manager.py +477 -0
  39. additory/core/loader.py +190 -0
  40. additory/core/logging.py +24 -0
  41. additory/core/memory_manager.py +547 -0
  42. additory/core/namespace_manager.py +657 -0
  43. additory/core/parser.py +176 -0
  44. additory/core/polars_expression_engine.py +551 -0
  45. additory/core/registry.py +176 -0
  46. additory/core/sample_data_manager.py +492 -0
  47. additory/core/user_namespace.py +751 -0
  48. additory/core/validator.py +27 -0
  49. additory/dynamic_api.py +308 -0
  50. additory/expressions/__init__.py +26 -0
  51. additory/expressions/engine.py +551 -0
  52. additory/expressions/parser.py +176 -0
  53. additory/expressions/proxy.py +546 -0
  54. additory/expressions/registry.py +313 -0
  55. additory/expressions/samples.py +492 -0
  56. additory/synthetic/__init__.py +101 -0
  57. additory/synthetic/api.py +220 -0
  58. additory/synthetic/common_integration.py +314 -0
  59. additory/synthetic/config.py +262 -0
  60. additory/synthetic/engines.py +529 -0
  61. additory/synthetic/exceptions.py +180 -0
  62. additory/synthetic/file_managers.py +518 -0
  63. additory/synthetic/generator.py +702 -0
  64. additory/synthetic/generator_parser.py +68 -0
  65. additory/synthetic/integration.py +319 -0
  66. additory/synthetic/models.py +241 -0
  67. additory/synthetic/pattern_resolver.py +573 -0
  68. additory/synthetic/performance.py +469 -0
  69. additory/synthetic/polars_integration.py +464 -0
  70. additory/synthetic/proxy.py +60 -0
  71. additory/synthetic/schema_parser.py +685 -0
  72. additory/synthetic/validator.py +553 -0
  73. additory/utilities/__init__.py +53 -0
  74. additory/utilities/encoding.py +600 -0
  75. additory/utilities/games.py +300 -0
  76. additory/utilities/keys.py +8 -0
  77. additory/utilities/lookup.py +103 -0
  78. additory/utilities/matchers.py +216 -0
  79. additory/utilities/resolvers.py +286 -0
  80. additory/utilities/settings.py +167 -0
  81. additory/utilities/units.py +746 -0
  82. additory/utilities/validators.py +153 -0
  83. additory-0.1.0a1.dist-info/METADATA +293 -0
  84. additory-0.1.0a1.dist-info/RECORD +87 -0
  85. additory-0.1.0a1.dist-info/WHEEL +5 -0
  86. additory-0.1.0a1.dist-info/licenses/LICENSE +21 -0
  87. additory-0.1.0a1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,153 @@
1
+ # additory/utilities/validators.py
2
+ # Input validation utilities - now uses common module
3
+
4
+ """
5
+ Validation Utilities Module
6
+
7
+ This module provides validation functions for utilities.
8
+ Core validation is now in additory.common for consistency.
9
+
10
+ This module adds utility-specific validations on top of common validations.
11
+ """
12
+
13
+ import pandas as pd
14
+ from typing import Any, List, Union, Optional
15
+
16
+ # Import from common module for consistency
17
+ from additory.common import (
18
+ validate_dataframe,
19
+ validate_columns_exist,
20
+ validate_positive_number,
21
+ validate_non_negative_number,
22
+ validate_parameter_choice,
23
+ is_dataframe,
24
+ ValidationError
25
+ )
26
+
27
+ # Re-export common validations for backward compatibility
28
+ __all__ = [
29
+ 'validate_dataframe',
30
+ 'validate_columns_exist',
31
+ 'validate_positive_number',
32
+ 'validate_non_negative_number',
33
+ 'validate_parameter_choice',
34
+ 'is_dataframe',
35
+ 'validate_numeric_column',
36
+ 'validate_string_column',
37
+ 'validate_file_path',
38
+ 'validate_directory_path',
39
+ 'validate_column_name'
40
+ ]
41
+
42
+
43
+ def validate_numeric_column(df: Any, column: str) -> None:
44
+ """
45
+ Validate that column contains numeric data
46
+
47
+ Args:
48
+ df: Dataframe to check
49
+ column: Column name to validate
50
+
51
+ Raises:
52
+ ValidationError: If column is not numeric
53
+ """
54
+ # Check if column exists first
55
+ validate_columns_exist(df, column)
56
+
57
+ # For pandas, check dtype
58
+ if hasattr(df, 'dtypes'):
59
+ dtype = df[column].dtype
60
+ if not pd.api.types.is_numeric_dtype(dtype):
61
+ raise ValidationError(f"Column '{column}' must be numeric, got {dtype}")
62
+
63
+ # For other backends, try to detect non-numeric values
64
+ # This is a basic check - more sophisticated validation could be added
65
+
66
+
67
+ def validate_string_column(df: Any, column: str) -> None:
68
+ """
69
+ Validate that column contains string/text data
70
+
71
+ Args:
72
+ df: Dataframe to check
73
+ column: Column name to validate
74
+
75
+ Raises:
76
+ ValidationError: If column is not string-like
77
+ """
78
+ # Check if column exists first
79
+ validate_columns_exist(df, column)
80
+
81
+ # For pandas, check dtype
82
+ if hasattr(df, 'dtypes'):
83
+ dtype = df[column].dtype
84
+ if not (dtype == 'object' or pd.api.types.is_string_dtype(dtype)):
85
+ raise ValidationError(f"Column '{column}' must be string/text, got {dtype}")
86
+
87
+
88
+
89
+
90
+ def validate_file_path(path: str, must_exist: bool = True) -> None:
91
+ """
92
+ Validate file path
93
+
94
+ Args:
95
+ path: File path to validate
96
+ must_exist: Whether file must exist
97
+
98
+ Raises:
99
+ ValidationError: If path is invalid
100
+ """
101
+ import os
102
+
103
+ if not isinstance(path, str):
104
+ raise ValidationError(f"Path must be a string, got {type(path)}")
105
+
106
+ if must_exist and not os.path.exists(path):
107
+ raise ValidationError(f"Path does not exist: {path}")
108
+
109
+ if must_exist and not os.path.isfile(path):
110
+ raise ValidationError(f"Path is not a file: {path}")
111
+
112
+
113
+ def validate_directory_path(path: str, must_exist: bool = True) -> None:
114
+ """
115
+ Validate directory path
116
+
117
+ Args:
118
+ path: Directory path to validate
119
+ must_exist: Whether directory must exist
120
+
121
+ Raises:
122
+ ValidationError: If path is invalid
123
+ """
124
+ import os
125
+
126
+ if not isinstance(path, str):
127
+ raise ValidationError(f"Path must be a string, got {type(path)}")
128
+
129
+ if must_exist and not os.path.exists(path):
130
+ raise ValidationError(f"Directory does not exist: {path}")
131
+
132
+ if must_exist and not os.path.isdir(path):
133
+ raise ValidationError(f"Path is not a directory: {path}")
134
+
135
+
136
+ def validate_column_name(name: str) -> None:
137
+ """
138
+ Validate column name format
139
+
140
+ Args:
141
+ name: Column name to validate
142
+
143
+ Raises:
144
+ ValidationError: If name is invalid
145
+ """
146
+ if not isinstance(name, str):
147
+ raise ValidationError(f"Column name must be a string, got {type(name)}")
148
+
149
+ if not name.strip():
150
+ raise ValidationError("Column name cannot be empty")
151
+
152
+ # Additional validation could be added here
153
+ # e.g., check for special characters, reserved words, etc.
@@ -0,0 +1,293 @@
1
+ Metadata-Version: 2.4
2
+ Name: additory
3
+ Version: 0.1.0a1
4
+ Summary: A semantic, extensible dataframe transformation engine with expressions, lookup, synthetic data, and sample-data support.
5
+ Author: Krishnamoorthy Sankaran
6
+ License: MIT
7
+ Project-URL: homepage, https://github.com/sekarkrishna/additory
8
+ Project-URL: documentation, https://github.com/sekarkrishna/additory/tree/main/documentation/V0.1.0
9
+ Project-URL: source, https://github.com/sekarkrishna/additory
10
+ Project-URL: issues, https://github.com/sekarkrishna/additory/issues
11
+ Requires-Python: >=3.9
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: pandas>=1.5
15
+ Requires-Dist: polars>=0.20
16
+ Requires-Dist: pyyaml>=6.0
17
+ Requires-Dist: requests>=2.31
18
+ Requires-Dist: toml>=0.10
19
+ Requires-Dist: scipy>=1.9
20
+ Requires-Dist: numpy>=1.21
21
+ Provides-Extra: gpu
22
+ Requires-Dist: cudf>=24.0; extra == "gpu"
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest>=7.0; extra == "dev"
25
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
26
+ Requires-Dist: pytest-xdist>=3.0; extra == "dev"
27
+ Requires-Dist: hypothesis>=6.0; extra == "dev"
28
+ Requires-Dist: black>=23.0; extra == "dev"
29
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
30
+ Requires-Dist: coverage>=7.0; extra == "dev"
31
+ Dynamic: license-file
32
+
33
+ # Additory
34
+
35
+ **A semantic, extensible dataframe transformation engine with expressions, lookup, synthetic data, and sample-data support.**
36
+
37
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
38
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
39
+ [![Version](https://img.shields.io/badge/version-0.1.0a1-orange.svg)](https://github.com/sekarkrishna/additory/tree/main/V0.1.0a1/)
40
+
41
+ **Author:** Krishnamoorthy Sankaran
42
+
43
+ ## 🛠️ Requirements
44
+
45
+ - **Python**: 3.9+
46
+ - **Core dependencies**: pandas, polars, numpy, scipy
47
+ - **Optional**: cuDF (for GPU support)
48
+
49
+ ## 📦 Installation
50
+
51
+ ```bash
52
+ pip install additory==0.1.0a1
53
+ ```
54
+
55
+ **Optional GPU support:**
56
+ ```bash
57
+ pip install additory[gpu]==0.1.0a1 # Includes cuDF for GPU acceleration
58
+ ```
59
+
60
+ **Development installation:**
61
+ ```bash
62
+ pip install additory[dev]==0.1.0a1 # Includes testing and development tools
63
+ ```
64
+
65
+ ## 🎯 Core Functions
66
+
67
+ | Function | Purpose | Example |
68
+ |----------|---------|---------|
69
+ | `add.to()` | Lookup/join operations | `add.to(df1, from_df=df2, bring='col', against='key')` |
70
+ | `add.augment()` | Generate additional data | `add.augment(df, n_rows=1000)` |
71
+ | `add.synth()` | Synthetic data from schemas | `add.synth("schema.toml", rows=5000)` |
72
+ | `add.scan()` | Data profiling & analysis | `add.scan(df, preset="full")` |
73
+
74
+ ## 🧬 Available Expressions
75
+
76
+ Additory includes 12 built-in health and fitness expressions:
77
+
78
+ - **`add.bmi()`** - Body Mass Index
79
+ - **`add.bsa()`** - Body Surface Area
80
+ - **`add.bmr()`** - Basal Metabolic Rate
81
+ - **`add.waist_hip_ratio()`** - Waist-to-Hip Ratio
82
+ - **`add.body_fat_percentage()`** - Body Fat Percentage
83
+ - **`add.ideal_body_weight()`** - Ideal Body Weight
84
+ - **`add.blood_pressure_category()`** - BP Classification
85
+ - **`add.cholesterol_ratio()`** - Cholesterol Ratio
86
+ - **`add.age_category()`** - Age Classification
87
+ - **`add.fitness_score()`** - Overall Fitness Score
88
+
89
+ ```python
90
+ # Health calculations
91
+ patients = pd.DataFrame({
92
+ 'weight_kg': [70, 80, 65], # Weight in kilograms
93
+ 'height_m': [1.75, 1.80, 1.60], # Height in meters
94
+ 'age': [25, 35, 45],
95
+ 'gender': ['M', 'F', 'M']
96
+ })
97
+
98
+ patients_bmi = add.bmi(patients)
99
+ patients_bsa = add.bsa(patients)
100
+ fitness_scores = add.fitness_score(patients)
101
+
102
+ # Chain multiple expressions
103
+ result = add.fitness_score(add.bmr(add.bmi(patients)))
104
+ ```
105
+
106
+ ## 🔧 DataFrame Support
107
+
108
+ Additory works seamlessly with multiple DataFrame libraries:
109
+
110
+ - **pandas** - Full support
111
+ - **polars** - Full support
112
+ - **cuDF** - GPU acceleration support
113
+
114
+ ```python
115
+ import polars as pl
116
+ import additory as add
117
+
118
+ # Works with polars
119
+ df_polars = pl.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
120
+ result = add.augment(df_polars, n_rows=100)
121
+
122
+ # Automatic type detection and conversion
123
+ ```
124
+
125
+ ## ✨ Key Features
126
+
127
+ ### 🔧 Utilities
128
+
129
+ **add.to() - Data Lookup & Joins**
130
+ Simplified syntax for bringing columns from one dataframe to another.
131
+
132
+ ```python
133
+ # Simple lookup
134
+ orders_with_prices = add.to(
135
+ orders,
136
+ from_df=products,
137
+ bring='price',
138
+ against='product_id'
139
+ )
140
+
141
+ # Multiple columns and keys
142
+ enriched = add.to(
143
+ orders,
144
+ from_df=products,
145
+ bring=['price', 'category'],
146
+ against=['product_id', 'region']
147
+ )
148
+ ```
149
+
150
+ **add.onehotencoding() - Categorical Encoding**
151
+ Convert categorical columns to one-hot encoded format.
152
+
153
+ ```python
154
+ # One-hot encoding (single column)
155
+ encoded = add.onehotencoding(df, 'category')
156
+ ```
157
+
158
+ **add.harmonize_units() - Unit Standardization**
159
+ Standardize units across your dataset.
160
+
161
+ ```python
162
+ # Unit harmonization
163
+ standardized = add.harmonize_units(
164
+ df,
165
+ value_column='temperature',
166
+ unit_column='unit',
167
+ target_unit='C'
168
+ )
169
+ ```
170
+
171
+ ### 🧮 Expressions
172
+
173
+ Pre-built calculations for health, fitness, and common metrics. Simple examples:
174
+
175
+ ```python
176
+ # Create patient data with correct column names
177
+ patients = pd.DataFrame({
178
+ 'weight_kg': [70, 80, 65], # Weight in kilograms
179
+ 'height_m': [1.75, 1.80, 1.60], # Height in meters
180
+ 'age': [25, 35, 45],
181
+ 'gender': ['M', 'F', 'M']
182
+ })
183
+
184
+ # Calculate BMI
185
+ patients_with_bmi = add.bmi(patients)
186
+
187
+ # Calculate Body Surface Area
188
+ patients_with_bsa = add.bsa(patients)
189
+
190
+ # Chain multiple expressions
191
+ result = add.fitness_score(add.bmr(add.bmi(patients)))
192
+ ```
193
+
194
+ ### 🔄 Augment and Synthetic Data
195
+
196
+ **Augment** generates more data similar to your existing dataset, while **Synthetic** creates entirely new datasets from schema definitions.
197
+
198
+ **Key Differences:**
199
+ - **Augment**: Learns patterns from existing data to create similar rows
200
+ - **Synthetic**: Uses predefined schemas to generate structured data
201
+
202
+ ```python
203
+ # Augment existing data (learns from patterns)
204
+ more_customers = add.augment(customers, n_rows=1000)
205
+
206
+ # Create data from scratch with strategies
207
+ new_data = add.augment("@new", n_rows=500, strategy={
208
+ 'id': 'increment:start=1',
209
+ 'name': 'choice:[John,Jane,Bob]',
210
+ 'age': 'range:18-65'
211
+ })
212
+
213
+ # Generate from schema file (structured approach)
214
+ customers = add.synth("customer_schema.toml", rows=10000)
215
+ ```
216
+
217
+ ## 🧪 Examples
218
+
219
+ ### E-commerce Data Pipeline
220
+ ```python
221
+ import pandas as pd
222
+ import additory as add
223
+
224
+ # Start with small customer sample
225
+ customers = pd.DataFrame({
226
+ 'customer_id': [1, 2, 3],
227
+ 'age': [25, 35, 45],
228
+ 'region': ['North', 'South', 'East']
229
+ })
230
+
231
+ # Generate more customers
232
+ customers = add.augment(customers, n_rows=10000)
233
+
234
+ # Add customer tiers
235
+ tiers = pd.DataFrame({
236
+ 'customer_id': range(1, 4), # Match original IDs
237
+ 'tier': ['Gold', 'Silver', 'Bronze']
238
+ })
239
+
240
+ # Use pipeline approach
241
+ result = (customers
242
+ .pipe(add.to, from_df=tiers, bring='tier', against='customer_id')
243
+ .pipe(add.scan, preset="quick"))
244
+
245
+ print(result.summary())
246
+ ```
247
+
248
+ ### Healthcare Data Analysis
249
+ ```python
250
+ # Create patient data from scratch
251
+ strategy = {
252
+ 'patient_id': 'increment:start=1',
253
+ 'age': 'range:18-80',
254
+ 'weight_kg': 'range:50-120', # Weight in kg
255
+ 'height_cm': 'range:150-200' # Height in cm
256
+ }
257
+
258
+ patients = add.augment("@new", n_rows=1000, strategy=strategy)
259
+
260
+ # Convert height to meters for expressions
261
+ patients['height_m'] = patients['height_cm'] / 100
262
+
263
+ # Calculate health metrics using pipeline
264
+ result = (patients
265
+ .pipe(add.bmi)
266
+ .pipe(add.scan, preset="correlations"))
267
+
268
+ print(result.correlations)
269
+ ```
270
+
271
+ ## 📚 Documentation
272
+
273
+ - **[Function Documentation](https://github.com/sekarkrishna/additory/tree/main/V0.1.0a1/documentation/V0.1.0/)** - Detailed guides for each function
274
+ - **[Expressions Guide](https://github.com/sekarkrishna/additory/tree/main/V0.1.0a1/documentation/V0.1.0/expressions.html)** - Complete expressions reference
275
+
276
+ ## 📄 License
277
+
278
+ MIT License - see [LICENSE](https://github.com/sekarkrishna/additory/tree/main/V0.1.0a1/LICENSE) file for details.
279
+
280
+ ## 📞 Support
281
+
282
+ - **Issues**: [GitHub Issues](https://github.com/sekarkrishna/additory/issues)
283
+ - **Documentation**: [Full Documentation](https://github.com/sekarkrishna/additory/tree/main/V0.1.0a1/documentation/V0.1.0)
284
+
285
+ ## 🗺️ v0.1.1 (February 2025)
286
+ - Enhanced documentation and tutorials
287
+ - Performance optimizations
288
+ - Additional expressions
289
+ - Advanced synthetic data patterns
290
+
291
+ ---
292
+
293
+ **Made with ❤️ for data scientists, analysts, and developers who love working with data.**
@@ -0,0 +1,87 @@
1
+ additory/__init__.py,sha256=SSyfaU_p9v5SgoHrMXOmr1m-R7DjFFA5rimGS2MyCB0,331
2
+ additory/dynamic_api.py,sha256=STF7a3Vs7bc0AJH5HoynVNsAY7xNvpnFP3xJnI1R-18,12177
3
+ additory/analysis/__init__.py,sha256=F_yhD_hcIWbwO1wrRe8Js1RI-vkozaKyWNIIEb-jSMk,986
4
+ additory/analysis/cardinality.py,sha256=y4ttjk3VFNm3mEfNZaTegVQxH7btnmXgnDUSkctNuTo,2976
5
+ additory/analysis/correlations.py,sha256=n0vIPW9lTTSPsPlr40YOIohTX3mUgGmSLdlBrkJZa1c,3909
6
+ additory/analysis/distributions.py,sha256=nkYme_gkzdJ1FWlLJIV31CvoDc3GOOu8KlmeJ2jgkds,10777
7
+ additory/analysis/quality.py,sha256=chow5ZcPaV7czKrycP-35pmBZJYCpLsy20rQ5U4qgCw,4221
8
+ additory/analysis/scan.py,sha256=a6rP1VnwMEhapwIwynzYyX2IqfPcWMOJ4Ff2wRDzh40,14200
9
+ additory/augment/__init__.py,sha256=Z4RiLUU_Ym3sZYePArI7BwX2ETwY_wMACopYFQ0_KwU,510
10
+ additory/augment/augmentor.py,sha256=Ps3UcxqqgRpIbOopSiaO06dvR7mrQL0owrJc2nrLr4g,23754
11
+ additory/augment/builtin_lists.py,sha256=NS45InOjDEDa7SkVK7O0RGWeFY9_IGP5e81XlogApg8,17791
12
+ additory/augment/distributions.py,sha256=KE6w4xjBD05C1pYWCHK3WzNU7I1c0gUWGZNpmqvvsTk,695
13
+ additory/augment/forecast.py,sha256=Rpmw8lCV5K7rKJR5JZ8rTAg6lXjkgalzNmp7IzG8A0E,34812
14
+ additory/augment/list_registry.py,sha256=9pEPCGvMwMsOdlgLFNFTBmm0o2Uamf6l6AR_ALVMXd0,4332
15
+ additory/augment/smote.py,sha256=3pUa_aiUebSBfOqaRbp3OXCflXEBIimDCFVSu-dGp2o,9084
16
+ additory/augment/strategies.py,sha256=PUcplO4r9T9zqFdo75Yr8n8SMQ3RaWqKSGp_ejL5OK8,27520
17
+ additory/common/__init__.py,sha256=QnCIhtPZxDQ5uPrYcE5kFst3quEIolIYavhKpA87RDY,3544
18
+ additory/common/backend.py,sha256=WsePGyJdNC3ZwenQiTti_-SOLNODpleHMscv121Kzb4,9837
19
+ additory/common/column_utils.py,sha256=w2zqmiogavgzD2K9-yeH4GLg0f6xLQkID-9QP_8JLxk,5333
20
+ additory/common/distributions.py,sha256=_fUr0P2lxiQOakpYSWjWbFZQ0ckw5HmsU-CqjOE7n_A,21966
21
+ additory/common/exceptions.py,sha256=S6l0Au0_y2HybPnB2c3SUl9M--HgqLLpj6TJasN5mlc,1207
22
+ additory/common/lists.py,sha256=ItbUpm4YFTqBR5RfryeoIiyQdiRVvKHOnu9ZFshPjcw,6443
23
+ additory/common/patterns.py,sha256=_Z6AVItn72nNYMJX-r93Z7SSZmVngQ7pzqbvhKgmBUQ,6892
24
+ additory/common/resolver.py,sha256=9sfuWbHlvYvJlRx18W6BZU-3sgdo7qNRXB0WuzeZjUc,20574
25
+ additory/common/sample_data.py,sha256=Jh1fi56_dBtVUGJPNbGk_4i8c6vlcofruriYPdIWsI8,5798
26
+ additory/common/validation.py,sha256=P3OQa6ae1NST_UcEW_MgWzSUKUPQpTwoZ5h4OnPGu5E,5930
27
+ additory/core/__init__.py,sha256=dhEBneupBndNBlsQI8niFZgQjUJDLORzRcFtvXGXg-E,630
28
+ additory/core/ast_builder.py,sha256=cW65w-utVGjUJos1ffmfEPgPbxVwN6WU-vcDKrBPy8o,5303
29
+ additory/core/column_positioning.py,sha256=1frwieAvdHXvlZzlUhL1BXP1P_iOZ7yzCNDlvw4L9kI,13241
30
+ additory/core/compiler_polars.py,sha256=wN_785yk7N3tYGPCP2IsOpCeWxqJNOMq35TX-xoSCS8,5161
31
+ additory/core/config.py,sha256=DIGsBfs9sVPGKMZNDtulPrXCUO8dcywc9Zp_R2pIIew,9578
32
+ additory/core/enhanced_cache_manager.py,sha256=7hpoMucAWkP_-sUzst_JigPKK04S6TsYLpI_m-s9FrY,47230
33
+ additory/core/enhanced_matchers.py,sha256=lZO-PPfiAiriX4SjTenaulWqijogq9NnhUATHfwMqak,20353
34
+ additory/core/enhanced_version_manager.py,sha256=wIk5pg0Pn5KahgsGMYtmHxxxX3sltnwHqJ_QT7mosNw,12957
35
+ additory/core/executor.py,sha256=rgFqJ6ZPmW4IhcitebRWkXDyKIO3UZZ_5ZQZWCzsK40,1977
36
+ additory/core/integrity_manager.py,sha256=nRUOjGFcQuIccNxSWzKES5mVYo8izp7By6vsgq70Ziw,17338
37
+ additory/core/loader.py,sha256=kWIfSFpk7FkcQ3Is0YqwEkP6LdyyDDTneKWEKMcvZUY,5903
38
+ additory/core/logging.py,sha256=5wv_J4I0eaedqcXwrkD7T5zqOfNMCXCrMCOZY__PeCw,695
39
+ additory/core/memory_manager.py,sha256=b1H1juAg2CXioSI4N65XldPdKxHTXRI3MSTSAtKV3S0,20178
40
+ additory/core/namespace_manager.py,sha256=RWbMZBcoXvpdcz5km2CJlXcrDwWE4DES-lGET4r98Pk,23325
41
+ additory/core/parser.py,sha256=yVh87CiE4fmrg4jFisNMKTHlz4OpAMNVFF4thq6I0JE,4748
42
+ additory/core/polars_expression_engine.py,sha256=BVXllRGDxBrhvFrZwblIW_T7o5fpMIRXFe5v7hK_WiU,21138
43
+ additory/core/registry.py,sha256=_K9DY4lprBUbMJl5D18D9lmOjwhDawxXpV4_hdSBy7o,5621
44
+ additory/core/sample_data_manager.py,sha256=urBT2T5NZZM0KXriuW5xfCwC1SA3WHwraVMtz5qyw7Y,19800
45
+ additory/core/user_namespace.py,sha256=qgPhuHuhiePa9Qr2CtBCuflpUfxD8wTakWFcp5Ve2xU,22522
46
+ additory/core/validator.py,sha256=em71_1TAdk44B2yyNwzmxkh4pMpqAq1JN_oHoDH7fCk,588
47
+ additory/core/backends/__init__.py,sha256=Qp70UI5UEGBjr8TDcD3ZQKjtL91JPUEv6wXWLNqk6XI,587
48
+ additory/core/backends/arrow_bridge.py,sha256=5f69I1fSjIKCk-xkgBVY-FEuNjt4wUvwc0r4RaWP4Mk,16718
49
+ additory/core/backends/cudf_bridge.py,sha256=TWthiZIZFUPdrXRjml6y63SOLkqgVL7dZ0eqaidx2LY,12821
50
+ additory/expressions/__init__.py,sha256=FYZjHA7zJie1HRAQjMo6MdQxwYW2owrHulKXjfBFg4A,781
51
+ additory/expressions/engine.py,sha256=yOzZDNKjltP-HLVKBL4BXke63ALqgRFXgHK4YeeXLQ8,21138
52
+ additory/expressions/parser.py,sha256=yVh87CiE4fmrg4jFisNMKTHlz4OpAMNVFF4thq6I0JE,4748
53
+ additory/expressions/proxy.py,sha256=DgeQMim_ija2XU617zTNHBv78v4v3YKVX9J2p4Vu7JI,21910
54
+ additory/expressions/registry.py,sha256=R0nj3-qRx5Q9OxsevIeWGOfIvBcltYNmnUf8QCu06s8,11015
55
+ additory/expressions/samples.py,sha256=urBT2T5NZZM0KXriuW5xfCwC1SA3WHwraVMtz5qyw7Y,19800
56
+ additory/synthetic/__init__.py,sha256=IpT3BjKNC3YeCY68cdwEjiHvcrDmmJ1FWMBbx9xPhSs,2529
57
+ additory/synthetic/api.py,sha256=iKrx7BiEi2F12I7-lOVFbh7N0Rmz0b5eL1kG2EBWUG0,7576
58
+ additory/synthetic/common_integration.py,sha256=HlFL76sy8fWxpgqcS7PYlfN7OCY9k0dfJWht1x-aVb8,10597
59
+ additory/synthetic/config.py,sha256=5XEI2IuS0MVu8OoPU-D1zl5o5XmLEZyhaUY8DZ65d14,9437
60
+ additory/synthetic/engines.py,sha256=MAn5eNNSIkwccukzIJzUlhF-BPpdfcZxdfU04UqxFCE,22051
61
+ additory/synthetic/exceptions.py,sha256=rsnzvPRQ_HjtYZoP0iDZrXKvhBmUuoaysBwCAxR_k-Y,6722
62
+ additory/synthetic/file_managers.py,sha256=e89WQlSFDTSqGRVUVKi02GM4KIG0MNyY5lbETiRWrdI,18484
63
+ additory/synthetic/generator.py,sha256=LzSdF01JwXmA3K5xQBA4PC7rPxxYhEd9U9yUAdJvrbM,30610
64
+ additory/synthetic/generator_parser.py,sha256=QMStjZrQMc5iQFtouiWfNI-yGddZ4zfL1E2mZyhABcg,1881
65
+ additory/synthetic/integration.py,sha256=XgGrJS1iQQ8AjYWsRFNabrEpc_iBHb_FKhZJmrJIlUk,12351
66
+ additory/synthetic/models.py,sha256=x2cmfboIJ6GJzB930KlVLigE0F6CLPk_FaemGaR9XzE,8144
67
+ additory/synthetic/pattern_resolver.py,sha256=UuXro8c7QawB8zg1iuyDN5LXLnLh62QpR1TLKolnxWQ,24526
68
+ additory/synthetic/performance.py,sha256=9B8ai_-VgRckqH4AABneELR5epuu7Xe63kIBez6pxF4,19132
69
+ additory/synthetic/polars_integration.py,sha256=Rx0n_pwOo3IWEYBjW03iTbaFL4GLoFPCrLvRimDpAcg,18379
70
+ additory/synthetic/proxy.py,sha256=pfpkk4ZVYwRFkoX9a8zMjCG0PcNEcOdiDCOnDuWmmdk,1709
71
+ additory/synthetic/schema_parser.py,sha256=MpqmMWtldxBr9HMKiNGmw5gf0tGL9cQTpRxIzt2FHr4,28644
72
+ additory/synthetic/validator.py,sha256=uobkWARyoq8QXl2n8yPDgZztjaDOec_3blLZT_1_oAI,22800
73
+ additory/utilities/__init__.py,sha256=I28c5ZqqZ2VsMIG40fUBJhnc930cFXHJX22xQWARXq8,1679
74
+ additory/utilities/encoding.py,sha256=DhTaTeUlJOSixQ3-hgUwSy1jMJAYadV2bQHuONVzzEY,20995
75
+ additory/utilities/games.py,sha256=nEPGUup0RHgzVKdgg8sRMraDxACaIVDFmMuBBjGDrVI,8364
76
+ additory/utilities/keys.py,sha256=CAbMN8VowLHwjWAMvRHTvqwJ44TxulKrYvK9UBzAwEw,197
77
+ additory/utilities/lookup.py,sha256=itE_ntAFHae92tQS43P165-87PHF5hTaH1Qy7ENoYak,3045
78
+ additory/utilities/matchers.py,sha256=x8Nve49_TzJ7jneueiXvnzMgI3ov3o0dlU_h4xFr8Qw,6120
79
+ additory/utilities/resolvers.py,sha256=ykMfce2f9in9wqHgmljCFIil8xGcalT0FBwFIwHOlnk,7127
80
+ additory/utilities/settings.py,sha256=5XB2S3L7Ht486LZMDacYTuyB_ta7sVohUFEKzMo1nDU,4698
81
+ additory/utilities/units.py,sha256=BysabwFBFZmMHwIYV4l0ikXP3HdRSlEVrwfLiucPTQE,30439
82
+ additory/utilities/validators.py,sha256=K1ZYsPL3W7XkIUECVWov4HZxTlzqs9Rbc61Vidh2F8o,4213
83
+ additory-0.1.0a1.dist-info/licenses/LICENSE,sha256=ztobegtjJRyvQntGjQ1w80MGuTOeMmWkh5Be-pFyq3I,1079
84
+ additory-0.1.0a1.dist-info/METADATA,sha256=NdBp4m5byMGYZ3Q9V9XqZVupzwJLXyMCvRFuc9o8yRo,8433
85
+ additory-0.1.0a1.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
86
+ additory-0.1.0a1.dist-info/top_level.txt,sha256=4zphwXiI6HEl40fdjMXoUp9JNIqQ-tgYWeo3zqKqvEk,9
87
+ additory-0.1.0a1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.10.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Krishnamoorthy Sankaran
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 @@
1
+ additory