dataeval-flow 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. dataeval_flow-0.2.0/README.md → dataeval_flow-0.2.2/PKG-INFO +182 -44
  2. dataeval_flow-0.2.0/PKG-INFO → dataeval_flow-0.2.2/README.md +124 -96
  3. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/pyproject.toml +36 -23
  4. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/__main__.py +101 -1
  5. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_version.py +2 -2
  6. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_dataset.py +10 -0
  7. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/dataset.py +78 -15
  8. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/runner.py +100 -36
  9. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflow/__init__.py +35 -3
  10. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflow/orchestrator.py +55 -16
  11. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/.gitignore +0 -0
  12. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/LICENSE +0 -0
  13. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/__init__.py +0 -0
  14. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/__init__.py +0 -0
  15. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/__init__.py +0 -0
  16. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_coerce.py +0 -0
  17. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_discover.py +0 -0
  18. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_execution.py +0 -0
  19. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_introspect.py +0 -0
  20. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_item.py +0 -0
  21. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_registry.py +0 -0
  22. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_state.py +0 -0
  23. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_model/_undo.py +0 -0
  24. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_panes/__init__.py +0 -0
  25. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_panes/_config_pane.py +0 -0
  26. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_panes/_result_pane.py +0 -0
  27. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_panes/_task_pane.py +0 -0
  28. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_panes/_widgets.py +0 -0
  29. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/__init__.py +0 -0
  30. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_base.py +0 -0
  31. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_detail.py +0 -0
  32. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_model.py +0 -0
  33. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_params.py +0 -0
  34. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_pathpicker.py +0 -0
  35. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_section.py +0 -0
  36. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_screens/_settings.py +0 -0
  37. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_viewmodel/__init__.py +0 -0
  38. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_viewmodel/_builder_vm.py +0 -0
  39. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_viewmodel/_model_vm.py +0 -0
  40. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_viewmodel/_rendering.py +0 -0
  41. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_viewmodel/_result_vm.py +0 -0
  42. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/_viewmodel/_section_vm.py +0 -0
  43. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/app.py +0 -0
  44. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_app/cli.py +0 -0
  45. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_encoding_cli.py +0 -0
  46. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/_logging.py +0 -0
  47. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/binning.py +0 -0
  48. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/cache.py +0 -0
  49. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/__init__.py +0 -0
  50. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/_loader.py +0 -0
  51. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/_merge.py +0 -0
  52. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/_models.py +0 -0
  53. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/_paths.py +0 -0
  54. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/__init__.py +0 -0
  55. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_extractor.py +0 -0
  56. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_metadata.py +0 -0
  57. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_preprocessor.py +0 -0
  58. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_task.py +0 -0
  59. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_view.py +0 -0
  60. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/config/schemas/_workflow.py +0 -0
  61. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/embeddings.py +0 -0
  62. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/metadata.py +0 -0
  63. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/policy.py +0 -0
  64. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/preprocessing.py +0 -0
  65. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/preprocessors.py +0 -0
  66. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/py.typed +0 -0
  67. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/view.py +0 -0
  68. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflow/_text_report.py +0 -0
  69. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflow/base.py +0 -0
  70. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/__init__.py +0 -0
  71. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/_common.py +0 -0
  72. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/_ontology.py +0 -0
  73. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/analysis/__init__.py +0 -0
  74. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/analysis/outputs.py +0 -0
  75. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/analysis/params.py +0 -0
  76. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/analysis/workflow.py +0 -0
  77. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/cleaning/__init__.py +0 -0
  78. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/cleaning/_internal.py +0 -0
  79. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/cleaning/outputs.py +0 -0
  80. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/cleaning/params.py +0 -0
  81. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/cleaning/report.py +0 -0
  82. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/cleaning/workflow.py +0 -0
  83. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/coverage/__init__.py +0 -0
  84. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/coverage/ontology.py +0 -0
  85. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/coverage/outputs.py +0 -0
  86. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/coverage/params.py +0 -0
  87. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/coverage/report.py +0 -0
  88. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/coverage/workflow.py +0 -0
  89. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/drift/__init__.py +0 -0
  90. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/drift/outputs.py +0 -0
  91. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/drift/params.py +0 -0
  92. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/drift/report.py +0 -0
  93. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/drift/workflow.py +0 -0
  94. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/ood/__init__.py +0 -0
  95. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/ood/outputs.py +0 -0
  96. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/ood/params.py +0 -0
  97. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/ood/report.py +0 -0
  98. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/ood/workflow.py +0 -0
  99. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/parameter_sweep/__init__.py +0 -0
  100. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/parameter_sweep/outputs.py +0 -0
  101. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/parameter_sweep/params.py +0 -0
  102. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/parameter_sweep/workflow.py +0 -0
  103. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/prioritization/__init__.py +0 -0
  104. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/prioritization/outputs.py +0 -0
  105. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/prioritization/params.py +0 -0
  106. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/prioritization/report.py +0 -0
  107. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/prioritization/workflow.py +0 -0
  108. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/splitting/__init__.py +0 -0
  109. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/splitting/outputs.py +0 -0
  110. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/splitting/params.py +0 -0
  111. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/splitting/report.py +0 -0
  112. {dataeval_flow-0.2.0 → dataeval_flow-0.2.2}/src/dataeval_flow/workflows/splitting/workflow.py +0 -0
