equiframe 0.12.4__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 (170) hide show
  1. equiframe/__init__.py +832 -0
  2. equiframe/__main__.py +3 -0
  3. equiframe/_base.py +84 -0
  4. equiframe/_cli_support.py +125 -0
  5. equiframe/_comparison_io.py +161 -0
  6. equiframe/_dataset_provenance.py +146 -0
  7. equiframe/_decimal.py +22 -0
  8. equiframe/_diff_capture.py +433 -0
  9. equiframe/_doctor.py +123 -0
  10. equiframe/_document_io.py +61 -0
  11. equiframe/_documents.py +79 -0
  12. equiframe/_duckdb_transport.py +149 -0
  13. equiframe/_error_reporting.py +52 -0
  14. equiframe/_first_use.py +102 -0
  15. equiframe/_path_compat.py +26 -0
  16. equiframe/_physical.py +133 -0
  17. equiframe/_r_review.R +308 -0
  18. equiframe/_regular_io.py +167 -0
  19. equiframe/_report_format_v1.py +298 -0
  20. equiframe/_report_io.py +591 -0
  21. equiframe/_stability_inventory.py +1421 -0
  22. equiframe/_timezones.py +257 -0
  23. equiframe/_vendor/cyclonedx/LICENSE +201 -0
  24. equiframe/_vendor/cyclonedx/PROVENANCE.md +18 -0
  25. equiframe/_vendor/cyclonedx/bom-1.6.schema.json +5673 -0
  26. equiframe/_vendor/cyclonedx/jsf-0.82.schema.json +240 -0
  27. equiframe/_vendor/cyclonedx/spdx.schema.json +712 -0
  28. equiframe/adapters.py +454 -0
  29. equiframe/assertion_types.py +122 -0
  30. equiframe/assertions.py +271 -0
  31. equiframe/benchmark.py +101 -0
  32. equiframe/bundle.py +240 -0
  33. equiframe/cli.py +693 -0
  34. equiframe/comparison.py +937 -0
  35. equiframe/comparison_report.py +660 -0
  36. equiframe/comparison_types.py +257 -0
  37. equiframe/compatibility.py +546 -0
  38. equiframe/contracts.py +879 -0
  39. equiframe/datasets.py +1301 -0
  40. equiframe/decision.py +34 -0
  41. equiframe/destinations.py +295 -0
  42. equiframe/detector_types.py +431 -0
  43. equiframe/detectors.py +389 -0
  44. equiframe/diff.py +192 -0
  45. equiframe/diff_contracts.py +523 -0
  46. equiframe/docs/adoption.md +329 -0
  47. equiframe/docs/api.md +534 -0
  48. equiframe/docs/arquitecto.md +143 -0
  49. equiframe/docs/choosing-api.md +84 -0
  50. equiframe/docs/cientifico.md +180 -0
  51. equiframe/docs/compatibility.md +254 -0
  52. equiframe/docs/contributing.md +171 -0
  53. equiframe/docs/dependencies.md +237 -0
  54. equiframe/docs/eda.md +166 -0
  55. equiframe/docs/extending.md +158 -0
  56. equiframe/docs/fast-ci.md +52 -0
  57. equiframe/docs/first-use.md +78 -0
  58. equiframe/docs/index.md +142 -0
  59. equiframe/docs/ingestion.md +145 -0
  60. equiframe/docs/inicio.md +129 -0
  61. equiframe/docs/installed-private.md +97 -0
  62. equiframe/docs/journeys.md +362 -0
  63. equiframe/docs/lectura-conversion.md +211 -0
  64. equiframe/docs/licensing.md +17 -0
  65. equiframe/docs/maintenance.md +233 -0
  66. equiframe/docs/migration-ir.md +333 -0
  67. equiframe/docs/option-audit.md +45 -0
  68. equiframe/docs/outcome-gates.md +134 -0
  69. equiframe/docs/performance.md +263 -0
  70. equiframe/docs/piloto-simulado.md +56 -0
  71. equiframe/docs/quickstart.md +156 -0
  72. equiframe/docs/r_review.md +212 -0
  73. equiframe/docs/recipes.md +248 -0
  74. equiframe/docs/releasing.md +183 -0
  75. equiframe/docs/security.md +218 -0
  76. equiframe/docs/semantics.md +274 -0
  77. equiframe/docs/sqlite-snapshots.md +262 -0
  78. equiframe/docs/universal-sources.md +49 -0
  79. equiframe/docs/universalidad-cinco-pasos.md +107 -0
  80. equiframe/docs/upgrading.md +538 -0
  81. equiframe/duckdb_capture.py +410 -0
  82. equiframe/eda/__init__.py +36 -0
  83. equiframe/eda/__main__.py +3 -0
  84. equiframe/eda/_backend.py +612 -0
  85. equiframe/eda/_inventory.py +49 -0
  86. equiframe/eda/_paths.py +49 -0
  87. equiframe/eda/_report.py +291 -0
  88. equiframe/eda/api.py +535 -0
  89. equiframe/eda/cli.py +102 -0
  90. equiframe/eda/models.py +239 -0
  91. equiframe/errors.py +83 -0
  92. equiframe/evidence.py +375 -0
  93. equiframe/examples/integrations/eda_generic.py +60 -0
  94. equiframe/examples/integrations/outcome_gates.py +94 -0
  95. equiframe/examples/integrations/sqlite_snapshot.py +246 -0
  96. equiframe/examples/integrations/sqlite_snapshot_demo.py +226 -0
  97. equiframe/examples/integrations/universal_first_use.py +296 -0
  98. equiframe/examples/journeys/README.md +31 -0
  99. equiframe/examples/journeys/__init__.py +1 -0
  100. equiframe/examples/journeys/a_pandas_refactor.py +88 -0
  101. equiframe/examples/journeys/b_native_migration.py +181 -0
  102. equiframe/examples/journeys/c_retail_etl.py +460 -0
  103. equiframe/examples/journeys/common.py +136 -0
  104. equiframe/examples/journeys/d_financial_reconciliation.py +96 -0
  105. equiframe/examples/journeys/e_telemetry.py +135 -0
  106. equiframe/examples/journeys/f_data_science_preparation.py +84 -0
  107. equiframe/examples/journeys/g_external_snapshots.py +197 -0
  108. equiframe/examples/journeys/h_portable_ci.py +129 -0
  109. equiframe/examples/journeys/requirements.lock +249 -0
  110. equiframe/examples/journeys/verify_journeys.py +117 -0
  111. equiframe/examples/load_convert_compare.py +85 -0
  112. equiframe/execution.py +355 -0
  113. equiframe/execution_types.py +177 -0
  114. equiframe/ingestion.py +744 -0
  115. equiframe/local.py +126 -0
  116. equiframe/migration/__init__.py +94 -0
  117. equiframe/migration/_physical.py +8 -0
  118. equiframe/migration/backends/_timestamp_transport.py +109 -0
  119. equiframe/migration/backends/duckdb.py +651 -0
  120. equiframe/migration/backends/duckdb_decimal.py +125 -0
  121. equiframe/migration/backends/duckdb_time.py +87 -0
  122. equiframe/migration/backends/pandas.py +544 -0
  123. equiframe/migration/backends/polars.py +915 -0
  124. equiframe/migration/backends/polars_decimal.py +231 -0
  125. equiframe/migration/io.py +198 -0
  126. equiframe/migration/ports.py +96 -0
  127. equiframe/migration/runner.py +545 -0
  128. equiframe/migration/runner_types.py +405 -0
  129. equiframe/migration/types.py +354 -0
  130. equiframe/migration/validation.py +619 -0
  131. equiframe/normalization.py +358 -0
  132. equiframe/pipeline.py +274 -0
  133. equiframe/pipeline_types.py +247 -0
  134. equiframe/ports.py +39 -0
  135. equiframe/preprocessing.py +110 -0
  136. equiframe/profile_types.py +343 -0
  137. equiframe/profiles.py +447 -0
  138. equiframe/py.typed +0 -0
  139. equiframe/r_review.py +706 -0
  140. equiframe/reduction.py +518 -0
  141. equiframe/registry.py +121 -0
  142. equiframe/report_rendering.py +366 -0
  143. equiframe/report_types.py +294 -0
  144. equiframe/reporting.py +26 -0
  145. equiframe/rule_types.py +178 -0
  146. equiframe/rules.py +819 -0
  147. equiframe/schemas/r-execution-binding-1.0.schema.json +46 -0
  148. equiframe/schemas/r-review-binding-1.0.schema.json +28 -0
  149. equiframe/schemas/r-review-options-1.0.schema.json +38 -0
  150. equiframe/schemas/r-review-result-1.0.schema.json +207 -0
  151. equiframe/schemas/reviewed-decision-1.0.schema.json +3394 -0
  152. equiframe/serialization.py +152 -0
  153. equiframe/snapshot.py +296 -0
  154. equiframe/sources.py +283 -0
  155. equiframe/tables.py +459 -0
  156. equiframe/types.py +71 -0
  157. equiframe/values.py +252 -0
  158. equiframe/verification_request.py +35 -0
  159. equiframe/verify.py +799 -0
  160. equiframe/verify_types.py +255 -0
  161. equiframe/workflow.py +510 -0
  162. equiframe/workflow_request.py +38 -0
  163. equiframe-0.12.4.dist-info/METADATA +268 -0
  164. equiframe-0.12.4.dist-info/RECORD +170 -0
  165. equiframe-0.12.4.dist-info/WHEEL +4 -0
  166. equiframe-0.12.4.dist-info/entry_points.txt +3 -0
  167. equiframe-0.12.4.dist-info/licenses/LICENSE +21 -0
  168. equiframe-0.12.4.dist-info/licenses/THIRD_PARTY_NOTICES.md +42 -0
  169. equiframe-0.12.4.dist-info/licenses/tools/cyclonedx/LICENSE +201 -0
  170. equiframe-0.12.4.dist-info/licenses/tools/cyclonedx/PROVENANCE.md +18 -0
