validmind 2.8.28__py3-none-any.whl → 2.9.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.
Files changed (233) hide show
  1. validmind/__version__.py +1 -1
  2. validmind/ai/utils.py +4 -24
  3. validmind/api_client.py +6 -17
  4. validmind/logging.py +48 -0
  5. validmind/models/function.py +11 -3
  6. validmind/tests/__init__.py +2 -0
  7. validmind/tests/__types__.py +18 -0
  8. validmind/tests/data_validation/ACFandPACFPlot.py +3 -1
  9. validmind/tests/data_validation/ADF.py +3 -1
  10. validmind/tests/data_validation/AutoAR.py +3 -1
  11. validmind/tests/data_validation/AutoMA.py +5 -1
  12. validmind/tests/data_validation/AutoStationarity.py +5 -1
  13. validmind/tests/data_validation/BivariateScatterPlots.py +3 -1
  14. validmind/tests/data_validation/BoxPierce.py +4 -1
  15. validmind/tests/data_validation/ChiSquaredFeaturesTable.py +1 -1
  16. validmind/tests/data_validation/ClassImbalance.py +1 -1
  17. validmind/tests/data_validation/DatasetDescription.py +4 -1
  18. validmind/tests/data_validation/DatasetSplit.py +3 -2
  19. validmind/tests/data_validation/DescriptiveStatistics.py +3 -1
  20. validmind/tests/data_validation/DickeyFullerGLS.py +3 -1
  21. validmind/tests/data_validation/Duplicates.py +3 -1
  22. validmind/tests/data_validation/EngleGrangerCoint.py +6 -1
  23. validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +3 -1
  24. validmind/tests/data_validation/HighCardinality.py +3 -1
  25. validmind/tests/data_validation/HighPearsonCorrelation.py +4 -1
  26. validmind/tests/data_validation/IQROutliersBarPlot.py +4 -1
  27. validmind/tests/data_validation/IQROutliersTable.py +6 -1
  28. validmind/tests/data_validation/IsolationForestOutliers.py +3 -1
  29. validmind/tests/data_validation/JarqueBera.py +3 -1
  30. validmind/tests/data_validation/KPSS.py +3 -1
  31. validmind/tests/data_validation/LJungBox.py +3 -1
  32. validmind/tests/data_validation/LaggedCorrelationHeatmap.py +6 -1
  33. validmind/tests/data_validation/MissingValues.py +5 -1
  34. validmind/tests/data_validation/MissingValuesBarPlot.py +3 -1
  35. validmind/tests/data_validation/MutualInformation.py +4 -1
  36. validmind/tests/data_validation/PearsonCorrelationMatrix.py +3 -1
  37. validmind/tests/data_validation/PhillipsPerronArch.py +3 -1
  38. validmind/tests/data_validation/ProtectedClassesCombination.py +5 -1
  39. validmind/tests/data_validation/ProtectedClassesDescription.py +5 -1
  40. validmind/tests/data_validation/ProtectedClassesDisparity.py +5 -3
  41. validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +9 -2
  42. validmind/tests/data_validation/RollingStatsPlot.py +5 -1
  43. validmind/tests/data_validation/RunsTest.py +1 -1
  44. validmind/tests/data_validation/ScatterPlot.py +2 -1
  45. validmind/tests/data_validation/ScoreBandDefaultRates.py +3 -1
  46. validmind/tests/data_validation/SeasonalDecompose.py +6 -1
  47. validmind/tests/data_validation/ShapiroWilk.py +4 -1
  48. validmind/tests/data_validation/Skewness.py +3 -1
  49. validmind/tests/data_validation/SpreadPlot.py +3 -1
  50. validmind/tests/data_validation/TabularCategoricalBarPlots.py +4 -1
  51. validmind/tests/data_validation/TabularDateTimeHistograms.py +3 -1
  52. validmind/tests/data_validation/TabularDescriptionTables.py +4 -1
  53. validmind/tests/data_validation/TabularNumericalHistograms.py +3 -1
  54. validmind/tests/data_validation/TargetRateBarPlots.py +4 -1
  55. validmind/tests/data_validation/TimeSeriesDescription.py +1 -1
  56. validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +1 -1
  57. validmind/tests/data_validation/TimeSeriesFrequency.py +5 -1
  58. validmind/tests/data_validation/TimeSeriesHistogram.py +4 -1
  59. validmind/tests/data_validation/TimeSeriesLinePlot.py +3 -1
  60. validmind/tests/data_validation/TimeSeriesMissingValues.py +6 -1
  61. validmind/tests/data_validation/TimeSeriesOutliers.py +5 -1
  62. validmind/tests/data_validation/TooManyZeroValues.py +6 -1
  63. validmind/tests/data_validation/UniqueRows.py +5 -1
  64. validmind/tests/data_validation/WOEBinPlots.py +4 -1
  65. validmind/tests/data_validation/WOEBinTable.py +5 -1
  66. validmind/tests/data_validation/ZivotAndrewsArch.py +3 -1
  67. validmind/tests/data_validation/nlp/CommonWords.py +2 -1
  68. validmind/tests/data_validation/nlp/Hashtags.py +2 -1
  69. validmind/tests/data_validation/nlp/LanguageDetection.py +4 -1
  70. validmind/tests/data_validation/nlp/Mentions.py +3 -1
  71. validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +6 -1
  72. validmind/tests/data_validation/nlp/Punctuations.py +2 -1
  73. validmind/tests/data_validation/nlp/Sentiment.py +3 -1
  74. validmind/tests/data_validation/nlp/StopWords.py +2 -1
  75. validmind/tests/data_validation/nlp/TextDescription.py +3 -1
  76. validmind/tests/data_validation/nlp/Toxicity.py +3 -1
  77. validmind/tests/load.py +91 -17
  78. validmind/tests/model_validation/BertScore.py +6 -3
  79. validmind/tests/model_validation/BleuScore.py +6 -1
  80. validmind/tests/model_validation/ClusterSizeDistribution.py +5 -1
  81. validmind/tests/model_validation/ContextualRecall.py +6 -1
  82. validmind/tests/model_validation/FeaturesAUC.py +5 -1
  83. validmind/tests/model_validation/MeteorScore.py +6 -1
  84. validmind/tests/model_validation/ModelMetadata.py +2 -1
  85. validmind/tests/model_validation/ModelPredictionResiduals.py +10 -2
  86. validmind/tests/model_validation/RegardScore.py +7 -1
  87. validmind/tests/model_validation/RegressionResidualsPlot.py +5 -1
  88. validmind/tests/model_validation/RougeScore.py +8 -1
  89. validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +8 -1
  90. validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +7 -1
  91. validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +6 -1
  92. validmind/tests/model_validation/TokenDisparity.py +6 -1
  93. validmind/tests/model_validation/ToxicityScore.py +6 -1
  94. validmind/tests/model_validation/embeddings/ClusterDistribution.py +6 -1
  95. validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +6 -1
  96. validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +6 -1
  97. validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +7 -3
  98. validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +6 -1
  99. validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +4 -3
  100. validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +6 -1
  101. validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +7 -3
  102. validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +6 -1
  103. validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +5 -2
  104. validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +5 -1
  105. validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +4 -1
  106. validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +5 -1
  107. validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +9 -6
  108. validmind/tests/model_validation/ragas/AnswerCorrectness.py +8 -5
  109. validmind/tests/model_validation/ragas/AspectCritic.py +11 -8
  110. validmind/tests/model_validation/ragas/ContextEntityRecall.py +5 -2
  111. validmind/tests/model_validation/ragas/ContextPrecision.py +5 -2
  112. validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +5 -2
  113. validmind/tests/model_validation/ragas/ContextRecall.py +6 -2
  114. validmind/tests/model_validation/ragas/Faithfulness.py +9 -5
  115. validmind/tests/model_validation/ragas/NoiseSensitivity.py +10 -7
  116. validmind/tests/model_validation/ragas/ResponseRelevancy.py +9 -6
  117. validmind/tests/model_validation/ragas/SemanticSimilarity.py +7 -4
  118. validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +5 -1
  119. validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +5 -1
  120. validmind/tests/model_validation/sklearn/CalibrationCurve.py +5 -1
  121. validmind/tests/model_validation/sklearn/ClassifierPerformance.py +5 -1
  122. validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +5 -1
  123. validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +5 -1
  124. validmind/tests/model_validation/sklearn/CompletenessScore.py +5 -1
  125. validmind/tests/model_validation/sklearn/ConfusionMatrix.py +4 -1
  126. validmind/tests/model_validation/sklearn/FeatureImportance.py +5 -1
  127. validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +5 -1
  128. validmind/tests/model_validation/sklearn/HomogeneityScore.py +5 -1
  129. validmind/tests/model_validation/sklearn/HyperParametersTuning.py +2 -4
  130. validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +3 -3
  131. validmind/tests/model_validation/sklearn/MinimumAccuracy.py +5 -1
  132. validmind/tests/model_validation/sklearn/MinimumF1Score.py +5 -1
  133. validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +5 -1
  134. validmind/tests/model_validation/sklearn/ModelParameters.py +6 -1
  135. validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +5 -1
  136. validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +3 -2
  137. validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +4 -4
  138. validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +2 -2
  139. validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +5 -1
  140. validmind/tests/model_validation/sklearn/ROCCurve.py +3 -1
  141. validmind/tests/model_validation/sklearn/RegressionErrors.py +6 -1
  142. validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +6 -1
  143. validmind/tests/model_validation/sklearn/RegressionPerformance.py +5 -1
  144. validmind/tests/model_validation/sklearn/RegressionR2Square.py +6 -1
  145. validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +6 -1
  146. validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +2 -2
  147. validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +3 -1
  148. validmind/tests/model_validation/sklearn/SilhouettePlot.py +6 -1
  149. validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +2 -2
  150. validmind/tests/model_validation/sklearn/VMeasure.py +5 -1
  151. validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +6 -5
  152. validmind/tests/model_validation/statsmodels/AutoARIMA.py +3 -1
  153. validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +6 -1
  154. validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +6 -1
  155. validmind/tests/model_validation/statsmodels/GINITable.py +4 -1
  156. validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +5 -1
  157. validmind/tests/model_validation/statsmodels/Lilliefors.py +3 -1
  158. validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +6 -2
  159. validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +4 -1
  160. validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +7 -2
  161. validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +5 -4
  162. validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +4 -1
  163. validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +3 -2
  164. validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +5 -1
  165. validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +3 -1
  166. validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +6 -1
  167. validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +2 -2
  168. validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +2 -2
  169. validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +2 -2
  170. validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +2 -2
  171. validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +2 -2
  172. validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +2 -2
  173. validmind/tests/ongoing_monitoring/FeatureDrift.py +5 -2
  174. validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +6 -1
  175. validmind/tests/ongoing_monitoring/PredictionCorrelation.py +8 -1
  176. validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +2 -2
  177. validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +6 -1
  178. validmind/tests/ongoing_monitoring/ROCCurveDrift.py +4 -2
  179. validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +2 -2
  180. validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +2 -2
  181. validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +8 -1
  182. validmind/tests/output.py +9 -2
  183. validmind/tests/plots/BoxPlot.py +260 -0
  184. validmind/tests/plots/CorrelationHeatmap.py +235 -0
  185. validmind/tests/plots/HistogramPlot.py +233 -0
  186. validmind/tests/plots/ViolinPlot.py +125 -0
  187. validmind/tests/plots/__init__.py +0 -0
  188. validmind/tests/prompt_validation/Bias.py +5 -1
  189. validmind/tests/prompt_validation/Clarity.py +5 -1
  190. validmind/tests/prompt_validation/Conciseness.py +5 -1
  191. validmind/tests/prompt_validation/Delimitation.py +5 -1
  192. validmind/tests/prompt_validation/NegativeInstruction.py +5 -1
  193. validmind/tests/prompt_validation/Robustness.py +5 -1
  194. validmind/tests/prompt_validation/Specificity.py +5 -1
  195. validmind/tests/stats/CorrelationAnalysis.py +251 -0
  196. validmind/tests/stats/DescriptiveStats.py +197 -0
  197. validmind/tests/stats/NormalityTests.py +147 -0
  198. validmind/tests/stats/OutlierDetection.py +173 -0
  199. validmind/tests/stats/__init__.py +0 -0
  200. validmind/unit_metrics/classification/Accuracy.py +2 -1
  201. validmind/unit_metrics/classification/F1.py +2 -1
  202. validmind/unit_metrics/classification/Precision.py +2 -1
  203. validmind/unit_metrics/classification/ROC_AUC.py +2 -1
  204. validmind/unit_metrics/classification/Recall.py +2 -1
  205. validmind/unit_metrics/classification/individual/AbsoluteError.py +42 -0
  206. validmind/unit_metrics/classification/individual/BrierScore.py +56 -0
  207. validmind/unit_metrics/classification/individual/CalibrationError.py +77 -0
  208. validmind/unit_metrics/classification/individual/ClassBalance.py +65 -0
  209. validmind/unit_metrics/classification/individual/Confidence.py +52 -0
  210. validmind/unit_metrics/classification/individual/Correctness.py +41 -0
  211. validmind/unit_metrics/classification/individual/LogLoss.py +61 -0
  212. validmind/unit_metrics/classification/individual/OutlierScore.py +86 -0
  213. validmind/unit_metrics/classification/individual/ProbabilityError.py +54 -0
  214. validmind/unit_metrics/classification/individual/Uncertainty.py +60 -0
  215. validmind/unit_metrics/classification/individual/__init__.py +0 -0
  216. validmind/unit_metrics/regression/AdjustedRSquaredScore.py +2 -1
  217. validmind/unit_metrics/regression/GiniCoefficient.py +2 -1
  218. validmind/unit_metrics/regression/HuberLoss.py +2 -1
  219. validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +2 -1
  220. validmind/unit_metrics/regression/MeanAbsoluteError.py +2 -1
  221. validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +2 -1
  222. validmind/unit_metrics/regression/MeanBiasDeviation.py +2 -1
  223. validmind/unit_metrics/regression/MeanSquaredError.py +2 -1
  224. validmind/unit_metrics/regression/QuantileLoss.py +1 -1
  225. validmind/unit_metrics/regression/RSquaredScore.py +2 -1
  226. validmind/unit_metrics/regression/RootMeanSquaredError.py +2 -1
  227. validmind/vm_models/dataset/dataset.py +291 -38
  228. validmind/vm_models/result/result.py +26 -4
  229. {validmind-2.8.28.dist-info → validmind-2.9.1.dist-info}/METADATA +2 -2
  230. {validmind-2.8.28.dist-info → validmind-2.9.1.dist-info}/RECORD +233 -212
  231. {validmind-2.8.28.dist-info → validmind-2.9.1.dist-info}/LICENSE +0 -0
  232. {validmind-2.8.28.dist-info → validmind-2.9.1.dist-info}/WHEEL +0 -0
  233. {validmind-2.8.28.dist-info → validmind-2.9.1.dist-info}/entry_points.txt +0 -0