@@ -1,3 +1,61 @@
1
+ Metadata-Version: 2.5
2
+ Name: dataeval-flow
3
+ Version: 0.2.2
4
+ Summary: DataEval Workflows container for data evaluation
5
+ Project-URL: Homepage, https://github.com/aria-ml/dataeval-flow
6
+ Project-URL: Documentation, https://dataeval-flow.readthedocs.io/
7
+ Project-URL: Repository, https://github.com/aria-ml/dataeval-flow
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Classifier: Typing :: Typed
20
+ Requires-Python: <3.15,>=3.10
21
+ Requires-Dist: click>=8.0
22
+ Requires-Dist: dataeval>=1.1.0
23
+ Requires-Dist: datamaite[ic,od]==0.4.1
24
+ Requires-Dist: numpy>=1.24.2
25
+ Requires-Dist: pydantic>=2.0
26
+ Requires-Dist: pyyaml>=6.0
27
+ Provides-Extra: app
28
+ Requires-Dist: textual>=3.0; extra == 'app'
29
+ Provides-Extra: cpu
30
+ Requires-Dist: torch>=2.2.0; extra == 'cpu'
31
+ Requires-Dist: torchvision>=0.17.0; extra == 'cpu'
32
+ Provides-Extra: cu126
33
+ Requires-Dist: torch>=2.2.0; extra == 'cu126'
34
+ Requires-Dist: torchvision>=0.17.0; extra == 'cu126'
35
+ Provides-Extra: cu130
36
+ Requires-Dist: torch>=2.2.0; extra == 'cu130'
37
+ Requires-Dist: torchvision>=0.17.0; extra == 'cu130'
38
+ Provides-Extra: onnx
39
+ Requires-Dist: onnx>=1.15; extra == 'onnx'
40
+ Requires-Dist: onnxruntime<1.24,>=1.20; (python_version == '3.10') and extra == 'onnx'
41
+ Requires-Dist: onnxruntime>=1.20; (python_version >= '3.11') and extra == 'onnx'
42
+ Provides-Extra: onnx-cu126
43
+ Requires-Dist: onnx>=1.15; extra == 'onnx-cu126'
44
+ Requires-Dist: onnxruntime-gpu<1.24,>=1.20; (python_version == '3.10' and extra != 'onnx-cu130') and extra == 'onnx-cu126'
45
+ Requires-Dist: onnxruntime-gpu<1.27,>=1.20; (python_version >= '3.11' and extra != 'onnx-cu130') and extra == 'onnx-cu126'
46
+ Requires-Dist: onnxruntime-gpu<1.27,>=1.24; (python_version >= '3.14' and extra != 'onnx-cu130') and extra == 'onnx-cu126'
47
+ Provides-Extra: onnx-cu130
48
+ Requires-Dist: onnx>=1.15; extra == 'onnx-cu130'
49
+ Requires-Dist: onnxruntime-gpu>=1.27; (python_version >= '3.11' and extra != 'onnx-cu126') and extra == 'onnx-cu130'
50
+ Requires-Dist: onnxruntime>=1.20; (python_version == '3.10' and extra != 'onnx-cu126') and extra == 'onnx-cu130'
51
+ Provides-Extra: ontology
52
+ Requires-Dist: dataeval[ontology]==1.1.0; extra == 'ontology'
53
+ Provides-Extra: opencv
54
+ Requires-Dist: opencv-python-headless>=4.8.0; extra == 'opencv'
55
+ Provides-Extra: opencv-fips
56
+ Requires-Dist: opencv-python-headless<4.13.0,>=4.8.0; extra == 'opencv-fips'
57
+ Description-Content-Type: text/markdown
58
+
1
59
  <!-- markdownlint-disable MD041 -->
