dataeval 0.74.0__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.
- dataeval/__init__.py +3 -9
- dataeval/detectors/__init__.py +2 -10
- dataeval/detectors/drift/base.py +3 -3
- dataeval/detectors/drift/mmd.py +1 -1
- dataeval/detectors/linters/clusterer.py +3 -3
- dataeval/detectors/linters/duplicates.py +4 -4
- dataeval/detectors/linters/outliers.py +4 -4
- dataeval/detectors/ood/__init__.py +5 -12
- dataeval/detectors/ood/base.py +5 -5
- dataeval/detectors/ood/metadata_ks_compare.py +12 -13
- dataeval/interop.py +1 -1
- dataeval/metrics/bias/balance.py +3 -3
- dataeval/metrics/bias/coverage.py +3 -3
- dataeval/metrics/bias/diversity.py +3 -3
- dataeval/metrics/bias/metadata_preprocessing.py +3 -3
- dataeval/metrics/bias/parity.py +4 -4
- dataeval/metrics/estimators/ber.py +3 -3
- dataeval/metrics/estimators/divergence.py +3 -3
- dataeval/metrics/estimators/uap.py +3 -3
- dataeval/metrics/stats/base.py +2 -2
- dataeval/metrics/stats/boxratiostats.py +1 -1
- dataeval/metrics/stats/datasetstats.py +6 -6
- dataeval/metrics/stats/dimensionstats.py +1 -1
- dataeval/metrics/stats/hashstats.py +1 -1
- dataeval/metrics/stats/labelstats.py +3 -3
- dataeval/metrics/stats/pixelstats.py +1 -1
- dataeval/metrics/stats/visualstats.py +1 -1
- dataeval/output.py +77 -53
- dataeval/utils/__init__.py +1 -7
- dataeval/workflows/sufficiency.py +4 -4
- {dataeval-0.74.0.dist-info → dataeval-0.74.1.dist-info}/METADATA +3 -8
- dataeval-0.74.1.dist-info/RECORD +65 -0
- dataeval/detectors/ood/ae.py +0 -76
- dataeval/detectors/ood/aegmm.py +0 -67
- dataeval/detectors/ood/base_tf.py +0 -109
- dataeval/detectors/ood/llr.py +0 -302
- dataeval/detectors/ood/vae.py +0 -98
- dataeval/detectors/ood/vaegmm.py +0 -76
- dataeval/utils/lazy.py +0 -26
- dataeval/utils/tensorflow/__init__.py +0 -19
- dataeval/utils/tensorflow/_internal/gmm.py +0 -103
- dataeval/utils/tensorflow/_internal/loss.py +0 -121
- dataeval/utils/tensorflow/_internal/models.py +0 -1394
- dataeval/utils/tensorflow/_internal/trainer.py +0 -114
- dataeval/utils/tensorflow/_internal/utils.py +0 -256
- dataeval/utils/tensorflow/loss/__init__.py +0 -11
- dataeval-0.74.0.dist-info/RECORD +0 -79
- {dataeval-0.74.0.dist-info → dataeval-0.74.1.dist-info}/LICENSE.txt +0 -0
- {dataeval-0.74.0.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}.")
|
dataeval-0.74.0.dist-info/RECORD
DELETED
@@ -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,,
|
File without changes
|
File without changes
|