validmind 2.6.10__py3-none-any.whl → 2.7.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- validmind/__init__.py +2 -0
- 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/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/ROCCurve.py +26 -23
- 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/output.py +10 -1
- validmind/tests/run.py +52 -54
- validmind/utils.py +34 -7
- validmind/vm_models/figure.py +15 -0
- validmind/vm_models/result/__init__.py +2 -2
- validmind/vm_models/result/result.py +136 -23
- {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/METADATA +1 -1
- {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/RECORD +30 -24
- {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/LICENSE +0 -0
- {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/WHEEL +0 -0
- {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/entry_points.txt +0 -0
@@ -12,14 +12,22 @@ from dataclasses import dataclass
|
|
12
12
|
from typing import Any, Dict, List, Optional, Union
|
13
13
|
from uuid import uuid4
|
14
14
|
|
15
|
+
import matplotlib
|
15
16
|
import pandas as pd
|
17
|
+
import plotly.graph_objs as go
|
16
18
|
from ipywidgets import HTML, VBox
|
17
19
|
|
18
20
|
from ... import api_client
|
19
21
|
from ...ai.utils import DescriptionFuture
|
20
22
|
from ...logging import get_logger
|
21
|
-
from ...utils import
|
22
|
-
|
23
|
+
from ...utils import (
|
24
|
+
HumanReadableEncoder,
|
25
|
+
NumpyEncoder,
|
26
|
+
display,
|
27
|
+
run_async,
|
28
|
+
test_id_to_name,
|
29
|
+
)
|
30
|
+
from ..figure import Figure, create_figure
|
23
31
|
from ..input import VMInput
|
24
32
|
from .utils import (
|
25
33
|
AI_REVISION_NAME,
|
@@ -34,6 +42,42 @@ from .utils import (
|
|
34
42
|
logger = get_logger(__name__)
|
35
43
|
|
36
44
|
|
45
|
+
class RawData:
|
46
|
+
"""Holds raw data for a test result"""
|
47
|
+
|
48
|
+
def __init__(self, log: bool = False, **kwargs):
|
49
|
+
"""Create a new RawData object
|
50
|
+
|
51
|
+
Args:
|
52
|
+
log (bool): If True, log the raw data to ValidMind
|
53
|
+
**kwargs: Keyword arguments to set as attributes e.g.
|
54
|
+
`RawData(log=True, dataset_duplicates=df_duplicates)`
|
55
|
+
"""
|
56
|
+
self.log = log
|
57
|
+
|
58
|
+
for key, value in kwargs.items():
|
59
|
+
setattr(self, key, value)
|
60
|
+
|
61
|
+
def __repr__(self) -> str:
|
62
|
+
return f"RawData({', '.join(self.__dict__.keys())})"
|
63
|
+
|
64
|
+
def inspect(self, show: bool = True):
|
65
|
+
"""Inspect the raw data"""
|
66
|
+
raw_data = {
|
67
|
+
key: getattr(self, key)
|
68
|
+
for key in self.__dict__
|
69
|
+
if not key.startswith("_") and key != "log"
|
70
|
+
}
|
71
|
+
|
72
|
+
if not show:
|
73
|
+
return raw_data
|
74
|
+
|
75
|
+
print(json.dumps(raw_data, indent=2, cls=HumanReadableEncoder))
|
76
|
+
|
77
|
+
def serialize(self):
|
78
|
+
return {key: getattr(self, key) for key in self.__dict__}
|
79
|
+
|
80
|
+
|
37
81
|
@dataclass
|
38
82
|
class ResultTable:
|
39
83
|
"""
|
@@ -41,7 +85,7 @@ class ResultTable:
|
|
41
85
|
"""
|
42
86
|
|
43
87
|
data: Union[List[Any], pd.DataFrame]
|
44
|
-
title: str
|
88
|
+
title: Optional[str] = None
|
45
89
|
|
46
90
|
def __repr__(self) -> str:
|
47
91
|
return f'ResultTable(title="{self.title}")' if self.title else "ResultTable"
|
@@ -115,27 +159,28 @@ class TestResult(Result):
|
|
115
159
|
name: str = "Test Result"
|
116
160
|
ref_id: str = None
|
117
161
|
title: Optional[str] = None
|
162
|
+
doc: Optional[str] = None
|
118
163
|
description: Optional[Union[str, DescriptionFuture]] = None
|
119
164
|
metric: Optional[Union[int, float]] = None
|
120
165
|
tables: Optional[List[ResultTable]] = None
|
166
|
+
raw_data: Optional[RawData] = None
|
121
167
|
figures: Optional[List[Figure]] = None
|
122
168
|
passed: Optional[bool] = None
|
123
169
|
params: Optional[Dict[str, Any]] = None
|
124
170
|
inputs: Optional[Dict[str, Union[List[VMInput], VMInput]]] = None
|
125
171
|
metadata: Optional[Dict[str, Any]] = None
|
126
|
-
title: Optional[str] = None
|
127
172
|
_was_description_generated: bool = False
|
128
173
|
_unsafe: bool = False
|
129
174
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
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())
|
134
178
|
|
135
179
|
def __repr__(self) -> str:
|
136
180
|
attrs = [
|
137
181
|
attr
|
138
182
|
for attr in [
|
183
|
+
"doc",
|
139
184
|
"description",
|
140
185
|
"params",
|
141
186
|
"tables",
|
@@ -144,13 +189,30 @@ class TestResult(Result):
|
|
144
189
|
"passed",
|
145
190
|
]
|
146
191
|
if getattr(self, attr) is not None
|
192
|
+
and (
|
193
|
+
len(getattr(self, attr)) > 0
|
194
|
+
if isinstance(getattr(self, attr), list)
|
195
|
+
else True
|
196
|
+
)
|
147
197
|
]
|
148
198
|
|
149
199
|
return f'TestResult("{self.result_id}", {", ".join(attrs)})'
|
150
200
|
|
151
|
-
def
|
152
|
-
if
|
153
|
-
|
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)
|
154
216
|
|
155
217
|
def _get_flat_inputs(self):
|
156
218
|
# remove duplicates by `input_id`
|
@@ -164,26 +226,83 @@ class TestResult(Result):
|
|
164
226
|
|
165
227
|
return list(inputs.values())
|
166
228
|
|
167
|
-
def add_table(
|
229
|
+
def add_table(
|
230
|
+
self,
|
231
|
+
table: Union[ResultTable, pd.DataFrame, List[Dict[str, Any]]],
|
232
|
+
title: Optional[str] = None,
|
233
|
+
):
|
234
|
+
"""Add a new table to the result
|
235
|
+
|
236
|
+
Args:
|
237
|
+
table (Union[ResultTable, pd.DataFrame, List[Dict[str, Any]]]): The table to add
|
238
|
+
title (Optional[str]): The title of the table (can optionally be provided for
|
239
|
+
pd.DataFrame and List[Dict[str, Any]] tables)
|
240
|
+
"""
|
168
241
|
if self.tables is None:
|
169
242
|
self.tables = []
|
170
243
|
|
244
|
+
if isinstance(table, (pd.DataFrame, list)):
|
245
|
+
table = ResultTable(data=table, title=title)
|
246
|
+
|
171
247
|
self.tables.append(table)
|
172
248
|
|
173
|
-
def
|
249
|
+
def remove_table(self, index: int):
|
250
|
+
"""Remove a table from the result by index
|
251
|
+
|
252
|
+
Args:
|
253
|
+
index (int): The index of the table to remove (default is 0)
|
254
|
+
"""
|
255
|
+
if self.tables is None:
|
256
|
+
return
|
257
|
+
|
258
|
+
self.tables.pop(index)
|
259
|
+
|
260
|
+
def add_figure(
|
261
|
+
self,
|
262
|
+
figure: Union[
|
263
|
+
matplotlib.figure.Figure,
|
264
|
+
go.Figure,
|
265
|
+
go.FigureWidget,
|
266
|
+
bytes,
|
267
|
+
Figure,
|
268
|
+
],
|
269
|
+
):
|
270
|
+
"""Add a new figure to the result
|
271
|
+
|
272
|
+
Args:
|
273
|
+
figure (Union[matplotlib.figure.Figure, go.Figure, go.FigureWidget,
|
274
|
+
bytes, Figure]): The figure to add (can be either a VM Figure object,
|
275
|
+
a raw figure object from the supported libraries, or a png image as
|
276
|
+
raw bytes)
|
277
|
+
"""
|
174
278
|
if self.figures is None:
|
175
279
|
self.figures = []
|
176
280
|
|
281
|
+
if not isinstance(figure, Figure):
|
282
|
+
random_tag = str(uuid4())[:4]
|
283
|
+
figure = create_figure(
|
284
|
+
figure=figure,
|
285
|
+
ref_id=self.ref_id,
|
286
|
+
key=f"{self.result_id}:{random_tag}",
|
287
|
+
)
|
288
|
+
|
177
289
|
if figure.ref_id != self.ref_id:
|
178
290
|
figure.ref_id = self.ref_id
|
179
291
|
|
180
292
|
self.figures.append(figure)
|
181
293
|
|
182
|
-
def
|
183
|
-
|
184
|
-
self.description = self.description.get_description()
|
185
|
-
self._was_description_generated = True
|
294
|
+
def remove_figure(self, index: int = 0):
|
295
|
+
"""Remove a figure from the result by index
|
186
296
|
|
297
|
+
Args:
|
298
|
+
index (int): The index of the figure to remove (default is 0)
|
299
|
+
"""
|
300
|
+
if self.figures is None:
|
301
|
+
return
|
302
|
+
|
303
|
+
self.figures.pop(index)
|
304
|
+
|
305
|
+
def to_widget(self):
|
187
306
|
if self.metric is not None and not self.tables and not self.figures:
|
188
307
|
return HTML(f"<h3>{self.test_name}: <code>{self.metric}</code></h3>")
|
189
308
|
|
@@ -198,8 +317,6 @@ class TestResult(Result):
|
|
198
317
|
),
|
199
318
|
"show_metric": self.metric is not None,
|
200
319
|
"metric": self.metric,
|
201
|
-
"tables": self.tables,
|
202
|
-
"figures": self.figures,
|
203
320
|
}
|
204
321
|
rendered = get_result_template().render(**template_data)
|
205
322
|
|
@@ -297,10 +414,6 @@ class TestResult(Result):
|
|
297
414
|
)
|
298
415
|
|
299
416
|
if self.description:
|
300
|
-
if isinstance(self.description, DescriptionFuture):
|
301
|
-
self.description = self.description.get_description()
|
302
|
-
self._was_description_generated = True
|
303
|
-
|
304
417
|
revision_name = (
|
305
418
|
AI_REVISION_NAME
|
306
419
|
if self._was_description_generated
|
@@ -1,11 +1,11 @@
|
|
1
|
-
validmind/__init__.py,sha256=
|
2
|
-
validmind/__version__.py,sha256=
|
3
|
-
validmind/ai/test_descriptions.py,sha256=
|
1
|
+
validmind/__init__.py,sha256=U-S6pV31O3sVsbcEzlriz0tootyfvPnPOu4PHzXz9tM,2688
|
2
|
+
validmind/__version__.py,sha256=yLdxKZXyzrDqew_33G4dvZoqgGxRCyEx9vhYW3y2Je4,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,7 +167,7 @@ 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=
|
170
|
+
validmind/tests/decorator.py,sha256=fhHvE72FL3Doezwzk12s3dM13RWG047WHSHqPr9p2Fg,4784
|
169
171
|
validmind/tests/load.py,sha256=V-bWhCc4cR5RYpnohKOccq4r5AOO53cr-B3qpp6mTwE,10943
|
170
172
|
validmind/tests/model_validation/BertScore.py,sha256=nRR8lmY2ELBJlqVzKFNnOBgWOu3p27gciVb1zP85vCQ,5719
|
171
173
|
validmind/tests/model_validation/BleuScore.py,sha256=W6XMg8aO_L09REQ3fI3w6cEZZ1MYxTMzlpXDEAApSL0,5096
|
@@ -212,25 +214,28 @@ 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
|
231
236
|
validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py,sha256=qBmU4TDMAJGABzNI8VbZod59G3YbdzfU7qz76eqga1U,8793
|
232
237
|
validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py,sha256=waA_A0qjxta20wycjTl-QYHGx5CUb5c0Zdczk3LyBkY,3665
|
233
|
-
validmind/tests/model_validation/sklearn/ROCCurve.py,sha256=
|
238
|
+
validmind/tests/model_validation/sklearn/ROCCurve.py,sha256=StpBXzqpw5G-V-Kfj-Wx5NzyDEwJ8h95o2-uECB5t4I,4876
|
234
239
|
validmind/tests/model_validation/sklearn/RegressionErrors.py,sha256=qj6l5RQGG7E6aOcaFxO8WReEEdJKfXrNp7wecWuCSaI,3713
|
235
240
|
validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py,sha256=em0NPWZVKq-nqdbFiiifQcsONGd8xek0_kwdtx6HXjE,3609
|
236
241
|
validmind/tests/model_validation/sklearn/RegressionPerformance.py,sha256=IJOjUWJMTn_-8XM8MsLAtkkQtFhP4PT-AVX90Z_V35M,3193
|
@@ -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
|
@@ -264,7 +270,7 @@ validmind/tests/ongoing_monitoring/FeatureDrift.py,sha256=qsBoolRGgW6sdUa8F-c4gs
|
|
264
270
|
validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py,sha256=QDaYzf2b3n4yU_Rq3kBRJA49jIl1RP-n2d4KikZ76_c,3323
|
265
271
|
validmind/tests/ongoing_monitoring/PredictionCorrelation.py,sha256=15GqFODz986m0c-62fc1UffSRLndGv4WiB2Uz503zak,3449
|
266
272
|
validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py,sha256=KVJvMGpNg0fsCJ9ZkUmlRZ-L1Gy9xLj1YS_C-p5bsXc,2498
|
267
|
-
validmind/tests/output.py,sha256=
|
273
|
+
validmind/tests/output.py,sha256=1kY9FJWUOpZ2BofxKQ5scxkg10Pvb24_OxypegHeh04,4029
|
268
274
|
validmind/tests/prompt_validation/Bias.py,sha256=UFtC7l8aXBkyzfpvZ2db2JlO5SZOssp2mCrUk5HKyTY,5702
|
269
275
|
validmind/tests/prompt_validation/Clarity.py,sha256=KA1hFtsUHO02epDEIc4W1LtuU3BoXCg3xkQsuIUKeuI,4825
|
270
276
|
validmind/tests/prompt_validation/Conciseness.py,sha256=pZaMfKELAfTp3apUsQ1Pi53LUGMBetyHOt5DaqLcrUY,4591
|
@@ -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,24 +300,24 @@ 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
|
301
307
|
validmind/vm_models/dataset/utils.py,sha256=VMcPEgwW9oW5D0MCa_MqXCq_sEzzsLLRmS4RaYrsif0,5530
|
302
|
-
validmind/vm_models/figure.py,sha256=
|
308
|
+
validmind/vm_models/figure.py,sha256=7VNOIsbOsUKyXvgxaY10H_Wvy2HEFte3nwdx09SZu20,6297
|
303
309
|
validmind/vm_models/input.py,sha256=qLdqz_bktr4v0YcPha2vFdDvmkC-btT1pH9zBIkt1OY,1046
|
304
310
|
validmind/vm_models/model.py,sha256=PRNyrnKihIRtbYt4idLPHf8OCij71Vgc5Xug_oVZfBg,6486
|
305
|
-
validmind/vm_models/result/__init__.py,sha256=
|
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.
|
314
|
-
validmind-2.
|
315
|
-
validmind-2.
|
316
|
-
validmind-2.
|
317
|
-
validmind-2.
|
319
|
+
validmind-2.7.4.dist-info/LICENSE,sha256=XonPUfwjvrC5Ombl3y-ko0Wubb1xdG_7nzvIbkZRKHw,35772
|
320
|
+
validmind-2.7.4.dist-info/METADATA,sha256=Q-LKRi7dXtjxFBM3_vg4MnJyz7lvaJmHRKI2Q4mEQk4,6124
|
321
|
+
validmind-2.7.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
322
|
+
validmind-2.7.4.dist-info/entry_points.txt,sha256=HuW7YyOv9u_OEWpViQXtv0nfoI67uieJHawKWA4Hv9A,76
|
323
|
+
validmind-2.7.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|