2
60
  ![DataEval Flow](docs/source/_static/images/DataEvalFlow_Logo.png)
3
61
 
@@ -66,8 +124,8 @@ The guidance below applies to both the container and the Python-library forms.
66
124
 
67
125
  DataEval Flow is developed and tested on Linux (Ubuntu 22.04 and 24.04, including
68
126
  WSL2). The Python package supports **Python 3.10–3.14**; the CI test matrix runs
69
- all five. The container images are built on Ubuntu 22.04 (cu118) and
70
- Ubuntu 24.04 (cpu, cu128). macOS and Windows are supported only through Docker or
127
+ all five. The container images are all built on Ubuntu 24.04 (cpu, cu126, cu130).
128
+ macOS and Windows are supported only through Docker or
71
129
  WSL2 and are not part of the CI test matrix — if you hit an issue on those hosts,
72
130
  the OS/hardware may be the root cause.
73
131
 
@@ -106,17 +164,17 @@ at least the minimum CPU/memory above; size memory to your largest dataset.
106
164
  ## Quick Start
107
165
 
108
166
  ```bash
109
- # 1. Build CUDA 11.8 container
110
- docker build -f docker/Dockerfile.cu118 -t dataeval:cu118 .
167
+ # 1. Build CUDA 12.6 container
168
+ docker build -f docker/Dockerfile.cu126 -t dataeval:cu126 .
111
169
 
112
170
  # 2. Show help
113
- docker run dataeval:cu118
171
+ docker run dataeval:cu126
114
172
 
115
173
  # 3. Run with data and output
116
174
  docker run --gpus all \
117
175
  --mount type=bind,source=/path/to/data,target=/dataeval,readonly \
118
176
  --mount type=bind,source=/path/to/output,target=/output \
119
- dataeval:cu118
177
+ dataeval:cu126
120
178
  ```
121
179
 
122
180
  ## Pulling pre-built images
@@ -128,13 +186,13 @@ if you don't need to modify the code.
128
186
  **Rolling channel** — tracks the latest commit on `main`. The tag is overwritten on every merge.
129
187
 
130
188
  ```bash
131
- docker pull harbor.jatic.net/aria/dataeval:cu118 # cpu / cu118 / cu128
189
+ docker pull harbor.jatic.net/aria/dataeval:cu126 # cpu / cu126 / cu130
132
190
  ```
133
191
 
134
192
  **Pinned release channel** — immutable, version-tagged images cut from `v*` git tags. Use these for reproducible workloads.
135
193
 
136
194
  ```bash
137
- docker pull harbor.jatic.net/aria/dataeval:0.1.0-cu118
195
+ docker pull harbor.jatic.net/aria/dataeval:0.2.1-cu126
138
196
  ```
139
197
 
140
198
  **Verifying the signature** — every published image is signed with
@@ -142,11 +200,11 @@ docker pull harbor.jatic.net/aria/dataeval:0.1.0-cu118
142
200
  [docker/cosign.pub](docker/cosign.pub).
143
201
 
144
202
  ```bash
145
- cosign verify --key docker/cosign.pub harbor.jatic.net/aria/dataeval:cu118
203
+ cosign verify --key docker/cosign.pub harbor.jatic.net/aria/dataeval:cu126
146
204
  ```
147
205
 
148
- Then drop the `dataeval:cu118` reference in the Quick Start `docker run`
149
- commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu118`
206
+ Then drop the `dataeval:cu126` reference in the Quick Start `docker run`
207
+ commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu126`
150
208
  (or pinned version) and skip step 1.
151
209
 
152
210
  > **Note on feature branches.** Containers are only built and published from
@@ -157,17 +215,23 @@ commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu118`
157
215
 
158
216
  ## Requirements
159
217
 
160
- | Requirement | Version |
161
- | ------------- | --------------------- |
162
- | Docker | >= 20.10 |
163
- | NVIDIA GPU | Any (for GPU mode) |
164
- | NVIDIA Driver | >= 520 (for GPU mode) |
165
- | CUDA | 11.8.0 (for GPU mode) |
218
+ | Requirement | Version |
219
+ | ------------- | -------------------------------------------------------------- |
220
+ | Docker | >= 20.10 |
221
+ | NVIDIA GPU | Any (for GPU mode) |
222
+ | NVIDIA Driver | >= 525 for the `cu126` image; >= 580 for `cu130` (GPU mode) |
223
+ | CUDA | 12.6 (`cu126`) or 13.0 (`cu130`) bundled in the image |
224
+
225
+ The CUDA runtime libraries ship inside the image via PyTorch and `onnxruntime-gpu`, so
226
+ the host needs only the NVIDIA driver and the NVIDIA Container Toolkit — no host CUDA
227
+ install. The driver floors above are the CUDA major versions' minimums: any driver from
228
+ the 525 series up runs a CUDA 12.x image under minor-version compatibility, and CUDA 13.0
229
+ requires a 580-series or newer driver.
166
230
 
167
231
  ### Verify GPU Access
168
232
 
169
233
  ```bash
