dataeval-flow 0.1.0__tar.gz → 0.1.1__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.1.0 → dataeval_flow-0.1.1}/.gitignore +3 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/PKG-INFO +139 -21
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/README.md +131 -3
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/pyproject.toml +61 -29
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/__init__.py +17 -1
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/__main__.py +9 -1
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_state.py +1 -1
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_base.py +2 -2
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_params.py +2 -2
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_section.py +3 -3
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/app.py +3 -2
- dataeval_flow-0.1.1/src/dataeval_flow/_logging.py +158 -0
- dataeval_flow-0.1.1/src/dataeval_flow/_version.py +24 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/cache.py +30 -33
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/__init__.py +8 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/_loader.py +3 -3
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/_merge.py +7 -5
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/__init__.py +6 -1
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_task.py +4 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_workflow.py +20 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/dataset.py +10 -10
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/embeddings.py +2 -2
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/preprocessing.py +7 -5
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/runner.py +7 -7
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflow/__init__.py +5 -3
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflow/orchestrator.py +22 -10
- dataeval_flow-0.1.1/src/dataeval_flow/workflows/cleaning/_internal.py +135 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/cleaning/workflow.py +38 -198
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/drift/workflow.py +19 -19
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/ood/workflow.py +25 -25
- dataeval_flow-0.1.1/src/dataeval_flow/workflows/parameter_sweep/__init__.py +5 -0
- dataeval_flow-0.1.1/src/dataeval_flow/workflows/parameter_sweep/outputs.py +50 -0
- dataeval_flow-0.1.1/src/dataeval_flow/workflows/parameter_sweep/params.py +64 -0
- dataeval_flow-0.1.1/src/dataeval_flow/workflows/parameter_sweep/workflow.py +359 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/prioritization/workflow.py +15 -15
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/splitting/workflow.py +10 -10
- dataeval_flow-0.1.0/src/dataeval_flow/_logging.py +0 -102
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/LICENSE +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_coerce.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_discover.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_execution.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_introspect.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_item.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_registry.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_model/_undo.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_panes/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_panes/_config_pane.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_panes/_result_pane.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_panes/_task_pane.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_panes/_widgets.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_detail.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_model.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_pathpicker.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_screens/_settings.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_viewmodel/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_viewmodel/_builder_vm.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_viewmodel/_model_vm.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_viewmodel/_rendering.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_viewmodel/_result_vm.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/_viewmodel/_section_vm.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/_app/cli.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/_models.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/_paths.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_dataset.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_extractor.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_metadata.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_preprocessor.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/config/schemas/_selection.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/metadata.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/py.typed +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/selection.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflow/_text_report.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflow/base.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/analysis/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/analysis/outputs.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/analysis/params.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/analysis/workflow.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/cleaning/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/cleaning/outputs.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/cleaning/params.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/cleaning/report.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/drift/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/drift/outputs.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/drift/params.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/drift/report.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/ood/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/ood/outputs.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/ood/params.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/ood/report.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/prioritization/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/prioritization/outputs.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/prioritization/params.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/prioritization/report.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/splitting/__init__.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/splitting/outputs.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/splitting/params.py +0 -0
- {dataeval_flow-0.1.0 → dataeval_flow-0.1.1}/src/dataeval_flow/workflows/splitting/report.py +0 -0
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataeval-flow
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: DataEval Workflows container for data evaluation
|
|
5
5
|
Project-URL: Repository, https://gitlab.jatic.net/jatic/aria/dataeval-flow
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Classifier: Development Status :: 3 - Alpha
|
|
9
9
|
Classifier: Intended Audience :: Science/Research
|
|
10
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
11
10
|
Classifier: Programming Language :: Python :: 3
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -15,51 +14,42 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
15
|
Classifier: Topic :: Scientific/Engineering
|
|
17
16
|
Classifier: Typing :: Typed
|
|
18
|
-
Requires-Python:
|
|
19
|
-
Requires-Dist: dataeval==1.0.
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Requires-Dist: dataeval==1.0.6
|
|
20
19
|
Requires-Dist: datasets>=4.0.0
|
|
21
20
|
Requires-Dist: maite-datasets>=0.0.12
|
|
21
|
+
Requires-Dist: numpy>=1.24.2
|
|
22
22
|
Requires-Dist: pydantic>=2.0
|
|
23
23
|
Requires-Dist: pyyaml>=6.0
|
|
24
24
|
Provides-Extra: all-cpu
|
|
25
25
|
Requires-Dist: onnx>=1.15; extra == 'all-cpu'
|
|
26
26
|
Requires-Dist: onnxruntime>=1.20; extra == 'all-cpu'
|
|
27
27
|
Requires-Dist: opencv-python-headless>=4.8.0; extra == 'all-cpu'
|
|
28
|
-
Requires-Dist: textual>=3.0; extra == 'all-cpu'
|
|
28
|
+
Requires-Dist: textual>=3.0; (python_version < '3.14') and extra == 'all-cpu'
|
|
29
29
|
Requires-Dist: torch>=2.2.0; extra == 'all-cpu'
|
|
30
30
|
Requires-Dist: torchvision>=0.17.0; extra == 'all-cpu'
|
|
31
31
|
Provides-Extra: all-cu118
|
|
32
32
|
Requires-Dist: onnx>=1.15; extra == 'all-cu118'
|
|
33
33
|
Requires-Dist: onnxruntime-gpu>=1.20; extra == 'all-cu118'
|
|
34
34
|
Requires-Dist: opencv-python-headless>=4.8.0; extra == 'all-cu118'
|
|
35
|
-
Requires-Dist: textual>=3.0; extra == 'all-cu118'
|
|
35
|
+
Requires-Dist: textual>=3.0; (python_version < '3.14') and extra == 'all-cu118'
|
|
36
36
|
Requires-Dist: torch>=2.2.0; extra == 'all-cu118'
|
|
37
37
|
Requires-Dist: torchvision>=0.17.0; extra == 'all-cu118'
|
|
38
|
-
Provides-Extra: all-cu124
|
|
39
|
-
Requires-Dist: onnx>=1.15; extra == 'all-cu124'
|
|
40
|
-
Requires-Dist: onnxruntime-gpu>=1.20; extra == 'all-cu124'
|
|
41
|
-
Requires-Dist: opencv-python-headless>=4.8.0; extra == 'all-cu124'
|
|
42
|
-
Requires-Dist: textual>=3.0; extra == 'all-cu124'
|
|
43
|
-
Requires-Dist: torch>=2.2.0; extra == 'all-cu124'
|
|
44
|
-
Requires-Dist: torchvision>=0.17.0; extra == 'all-cu124'
|
|
45
38
|
Provides-Extra: all-cu128
|
|
46
39
|
Requires-Dist: onnx>=1.15; extra == 'all-cu128'
|
|
47
40
|
Requires-Dist: onnxruntime-gpu>=1.23.2; extra == 'all-cu128'
|
|
48
41
|
Requires-Dist: opencv-python-headless>=4.8.0; extra == 'all-cu128'
|
|
49
|
-
Requires-Dist: textual>=3.0; extra == 'all-cu128'
|
|
42
|
+
Requires-Dist: textual>=3.0; (python_version < '3.14') and extra == 'all-cu128'
|
|
50
43
|
Requires-Dist: torch>=2.2.0; extra == 'all-cu128'
|
|
51
44
|
Requires-Dist: torchvision>=0.17.0; extra == 'all-cu128'
|
|
52
45
|
Provides-Extra: app
|
|
53
|
-
Requires-Dist: textual>=3.0; extra == 'app'
|
|
46
|
+
Requires-Dist: textual>=3.0; (python_version < '3.14') and extra == 'app'
|
|
54
47
|
Provides-Extra: cpu
|
|
55
48
|
Requires-Dist: torch>=2.2.0; extra == 'cpu'
|
|
56
49
|
Requires-Dist: torchvision>=0.17.0; extra == 'cpu'
|
|
57
50
|
Provides-Extra: cu118
|
|
58
51
|
Requires-Dist: torch>=2.2.0; extra == 'cu118'
|
|
59
52
|
Requires-Dist: torchvision>=0.17.0; extra == 'cu118'
|
|
60
|
-
Provides-Extra: cu124
|
|
61
|
-
Requires-Dist: torch>=2.2.0; extra == 'cu124'
|
|
62
|
-
Requires-Dist: torchvision>=0.17.0; extra == 'cu124'
|
|
63
53
|
Provides-Extra: cu128
|
|
64
54
|
Requires-Dist: torch>=2.2.0; extra == 'cu128'
|
|
65
55
|
Requires-Dist: torchvision>=0.17.0; extra == 'cu128'
|
|
@@ -77,6 +67,19 @@ Description-Content-Type: text/markdown
|
|
|
77
67
|
|
|
78
68
|
Workflow orchestration for DataEval with GPU support.
|
|
79
69
|
|
|
70
|
+
## Target Audience
|
|
71
|
+
|
|
72
|
+
<!-- start JATIC interop -->
|
|
73
|
+
|
|
74
|
+
DataEval Flow is intended for data scientists, ML engineers, and T&E engineers
|
|
75
|
+
who want to run automated data-evaluation pipelines — outlier and duplicate
|
|
76
|
+
detection, drift and OOD monitoring, dataset splitting, prioritization, and
|
|
77
|
+
statistical analysis — against their image datasets and models. For users of
|
|
78
|
+
the JATIC product suite, DataEval Flow has native interoperability when using
|
|
79
|
+
MAITE-compliant datasets and models.
|
|
80
|
+
|
|
81
|
+
<!-- end JATIC interop -->
|
|
82
|
+
|
|
80
83
|
## Quick Start
|
|
81
84
|
|
|
82
85
|
```bash
|
|
@@ -93,6 +96,32 @@ docker run --gpus all \
|
|
|
93
96
|
dataeval:cu118
|
|
94
97
|
```
|
|
95
98
|
|
|
99
|
+
## Pulling pre-built images
|
|
100
|
+
|
|
101
|
+
Pre-built, cosign-signed images are published to Harbor for every merge to `main` and every release tag. Pull one of these instead of building from source if you don't need to modify the code.
|
|
102
|
+
|
|
103
|
+
**Rolling channel** — tracks the latest commit on `main`. The tag is overwritten on every merge.
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
docker pull harbor.jatic.net/aria/dataeval:cu118 # cpu / cu118 / cu128
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Pinned release channel** — immutable, version-tagged images cut from `v*` git tags. Use these for reproducible workloads.
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
docker pull harbor.jatic.net/aria/dataeval:0.1.0-cu118
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Verifying the signature** — every published image is signed with [cosign](https://docs.sigstore.dev/cosign/). The public key is committed at [docker/cosign.pub](docker/cosign.pub).
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
cosign verify --key docker/cosign.pub harbor.jatic.net/aria/dataeval:cu118
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Then drop the `dataeval:cu118` reference in the Quick Start `docker run` commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu118` (or pinned version) and skip step 1.
|
|
122
|
+
|
|
123
|
+
> **Note on feature branches.** Containers are only built and published from `main` and release tags — no image is produced for MRs or topic branches. If you want to run a feature branch as a container, check it out and follow the Quick Start to build locally; the resulting image will pick up the branch's version via `git describe`.
|
|
124
|
+
|
|
96
125
|
## Requirements
|
|
97
126
|
|
|
98
127
|
| Requirement | Version |
|
|
@@ -253,7 +282,7 @@ Configs can be saved as YAML or JSON.
|
|
|
253
282
|
|
|
254
283
|
The Docker build may appear frozen during the `uv sync` step:
|
|
255
284
|
|
|
256
|
-
```
|
|
285
|
+
```text
|
|
257
286
|
=> [builder 7/7] RUN uv sync --frozen --no-dev --no-install-project 1139.3s
|
|
258
287
|
```
|
|
259
288
|
|
|
@@ -272,19 +301,68 @@ The Docker build may appear frozen during the `uv sync` step:
|
|
|
272
301
|
The `dataeval_flow` package can be used standalone without Docker.
|
|
273
302
|
|
|
274
303
|
**Installation:**
|
|
304
|
+
|
|
305
|
+
Three installer toolchains are supported. Choose whichever fits your environment;
|
|
306
|
+
all three install the same dependencies pinned in their respective lockfiles.
|
|
307
|
+
|
|
308
|
+
`uv` (default toolchain):
|
|
309
|
+
|
|
275
310
|
```bash
|
|
276
311
|
git clone https://gitlab.jatic.net/jatic/aria/dataeval-flow.git
|
|
277
312
|
cd dataeval-flow
|
|
278
|
-
uv sync
|
|
313
|
+
uv sync --extra cpu # or cu118 / cu128 for CUDA variants
|
|
279
314
|
```
|
|
280
315
|
|
|
316
|
+
`pip` from PyPI (no source checkout). PyTorch is hosted on a separate
|
|
317
|
+
wheel index, so pass `--extra-index-url` matching the variant you want
|
|
318
|
+
(omit it and you'll get the CUDA-bundled manylinux build of torch from
|
|
319
|
+
PyPI, which is much larger):
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
# CPU-only PyTorch
|
|
323
|
+
pip install "dataeval-flow[cpu]" --extra-index-url https://download.pytorch.org/whl/cpu
|
|
324
|
+
|
|
325
|
+
# CUDA 11.8 PyTorch
|
|
326
|
+
pip install "dataeval-flow[cu118]" --extra-index-url https://download.pytorch.org/whl/cu118
|
|
327
|
+
|
|
328
|
+
# CUDA 12.8 PyTorch
|
|
329
|
+
pip install "dataeval-flow[cu128]" --extra-index-url https://download.pytorch.org/whl/cu128
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
`poetry` (source checkout; uses committed `poetry.lock`):
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
git clone https://gitlab.jatic.net/jatic/aria/dataeval-flow.git
|
|
336
|
+
cd dataeval-flow
|
|
337
|
+
poetry install
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
`conda` / `mamba` (source checkout; uses committed `environment.yml`):
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
git clone https://gitlab.jatic.net/jatic/aria/dataeval-flow.git
|
|
344
|
+
cd dataeval-flow
|
|
345
|
+
conda env create -f environment.yml
|
|
346
|
+
conda activate dataeval-flow
|
|
347
|
+
pip install -e . # install the package itself; conda manages deps
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Notes:
|
|
351
|
+
|
|
352
|
+
- PyTorch is installed from PyPI/`download.pytorch.org` in every path
|
|
353
|
+
(it is no longer maintained on conda-forge).
|
|
354
|
+
- GPU variants (`cu118`, `cu128`) are only wired through `uv` and
|
|
355
|
+
`pip` today; the Poetry/conda paths install the CPU build of PyTorch.
|
|
356
|
+
|
|
281
357
|
**CLI Usage:**
|
|
358
|
+
|
|
282
359
|
```bash
|
|
283
360
|
python -m dataeval_flow --config /path/to/config --output /path/to/output
|
|
284
361
|
python -m dataeval_flow --data /path/to/data --output /path/to/output
|
|
285
362
|
```
|
|
286
363
|
|
|
287
364
|
**Python API Usage:**
|
|
365
|
+
|
|
288
366
|
```python
|
|
289
367
|
from pathlib import Path
|
|
290
368
|
from dataeval_flow import load_config, run_tasks
|
|
@@ -295,11 +373,51 @@ print(results[0].report())
|
|
|
295
373
|
```
|
|
296
374
|
|
|
297
375
|
**Development:**
|
|
376
|
+
|
|
298
377
|
```bash
|
|
299
378
|
uv sync --group dev
|
|
300
379
|
nox
|
|
301
380
|
```
|
|
302
381
|
|
|
382
|
+
## Versioning
|
|
383
|
+
|
|
384
|
+
The package version is **derived from git tags** — there is no hardcoded version anywhere in the source tree. `hatch-vcs` reads `git describe --tags` at build/install time and writes the resolved version to a generated `src/dataeval_flow/_version.py` (gitignored), which `dataeval_flow.__init__` imports at runtime.
|
|
385
|
+
|
|
386
|
+
**Release flow for container images:**
|
|
387
|
+
|
|
388
|
+
1. Push a semver tag (e.g. `v0.2.0`) — this is the single source of truth for the release version.
|
|
389
|
+
2. The `push:docker` CI job runs `git describe --tags --always --dirty | sed 's/^v//'` to resolve `${VERSION}`, then passes `--build-arg DATAEVAL_FLOW_VERSION="${VERSION}"` to `docker buildx build` for both the `test` and `prod` stages.
|
|
390
|
+
3. The `prod` stage in [docker/Dockerfile.j2](docker/Dockerfile.j2) redeclares the ARG and:
|
|
391
|
+
- Bakes the resolved version into `/app/src/dataeval_flow/_version.py` so `dataeval_flow.__version__` matches the wheel version at runtime.
|
|
392
|
+
- Stamps the OCI `org.opencontainers.image.version` label with the same value.
|
|
393
|
+
4. The image is pushed to Harbor and cosign-signed.
|
|
394
|
+
|
|
395
|
+
The `ARG DATAEVAL_FLOW_VERSION="…"` default rendered into each committed `docker/Dockerfile.<variant>` by `docker/generate.py` is only used for **local** `docker build` invocations that don't pass `--build-arg`. Release builds always override it, so the committed default is allowed to drift from the latest tag and does not need to be regenerated at release time.
|
|
396
|
+
|
|
303
397
|
## License
|
|
304
398
|
|
|
305
|
-
MIT
|
|
399
|
+
MIT — see [LICENSE](LICENSE).
|
|
400
|
+
|
|
401
|
+
## Contributing
|
|
402
|
+
|
|
403
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for bug reports and contribution
|
|
404
|
+
guidelines, and [BRANCHING.md](BRANCHING.md) for the branching and release
|
|
405
|
+
strategy.
|
|
406
|
+
|
|
407
|
+
## Contact
|
|
408
|
+
|
|
409
|
+
For questions or feedback, reach out to <dataeval-flow@ariacoustics.com>.
|
|
410
|
+
|
|
411
|
+
## Acknowledgement
|
|
412
|
+
|
|
413
|
+
### CDAO Funding Acknowledgement
|
|
414
|
+
|
|
415
|
+
<!-- start acknowledgement -->
|
|
416
|
+
|
|
417
|
+
This material is based upon work supported by the Chief Digital and Artificial
|
|
418
|
+
Intelligence Office under Contract No. W519TC-23-9-2033. The views and
|
|
419
|
+
conclusions contained herein are those of the author(s) and should not be
|
|
420
|
+
interpreted as necessarily representing the official policies or endorsements,
|
|
421
|
+
either expressed or implied, of the U.S. Government.
|
|
422
|
+
|
|
423
|
+
<!-- end acknowledgement -->
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Workflow orchestration for DataEval with GPU support.
|
|
4
4
|
|
|
5
|
+
## Target Audience
|
|
6
|
+
|
|
7
|
+
<!-- start JATIC interop -->
|
|
8
|
+
|
|
9
|
+
DataEval Flow is intended for data scientists, ML engineers, and T&E engineers
|
|
10
|
+
who want to run automated data-evaluation pipelines — outlier and duplicate
|
|
11
|
+
detection, drift and OOD monitoring, dataset splitting, prioritization, and
|
|
12
|
+
statistical analysis — against their image datasets and models. For users of
|
|
13
|
+
the JATIC product suite, DataEval Flow has native interoperability when using
|
|
14
|
+
MAITE-compliant datasets and models.
|
|
15
|
+
|
|
16
|
+
<!-- end JATIC interop -->
|
|
17
|
+
|
|
5
18
|
## Quick Start
|
|
6
19
|
|
|
7
20
|
```bash
|
|
@@ -18,6 +31,32 @@ docker run --gpus all \
|
|
|
18
31
|
dataeval:cu118
|
|
19
32
|
```
|
|
20
33
|
|
|
34
|
+
## Pulling pre-built images
|
|
35
|
+
|
|
36
|
+
Pre-built, cosign-signed images are published to Harbor for every merge to `main` and every release tag. Pull one of these instead of building from source if you don't need to modify the code.
|
|
37
|
+
|
|
38
|
+
**Rolling channel** — tracks the latest commit on `main`. The tag is overwritten on every merge.
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
docker pull harbor.jatic.net/aria/dataeval:cu118 # cpu / cu118 / cu128
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Pinned release channel** — immutable, version-tagged images cut from `v*` git tags. Use these for reproducible workloads.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
docker pull harbor.jatic.net/aria/dataeval:0.1.0-cu118
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Verifying the signature** — every published image is signed with [cosign](https://docs.sigstore.dev/cosign/). The public key is committed at [docker/cosign.pub](docker/cosign.pub).
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cosign verify --key docker/cosign.pub harbor.jatic.net/aria/dataeval:cu118
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Then drop the `dataeval:cu118` reference in the Quick Start `docker run` commands above with the fully-qualified `harbor.jatic.net/aria/dataeval:cu118` (or pinned version) and skip step 1.
|
|
57
|
+
|
|
58
|
+
> **Note on feature branches.** Containers are only built and published from `main` and release tags — no image is produced for MRs or topic branches. If you want to run a feature branch as a container, check it out and follow the Quick Start to build locally; the resulting image will pick up the branch's version via `git describe`.
|
|
59
|
+
|
|
21
60
|
## Requirements
|
|
22
61
|
|
|
23
62
|
| Requirement | Version |
|
|
@@ -178,7 +217,7 @@ Configs can be saved as YAML or JSON.
|
|
|
178
217
|
|
|
179
218
|
The Docker build may appear frozen during the `uv sync` step:
|
|
180
219
|
|
|
181
|
-
```
|
|
220
|
+
```text
|
|
182
221
|
=> [builder 7/7] RUN uv sync --frozen --no-dev --no-install-project 1139.3s
|
|
183
222
|
```
|
|
184
223
|
|
|
@@ -197,19 +236,68 @@ The Docker build may appear frozen during the `uv sync` step:
|
|
|
197
236
|
The `dataeval_flow` package can be used standalone without Docker.
|
|
198
237
|
|
|
199
238
|
**Installation:**
|
|
239
|
+
|
|
240
|
+
Three installer toolchains are supported. Choose whichever fits your environment;
|
|
241
|
+
all three install the same dependencies pinned in their respective lockfiles.
|
|
242
|
+
|
|
243
|
+
`uv` (default toolchain):
|
|
244
|
+
|
|
200
245
|
```bash
|
|
201
246
|
git clone https://gitlab.jatic.net/jatic/aria/dataeval-flow.git
|
|
202
247
|
cd dataeval-flow
|
|
203
|
-
uv sync
|
|
248
|
+
uv sync --extra cpu # or cu118 / cu128 for CUDA variants
|
|
204
249
|
```
|
|
205
250
|
|
|
251
|
+
`pip` from PyPI (no source checkout). PyTorch is hosted on a separate
|
|
252
|
+
wheel index, so pass `--extra-index-url` matching the variant you want
|
|
253
|
+
(omit it and you'll get the CUDA-bundled manylinux build of torch from
|
|
254
|
+
PyPI, which is much larger):
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# CPU-only PyTorch
|
|
258
|
+
pip install "dataeval-flow[cpu]" --extra-index-url https://download.pytorch.org/whl/cpu
|
|
259
|
+
|
|
260
|
+
# CUDA 11.8 PyTorch
|
|
261
|
+
pip install "dataeval-flow[cu118]" --extra-index-url https://download.pytorch.org/whl/cu118
|
|
262
|
+
|
|
263
|
+
# CUDA 12.8 PyTorch
|
|
264
|
+
pip install "dataeval-flow[cu128]" --extra-index-url https://download.pytorch.org/whl/cu128
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
`poetry` (source checkout; uses committed `poetry.lock`):
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
git clone https://gitlab.jatic.net/jatic/aria/dataeval-flow.git
|
|
271
|
+
cd dataeval-flow
|
|
272
|
+
poetry install
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
`conda` / `mamba` (source checkout; uses committed `environment.yml`):
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
git clone https://gitlab.jatic.net/jatic/aria/dataeval-flow.git
|
|
279
|
+
cd dataeval-flow
|
|
280
|
+
conda env create -f environment.yml
|
|
281
|
+
conda activate dataeval-flow
|
|
282
|
+
pip install -e . # install the package itself; conda manages deps
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Notes:
|
|
286
|
+
|
|
287
|
+
- PyTorch is installed from PyPI/`download.pytorch.org` in every path
|
|
288
|
+
(it is no longer maintained on conda-forge).
|
|
289
|
+
- GPU variants (`cu118`, `cu128`) are only wired through `uv` and
|
|
290
|
+
`pip` today; the Poetry/conda paths install the CPU build of PyTorch.
|
|
291
|
+
|
|
206
292
|
**CLI Usage:**
|
|
293
|
+
|
|
207
294
|
```bash
|
|
208
295
|
python -m dataeval_flow --config /path/to/config --output /path/to/output
|
|
209
296
|
python -m dataeval_flow --data /path/to/data --output /path/to/output
|
|
210
297
|
```
|
|
211
298
|
|
|
212
299
|
**Python API Usage:**
|
|
300
|
+
|
|
213
301
|
```python
|
|
214
302
|
from pathlib import Path
|
|
215
303
|
from dataeval_flow import load_config, run_tasks
|
|
@@ -220,11 +308,51 @@ print(results[0].report())
|
|
|
220
308
|
```
|
|
221
309
|
|
|
222
310
|
**Development:**
|
|
311
|
+
|
|
223
312
|
```bash
|
|
224
313
|
uv sync --group dev
|
|
225
314
|
nox
|
|
226
315
|
```
|
|
227
316
|
|
|
317
|
+
## Versioning
|
|
318
|
+
|
|
319
|
+
The package version is **derived from git tags** — there is no hardcoded version anywhere in the source tree. `hatch-vcs` reads `git describe --tags` at build/install time and writes the resolved version to a generated `src/dataeval_flow/_version.py` (gitignored), which `dataeval_flow.__init__` imports at runtime.
|
|
320
|
+
|
|
321
|
+
**Release flow for container images:**
|
|
322
|
+
|
|
323
|
+
1. Push a semver tag (e.g. `v0.2.0`) — this is the single source of truth for the release version.
|
|
324
|
+
2. The `push:docker` CI job runs `git describe --tags --always --dirty | sed 's/^v//'` to resolve `${VERSION}`, then passes `--build-arg DATAEVAL_FLOW_VERSION="${VERSION}"` to `docker buildx build` for both the `test` and `prod` stages.
|
|
325
|
+
3. The `prod` stage in [docker/Dockerfile.j2](docker/Dockerfile.j2) redeclares the ARG and:
|
|
326
|
+
- Bakes the resolved version into `/app/src/dataeval_flow/_version.py` so `dataeval_flow.__version__` matches the wheel version at runtime.
|
|
327
|
+
- Stamps the OCI `org.opencontainers.image.version` label with the same value.
|
|
328
|
+
4. The image is pushed to Harbor and cosign-signed.
|
|
329
|
+
|
|
330
|
+
The `ARG DATAEVAL_FLOW_VERSION="…"` default rendered into each committed `docker/Dockerfile.<variant>` by `docker/generate.py` is only used for **local** `docker build` invocations that don't pass `--build-arg`. Release builds always override it, so the committed default is allowed to drift from the latest tag and does not need to be regenerated at release time.
|
|
331
|
+
|
|
228
332
|
## License
|
|
229
333
|
|
|
230
|
-
MIT
|
|
334
|
+
MIT — see [LICENSE](LICENSE).
|
|
335
|
+
|
|
336
|
+
## Contributing
|
|
337
|
+
|
|
338
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for bug reports and contribution
|
|
339
|
+
guidelines, and [BRANCHING.md](BRANCHING.md) for the branching and release
|
|
340
|
+
strategy.
|
|
341
|
+
|
|
342
|
+
## Contact
|
|
343
|
+
|
|
344
|
+
For questions or feedback, reach out to <dataeval-flow@ariacoustics.com>.
|
|
345
|
+
|
|
346
|
+
## Acknowledgement
|
|
347
|
+
|
|
348
|
+
### CDAO Funding Acknowledgement
|
|
349
|
+
|
|
350
|
+
<!-- start acknowledgement -->
|
|
351
|
+
|
|
352
|
+
This material is based upon work supported by the Chief Digital and Artificial
|
|
353
|
+
Intelligence Office under Contract No. W519TC-23-9-2033. The views and
|
|
354
|
+
conclusions contained herein are those of the author(s) and should not be
|
|
355
|
+
interpreted as necessarily representing the official policies or endorsements,
|
|
356
|
+
either expressed or implied, of the U.S. Government.
|
|
357
|
+
|
|
358
|
+
<!-- end acknowledgement -->
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "dataeval-flow"
|
|
3
|
-
|
|
3
|
+
dynamic = ["version"]
|
|
4
4
|
description = "DataEval Workflows container for data evaluation"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
7
|
-
requires-python = ">=3.10
|
|
7
|
+
requires-python = ">=3.10"
|
|
8
8
|
classifiers = [
|
|
9
9
|
"Development Status :: 3 - Alpha",
|
|
10
10
|
"Intended Audience :: Science/Research",
|
|
11
|
-
"License :: OSI Approved :: MIT License",
|
|
12
11
|
"Programming Language :: Python :: 3",
|
|
13
12
|
"Programming Language :: Python :: 3.10",
|
|
14
13
|
"Programming Language :: Python :: 3.11",
|
|
@@ -18,9 +17,10 @@ classifiers = [
|
|
|
18
17
|
"Typing :: Typed",
|
|
19
18
|
]
|
|
20
19
|
dependencies = [
|
|
21
|
-
"dataeval==1.0.
|
|
20
|
+
"dataeval==1.0.6",
|
|
22
21
|
"datasets>=4.0.0",
|
|
23
22
|
"maite-datasets>=0.0.12",
|
|
23
|
+
"numpy>=1.24.2",
|
|
24
24
|
"pydantic>=2.0",
|
|
25
25
|
"pyyaml>=6.0",
|
|
26
26
|
]
|
|
@@ -28,17 +28,15 @@ dependencies = [
|
|
|
28
28
|
[project.optional-dependencies]
|
|
29
29
|
cpu = ["torch>=2.2.0", "torchvision>=0.17.0"]
|
|
30
30
|
cu118 = ["torch>=2.2.0", "torchvision>=0.17.0"]
|
|
31
|
-
cu124 = ["torch>=2.2.0", "torchvision>=0.17.0"]
|
|
32
31
|
cu128 = ["torch>=2.2.0", "torchvision>=0.17.0"]
|
|
33
32
|
onnx = ["onnx>=1.15", "onnxruntime>=1.20"]
|
|
34
33
|
onnx-gpu = ["onnx>=1.15", "onnxruntime-gpu>=1.20"]
|
|
35
34
|
opencv = ["opencv-python-headless>=4.8.0"]
|
|
36
|
-
app = ["textual>=3.0"]
|
|
35
|
+
app = ["textual>=3.0; python_version < '3.14'"]
|
|
37
36
|
# Convenience extras for common combinations
|
|
38
|
-
all-cpu = ["torch>=2.2.0", "torchvision>=0.17.0", "onnx>=1.15", "onnxruntime>=1.20", "opencv-python-headless>=4.8.0", "textual>=3.0"]
|
|
39
|
-
all-cu118 = ["torch>=2.2.0", "torchvision>=0.17.0", "onnx>=1.15", "onnxruntime-gpu>=1.20", "opencv-python-headless>=4.8.0", "textual>=3.0"]
|
|
40
|
-
all-
|
|
41
|
-
all-cu128 = ["torch>=2.2.0", "torchvision>=0.17.0", "onnx>=1.15", "onnxruntime-gpu>=1.23.2", "opencv-python-headless>=4.8.0", "textual>=3.0"]
|
|
37
|
+
all-cpu = ["torch>=2.2.0", "torchvision>=0.17.0", "onnx>=1.15", "onnxruntime>=1.20", "opencv-python-headless>=4.8.0", "textual>=3.0; python_version < '3.14'"]
|
|
38
|
+
all-cu118 = ["torch>=2.2.0", "torchvision>=0.17.0", "onnx>=1.15", "onnxruntime-gpu>=1.20", "opencv-python-headless>=4.8.0", "textual>=3.0; python_version < '3.14'"]
|
|
39
|
+
all-cu128 = ["torch>=2.2.0", "torchvision>=0.17.0", "onnx>=1.15", "onnxruntime-gpu>=1.23.2", "opencv-python-headless>=4.8.0", "textual>=3.0; python_version < '3.14'"]
|
|
42
40
|
|
|
43
41
|
[project.urls]
|
|
44
42
|
Repository = "https://gitlab.jatic.net/jatic/aria/dataeval-flow"
|
|
@@ -52,6 +50,11 @@ base = [
|
|
|
52
50
|
"nox-uv>=0.6.2",
|
|
53
51
|
"uv>=0.8.0",
|
|
54
52
|
]
|
|
53
|
+
lock = [
|
|
54
|
+
{ include-group = "base" },
|
|
55
|
+
"pyproject2conda>=0.22",
|
|
56
|
+
"poetry>=2.2.0; python_version<'3.14'",
|
|
57
|
+
]
|
|
55
58
|
lint = [
|
|
56
59
|
{ include-group = "base" },
|
|
57
60
|
"ruff>=0.11",
|
|
@@ -65,6 +68,12 @@ test = [
|
|
|
65
68
|
"pytest-xdist>=3.6.1",
|
|
66
69
|
"coverage[toml]>=7.6",
|
|
67
70
|
]
|
|
71
|
+
verify = [
|
|
72
|
+
{ include-group = "base" },
|
|
73
|
+
"pytest>=8.3",
|
|
74
|
+
"pytest-asyncio>=0.24",
|
|
75
|
+
"pyyaml>=6.0",
|
|
76
|
+
]
|
|
68
77
|
type = [
|
|
69
78
|
{ include-group = "base" },
|
|
70
79
|
"pyright[nodejs]>=1.1.400",
|
|
@@ -88,6 +97,12 @@ docker = [
|
|
|
88
97
|
"jinja2>=3.1",
|
|
89
98
|
"pyyaml>=6.0",
|
|
90
99
|
]
|
|
100
|
+
security = [ # keep in sync with [tool.uv.constraint-dependencies]
|
|
101
|
+
"pillow>=12.2.0",
|
|
102
|
+
# "setuptools>=82.0.0", excluded due to conflict with pytorch
|
|
103
|
+
"onnx>=1.21.0",
|
|
104
|
+
"urllib3>=2.7.0"
|
|
105
|
+
]
|
|
91
106
|
dev = [
|
|
92
107
|
{ include-group = "lint" },
|
|
93
108
|
{ include-group = "type" },
|
|
@@ -97,21 +112,19 @@ dev = [
|
|
|
97
112
|
[tool.uv]
|
|
98
113
|
# Pin minimum versions for transitive deps with known CVEs
|
|
99
114
|
constraint-dependencies = [
|
|
100
|
-
"pillow>=12.
|
|
101
|
-
"setuptools>=82.0.0",
|
|
102
|
-
|
|
103
|
-
"
|
|
115
|
+
"pillow>=12.2.0",
|
|
116
|
+
"setuptools>=82.0.0",
|
|
117
|
+
"onnx>=1.21.0",
|
|
118
|
+
"urllib3>=2.7.0"
|
|
104
119
|
]
|
|
105
120
|
|
|
106
121
|
conflicts = [
|
|
107
122
|
[
|
|
108
123
|
{ extra = "cpu" },
|
|
109
124
|
{ extra = "cu118" },
|
|
110
|
-
{ extra = "cu124" },
|
|
111
125
|
{ extra = "cu128" },
|
|
112
126
|
{ extra = "all-cpu" },
|
|
113
127
|
{ extra = "all-cu118" },
|
|
114
|
-
{ extra = "all-cu124" },
|
|
115
128
|
{ extra = "all-cu128" },
|
|
116
129
|
],
|
|
117
130
|
[
|
|
@@ -119,7 +132,6 @@ conflicts = [
|
|
|
119
132
|
{ extra = "onnx-gpu" },
|
|
120
133
|
{ extra = "all-cpu" },
|
|
121
134
|
{ extra = "all-cu118" },
|
|
122
|
-
{ extra = "all-cu124" },
|
|
123
135
|
{ extra = "all-cu128" },
|
|
124
136
|
]
|
|
125
137
|
]
|
|
@@ -134,11 +146,6 @@ name = "pytorch-cu118"
|
|
|
134
146
|
url = "https://download.pytorch.org/whl/cu118"
|
|
135
147
|
explicit = true
|
|
136
148
|
|
|
137
|
-
[[tool.uv.index]]
|
|
138
|
-
name = "pytorch-cu124"
|
|
139
|
-
url = "https://download.pytorch.org/whl/cu124"
|
|
140
|
-
explicit = true
|
|
141
|
-
|
|
142
149
|
[[tool.uv.index]]
|
|
143
150
|
name = "pytorch-cu128"
|
|
144
151
|
url = "https://download.pytorch.org/whl/cu128"
|
|
@@ -150,8 +157,6 @@ torch = [
|
|
|
150
157
|
{ index = "pytorch-cpu", extra = "all-cpu" },
|
|
151
158
|
{ index = "pytorch-cu118", extra = "cu118" },
|
|
152
159
|
{ index = "pytorch-cu118", extra = "all-cu118" },
|
|
153
|
-
{ index = "pytorch-cu124", extra = "cu124" },
|
|
154
|
-
{ index = "pytorch-cu124", extra = "all-cu124" },
|
|
155
160
|
{ index = "pytorch-cu128", extra = "cu128" },
|
|
156
161
|
{ index = "pytorch-cu128", extra = "all-cu128" },
|
|
157
162
|
]
|
|
@@ -160,18 +165,40 @@ torchvision = [
|
|
|
160
165
|
{ index = "pytorch-cpu", extra = "all-cpu" },
|
|
161
166
|
{ index = "pytorch-cu118", extra = "cu118" },
|
|
162
167
|
{ index = "pytorch-cu118", extra = "all-cu118" },
|
|
163
|
-
{ index = "pytorch-cu124", extra = "cu124" },
|
|
164
|
-
{ index = "pytorch-cu124", extra = "all-cu124" },
|
|
165
168
|
{ index = "pytorch-cu128", extra = "cu128" },
|
|
166
169
|
{ index = "pytorch-cu128", extra = "all-cu128" },
|
|
167
170
|
]
|
|
168
171
|
|
|
172
|
+
[tool.poetry]
|
|
173
|
+
version = "0.0.0"
|
|
174
|
+
|
|
175
|
+
[[tool.poetry.source]]
|
|
176
|
+
name = "pytorch-cpu"
|
|
177
|
+
url = "https://download.pytorch.org/whl/cpu"
|
|
178
|
+
# `supplemental` (not `explicit`) is required so the `torch`/`torchvision`
|
|
179
|
+
# source override below applies to transitive requests too.
|
|
180
|
+
priority = "supplemental"
|
|
181
|
+
|
|
182
|
+
[tool.poetry.dependencies]
|
|
183
|
+
torch = { version = ">=2.2.0", source = "pytorch-cpu", optional = true }
|
|
184
|
+
torchvision = { version = ">=0.17.0", source = "pytorch-cpu", optional = true }
|
|
185
|
+
|
|
186
|
+
[tool.pyproject2conda.dependencies]
|
|
187
|
+
# `dataeval` is available on conda-forge. `maite-datasets` is PyPI-only.
|
|
188
|
+
maite-datasets = { pip = true }
|
|
189
|
+
|
|
169
190
|
# --- Build System ---
|
|
170
191
|
|
|
171
192
|
[build-system]
|
|
172
|
-
requires = ["hatchling"]
|
|
193
|
+
requires = ["hatchling", "hatch-vcs"]
|
|
173
194
|
build-backend = "hatchling.build"
|
|
174
195
|
|
|
196
|
+
[tool.hatch.version]
|
|
197
|
+
source = "vcs"
|
|
198
|
+
|
|
199
|
+
[tool.hatch.build.hooks.vcs]
|
|
200
|
+
version-file = "src/dataeval_flow/_version.py"
|
|
201
|
+
|
|
175
202
|
[tool.hatch.build.targets.sdist]
|
|
176
203
|
include = ["src/dataeval_flow"]
|
|
177
204
|
|
|
@@ -184,6 +211,8 @@ include = ["src/dataeval_flow"]
|
|
|
184
211
|
# --- Pytest ---
|
|
185
212
|
|
|
186
213
|
[tool.pytest.ini_options]
|
|
214
|
+
# Only unit tests run here (and under the coverage gate). The requirements
|
|
215
|
+
# verification suite (verification/) runs in its own `nox -s verify` session.
|
|
187
216
|
testpaths = ["tests"]
|
|
188
217
|
pythonpath = ["src"]
|
|
189
218
|
asyncio_mode = "auto"
|
|
@@ -205,6 +234,7 @@ source = ["src/dataeval_flow"]
|
|
|
205
234
|
branch = true
|
|
206
235
|
concurrency = ["multiprocessing"]
|
|
207
236
|
parallel = true
|
|
237
|
+
omit = ["src/dataeval_flow/_version.py"]
|
|
208
238
|
|
|
209
239
|
[tool.coverage.report]
|
|
210
240
|
exclude_also = [
|
|
@@ -213,6 +243,7 @@ exclude_also = [
|
|
|
213
243
|
"if TYPE_CHECKING:",
|
|
214
244
|
]
|
|
215
245
|
include = ["*/src/dataeval_flow/*"]
|
|
246
|
+
omit = ["src/dataeval_flow/_version.py"]
|
|
216
247
|
fail_under = 90
|
|
217
248
|
show_missing = true
|
|
218
249
|
|
|
@@ -241,6 +272,7 @@ exclude = [
|
|
|
241
272
|
".tox",
|
|
242
273
|
".nox",
|
|
243
274
|
"prototype",
|
|
275
|
+
"src/dataeval_flow/_version.py",
|
|
244
276
|
]
|
|
245
277
|
line-length = 120
|
|
246
278
|
target-version = "py310"
|
|
@@ -258,7 +290,7 @@ ignore = [
|
|
|
258
290
|
"C416",
|
|
259
291
|
]
|
|
260
292
|
fixable = ["ALL"]
|
|
261
|
-
per-file-ignores = { "tests/*" = ["ANN", "S101", "D", "SLF001", "ARG002", "PT019"], "docs/*" = ["D", "E402", "E501", "S101"] }
|
|
293
|
+
per-file-ignores = { "tests/*" = ["ANN", "S101", "D", "SLF001", "ARG002", "PT019"], "docs/*" = ["D", "E402", "E501", "S101"], "verification/*" = ["ANN", "S101", "D", "SLF001", "ARG001", "ARG002", "PT011", "PT019"] }
|
|
262
294
|
|
|
263
295
|
[tool.ruff.lint.pydocstyle]
|
|
264
296
|
convention = "pep257"
|
|
@@ -273,5 +305,5 @@ indent-style = "space"
|
|
|
273
305
|
# --- Codespell ---
|
|
274
306
|
|
|
275
307
|
[tool.codespell]
|
|
276
|
-
skip = "./*env*,./output,./htmlcov,./.nox
|
|
308
|
+
skip = "./*env*,./output,./htmlcov,./.nox,*.lock,./docs/source/notebooks/*,./docker/cosign.pub,./docker/Dockerfile.*,*.onnx"
|
|
277
309
|
ignore-words-list = ["statics"]
|