@@ -0,0 +1,268 @@
1
+ Metadata-Version: 2.4
2
+ Name: equiframe
3
+ Version: 0.12.4
4
+ Summary: Operational verification, native ETL migration and portable semantic evidence
5
+ Project-URL: Homepage, https://github.com/htroya/equiframe
6
+ Project-URL: Source, https://github.com/htroya/equiframe
7
+ Project-URL: Documentation, https://github.com/htroya/equiframe/blob/main/docs/index.md
8
+ Project-URL: Issue Tracker, https://github.com/htroya/equiframe/issues
9
+ Author: Hernán Troya
10
+ License-Expression: MIT AND Apache-2.0
11
+ License-File: LICENSE
12
+ License-File: THIRD_PARTY_NOTICES.md
13
+ License-File: tools/cyclonedx/LICENSE
14
+ License-File: tools/cyclonedx/PROVENANCE.md
15
+ Keywords: data-validation,dataframes,duckdb,etl,pandas,polars,semantic-diff
16
+ Classifier: Development Status :: 5 - Production/Stable
17
+ Classifier: Operating System :: Microsoft :: Windows
18
+ Classifier: Operating System :: POSIX :: Linux
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
+ Classifier: Typing :: Typed
25
+ Requires-Python: <3.14,>=3.10
26
+ Requires-Dist: pydantic<3,>=2.12
27
+ Requires-Dist: typer<1,>=0.20
28
+ Requires-Dist: typing-extensions<5,>=4.14
29
+ Requires-Dist: tzdata<2027,>=2025.2
30
+ Provides-Extra: arrow
31
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'arrow'
32
+ Provides-Extra: duckdb
33
+ Requires-Dist: duckdb<2,>=1.5.6; extra == 'duckdb'
34
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'duckdb'
35
+ Provides-Extra: eda
36
+ Requires-Dist: duckdb<2,>=1.5.6; extra == 'eda'
37
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'eda'
38
+ Provides-Extra: eda-charts
39
+ Requires-Dist: duckdb<2,>=1.5.6; extra == 'eda-charts'
40
+ Requires-Dist: plotly<8,>=6.3; extra == 'eda-charts'
41
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'eda-charts'
42
+ Provides-Extra: engines
43
+ Requires-Dist: duckdb<2,>=1.5.6; extra == 'engines'
44
+ Requires-Dist: pandas!=3.0.3,!=3.0.4,!=3.0.5,!=3.0.6,<4,>=2.2; extra == 'engines'
45
+ Requires-Dist: polars<2,>=1.30; extra == 'engines'
46
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'engines'
47
+ Provides-Extra: files
48
+ Requires-Dist: defusedxml<1,>=0.7; extra == 'files'
49
+ Requires-Dist: openpyxl<4,>=3.1; extra == 'files'
50
+ Requires-Dist: pandas!=3.0.3,!=3.0.4,!=3.0.5,!=3.0.6,<4,>=2.2; extra == 'files'
51
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'files'
52
+ Requires-Dist: xlrd<3,>=2; extra == 'files'
53
+ Provides-Extra: ml
54
+ Requires-Dist: numpy<3,>=2; extra == 'ml'
55
+ Requires-Dist: scikit-learn<1.10,>=1.7; extra == 'ml'
56
+ Provides-Extra: pandas
57
+ Requires-Dist: pandas!=3.0.3,!=3.0.4,!=3.0.5,!=3.0.6,<4,>=2.2; extra == 'pandas'
58
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'pandas'
59
+ Provides-Extra: polars
60
+ Requires-Dist: polars<2,>=1.30; extra == 'polars'
61
+ Requires-Dist: pyarrow<26,>=23.0.1; extra == 'polars'
62
+ Description-Content-Type: text/markdown
63
+
64
+ # EquiFrame: semantic comparison and dataframe migration
65
+
66
+ > Release target: **0.12.4**. Check the official index for availability and
67
+ > verify the identified artifact hashes. Publication requires the
68
+ > [release gates](https://github.com/htroya/equiframe/blob/main/docs/releasing.md).
69
+
70
+ [Documentation](https://github.com/htroya/equiframe/blob/main/docs/index.md) |
71
+ [API](https://github.com/htroya/equiframe/blob/main/docs/api.md) |
72
+ [Examples](https://github.com/htroya/equiframe/blob/main/docs/journeys.md) |
73
+ [Issues](https://github.com/htroya/equiframe/issues)
74
+
75
+ **EquiFrame** checks whether tabular data and supported transformations preserve
76
+ their meaning when moving between **Pandas, Polars and DuckDB**. It reads files,
77
+ creates native dataframe objects, converts between engines and reports semantic
78
+ differences under explicit comparison policies.
79
+
80
+ Use it to check a dataframe refactor, validate an ETL result or add migration
81
+ checks to an existing application. Contracts describe keys, types, numeric
82
+ precision, missing values, duplicates, order and dates. The library works with
83
+ your own data, independently of procurement schemas, warehouses and cloud services.
84
+
85
+ ## Install
86
+
87
+ EquiFrame 0.12.4 supports **Python 3.10, 3.11, 3.12 and 3.13**.
88
+
89
+ ```bash
90
+ python -m pip install "equiframe[files,engines,ml]==0.12.4"
91
+ python -m pip check
92
+ ```
93
+
94
+ The base installation is `python -m pip install equiframe==0.12.4`.
95
+ Optional engines and machine-learning libraries are loaded when requested.
96
+
97
+ | Extra | Purpose |
98
+ | --- | --- |
99
+ | `files` | JSON, JSONL, CSV, delimited TXT, XML, Excel, Parquet and GeoJSON readers |
100
+ | `pandas`, `polars`, `duckdb` | The selected engine and Arrow transport |
101
+ | `engines` | Pandas, Polars, DuckDB and Arrow |
102
+ | `ml` | Isolation Forest with scikit-learn and NumPy |
103
+ | `eda`, `eda-charts` | Experimental exploratory analysis and optional charts |
104
+
105
+ The independent R reviewer requires an external `Rscript` installation.
106
+ See [dependencies](https://github.com/htroya/equiframe/blob/main/docs/dependencies.md)
107
+ and [supported ranges](https://github.com/htroya/equiframe/blob/main/pyproject.toml).
108
+
109
+ ## Quick start
110
+
111
+ Local file reading and comparison need no EquiFrame account or API key.
112
+ Install the optional engine extras above; install R separately only for R review.
113
+
114
+ ### Read a file and choose its destination
115
+
116
+ With the `files` and `engines` extras installed, provide an existing file:
117
+
118
+ ```python
119
+ import equiframe as ef
120
+
121
+ with ef.load_dataset("orders.json") as loaded:
122
+ print(loaded.info.to_dict())
123
+ pandas_df = loaded.pandas
124
+
125
+ with ef.convert_dataset(loaded, target="polars") as converted:
126
+ polars_df = converted.frame
127
+
128
+ with ef.convert_dataset(loaded, target="duckdb") as converted:
129
+ relation = converted.frame
130
+ print(relation.limit(5).df())
131
+ ```
132
+
133
+ EquiFrame reports columns, detected types and row count. The initial load
134
+ constructs Pandas; `target` selects the native object exposed as `loaded.frame`.
135
+ Later conversions consume the selected native frame and record its provenance.
136
+ Keep the context open while using an owned DuckDB relation.
137
+
138
+ Select a destination directly:
139
+
140
+ ```python
141
+ import equiframe as ef
142
+
143
+ with ef.load_dataset("orders.parquet", target="polars") as loaded:
144
+ polars_df = loaded.frame
145
+ ```
146
+
147
+ Pass `DatasetReadOptions` for multiple Excel sheets, nested JSON/XML, ambiguous
148
+ delimiters or exact column representations. The
149
+ [file-reading guide](https://github.com/htroya/equiframe/blob/main/docs/lectura-conversion.md)
150
+ describes supported forms, preserved representations and resource limits.
151
+
152
+ ```bash
153
+ equiframe dataset load orders.json
154
+ equiframe dataset load orders.json --target polars
155
+ equiframe dataset inspect orders.parquet
156
+ ```
157
+
158
+ The first command asks for a destination in an interactive terminal. Supply
159
+ `--target` in automated jobs. Invalid inputs return a nonzero exit and an error
160
+ on `stderr`.
161
+
162
+ ## Compare independently produced results
163
+
164
+ This example deliberately changes one amount:
165
+
166
+ ```python
167
+ from pathlib import Path
168
+
169
+ import pandas as pd
170
+ import polars as pl
171
+
172
+ import equiframe as ef
173
+
174
+ original = pd.DataFrame({"id": [1, 2], "amount": [100, 200]})
175
+ migrated = pl.DataFrame({"id": [1, 2], "amount": [100, 201]})
176
+
177
+ result = ef.diff(original, migrated, keys=["id"], work_dir=Path("equiframe-runs"))
178
+ print(result.state) # different
179
+ print(result.complete)
180
+ ```
181
+
182
+ Inspect differences with `ef.iter_differences(result.differences)`. Enforce
183
+ acceptance with `ef.assert_equivalent(result)`; divergent or incomplete results
184
+ raise `ef.EquivalenceAssertionError`. Operational failures use the
185
+ `ef.EquiFrameError` hierarchy, including `DatasetReadError`,
186
+ `MissingDependencyError` and `InvalidExecutionInput`. See the
187
+ [API reference](https://github.com/htroya/equiframe/blob/main/docs/api.md)
188
+ for argument-validation exceptions and command-specific exits.
189
+
190
+ All six directed combinations of Pandas, Polars and DuckDB are supported.
191
+ A verdict concerns the supplied inputs and contract. Preserve `complete` and
192
+ unavailable-component states when deciding whether to accept a migration.
193
+
194
+ ## ETL, rules, anomalies and R review
195
+
196
+ - **Data conversion:** `load_dataset` and `convert_dataset` move loaded data
197
+ between native objects.
198
+ - **Transformation migration:** `check_migration` and `migrate` validate and run
199
+ supported declarative plans: projections, filters, joins, aggregations, windows
200
+ and ordering. Each engine executes its own native plan.
201
+ - **Semantic checks:** policies cover values, types, decimals, missing values,
202
+ keys, multiplicity, order and time semantics.
203
+ - **Anomaly detection:** rules, Isolation Forest and MAD keep separate results.
204
+ Fitting, calibration and inference are explicit operations.
205
+ - **Independent R review:** `review_with_r`, `finalize_with_r` and
206
+ `finalize_execution_with_r` use a real R process and an explicit contract,
207
+ preserving earlier alerts, disagreements and unavailable components.
208
+
209
+ See [entry points](https://github.com/htroya/equiframe/blob/main/docs/choosing-api.md),
210
+ [semantics](https://github.com/htroya/equiframe/blob/main/docs/semantics.md),
211
+ [migration](https://github.com/htroya/equiframe/blob/main/docs/migration-ir.md)
212
+ and [R review](https://github.com/htroya/equiframe/blob/main/docs/r_review.md).
213
+ Registered callbacks and SQL are trusted application code; EquiFrame does not
214
+ sandbox untrusted programs.
215
+
216
+ ## Run a complete example
217
+
218
+ The source distribution includes `examples/load_convert_compare.py`. It creates
219
+ temporary synthetic orders, loads Pandas, converts to Polars and DuckDB, checks
220
+ equivalence and verifies a deliberate one-row regression. Its files are removed
221
+ when finished:
222
+
223
+ ```bash
224
+ python examples/load_convert_compare.py --rows 30000
225
+ ```
226
+
227
+ Installed wheels provide the same example as
228
+ `python -m equiframe.examples.load_convert_compare --rows 30000`. Further
229
+ [examples](https://github.com/htroya/equiframe/blob/main/docs/journeys.md)
230
+ and [recipes](https://github.com/htroya/equiframe/blob/main/docs/recipes.md)
231
+ cover ETL, reconciliation and terminal usage.
232
+
233
+ ## Compatibility and development
234
+
235
+ The [compatibility register](https://github.com/htroya/equiframe/blob/main/docs/compatibility.md)
236
+ distinguishes stable interfaces and experimental capabilities. Advanced
237
+ orchestration, standalone pipelines, EDA and reduction remain experimental.
238
+ The separate `equiframe-benchmark` distribution remains Beta.
239
+
240
+ Releases use `MAJOR.MINOR.PATCH`: patches preserve documented contracts, minor
241
+ releases add compatible functionality, and breaking changes require migration
242
+ notes. During `0.x`, consult the
243
+ [upgrade guide](https://github.com/htroya/equiframe/blob/main/docs/upgrading.md)
244
+ and [changelog](https://github.com/htroya/equiframe/blob/main/CHANGELOG.md).
245
+ Release versions derive from reviewed Git tags.
246
+
247
+ The source distribution includes `src/`, `py.typed`, examples, tests, schemas and
248
+ release tools. Development uses **Ruff** for linting and formatting, **mypy** in
249
+ strict mode, and source and installed-distribution tests. The
250
+ [contribution guide](https://github.com/htroya/equiframe/blob/main/CONTRIBUTING.md)
251
+ provides commands and dependency locks.
252
+
253
+ ## Support and license
254
+
255
+ Use the [issue tracker](https://github.com/htroya/equiframe/issues) for
256
+ reproducible bugs. Include package, Python and engine versions, operating system,
257
+ expected results and a shareable example. Sensitive reports belong in the
258
+ [private security channel](https://github.com/htroya/equiframe/security/advisories/new).
259
+
260
+ Hernán Troya (`htroya`) maintains releases and security handling without a fixed
261
+ response-time SLA. The reusable library and its scientific benchmark have
262
+ separate acceptance criteria.
263
+
264
+ Original code is licensed under
265
+ [MIT](https://github.com/htroya/equiframe/blob/main/LICENSE).
266
+ Bundled CycloneDX schemas retain Apache-2.0. See
267
+ [third-party notices](https://github.com/htroya/equiframe/blob/main/THIRD_PARTY_NOTICES.md)
268
+ and [license scope](https://github.com/htroya/equiframe/blob/main/NOTICE.md).
@@ -0,0 +1,170 @@
1
+ equiframe/__init__.py,sha256=Q7sijM6sQ62dkIaNeRMoEETqeUhLDaTiDji7s4Hvbo0,19186
2
+ equiframe/__main__.py,sha256=t4Snte8rx9OLV4YvhDlYhmhTdroUKAV_FSfKlf6ocDc,39
3
+ equiframe/_base.py,sha256=HJiBUwI2jNBsq9s7kbN2XHl9-sDklgoNDeujRbWler0,2758
4
+ equiframe/_cli_support.py,sha256=vpfVJDlpAwA-zHEXj0m1TR7hMm7XjvOGc9qJq7g1Ars,5269
5
+ equiframe/_comparison_io.py,sha256=KRUhOSUVURoa1MTm1TeUFntTphomU7HstFp5MLvKXRw,5984
6
+ equiframe/_dataset_provenance.py,sha256=W0475wC0abeUDFhblq7DsIKrkxPrBDqOU2mcPs7caNs,5265
7
+ equiframe/_decimal.py,sha256=rW-FjV1w-W3S-e05BAikkEB_VrqrgHNXPQrhtclWN6I,788
8
+ equiframe/_diff_capture.py,sha256=FpXI_iiQAd38VeESPUrQzx7Mzn8NrgAC2xJVTVt0T_g,17474
9
+ equiframe/_doctor.py,sha256=YwTRHJpAZrS15xxiIBfoU4hLXJ_7T2MNyPgclh5Bbdc,4248
10
+ equiframe/_document_io.py,sha256=OFzcwsM0T7MbMjQCXve8fiBfDTC_ULRanTEj8i-zkMY,2323
11
+ equiframe/_documents.py,sha256=SQXndZJGdX8Cey1B52x3DChDBt3KMBJUI-1VeYSTrvE,2556
12
+ equiframe/_duckdb_transport.py,sha256=D7p2EezeFTQ27a5ysVjQo3KUGE4G_rJQtnlvAXZstR4,6442
13
+ equiframe/_error_reporting.py,sha256=nZAi3N2mtuhIhlOco3wg21TyOhYv05iv8YcJ01h8kpA,1799
14
+ equiframe/_first_use.py,sha256=1OSKTMfEVQtXvp-Il_wrt4FpkIS2nooc1bKAOIUMMwU,3818
15
+ equiframe/_path_compat.py,sha256=Luny7GCEfRzVMIb7uoYJTx9TWRXuRMDX-m5_-yDUqwY,930
16
+ equiframe/_physical.py,sha256=M08SYKkxQbZR4c1ZWir875EIaul5T0vbP5hHDHiMSV0,5510
17
+ equiframe/_r_review.R,sha256=E3zdgAT_qxEKyMK7BJLAjhTymzaSx4V9YrUqwO8seWU,13890
18
+ equiframe/_regular_io.py,sha256=MACQPgbGlrSejbShuEiXDDoEXWY-tm5fs7blfKQWYws,6860
19
+ equiframe/_report_format_v1.py,sha256=G4YDCDPF0fSkTJn9Pp2GXOj__AyAQ9HP1146jIUVsAA,12921
20
+ equiframe/_report_io.py,sha256=DPQJEyqxMFKfqLvGme-iYjYxD0TPgKjwdfWdXe9x2Lc,26382
21
+ equiframe/_stability_inventory.py,sha256=PA7A1naiuxzHFn1AVzwYVwTQgmt50XDu7zQ1YFCUBpQ,56867
22
+ equiframe/_timezones.py,sha256=M6d5VKOT9fGbDB1o28TQ_IGn1IIFuIsODbiKfnvoTDE,11152
23
+ equiframe/adapters.py,sha256=GybSqDwhF02GyRsFex_yMOFzBjwCTlp-zRhxKzFbils,20397
24
+ equiframe/assertion_types.py,sha256=4eFwYN-2IUkdTLRAbbWUrGMNizIS2AleEjvhuo_IYsc,4634
25
+ equiframe/assertions.py,sha256=Tq0ofuO5qxvcKg4bjXKY-aiMwsk5uH-MsKAFXrXvYYQ,11102
26
+ equiframe/benchmark.py,sha256=lcV1ORwMi4s25NRhZ3-mRzViKcolVvbnxFhi7OOtghU,3803
27
+ equiframe/bundle.py,sha256=AKmvY4Qqaynqjg9hHNKNawt6zJOyh3GncXM3gzF8MKU,10036
28
+ equiframe/cli.py,sha256=xt-LK9CkMD077rCFq5SgTc8DI1q0GzJik8WsY_6thdI,26999
29
+ equiframe/comparison.py,sha256=Z_RvwqlyXO9z9K7x7NwuuQ5k8eLRoeseAYjlKi-M1XU,41508
30
+ equiframe/comparison_report.py,sha256=fl89rJUOuX8W908rap-7kLbOu030U1OG-kjjLuQ8qTo,28104
31
+ equiframe/comparison_types.py,sha256=Qlo3IHzAoIhQ7cKIJ4Vp8yXaZr8g9XS7JF74zbZE1v0,10298
32
+ equiframe/compatibility.py,sha256=9esvsqYReiqbM3pbB-3nxIWg0gF-MmZmu1gJQG9IXOs,27354
33
+ equiframe/contracts.py,sha256=dZa4OKHYgVHDet3iUHEQ7DZ0ZQOSPX-SCBR8weW8Z7U,35217
34
+ equiframe/datasets.py,sha256=HgyH4ZqxzbSjl2bSLN4dSHOWLe4YfIvI-KI2YcYVZ5g,55599
35
+ equiframe/decision.py,sha256=W4Wbb1fFQuH_PIzU3Rllpuk_Pi4AKNMLc1fX7ujWFY8,1167
36
+ equiframe/destinations.py,sha256=wvpQK2K2MSfG-pizmvvXXx0FQb3mveh3PAJpep-g8ns,13333
37
+ equiframe/detector_types.py,sha256=nWVhAINTgJk1RutbY4CFHrKVdIJ7U3JUbc3SPd9HWWQ,17654
38
+ equiframe/detectors.py,sha256=9MAfL9Er3KLU4xvrM2PrbFbmD6eWWOblUggHqVreqPs,15098
39
+ equiframe/diff.py,sha256=I4ZDz3UpnOC9DbaDWU_p4fJlFCAYYANnr1jdtmG0BcA,8349
40
+ equiframe/diff_contracts.py,sha256=m8jkmdCK1qmbXum3BWYrvcf-tehEtIzm5Kcz47IB18w,19706
41
+ equiframe/duckdb_capture.py,sha256=mSTD5T5nuw3fqf_EL3QMI4VTtMZoLFFkJvUqgFKY8oc,18396
42
+ equiframe/errors.py,sha256=igK2Kts__WS_W_fS3hX6hlYjJHLLBlMm7a9KG0WnL60,1908
43
+ equiframe/evidence.py,sha256=Rj5xwEfZnwj2pPioE7kdNtwIK5L9SyRSQ2NldwKomFA,15420
44
+ equiframe/execution.py,sha256=DPtS32jI2F8BHj3-6LlfkxV6i54FlLzTzB_umTndOfw,14402
45
+ equiframe/execution_types.py,sha256=UHpYl21-1OmamF8AiGqmI3eU58ZQe2-qPWBdLv15zcM,6355
46
+ equiframe/ingestion.py,sha256=BkYGLm9mfm7j0igxrYWZaytkm3vr6LkPxTyKrgd_RyM,30992
47
+ equiframe/local.py,sha256=XbShMzixz--5c-ohOqpP81WlNU6ISJA2ohS1UoWCQ9o,5129
48
+ equiframe/normalization.py,sha256=G3NHd6pmp2Gt46t9i326ZBkDzUd1sltziDGwLEJF5l8,14230
49
+ equiframe/pipeline.py,sha256=-l2f3N6Hz4S5qJSX-thhhhf7yjVd9YUOVnO3jNWQdng,10125
50
+ equiframe/pipeline_types.py,sha256=uklhCUhj5pfkAk32T7uHYKl69pujoEShFqHF0rBN4QA,11341
51
+ equiframe/ports.py,sha256=6hlWNw6fXrA6ukBstOvjB_MjU4HIzQYQaNB9sHXLX6Q,1111
52
+ equiframe/preprocessing.py,sha256=8WQ097CmIFeiotTrxk01mi3RFQuAPQucZMVA7HkfSfU,4244
53
+ equiframe/profile_types.py,sha256=m4eUw_lhMLOwhjwvVHxYQPlyD4avmlwsUzjZHTn9e5E,13425
54
+ equiframe/profiles.py,sha256=oNX8-MXl9kH_UyJ7vSYLyM0EFIKYm88CCCyT0sX6CtA,19563
55
+ equiframe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ equiframe/r_review.py,sha256=B_fpn1bJqrKm43hrU2t0XCI3VTulEEXId35Otlo08_8,29708
57
+ equiframe/reduction.py,sha256=F6FT4fAegEGu6jIcfgB1___NcWLeU90P6SU7nGKLL_M,22612
58
+ equiframe/registry.py,sha256=Wmnkwm5EetYh2OMedhTvrmE9BVGKv_Vuk67rnjvv4UU,4480
59
+ equiframe/report_rendering.py,sha256=-vbXl6Wvxci9s49WnntyBjp8KJml3D_rv6q4LNAAF0U,14435
60
+ equiframe/report_types.py,sha256=Wywd6h08eqbOhLxY2LK0LDTlZtA9T-rJ9By3Mc3kjFQ,12215
61
+ equiframe/reporting.py,sha256=i3rCyPwhrmZjuPlKVnU2rPvxwjzP7jgNOoYRsDCs7jY,1109
62
+ equiframe/rule_types.py,sha256=o3ejBKz2dtj4AQfnBFfualpKvI0DxJlw-pPjHX5e-R8,7456
63
+ equiframe/rules.py,sha256=pAGwdZlxfHzbigV7VEbpZ9OzST_gae965rImvo30xX0,33070
64
+ equiframe/serialization.py,sha256=mOUvv1HVNGF0f0F-XQs8UK1GSxHxlxB3d_R1FFqjzUE,5744
65
+ equiframe/snapshot.py,sha256=zJrbHJUbFm2TydxO9gMi65SoZ9FOWjIK_IH_7Wlnf_8,12758
66
+ equiframe/sources.py,sha256=MyG46aG_WH8Gw8F4Aa5VAy0i0YV5nKbgPect6iLuNgs,12217
67
+ equiframe/tables.py,sha256=7o9gbrSLnnZOpY1RekmJprUubpFpw6fuZIOpbwn1Gpk,17865
68
+ equiframe/types.py,sha256=_xnMSrxLUc1YSAXu_09ZIuLzu1xWGyKby4PgJ5Xjf60,2802
69
+ equiframe/values.py,sha256=sco4-ukTMpD7pMTEvIqU9wYIvuA0723UL4LdcX8G6p4,8418
70
+ equiframe/verification_request.py,sha256=zpkF_OGxMyDRzYdcbRHyVpTU_h6ZPelt5TBucBgnWPQ,1407
71
+ equiframe/verify.py,sha256=7oO00czXupD7IckCiZz8tCpzLFwhbe6aVeWG3QGP24M,36848
72
+ equiframe/verify_types.py,sha256=gtoMq_Gvvim3KeIGHGKNKK22z7HMBCRKSZPIvEk1eVk,10145
73
+ equiframe/workflow.py,sha256=uRZQYhMOkv1zfIbD-KMqDsXQzBjtVpmWUe09tbQ3PKY,22611
74
+ equiframe/workflow_request.py,sha256=2MMenMiABScnP_6Ac_ki3YyeOnLsQv_2MIHlHN3V_lY,1468
75
+ equiframe/eda/__init__.py,sha256=9CF1BolC7TY61zNTSalduK-iOy9VskuisaWxJ0lcTAk,682
76
+ equiframe/eda/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30
77
+ equiframe/eda/_backend.py,sha256=hIhYlHS6vOQk3TgK_RRBrVEb0DgreSzQ5VncOHnmz9A,28058
78
+ equiframe/eda/_inventory.py,sha256=gHIRiJe7cfT4BY2kY3CKSGxgf51yTMGnPy2Xk9MKDcg,2250
79
+ equiframe/eda/_paths.py,sha256=ZenvsbO25v5gX2VGmDcprNWGLJvp7z46t_n1Zn_0czw,1808
80
+ equiframe/eda/_report.py,sha256=HvQmKbFq1mVrD0dAT2CCPJDbPI0qgWFLqpT2Fb5l334,11691
81
+ equiframe/eda/api.py,sha256=-bLAwi0mTsu-1In7iv2iknZHZ-03MRDjW_MuXCZgL2Y,23082
82
+ equiframe/eda/cli.py,sha256=ryc0oWHJiXlJA2EBMJ_djloHkF14QGLfxPO0T01XADU,3303
83
+ equiframe/eda/models.py,sha256=rcIrguFj_L5sGokiFrNAUjPWlM8kSuSJ0YWGccCcn2o,8651
84
+ equiframe/migration/__init__.py,sha256=HFU9Tzg4RiyheYXPuPIdWI-rFMK5ZiZaoe7dydHqKCY,1900
85
+ equiframe/migration/_physical.py,sha256=IPZ_9oyLA_rTfIPFjYipWboD_aRZXFB-HPQXYe_2uj4,378
86
+ equiframe/migration/io.py,sha256=pMIhBS4YV2RLXel0dmrFt5QgdFifwfW9xsdtKWB9B6A,9156
87
+ equiframe/migration/ports.py,sha256=e1HR9KLsQ9Ua6l5OOyv5XQUMDd1hE63o3YTMFl3Fqp8,3457
88
+ equiframe/migration/runner.py,sha256=txQ9I4rh13ev0tYPQwR6R62C_3E_uqsHQ2IN8iriPvE,22345
89
+ equiframe/migration/runner_types.py,sha256=N1KFKd0SvlQFq9uTXNrW66YoHAX6yPgNYCI_OHogBIE,17473
90
+ equiframe/migration/types.py,sha256=VVoDjoF6VvJ0vLBU-gtHnPIKCvCsgrvVUJ2itCwQ6Ms,9936
91
+ equiframe/migration/validation.py,sha256=c7ukEbviOjDBQyWsWRiaKiXKl_OpCsgeByitow2dpT0,27165
92
+ equiframe/migration/backends/_timestamp_transport.py,sha256=LN7LTKl1zwS41tdA7Nk8OqrV1C-RGqmAFoyx-uQYHq8,4201
93
+ equiframe/migration/backends/duckdb.py,sha256=KIw0R-xxaWNl0Kr_88zH3GzFmRbghu_JzQDJEvR_eTk,27865
94
+ equiframe/migration/backends/duckdb_decimal.py,sha256=4_-6X-qcUKYcs7pC49M0N4mYvRbNOr8yCkpxSTvdeFU,5416
95
+ equiframe/migration/backends/duckdb_time.py,sha256=_-rcs7pLHrvcOjWn4zLahoXbvgvzjFmqIJFfI8PMfjQ,4183
96
+ equiframe/migration/backends/pandas.py,sha256=hYoGySgtSOUD96TmuuWE-4nPMtV5pLFjQsw3wY7O4eA,25077
97
+ equiframe/migration/backends/polars.py,sha256=OWVmBTwsPo9tb1bVYFOKKFZEWC6ycbm4h29NuQ2rJZk,40194
98
+ equiframe/migration/backends/polars_decimal.py,sha256=E-qL1Ie23xtyil3LuksYkezqBZ7Qq6geHX_zA6ZeTvY,9049
99
+ equiframe/docs/adoption.md,sha256=aiAcxnRs4jcVwCMl1BdAunFsCB4GC_t8lcPSBpSWmFw,21415
100
+ equiframe/docs/api.md,sha256=QR7ByRL7Rx8uCd17w9eZf6bV5EaZj4iVdncxnh53rR8,30598
101
+ equiframe/docs/arquitecto.md,sha256=_Jal6mvYj1xvOXv1Ae2gZFT4fVPPrG0REqtE-xH8V5Y,7197
102
+ equiframe/docs/choosing-api.md,sha256=At8bX7-YaV31HFjWig-UikTcoR6hMXA4R4lfDeZKdOg,6509
103
+ equiframe/docs/cientifico.md,sha256=fUrr-6-fEcF63M23kDZKhkipx8kioagKKqcqj2vmokI,8166
104
+ equiframe/docs/compatibility.md,sha256=Vg7gVhWzgdNyyqXJNa7y5fkhEup68Z52UkTukC_OYAk,16295
105
+ equiframe/docs/contributing.md,sha256=1UDUf-DvclwqPZ8_Ou1BH3JXciUp65Tcc-McOzthEzE,9467
106
+ equiframe/docs/dependencies.md,sha256=Zr999WLnx75otsWaJk3xK9ftKnG1NKB6KnpqhSOXkPo,14237
107
+ equiframe/docs/eda.md,sha256=8YaRaJc8vF1TTiKNhUq4VQe6BWiGXBht8tAeWIBldB4,9470
108
+ equiframe/docs/extending.md,sha256=zeE31xvmuYlKrr9-KI-K0wVOnft6G_nTt_66iAjPDxs,9374
109
+ equiframe/docs/fast-ci.md,sha256=oEoOscwz7HPcKf65Icip9xsa0Za2vAWLPm0rwHjSL2E,2584
110
+ equiframe/docs/first-use.md,sha256=8AyxWAjasHtE1fSyxNZN2SzHAW7LFPjO5zLzOpL0kno,4253
111
+ equiframe/docs/index.md,sha256=fuaQfnvJgqcuoOYf1-BSju2ae93Va4ZhvLR8V2xbBgI,8450
112
+ equiframe/docs/ingestion.md,sha256=kxm9jvU6WvW9vDaIreVpEBpQiQmUAzQJ60sci32O9RU,7536
113
+ equiframe/docs/inicio.md,sha256=LKr195zXr3LLxtObBuTgr22dqpZ70FQIFcp596zNczg,6819
114
+ equiframe/docs/installed-private.md,sha256=8Pl-ainhdhfuI0tYQvn5ezYlmhx9lvIEJxs03NvuaxE,5153
115
+ equiframe/docs/journeys.md,sha256=pMoXnxnMMMOMj4dxgafhPjTspc4Rd38e8r33Cd67hMc,21293
116
+ equiframe/docs/lectura-conversion.md,sha256=9lqwEMfwxzsxLbQIWKBUiIFaYP2L7gGUEPupCE2uTN4,12231
117
+ equiframe/docs/licensing.md,sha256=dIQhr95T5XwvqFyI5jXi8slYIUF5oraXtpqfE4RdtRI,876
118
+ equiframe/docs/maintenance.md,sha256=NE1Abmijs_GF5CB51Y99jOpwKEIP9kaq0I3WI7-Rwfo,15420
119
+ equiframe/docs/migration-ir.md,sha256=QucJWqfunasCf_kMslaTNX60lZeuNteNjr29g3dl9kg,18097
120
+ equiframe/docs/option-audit.md,sha256=7Cq2vO163PIYJyQVpZTzt_YkyCJpfPZO1Dc5izMka2o,2534
121
+ equiframe/docs/outcome-gates.md,sha256=rN9YfShY3qCbHEul1jHA4CzsiN_Wo_h1kxpB8u6WLTM,8329
122
+ equiframe/docs/performance.md,sha256=eVRkZzLV3jOa7jndfNht4bsilIHXza74S3u90RCWX8c,15292
123
+ equiframe/docs/piloto-simulado.md,sha256=RpfkAN56y-FCVs55B0y6p18DRbi_fpK7eEg9Oi6L5jk,3374
124
+ equiframe/docs/quickstart.md,sha256=hKK65QBymw0x7QrmVce5XWhJxWrCthVZrKnRGFs1BL0,7359
125
+ equiframe/docs/r_review.md,sha256=GzIQWAeUsozCh3U_AtanBskxFJcvn_f5c4OvSXEQeQk,11682
126
+ equiframe/docs/recipes.md,sha256=9ur8kgEZfnEWs5sal145FomPWGDPffCOFQzt5DCCY-Y,12935
127
+ equiframe/docs/releasing.md,sha256=I8xb9JX5VzNGkx0cMWghl7U2gevOqfnxZfUezbpBB9s,10461
128
+ equiframe/docs/security.md,sha256=pCm5MN_oYw8ubqAMDZpHWstyFVgfZj572lPr4UBh79o,15271
129
+ equiframe/docs/semantics.md,sha256=shKdwftOkWYX8b4Qd1Z8ZuQcG1tmmI147x_U0A1wAHU,16624
130
+ equiframe/docs/sqlite-snapshots.md,sha256=M-S8cmt146PiAqty7uQtKsxMiOTlfTmqWMaSj7w32nA,13893
131
+ equiframe/docs/universal-sources.md,sha256=gEFbV9g_aDiIR9M8dZOnUTk5Im1deJdI0A3zTbBAX8s,3206
132
+ equiframe/docs/universalidad-cinco-pasos.md,sha256=5XWanHTp_e5WHJjSnrqmYFs-d6h_2GjWAzcaQ2-ogV4,6036
133
+ equiframe/docs/upgrading.md,sha256=3ovA4ZSPtpbE721AZzO51PNbF0_F1RkCj5-FUx_lpc8,31829
134
+ equiframe/_vendor/cyclonedx/LICENSE,sha256=bCnyKkpzhShcb1eeyfM8XpifAHOdayVyQ6CwguyUR64,11341
135
+ equiframe/_vendor/cyclonedx/PROVENANCE.md,sha256=RIh9vvF_cCzKQ0lnoB1rHSVeTOz0y3I1UimTrksGuow,1029
136
+ equiframe/_vendor/cyclonedx/bom-1.6.schema.json,sha256=PpLd28MM9_agK4DwlCsaTP1PscJvHfxDEK-p1hPK-5M,252625
137
+ equiframe/_vendor/cyclonedx/jsf-0.82.schema.json,sha256=i64ALCXnI9t-4fJq_eaArhorGo9rS0sP1l3DvssJCq4,8058
138
+ equiframe/_vendor/cyclonedx/spdx.schema.json,sha256=uqnTvR7Ve2dRsIh-3q1rUGP_U_90Kc-F1HbGyUrwFm4,14269
139
+ equiframe/examples/load_convert_compare.py,sha256=ERCy7PNcImZEGskBnbNBGpnZUdlo5p4ED9lQSnI2Ru0,3264
140
+ equiframe/schemas/r-execution-binding-1.0.schema.json,sha256=iBZOKK2Mguz4ZodVqu78-RfWAVqLPmO14gol9OPeZpw,1049
141
+ equiframe/schemas/r-review-binding-1.0.schema.json,sha256=CbNEQ-9NCR498u72jRQSyUKO4_nmEXiZ-g4MPmQUsIk,667
142
+ equiframe/schemas/r-review-options-1.0.schema.json,sha256=vbM7kOw2UV6A0QU_9S-t6aPDUhhqSMyDM4ZirpkSK8g,1010
143
+ equiframe/schemas/r-review-result-1.0.schema.json,sha256=LHrUhiu_P5fzHbVDtH6Ok0Xn4tEr_pujrOpHzL42K6E,4298
144
+ equiframe/schemas/reviewed-decision-1.0.schema.json,sha256=MxY6zuCYtb9C73iLRnw19hZx-Rxuw-K34DimUJee9hM,77533
145
+ equiframe/examples/integrations/eda_generic.py,sha256=LwghbMFnTI_pVDTuLU7lI3noXdJp-YAh-kpcRzV_Qwg,2162
146
+ equiframe/examples/integrations/outcome_gates.py,sha256=17T-Le9sFxABtHGLnWmYRYrJmmdthVeadHXLG56tAdc,3666
147
+ equiframe/examples/integrations/sqlite_snapshot.py,sha256=pcATjYki1lzCFB2uih7pXmmV1-K4zK4U2ObzAv7L4yg,10100
148
+ equiframe/examples/integrations/sqlite_snapshot_demo.py,sha256=qVGpO3wl7H50gcodj-l1U0r8HTmulwCa2qJe4ztuD6s,8371
149
+ equiframe/examples/integrations/universal_first_use.py,sha256=VzSn-lQENmbKperRDRbAZMEJySGBTZq8aRfMaIjuBII,10389
150
+ equiframe/examples/journeys/README.md,sha256=t_Ojax-kckrRSVbUsVmk0vQFrRuZQW_t2zOTTmQsXJc,1501
151
+ equiframe/examples/journeys/__init__.py,sha256=SWhddkfhCLfvVXXYj-jVKfznz2Wmvw5csgd-IUsuBDU,78
152
+ equiframe/examples/journeys/a_pandas_refactor.py,sha256=-V02DP-LhwokV4SeREowJGdzEvgVIGeeor8cZ1RKWJY,2921
153
+ equiframe/examples/journeys/b_native_migration.py,sha256=QeYUvnK8kMJGbI5pPFEbQR9dCcAenGkdEaJVafFQH9A,6479
154
+ equiframe/examples/journeys/c_retail_etl.py,sha256=N_E7QCHQu-1um12C6OKiLqXI-swOCvTkG8YP9MoKQDQ,18158
155
+ equiframe/examples/journeys/common.py,sha256=VA-9sfof9iEwqbVSyMkKYL7hODTbT5r_JFeMDM86ZbU,4760
156
+ equiframe/examples/journeys/d_financial_reconciliation.py,sha256=ilzFCvaIg2CP2ZHWqGuzN7tUIfxnbyGmoJXB801qI1g,3236
157
+ equiframe/examples/journeys/e_telemetry.py,sha256=k-51cSZUOTkZwLUnQ3oBv4pJOm4Rl85P1o29Ssseahs,4535
158
+ equiframe/examples/journeys/f_data_science_preparation.py,sha256=vym-y6uGLII3LVLic5-E6C_Xahz5UczsxFS69K_VAEQ,2874
159
+ equiframe/examples/journeys/g_external_snapshots.py,sha256=7prifgYfxwCvReKPC9qJRUjlIh64HMJt44bAqvkHVQQ,7187
160
+ equiframe/examples/journeys/h_portable_ci.py,sha256=keF2uj43y8vgGvro-_s4ctRkW12LJcPbssDc46a1Wk8,4960
161
+ equiframe/examples/journeys/requirements.lock,sha256=PndI_DA49ActhYiKlJjaQWPyCvx8Nvpb8Lwe_EX_-EM,19427
162
+ equiframe/examples/journeys/verify_journeys.py,sha256=3XLQLggIwdWrQrgSmIk6Oa-vxFO645ZGOkmeT8nE3xI,4092
163
+ equiframe-0.12.4.dist-info/METADATA,sha256=pSaqL6YDqCK2fW918TFLuFQo7SQ934wzm6senIlWI58,11765
164
+ equiframe-0.12.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
165
+ equiframe-0.12.4.dist-info/entry_points.txt,sha256=n60mVXeOZTh-sKjUrPlS9BuC1KaOlyln7U8NNAdJFl4,88
166
+ equiframe-0.12.4.dist-info/licenses/LICENSE,sha256=KbNEP-20dJmFziJl6wTjeU3TZvhJ-TBkOKnZJOeuGjA,1070
167
+ equiframe-0.12.4.dist-info/licenses/THIRD_PARTY_NOTICES.md,sha256=c3bCwtKF5ZYbAj_Z9LZP4HeSO_eDbmrAKaKEfP41JpI,1801
168
+ equiframe-0.12.4.dist-info/licenses/tools/cyclonedx/LICENSE,sha256=bCnyKkpzhShcb1eeyfM8XpifAHOdayVyQ6CwguyUR64,11341
169
+ equiframe-0.12.4.dist-info/licenses/tools/cyclonedx/PROVENANCE.md,sha256=RIh9vvF_cCzKQ0lnoB1rHSVeTOz0y3I1UimTrksGuow,1029
170
+ equiframe-0.12.4.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ equiframe = equiframe.cli:main
3
+ equiframe-eda = equiframe.eda.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hernán Troya
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,42 @@
1
+ # Third-party notices
2
+
3
+ EquiFrame's original code and accompanying project documentation, examples and
4
+ tools are licensed under MIT; see LICENSE. Third-party material retains its
5
+ original terms.
6
+
7
+ ## CycloneDX schemas
8
+
9
+ The source distribution includes these unmodified schemas under tools/cyclonedx;
10
+ the wheel includes the same files under equiframe/_vendor/cyclonedx:
11
+
12
+ - bom-1.6.schema.json
13
+ - spdx.schema.json
14
+ - jsf-0.82.schema.json
15
+
16
+ They come from the official CycloneDX specification, tag 1.6:
17
+ https://github.com/CycloneDX/specification/tree/1.6/schema
18
+
19
+ Their Apache License 2.0 is preserved in tools/cyclonedx/LICENSE. Provenance and
20
+ the original SHA-256 inventory remain in tools/cyclonedx/PROVENANCE.md. The
21
+ package's license files also carry this upstream license for redistribution.
22
+ MIT does not replace the schemas' Apache-2.0 terms.
23
+
24
+ ## External dependencies and data
25
+
26
+ Python dependencies and the external R runtime are separate installations;
27
+ their licenses remain their own. EquiFrame's MIT grant does not relicense them.
28
+ Downloaded datasets and the thesis manuscript are not part of this grant.
29
+
30
+ ### Optional legacy XLS reader
31
+
32
+ The optional `files` extra uses the separately installed `xlrd` package for
33
+ legacy XLS files. No xlrd source or binary is vendored in EquiFrame. The license
34
+ included with xlrd 2.0.2 contains both a later three-clause notice and an earlier
35
+ notice requiring attribution in advertising materials mentioning that software
36
+ and retention of the acknowledgement in redistributions:
37
+
38
+ > This product includes software developed by David Giffin <david@giffin.org>.
39
+
40
+ Preserve xlrd's complete upstream license and notices when redistributing it;
41
+ this acknowledgement does not replace either of its license texts. See
42
+ https://github.com/python-excel/xlrd/blob/2.0.2/LICENSE.