@@ -2,6 +2,9 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+
6
+ from typing import Tuple
7
+
5
8
  import numpy as np
6
9
  import pandas as pd
7
10
  import plotly.express as px
@@ -24,7 +27,7 @@ def WOEBinPlots(
24
27
  breaks_adj: list = None,
25
28
  fig_height: int = 600,
26
29
  fig_width: int = 500,
27
- ):
30
+ ) -> Tuple[go.Figure, RawData]:
28
31
  """
29
32
  Generates visualizations of Weight of Evidence (WoE) and Information Value (IV) for understanding predictive power
30
33
  of categorical variables in a data set.
@@ -2,6 +2,8 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Dict, Tuple
6
+
5
7
  import pandas as pd
6
8
  import scorecardpy as sc
7
9
 
@@ -12,7 +14,9 @@ from validmind.vm_models import VMDataset
12
14
 
13
15
  @tags("tabular_data", "categorical_data")
14
16
  @tasks("classification")
15
- def WOEBinTable(dataset: VMDataset, breaks_adj: list = None):
17
+ def WOEBinTable(
18
+ dataset: VMDataset, breaks_adj: list = None
19
+ ) -> Tuple[Dict[str, pd.DataFrame], RawData]:
16
20
  """
17
21
  Assesses the Weight of Evidence (WoE) and Information Value (IV) of each feature to evaluate its predictive power
