dataeval 0.73.1__py3-none-any.whl → 0.74.1__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.
Files changed (59) hide show
  1. dataeval/__init__.py +3 -9
  2. dataeval/detectors/__init__.py +2 -10
  3. dataeval/detectors/drift/base.py +3 -3
  4. dataeval/detectors/drift/mmd.py +1 -1
  5. dataeval/detectors/drift/torch.py +1 -101
  6. dataeval/detectors/linters/clusterer.py +3 -3
  7. dataeval/detectors/linters/duplicates.py +4 -4
  8. dataeval/detectors/linters/outliers.py +4 -4
  9. dataeval/detectors/ood/__init__.py +9 -9
  10. dataeval/detectors/ood/{ae.py → ae_torch.py} +22 -27
  11. dataeval/detectors/ood/base.py +63 -113
  12. dataeval/detectors/ood/base_torch.py +109 -0
  13. dataeval/detectors/ood/metadata_ks_compare.py +52 -14
  14. dataeval/interop.py +1 -1
  15. dataeval/metrics/bias/__init__.py +3 -0
  16. dataeval/metrics/bias/balance.py +73 -70
  17. dataeval/metrics/bias/coverage.py +4 -4
  18. dataeval/metrics/bias/diversity.py +67 -136
  19. dataeval/metrics/bias/metadata_preprocessing.py +285 -0
  20. dataeval/metrics/bias/metadata_utils.py +229 -0
  21. dataeval/metrics/bias/parity.py +51 -161
  22. dataeval/metrics/estimators/ber.py +3 -3
  23. dataeval/metrics/estimators/divergence.py +3 -3
  24. dataeval/metrics/estimators/uap.py +3 -3
  25. dataeval/metrics/stats/base.py +2 -2
  26. dataeval/metrics/stats/boxratiostats.py +1 -1
  27. dataeval/metrics/stats/datasetstats.py +6 -6
  28. dataeval/metrics/stats/dimensionstats.py +1 -1
  29. dataeval/metrics/stats/hashstats.py +1 -1
  30. dataeval/metrics/stats/labelstats.py +3 -3
  31. dataeval/metrics/stats/pixelstats.py +1 -1
  32. dataeval/metrics/stats/visualstats.py +1 -1
  33. dataeval/output.py +77 -53
  34. dataeval/utils/__init__.py +1 -7
  35. dataeval/utils/gmm.py +26 -0
  36. dataeval/utils/metadata.py +29 -9
  37. dataeval/utils/torch/gmm.py +98 -0
  38. dataeval/utils/torch/models.py +192 -0
  39. dataeval/utils/torch/trainer.py +84 -5
  40. dataeval/utils/torch/utils.py +107 -1
  41. dataeval/workflows/sufficiency.py +4 -4
  42. {dataeval-0.73.1.dist-info → dataeval-0.74.1.dist-info}/METADATA +3 -9
  43. dataeval-0.74.1.dist-info/RECORD +65 -0
  44. dataeval/detectors/ood/aegmm.py +0 -66
  45. dataeval/detectors/ood/llr.py +0 -302
  46. dataeval/detectors/ood/vae.py +0 -97
  47. dataeval/detectors/ood/vaegmm.py +0 -75
  48. dataeval/metrics/bias/metadata.py +0 -440
  49. dataeval/utils/lazy.py +0 -26
  50. dataeval/utils/tensorflow/__init__.py +0 -19
  51. dataeval/utils/tensorflow/_internal/gmm.py +0 -123
  52. dataeval/utils/tensorflow/_internal/loss.py +0 -121
  53. dataeval/utils/tensorflow/_internal/models.py +0 -1394
  54. dataeval/utils/tensorflow/_internal/trainer.py +0 -114
  55. dataeval/utils/tensorflow/_internal/utils.py +0 -256
  56. dataeval/utils/tensorflow/loss/__init__.py +0 -11
  57. dataeval-0.73.1.dist-info/RECORD +0 -73
  58. {dataeval-0.73.1.dist-info → dataeval-0.74.1.dist-info}/LICENSE.txt +0 -0
  59. {dataeval-0.73.1.dist-info → dataeval-0.74.1.dist-info}/WHEEL +0 -0
