dataeval 0.74.0__py3-none-any.whl → 0.74.2__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 (51) hide show
  1. dataeval/__init__.py +23 -10
  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/linters/clusterer.py +3 -3
  6. dataeval/detectors/linters/duplicates.py +4 -4
  7. dataeval/detectors/linters/outliers.py +4 -4
  8. dataeval/detectors/ood/__init__.py +5 -12
  9. dataeval/detectors/ood/base.py +5 -5
  10. dataeval/detectors/ood/metadata_ks_compare.py +12 -13
  11. dataeval/interop.py +15 -3
  12. dataeval/logging.py +16 -0
  13. dataeval/metrics/bias/balance.py +3 -3
  14. dataeval/metrics/bias/coverage.py +3 -3
  15. dataeval/metrics/bias/diversity.py +3 -3
  16. dataeval/metrics/bias/metadata_preprocessing.py +3 -3
  17. dataeval/metrics/bias/parity.py +4 -4
  18. dataeval/metrics/estimators/ber.py +3 -3
  19. dataeval/metrics/estimators/divergence.py +3 -3
  20. dataeval/metrics/estimators/uap.py +3 -3
  21. dataeval/metrics/stats/base.py +2 -2
  22. dataeval/metrics/stats/boxratiostats.py +1 -1
  23. dataeval/metrics/stats/datasetstats.py +6 -6
  24. dataeval/metrics/stats/dimensionstats.py +1 -1
  25. dataeval/metrics/stats/hashstats.py +1 -1
  26. dataeval/metrics/stats/labelstats.py +3 -3
  27. dataeval/metrics/stats/pixelstats.py +1 -1
  28. dataeval/metrics/stats/visualstats.py +1 -1
  29. dataeval/output.py +81 -57
  30. dataeval/utils/__init__.py +1 -7
  31. dataeval/utils/split_dataset.py +306 -279
  32. dataeval/workflows/sufficiency.py +4 -4
  33. {dataeval-0.74.0.dist-info → dataeval-0.74.2.dist-info}/METADATA +3 -8
  34. dataeval-0.74.2.dist-info/RECORD +66 -0
  35. dataeval/detectors/ood/ae.py +0 -76
  36. dataeval/detectors/ood/aegmm.py +0 -67
  37. dataeval/detectors/ood/base_tf.py +0 -109
  38. dataeval/detectors/ood/llr.py +0 -302
  39. dataeval/detectors/ood/vae.py +0 -98
  40. dataeval/detectors/ood/vaegmm.py +0 -76
  41. dataeval/utils/lazy.py +0 -26
  42. dataeval/utils/tensorflow/__init__.py +0 -19
  43. dataeval/utils/tensorflow/_internal/gmm.py +0 -103
  44. dataeval/utils/tensorflow/_internal/loss.py +0 -121
  45. dataeval/utils/tensorflow/_internal/models.py +0 -1394
  46. dataeval/utils/tensorflow/_internal/trainer.py +0 -114
  47. dataeval/utils/tensorflow/_internal/utils.py +0 -256
  48. dataeval/utils/tensorflow/loss/__init__.py +0 -11
  49. dataeval-0.74.0.dist-info/RECORD +0 -79
  50. {dataeval-0.74.0.dist-info → dataeval-0.74.2.dist-info}/LICENSE.txt +0 -0
  51. {dataeval-0.74.0.dist-info → dataeval-0.74.2.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,79 +0,0 @@
1
- dataeval/__init__.py,sha256=bwKFegCsdGFydqDvza_wSvJgRGr-0pQ59UpcePQ1mNs,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=igEQ2DV9JmcpTdUKCOHBi5LxtoNeCAslJS2Ldulg1hw,7585
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=XckkWVhYbbg9iWVsCPEQN-t7FFSt2a4jmCwAAempkM4,793
17
- dataeval/detectors/ood/ae.py,sha256=km7buF8LbMmwsyfu1xMOI5CJDnQX1x8_-c04zTGMXRI,2389
18
- dataeval/detectors/ood/ae_torch.py,sha256=pO9w5221bXR9lEBkE7oakXeE7PXUUR--xcTpmHvOCSk,2142
19
- dataeval/detectors/ood/aegmm.py,sha256=CI2HEkRMJSEFTVLZEhz4CStkaS7i66yTPtnbkbCqTes,2084
20
- dataeval/detectors/ood/base.py,sha256=u9S7z7zJ8wuPqrtn63ePdAa8DdI579EbCy8Tn0M3XI8,6983
21
- dataeval/detectors/ood/base_tf.py,sha256=ppj8rAjXjHEab2oGfQO2olXyN4aGZH8_QHIEghOoeFQ,3297
22
- dataeval/detectors/ood/base_torch.py,sha256=yFbSfQsBMwZeVf8mrixmkZYBGChhV5oAHtkgzWnMzsA,3405
23
- dataeval/detectors/ood/llr.py,sha256=IrOam-kqUU4bftolR3MvhcEq-NNj2euyI-lYvMuXYn8,10645
24
- dataeval/detectors/ood/metadata_ks_compare.py,sha256=Ka6MABdJH5ZlHF66mENpSOLCE8H9xdQ_wWNwMYVO_Q0,5352
25
- dataeval/detectors/ood/metadata_least_likely.py,sha256=nxMCXUOjOfWHDTGT2SLE7OYBCydRq8zHLd8t17k7hMM,5193
26
- dataeval/detectors/ood/metadata_ood_mi.py,sha256=KLay2BmgHrStBV92VpIs_B1yEfQKllsMTgzOQEng01I,4065
27
- dataeval/detectors/ood/vae.py,sha256=yjK4p-XYhnH3wWPiwAclb3eyZE0wpTazLLuKhzurcWY,3203
28
- dataeval/detectors/ood/vaegmm.py,sha256=FhPJBzs7wyEPQUUMxOMsdPpCdAZwN82vztjt05cSrds,2459
29
- dataeval/interop.py,sha256=TZCkZo844DvzHoxuRo-YsBhT6GvKmyQTHtUEQZPly1M,1728
30
- dataeval/metrics/__init__.py,sha256=fPBNLd-T6mCErZBBJrxWmXIL0jCk7fNUYIcNEBkMa80,238
31
- dataeval/metrics/bias/__init__.py,sha256=dYiPHenS8J7pgRMMW2jNkTBmTbPoYTxT04fZu9PFats,747
32
- dataeval/metrics/bias/balance.py,sha256=BH644D_xN7rRUdJMNgVcGHWq3TTnehYjSBhSMhmAFyY,9154
33
- dataeval/metrics/bias/coverage.py,sha256=LBrNG6GIrvMJjZckr72heyCTMCke_p5BT8NJWi-noEY,4546
34
- dataeval/metrics/bias/diversity.py,sha256=__7I934sVoymXqgHoneXglJhIU5iHRIuklFwC2ks84w,7719
35
- dataeval/metrics/bias/metadata_preprocessing.py,sha256=DbtzsiHjkCxs411okb6s2B_H2TqfvwJ4xyt9m_OsqJo,12266
36
- dataeval/metrics/bias/metadata_utils.py,sha256=HmTjlRRTdM9566oKUDDdVMJ8luss4DYykFOiS2FQzhM,6558
37
- dataeval/metrics/bias/parity.py,sha256=lLa2zN0AK-zWzlXmvLCbMxTZFodAKLs8wSGl_YZdNFo,12765
38
- dataeval/metrics/estimators/__init__.py,sha256=O6ocxJq8XDkfJWwXeJnnnzbOyRnFPKF4kTIVTTZYOA8,380
39
- dataeval/metrics/estimators/ber.py,sha256=SVT-BIC_GLs0l2l2NhWu4OpRbgn96w-OwTSoPHTnQbE,5037
40
- dataeval/metrics/estimators/divergence.py,sha256=pImaa216-YYTgGWDCSTcpJrC-dfl7150yVrPfW_TyGc,4293
41
- dataeval/metrics/estimators/uap.py,sha256=Tz1VZOyUa68HlTh94Rl-wnXCWdTAVjTQc3LtSPEWVu4,2175
42
- dataeval/metrics/stats/__init__.py,sha256=igLRaAt1nX6yRwC4xI0zNPBADi3u7EsSxWP3OZ8AqcU,1086
43
- dataeval/metrics/stats/base.py,sha256=9M5g2FAWvd50HT-T2h-MCmYLpvk--em_yWro1qWGHFs,12177
44
- dataeval/metrics/stats/boxratiostats.py,sha256=iNr-FdppiJ7XAeeLY-o7gL_PSxvT8j86iwRijKca2Eg,6465
45
- dataeval/metrics/stats/datasetstats.py,sha256=LAMFCIS9v0RjLrdKUFuo8nY-3HLVvRlqQIXGMKtsHEw,6255
46
- dataeval/metrics/stats/dimensionstats.py,sha256=xdTp2AbGH3xefUUsB4sDjgSKiojJ73DCHyuCOPKsErc,4056
47
- dataeval/metrics/stats/hashstats.py,sha256=X6aSouaMhDcGZMLuCTje3G4QOr2i-Td6H3SyBFDF6mA,4960
48
- dataeval/metrics/stats/labelstats.py,sha256=BKwSmyxCr2wYq8IMraCUS-b5wqacfT_BukJUYNfqeCo,4114
49
- dataeval/metrics/stats/pixelstats.py,sha256=x90O10IqVjEORtYwueFLvJnVYTxhPBOOx5HMweBQnJY,4578
50
- dataeval/metrics/stats/visualstats.py,sha256=y0xIvst7epcajk8vz2jngiAiz0T7DZC-M97Rs1-vV9I,4950
51
- dataeval/output.py,sha256=jWXXNxFNBEaY1rN7Z-6LZl6bQT-I7z_wqr91Rhrdt_0,3061
52
- dataeval/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- dataeval/utils/__init__.py,sha256=FZLWDA7nMbHOcdg3701cVJpQmUp1Wxxk8h_qIrUQQjY,713
54
- dataeval/utils/gmm.py,sha256=YuLsJKsVWgH_wHr1u_hSRH5Yeexdj8exht8h99L7bLo,561
55
- dataeval/utils/image.py,sha256=KgC_1nW__nGN5q6bVZNvG4U_qIBdjcPATz9qe8f2XuA,1928
56
- dataeval/utils/lazy.py,sha256=M0iBHuJh4UPrSJPHZ0jhFwRSZhyjHJQx_KEf1OCkHD8,588
57
- dataeval/utils/metadata.py,sha256=0A--iru0zEmi044mKz5P35q69KrI30yoiRSlvs7TSdQ,9418
58
- dataeval/utils/shared.py,sha256=xvF3VLfyheVwJtdtDrneOobkKf7t-JTmf_w91FWXmqo,3616
59
- dataeval/utils/split_dataset.py,sha256=Ot1ZJhbIhVfcShYXF9MkWXak5odBXyuBdRh-noXh-MI,19555
60
- dataeval/utils/tensorflow/__init__.py,sha256=l4OjIA75JJXeNWDCkST1xtDMVYsw97lZ-9JXFBlyuYg,539
61
- dataeval/utils/tensorflow/_internal/gmm.py,sha256=XvjhWM3ppP-R9nCZGs80WphmQR3u7wb-VtoCQYeXZlQ,3404
62
- dataeval/utils/tensorflow/_internal/loss.py,sha256=TFhoNPgqeJtdpIHYobZPyzMpeWjzlFqzu5LCtthEUi4,4463
63
- dataeval/utils/tensorflow/_internal/models.py,sha256=TzQYRrFe5XomhnPw05v-HBODQdFIqWg21WH1xS0XBlg,59868
64
- dataeval/utils/tensorflow/_internal/trainer.py,sha256=uBFTnAy9o2T_FoT3RSX-AA7T-2FScyOdYEg9_7Dpd28,4314
65
- dataeval/utils/tensorflow/_internal/utils.py,sha256=lr5hKkAPbjMCUNIzMUIqbEddwbWQfMdL6hcazTHU3Uc,9541
66
- dataeval/utils/tensorflow/loss/__init__.py,sha256=Q-66vt91Oe1ByYfo28tW32zXDq2MqQ2gngWgmIVmof8,227
67
- dataeval/utils/torch/__init__.py,sha256=lpkqfgyARUxgrV94cZESQv8PIP2p-UnwItZ_wIr0XzQ,675
68
- dataeval/utils/torch/blocks.py,sha256=HVhBTMMD5NA4qheMUgyol1KWiKZDIuc8k5j4RcMKmhk,1466
69
- dataeval/utils/torch/datasets.py,sha256=10elNgLuH_FDX_CHE3y2Z215JN4-PQovQm5brcIJOeM,15021
70
- dataeval/utils/torch/gmm.py,sha256=VbLlUQohwToApT493_tjQBWy2UM5R-3ppS9Dp-eP7BA,3240
71
- dataeval/utils/torch/models.py,sha256=sdGeo7a8vshCTGA4lYyVxxb_aDWUlxdtIVxrddS-_ls,8542
72
- dataeval/utils/torch/trainer.py,sha256=8BEXr6xtk-CHJTcNxOBnWgkFWfJUAiBy28cEdBhLMRU,7883
73
- dataeval/utils/torch/utils.py,sha256=nWRcT6z6DbFVrL1RyxCOX3DPoCrv9G0B-VI_9LdGCQQ,5784
74
- dataeval/workflows/__init__.py,sha256=ef1MiVL5IuhlDXXbwsiAfafhnr7tD3TXF9GRusy9_O8,290
75
- dataeval/workflows/sufficiency.py,sha256=1jSYhH9i4oesmJYs5PZvWS1LGXf8ekOgNhpFtMPLPXk,18552
76
- dataeval-0.74.0.dist-info/LICENSE.txt,sha256=Kpzcfobf1HlqafF-EX6dQLw9TlJiaJzfgvLQFukyXYw,1060
77
- dataeval-0.74.0.dist-info/METADATA,sha256=OPnkHZTm8R1LHqLxcSnOHjqj5GuHmjUVI3dddTVsBAc,4680
78
- dataeval-0.74.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
79
- dataeval-0.74.0.dist-info/RECORD,,