170
- docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
234
+ docker run --rm --gpus all nvidia/cuda:12.6.3-base-ubuntu24.04 nvidia-smi
171
235
  ```
172
236
 
173
237
  ## Volume Mounts
@@ -193,7 +257,7 @@ docker run --gpus all \
193
257
  --user "$(id -u):$(id -g)" \
194
258
  --mount type=bind,source=/path/to/data,target=/dataeval,readonly \
195
259
  --mount type=bind,source=/path/to/output,target=/output \
196
- dataeval:cu118
260
+ dataeval:cu126
197
261
  ```
198
262
 
199
263
  #### Option 2: Open directory permissions
@@ -215,7 +279,7 @@ docker run --gpus all \
215
279
  -e DATAEVAL_DATA=/data \
216
280
  --mount type=bind,source=/path/to/data,target=/data,readonly \
217
281
  --mount type=bind,source=/path/to/output,target=/output \
218
- dataeval:cu118
282
+ dataeval:cu126
219
283
  ```
220
284
 
221
285
  ## Environment Variables
@@ -231,7 +295,10 @@ precedence over them (see [Input Precedence](#input-precedence) below).
231
295
 
232
296
  No secret mounts or credentials are required — DataEval Flow uses no API keys,
233
297
  tokens, or passwords. (`DATAEVAL_FLOW_VERSION` and `DATAEVAL_NOX_UV_EXTRAS_OVERRIDE`
234
- are build-time only and are not read at run time.)
298
+ are build-time only and are not read at run time. `UV_EXTRAS_OVERRIDE` and
299
+ `CONTAINER_MODE` are baked into the image by the build and read at run time by the
300
+ entrypoint, purely to label the help text and decide whether to run the GPU check —
301
+ neither is meant to be set by the caller.)
235
302
 
236
303
  ## Input Precedence
237
304
 
@@ -253,7 +320,7 @@ options, precedence, and examples — via its help command, which is also the
253
320
  default when the container runs with no pipeline arguments:
254
321
 
255
322
  ```bash
256
- docker run dataeval:cu118 --help
323
+ docker run dataeval:cu126 --help
257
324
  ```
258
325
 
259
326
  The library form exposes the same options via `python -m dataeval_flow --help`.
@@ -273,25 +340,33 @@ To specify a config path explicitly:
273
340
  docker run --gpus all \
274
341
  --mount type=bind,source=/path/to/data,target=/dataeval,readonly \
275
342
  --mount type=bind,source=/path/to/output,target=/output \
276
- dataeval:cu118 --config config/
343
+ dataeval:cu126 --config config/
277
344
 
278
345
  # Single config file
279
346
  docker run --gpus all \
280
347
  --mount type=bind,source=/path/to/data,target=/dataeval,readonly \
281
348
  --mount type=bind,source=/path/to/output,target=/output \
282
- dataeval:cu118 --config params.yaml
349
+ dataeval:cu126 --config params.yaml
283
350
  ```
284
351
 
285
352
  Dataset and model paths in config files are resolved relative to the data root (`/dataeval` by default).
286
353
 
287
354
  ## Dataset Formats
288
355
 
289
- Currently supported dataset structures:
356
+ A `datasets` entry selects its loader with `format`:
290
357
 