@@ -1,114 +0,0 @@
1
- """
2
- Source code derived from Alibi-Detect 0.11.4
3
- https://github.com/SeldonIO/alibi-detect/tree/v0.11.4
4
-
5
- Original code Copyright (c) 2023 Seldon Technologies Ltd
6
- Licensed under Apache Software License (Apache 2.0)
7
- """
8
-
9
- from __future__ import annotations
10
-
11
- from typing import TYPE_CHECKING, Callable, Iterable, cast
12
-
13
- import numpy as np
14
- from numpy.typing import NDArray
15
-
16
- from dataeval.utils.lazy import lazyload
17
-
18
- if TYPE_CHECKING:
19
- import tensorflow as tf
20
- import tf_keras as keras
21
- else:
22
- tf = lazyload("tensorflow")
23
- keras = lazyload("tf_keras")
24
-
25
-
26
- def trainer(
27
- model: keras.Model,
28
- x_train: NDArray,
29
- y_train: NDArray | None = None,
30
- loss_fn: Callable[..., tf.Tensor] | None = None,
31
- optimizer: keras.optimizers.Optimizer | None = None,
32
- preprocess_fn: Callable[[tf.Tensor], tf.Tensor] | None = None,
33
- epochs: int = 20,
34
- reg_loss_fn: Callable[[keras.Model], tf.Tensor] = (lambda _: cast(tf.Tensor, tf.Variable(0, dtype=tf.float32))),
35
- batch_size: int = 64,
36
- buffer_size: int = 1024,
37
- verbose: bool = True,
38
- ) -> None:
39
- """
40
- Train TensorFlow model.
41
-
42
- Parameters
43
- ----------
44
- model
45
- Model to train.
46
- loss_fn
47
- Loss function used for training.
48
- x_train
49
- Training data.
50
- y_train
51
- Training labels.
52
- optimizer
53
- Optimizer used for training.
54
- preprocess_fn
55
- Preprocessing function applied to each training batch.
56
- epochs
57
- Number of training epochs.
58
- reg_loss_fn
59
- Allows an additional regularisation term to be defined as reg_loss_fn(model)
60
- batch_size
61
- Batch size used for training.
62
- buffer_size
63
- Maximum number of elements that will be buffered when prefetching.
64
- verbose
65
- Whether to print training progress.
66
- """
67
- loss_fn = loss_fn() if isinstance(loss_fn, type) else loss_fn
68
- optimizer = keras.optimizers.Adam() if optimizer is None else optimizer
69
-
70
- train_data = (
71
- x_train.astype(np.float32) if y_train is None else (x_train.astype(np.float32), y_train.astype(np.float32))
72
- )
73
- dataset = tf.data.Dataset.from_tensor_slices(train_data)
74
- dataset = dataset.shuffle(buffer_size=buffer_size).batch(batch_size)
75
- n_minibatch = len(dataset)
76
-
77
- # iterate over epochs
78
- for epoch in range(epochs):
79
- pbar = keras.utils.Progbar(n_minibatch, 1) if verbose else None
80
- if hasattr(dataset, "on_epoch_end"):
81
- dataset.on_epoch_end() # type: ignore py39
82
- loss_val_ma = 0.0
83
- for step, data in enumerate(dataset):
84
- x, y = data if isinstance(data, tuple) else (data, None)
85
- if isinstance(preprocess_fn, Callable):
86
- x = preprocess_fn(x)
87
- with tf.GradientTape() as tape:
88
- y_hat = model(x)
89
- y = x if y is None else y
90
- if isinstance(loss_fn, Callable):
91
- args = [y] + list(y_hat) if isinstance(y_hat, tuple) else [y, y_hat]
92
- loss = loss_fn(*args)
93
- else:
94
- loss = cast(tf.Tensor, tf.constant(0.0, dtype=tf.float32))
95
- if model.losses: # additional model losses
96
- loss = cast(tf.Tensor, tf.add(sum(model.losses), loss))
97
- loss = cast(tf.Tensor, tf.add(reg_loss_fn(model), loss)) # alternative way they might be specified
98
-
99
- grads = cast(Iterable, tape.gradient(loss, model.trainable_weights))
100
- optimizer.apply_gradients(zip(grads, model.trainable_weights))
101
- if pbar is not None:
102
- loss_val = getattr(loss, "numpy")() if hasattr(loss, "numpy") else np.float32(0.0)
103
- if loss_val.shape and loss_val.shape[0] != batch_size:
104
- if len(loss_val.shape) == 1:
105
- shape = (batch_size - loss_val.shape[0],)
106
- elif len(loss_val.shape) == 2:
107
- shape = (batch_size - loss_val.shape[0], loss_val.shape[1])
108
- else:
109
- continue
110
- add_mean = np.ones(shape) * loss_val.mean()
111
- loss_val = np.r_[loss_val, add_mean]
112
- loss_val_ma = loss_val_ma + (loss_val - loss_val_ma) / (step + 1)
113
- pbar_values = [("loss_ma", loss_val_ma)]
114
- pbar.add(1, values=pbar_values)
@@ -1,256 +0,0 @@
1
- """
2
- Source code derived from Alibi-Detect 0.11.4
3
- https://github.com/SeldonIO/alibi-detect/tree/v0.11.4
4
-
5
- Original code Copyright (c) 2023 Seldon Technologies Ltd
6
- Licensed under Apache Software License (Apache 2.0)
7
- """
8
-
9
- from __future__ import annotations
10
-
11
- import math
12
- from typing import TYPE_CHECKING, Any, Callable, Literal, Union, cast
13
-
14
- import numpy as np
15
- from numpy.typing import NDArray
16
-
17
- from dataeval.utils.lazy import lazyload
18
-
19
- if TYPE_CHECKING:
20
- import tensorflow as tf
21
- import tensorflow._api.v2.nn as nn
22
- import tf_keras as keras
23
-
24
- import dataeval.utils.tensorflow._internal.models as tf_models
25
- else:
26
- tf = lazyload("tensorflow")
27
- nn = lazyload("tensorflow._api.v2.nn")
28
- keras = lazyload("tf_keras")
29
- tf_models = lazyload("dataeval.utils.tensorflow._internal.models")
30
-
31
-
32
- def predict_batch(
33
- x: list | NDArray | tf.Tensor,
34
- model: Callable | keras.Model,
35
- batch_size: int = int(1e10),
36
- preprocess_fn: Callable | None = None,
37
- dtype: type[np.generic] | tf.DType = np.float32,
38
- ) -> NDArray | tf.Tensor | tuple | list:
39
- """
40
- Make batch predictions on a model.
41
-
42
- Parameters
43
- ----------
44
- x
45
- Batch of instances.
46
- model
47
- tf.keras model or one of the other permitted types defined in Data.
48
- batch_size
49
- Batch size used during prediction.
50
- preprocess_fn
51
- Optional preprocessing function for each batch.
52
- dtype
53
- Model output type, e.g. np.float32 or tf.float32.
54
-
55
- Returns
56
- -------
57
- :term:`NumPy` array, tensorflow tensor or tuples of those with model outputs.
58
- """
59
- n = len(x)
60
- n_minibatch = int(np.ceil(n / batch_size))
61
- return_np = not isinstance(dtype, tf.DType)
62
- return_list = False
63
- preds: list | tuple = []
64
- for i in range(n_minibatch):
65
- istart, istop = i * batch_size, min((i + 1) * batch_size, n)
66
- x_batch = x[istart:istop] # type: ignore
67
- if isinstance(preprocess_fn, Callable): # type: ignore
68
- x_batch = preprocess_fn(x_batch)
69
- preds_tmp = model(x_batch)
70
- if isinstance(preds_tmp, (list, tuple)):
71
- if len(preds) == 0: # init tuple with lists to store predictions
72
- preds = tuple([] for _ in range(len(preds_tmp)))
73
- return_list = isinstance(preds_tmp, list)
74
- for j, p in enumerate(preds_tmp):
75
- preds[j].append(p if not return_np or isinstance(p, np.ndarray) else p.numpy())
76
- elif isinstance(preds_tmp, (np.ndarray, tf.Tensor)):
77
- preds.append( # type: ignore
78
- preds_tmp
79
- if not return_np or isinstance(preds_tmp, np.ndarray) # type: ignore
80
- else preds_tmp.numpy() # type: ignore
81
- )
82
- else:
83
- raise TypeError(
84
- f"Model output type {type(preds_tmp)} not supported. The model output "
85
- f"type needs to be one of list, tuple, NDArray or tf.Tensor."
86
- )
87
- concat = np.concatenate if return_np else tf.concat
88
- out = cast(
89
- Union[tuple, tf.Tensor, np.ndarray],
90
- tuple(concat(p, axis=0) for p in preds) if isinstance(preds, tuple) else concat(preds, axis=0),
91
- )
92
- if return_list:
93
- out = list(out)
94
- return out
95
-
96
-
97
- def get_default_encoder_net(input_shape: tuple[int, int, int], encoding_dim: int):
98
- return keras.Sequential(
99
- [
100
- keras.layers.InputLayer(input_shape=input_shape),
101
- keras.layers.Conv2D(64, 4, strides=2, padding="same", activation=nn.relu),
102
- keras.layers.Conv2D(128, 4, strides=2, padding="same", activation=nn.relu),
103
- keras.layers.Conv2D(512, 4, strides=2, padding="same", activation=nn.relu),
104
- keras.layers.Flatten(),
105
- keras.layers.Dense(encoding_dim),
106
- ]
107
- )
108
-
109
-
110
- def get_default_decoder_net(input_shape: tuple[int, int, int], encoding_dim: int):
111
- return keras.Sequential(
112
- [
113
- keras.layers.InputLayer(input_shape=(encoding_dim,)),
114
- keras.layers.Dense(4 * 4 * 128),
115
- keras.layers.Reshape(target_shape=(4, 4, 128)),
116
- keras.layers.Conv2DTranspose(256, 4, strides=2, padding="same", activation=nn.relu),
117
- keras.layers.Conv2DTranspose(64, 4, strides=2, padding="same", activation=nn.relu),
118
- keras.layers.Flatten(),
119
- keras.layers.Dense(math.prod(input_shape)),
120
- keras.layers.Reshape(target_shape=input_shape),
121
- ]
122
- )
123
-
124
-
125
- def create_model(
126
- model_type: Literal["AE", "AEGMM", "PixelCNN", "VAE", "VAEGMM"],
127
- input_shape: tuple[int, int, int],
128
- encoding_dim: int | None = None,
129
- n_gmm: int | None = None,
130
- gmm_latent_dim: int | None = None,
131
- ) -> Any:
132
- """
133
- Create a default model for the specified model type.
134
-
135
- Parameters
136
- ----------
137
- model_type : Literal["AE", "AEGMM", "PixelCNN", "VAE", "VAEGMM"]
138
- The model type to create.
139
- input_shape : Tuple[int, int, int]
140
- The input shape of the data used.
141
- encoding_dim : int, optional - default None
142
- The target encoding dimensionality.
143
- n_gmm : int, optional - default None
144
- Number of components used in the GMM layer.
145
- gmm_latent_dim : int, optional - default None
146
- Latent dimensionality of the GMM layer.
147
- """
148
- input_dim = math.prod(input_shape)
149
- encoding_dim = int(math.pow(2, int(input_dim.bit_length() * 0.8)) if encoding_dim is None else encoding_dim)
150
- if model_type == "AE":
151
- return tf_models.AE(
152
- get_default_encoder_net(input_shape, encoding_dim),
153
- get_default_decoder_net(input_shape, encoding_dim),
154
- )
155
-
156
- if model_type == "VAE":
157
- return tf_models.VAE(
158
- get_default_encoder_net(input_shape, encoding_dim),
159
- get_default_decoder_net(input_shape, encoding_dim),
160
- encoding_dim,
161
- )
162
-
163
- if model_type == "AEGMM":
164
- n_gmm = 2 if n_gmm is None else n_gmm
165
- gmm_latent_dim = 1 if gmm_latent_dim is None else gmm_latent_dim
166
- # The outlier detector is an encoder/decoder architecture
167
- encoder_net = keras.Sequential(
168
- [
169
- keras.layers.Flatten(),
170
- keras.layers.InputLayer(input_shape=(input_dim,)),
171
- keras.layers.Dense(60, activation=nn.tanh),
172
- keras.layers.Dense(30, activation=nn.tanh),
173
- keras.layers.Dense(10, activation=nn.tanh),
174
- keras.layers.Dense(gmm_latent_dim, activation=None),
175
- ]
176
- )
177
- # Here we define the decoder
178
- decoder_net = keras.Sequential(
179
- [
180
- keras.layers.InputLayer(input_shape=(gmm_latent_dim,)),
181
- keras.layers.Dense(10, activation=nn.tanh),
182
- keras.layers.Dense(30, activation=nn.tanh),
183
- keras.layers.Dense(60, activation=nn.tanh),
184
- keras.layers.Dense(input_dim, activation=None),
185
- keras.layers.Reshape(target_shape=input_shape),
186
- ]
187
- )
188
- # GMM autoencoders have a density network too
189
- gmm_density_net = keras.Sequential(
190
- [
191
- keras.layers.InputLayer(input_shape=(gmm_latent_dim + 2,)),
192
- keras.layers.Dense(10, activation=nn.tanh),
193
- keras.layers.Dense(n_gmm, activation=nn.softmax),
194
- ]
195
- )
196
- return tf_models.AEGMM(
197
- encoder_net=encoder_net,
198
- decoder_net=decoder_net,
199
- gmm_density_net=gmm_density_net,
200
- n_gmm=n_gmm,
201
- )
202
-
203
- if model_type == "VAEGMM":
204
- n_gmm = 2 if n_gmm is None else n_gmm
205
- gmm_latent_dim = 2 if gmm_latent_dim is None else gmm_latent_dim
206
- # The outlier detector is an encoder/decoder architecture
207
- # Here we define the encoder
208
- encoder_net = keras.Sequential(
209
- [
210
- keras.layers.Flatten(),
211
- keras.layers.InputLayer(input_shape=(input_dim,)),
212
- keras.layers.Dense(20, activation=nn.relu),
213
- keras.layers.Dense(15, activation=nn.relu),
214
- keras.layers.Dense(7, activation=nn.relu),
215
- ]
216
- )
217
- # Here we define the decoder
218
- decoder_net = keras.Sequential(
219
- [
220
- keras.layers.InputLayer(input_shape=(gmm_latent_dim,)),
221
- keras.layers.Dense(7, activation=nn.relu),
222
- keras.layers.Dense(15, activation=nn.relu),
223
- keras.layers.Dense(20, activation=nn.relu),
224
- keras.layers.Dense(input_dim, activation=None),
225
- keras.layers.Reshape(target_shape=input_shape),
226
- ]
227
- )
228
- # GMM autoencoders have a density network too
229
- gmm_density_net = keras.Sequential(
230
- [
231
- keras.layers.InputLayer(input_shape=(gmm_latent_dim + 2,)),
232
- keras.layers.Dense(10, activation=nn.relu),
233
- keras.layers.Dense(n_gmm, activation=nn.softmax),
234
- ]
235
- )
236
- return tf_models.VAEGMM(
237
- encoder_net=encoder_net,
238
- decoder_net=decoder_net,
239
- gmm_density_net=gmm_density_net,
240
- n_gmm=n_gmm,
241
- latent_dim=gmm_latent_dim,
242
- )
243
-
244
- if model_type == "PixelCNN":
245
- return tf_models.PixelCNN(
246
- image_shape=input_shape,
247
- num_resnet=5,
248
- num_hierarchies=2,
249
- num_filters=32,
250
- num_logistic_mix=1,
251
- receptive_field_dims=(3, 3),
252
- dropout_p=0.3,
253
- l2_weight=0.0,
254
- )
255
-
256
- raise TypeError(f"Unknown model specified: {model_type}.")
@@ -1,11 +0,0 @@
1
- from dataeval import _IS_TENSORFLOW_AVAILABLE
2
-
3
- __all__ = []
4
-
5
-
6
- if _IS_TENSORFLOW_AVAILABLE:
7
- from dataeval.utils.tensorflow._internal.loss import Elbo, LossGMM
8
-
9
- __all__ = ["Elbo", "LossGMM"]
10
-
11
- del _IS_TENSORFLOW_AVAILABLE
@@ -1,73 +0,0 @@
1
- dataeval/__init__.py,sha256=SdXxst_wmjSoQkYzGdR-JXSV-iJmKynWsiwkpmGDDPE,601
2
- dataeval/detectors/__init__.py,sha256=mwAyY54Hvp6N4D57cde3_besOinK8jVF43k0Mw4XZi8,363
3
- dataeval/detectors/drift/__init__.py,sha256=BSXm21y7cAawHep-ZldCJ5HOvzYjPzYGKGrmoEs3i0E,737
4
- dataeval/detectors/drift/base.py,sha256=xwI6C-PEH0ZjpSqP6No6WDZp42DnE16OHi_mXe2JSvI,14499
5
- dataeval/detectors/drift/cvm.py,sha256=kc59w2_wtxFGNnLcaJRvX5v_38gPXiebSGNiFVdunEQ,4142
6
- dataeval/detectors/drift/ks.py,sha256=gcpe1WIQeNeZdLYkdMZCFLXUp1bHMQUxwJE6-RLVOXs,4229
7
- dataeval/detectors/drift/mmd.py,sha256=TqGOnUNYKwpS0GQPV3dSl-_qRa0g2flmoQ-dxzW_JfY,7586
8
- dataeval/detectors/drift/torch.py,sha256=D46J72OPW8-PpP3w9ODMBfcDSdailIgVjgHVFpbYfws,11649
9
- dataeval/detectors/drift/uncertainty.py,sha256=Xz2yzJjtJfw1vLag234jwRvaa_HK36nMajGx8bQaNRs,5322
10
- dataeval/detectors/drift/updates.py,sha256=UJ0z5hlunRi7twnkLABfdJG3tT2EqX4y9IGx8_USYvo,1780
11
- dataeval/detectors/linters/__init__.py,sha256=BvpaB1RUpkEhhXk3Mqi5NYoOcJKZRFSBOJCmQOIfYRU,483
12
- dataeval/detectors/linters/clusterer.py,sha256=sau5A9YcQ6VDjbZGOIaCaRHW_63opaA31pqHo5Rm-hQ,21018
13
- dataeval/detectors/linters/duplicates.py,sha256=tOD43rJkvheIA3mznbUqHhft2yD3xRZQdCt61daIca4,5665
14
- dataeval/detectors/linters/merged_stats.py,sha256=X-bDTwjyR8RuVmzxLaHZmQ5nI3oOWvsqVlitdSncapk,1355
15
- dataeval/detectors/linters/outliers.py,sha256=BUVvtbKHo04KnRmrgb84MBr0l1gtcY3-xNCHjetFrEQ,10117
16
- dataeval/detectors/ood/__init__.py,sha256=yzvCszJ0KrX9Eu4S_ykC_jwC0uYGPjxY3Vyx9fU3zQk,641
17
- dataeval/detectors/ood/ae.py,sha256=XQ_rCsf0VWg_2YXt33XGe6ZgxEud1PfIl7TmBVP1GkM,2347
18
- dataeval/detectors/ood/aegmm.py,sha256=6UKv0uJYWAzu1F-cITFGly4w9y_t7wqg3OmVyCN365o,2041
19
- dataeval/detectors/ood/base.py,sha256=a_d52pJMWVmduSt8OvUWYwHE8mpCaI6pIAE4_ib_GOs,8841
20
- dataeval/detectors/ood/llr.py,sha256=TwUk1RsZhnM5tUssGVMBhWggCW2izs_Asy9QPHkTJaU,10615
21
- dataeval/detectors/ood/metadata_ks_compare.py,sha256=jH7uDwyyBIIcTrRhQEdnLAdrwf7LfNczKBw0CpJyF5c,4282
22
- dataeval/detectors/ood/metadata_least_likely.py,sha256=nxMCXUOjOfWHDTGT2SLE7OYBCydRq8zHLd8t17k7hMM,5193
23
- dataeval/detectors/ood/metadata_ood_mi.py,sha256=KLay2BmgHrStBV92VpIs_B1yEfQKllsMTgzOQEng01I,4065
24
- dataeval/detectors/ood/vae.py,sha256=UKrQNFdHcnxAY0fAFbLrXasY8Z6qg138BXxqwc1hlts,3154
25
- dataeval/detectors/ood/vaegmm.py,sha256=_wwmT37URs0MyhbORk91XJExClv-4e15LH_Bj60Pw1w,2409
26
- dataeval/interop.py,sha256=TZCkZo844DvzHoxuRo-YsBhT6GvKmyQTHtUEQZPly1M,1728
27
- dataeval/metrics/__init__.py,sha256=fPBNLd-T6mCErZBBJrxWmXIL0jCk7fNUYIcNEBkMa80,238
28
- dataeval/metrics/bias/__init__.py,sha256=puf645-hAO5hFHNHlZ239TPopqWIoN-uLGXFB8-hA_o,599
29
- dataeval/metrics/bias/balance.py,sha256=n4SM2Z46dzps_SPgHV8Q69msZ507AP9neebsQ45cNxc,9170
30
- dataeval/metrics/bias/coverage.py,sha256=7nDufCmQwZ8QG3Me5UiY0N5YoTByjcwK2zOYuMOHkJ0,4540
31
- dataeval/metrics/bias/diversity.py,sha256=BKGpyJ1K3S5RS_VxXN5DusB2gfRidOksL7r0L3SFa0Y,11018
32
- dataeval/metrics/bias/metadata.py,sha256=tPvyfFkfqWBFMX6v8i1ZLAA3DZfF6M4O7qXDdKzhQ6g,15040
33
- dataeval/metrics/bias/parity.py,sha256=_-WdKRWPlKHLNbjq-4mIhVdR1MI3NEabbMWblAmmVRM,17145
34
- dataeval/metrics/estimators/__init__.py,sha256=O6ocxJq8XDkfJWwXeJnnnzbOyRnFPKF4kTIVTTZYOA8,380
35
- dataeval/metrics/estimators/ber.py,sha256=SVT-BIC_GLs0l2l2NhWu4OpRbgn96w-OwTSoPHTnQbE,5037
36
- dataeval/metrics/estimators/divergence.py,sha256=pImaa216-YYTgGWDCSTcpJrC-dfl7150yVrPfW_TyGc,4293
37
- dataeval/metrics/estimators/uap.py,sha256=Tz1VZOyUa68HlTh94Rl-wnXCWdTAVjTQc3LtSPEWVu4,2175
38
- dataeval/metrics/stats/__init__.py,sha256=igLRaAt1nX6yRwC4xI0zNPBADi3u7EsSxWP3OZ8AqcU,1086
39
- dataeval/metrics/stats/base.py,sha256=9M5g2FAWvd50HT-T2h-MCmYLpvk--em_yWro1qWGHFs,12177
40
- dataeval/metrics/stats/boxratiostats.py,sha256=iNr-FdppiJ7XAeeLY-o7gL_PSxvT8j86iwRijKca2Eg,6465
41
- dataeval/metrics/stats/datasetstats.py,sha256=LAMFCIS9v0RjLrdKUFuo8nY-3HLVvRlqQIXGMKtsHEw,6255
42
- dataeval/metrics/stats/dimensionstats.py,sha256=xdTp2AbGH3xefUUsB4sDjgSKiojJ73DCHyuCOPKsErc,4056
43
- dataeval/metrics/stats/hashstats.py,sha256=X6aSouaMhDcGZMLuCTje3G4QOr2i-Td6H3SyBFDF6mA,4960
44
- dataeval/metrics/stats/labelstats.py,sha256=BKwSmyxCr2wYq8IMraCUS-b5wqacfT_BukJUYNfqeCo,4114
45
- dataeval/metrics/stats/pixelstats.py,sha256=x90O10IqVjEORtYwueFLvJnVYTxhPBOOx5HMweBQnJY,4578
46
- dataeval/metrics/stats/visualstats.py,sha256=y0xIvst7epcajk8vz2jngiAiz0T7DZC-M97Rs1-vV9I,4950
47
- dataeval/output.py,sha256=jWXXNxFNBEaY1rN7Z-6LZl6bQT-I7z_wqr91Rhrdt_0,3061
48
- dataeval/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- dataeval/utils/__init__.py,sha256=FZLWDA7nMbHOcdg3701cVJpQmUp1Wxxk8h_qIrUQQjY,713
50
- dataeval/utils/image.py,sha256=KgC_1nW__nGN5q6bVZNvG4U_qIBdjcPATz9qe8f2XuA,1928
51
- dataeval/utils/lazy.py,sha256=M0iBHuJh4UPrSJPHZ0jhFwRSZhyjHJQx_KEf1OCkHD8,588
52
- dataeval/utils/metadata.py,sha256=A6VN7KbdiOA6rUQvUGKwDcvtOyjBer8bRW_wFxNhmW0,8556
53
- dataeval/utils/shared.py,sha256=xvF3VLfyheVwJtdtDrneOobkKf7t-JTmf_w91FWXmqo,3616
54
- dataeval/utils/split_dataset.py,sha256=Ot1ZJhbIhVfcShYXF9MkWXak5odBXyuBdRh-noXh-MI,19555
55
- dataeval/utils/tensorflow/__init__.py,sha256=l4OjIA75JJXeNWDCkST1xtDMVYsw97lZ-9JXFBlyuYg,539
56
- dataeval/utils/tensorflow/_internal/gmm.py,sha256=RIFx8asEpi2kMf8JVzq9M3aAvNe9fjpJPf3BzWE-aeE,3787
57
- dataeval/utils/tensorflow/_internal/loss.py,sha256=TFhoNPgqeJtdpIHYobZPyzMpeWjzlFqzu5LCtthEUi4,4463
58
- dataeval/utils/tensorflow/_internal/models.py,sha256=TzQYRrFe5XomhnPw05v-HBODQdFIqWg21WH1xS0XBlg,59868
59
- dataeval/utils/tensorflow/_internal/trainer.py,sha256=uBFTnAy9o2T_FoT3RSX-AA7T-2FScyOdYEg9_7Dpd28,4314
60
- dataeval/utils/tensorflow/_internal/utils.py,sha256=lr5hKkAPbjMCUNIzMUIqbEddwbWQfMdL6hcazTHU3Uc,9541
61
- dataeval/utils/tensorflow/loss/__init__.py,sha256=Q-66vt91Oe1ByYfo28tW32zXDq2MqQ2gngWgmIVmof8,227
62
- dataeval/utils/torch/__init__.py,sha256=lpkqfgyARUxgrV94cZESQv8PIP2p-UnwItZ_wIr0XzQ,675
63
- dataeval/utils/torch/blocks.py,sha256=HVhBTMMD5NA4qheMUgyol1KWiKZDIuc8k5j4RcMKmhk,1466
64
- dataeval/utils/torch/datasets.py,sha256=10elNgLuH_FDX_CHE3y2Z215JN4-PQovQm5brcIJOeM,15021
65
- dataeval/utils/torch/models.py,sha256=0BsXmLK8W1OZ8nnEGb1f9LzIeCgtevQC37dvKS1v1vA,3236
66
- dataeval/utils/torch/trainer.py,sha256=EraOKiXxiMNiycStZNMR5yRz3ehgp87d9ewR9a9dV4w,5559
67
- dataeval/utils/torch/utils.py,sha256=FI4LJ6DvXFQJVff8fxSCP7LRkp8H9BIUgYX0kk7_Cuo,1537
68
- dataeval/workflows/__init__.py,sha256=ef1MiVL5IuhlDXXbwsiAfafhnr7tD3TXF9GRusy9_O8,290
69
- dataeval/workflows/sufficiency.py,sha256=1jSYhH9i4oesmJYs5PZvWS1LGXf8ekOgNhpFtMPLPXk,18552
70
- dataeval-0.73.1.dist-info/LICENSE.txt,sha256=Kpzcfobf1HlqafF-EX6dQLw9TlJiaJzfgvLQFukyXYw,1060
71
- dataeval-0.73.1.dist-info/METADATA,sha256=C7xThIWgHNoZEdSiGEZr3VgDLRSzeT3TkFbn4nQgrK0,4714
72
- dataeval-0.73.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
73
- dataeval-0.73.1.dist-info/RECORD,,