validmind 2.7.2__py3-none-any.whl → 2.7.5__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.
- validmind/__version__.py +1 -1
- validmind/ai/test_descriptions.py +20 -4
- validmind/ai/test_result_description/user.jinja +5 -0
- validmind/datasets/credit_risk/lending_club.py +444 -14
- validmind/tests/data_validation/MutualInformation.py +129 -0
- validmind/tests/data_validation/ScoreBandDefaultRates.py +139 -0
- validmind/tests/data_validation/TooManyZeroValues.py +6 -5
- validmind/tests/data_validation/UniqueRows.py +3 -1
- validmind/tests/decorator.py +18 -16
- validmind/tests/load.py +4 -1
- validmind/tests/model_validation/sklearn/CalibrationCurve.py +116 -0
- validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +261 -0
- validmind/tests/model_validation/sklearn/ConfusionMatrix.py +1 -0
- validmind/tests/model_validation/sklearn/HyperParametersTuning.py +144 -56
- validmind/tests/model_validation/sklearn/ModelParameters.py +74 -0
- validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +130 -0
- validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +5 -6
- validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +2 -3
- validmind/tests/run.py +43 -72
- validmind/utils.py +23 -7
- validmind/vm_models/result/result.py +18 -17
- {validmind-2.7.2.dist-info → validmind-2.7.5.dist-info}/METADATA +2 -2
- {validmind-2.7.2.dist-info → validmind-2.7.5.dist-info}/RECORD +26 -20
- {validmind-2.7.2.dist-info → validmind-2.7.5.dist-info}/WHEEL +1 -1
- {validmind-2.7.2.dist-info → validmind-2.7.5.dist-info}/LICENSE +0 -0
- {validmind-2.7.2.dist-info → validmind-2.7.5.dist-info}/entry_points.txt +0 -0
validmind/tests/run.py
CHANGED
@@ -134,11 +134,9 @@ def _get_test_kwargs(
|
|
134
134
|
def build_test_result(
|
135
135
|
outputs: Union[Any, Tuple[Any, ...]],
|
136
136
|
test_id: str,
|
137
|
+
test_doc: str,
|
137
138
|
inputs: Dict[str, Union[VMInput, List[VMInput]]],
|
138
139
|
params: Union[Dict[str, Any], None],
|
139
|
-
doc: str,
|
140
|
-
description: str,
|
141
|
-
generate_description: bool = True,
|
142
140
|
title: Optional[str] = None,
|
143
141
|
):
|
144
142
|
"""Build a TestResult object from a set of raw test function outputs"""
|
@@ -150,7 +148,7 @@ def build_test_result(
|
|
150
148
|
ref_id=ref_id,
|
151
149
|
inputs=inputs,
|
152
150
|
params=params if params else None, # None if empty dict or None
|
153
|
-
doc=
|
151
|
+
doc=test_doc,
|
154
152
|
)
|
155
153
|
|
156
154
|
if not isinstance(outputs, tuple):
|
@@ -159,16 +157,6 @@ def build_test_result(
|
|
159
157
|
for item in outputs:
|
160
158
|
process_output(item, result)
|
161
159
|
|
162
|
-
result.description = get_result_description(
|
163
|
-
test_id=test_id,
|
164
|
-
test_description=description,
|
165
|
-
tables=result.tables,
|
166
|
-
figures=result.figures,
|
167
|
-
metric=result.metric,
|
168
|
-
should_generate=generate_description,
|
169
|
-
title=title,
|
170
|
-
)
|
171
|
-
|
172
160
|
return result
|
173
161
|
|
174
162
|
|
@@ -179,7 +167,6 @@ def _run_composite_test(
|
|
179
167
|
input_grid: Union[Dict[str, List[Any]], List[Dict[str, Any]], None],
|
180
168
|
params: Union[Dict[str, Any], None],
|
181
169
|
param_grid: Union[Dict[str, List[Any]], List[Dict[str, Any]], None],
|
182
|
-
generate_description: bool,
|
183
170
|
title: Optional[str] = None,
|
184
171
|
):
|
185
172
|
"""Run a composite test i.e. a test made up of multiple metrics"""
|
@@ -201,9 +188,12 @@ def _run_composite_test(
|
|
201
188
|
if not all(result.metric is not None for result in results):
|
202
189
|
raise ValueError("All tests must return a metric when used as a composite test")
|
203
190
|
|
204
|
-
# Create composite
|
191
|
+
# Create composite docstring from all test results
|
205
192
|
composite_doc = "\n\n".join(
|
206
|
-
[
|
193
|
+
[
|
194
|
+
f"{test_id_to_name(result.result_id)}:\n{_test_description(result.doc)}"
|
195
|
+
for result in results
|
196
|
+
]
|
207
197
|
)
|
208
198
|
|
209
199
|
return build_test_result(
|
@@ -215,13 +205,9 @@ def _run_composite_test(
|
|
215
205
|
for result in results
|
216
206
|
], # pass in a single table with metric values as our 'outputs'
|
217
207
|
test_id=test_id,
|
208
|
+
test_doc=composite_doc,
|
218
209
|
inputs=results[0].inputs,
|
219
210
|
params=results[0].params,
|
220
|
-
doc=composite_doc,
|
221
|
-
description="\n\n".join(
|
222
|
-
[_test_description(result.description, num_lines=1) for result in results]
|
223
|
-
), # join truncated (first line only) test descriptions
|
224
|
-
generate_description=generate_description,
|
225
211
|
title=title,
|
226
212
|
)
|
227
213
|
|
@@ -234,7 +220,6 @@ def _run_comparison_test(
|
|
234
220
|
input_grid: Union[Dict[str, List[Any]], List[Dict[str, Any]], None],
|
235
221
|
params: Union[Dict[str, Any], None],
|
236
222
|
param_grid: Union[Dict[str, List[Any]], List[Dict[str, Any]], None],
|
237
|
-
generate_description: bool,
|
238
223
|
title: Optional[str] = None,
|
239
224
|
):
|
240
225
|
"""Run a comparison test i.e. a test that compares multiple outputs of a test across
|
@@ -263,35 +248,43 @@ def _run_comparison_test(
|
|
263
248
|
# composite tests have a test_id thats built from the name
|
264
249
|
if not test_id:
|
265
250
|
test_id = results[0].result_id
|
266
|
-
|
251
|
+
test_doc = results[0].doc
|
267
252
|
else:
|
268
|
-
|
253
|
+
test_doc = describe_test(test_id, raw=True)["Description"]
|
269
254
|
|
270
255
|
combined_outputs, combined_inputs, combined_params = combine_results(results)
|
271
256
|
|
272
|
-
if unit_metrics:
|
273
|
-
doc = "\n\n".join(
|
274
|
-
[
|
275
|
-
f"{test_id_to_name(unit_metric)}:\n{getdoc(load_test(unit_metric))}"
|
276
|
-
for unit_metric in unit_metrics
|
277
|
-
]
|
278
|
-
)
|
279
|
-
else:
|
280
|
-
doc = getdoc(load_test(test_id))
|
281
|
-
|
282
257
|
return build_test_result(
|
283
258
|
outputs=tuple(combined_outputs),
|
284
259
|
test_id=test_id,
|
260
|
+
test_doc=test_doc,
|
285
261
|
inputs=combined_inputs,
|
286
262
|
params=combined_params,
|
287
|
-
doc=doc,
|
288
|
-
description=description,
|
289
|
-
generate_description=generate_description,
|
290
263
|
title=title,
|
291
264
|
)
|
292
265
|
|
293
266
|
|
294
|
-
def
|
267
|
+
def _run_test(test_id: TestID, inputs: Dict[str, Any], params: Dict[str, Any]):
|
268
|
+
"""Run a standard test and return a TestResult object"""
|
269
|
+
test_func = load_test(test_id)
|
270
|
+
input_kwargs, param_kwargs = _get_test_kwargs(
|
271
|
+
test_func=test_func,
|
272
|
+
inputs=inputs or {},
|
273
|
+
params=params or {},
|
274
|
+
)
|
275
|
+
|
276
|
+
raw_result = test_func(**input_kwargs, **param_kwargs)
|
277
|
+
|
278
|
+
return build_test_result(
|
279
|
+
outputs=raw_result,
|
280
|
+
test_id=test_id,
|
281
|
+
test_doc=getdoc(test_func),
|
282
|
+
inputs=input_kwargs,
|
283
|
+
params=param_kwargs,
|
284
|
+
)
|
285
|
+
|
286
|
+
|
287
|
+
def run_test( # noqa: C901
|
295
288
|
test_id: Union[TestID, None] = None,
|
296
289
|
name: Union[str, None] = None,
|
297
290
|
unit_metrics: Union[List[TestID], None] = None,
|
@@ -364,7 +357,6 @@ def run_test(
|
|
364
357
|
input_grid=input_grid,
|
365
358
|
params=params,
|
366
359
|
param_grid=param_grid,
|
367
|
-
generate_description=generate_description,
|
368
360
|
)
|
369
361
|
|
370
362
|
elif unit_metrics:
|
@@ -378,42 +370,11 @@ def run_test(
|
|
378
370
|
input_grid=input_grid,
|
379
371
|
params=params,
|
380
372
|
param_grid=param_grid,
|
381
|
-
generate_description=generate_description,
|
382
|
-
title=title,
|
383
|
-
)
|
384
|
-
|
385
|
-
elif input_grid or param_grid:
|
386
|
-
result = _run_comparison_test(
|
387
|
-
test_id=test_id,
|
388
|
-
inputs=inputs,
|
389
|
-
input_grid=input_grid,
|
390
|
-
params=params,
|
391
|
-
param_grid=param_grid,
|
392
|
-
generate_description=generate_description,
|
393
373
|
title=title,
|
394
374
|
)
|
395
375
|
|
396
376
|
else:
|
397
|
-
|
398
|
-
|
399
|
-
input_kwargs, param_kwargs = _get_test_kwargs(
|
400
|
-
test_func, inputs or {}, params or {}
|
401
|
-
)
|
402
|
-
|
403
|
-
raw_result = test_func(**input_kwargs, **param_kwargs)
|
404
|
-
|
405
|
-
doc = getdoc(test_func)
|
406
|
-
|
407
|
-
result = build_test_result(
|
408
|
-
outputs=raw_result,
|
409
|
-
test_id=test_id,
|
410
|
-
inputs=input_kwargs,
|
411
|
-
params=param_kwargs,
|
412
|
-
doc=doc,
|
413
|
-
description=doc,
|
414
|
-
generate_description=generate_description,
|
415
|
-
title=title,
|
416
|
-
)
|
377
|
+
result = _run_test(test_id, inputs, params)
|
417
378
|
|
418
379
|
end_time = time.perf_counter()
|
419
380
|
result.metadata = _get_run_metadata(duration_seconds=end_time - start_time)
|
@@ -421,6 +382,16 @@ def run_test(
|
|
421
382
|
if post_process_fn:
|
422
383
|
result = post_process_fn(result)
|
423
384
|
|
385
|
+
result.description = get_result_description(
|
386
|
+
test_id=test_id,
|
387
|
+
test_description=result.doc,
|
388
|
+
tables=result.tables,
|
389
|
+
figures=result.figures,
|
390
|
+
metric=result.metric,
|
391
|
+
should_generate=generate_description,
|
392
|
+
title=title,
|
393
|
+
)
|
394
|
+
|
424
395
|
if show:
|
425
396
|
result.show()
|
426
397
|
|
validmind/utils.py
CHANGED
@@ -459,18 +459,23 @@ def get_dataset_info(dataset):
|
|
459
459
|
|
460
460
|
|
461
461
|
def preview_test_config(config):
|
462
|
-
|
462
|
+
"""Preview test configuration in a collapsible HTML section.
|
463
|
+
|
464
|
+
Args:
|
465
|
+
config (dict): Test configuration dictionary
|
466
|
+
"""
|
467
|
+
|
468
|
+
try:
|
469
|
+
formatted_json = json.dumps(serialize(config), indent=4)
|
470
|
+
except TypeError as e:
|
471
|
+
logger.error(f"JSON serialization failed: {e}")
|
472
|
+
return
|
463
473
|
|
464
|
-
# JavaScript + HTML for the collapsible section
|
465
474
|
collapsible_html = f"""
|
466
475
|
<script>
|
467
476
|
function toggleOutput() {{
|
468
477
|
var content = document.getElementById("collapsibleContent");
|
469
|
-
|
470
|
-
content.style.display = "block";
|
471
|
-
}} else {{
|
472
|
-
content.style.display = "none";
|
473
|
-
}}
|
478
|
+
content.style.display = content.style.display === "none" ? "block" : "none";
|
474
479
|
}}
|
475
480
|
</script>
|
476
481
|
<button onclick="toggleOutput()">Preview Config</button>
|
@@ -556,3 +561,14 @@ def inspect_obj(obj):
|
|
556
561
|
# Loop through the parameters and print detailed information
|
557
562
|
for param_name, param in sig.parameters.items():
|
558
563
|
print(f"{param_name} - ({param.default})")
|
564
|
+
|
565
|
+
|
566
|
+
def serialize(obj):
|
567
|
+
"""Convert objects to JSON-serializable format with readable descriptions."""
|
568
|
+
if isinstance(obj, dict):
|
569
|
+
return {k: serialize(v) for k, v in obj.items()}
|
570
|
+
elif isinstance(obj, (list, tuple)):
|
571
|
+
return [serialize(x) for x in obj]
|
572
|
+
elif isinstance(obj, (pd.DataFrame, pd.Series)):
|
573
|
+
return "" # Simple empty string for non-serializable objects
|
574
|
+
return obj
|
@@ -172,10 +172,9 @@ class TestResult(Result):
|
|
172
172
|
_was_description_generated: bool = False
|
173
173
|
_unsafe: bool = False
|
174
174
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
return self.title or test_id_to_name(self.result_id)
|
175
|
+
def __post_init__(self):
|
176
|
+
if self.ref_id is None:
|
177
|
+
self.ref_id = str(uuid4())
|
179
178
|
|
180
179
|
def __repr__(self) -> str:
|
181
180
|
attrs = [
|
@@ -199,9 +198,21 @@ class TestResult(Result):
|
|
199
198
|
|
200
199
|
return f'TestResult("{self.result_id}", {", ".join(attrs)})'
|
201
200
|
|
202
|
-
def
|
203
|
-
if
|
204
|
-
|
201
|
+
def __getattribute__(self, name):
|
202
|
+
# lazy load description if its a DescriptionFuture (generated in background)
|
203
|
+
if name == "description":
|
204
|
+
description = super().__getattribute__("description")
|
205
|
+
|
206
|
+
if isinstance(description, DescriptionFuture):
|
207
|
+
self._was_description_generated = True
|
208
|
+
self.description = description.get_description()
|
209
|
+
|
210
|
+
return super().__getattribute__(name)
|
211
|
+
|
212
|
+
@property
|
213
|
+
def test_name(self) -> str:
|
214
|
+
"""Get the test name, using custom title if available."""
|
215
|
+
return self.title or test_id_to_name(self.result_id)
|
205
216
|
|
206
217
|
def _get_flat_inputs(self):
|
207
218
|
# remove duplicates by `input_id`
|
@@ -292,10 +303,6 @@ class TestResult(Result):
|
|
292
303
|
self.figures.pop(index)
|
293
304
|
|
294
305
|
def to_widget(self):
|
295
|
-
if isinstance(self.description, DescriptionFuture):
|
296
|
-
self.description = self.description.get_description()
|
297
|
-
self._was_description_generated = True
|
298
|
-
|
299
306
|
if self.metric is not None and not self.tables and not self.figures:
|
300
307
|
return HTML(f"<h3>{self.test_name}: <code>{self.metric}</code></h3>")
|
301
308
|
|
@@ -310,8 +317,6 @@ class TestResult(Result):
|
|
310
317
|
),
|
311
318
|
"show_metric": self.metric is not None,
|
312
319
|
"metric": self.metric,
|
313
|
-
"tables": self.tables,
|
314
|
-
"figures": self.figures,
|
315
320
|
}
|
316
321
|
rendered = get_result_template().render(**template_data)
|
317
322
|
|
@@ -409,10 +414,6 @@ class TestResult(Result):
|
|
409
414
|
)
|
410
415
|
|
411
416
|
if self.description:
|
412
|
-
if isinstance(self.description, DescriptionFuture):
|
413
|
-
self.description = self.description.get_description()
|
414
|
-
self._was_description_generated = True
|
415
|
-
|
416
417
|
revision_name = (
|
417
418
|
AI_REVISION_NAME
|
418
419
|
if self._was_description_generated
|
@@ -1,11 +1,11 @@
|
|
1
1
|
validmind/__init__.py,sha256=U-S6pV31O3sVsbcEzlriz0tootyfvPnPOu4PHzXz9tM,2688
|
2
|
-
validmind/__version__.py,sha256=
|
3
|
-
validmind/ai/test_descriptions.py,sha256=
|
2
|
+
validmind/__version__.py,sha256=lBcjVwt4I0-VUeE_7gM1gQBbtKOi9jGT3DavJbzcYnQ,22
|
3
|
+
validmind/ai/test_descriptions.py,sha256=OpdMyLkZqlvegxjKfg2iJ0o4PwjnRv4_kEzePyuQiYs,7345
|
4
4
|
validmind/ai/test_result_description/config.yaml,sha256=E1gPd-uv-MzdrWZA_rP6LSk8pVmkYijx6v78hZ8ceL0,787
|
5
5
|
validmind/ai/test_result_description/context.py,sha256=ebKulFMpXTDLqd6lOHAsG200GmLNnhnu7sMDnbo2Dhc,2339
|
6
6
|
validmind/ai/test_result_description/image_processing.py,sha256=JNaO1zyM9293WWuyzUp1meQQbHuut0XN4kKUGzQTwYY,4061
|
7
7
|
validmind/ai/test_result_description/system.jinja,sha256=BjMvZCC3UXEH8p3VPpnHtGjhnqnbNcEG2_kYZ_QZrgg,2358
|
8
|
-
validmind/ai/test_result_description/user.jinja,sha256=
|
8
|
+
validmind/ai/test_result_description/user.jinja,sha256=CmqPQQiqdXjxtq47wFCZ-IT5csliWsRVM04psKxzXc4,689
|
9
9
|
validmind/ai/utils.py,sha256=YHqXtmACjcL5imDS9_nzmz8MhQJzK3VybcDXMbj1SbQ,4168
|
10
10
|
validmind/api_client.py,sha256=NYIMQdFvxeSKIPaguaJMoyJDGUW5xljhtCZbAGIDs_Y,14463
|
11
11
|
validmind/client.py,sha256=lOv4lSZGDOUMxOa2FpNgAiT_GaEolffZTfvljewhl2I,18595
|
@@ -20,7 +20,7 @@ validmind/datasets/cluster/digits.py,sha256=E600pX6QPrqndfr73kwZ1sTNk0hC5kNj4Fhs
|
|
20
20
|
validmind/datasets/credit_risk/__init__.py,sha256=vK0wyUcA2mpjasNR-EaBj_0MdPhJw5KK8xlrKj_xl68,295
|
21
21
|
validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz,sha256=PdsyEqHtfShtfl_xoNWva2Ofyfx5hmrLhowPka4hLew,6266192
|
22
22
|
validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz,sha256=bAgdfmUxjYOdZMPvoHtKr_GLoXNAX04KUTfjn2L62eE,5493810
|
23
|
-
validmind/datasets/credit_risk/lending_club.py,sha256=
|
23
|
+
validmind/datasets/credit_risk/lending_club.py,sha256=vBqEx3pK1Q7WpRIHRg692FcgJOv_Z1G7UprhlOPdlfE,25547
|
24
24
|
validmind/datasets/credit_risk/lending_club_bias.py,sha256=8_Xf1qxCTUPv1wYHYkjabO2WtQsfVudJ6eje3phQUrc,4461
|
25
25
|
validmind/datasets/llm/rag/__init__.py,sha256=v8BygB6rGECoMIXv2_I1lVUAfPJ_gVo0GgVKhzk60h4,264
|
26
26
|
validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv,sha256=8Ae8TD5Yh6rQ67HMCu7iKipj5tyOOhzylZqLppAeKzs,24095
|
@@ -123,6 +123,7 @@ validmind/tests/data_validation/LJungBox.py,sha256=8ujAg7ZcEYquYxHEqBZkD8otBnSpu
|
|
123
123
|
validmind/tests/data_validation/LaggedCorrelationHeatmap.py,sha256=xSDlstwZ9AUuz8uDA_pbRGQcIvk5pGdnGVZyy0rOLO8,4492
|
124
124
|
validmind/tests/data_validation/MissingValues.py,sha256=yrw9sxXBzWKWq4D4kjKCkR5QZQO2pPF8W-BFNhSvaOM,2829
|
125
125
|
validmind/tests/data_validation/MissingValuesBarPlot.py,sha256=_oE0S63Kd3XcPkv4pAnyeAp7V4oZRx6XugIFnmZNoWU,5397
|
126
|
+
validmind/tests/data_validation/MutualInformation.py,sha256=GYQrJCKk16GXMrGlkDMHlMnY_jF4E_XN5qhKcq8LvUA,4748
|
126
127
|
validmind/tests/data_validation/PearsonCorrelationMatrix.py,sha256=GB8Ca8UT4ARBV7Oeha53UL0aTOrvUrwrwsJHKYeEL74,3797
|
127
128
|
validmind/tests/data_validation/PhillipsPerronArch.py,sha256=4abwhMBcdxTxY9aMogL5hEvCyATnvHb66mGssE1AJuk,4254
|
128
129
|
validmind/tests/data_validation/ProtectedClassesCombination.py,sha256=YIZSgjnWKtDy5GmBsBdMiYZar6p9r2waBPSnmNEgNBA,6695
|
@@ -132,6 +133,7 @@ validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py,sha256=w8n
|
|
132
133
|
validmind/tests/data_validation/RollingStatsPlot.py,sha256=eA-3YIMAa7uSdOU2cudPy_5oOvrcZzKq7J4AV0SFXpo,4608
|
133
134
|
validmind/tests/data_validation/RunsTest.py,sha256=0xbi4K86m-qL1nxQPeZIp_HWo3NiDv6MPGaeRhvL6I8,3475
|
134
135
|
validmind/tests/data_validation/ScatterPlot.py,sha256=WeyeAq3QMY_OpzssY5S07a4Y46qiad6h2NunSVCYrQo,3423
|
136
|
+
validmind/tests/data_validation/ScoreBandDefaultRates.py,sha256=pdfvrSAP-HI3Zl8HaXXY_cc8_e5LP4OSTHEf6dcoz-s,4779
|
135
137
|
validmind/tests/data_validation/SeasonalDecompose.py,sha256=wD76b1UJ7PPUc4VPrXDfWVqOd62EiOUXTCzeyv7BrEQ,5830
|
136
138
|
validmind/tests/data_validation/ShapiroWilk.py,sha256=AhqJwbmKAy8lpac5ELM_hKt_60PA3DCUqO8kCgnVgQE,3132
|
137
139
|
validmind/tests/data_validation/Skewness.py,sha256=aDPO3r4NLN1CNYQsAdJJUEpdOWSmt26FGZPmRY_FKEA,3296
|
@@ -148,8 +150,8 @@ validmind/tests/data_validation/TimeSeriesHistogram.py,sha256=iaOgvz1bFXFT0f3jEf
|
|
148
150
|
validmind/tests/data_validation/TimeSeriesLinePlot.py,sha256=NeLL5AZ27HNOi96B0vStzQh7ZTsFDxzQrzKPwECHnIg,3553
|
149
151
|
validmind/tests/data_validation/TimeSeriesMissingValues.py,sha256=XiUfYDviNPrCftkidlidKufQM3xjn8yxipBCW9RC2es,4445
|
150
152
|
validmind/tests/data_validation/TimeSeriesOutliers.py,sha256=PnA26qA90qpYLzuNMIdhSpiUddR1yAlDt4VDCWhgU_o,4934
|
151
|
-
validmind/tests/data_validation/TooManyZeroValues.py,sha256=
|
152
|
-
validmind/tests/data_validation/UniqueRows.py,sha256=
|
153
|
+
validmind/tests/data_validation/TooManyZeroValues.py,sha256=NbkufcjiIRrrwo_ti66RpFB4TVh95-S2eZcwHoYgT9g,4269
|
154
|
+
validmind/tests/data_validation/UniqueRows.py,sha256=dQG6Ef3kpXnU1bCXq0GxyJ4sXbL8VkLMi8ZzfSLq6ws,3302
|
153
155
|
validmind/tests/data_validation/WOEBinPlots.py,sha256=cfkBns4dtLZTUq-MIQQy5-dApKsMRQZXqdi926pxBpM,5700
|
154
156
|
validmind/tests/data_validation/WOEBinTable.py,sha256=9TAHCUA4QU4GAOpQ4ugdYqU4QSO4cjz6WaVHZqa32ZQ,3302
|
155
157
|
validmind/tests/data_validation/ZivotAndrewsArch.py,sha256=OVs4N7wuSoBL_ujMbgK7XN_Uao72psstp7L_aBwXtQY,3472
|
@@ -165,8 +167,8 @@ validmind/tests/data_validation/nlp/StopWords.py,sha256=Chb47T63EQMG-rgGJ1zsT72H
|
|
165
167
|
validmind/tests/data_validation/nlp/TextDescription.py,sha256=k9PVKKiCDAKwj2uj_Oqqjav3nO6sKz07YR8qJ22ySUc,5668
|
166
168
|
validmind/tests/data_validation/nlp/Toxicity.py,sha256=VyOeN2yR2OMXoaj_pBeBX5LfvgR4OdTJQe8nPEamD5A,2682
|
167
169
|
validmind/tests/data_validation/nlp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
168
|
-
validmind/tests/decorator.py,sha256=
|
169
|
-
validmind/tests/load.py,sha256=
|
170
|
+
validmind/tests/decorator.py,sha256=fhHvE72FL3Doezwzk12s3dM13RWG047WHSHqPr9p2Fg,4784
|
171
|
+
validmind/tests/load.py,sha256=UpMHEMolnwQ8z3EYNJvNj186H3JUgQvz_eRCBrngtBo,11003
|
170
172
|
validmind/tests/model_validation/BertScore.py,sha256=nRR8lmY2ELBJlqVzKFNnOBgWOu3p27gciVb1zP85vCQ,5719
|
171
173
|
validmind/tests/model_validation/BleuScore.py,sha256=W6XMg8aO_L09REQ3fI3w6cEZZ1MYxTMzlpXDEAApSL0,5096
|
172
174
|
validmind/tests/model_validation/ClusterSizeDistribution.py,sha256=e0yNcSneM8gm1Yd1ownCyOmpt1NAYWjAwUQfKDEiPYQ,3240
|
@@ -212,19 +214,22 @@ validmind/tests/model_validation/ragas/SemanticSimilarity.py,sha256=yoRT7C5_J4ft
|
|
212
214
|
validmind/tests/model_validation/ragas/utils.py,sha256=VCc3NcNLIwrYQ7RvuJ1ev4XhI86TKDVNzI8o12aHFHc,3363
|
213
215
|
validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py,sha256=5kk-etKeA7jfo6twQ4JVPEuNvWh0TBhhXUQL7SkrrWM,2858
|
214
216
|
validmind/tests/model_validation/sklearn/AdjustedRandIndex.py,sha256=NCUM80CIFrV4Qm0P0wxMdf20y-BwLnPEJxOiPtv1eGk,2706
|
217
|
+
validmind/tests/model_validation/sklearn/CalibrationCurve.py,sha256=euHLyExDvgogt-OgdXDBUmojveWbM2WqGZ4FXzOdJTI,4158
|
215
218
|
validmind/tests/model_validation/sklearn/ClassifierPerformance.py,sha256=GruRTbGbu4cpHyUwsKu5_oHxP_Ew2I8-IUtK7jEQV8M,4334
|
219
|
+
validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py,sha256=RhzMEad4g8Mw3bBac45Wf-29SFaHfR8P_XmEnHWJ3Tc,9351
|
216
220
|
validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py,sha256=H79R2Nr5_OxU6dnfmISNRQ_VC39wYGluEJbe0z_b55o,4130
|
217
221
|
validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py,sha256=N9W17vO659vkgbHGnV-lXfeuJVCQhcphHIjam5ARmnQ,8649
|
218
222
|
validmind/tests/model_validation/sklearn/CompletenessScore.py,sha256=oGOjSyuiQb4M8lQe5-4H5gdz6sZk4bLhdZV4g8AKLKQ,2538
|
219
|
-
validmind/tests/model_validation/sklearn/ConfusionMatrix.py,sha256=
|
223
|
+
validmind/tests/model_validation/sklearn/ConfusionMatrix.py,sha256=gRLa4PlvGm7qpfUJRojSSDC0rPpd-LRmmZ6TVFrAe90,4779
|
220
224
|
validmind/tests/model_validation/sklearn/FeatureImportance.py,sha256=JncmmQQgYFcNK-wmV8c-k1Dxxo5D8rKEkLtc5KNtxBs,3573
|
221
225
|
validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py,sha256=jrEle_3L76sxqdoP5VGnwE3ekJtIEUrYi8g8TL3b9_s,2990
|
222
226
|
validmind/tests/model_validation/sklearn/HomogeneityScore.py,sha256=tB0CUB2S_ZUXJcnWfC_4BvdXP5KVOTdoBPu_4CAHVn0,2715
|
223
|
-
validmind/tests/model_validation/sklearn/HyperParametersTuning.py,sha256=
|
227
|
+
validmind/tests/model_validation/sklearn/HyperParametersTuning.py,sha256=3dHpjnoC4nPHcSmsm9QEwtFJ_lqtuNXfcGsQEp53tgw,5988
|
224
228
|
validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py,sha256=5IxGudebu5w_e3fXaRuYzcVltg4R9b6IltRh09qv5kw,5205
|
225
229
|
validmind/tests/model_validation/sklearn/MinimumAccuracy.py,sha256=2FVtoEMUJJYUxDW6WwC5agAojtt7FUnO7nwcVaqPKao,2773
|
226
230
|
validmind/tests/model_validation/sklearn/MinimumF1Score.py,sha256=CBOGD_wCqcHgMbKfp5TGTc1H8mJoG3RwMRSOUFHVGDc,3069
|
227
231
|
validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py,sha256=UpsCfXBbRQldkBWYuPNQ-WcerBImhGqXBusvfibu0Tw,3503
|
232
|
+
validmind/tests/model_validation/sklearn/ModelParameters.py,sha256=oI1GXG8dGIuZcwiLwOcds0Swxz2dwsmmDjfti1jbVF0,3059
|
228
233
|
validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py,sha256=wDxGUXgfzLA80wfjoRz7CzHO8NiQfuJyxIfuVFOuLYA,4658
|
229
234
|
validmind/tests/model_validation/sklearn/OverfitDiagnosis.py,sha256=JM2HHEHyKIgTaRjZXRNe04aTY7JoFjoVCZAkbz6MnS8,9973
|
230
235
|
validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py,sha256=PaBsCye7mN_ZaxfoqLD07XnmkxU8Juc5V6K9tpklYUA,4094
|
@@ -238,18 +243,19 @@ validmind/tests/model_validation/sklearn/RegressionR2Square.py,sha256=jttavnKU1L
|
|
238
243
|
validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py,sha256=TfBL_Mnk4hWWkXXB8OHzboWYuGk0e_gHmIDscKzLx9M,3377
|
239
244
|
validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py,sha256=-hrJ7SbWK4kbOtDzV7u0_5FAUXVZAyJ5FJvYA9MFAHc,11434
|
240
245
|
validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py,sha256=8ta_2bfsECzDCJiCmO_Oc7ZC5UxWyZwGcu0IUa2RZEk,9071
|
246
|
+
validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py,sha256=iv-Ep7FC2Lv4-Pm5t73BlTrZ9iZoi5xMbo9i4dB5sis,4380
|
241
247
|
validmind/tests/model_validation/sklearn/SilhouettePlot.py,sha256=jUrVBRFgcvPz0Y-A6f4uk-1ewMG8p_hdAQI4NBbz4fk,4896
|
242
248
|
validmind/tests/model_validation/sklearn/TrainingTestDegradation.py,sha256=gPxCnq1sPs0EiyRN1N9LxW1wyXU-KxOSzHOa7VAIOkk,4354
|
243
249
|
validmind/tests/model_validation/sklearn/VMeasure.py,sha256=YpsrszR1s5MAufOzuvibBVnw9O2ebSISQweA3d06E74,2734
|
244
250
|
validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py,sha256=Wfb0R4f7sE761F-KU1Yw1ByyjDHHU9uC5JszXz645Gw,11465
|
245
251
|
validmind/tests/model_validation/sklearn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
246
252
|
validmind/tests/model_validation/statsmodels/AutoARIMA.py,sha256=4QNcEEY_iqt6wCzYwsBwZQ-aacZ1erX5uHbPtKmbTJk,4896
|
247
|
-
validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py,sha256=
|
253
|
+
validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py,sha256=qyCR3Gu7t1ZVkl140lOxyc1vZbsXwzDK6CGnvLQ2UMs,4578
|
248
254
|
validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py,sha256=wY36j1-bzEUyXwmymQILXHLiI-tIKze0gI8dOMkYyyI,3632
|
249
255
|
validmind/tests/model_validation/statsmodels/GINITable.py,sha256=voBMdMDMxfzEsolBCKDJIXUC64DV3CR5xtw35uudjT0,4276
|
250
256
|
validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py,sha256=vCFOpWNpdeTUKulJfp33rtC-7JzJX64tOCPo-wn69G8,3033
|
251
257
|
validmind/tests/model_validation/statsmodels/Lilliefors.py,sha256=7sLzRqrZqzeskwqXp9_Lbjc1mel-dwqtCqQxpNz0WjY,3691
|
252
|
-
validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py,sha256
|
258
|
+
validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py,sha256=zlGrTHCgVCeGslfZ6u4_w7OoTFsOrKjF2A5tPcSNR8A,3937
|
253
259
|
validmind/tests/model_validation/statsmodels/RegressionCoeffs.py,sha256=NH6Qi-1fFxIO2kzma6NhVm8U7JWkYA_gKAXsasgZIX0,4175
|
254
260
|
validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py,sha256=ecXnety9-X45gt0dQ-RJRLcgzSRikPPf0oE5_6WFSCE,3909
|
255
261
|
validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py,sha256=XpzPACbdKkjP5egxESDUYb7aCZ8_VmJpMHCy3joEHmA,3648
|
@@ -274,7 +280,7 @@ validmind/tests/prompt_validation/Robustness.py,sha256=exMGzdzAtfRSTVSSY4xhbidln
|
|
274
280
|
validmind/tests/prompt_validation/Specificity.py,sha256=B5XemQSoE2o6elSFZZ5NdWq0ie3NycZS_CTTSThopfM,4692
|
275
281
|
validmind/tests/prompt_validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
276
282
|
validmind/tests/prompt_validation/ai_powered_test.py,sha256=Lc8WU-rJ50e_NbLGV3YZ-W9t6Vj2T-o7hMxZbUrv3pw,2229
|
277
|
-
validmind/tests/run.py,sha256=
|
283
|
+
validmind/tests/run.py,sha256=co7QgGYw_l3e0u_l4axR8V3X_GLKvMKmTCPzvmFvaow,13419
|
278
284
|
validmind/tests/test_providers.py,sha256=BceVuM_-bfQ4Zp-a5wwcP_wHeM6IOUpPIq1-MeT2-VY,6250
|
279
285
|
validmind/tests/utils.py,sha256=mQuf1qgewPiE_pFN8iOoPSCGdyFqb4jbMFBVN3S3S2o,3526
|
280
286
|
validmind/unit_metrics/__init__.py,sha256=lXeTJh8uq0TBRQHDBVhzKiHoV2eG9xOkHkI_pDXnkPU,952
|
@@ -294,7 +300,7 @@ validmind/unit_metrics/regression/MeanSquaredError.py,sha256=h-zgtlR3aigQwMGbi55
|
|
294
300
|
validmind/unit_metrics/regression/QuantileLoss.py,sha256=rs0m9w4zIL6daQOHqYY-sEeQs6SDTpd0t3cN_KFZyqA,518
|
295
301
|
validmind/unit_metrics/regression/RSquaredScore.py,sha256=z8-E-KSewvma9nu1OSUv97IfmFLpV5-rOq15jtlxklg,459
|
296
302
|
validmind/unit_metrics/regression/RootMeanSquaredError.py,sha256=uIDsSpy75Z7W3zu4LditvW3mPJIkGxf-PdFQ7szWBZU,603
|
297
|
-
validmind/utils.py,sha256=
|
303
|
+
validmind/utils.py,sha256=WvjKXskGmVGupEVYvEiy5-0cBT_jwpKfpH2HsCfy_B8,18655
|
298
304
|
validmind/vm_models/__init__.py,sha256=lcqf9q2aRzrVrNN6R--81IkrnSa6BXPbhJ8SnkT_hcI,702
|
299
305
|
validmind/vm_models/dataset/__init__.py,sha256=U4CxZjdoc0dd9u2AqBl5PJh1UVbzXWNrmundmjLF-qE,346
|
300
306
|
validmind/vm_models/dataset/dataset.py,sha256=Zzquc3FhPGTMZhFxNlAIHf4AGXq5idpJmr-fkXUpi6A,26498
|
@@ -304,14 +310,14 @@ validmind/vm_models/input.py,sha256=qLdqz_bktr4v0YcPha2vFdDvmkC-btT1pH9zBIkt1OY,
|
|
304
310
|
validmind/vm_models/model.py,sha256=PRNyrnKihIRtbYt4idLPHf8OCij71Vgc5Xug_oVZfBg,6486
|
305
311
|
validmind/vm_models/result/__init__.py,sha256=Bs5GMGDxiTsxlwCdqxz5LmGkY0_fM6-_0-3tWSRoqps,341
|
306
312
|
validmind/vm_models/result/result.jinja,sha256=Yvovwm5gInCBukFRlvJXNlDIUpl2eFz4dz1lS3Sn_Gc,311
|
307
|
-
validmind/vm_models/result/result.py,sha256=
|
313
|
+
validmind/vm_models/result/result.py,sha256=kMyr_7qOgo30ZW87MomIm-ck5d8Ph2Kx4cUE2hh-EEM,13784
|
308
314
|
validmind/vm_models/result/utils.py,sha256=t6g-g1fJ3SU9lHqC1kMeozMkrUnfOMwYAep3Z5XFXNo,5122
|
309
315
|
validmind/vm_models/test_suite/runner.py,sha256=Cpl9WKwHzJD5Zvrh71FzbEhGZkHM0x0MSd4PIwdOLDQ,5427
|
310
316
|
validmind/vm_models/test_suite/summary.py,sha256=Ug3nMvpPL2DSTDujWagWMCrFiW9oDy0AqJL_zXN8pH0,4642
|
311
317
|
validmind/vm_models/test_suite/test.py,sha256=uImjmPlBlLrlVPavsUzbaDK55bvpOn3PuFyWeyYyTac,3908
|
312
318
|
validmind/vm_models/test_suite/test_suite.py,sha256=5Jppt2UXSMgvJ6FO5LIAKA4oN_-hh9SMr8APAFJzk9g,5080
|
313
|
-
validmind-2.7.
|
314
|
-
validmind-2.7.
|
315
|
-
validmind-2.7.
|
316
|
-
validmind-2.7.
|
317
|
-
validmind-2.7.
|
319
|
+
validmind-2.7.5.dist-info/LICENSE,sha256=XonPUfwjvrC5Ombl3y-ko0Wubb1xdG_7nzvIbkZRKHw,35772
|
320
|
+
validmind-2.7.5.dist-info/METADATA,sha256=O6Wiic_-q2EBgaNPpb6hBTaa-tvW9QbZ9WVL-ZiB_4k,6124
|
321
|
+
validmind-2.7.5.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
|
322
|
+
validmind-2.7.5.dist-info/entry_points.txt,sha256=HuW7YyOv9u_OEWpViQXtv0nfoI67uieJHawKWA4Hv9A,76
|
323
|
+
validmind-2.7.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|