18
22
  in a binary classification model.
@@ -2,6 +2,8 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Any, Dict, Tuple
6
+
5
7
  import pandas as pd
6
8
  from arch.unitroot import ZivotAndrews
7
9
  from numpy.linalg import LinAlgError
@@ -16,7 +18,7 @@ logger = get_logger(__name__)
16
18
 
17
19
  @tags("time_series_data", "stationarity", "unit_root_test")
18
20
  @tasks("regression")
19
- def ZivotAndrewsArch(dataset: VMDataset):
21
+ def ZivotAndrewsArch(dataset: VMDataset) -> Tuple[Dict[str, Any], RawData]:
20
22
  """
21
23
  Evaluates the order of integration and stationarity of time series data using the Zivot-Andrews unit root test.
22
24
 
@@ -3,6 +3,7 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
  from collections import Counter
6
+ from typing import Tuple
6
7
 
7
8
  import nltk
8
9
  import plotly.graph_objects as go
@@ -14,7 +15,7 @@ from validmind.vm_models import VMDataset
14
15
 
15
16
  @tags("nlp", "text_data", "visualization", "frequency_analysis")
16
17
  @tasks("text_classification", "text_summarization")
17
- def CommonWords(dataset: VMDataset):
18
+ def CommonWords(dataset: VMDataset) -> Tuple[go.Figure, RawData]:
18
19
  """
