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.
Files changed (30) hide show
  1. validmind/__init__.py +2 -0
  2. validmind/__version__.py +1 -1
  3. validmind/ai/test_descriptions.py +20 -4
  4. validmind/ai/test_result_description/user.jinja +5 -0
  5. validmind/datasets/credit_risk/lending_club.py +444 -14
  6. validmind/tests/data_validation/MutualInformation.py +129 -0
  7. validmind/tests/data_validation/ScoreBandDefaultRates.py +139 -0
  8. validmind/tests/data_validation/TooManyZeroValues.py +6 -5
  9. validmind/tests/data_validation/UniqueRows.py +3 -1
  10. validmind/tests/decorator.py +18 -16
  11. validmind/tests/model_validation/sklearn/CalibrationCurve.py +116 -0
  12. validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +261 -0
  13. validmind/tests/model_validation/sklearn/ConfusionMatrix.py +1 -0
  14. validmind/tests/model_validation/sklearn/HyperParametersTuning.py +144 -56
  15. validmind/tests/model_validation/sklearn/ModelParameters.py +74 -0
  16. validmind/tests/model_validation/sklearn/ROCCurve.py +26 -23
  17. validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +130 -0
  18. validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +5 -6
  19. validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +2 -3
  20. validmind/tests/output.py +10 -1
  21. validmind/tests/run.py +52 -54
  22. validmind/utils.py +34 -7
  23. validmind/vm_models/figure.py +15 -0
  24. validmind/vm_models/result/__init__.py +2 -2
  25. validmind/vm_models/result/result.py +136 -23
  26. {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/METADATA +1 -1
  27. {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/RECORD +30 -24
  28. {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/LICENSE +0 -0
  29. {validmind-2.6.10.dist-info → validmind-2.7.4.dist-info}/WHEEL +0 -0
  30. {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 NumpyEncoder, display, run_async, test_id_to_name
22
- from ..figure import Figure
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
- @property
131
- def test_name(self) -> str:
132
- """Get the test name, using custom title if available."""
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 __post_init__(self):
152
- if self.ref_id is None:
153
- self.ref_id = str(uuid4())
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(self, table: ResultTable):
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 add_figure(self, figure: Figure):
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 to_widget(self):
183
- if isinstance(self.description, DescriptionFuture):
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: validmind
3
- Version: 2.6.10
3
+ Version: 2.7.4
4
4
  Summary: ValidMind Library
5
5
  License: Commercial License
6
6
  Author: Andres Rodriguez
@@ -1,11 +1,11 @@
1
- validmind/__init__.py,sha256=aj4s11FJ0Bi44s3QTMC-KFnJMkdYRaT87z5hFVlLnRk,2635
2
- validmind/__version__.py,sha256=w6OhCDyiX6hNf-GW4ugeaBeNyjLLpC1SCeslbyTx57c,23
3
- validmind/ai/test_descriptions.py,sha256=IlnRSNqbddpVbWoPldPrlpFldn0hGUsKUp0RBixu6j4,6914
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=kyWJK9RcBKvtPf6O2rEzCAHAdUFEIlAwK-exLhtoPRI,630
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=oscdu1zmDytSU6dJwinl97si4LDdzMBTFUgiJialRmE,11403
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=xhWwJAOx66IK4myCvvl5yWWh8CEjXzn8T2BQ1G3yMMU,4192
152
- validmind/tests/data_validation/UniqueRows.py,sha256=cNaK3cMMKXvQdNZx4MA6j16t4ErCPzpEQ6vz-N3C35I,3262
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=0SxG1RBZ9h7ZBF1863hD_iqwlvff0EioTzt9xfW-Qfw,4797
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=ORHZUetU73UXoATc0vLWCByvIgVGNiksRarMmmZdNH8,4740
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=oZDm84hjmIywWBTcIaN97s_x6j0mwGLCUDt2pdxpoHU,3415
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=R_AdKct41ADnr6XOwCj2f2ba5C2oNpJ8pKhhWCugepM,4710
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=hXn0vBL-tvMR28sao1wnrnMEPl8gbl7eBYO6uW1WA-s,4625
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=-c-FBs0QgXipWV-YQymXem9HdPx8-Fr-Yjwr4LAOm9k,4109
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=k9er-c1eGPeUXt0CpD47OtZ1iBWb8A8k9vWorQIFpK4,3763
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=sacnXMODOhtUyxwNKhWOhxvODcrplmJr-e-nDj2pW9M,13603
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=ShukfVcVQqTmTcYyCGs0l3PwO51Lt-aJLnZZGlWgN1A,17756
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=MtaKYaM8ZeYRkbsO5qw0IZIKR8EZuRU1mZz-1CxViTE,5785
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=7LcJWvJZsw4j0keJ6KXSGQvc8W72mA0efWFrp9sliCY,321
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=PWLvxE4h5i9Vk_nObi8B70_6CQhYj82DNRNkoxZD8BA,10558
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.6.10.dist-info/LICENSE,sha256=XonPUfwjvrC5Ombl3y-ko0Wubb1xdG_7nzvIbkZRKHw,35772
314
- validmind-2.6.10.dist-info/METADATA,sha256=fYvxqrkpzo60OXoadzg5Le1cSmi_mVbNlzPl3melJpo,6125
315
- validmind-2.6.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
316
- validmind-2.6.10.dist-info/entry_points.txt,sha256=HuW7YyOv9u_OEWpViQXtv0nfoI67uieJHawKWA4Hv9A,76
317
- validmind-2.6.10.dist-info/RECORD,,
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,,