dataeval 0.86.3__py3-none-any.whl → 0.86.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dataeval/__init__.py +1 -1
- dataeval/data/_images.py +3 -1
- dataeval/data/_metadata.py +18 -26
- dataeval/metadata/_distance.py +1 -1
- dataeval/metrics/bias/_balance.py +5 -4
- dataeval/metrics/stats/_labelstats.py +6 -10
- dataeval/outputs/_linters.py +1 -1
- dataeval/outputs/_stats.py +4 -4
- dataeval/utils/_plot.py +6 -6
- {dataeval-0.86.3.dist-info → dataeval-0.86.4.dist-info}/METADATA +1 -1
- {dataeval-0.86.3.dist-info → dataeval-0.86.4.dist-info}/RECORD +13 -13
- {dataeval-0.86.3.dist-info → dataeval-0.86.4.dist-info}/LICENSE.txt +0 -0
- {dataeval-0.86.3.dist-info → dataeval-0.86.4.dist-info}/WHEEL +0 -0
dataeval/__init__.py
CHANGED
dataeval/data/_images.py
CHANGED
@@ -4,6 +4,8 @@ __all__ = []
|
|
4
4
|
|
5
5
|
from typing import TYPE_CHECKING, Any, Generic, Iterator, Sequence, TypeVar, cast, overload
|
6
6
|
|
7
|
+
import numpy as np
|
8
|
+
|
7
9
|
from dataeval.typing import Array, ArrayLike, Dataset
|
8
10
|
from dataeval.utils._array import as_numpy, channels_first_to_last
|
9
11
|
|
@@ -58,7 +60,7 @@ class Images(Generic[T]):
|
|
58
60
|
num_images = len(indices)
|
59
61
|
num_rows = (num_images + images_per_row - 1) // images_per_row
|
60
62
|
fig, axes = plt.subplots(num_rows, images_per_row, figsize=figsize)
|
61
|
-
for i, ax in enumerate(axes.flatten()):
|
63
|
+
for i, ax in enumerate(np.asarray(axes).flatten()):
|
62
64
|
image = channels_first_to_last(as_numpy(self[i]))
|
63
65
|
ax.imshow(image)
|
64
66
|
ax.axis("off")
|
dataeval/data/_metadata.py
CHANGED
@@ -20,6 +20,10 @@ from dataeval.utils._bin import bin_data, digitize_data
|
|
20
20
|
from dataeval.utils.data.metadata import merge
|
21
21
|
|
22
22
|
|
23
|
+
def _binned(name: str) -> str:
|
24
|
+
return f"{name}[]"
|
25
|
+
|
26
|
+
|
23
27
|
@dataclass
|
24
28
|
class FactorInfo:
|
25
29
|
factor_type: Literal["categorical", "continuous", "discrete"] | None = None
|
@@ -157,13 +161,13 @@ class Metadata:
|
|
157
161
|
def factor_names(self) -> Sequence[str]:
|
158
162
|
"""Factor names of the metadata."""
|
159
163
|
self._structure()
|
160
|
-
return list(self._factors)
|
164
|
+
return list(filter(self._filter, self._factors))
|
161
165
|
|
162
166
|
@property
|
163
167
|
def factor_info(self) -> Mapping[str, FactorInfo]:
|
164
168
|
"""Factor types of the metadata."""
|
165
169
|
self._bin()
|
166
|
-
return self._factors
|
170
|
+
return dict(filter(self._filter, self._factors.items()))
|
167
171
|
|
168
172
|
@property
|
169
173
|
def factor_data(self) -> NDArray[Any]:
|
@@ -195,13 +199,17 @@ class Metadata:
|
|
195
199
|
@property
|
196
200
|
def image_count(self) -> int:
|
197
201
|
self._bin()
|
198
|
-
return int(self._image_indices.max() + 1)
|
202
|
+
return 0 if self._image_indices.size == 0 else int(self._image_indices.max() + 1)
|
203
|
+
|
204
|
+
def _filter(self, factor: str | tuple[str, Any]) -> bool:
|
205
|
+
factor = factor[0] if isinstance(factor, tuple) else factor
|
206
|
+
return factor in self.include if self.include else factor not in self.exclude
|
199
207
|
|
200
208
|
def _reset_bins(self, cols: Iterable[str] | None = None) -> None:
|
201
209
|
if self._is_binned:
|
202
210
|
columns = self._dataframe.columns
|
203
|
-
for col in (col for col in cols or columns if
|
204
|
-
self._dataframe.drop_in_place(
|
211
|
+
for col in (col for col in cols or columns if _binned(col) in columns):
|
212
|
+
self._dataframe.drop_in_place(_binned(col))
|
205
213
|
self._factors[col] = FactorInfo()
|
206
214
|
self._is_binned = False
|
207
215
|
|
@@ -244,7 +252,7 @@ class Metadata:
|
|
244
252
|
bboxes = as_numpy(bboxes).astype(np.float32) if is_od else None
|
245
253
|
srcidx = as_numpy(srcidx).astype(np.intp) if is_od else None
|
246
254
|
|
247
|
-
index2label = self._dataset.metadata.get("index2label", {})
|
255
|
+
index2label = self._dataset.metadata.get("index2label", {i: str(i) for i in np.unique(labels)})
|
248
256
|
|
249
257
|
targets_per_image = None if srcidx is None else np.unique(srcidx, return_counts=True)[1].tolist()
|
250
258
|
merged = merge(raw, return_dropped=True, ignore_lists=False, targets_per_image=targets_per_image)
|
@@ -260,8 +268,9 @@ class Metadata:
|
|
260
268
|
}
|
261
269
|
|
262
270
|
self._raw = raw
|
271
|
+
self._index2label = index2label
|
263
272
|
self._class_labels = labels
|
264
|
-
self._class_names =
|
273
|
+
self._class_names = list(index2label.values())
|
265
274
|
self._image_indices = target_dict["image_index"]
|
266
275
|
self._factors = dict.fromkeys(factor_dict, FactorInfo())
|
267
276
|
self._dataframe = pl.DataFrame({**target_dict, **factor_dict})
|
@@ -289,10 +298,10 @@ class Metadata:
|
|
289
298
|
)
|
290
299
|
|
291
300
|
column_set = set(df.columns)
|
292
|
-
for col in (col for col in self.factor_names if
|
301
|
+
for col in (col for col in self.factor_names if _binned(col) not in column_set):
|
293
302
|
# Get data as numpy array for processing
|
294
303
|
data = df[col].to_numpy()
|
295
|
-
col_dz =
|
304
|
+
col_dz = _binned(col)
|
296
305
|
if col in factor_bins:
|
297
306
|
# User provided binning
|
298
307
|
bins = factor_bins[col]
|
@@ -326,23 +335,6 @@ class Metadata:
|
|
326
335
|
self._factors.update(factor_info)
|
327
336
|
self._is_binned = True
|
328
337
|
|
329
|
-
def get_factors_by_type(self, factor_type: Literal["categorical", "continuous", "discrete"]) -> Sequence[str]:
|
330
|
-
"""
|
331
|
-
Get the names of factors of a specific type.
|
332
|
-
|
333
|
-
Parameters
|
334
|
-
----------
|
335
|
-
factor_type : Literal["categorical", "continuous", "discrete"]
|
336
|
-
The type of factors to retrieve.
|
337
|
-
|
338
|
-
Returns
|
339
|
-
-------
|
340
|
-
list[str]
|
341
|
-
List of factor names of the specified type.
|
342
|
-
"""
|
343
|
-
self._bin()
|
344
|
-
return [name for name, info in self.factor_info.items() if info.factor_type == factor_type]
|
345
|
-
|
346
338
|
def add_factors(self, factors: Mapping[str, Array | Sequence[Any]]) -> None:
|
347
339
|
"""
|
348
340
|
Add additional factors to the metadata.
|
dataeval/metadata/_distance.py
CHANGED
@@ -81,7 +81,7 @@ def metadata_distance(metadata1: Metadata, metadata2: Metadata) -> MetadataDista
|
|
81
81
|
"""
|
82
82
|
|
83
83
|
_compare_keys(metadata1.factor_names, metadata2.factor_names)
|
84
|
-
cont_fnames = metadata1.
|
84
|
+
cont_fnames = [name for name, info in metadata1.factor_info.items() if info.factor_type == "continuous"]
|
85
85
|
|
86
86
|
if not cont_fnames:
|
87
87
|
return MetadataDistanceOutput({})
|
@@ -99,9 +99,10 @@ def balance(
|
|
99
99
|
factor_types = {"class_label": "categorical"} | {k: v.factor_type for k, v in metadata.factor_info.items()}
|
100
100
|
is_discrete = [factor_type != "continuous" for factor_type in factor_types.values()]
|
101
101
|
num_factors = len(factor_types)
|
102
|
+
class_labels = metadata.class_labels
|
102
103
|
|
103
104
|
mi = np.full((num_factors, num_factors), np.nan, dtype=np.float32)
|
104
|
-
data = np.hstack((
|
105
|
+
data = np.hstack((class_labels[:, np.newaxis], data))
|
105
106
|
|
106
107
|
for idx, factor_type in enumerate(factor_types.values()):
|
107
108
|
if factor_type != "continuous":
|
@@ -132,12 +133,12 @@ def balance(
|
|
132
133
|
factors = nmi[1:, 1:]
|
133
134
|
|
134
135
|
# assume class is a factor
|
135
|
-
|
136
|
+
u_classes = np.unique(class_labels)
|
137
|
+
num_classes = len(u_classes)
|
136
138
|
classwise_mi = np.full((num_classes, num_factors), np.nan, dtype=np.float32)
|
137
139
|
|
138
140
|
# classwise targets
|
139
|
-
|
140
|
-
tgt_bin = data[:, 0][:, None] == classes
|
141
|
+
tgt_bin = data[:, 0][:, None] == u_classes
|
141
142
|
|
142
143
|
# classification MI for discrete/categorical features
|
143
144
|
for idx in range(num_classes):
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
__all__ = []
|
4
4
|
|
5
|
-
from typing import Any,
|
5
|
+
from typing import Any, TypeVar
|
6
6
|
|
7
7
|
import polars as pl
|
8
8
|
|
@@ -14,10 +14,6 @@ from dataeval.typing import AnnotatedDataset
|
|
14
14
|
TValue = TypeVar("TValue")
|
15
15
|
|
16
16
|
|
17
|
-
def _sort_to_list(d: Mapping[int, TValue]) -> list[TValue]:
|
18
|
-
return [t[1] for t in sorted(d.items())]
|
19
|
-
|
20
|
-
|
21
17
|
@set_metadata
|
22
18
|
def labelstats(dataset: Metadata | AnnotatedDataset[Any]) -> LabelStatsOutput:
|
23
19
|
"""
|
@@ -58,20 +54,20 @@ def labelstats(dataset: Metadata | AnnotatedDataset[Any]) -> LabelStatsOutput:
|
|
58
54
|
|
59
55
|
# Count occurrences of each label across all images
|
60
56
|
label_counts_df = metadata_df.group_by("class_label").len()
|
61
|
-
label_counts = label_counts_df
|
57
|
+
label_counts = dict(zip(label_counts_df["class_label"], label_counts_df["len"]))
|
62
58
|
|
63
59
|
# Count unique images per label (how many images contain each label)
|
64
60
|
image_counts_df = metadata_df.select(["image_index", "class_label"]).unique().group_by("class_label").len()
|
65
|
-
image_counts = image_counts_df
|
61
|
+
image_counts = dict(zip(image_counts_df["class_label"], image_counts_df["len"]))
|
66
62
|
|
67
63
|
# Create index_location mapping (which images contain each label)
|
68
|
-
index_location:
|
64
|
+
index_location: dict[int, list[int]] = {}
|
69
65
|
for row in metadata_df.group_by("class_label").agg(pl.col("image_index")).to_dicts():
|
70
66
|
indices = row["image_index"]
|
71
67
|
index_location[row["class_label"]] = sorted(dict.fromkeys(indices)) if isinstance(indices, list) else [indices]
|
72
68
|
|
73
69
|
# Count labels per image
|
74
|
-
label_per_image_df = metadata_df.group_by("image_index").agg(pl.
|
70
|
+
label_per_image_df = metadata_df.group_by("image_index").agg(pl.len().alias("label_count"))
|
75
71
|
label_per_image = label_per_image_df.sort("image_index")["label_count"].to_list()
|
76
72
|
|
77
73
|
return LabelStatsOutput(
|
@@ -81,6 +77,6 @@ def labelstats(dataset: Metadata | AnnotatedDataset[Any]) -> LabelStatsOutput:
|
|
81
77
|
image_indices_per_class=index_location,
|
82
78
|
image_count=len(label_per_image),
|
83
79
|
class_count=len(metadata.class_names),
|
84
|
-
label_count=sum(label_counts),
|
80
|
+
label_count=sum(label_counts.values()),
|
85
81
|
class_names=metadata.class_names,
|
86
82
|
)
|
dataeval/outputs/_linters.py
CHANGED
@@ -54,7 +54,7 @@ def _reorganize_by_class_and_metric(
|
|
54
54
|
for img, group in result.items():
|
55
55
|
for extreme in group:
|
56
56
|
metrics.setdefault(extreme, []).append(img)
|
57
|
-
for i, images in
|
57
|
+
for i, images in lstats.image_indices_per_class.items():
|
58
58
|
if img in images:
|
59
59
|
class_wise[lstats.class_names[i]][extreme] = class_wise[lstats.class_names[i]].get(extreme, 0) + 1
|
60
60
|
|
dataeval/outputs/_stats.py
CHANGED
@@ -272,7 +272,7 @@ class LabelStatsOutput(Output):
|
|
272
272
|
image_counts_per_class : Mapping[int, int]
|
273
273
|
Dictionary whose keys are the different label classes and
|
274
274
|
values are total counts of each image the class is present in
|
275
|
-
image_indices_per_class : Mapping[int,
|
275
|
+
image_indices_per_class : Mapping[int, Sequence[int]]
|
276
276
|
Dictionary whose keys are the different label classes and
|
277
277
|
values are lists containing the images that have that label
|
278
278
|
image_count : int
|
@@ -284,10 +284,10 @@ class LabelStatsOutput(Output):
|
|
284
284
|
class_names : Sequence[str]
|
285
285
|
"""
|
286
286
|
|
287
|
-
label_counts_per_class:
|
287
|
+
label_counts_per_class: Mapping[int, int]
|
288
288
|
label_counts_per_image: Sequence[int]
|
289
|
-
image_counts_per_class:
|
290
|
-
image_indices_per_class:
|
289
|
+
image_counts_per_class: Mapping[int, int]
|
290
|
+
image_indices_per_class: Mapping[int, Sequence[int]]
|
291
291
|
image_count: int
|
292
292
|
class_count: int
|
293
293
|
label_count: int
|
dataeval/utils/_plot.py
CHANGED
@@ -164,9 +164,9 @@ def histogram_plot(
|
|
164
164
|
rows = math.ceil(num_metrics / 3)
|
165
165
|
cols = min(num_metrics, 3)
|
166
166
|
fig, axs = plt.subplots(rows, 3, figsize=(cols * 3 + 1, rows * 3))
|
167
|
-
|
167
|
+
axs_flat = np.asarray(axs).flatten()
|
168
168
|
for ax, metric in zip(
|
169
|
-
|
169
|
+
axs_flat,
|
170
170
|
data_dict,
|
171
171
|
):
|
172
172
|
# Plot the histogram for the chosen metric
|
@@ -177,7 +177,7 @@ def histogram_plot(
|
|
177
177
|
ax.set_ylabel(ylabel)
|
178
178
|
ax.set_xlabel(xlabel)
|
179
179
|
|
180
|
-
for ax in
|
180
|
+
for ax in axs_flat[num_metrics:]:
|
181
181
|
ax.axis("off")
|
182
182
|
ax.set_visible(False)
|
183
183
|
|
@@ -222,9 +222,9 @@ def channel_histogram_plot(
|
|
222
222
|
rows = math.ceil(num_metrics / 3)
|
223
223
|
cols = min(num_metrics, 3)
|
224
224
|
fig, axs = plt.subplots(rows, 3, figsize=(cols * 3 + 1, rows * 3))
|
225
|
-
|
225
|
+
axs_flat = np.asarray(axs).flatten()
|
226
226
|
for ax, metric in zip(
|
227
|
-
|
227
|
+
axs_flat,
|
228
228
|
data_keys,
|
229
229
|
):
|
230
230
|
# Plot the histogram for the chosen metric
|
@@ -246,7 +246,7 @@ def channel_histogram_plot(
|
|
246
246
|
ax.set_ylabel(ylabel)
|
247
247
|
ax.set_xlabel(xlabel)
|
248
248
|
|
249
|
-
for ax in
|
249
|
+
for ax in axs_flat[num_metrics:]:
|
250
250
|
ax.axis("off")
|
251
251
|
ax.set_visible(False)
|
252
252
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dataeval
|
3
|
-
Version: 0.86.
|
3
|
+
Version: 0.86.4
|
4
4
|
Summary: DataEval provides a simple interface to characterize image data and its impact on model performance across classification and object-detection tasks
|
5
5
|
Home-page: https://dataeval.ai/
|
6
6
|
License: MIT
|
@@ -1,10 +1,10 @@
|
|
1
|
-
dataeval/__init__.py,sha256=
|
1
|
+
dataeval/__init__.py,sha256=6gfYCGo82QKKO58jQSma27Mr-R316vmCDbTjXRh5B7o,1636
|
2
2
|
dataeval/_log.py,sha256=C7AGkIRzymvYJ0LQXtnShiy3i5Xrp8T58JzIHHguk_Q,365
|
3
3
|
dataeval/config.py,sha256=hjad0TK1UmaKQlUuxqxt64_OAUqZkHjicBf06cvTyrQ,4082
|
4
4
|
dataeval/data/__init__.py,sha256=wzQ6uUFLNB3VJR0a2QnRBYwEmwXT93q0WpHu7FmFW1E,486
|
5
5
|
dataeval/data/_embeddings.py,sha256=PFjpdV9bfusCB4taTIYSzx1hP8nJb_KCkZTN8kMw-Hs,12885
|
6
|
-
dataeval/data/_images.py,sha256=
|
7
|
-
dataeval/data/_metadata.py,sha256=
|
6
|
+
dataeval/data/_images.py,sha256=Rc_59CuU4zfN7Xm7an1XUx8ZghQg6a56VJWMZD9edRw,2654
|
7
|
+
dataeval/data/_metadata.py,sha256=5pND6IZ5KeEGrhCDiBVxhU_BXWU0okBxt8oNkZ9a2_M,14309
|
8
8
|
dataeval/data/_selection.py,sha256=r06xeiyK8nTWPLyItkoPQRWZI1i6LATSue_cuEbCdc4,4463
|
9
9
|
dataeval/data/_split.py,sha256=nQABR05vxil2Qx7-uX4Fm0_DWpibskBGDJOYj_b1u3I,16737
|
10
10
|
dataeval/data/selections/__init__.py,sha256=2m8ZB53wXzqLcqmc6p5atO6graB6ZyiRSNJFxf11X_g,613
|
@@ -38,12 +38,12 @@ dataeval/detectors/ood/ae.py,sha256=fTrUfFxv6xUqzKpwMC8rW3JrizA16M_bgzqLuBKMrS0,
|
|
38
38
|
dataeval/detectors/ood/base.py,sha256=9b-Ljznf0lB1SXF4F_Aj3eJ4Y3ijGEDPMjucUsWOGJM,3051
|
39
39
|
dataeval/detectors/ood/mixin.py,sha256=0_o-1HPvgf3-Lf1MSOIfjj5UB8LTLEBGYtJJfyCCzwc,5431
|
40
40
|
dataeval/metadata/__init__.py,sha256=XDDmJbOZBNM6pL0r6Nbu6oMRoyAh22IDkPYGndNlkZU,316
|
41
|
-
dataeval/metadata/_distance.py,sha256=
|
41
|
+
dataeval/metadata/_distance.py,sha256=MbXM9idsooNWnGLaTKg8j4ZqavUeJUjuW7EPW3-UQyg,4234
|
42
42
|
dataeval/metadata/_ood.py,sha256=lNPHouj_9WfM_uTtsaiRaPn46RcVy3YebD1c32vDj-c,8981
|
43
43
|
dataeval/metadata/_utils.py,sha256=BcGoYVfA4AkAWpInY5txOc3QBpsGf6cnnUAsHOQTJAE,1210
|
44
44
|
dataeval/metrics/__init__.py,sha256=8VC8q3HuJN3o_WN51Ae2_wXznl3RMXIvA5GYVcy7vr8,225
|
45
45
|
dataeval/metrics/bias/__init__.py,sha256=329S1_3WnWqeU4-qVcbe0fMy4lDrj9uKslWHIQf93yg,839
|
46
|
-
dataeval/metrics/bias/_balance.py,sha256=
|
46
|
+
dataeval/metrics/bias/_balance.py,sha256=fREtoMLUZPOf_ivqNKwij6oPiKMTk02ECO5rWURf3KY,5541
|
47
47
|
dataeval/metrics/bias/_completeness.py,sha256=BysXU2Jpw33n5dl3acJFEqF3mFGiJLsfG4n5Q2fkTaY,4608
|
48
48
|
dataeval/metrics/bias/_coverage.py,sha256=PeUoOiaghUEdn6Ov8z2-am7-fnBVIPcFbJK7Ty5JObA,3647
|
49
49
|
dataeval/metrics/bias/_diversity.py,sha256=25udDKmel9IjeVT5nM4dOa1apda66QdRxBc922yuUvI,5830
|
@@ -59,7 +59,7 @@ dataeval/metrics/stats/_boxratiostats.py,sha256=ROZrlqgbowkGfCR5PJ5TL7Og40iMOdUq
|
|
59
59
|
dataeval/metrics/stats/_dimensionstats.py,sha256=EVO-BlxrZl8qrP09lwPbyWdrG1ZeDtgj4LiswDwEZ1I,2896
|
60
60
|
dataeval/metrics/stats/_hashstats.py,sha256=qa1CYRgOebkxqkALfffaPM-kJ074ZbyfpWbfOfuObSs,4758
|
61
61
|
dataeval/metrics/stats/_imagestats.py,sha256=gUPNgN5Zwzdr7WnSwbve1NXNsyxd5dy3cSnlR_7guCg,3007
|
62
|
-
dataeval/metrics/stats/_labelstats.py,sha256=
|
62
|
+
dataeval/metrics/stats/_labelstats.py,sha256=UG7aKpFctLJvca3rC9sPT_25sCes77KpgZguJYMXfU0,2949
|
63
63
|
dataeval/metrics/stats/_pixelstats.py,sha256=5RCQh0OQkHiCkn3DgCPVxKoFfifX_FOtwsnotADSZ0I,3265
|
64
64
|
dataeval/metrics/stats/_visualstats.py,sha256=0k6bvAL_d66nQMfG7bydCOFJb7B0dhgG7fqCjVTp1sg,3707
|
65
65
|
dataeval/outputs/__init__.py,sha256=geHB5M3QOiFFaQGV4ZwDTTKpqZPvPePbqG7lzaPhaXQ,1741
|
@@ -67,10 +67,10 @@ dataeval/outputs/_base.py,sha256=-Wa0gFcBVLbfWPMZyCql7x4vGsnkLP4pecsQIeUZ2_Y,590
|
|
67
67
|
dataeval/outputs/_bias.py,sha256=1OZpKncYTryjPLRHb4d6NlhE27uPT57gCob_5jtjKDI,10456
|
68
68
|
dataeval/outputs/_drift.py,sha256=rKn5vqMR6XNujgSqfHsH76oFkoGsUusquZL2Qy4Ae6Y,4581
|
69
69
|
dataeval/outputs/_estimators.py,sha256=mh-R08CgYtmq9ffANDMYR-V4vrZnSjOjEyOMiMDZ2Ic,3091
|
70
|
-
dataeval/outputs/_linters.py,sha256=
|
70
|
+
dataeval/outputs/_linters.py,sha256=k8lkd8EZ23q0m-HOD-FgqMcLQFy1UH7vws2ucLPyn08,6697
|
71
71
|
dataeval/outputs/_metadata.py,sha256=ffZgpX8KWURPHXpOWjbvJ2KRqWQkS2nWuIjKUzoHhMI,1710
|
72
72
|
dataeval/outputs/_ood.py,sha256=suLKVXULGtXH0rq9eXHI1d3d2jhGmItJtz4QiQd47A4,1718
|
73
|
-
dataeval/outputs/_stats.py,sha256=
|
73
|
+
dataeval/outputs/_stats.py,sha256=F-515PGBNB69DXM-YaCkGHAyaXkCD-yYvKfj4-q7R4w,15247
|
74
74
|
dataeval/outputs/_utils.py,sha256=NfhYaGT2PZlhIs8ICKUsPWHZXjhWYDkEJqBDdqMeaOM,929
|
75
75
|
dataeval/outputs/_workflows.py,sha256=K786mOgegxVi81diUA-qpbwGEkwa8YA7Fk4ttgjJeaY,10831
|
76
76
|
dataeval/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -83,7 +83,7 @@ dataeval/utils/_fast_mst.py,sha256=pv42flr1Uf5RBa9qDG0YLDXWH7Mr7a9zpauO1HqZXaY,8
|
|
83
83
|
dataeval/utils/_image.py,sha256=4uxTIOYZZlRJOfNmdA3ek3no3FrLWCK5un48kStMDt8,3578
|
84
84
|
dataeval/utils/_method.py,sha256=9B9JQbgqWJBRhQJb7glajUtWaQzUTIUuvrZ9_bisxsM,394
|
85
85
|
dataeval/utils/_mst.py,sha256=bLmJmu_1Dtj3hC5gQp3oAiJ_7TKtEjahTqusVRRU4eI,2168
|
86
|
-
dataeval/utils/_plot.py,sha256=
|
86
|
+
dataeval/utils/_plot.py,sha256=1rnMkBRvTFLoTAHqXwF7c7GJ5_5iqlgarZKAzmYciLk,7225
|
87
87
|
dataeval/utils/data/__init__.py,sha256=xGzrjrOxOP2DP1tU84AWMKPnSxFvSjM81CTlDg4rNM8,331
|
88
88
|
dataeval/utils/data/_dataset.py,sha256=CFK9h-XPN7J-iF2nXol6keMDbGm6VIweFAMAjXRUlhg,9527
|
89
89
|
dataeval/utils/data/collate.py,sha256=5egEEKhNNCGeNLChO1p6dZ4Wg6x51VEaMNHz7hEZUxI,3936
|
@@ -107,7 +107,7 @@ dataeval/utils/torch/models.py,sha256=1idpXyjrYcCBSsbxxRUOto8xr4MJNjDEqQHiIXVU5Z
|
|
107
107
|
dataeval/utils/torch/trainer.py,sha256=Oc2lK13uPGhmLYbmAqlPWyKxgG4YJFlnSXCqFHUZbdA,5528
|
108
108
|
dataeval/workflows/__init__.py,sha256=ou8y0KO-d6W5lgmcyLjKlf-J_ckP3vilW7wHkgiDlZ4,255
|
109
109
|
dataeval/workflows/sufficiency.py,sha256=j-R8dg4XE6a66p_oTXG2GNzgg3vGk85CTblxhFXaxog,8513
|
110
|
-
dataeval-0.86.
|
111
|
-
dataeval-0.86.
|
112
|
-
dataeval-0.86.
|
113
|
-
dataeval-0.86.
|
110
|
+
dataeval-0.86.4.dist-info/LICENSE.txt,sha256=uAooygKWvX6NbU9Ran9oG2msttoG8aeTeHSTe5JeCnY,1061
|
111
|
+
dataeval-0.86.4.dist-info/METADATA,sha256=qdxTuVh3WxpHvsdRZhAvQIYxiATJLDixoF97xMFYrXM,5353
|
112
|
+
dataeval-0.86.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
113
|
+
dataeval-0.86.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|