19
20
  Assesses the most frequent non-stopwords in a text column for identifying prevalent language patterns.
20
21
 
@@ -3,6 +3,7 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
  import re
6
+ from typing import Tuple
6
7
 
7
8
  import plotly.graph_objects as go
8
9
 
@@ -13,7 +14,7 @@ from validmind.vm_models import VMDataset
13
14
 
14
15
  @tags("nlp", "text_data", "visualization", "frequency_analysis")
15
16
  @tasks("text_classification", "text_summarization")
16
- def Hashtags(dataset: VMDataset, top_hashtags: int = 25):
17
+ def Hashtags(dataset: VMDataset, top_hashtags: int = 25) -> Tuple[go.Figure, RawData]:
17
18
  """
18
19
  Assesses hashtag frequency in a text column, highlighting usage trends and potential dataset bias or spam.
19
20
 
@@ -2,7 +2,10 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import plotly.express as px
8
+ import plotly.graph_objects as go
6
9
  from langdetect import LangDetectException, detect
7
10
 
8
11
  from validmind import RawData, tags, tasks
@@ -10,7 +13,7 @@ from validmind import RawData, tags, tasks
10
13
 
11
14
  @tags("nlp", "text_data", "visualization")
12
15
  @tasks("text_classification", "text_summarization")
13
- def LanguageDetection(dataset):
16
+ def LanguageDetection(dataset) -> Tuple[go.Figure, RawData]:
14
17
  """
15
18
  Assesses the diversity of languages in a textual dataset by detecting and visualizing the distribution of languages.
