dataeval-flow 0.2.1__tar.gz → 0.2.3__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.
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/.gitignore +1 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/PKG-INFO +106 -28
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/README.md +102 -22
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/pyproject.toml +5 -12
- dataeval_flow-0.2.3/src/dataeval_flow/__main__.py +330 -0
- dataeval_flow-0.2.3/src/dataeval_flow/_env.py +74 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_logging.py +32 -15
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_version.py +2 -2
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/runner.py +100 -36
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflow/__init__.py +35 -3
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflow/orchestrator.py +55 -16
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/coverage/workflow.py +17 -2
- dataeval_flow-0.2.1/src/dataeval_flow/__main__.py +0 -197
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/LICENSE +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_coerce.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_discover.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_execution.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_introspect.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_item.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_registry.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_state.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_model/_undo.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_panes/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_panes/_config_pane.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_panes/_result_pane.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_panes/_task_pane.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_panes/_widgets.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_base.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_detail.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_model.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_pathpicker.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_section.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_screens/_settings.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_viewmodel/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_viewmodel/_builder_vm.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_viewmodel/_model_vm.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_viewmodel/_rendering.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_viewmodel/_result_vm.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/_viewmodel/_section_vm.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/app.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_app/cli.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/_encoding_cli.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/binning.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/cache.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/_loader.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/_merge.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/_models.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/_paths.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_dataset.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_extractor.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_metadata.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_preprocessor.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_task.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_view.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/config/schemas/_workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/dataset.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/embeddings.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/metadata.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/policy.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/preprocessing.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/preprocessors.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/py.typed +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/view.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflow/_text_report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflow/base.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/_common.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/_ontology.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/analysis/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/analysis/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/analysis/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/analysis/workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/cleaning/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/cleaning/_internal.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/cleaning/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/cleaning/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/cleaning/report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/cleaning/workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/coverage/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/coverage/ontology.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/coverage/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/coverage/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/coverage/report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/drift/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/drift/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/drift/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/drift/report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/drift/workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/ood/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/ood/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/ood/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/ood/report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/ood/workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/parameter_sweep/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/parameter_sweep/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/parameter_sweep/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/parameter_sweep/workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/prioritization/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/prioritization/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/prioritization/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/prioritization/report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/prioritization/workflow.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/splitting/__init__.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/splitting/outputs.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/splitting/params.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/splitting/report.py +0 -0
- {dataeval_flow-0.2.1 → dataeval_flow-0.2.3}/src/dataeval_flow/workflows/splitting/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: dataeval-flow
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: DataEval Workflows container for data evaluation
|
|
5
5
|
Project-URL: Homepage, https://github.com/aria-ml/dataeval-flow
|
|
6
6
|
Project-URL: Documentation, https://dataeval-flow.readthedocs.io/
|
|
@@ -19,7 +19,7 @@ Classifier: Topic :: Scientific/Engineering
|
|
|
19
19
|
Classifier: Typing :: Typed
|
|
20
20
|
Requires-Python: <3.15,>=3.10
|
|
21
21
|
Requires-Dist: click>=8.0
|
|
22
|
-
Requires-Dist: dataeval
|
|
22
|
+
Requires-Dist: dataeval>=1.1.1
|
|
23
23
|
Requires-Dist: datamaite[ic,od]==0.4.1
|
|
24
24
|
Requires-Dist: numpy>=1.24.2
|
|
25
25
|
Requires-Dist: pydantic>=2.0
|
|
@@ -49,11 +49,9 @@ Requires-Dist: onnx>=1.15; extra == 'onnx-cu130'
|
|
|
49
49
|
Requires-Dist: onnxruntime-gpu>=1.27; (python_version >= '3.11' and extra != 'onnx-cu126') and extra == 'onnx-cu130'
|
|
50
50
|
Requires-Dist: onnxruntime>=1.20; (python_version == '3.10' and extra != 'onnx-cu126') and extra == 'onnx-cu130'
|
|
51
51
|
Provides-Extra: ontology
|
|
52
|
-
Requires-Dist: dataeval[ontology]
|
|
52
|
+
Requires-Dist: dataeval[ontology]>=1.1.1; extra == 'ontology'
|
|
53
53
|
Provides-Extra: opencv
|
|
54
|
-
Requires-Dist: opencv-python-headless
|
|
55
|
-
Provides-Extra: opencv-fips
|
|
56
|
-
Requires-Dist: opencv-python-headless<4.13.0,>=4.8.0; extra == 'opencv-fips'
|
|
54
|
+
Requires-Dist: opencv-python-headless<4.13.0,>=4.8.0; extra == 'opencv'
|
|
57
55
|
Description-Content-Type: text/markdown
|
|
58
56
|
|
|
59
57
|
<!-- markdownlint-disable MD041 -->
|
|
@@ -192,7 +190,7 @@ docker pull harbor.jatic.net/aria/dataeval:cu126 # cpu / cu126 / cu130
|
|
|
192
190
|
**Pinned release channel** — immutable, version-tagged images cut from `v*` git tags. Use these for reproducible workloads.
|
|
193
191
|
|
|
194
192
|
```bash
|
|
195
|
-
docker pull harbor.jatic.net/aria/dataeval:0.1
|
|
193
|
+
docker pull harbor.jatic.net/aria/dataeval:0.2.1-cu126
|
|
196
194
|
```
|
|
197
195
|
|
|
198
196
|
**Verifying the signature** — every published image is signed with
|
|
@@ -215,17 +213,23 @@ commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu126`
|
|
|
215
213
|
|
|
216
214
|
## Requirements
|
|
217
215
|
|
|
218
|
-
| Requirement | Version
|
|
219
|
-
| ------------- |
|
|
220
|
-
| Docker | >= 20.10
|
|
221
|
-
| NVIDIA GPU | Any (for GPU mode)
|
|
222
|
-
| NVIDIA Driver | >=
|
|
223
|
-
| CUDA |
|
|
216
|
+
| Requirement | Version |
|
|
217
|
+
| ------------- | -------------------------------------------------------------- |
|
|
218
|
+
| Docker | >= 20.10 |
|
|
219
|
+
| NVIDIA GPU | Any (for GPU mode) |
|
|
220
|
+
| NVIDIA Driver | >= 525 for the `cu126` image; >= 580 for `cu130` (GPU mode) |
|
|
221
|
+
| CUDA | 12.6 (`cu126`) or 13.0 (`cu130`) — bundled in the image |
|
|
222
|
+
|
|
223
|
+
The CUDA runtime libraries ship inside the image via PyTorch and `onnxruntime-gpu`, so
|
|
224
|
+
the host needs only the NVIDIA driver and the NVIDIA Container Toolkit — no host CUDA
|
|
225
|
+
install. The driver floors above are the CUDA major versions' minimums: any driver from
|
|
226
|
+
the 525 series up runs a CUDA 12.x image under minor-version compatibility, and CUDA 13.0
|
|
227
|
+
requires a 580-series or newer driver.
|
|
224
228
|
|
|
225
229
|
### Verify GPU Access
|
|
226
230
|
|
|
227
231
|
```bash
|
|
228
|
-
docker run --rm --gpus all nvidia/cuda:
|
|
232
|
+
docker run --rm --gpus all nvidia/cuda:12.6.3-base-ubuntu24.04 nvidia-smi
|
|
229
233
|
```
|
|
230
234
|
|
|
231
235
|
## Volume Mounts
|
|
@@ -289,7 +293,10 @@ precedence over them (see [Input Precedence](#input-precedence) below).
|
|
|
289
293
|
|
|
290
294
|
No secret mounts or credentials are required — DataEval Flow uses no API keys,
|
|
291
295
|
tokens, or passwords. (`DATAEVAL_FLOW_VERSION` and `DATAEVAL_NOX_UV_EXTRAS_OVERRIDE`
|
|
292
|
-
are build-time only and are not read at run time.
|
|
296
|
+
are build-time only and are not read at run time. `UV_EXTRAS_OVERRIDE` and
|
|
297
|
+
`CONTAINER_MODE` are baked into the image by the build and read at run time by the
|
|
298
|
+
entrypoint, purely to label the help text and decide whether to run the GPU check —
|
|
299
|
+
neither is meant to be set by the caller.)
|
|
293
300
|
|
|
294
301
|
## Input Precedence
|
|
295
302
|
|
|
@@ -344,12 +351,20 @@ Dataset and model paths in config files are resolved relative to the data root (
|
|
|
344
351
|
|
|
345
352
|
## Dataset Formats
|
|
346
353
|
|
|
347
|
-
|
|
354
|
+
A `datasets` entry selects its loader with `format`:
|
|
355
|
+
|
|
356
|
+
| `format` | Structure | Split selection |
|
|
357
|
+
| -------------- | ------------------------------------------------------------- | ----------------------------------- |
|
|
358
|
+
| `huggingface` | HuggingFace arrow dataset or dataset dict | `split:` (omit for a single split) |
|
|
359
|
+
| `image_folder` | Directory of images, optionally one subdirectory per class | n/a |
|
|
360
|
+
| `coco` | COCO images plus a JSON annotation file | `annotations_file:` + `images_dir:` |
|
|
361
|
+
| `yolo` | Ultralytics root — `data.yaml` plus image/label trees | `split:` (omit to load every split) |
|
|
348
362
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
363
|
+
Both single-split datasets and multi-split dataset dicts are supported. In-memory MAITE
|
|
364
|
+
and TorchVision datasets are also accepted programmatically via `DatasetProtocolConfig`,
|
|
365
|
+
which is not serializable and so cannot be named in a config file. See the
|
|
366
|
+
[Run workflows in containers](https://dataeval-flow.readthedocs.io/en/latest/how_to/containerized_workflows.html)
|
|
367
|
+
guide for the full field list of each format.
|
|
353
368
|
|
|
354
369
|
## CPU Fallback
|
|
355
370
|
|
|
@@ -366,13 +381,53 @@ docker run \
|
|
|
366
381
|
|
|
367
382
|
## CLI Modes
|
|
368
383
|
|
|
369
|
-
DataEval Flow has
|
|
384
|
+
DataEval Flow has four modes:
|
|
385
|
+
|
|
386
|
+
| Command | Purpose |
|
|
387
|
+
| ------------------------- | ------------------------------------------------------------------- |
|
|
388
|
+
| `dataeval-flow [opts]` | Headless execution — for automation and CI/CD pipelines |
|
|
389
|
+
| `dataeval-flow app` | Interactive TUI dashboard — configure, execute, and view results |
|
|
390
|
+
| `dataeval-flow config` | Simple CLI config builder — create/edit configs without the TUI |
|
|
391
|
+
| `dataeval-flow encoding` | Write the metadata encoding descriptor a result was computed under |
|
|
392
|
+
| `dataeval-flow workflows` | List the available workflow types, or print one's parameter schema |
|
|
393
|
+
|
|
394
|
+
`dataeval-flow --version` reports the installed build — useful for pinning down
|
|
395
|
+
which image produced a result.
|
|
396
|
+
|
|
397
|
+
### Headless execution
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
# Every enabled task in the config
|
|
401
|
+
dataeval-flow --config params.yaml --data . --output ./results
|
|
402
|
+
|
|
403
|
+
# One task by name, whether or not the config marks it enabled
|
|
404
|
+
dataeval-flow --config params.yaml --task clean_my_data
|
|
405
|
+
|
|
406
|
+
# Several, in the order given
|
|
407
|
+
dataeval-flow --config params.yaml --task clean_my_data --task analyze_my_data
|
|
408
|
+
|
|
409
|
+
# Stop the pipeline when a finding breaches its health threshold
|
|
410
|
+
dataeval-flow --config params.yaml --output ./results --fail-on-warning
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
**Exit codes:** `0` when every task succeeded, `1` when any task failed. Health
|
|
414
|
+
warnings are reported but are not fatal unless you pass `--fail-on-warning`, which
|
|
415
|
+
turns them into an exit code of `1` as well. Every run's `result.json` carries a
|
|
416
|
+
`health` block per task (`status`, `warnings`, `findings`) so a pipeline can gate
|
|
417
|
+
on findings without parsing the text report.
|
|
418
|
+
|
|
419
|
+
### Workflow Discovery (`workflows`)
|
|
370
420
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
421
|
+
For images that ship without the TUI extra:
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
# What can this build run?
|
|
425
|
+
dataeval-flow workflows
|
|
426
|
+
dataeval-flow workflows --json
|
|
427
|
+
|
|
428
|
+
# What does a given workflow type accept?
|
|
429
|
+
dataeval-flow workflows data-cleaning
|
|
430
|
+
```
|
|
376
431
|
|
|
377
432
|
### Interactive TUI (`app`)
|
|
378
433
|
|
|
@@ -408,12 +463,35 @@ python -m dataeval_flow config --config /path/to/params.yaml
|
|
|
408
463
|
|
|
409
464
|
Configs can be saved as YAML or JSON.
|
|
410
465
|
|
|
466
|
+
### Encoding Descriptor (`encoding`)
|
|
467
|
+
|
|
468
|
+
Extract the metadata encoding descriptor from an archived `result.json` and write it
|
|
469
|
+
where it can be reviewed and committed, so a later dataset is cut the same way:
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
python -m dataeval_flow encoding output/results/result.json -o policy/factor_bins.json
|
|
473
|
+
python -m dataeval_flow encoding output/results/result.json --task clean_my_data
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
Reference the committed descriptor from a metadata policy's `encoding` field. A run with
|
|
477
|
+
`-o` already writes `results/encoding.json` beside its results; this command recovers one
|
|
478
|
+
from a result archived earlier. See
|
|
479
|
+
[Configure metadata binning](https://dataeval-flow.readthedocs.io/en/latest/how_to/configure_metadata_binning.html).
|
|
480
|
+
|
|
411
481
|
## Dependencies
|
|
412
482
|
|
|
483
|
+
Declared runtime dependencies:
|
|
484
|
+
|
|
413
485
|
- `dataeval` - Core evaluation library
|
|
414
|
-
- `datamaite` - MAITE protocol dataset loaders
|
|
415
|
-
- `maite` - MAITE protocol library
|
|
486
|
+
- `datamaite` - MAITE protocol dataset loaders (which brings in `maite` itself)
|
|
416
487
|
- `pydantic` - Structural typing and schema validation
|
|
488
|
+
- `click` - Interactive prompts for the simple CLI config builder
|
|
489
|
+
- `pyyaml` - YAML config parsing
|
|
490
|
+
- `numpy` - Array handling
|
|
491
|
+
|
|
492
|
+
PyTorch arrives transitively through `dataeval`. Optional extras (`onnx`, `opencv`,
|
|
493
|
+
`app`, `ontology`, and the CUDA variants) are listed under
|
|
494
|
+
[Running Without Container](#running-without-container).
|
|
417
495
|
|
|
418
496
|
## Troubleshooting
|
|
419
497
|
|
|
@@ -134,7 +134,7 @@ docker pull harbor.jatic.net/aria/dataeval:cu126 # cpu / cu126 / cu130
|
|
|
134
134
|
**Pinned release channel** — immutable, version-tagged images cut from `v*` git tags. Use these for reproducible workloads.
|
|
135
135
|
|
|
136
136
|
```bash
|
|
137
|
-
docker pull harbor.jatic.net/aria/dataeval:0.1
|
|
137
|
+
docker pull harbor.jatic.net/aria/dataeval:0.2.1-cu126
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
**Verifying the signature** — every published image is signed with
|
|
@@ -157,17 +157,23 @@ commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu126`
|
|
|
157
157
|
|
|
158
158
|
## Requirements
|
|
159
159
|
|
|
160
|
-
| Requirement | Version
|
|
161
|
-
| ------------- |
|
|
162
|
-
| Docker | >= 20.10
|
|
163
|
-
| NVIDIA GPU | Any (for GPU mode)
|
|
164
|
-
| NVIDIA Driver | >=
|
|
165
|
-
| CUDA |
|
|
160
|
+
| Requirement | Version |
|
|
161
|
+
| ------------- | -------------------------------------------------------------- |
|
|
162
|
+
| Docker | >= 20.10 |
|
|
163
|
+
| NVIDIA GPU | Any (for GPU mode) |
|
|
164
|
+
| NVIDIA Driver | >= 525 for the `cu126` image; >= 580 for `cu130` (GPU mode) |
|
|
165
|
+
| CUDA | 12.6 (`cu126`) or 13.0 (`cu130`) — bundled in the image |
|
|
166
|
+
|
|
167
|
+
The CUDA runtime libraries ship inside the image via PyTorch and `onnxruntime-gpu`, so
|
|
168
|
+
the host needs only the NVIDIA driver and the NVIDIA Container Toolkit — no host CUDA
|
|
169
|
+
install. The driver floors above are the CUDA major versions' minimums: any driver from
|
|
170
|
+
the 525 series up runs a CUDA 12.x image under minor-version compatibility, and CUDA 13.0
|
|
171
|
+
requires a 580-series or newer driver.
|
|
166
172
|
|
|
167
173
|
### Verify GPU Access
|
|
168
174
|
|
|
169
175
|
```bash
|
|
170
|
-
docker run --rm --gpus all nvidia/cuda:
|
|
176
|
+
docker run --rm --gpus all nvidia/cuda:12.6.3-base-ubuntu24.04 nvidia-smi
|
|
171
177
|
```
|
|
172
178
|
|
|
173
179
|
## Volume Mounts
|
|
@@ -231,7 +237,10 @@ precedence over them (see [Input Precedence](#input-precedence) below).
|
|
|
231
237
|
|
|
232
238
|
No secret mounts or credentials are required — DataEval Flow uses no API keys,
|
|
233
239
|
tokens, or passwords. (`DATAEVAL_FLOW_VERSION` and `DATAEVAL_NOX_UV_EXTRAS_OVERRIDE`
|
|
234
|
-
are build-time only and are not read at run time.
|
|
240
|
+
are build-time only and are not read at run time. `UV_EXTRAS_OVERRIDE` and
|
|
241
|
+
`CONTAINER_MODE` are baked into the image by the build and read at run time by the
|
|
242
|
+
entrypoint, purely to label the help text and decide whether to run the GPU check —
|
|
243
|
+
neither is meant to be set by the caller.)
|
|
235
244
|
|
|
236
245
|
## Input Precedence
|
|
237
246
|
|
|
@@ -286,12 +295,20 @@ Dataset and model paths in config files are resolved relative to the data root (
|
|
|
286
295
|
|
|
287
296
|
## Dataset Formats
|
|
288
297
|
|
|
289
|
-
|
|
298
|
+
A `datasets` entry selects its loader with `format`:
|
|
299
|
+
|
|
300
|
+
| `format` | Structure | Split selection |
|
|
301
|
+
| -------------- | ------------------------------------------------------------- | ----------------------------------- |
|
|
302
|
+
| `huggingface` | HuggingFace arrow dataset or dataset dict | `split:` (omit for a single split) |
|
|
303
|
+
| `image_folder` | Directory of images, optionally one subdirectory per class | n/a |
|
|
304
|
+
| `coco` | COCO images plus a JSON annotation file | `annotations_file:` + `images_dir:` |
|
|
305
|
+
| `yolo` | Ultralytics root — `data.yaml` plus image/label trees | `split:` (omit to load every split) |
|
|
290
306
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
307
|
+
Both single-split datasets and multi-split dataset dicts are supported. In-memory MAITE
|
|
308
|
+
and TorchVision datasets are also accepted programmatically via `DatasetProtocolConfig`,
|
|
309
|
+
which is not serializable and so cannot be named in a config file. See the
|
|
310
|
+
[Run workflows in containers](https://dataeval-flow.readthedocs.io/en/latest/how_to/containerized_workflows.html)
|
|
311
|
+
guide for the full field list of each format.
|
|
295
312
|
|
|
296
313
|
## CPU Fallback
|
|
297
314
|
|
|
@@ -308,13 +325,53 @@ docker run \
|
|
|
308
325
|
|
|
309
326
|
## CLI Modes
|
|
310
327
|
|
|
311
|
-
DataEval Flow has
|
|
328
|
+
DataEval Flow has four modes:
|
|
329
|
+
|
|
330
|
+
| Command | Purpose |
|
|
331
|
+
| ------------------------- | ------------------------------------------------------------------- |
|
|
332
|
+
| `dataeval-flow [opts]` | Headless execution — for automation and CI/CD pipelines |
|
|
333
|
+
| `dataeval-flow app` | Interactive TUI dashboard — configure, execute, and view results |
|
|
334
|
+
| `dataeval-flow config` | Simple CLI config builder — create/edit configs without the TUI |
|
|
335
|
+
| `dataeval-flow encoding` | Write the metadata encoding descriptor a result was computed under |
|
|
336
|
+
| `dataeval-flow workflows` | List the available workflow types, or print one's parameter schema |
|
|
337
|
+
|
|
338
|
+
`dataeval-flow --version` reports the installed build — useful for pinning down
|
|
339
|
+
which image produced a result.
|
|
340
|
+
|
|
341
|
+
### Headless execution
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Every enabled task in the config
|
|
345
|
+
dataeval-flow --config params.yaml --data . --output ./results
|
|
346
|
+
|
|
347
|
+
# One task by name, whether or not the config marks it enabled
|
|
348
|
+
dataeval-flow --config params.yaml --task clean_my_data
|
|
349
|
+
|
|
350
|
+
# Several, in the order given
|
|
351
|
+
dataeval-flow --config params.yaml --task clean_my_data --task analyze_my_data
|
|
352
|
+
|
|
353
|
+
# Stop the pipeline when a finding breaches its health threshold
|
|
354
|
+
dataeval-flow --config params.yaml --output ./results --fail-on-warning
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
**Exit codes:** `0` when every task succeeded, `1` when any task failed. Health
|
|
358
|
+
warnings are reported but are not fatal unless you pass `--fail-on-warning`, which
|
|
359
|
+
turns them into an exit code of `1` as well. Every run's `result.json` carries a
|
|
360
|
+
`health` block per task (`status`, `warnings`, `findings`) so a pipeline can gate
|
|
361
|
+
on findings without parsing the text report.
|
|
362
|
+
|
|
363
|
+
### Workflow Discovery (`workflows`)
|
|
312
364
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
365
|
+
For images that ship without the TUI extra:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
# What can this build run?
|
|
369
|
+
dataeval-flow workflows
|
|
370
|
+
dataeval-flow workflows --json
|
|
371
|
+
|
|
372
|
+
# What does a given workflow type accept?
|
|
373
|
+
dataeval-flow workflows data-cleaning
|
|
374
|
+
```
|
|
318
375
|
|
|
319
376
|
### Interactive TUI (`app`)
|
|
320
377
|
|
|
@@ -350,12 +407,35 @@ python -m dataeval_flow config --config /path/to/params.yaml
|
|
|
350
407
|
|
|
351
408
|
Configs can be saved as YAML or JSON.
|
|
352
409
|
|
|
410
|
+
### Encoding Descriptor (`encoding`)
|
|
411
|
+
|
|
412
|
+
Extract the metadata encoding descriptor from an archived `result.json` and write it
|
|
413
|
+
where it can be reviewed and committed, so a later dataset is cut the same way:
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
python -m dataeval_flow encoding output/results/result.json -o policy/factor_bins.json
|
|
417
|
+
python -m dataeval_flow encoding output/results/result.json --task clean_my_data
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
Reference the committed descriptor from a metadata policy's `encoding` field. A run with
|
|
421
|
+
`-o` already writes `results/encoding.json` beside its results; this command recovers one
|
|
422
|
+
from a result archived earlier. See
|
|
423
|
+
[Configure metadata binning](https://dataeval-flow.readthedocs.io/en/latest/how_to/configure_metadata_binning.html).
|
|
424
|
+
|
|
353
425
|
## Dependencies
|
|
354
426
|
|
|
427
|
+
Declared runtime dependencies:
|
|
428
|
+
|
|
355
429
|
- `dataeval` - Core evaluation library
|
|
356
|
-
- `datamaite` - MAITE protocol dataset loaders
|
|
357
|
-
- `maite` - MAITE protocol library
|
|
430
|
+
- `datamaite` - MAITE protocol dataset loaders (which brings in `maite` itself)
|
|
358
431
|
- `pydantic` - Structural typing and schema validation
|
|
432
|
+
- `click` - Interactive prompts for the simple CLI config builder
|
|
433
|
+
- `pyyaml` - YAML config parsing
|
|
434
|
+
- `numpy` - Array handling
|
|
435
|
+
|
|
436
|
+
PyTorch arrives transitively through `dataeval`. Optional extras (`onnx`, `opencv`,
|
|
437
|
+
`app`, `ontology`, and the CUDA variants) are listed under
|
|
438
|
+
[Running Without Container](#running-without-container).
|
|
359
439
|
|
|
360
440
|
## Troubleshooting
|
|
361
441
|
|
|
@@ -19,7 +19,7 @@ classifiers = [
|
|
|
19
19
|
]
|
|
20
20
|
dependencies = [
|
|
21
21
|
"click>=8.0",
|
|
22
|
-
"dataeval
|
|
22
|
+
"dataeval>=1.1.1",
|
|
23
23
|
"datamaite[ic,od]==0.4.1",
|
|
24
24
|
"numpy>=1.24.2",
|
|
25
25
|
"pydantic>=2.0",
|
|
@@ -51,10 +51,9 @@ onnx-cu130 = [
|
|
|
51
51
|
"onnxruntime>=1.20; python_version == '3.10' and extra != 'onnx-cu126'", # CUDA 13.0 is not supported on Python 3.10
|
|
52
52
|
"onnxruntime-gpu>=1.27; python_version >= '3.11' and extra != 'onnx-cu126'",
|
|
53
53
|
]
|
|
54
|
-
opencv = ["opencv-python-headless>=4.8.0"]
|
|
55
|
-
opencv-fips = ["opencv-python-headless>=4.8.0,<4.13.0"] # OpenCV 4.13 and higher are not FIPS compliant
|
|
54
|
+
opencv = ["opencv-python-headless>=4.8.0,<4.13.0"] # OpenCV 4.13 and higher are not FIPS compliant
|
|
56
55
|
app = ["textual>=3.0"]
|
|
57
|
-
ontology = ["dataeval[ontology]
|
|
56
|
+
ontology = ["dataeval[ontology]>=1.1.1"]
|
|
58
57
|
|
|
59
58
|
[project.urls]
|
|
60
59
|
Homepage = "https://github.com/aria-ml/dataeval-flow"
|
|
@@ -167,10 +166,6 @@ conflicts = [
|
|
|
167
166
|
{ extra = "onnx" },
|
|
168
167
|
{ extra = "onnx-cu126" },
|
|
169
168
|
{ extra = "onnx-cu130" },
|
|
170
|
-
],
|
|
171
|
-
[
|
|
172
|
-
{ extra = "opencv" },
|
|
173
|
-
{ extra = "opencv-fips" },
|
|
174
169
|
]
|
|
175
170
|
]
|
|
176
171
|
|
|
@@ -216,8 +211,6 @@ torch = { version = ">=2.2.0", source = "pytorch-cpu", optional = true }
|
|
|
216
211
|
torchvision = { version = ">=0.17.0", source = "pytorch-cpu", optional = true }
|
|
217
212
|
|
|
218
213
|
[tool.pyproject2conda.dependencies]
|
|
219
|
-
# Conda follows PEP versioning which deviates from PyPI semver
|
|
220
|
-
dataeval = { skip = true, packages = "dataeval==1.1.0rc6" }
|
|
221
214
|
datamaite = { pip = true }
|
|
222
215
|
|
|
223
216
|
# --- Build System ---
|
|
@@ -334,7 +327,7 @@ ignore = [
|
|
|
334
327
|
"C416",
|
|
335
328
|
]
|
|
336
329
|
fixable = ["ALL"]
|
|
337
|
-
per-file-ignores = { "tests/*" = ["ANN", "S101", "D", "SLF001", "ARG002", "PT019"], "docs/*" = ["D", "E402", "E501", "S101"], "verification/*" = ["ANN", "S101", "D", "SLF001", "ARG001", "ARG002", "PT011", "PT019"] }
|
|
330
|
+
per-file-ignores = { "tests/*" = ["ANN", "S101", "D", "SLF001", "ARG002", "PT019"], "docs/*" = ["D", "E402", "E501", "S101"], "verification/*" = ["ANN", "S101", "D", "SLF001", "ARG001", "ARG002", "PT011", "PT019"], "scripts/*" = ["C901", "D", "S"] }
|
|
338
331
|
|
|
339
332
|
[tool.ruff.lint.pydocstyle]
|
|
340
333
|
convention = "pep257"
|
|
@@ -349,5 +342,5 @@ indent-style = "space"
|
|
|
349
342
|
# --- Codespell ---
|
|
350
343
|
|
|
351
344
|
[tool.codespell]
|
|
352
|
-
skip = "./*env*,./output,./htmlcov,./.nox,*.lock,./docs/source/notebooks/*,./docker/cosign.pub,./docker/Dockerfile.*,*.onnx"
|
|
345
|
+
skip = "./*env*,./output,./specs,./htmlcov,./.nox,*.lock,./docs/source/notebooks/*,./docker/cosign.pub,./docker/Dockerfile.*,*.onnx"
|
|
353
346
|
ignore-words-list = ["statics"]
|