291
- | Format | Structure | Example |
292
- | --------------- | -------------------------------------------------- | --------------- |
293
- | **Dataset** | Single split, used directly | `cifar10_test/` |
294
- | **DatasetDict** | Multiple splits (dict), configured via config YAML | `cifar10_full/` |
358
+ | `format` | Structure | Split selection |
359
+ | -------------- | ------------------------------------------------------------- | ---------------------------------- |
360
+ | `huggingface` | HuggingFace arrow dataset or dataset dict | `split:` (omit for a single split) |
361
+ | `image_folder` | Directory of images, optionally one subdirectory per class | n/a |
362
+ | `coco` | COCO images plus a JSON annotation file | `annotations_file:` + `images_dir:` |
363
+ | `yolo` | Ultralytics root — `data.yaml` plus image/label trees | `split:` (omit to load every split) |
364
+
365
+ Both single-split datasets and multi-split dataset dicts are supported. In-memory MAITE
366
+ and TorchVision datasets are also accepted programmatically via `DatasetProtocolConfig`,
367
+ which is not serializable and so cannot be named in a config file. See the
368
+ [Run workflows in containers](https://dataeval-flow.readthedocs.io/en/latest/how_to/containerized_workflows.html)
369
+ guide for the full field list of each format.
295
370
 
296
371
  ## CPU Fallback
297
372
 
@@ -308,13 +383,53 @@ docker run \
308
383
 
309
384
  ## CLI Modes
310
385
 
311
- DataEval Flow has three modes:
386
+ DataEval Flow has four modes:
387
+
388
+ | Command | Purpose |
389
+ | ------------------------- | ------------------------------------------------------------------- |
390
+ | `dataeval-flow [opts]` | Headless execution — for automation and CI/CD pipelines |
391
+ | `dataeval-flow app` | Interactive TUI dashboard — configure, execute, and view results |
392
+ | `dataeval-flow config` | Simple CLI config builder — create/edit configs without the TUI |
393
+ | `dataeval-flow encoding` | Write the metadata encoding descriptor a result was computed under |
394
+ | `dataeval-flow workflows` | List the available workflow types, or print one's parameter schema |
395
+
396
+ `dataeval-flow --version` reports the installed build — useful for pinning down
397
+ which image produced a result.
398
+
399
+ ### Headless execution
400
+
401
+ ```bash
402
+ # Every enabled task in the config
403
+ dataeval-flow --config params.yaml --data . --output ./results
404
+
405
+ # One task by name, whether or not the config marks it enabled
406
+ dataeval-flow --config params.yaml --task clean_my_data
407
+
408
+ # Several, in the order given
409
+ dataeval-flow --config params.yaml --task clean_my_data --task analyze_my_data
410
+
411
+ # Stop the pipeline when a finding breaches its health threshold
412
+ dataeval-flow --config params.yaml --output ./results --fail-on-warning
413
+ ```
414
+
415
+ **Exit codes:** `0` when every task succeeded, `1` when any task failed. Health
416
+ warnings are reported but are not fatal unless you pass `--fail-on-warning`, which
417
+ turns them into an exit code of `1` as well. Every run's `result.json` carries a
418
+ `health` block per task (`status`, `warnings`, `findings`) so a pipeline can gate
419
+ on findings without parsing the text report.
312
420
 
313
- | Command | Purpose |
314
- | ---------------------- | ---------------------------------------------------------------- |
315
- | `dataeval-flow [opts]` | Headless execution for automation and CI/CD pipelines |
316
- | `dataeval-flow app` | Interactive TUI dashboard — configure, execute, and view results |
317
- | `dataeval-flow config` | Simple CLI config builder — create/edit configs without the TUI |
421
+ ### Workflow Discovery (`workflows`)
422
+
423
+ For images that ship without the TUI extra:
424
+
425
+ ```bash
426
+ # What can this build run?
427
+ dataeval-flow workflows
428
+ dataeval-flow workflows --json
429
+
430
+ # What does a given workflow type accept?
431
+ dataeval-flow workflows data-cleaning
432
+ ```
318
433
 
319
434
  ### Interactive TUI (`app`)
320
435
 
@@ -350,12 +465,35 @@ python -m dataeval_flow config --config /path/to/params.yaml
350
465
 
351
466
  Configs can be saved as YAML or JSON.
352
467
 
468
+ ### Encoding Descriptor (`encoding`)
469
+
470
+ Extract the metadata encoding descriptor from an archived `result.json` and write it
471
+ where it can be reviewed and committed, so a later dataset is cut the same way:
472
+
473
+ ```bash
474
+ python -m dataeval_flow encoding output/results/result.json -o policy/factor_bins.json
475
+ python -m dataeval_flow encoding output/results/result.json --task clean_my_data
476
+ ```
477
+
478
+ Reference the committed descriptor from a metadata policy's `encoding` field. A run with
479
+ `-o` already writes `results/encoding.json` beside its results; this command recovers one
480
+ from a result archived earlier. See
481
+ [Configure metadata binning](https://dataeval-flow.readthedocs.io/en/latest/how_to/configure_metadata_binning.html).
482
+
353
483
  ## Dependencies
354
484
 
485
+ Declared runtime dependencies:
486
+
355
487
  - `dataeval` - Core evaluation library
356
- - `datamaite` - MAITE protocol dataset loaders
357
- - `maite` - MAITE protocol library
488
+ - `datamaite` - MAITE protocol dataset loaders (which brings in `maite` itself)
358
489
  - `pydantic` - Structural typing and schema validation
490
+ - `click` - Interactive prompts for the simple CLI config builder
491
+ - `pyyaml` - YAML config parsing
492
+ - `numpy` - Array handling
493
+
494
+ PyTorch arrives transitively through `dataeval`. Optional extras (`onnx`, `opencv`,
495
+ `app`, `ontology`, and the CUDA variants) are listed under
496
+ [Running Without Container](#running-without-container).
359
497
 
360
498
  ## Troubleshooting
361
499
 
@@ -392,8 +530,8 @@ DataEval Flow — it accepts the build already present (omit step 1 and you'll g
392
530
  CUDA-bundled manylinux build of torch from PyPI, which is much larger):
393
531
 
394
532
  ```bash
395
- # 1. Pick your PyTorch build (cpu / cu118 / cu128)
396
- pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128
533
+ # 1. Pick your PyTorch build (cpu / cu126 / cu130)
534
+ pip install torch torchvision --index-url https://download.pytorch.org/whl/cu130
397
535
 
398
536
  # 2. Install DataEval Flow
399
537
  pip install dataeval-flow
@@ -411,14 +549,14 @@ pip install dataeval-flow
411
549
  `torchvision` is not installed by default — it is imported lazily and is only needed
412
550
  for preprocessing pipelines, the torchvision dataset adapter, and the TUI's transform
413
551
  discovery. Install it together with `torch` in step 1 so both come from the same index.
414
- Feature extras (`onnx`, `onnx-gpu`, `opencv`, `app`, `ontology`) work normally under
552
+ Feature extras (`onnx`, `onnx-cu126`, `onnx-cu130`, `opencv`, `opencv-fips`, `app`, `ontology`) work normally under
415
553
  pip and are independent of the PyTorch variant:
416
554
 
417
555
  ```bash
418
556
  pip install "dataeval-flow[onnx,opencv,app]"
419
557
  ```
420
558
 
421
- > **The `cpu` / `cu118` / `cu128` extras do not select a PyTorch variant under pip.**
559
+ > **The `cpu` / `cu126` / `cu130` extras do not select a PyTorch variant under pip.**
422
560
  > All three declare the same requirements (`torch`, `torchvision`); what distinguishes
423
561
  > them is `[tool.uv.sources]`, which routes those packages to the right wheel index.
424
562
  > That is project metadata applied by uv when resolving **from source** — it is not
@@ -429,7 +567,7 @@ pip install "dataeval-flow[onnx,opencv,app]"
429
567
  `uv` from PyPI:
430
568
 
431
569
  ```bash
432
- uv pip install dataeval-flow --torch-backend cpu # or cu118 / cu128 / auto
570
+ uv pip install dataeval-flow --torch-backend cpu # or cu126 / cu130 / auto
433
571
  ```
434
572
 
435
573
  `uv` from source (default toolchain; uses committed `uv.lock`) — extras apply here:
@@ -437,7 +575,7 @@ uv pip install dataeval-flow --torch-backend cpu # or cu118 / cu128 / auto
437
575
  ```bash
438
576
  git clone https://github.com/aria-ml/dataeval-flow.git
439
577
  cd dataeval-flow
440
- uv sync --extra cpu # or cu118 / cu128; add --extra onnx --extra opencv --extra app as needed
578
+ uv sync --extra cpu # or cu126 / cu130; add --extra onnx --extra opencv --extra app as needed
441
579
  ```
442
580
 
443
581
  `poetry` (source checkout; uses committed `poetry.lock`):
@@ -462,7 +600,7 @@ Notes:
462
600
 
463
601
  - PyTorch is installed from PyPI/`download.pytorch.org` in every path
464
602
  (it is no longer maintained on conda-forge).
465
- - GPU variants (`cu118`, `cu128`) are only wired through `uv` and
603
+ - GPU variants (`cu126`, `cu130`) are only wired through `uv` and
466
604
  `pip` today; the Poetry/conda paths install the CPU build of PyTorch.
467
605
 
468
606
  **CLI Usage:**