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 CHANGED
@@ -8,7 +8,7 @@ shifts that impact performance of deployed models.
8
8
  from __future__ import annotations
9
9
 
10
10
  __all__ = ["config", "detectors", "log", "metrics", "typing", "utils", "workflows"]
11
- __version__ = "0.86.3"
11
+ __version__ = "0.86.4"
12
12
 
13
13
  import logging
14
14
 
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")
@@ -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 f"{col}[|]" in columns):
204
- self._dataframe.drop_in_place(f"{col}[|]")
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 = [index2label.get(i, str(i)) for i in np.unique(labels)]
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 f"{col}[|]" not in column_set):
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 = f"{col}[|]"
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.
@@ -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.get_factors_by_type("continuous")
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((metadata.class_labels[:, np.newaxis], data))
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
- num_classes = len(metadata.class_names)
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
- classes = np.unique(metadata.class_labels)
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, Mapping, TypeVar
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.sort("class_label")["len"].to_list()
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.sort("class_label")["len"].to_list()
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: list[list[int]] = [[] for _ in range(len(metadata.class_names))]
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.count().alias("label_count"))
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
  )
@@ -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 enumerate(lstats.image_indices_per_class):
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
 
@@ -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, list]
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: Sequence[int]
287
+ label_counts_per_class: Mapping[int, int]
288
288
  label_counts_per_image: Sequence[int]
289
- image_counts_per_class: Sequence[int]
290
- image_indices_per_class: Sequence[Sequence[int]]
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
- axs.flat,
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 axs.flat[num_metrics:]:
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
- axs.flat,
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 axs.flat[num_metrics:]:
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
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=Z_VUOb2gf--uAtqeXyzIPUm11noNeEj16OSfkc6H6-Y,1636
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=3d4Cv-xg5z6_LVtw1eL_QdFwzbDI1cwvPNQblkrMEMk,2622
7
- dataeval/data/_metadata.py,sha256=jEfGZhhvry7qtjU47VifL8ZO1hqXg1jntR3CztkaoWU,14462
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=AABrGoQyD13z9Fqlz3NyfX0Iow_vjBwAugIv6OSRTTE,4187
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=L5TR8Twwodulk8xkhE-L7PR-isPGw4LusIjL3ZHIH8c,5525
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=bOLH4FEBN4JZ5njdRVjEK7GUb47XBMq9eqYUgXSLmCY,3071
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=ZClITD4XY99TunS_9ABTl7eauppoUdpCZU1pCVvD0cI,6700
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=KIghl-glm9A_h1eVQDKqdTQg8o2zedltWyX4NkCsv2U,15226
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=3yn5UGL2xUeayPNws2bkvxm9ZCURsVUkpvSrwOqUE7g,7145
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.3.dist-info/LICENSE.txt,sha256=uAooygKWvX6NbU9Ran9oG2msttoG8aeTeHSTe5JeCnY,1061
111
- dataeval-0.86.3.dist-info/METADATA,sha256=1zOfOabm9w57nxAWZw5InEzmqyWRRko10btPqT0h64o,5353
112
- dataeval-0.86.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
113
- dataeval-0.86.3.dist-info/RECORD,,
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,,