16
19
 
@@ -3,9 +3,11 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
  import re
6
+ from typing import Tuple
6
7
 
7
8
  import pandas as pd
8
9
  import plotly.express as px
10
+ import plotly.graph_objects as go
9
11
 
10
12
  from validmind import RawData, tags, tasks
11
13
  from validmind.errors import SkipTestError
@@ -14,7 +16,7 @@ from validmind.vm_models import VMDataset
14
16
 
15
17
  @tags("nlp", "text_data", "visualization", "frequency_analysis")
16
18
  @tasks("text_classification", "text_summarization")
17
- def Mentions(dataset: VMDataset, top_mentions: int = 25):
19
+ def Mentions(dataset: VMDataset, top_mentions: int = 25) -> Tuple[go.Figure, RawData]:
18
20
  """
19
21
  Calculates and visualizes frequencies of '@' prefixed mentions in a text-based dataset for NLP model analysis.
20
22
 
@@ -3,8 +3,11 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
 
6
+ from typing import Dict, Tuple
7
+
6
8
  import pandas as pd
7
9
  import plotly.express as px
10
+ import plotly.graph_objects as go
8
11
  from textblob import TextBlob
9
12
 
10
13
  from validmind import RawData, tags, tasks
@@ -12,7 +15,9 @@ from validmind import RawData, tags, tasks
12
15
 
13
16
  @tags("nlp", "text_data", "data_validation")
14
17
  @tasks("nlp")
15
- def PolarityAndSubjectivity(dataset, threshold_subjectivity=0.5, threshold_polarity=0):
18
+ def PolarityAndSubjectivity(
19
+ dataset, threshold_subjectivity=0.5, threshold_polarity=0
20
+ ) -> Tuple[go.Figure, Dict[str, pd.DataFrame], RawData]:
16
21
  """
17
22
  Analyzes the polarity and subjectivity of text data within a given dataset to visualize the sentiment distribution.
18
23
 
@@ -8,6 +8,7 @@ Metrics functions for any Pandas-compatible datasets
8
8
 
9
9
  import string
10
10
  from collections import defaultdict
11
+ from typing import Tuple
11
12
 
12
13
  import plotly.graph_objects as go
13
14
 
@@ -16,7 +17,7 @@ from validmind import RawData, tags, tasks
16
17
 
17
18
  @tags("nlp", "text_data", "visualization", "frequency_analysis")
18
19
  @tasks("text_classification", "text_summarization", "nlp")
19
- def Punctuations(dataset, count_mode="token"):
20
+ def Punctuations(dataset, count_mode="token") -> Tuple[go.Figure, RawData]:
20
21
  """
21
22
  Analyzes and visualizes the frequency distribution of punctuation usage in a given text dataset.
22
23
 
@@ -3,6 +3,8 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
 
6
+ from typing import Tuple
7
+
6
8
  import matplotlib.pyplot as plt
7
9
  import nltk
8
10
  import seaborn as sns
@@ -13,7 +15,7 @@ from validmind import RawData, tags, tasks
13
15
 
14
16
  @tags("nlp", "text_data", "data_validation")
15
17
  @tasks("nlp")
16
- def Sentiment(dataset):
18
+ def Sentiment(dataset) -> Tuple[plt.Figure, RawData]:
17
19
  """
18
20
  Analyzes the sentiment of text data within a dataset using the VADER sentiment analysis tool.
19
21
 
@@ -7,6 +7,7 @@ Threshold based tests
7
7
  """
8
8
 
9
9
  from collections import defaultdict
10
+ from typing import Dict, Tuple
10
11
 
11
12
  import nltk
12
13
  import pandas as pd
@@ -21,7 +22,7 @@ from validmind.vm_models import VMDataset
21
22
  @tasks("text_classification", "text_summarization")
22
23
  def StopWords(
23
24
  dataset: VMDataset, min_percent_threshold: float = 0.5, num_words: int = 25
24
- ):
25
+ ) -> Tuple[Dict[str, pd.DataFrame], go.Figure, bool, RawData]:
25
26
  """
26
27
  Evaluates and visualizes the frequency of English stop words in a text dataset against a defined threshold.
27
28
 
@@ -3,10 +3,12 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
  import string
6
+ from typing import Tuple
6
7
 
7
8
  import nltk
8
9
  import pandas as pd
9
10
  import plotly.express as px
11
+ import plotly.graph_objects as go
10
12
  from nltk.corpus import stopwords
11
13
 
12
14
  from validmind import RawData, tags, tasks
@@ -94,7 +96,7 @@ def TextDescription(
94
96
  "``",
95
97
  },
96
98
  lang: str = "english",
97
- ):
99
+ ) -> Tuple[go.Figure, RawData]:
98
100
  """
99
101
  Conducts comprehensive textual analysis on a dataset using NLTK to evaluate various parameters and generate
100
102
  visualizations.
@@ -2,6 +2,8 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import evaluate
6
8
  import matplotlib.pyplot as plt
7
9
  import seaborn as sns
@@ -11,7 +13,7 @@ from validmind import RawData, tags, tasks
11
13
 
12
14
  @tags("nlp", "text_data", "data_validation")
13
15
  @tasks("nlp")
14
- def Toxicity(dataset):
16
+ def Toxicity(dataset) -> Tuple[plt.Figure, RawData]:
15
17
  """
16
18
  Assesses the toxicity of text data within a dataset to visualize the distribution of toxicity scores.
17
19
 
validmind/tests/load.py CHANGED
@@ -7,7 +7,17 @@
7
7
  import inspect
8
8
  import json
9
9
  from pprint import pformat
10
- from typing import Any, Callable, Dict, List, Optional, Tuple, Union
10
+ from typing import (
11
+ Any,
12
+ Callable,
13
+ Dict,
14
+ List,
15
+ Optional,
16
+ Tuple,
17
+ Union,
18
+ get_args,
19
+ get_origin,
20
+ )
11
21
  from uuid import uuid4
12
22
 
13
23
  import pandas as pd
@@ -18,12 +28,31 @@ from ..html_templates.content_blocks import test_content_block_html
18
28
  from ..logging import get_logger
19
29
  from ..utils import display, format_dataframe, fuzzy_match, md_to_html, test_id_to_name
20
30
  from ..vm_models import VMDataset, VMModel
31
+ from ..vm_models.figure import Figure
32
+ from ..vm_models.result import ResultTable
21
33
  from .__types__ import TestID
22
34
  from ._store import test_provider_store, test_store
23
35
 
24
36
  logger = get_logger(__name__)
25
37
 
26
38
 
39
+ try:
40
+ from matplotlib.figure import Figure as MatplotlibFigure
41
+ except ImportError:
42
+ MatplotlibFigure = None
43
+
44
+ try:
45
+ from plotly.graph_objects import Figure as PlotlyFigure
46
+ except ImportError:
47
+ PlotlyFigure = None
48
+
49
+ FIGURE_TYPES = tuple(
50
+ item for item in (Figure, MatplotlibFigure, PlotlyFigure) if inspect.isclass(item)
51
+ )
52
+ TABLE_TYPES = (pd.DataFrame, ResultTable)
53
+ GENERIC_TABLE_TYPES = (list, dict)
54
+
55
+
27
56
  INPUT_TYPE_MAP = {
28
57
  "dataset": VMDataset,
29
58
  "datasets": List[VMDataset],
@@ -32,6 +61,45 @@ INPUT_TYPE_MAP = {
32
61
  }
33
62
 
34
63
 
64
+ def _inspect_return_type(annotation: Any) -> Tuple[bool, bool]:
65
+ """
66
+ Inspects a return type annotation to determine if it contains a Figure or Table.
67
+
68
+ Returns a tuple (has_figure, has_table).
69
+ """
70
+ has_figure = False
71
+ has_table = False
72
+
73
+ origin = get_origin(annotation)
74
+ args = get_args(annotation)
75
+
76
+ # A Union means the return type could be one of several types.
77
+ # A tuple in a type hint means multiple return values.
78
+ # We recursively inspect the arguments of Union and tuple.
79
+ if origin is Union or origin is tuple:
80
+ for arg in args:
81
+ fig, table = _inspect_return_type(arg)
82
+ has_figure |= fig
83
+ has_table |= table
84
+ return has_figure, has_table
85
+
86
+ check_type = origin if origin is not None else annotation
87
+
88
+ if not inspect.isclass(check_type):
89
+ return has_figure, has_table # Can't do issubclass on non-class like Any
90
+
91
+ if FIGURE_TYPES and issubclass(check_type, FIGURE_TYPES):
92
+ has_figure = True
93
+
94
+ if TABLE_TYPES and issubclass(check_type, TABLE_TYPES):
95
+ has_table = True
96
+
97
+ if check_type in GENERIC_TABLE_TYPES:
98
+ has_table = True
99
+
100
+ return has_figure, has_table
101
+
102
+
35
103
  def _inspect_signature(
36
104
  test_func: Callable[..., Any],
37
105
  ) -> Tuple[Dict[str, Dict[str, Any]], Dict[str, Dict[str, Any]]]:
@@ -173,23 +241,29 @@ def _pretty_list_tests(
173
241
  tests: Dict[str, Callable[..., Any]], truncate: bool = True
174
242
  ) -> None:
175
243
  """Pretty print a list of tests"""
176
- table = [
177
- {
178
- "ID": test_id,
179
- "Name": test_id_to_name(test_id),
180
- "Description": _test_description(
181
- inspect.getdoc(test),
182
- num_lines=(5 if truncate else 999999),
183
- ),
184
- "Required Inputs": list(test.inputs.keys()),
185
- "Params": test.params,
186
- "Tags": test.__tags__,
187
- "Tasks": test.__tasks__,
188
- }
189
- for test_id, test in tests.items()
190
- ]
244
+ rows = []
245
+ for test_id, test in tests.items():
246
+ has_figure, has_table = _inspect_return_type(
247
+ inspect.signature(test).return_annotation
248
+ )
249
+ rows.append(
250
+ {
251
+ "ID": test_id,
252
+ "Name": test_id_to_name(test_id),
253
+ "Description": _test_description(
254
+ inspect.getdoc(test),
255
+ num_lines=(5 if truncate else 999999),
256
+ ),
257
+ "Has Figure": has_figure,
258
+ "Has Table": has_table,
259
+ "Required Inputs": list(test.inputs.keys()),
260
+ "Params": test.params,
261
+ "Tags": test.__tags__,
262
+ "Tasks": test.__tasks__,
263
+ }
264
+ )
191
265
 
192
- return format_dataframe(pd.DataFrame(table))
266
+ return format_dataframe(pd.DataFrame(rows))
193
267
 
194
268
 
195
269
  def list_tags() -> List[str]:
@@ -2,21 +2,24 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import evaluate
6
8
  import pandas as pd
7
9
  import plotly.graph_objects as go
8
10
 
9
11
  from validmind import RawData, tags, tasks
10
12
  from validmind.tests.utils import validate_prediction
13
+ from validmind.vm_models import VMDataset, VMModel
11
14
 
12
15
 
13
16
  @tags("nlp", "text_data", "visualization")
14
17
  @tasks("text_classification", "text_summarization")
15
18
  def BertScore(
16
- dataset,
17
- model,
19
+ dataset: VMDataset,
20
+ model: VMModel,
18
21
  evaluation_model="distilbert-base-uncased",
19
- ):
22
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
20
23
  """
21
24
  Assesses the quality of machine-generated text using BERTScore metrics and visualizes results through histograms
22
25
  and bar charts, alongside compiling a comprehensive table of descriptive statistics.
@@ -2,17 +2,22 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import evaluate
6
8
  import pandas as pd
7
9
  import plotly.graph_objects as go
8
10
 
9
11
  from validmind import RawData, tags, tasks
10
12
  from validmind.tests.utils import validate_prediction
13
+ from validmind.vm_models import VMDataset, VMModel
11
14
 
12
15
 
13
16
  @tags("nlp", "text_data", "visualization")
14
17
  @tasks("text_classification", "text_summarization")
15
- def BleuScore(dataset, model):
18
+ def BleuScore(
19
+ dataset: VMDataset, model: VMModel
20
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
16
21
  """
17
22
  Evaluates the quality of machine-generated text using BLEU metrics and visualizes the results through histograms
18
23
  and bar charts, alongside compiling a comprehensive table of descriptive statistics for BLEU scores.
@@ -2,6 +2,8 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import pandas as pd
6
8
  import plotly.graph_objects as go
7
9
 
@@ -11,7 +13,9 @@ from validmind.vm_models import VMDataset, VMModel
11
13
 
12
14
  @tags("sklearn", "model_performance")
13
15
  @tasks("clustering")
14
- def ClusterSizeDistribution(dataset: VMDataset, model: VMModel):
16
+ def ClusterSizeDistribution(
17
+ dataset: VMDataset, model: VMModel
18
+ ) -> Tuple[go.Figure, RawData]:
15
19
  """
16
20
  Assesses the performance of clustering models by comparing the distribution of cluster sizes in model predictions
17
21
  with the actual data.
@@ -2,17 +2,22 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import nltk
6
8
  import pandas as pd
7
9
  import plotly.graph_objects as go
8
10
 
9
11
  from validmind import RawData, tags, tasks
10
12
  from validmind.tests.utils import validate_prediction
13
+ from validmind.vm_models import VMDataset, VMModel
11
14
 
12
15
 
13
16
  @tags("nlp", "text_data", "visualization")
14
17
  @tasks("text_classification", "text_summarization")
15
- def ContextualRecall(dataset, model):
18
+ def ContextualRecall(
19
+ dataset: VMDataset, model: VMModel
20
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
16
21
  """
17
22
  Evaluates a Natural Language Generation model's ability to generate contextually relevant and factually correct
18
23
  text, visualizing the results through histograms and bar charts, alongside compiling a comprehensive table of
@@ -2,6 +2,8 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import numpy as np
6
8
  import pandas as pd
7
9
  import plotly.graph_objects as go
@@ -17,7 +19,9 @@ logger = get_logger(__name__)
17
19
 
18
20
  @tags("feature_importance", "AUC", "visualization")
19
21
  @tasks("classification")
20
- def FeaturesAUC(dataset: VMDataset, fontsize: int = 12, figure_height: int = 500):
22
+ def FeaturesAUC(
23
+ dataset: VMDataset, fontsize: int = 12, figure_height: int = 500
24
+ ) -> Tuple[go.Figure, RawData]:
21
25
  """
22
26
  Evaluates the discriminatory power of each individual feature within a binary classification model by calculating
23
27
  the Area Under the Curve (AUC) for each feature separately.
@@ -2,17 +2,22 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import evaluate
6
8
  import pandas as pd
7
9
  import plotly.graph_objects as go
8
10
 
9
11
  from validmind import RawData, tags, tasks
10
12
  from validmind.tests.utils import validate_prediction
13
+ from validmind.vm_models import VMDataset, VMModel
11
14
 
12
15
 
13
16
  @tags("nlp", "text_data", "visualization")
14
17
  @tasks("text_classification", "text_summarization")
15
- def MeteorScore(dataset, model):
18
+ def MeteorScore(
19
+ dataset: VMDataset, model: VMModel
20
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
16
21
  """
17
22
  Assesses the quality of machine-generated translations by comparing them to human-produced references using the
18
23
  METEOR score, which evaluates precision, recall, and word order.
@@ -6,11 +6,12 @@ import pandas as pd
6
6
 
7
7
  from validmind import tags, tasks
8
8
  from validmind.utils import get_model_info
9
+ from validmind.vm_models import VMModel
9
10
 
10
11
 
11
12
  @tags("model_training", "metadata")
12
13
  @tasks("regression", "time_series_forecasting")
13
- def ModelMetadata(model):
14
+ def ModelMetadata(model: VMModel) -> pd.DataFrame:
14
15
  """
15
16
  Compare metadata of different models and generate a summary table with the results.
16
17
 
@@ -2,18 +2,26 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Optional, Tuple
6
+
5
7
  import pandas as pd
6
8
  import plotly.graph_objects as go
7
9
  from scipy.stats import kstest
8
10
 
9
11
  from validmind import RawData, tags, tasks
12
+ from validmind.vm_models import VMDataset, VMModel
10
13
 
11
14
 
12
15
  @tags("regression")
13
16
  @tasks("residual_analysis", "visualization")
14
17
  def ModelPredictionResiduals(
15
- dataset, model, nbins=100, p_value_threshold=0.05, start_date=None, end_date=None
16
- ):
18
+ dataset: VMDataset,
19
+ model: VMModel,
20
+ nbins: int = 100,
21
+ p_value_threshold: float = 0.05,
22
+ start_date: Optional[str] = None,
23
+ end_date: Optional[str] = None,
24
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
17
25
  """
18
26
  Assesses normality and behavior of residuals in regression models through visualization and statistical tests.
19
27
 
@@ -2,17 +2,23 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import evaluate
6
8
  import pandas as pd
7
9
  import plotly.graph_objects as go
8
10
 
9
11
  from validmind import RawData, tags, tasks
10
12
  from validmind.tests.utils import validate_prediction
13
+ from validmind.vm_models import VMDataset, VMModel
11
14
 
12
15
 
13
16
  @tags("nlp", "text_data", "visualization")
14
17
  @tasks("text_classification", "text_summarization")
15
- def RegardScore(dataset, model):
18
+ def RegardScore(
19
+ dataset: VMDataset,
20
+ model: VMModel,
21
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
16
22
  """
17
23
  Assesses the sentiment and potential biases in text generated by NLP models by computing and visualizing regard
18
24
  scores.
@@ -2,6 +2,8 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import numpy as np
6
8
  import plotly.figure_factory as ff
7
9
  import plotly.graph_objects as go
@@ -12,7 +14,9 @@ from validmind.vm_models import VMDataset, VMModel
12
14
 
13
15
  @tags("model_performance", "visualization")
14
16
  @tasks("regression")
15
- def RegressionResidualsPlot(model: VMModel, dataset: VMDataset, bin_size: float = 0.1):
17
+ def RegressionResidualsPlot(
18
+ model: VMModel, dataset: VMDataset, bin_size: float = 0.1
19
+ ) -> Tuple[go.Figure, go.Figure, RawData]:
16
20
  """
17
21
  Evaluates regression model performance using residual distribution and actual vs. predicted plots.
18
22
 
@@ -2,16 +2,23 @@
2
2
  # See the LICENSE file in the root of this repository for details.
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
+ from typing import Tuple
6
+
5
7
  import pandas as pd
6
8
  import plotly.graph_objects as go
7
9
  from rouge import Rouge
8
10
 
9
11
  from validmind import RawData, tags, tasks
12
+ from validmind.vm_models import VMDataset, VMModel
10
13
 
11
14
 
12
15
  @tags("nlp", "text_data", "visualization")
13
16
  @tasks("text_classification", "text_summarization")
14
- def RougeScore(dataset, model, metric="rouge-1"):
17
+ def RougeScore(
18
+ dataset: VMDataset,
19
+ model: VMModel,
20
+ metric: str = "rouge-1",
21
+ ) -> Tuple[pd.DataFrame, go.Figure, RawData]:
15
22
  """
16
23
  Assesses the quality of machine-generated text using ROUGE metrics and visualizes the results to provide
17
24
  comprehensive performance insights.