validmind 2.13.6__tar.gz → 2.13.8__tar.gz

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 (379) hide show
  1. {validmind-2.13.6 → validmind-2.13.8}/PKG-INFO +1 -1
  2. {validmind-2.13.6 → validmind-2.13.8}/pyproject.toml +1 -1
  3. validmind-2.13.8/validmind/__version__.py +1 -0
  4. {validmind-2.13.6 → validmind-2.13.8}/validmind/api_client.py +2 -2
  5. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +10 -0
  6. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +10 -5
  7. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +41 -1
  8. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +146 -23
  9. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +95 -9
  10. validmind-2.13.8/validmind/tests/model_validation/sklearn/ROCCurve.py +204 -0
  11. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +43 -3
  12. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +40 -19
  13. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +9 -0
  14. validmind-2.13.8/validmind/tests/model_validation/sklearn/_diagnosis_metrics.py +126 -0
  15. validmind-2.13.8/validmind/tests/model_validation/sklearn/_multiclass_proba.py +150 -0
  16. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/GINITable.py +67 -2
  17. validmind-2.13.6/validmind/__version__.py +0 -1
  18. validmind-2.13.6/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -112
  19. {validmind-2.13.6 → validmind-2.13.8}/.gitignore +0 -0
  20. {validmind-2.13.6 → validmind-2.13.8}/LICENSE +0 -0
  21. {validmind-2.13.6 → validmind-2.13.8}/README.pypi.md +0 -0
  22. {validmind-2.13.6 → validmind-2.13.8}/validmind/__init__.py +0 -0
  23. {validmind-2.13.6 → validmind-2.13.8}/validmind/ai/test_descriptions.py +0 -0
  24. {validmind-2.13.6 → validmind-2.13.8}/validmind/ai/utils.py +0 -0
  25. {validmind-2.13.6 → validmind-2.13.8}/validmind/client.py +0 -0
  26. {validmind-2.13.6 → validmind-2.13.8}/validmind/client_config.py +0 -0
  27. {validmind-2.13.6 → validmind-2.13.8}/validmind/credentials_store.py +0 -0
  28. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/__init__.py +0 -0
  29. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/classification/__init__.py +0 -0
  30. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/classification/config.json +0 -0
  31. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/classification/customer_churn.py +0 -0
  32. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
  33. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
  34. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/classification/taiwan_credit.py +0 -0
  35. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/cluster/digits.py +0 -0
  36. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/credit_risk/__init__.py +0 -0
  37. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
  38. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
  39. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/credit_risk/lending_club.py +0 -0
  40. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
  41. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/__init__.py +0 -0
  42. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/agent_dataset.py +0 -0
  43. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/__init__.py +0 -0
  44. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
  45. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
  46. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
  47. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
  48. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
  49. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/llm/rag/rfp.py +0 -0
  50. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/__init__.py +0 -0
  51. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
  52. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
  53. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
  54. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
  55. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
  56. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
  57. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/__init__.py +0 -0
  58. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/california_housing.py +0 -0
  59. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/california_housing.csv +0 -0
  60. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
  61. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
  62. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
  63. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
  64. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
  65. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
  66. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
  67. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
  68. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
  69. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
  70. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
  71. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
  72. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
  73. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
  74. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
  75. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
  76. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
  77. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
  78. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/fred.py +0 -0
  79. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/fred_timeseries.py +0 -0
  80. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/generate_california_housing_csv.py +0 -0
  81. {validmind-2.13.6 → validmind-2.13.8}/validmind/datasets/regression/lending_club.py +0 -0
  82. {validmind-2.13.6 → validmind-2.13.8}/validmind/errors.py +0 -0
  83. {validmind-2.13.6 → validmind-2.13.8}/validmind/experimental/__init__.py +0 -0
  84. {validmind-2.13.6 → validmind-2.13.8}/validmind/experimental/agents.py +0 -0
  85. {validmind-2.13.6 → validmind-2.13.8}/validmind/html_templates/__init__.py +0 -0
  86. {validmind-2.13.6 → validmind-2.13.8}/validmind/html_templates/content_blocks.py +0 -0
  87. {validmind-2.13.6 → validmind-2.13.8}/validmind/input_registry.py +0 -0
  88. {validmind-2.13.6 → validmind-2.13.8}/validmind/logging.py +0 -0
  89. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/__init__.py +0 -0
  90. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/foundation.py +0 -0
  91. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/function.py +0 -0
  92. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/huggingface.py +0 -0
  93. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/metadata.py +0 -0
  94. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/pipeline.py +0 -0
  95. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/pytorch.py +0 -0
  96. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/r_model.py +0 -0
  97. {validmind-2.13.6 → validmind-2.13.8}/validmind/models/sklearn.py +0 -0
  98. {validmind-2.13.6 → validmind-2.13.8}/validmind/oidc_device.py +0 -0
  99. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/__init__.py +0 -0
  100. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/AbsoluteError.py +0 -0
  101. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/BrierScore.py +0 -0
  102. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/CalibrationError.py +0 -0
  103. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/ClassBalance.py +0 -0
  104. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/Confidence.py +0 -0
  105. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/Correctness.py +0 -0
  106. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/LogLoss.py +0 -0
  107. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/OutlierScore.py +0 -0
  108. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/ProbabilityError.py +0 -0
  109. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/Uncertainty.py +0 -0
  110. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/classification/__init__.py +0 -0
  111. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/AnswerRelevancy.py +0 -0
  112. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/ArgumentCorrectness.py +0 -0
  113. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/Bias.py +0 -0
  114. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/ContextualPrecision.py +0 -0
  115. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/ContextualRecall.py +0 -0
  116. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/ContextualRelevancy.py +0 -0
  117. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/Faithfulness.py +0 -0
  118. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/GEval.py +0 -0
  119. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/Hallucination.py +0 -0
  120. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/PlanAdherence.py +0 -0
  121. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/PlanQuality.py +0 -0
  122. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/Summarization.py +0 -0
  123. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/TaskCompletion.py +0 -0
  124. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/ToolCorrectness.py +0 -0
  125. {validmind-2.13.6 → validmind-2.13.8}/validmind/scorers/llm/deepeval/__init__.py +0 -0
  126. {validmind-2.13.6 → validmind-2.13.8}/validmind/template.py +0 -0
  127. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/__init__.py +0 -0
  128. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/classifier.py +0 -0
  129. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/cluster.py +0 -0
  130. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/embeddings.py +0 -0
  131. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/llm.py +0 -0
  132. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/nlp.py +0 -0
  133. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/parameters_optimization.py +0 -0
  134. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/regression.py +0 -0
  135. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/statsmodels_timeseries.py +0 -0
  136. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/summarization.py +0 -0
  137. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/tabular_datasets.py +0 -0
  138. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/text_data.py +0 -0
  139. {validmind-2.13.6 → validmind-2.13.8}/validmind/test_suites/time_series.py +0 -0
  140. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/__init__.py +0 -0
  141. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/__types__.py +0 -0
  142. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/_store.py +0 -0
  143. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/comparison.py +0 -0
  144. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
  145. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ADF.py +0 -0
  146. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/AutoAR.py +0 -0
  147. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/AutoMA.py +0 -0
  148. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/AutoStationarity.py +0 -0
  149. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
  150. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/BoxPierce.py +0 -0
  151. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
  152. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ClassImbalance.py +0 -0
  153. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/DatasetDescription.py +0 -0
  154. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/DatasetSplit.py +0 -0
  155. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
  156. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
  157. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/Duplicates.py +0 -0
  158. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
  159. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
  160. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/HighCardinality.py +0 -0
  161. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
  162. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -0
  163. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/IQROutliersTable.py +0 -0
  164. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
  165. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/JarqueBera.py +0 -0
  166. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/KPSS.py +0 -0
  167. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/LJungBox.py +0 -0
  168. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
  169. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/MissingValues.py +0 -0
  170. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
  171. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/MutualInformation.py +0 -0
  172. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
  173. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
  174. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
  175. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
  176. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
  177. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
  178. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
  179. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/RunsTest.py +0 -0
  180. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ScatterPlot.py +0 -0
  181. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ScoreBandDefaultRates.py +0 -0
  182. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
  183. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
  184. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/Skewness.py +0 -0
  185. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/SpreadPlot.py +0 -0
  186. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
  187. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
  188. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
  189. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
  190. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
  191. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
  192. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
  193. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
  194. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
  195. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
  196. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
  197. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
  198. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
  199. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/UniqueRows.py +0 -0
  200. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
  201. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/WOEBinTable.py +0 -0
  202. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
  203. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/__init__.py +0 -0
  204. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
  205. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
  206. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
  207. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
  208. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
  209. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
  210. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
  211. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
  212. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
  213. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
  214. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/data_validation/nlp/__init__.py +0 -0
  215. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/decorator.py +0 -0
  216. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/load.py +0 -0
  217. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/BertScore.py +0 -0
  218. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/BleuScore.py +0 -0
  219. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
  220. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ContextualRecall.py +0 -0
  221. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
  222. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/MeteorScore.py +0 -0
  223. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ModelMetadata.py +0 -0
  224. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
  225. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/RegardScore.py +0 -0
  226. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
  227. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/RougeScore.py +0 -0
  228. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
  229. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
  230. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
  231. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/TokenDisparity.py +0 -0
  232. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ToxicityScore.py +0 -0
  233. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/__init__.py +0 -0
  234. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
  235. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
  236. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
  237. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
  238. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
  239. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
  240. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
  241. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
  242. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
  243. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
  244. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
  245. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
  246. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
  247. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
  248. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/embeddings/utils.py +0 -0
  249. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
  250. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
  251. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
  252. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
  253. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +0 -0
  254. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
  255. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
  256. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
  257. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +0 -0
  258. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +0 -0
  259. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/ragas/utils.py +0 -0
  260. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
  261. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
  262. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
  263. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +0 -0
  264. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
  265. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
  266. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
  267. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
  268. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
  269. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
  270. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
  271. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
  272. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
  273. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +0 -0
  274. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
  275. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
  276. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
  277. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
  278. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
  279. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
  280. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
  281. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
  282. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
  283. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
  284. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
  285. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
  286. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
  287. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
  288. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
  289. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +0 -0
  290. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
  291. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
  292. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
  293. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +0 -0
  294. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
  295. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
  296. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
  297. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
  298. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
  299. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
  300. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
  301. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +0 -0
  302. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
  303. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
  304. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +0 -0
  305. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
  306. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
  307. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
  308. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
  309. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
  310. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
  311. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
  312. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
  313. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +0 -0
  314. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
  315. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
  316. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +0 -0
  317. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +0 -0
  318. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
  319. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/output.py +0 -0
  320. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/plots/BoxPlot.py +0 -0
  321. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/plots/CorrelationHeatmap.py +0 -0
  322. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/plots/HistogramPlot.py +0 -0
  323. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/plots/ViolinPlot.py +0 -0
  324. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/plots/__init__.py +0 -0
  325. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/Bias.py +0 -0
  326. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/Clarity.py +0 -0
  327. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/Conciseness.py +0 -0
  328. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/Delimitation.py +0 -0
  329. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
  330. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/Robustness.py +0 -0
  331. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/Specificity.py +0 -0
  332. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/__init__.py +0 -0
  333. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
  334. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/run.py +0 -0
  335. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/stats/CorrelationAnalysis.py +0 -0
  336. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/stats/DescriptiveStats.py +0 -0
  337. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/stats/NormalityTests.py +0 -0
  338. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/stats/OutlierDetection.py +0 -0
  339. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/stats/__init__.py +0 -0
  340. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/test_providers.py +0 -0
  341. {validmind-2.13.6 → validmind-2.13.8}/validmind/tests/utils.py +0 -0
  342. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/__init__.py +0 -0
  343. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/classification/Accuracy.py +0 -0
  344. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/classification/F1.py +0 -0
  345. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/classification/Precision.py +0 -0
  346. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
  347. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/classification/Recall.py +0 -0
  348. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
  349. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
  350. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
  351. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
  352. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
  353. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
  354. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
  355. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
  356. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
  357. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
  358. {validmind-2.13.6 → validmind-2.13.8}/validmind/unit_metrics/regression/RootMeanSquaredError.py +0 -0
  359. {validmind-2.13.6 → validmind-2.13.8}/validmind/utils.py +0 -0
  360. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/__init__.py +0 -0
  361. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/dataset/__init__.py +0 -0
  362. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/dataset/dataset.py +0 -0
  363. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/dataset/utils.py +0 -0
  364. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/figure.py +0 -0
  365. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/html_progress.py +0 -0
  366. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/html_renderer.py +0 -0
  367. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/input.py +0 -0
  368. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/model.py +0 -0
  369. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/result/__init__.py +0 -0
  370. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/result/pii_filter.py +0 -0
  371. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/result/result.jinja +0 -0
  372. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/result/result.py +0 -0
  373. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/result/utils.py +0 -0
  374. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/test_suite/__init__.py +0 -0
  375. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/test_suite/runner.py +0 -0
  376. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/test_suite/summary.py +0 -0
  377. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/test_suite/test.py +0 -0
  378. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/test_suite/test_suite.py +0 -0
  379. {validmind-2.13.6 → validmind-2.13.8}/validmind/vm_models/text_generation_summary.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: validmind
3
- Version: 2.13.6
3
+ Version: 2.13.8
4
4
  Summary: ValidMind Library
5
5
  Author-email: Andres Rodriguez <andres@validmind.ai>, Juan Martinez <juan@validmind.ai>, Anil Sorathiya <anil@validmind.ai>, Luis Pallares <luis@validmind.ai>, John Walz <john@validmind.ai>
6
6
  License: DUAL LICENSE NOTICE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "validmind"
3
- version = "2.13.6"
3
+ version = "2.13.8"
4
4
  description = "ValidMind Library"
5
5
  readme = "README.pypi.md"
6
6
  requires-python = ">=3.9,<3.15"
@@ -0,0 +1 @@
1
+ __version__ = "2.13.8"
@@ -317,7 +317,7 @@ def init(
317
317
  Can be set via env ``VM_OIDC_ISSUER``.
318
318
  client_id (str, optional): OAuth public client id for device flow. Can be
319
319
  set via env ``VM_OIDC_CLIENT_ID``.
320
- scope (str, optional): OAuth scopes (default ``openid profile email``).
320
+ scope (str, optional): OAuth scopes (default ``openid profile email offline_access``).
321
321
  Can be set via env ``VM_OIDC_SCOPE``.
322
322
  audience (str, optional): Resource / API identifier for the access token
323
323
  (e.g. Auth0 API Identifier). Use the same value the ValidMind backend
@@ -392,7 +392,7 @@ def init(
392
392
  _api_key = None
393
393
  _api_secret = None
394
394
  _api_host = resolved_host
395
- scope_val = oidc_scope or "openid profile email"
395
+ scope_val = oidc_scope or "openid profile email offline_access"
396
396
  from .credentials_store import normalize_audience
397
397
 
398
398
  oidc_audience_val = normalize_audience(
@@ -4,10 +4,12 @@
4
4
 
5
5
  from typing import Tuple
6
6
 
7
+ import numpy as np
7
8
  import plotly.graph_objects as go
8
9
  from sklearn.calibration import calibration_curve
9
10
 
10
11
  from validmind import tags, tasks
12
+ from validmind.errors import SkipTestError
11
13
  from validmind.vm_models import VMDataset, VMModel
12
14
  from validmind.vm_models.result import RawData
13
15
 
@@ -70,6 +72,14 @@ def CalibrationCurve(
70
72
  - Assumes bin boundaries are appropriate for the problem
71
73
  - May be affected by class imbalance
72
74
  """
75
+ # Binary-only by design: sklearn's calibration_curve raises a cryptic
76
+ # "pos_label is not specified" error on multiclass targets, so skip cleanly
77
+ # like ROCCurve/PrecisionRecallCurve rather than crashing.
78
+ if len(np.unique(dataset.y)) > 2:
79
+ raise SkipTestError(
80
+ "Calibration Curve is only supported for binary classification models"
81
+ )
82
+
73
83
  prob_true, prob_pred = calibration_curve(
74
84
  dataset.y, dataset.y_prob(model), n_bins=n_bins
75
85
  )
@@ -72,15 +72,20 @@ def ConfusionMatrix(
72
72
  - It mainly serves as a descriptive tool and does not offer the capability for statistical hypothesis testing.
73
73
  - Risks of misinterpretation exist because the matrix doesn't directly provide precision, recall, or F1-score data.
74
74
  These metrics have to be computed separately.
75
+ - The `threshold` parameter only applies to binary classification (it splits a single positive-class probability
76
+ into two classes). For multiclass targets the model's argmax class predictions are used and `threshold` is ignored.
75
77
  """
76
- # Get predictions using threshold for binary classification if possible
77
- if hasattr(model.model, "predict_proba"):
78
+ # The `threshold` only has a meaning for binary classification (it splits a
79
+ # single positive-class probability into two classes). For multiclass we use
80
+ # the model's argmax class predictions directly, since thresholding a
81
+ # single probability column would silently produce wrong labels.
82
+ n_classes = len(np.unique(dataset.y))
83
+ if n_classes == 2 and hasattr(model.model, "predict_proba"):
78
84
  y_prob = dataset.y_prob(model)
79
85
  # Handle both 1D and 2D probability arrays
80
86
  if y_prob.ndim == 2:
81
- y_pred = (y_prob[:, 1] > threshold).astype(int)
82
- else:
83
- y_pred = (y_prob > threshold).astype(int)
87
+ y_prob = y_prob[:, 1]
88
+ y_pred = (y_prob > threshold).astype(int)
84
89
  else:
85
90
  y_pred = dataset.y_pred(model)
86
91
 
@@ -15,6 +15,8 @@ from validmind import RawData, tags, tasks
15
15
  from validmind.logging import get_logger
16
16
  from validmind.vm_models import VMDataset, VMModel
17
17
 
18
+ from ._diagnosis_metrics import bind_averaging, full_labels, multiclass_auc
19
+
18
20
  logger = get_logger(__name__)
19
21
 
20
22
  # TODO: A couple of improvements here could be to:
@@ -96,6 +98,10 @@ def _compute_metrics(
96
98
  feature_column: str,
97
99
  metric: str,
98
100
  is_classification: bool,
101
+ average: str = None,
102
+ pos_label=None,
103
+ labels: list = None,
104
+ is_multiclass: bool = False,
99
105
  ) -> None:
100
106
  results["slice"].append(str(region))
101
107
  results["shape"].append(df_region.shape[0])
@@ -115,11 +121,25 @@ def _compute_metrics(
115
121
  if len(np.unique(y_true)) == 1:
116
122
  return results[metric].append(0)
117
123
 
124
+ # The library retains only a single probability column, so a
125
+ # probability-based multiclass ROC AUC is not possible; fall back to the
126
+ # label-binarize convention used elsewhere for multiclass targets.
127
+ if is_multiclass:
128
+ return results[metric].append(
129
+ multiclass_auc(y_true, df_region[pred_column].values, labels)
130
+ )
131
+
118
132
  return results[metric].append(
119
133
  metric_func(y_true, df_region[prob_column].values)
120
134
  )
121
135
 
122
- return results[metric].append(metric_func(y_true, df_region[pred_column].values))
136
+ # Bind averaging so precision/recall/F1 handle multiclass targets and binary
137
+ # targets encoded outside {0, 1}; accuracy and regression metrics pass through.
138
+ return results[metric].append(
139
+ bind_averaging(metric_func, average, pos_label)(
140
+ y_true, df_region[pred_column].values
141
+ )
142
+ )
123
143
 
124
144
 
125
145
  def _plot_overfit_regions(
@@ -253,6 +273,18 @@ def OverfitDiagnosis(
253
273
  train_df[prob_column] = datasets[0].y_prob(model)
254
274
  test_df[prob_column] = datasets[1].y_prob(model)
255
275
 
276
+ # Resolve the label space once so every feature slice is scored consistently:
277
+ # multiclass targets use macro averaging (and label-binarize AUC), binary
278
+ # targets keep the positive label so non-{0, 1} encodings don't break.
279
+ if is_classification:
280
+ labels = full_labels(datasets, model)
281
+ is_multiclass = len(labels) > 2
282
+ average, pos_label = (
283
+ ("macro", None) if is_multiclass else ("binary", labels[-1])
284
+ )
285
+ else:
286
+ labels, is_multiclass, average, pos_label = None, False, None, None
287
+
256
288
  test_results = []
257
289
  figures = []
258
290
  results_headers = ["slice", "shape", "feature", metric]
@@ -277,6 +309,10 @@ def OverfitDiagnosis(
277
309
  pred_column=pred_column,
278
310
  metric=metric,
279
311
  is_classification=is_classification,
312
+ average=average,
313
+ pos_label=pos_label,
314
+ labels=labels,
315
+ is_multiclass=is_multiclass,
280
316
  )
281
317
  df_test_region = test_df[
282
318
  (test_df[feature_column] > region.left)
@@ -292,6 +328,10 @@ def OverfitDiagnosis(
292
328
  pred_column=pred_column,
293
329
  metric=metric,
294
330
  is_classification=is_classification,
331
+ average=average,
332
+ pos_label=pos_label,
333
+ labels=labels,
334
+ is_multiclass=is_multiclass,
295
335
  )
296
336
 
297
337
  results = _prepare_results(results_train, results_test, metric)
@@ -7,14 +7,19 @@ from typing import Dict, List, Tuple
7
7
  import numpy as np
8
8
  import pandas as pd
9
9
  import plotly.graph_objects as go
10
+ from plotly.subplots import make_subplots
10
11
 
11
12
  from validmind import RawData, tags, tasks
12
13
  from validmind.errors import SkipTestError
13
14
  from validmind.logging import get_logger
14
15
  from validmind.vm_models import VMDataset, VMModel
15
16
 
17
+ from ._multiclass_proba import multiclass_proba, proba_matrix
18
+
16
19
  logger = get_logger(__name__)
17
20
 
21
+ _PSI_PALETTE = ["#DE257E", "#1F77B4", "#2CA02C", "#FF7F0E", "#9467BD", "#8C564B"]
22
+
18
23
 
19
24
  def calculate_psi(score_initial, score_new, num_bins=10, mode="fixed"):
20
25
  """
@@ -76,6 +81,135 @@ def calculate_psi(score_initial, score_new, num_bins=10, mode="fixed"):
76
81
  return psi_df.to_dict(orient="records")
77
82
 
78
83
 
84
+ def _psi_table_rows(psi_results):
85
+ """Append the summed 'Total' row and format PSI records as table rows."""
86
+ total_psi = {
87
+ key: sum(d.get(key, 0) for d in psi_results)
88
+ for key in psi_results[0].keys()
89
+ if isinstance(psi_results[0][key], (int, float))
90
+ }
91
+ rows_with_total = psi_results + [total_psi]
92
+
93
+ table_rows = [
94
+ {
95
+ "Bin": (
96
+ i if i < (len(rows_with_total) - 1) else "Total"
97
+ ), # The last bin is the "Total" bin
98
+ "Count Initial": values["initial"],
99
+ "Percent Initial (%)": values["percent_initial"] * 100,
100
+ "Count New": values["new"],
101
+ "Percent New (%)": values["percent_new"] * 100,
102
+ "PSI": values["psi"],
103
+ }
104
+ for i, values in enumerate(rows_with_total)
105
+ ]
106
+ return rows_with_total, table_rows
107
+
108
+
109
+ def _multiclass_psi(datasets, model, num_bins, mode):
110
+ """One-vs-rest PSI for a multiclass model.
111
+
112
+ PSI needs a 1-D score distribution to compare across the two datasets. The
113
+ stored single probability column cannot represent every class, so the shared
114
+ helper reaches the underlying estimator for the full per-class probability
115
+ matrix (mirroring the ROC/PR curve tests), aligning columns to the training
116
+ class order. The initial dataset drives the class alignment and the set of
117
+ classes actually present; the new dataset's matrix is validated against the
118
+ same class list. Models that cannot supply a matching matrix are skipped.
119
+ """
120
+ aligned = multiclass_proba(model, datasets[0], "Population Stability Index")
121
+ prob_initial = aligned.y_prob
122
+ prob_new = proba_matrix(
123
+ model, datasets[1], aligned.class_list, "Population Stability Index"
124
+ )
125
+
126
+ classes_present = aligned.classes_present
127
+ n_present = len(classes_present)
128
+
129
+ fig = make_subplots(
130
+ rows=n_present,
131
+ cols=1,
132
+ specs=[[{"secondary_y": True}] for _ in range(n_present)],
133
+ subplot_titles=[f"Class {cls}" for cls in classes_present],
134
+ vertical_spacing=0.08,
135
+ )
136
+
137
+ tables = {}
138
+ raw_per_class = {}
139
+ for plot_i, (i, cls) in enumerate(zip(aligned.present_indices, classes_present)):
140
+ psi_results = calculate_psi(
141
+ prob_initial[:, i].copy(),
142
+ prob_new[:, i].copy(),
143
+ num_bins=num_bins,
144
+ mode=mode,
145
+ )
146
+ x = list(range(len(psi_results)))
147
+ color = _PSI_PALETTE[plot_i % len(_PSI_PALETTE)]
148
+ fig.add_trace(
149
+ go.Bar(
150
+ x=x,
151
+ y=[d["percent_initial"] for d in psi_results],
152
+ name="Initial",
153
+ marker=dict(color="#DE257E"),
154
+ showlegend=plot_i == 0,
155
+ legendgroup="initial",
156
+ ),
157
+ row=plot_i + 1,
158
+ col=1,
159
+ secondary_y=False,
160
+ )
161
+ fig.add_trace(
162
+ go.Bar(
163
+ x=x,
164
+ y=[d["percent_new"] for d in psi_results],
165
+ name="New",
166
+ marker=dict(color="#E8B1F8"),
167
+ showlegend=plot_i == 0,
168
+ legendgroup="new",
169
+ ),
170
+ row=plot_i + 1,
171
+ col=1,
172
+ secondary_y=False,
173
+ )
174
+ fig.add_trace(
175
+ go.Scatter(
176
+ x=x,
177
+ y=[d["psi"] for d in psi_results],
178
+ name="PSI",
179
+ line=dict(color=color),
180
+ showlegend=plot_i == 0,
181
+ legendgroup="psi",
182
+ ),
183
+ row=plot_i + 1,
184
+ col=1,
185
+ secondary_y=True,
186
+ )
187
+
188
+ rows_with_total, table_rows = _psi_table_rows(psi_results)
189
+ table_title = (
190
+ f"Population Stability Index for Class {cls} "
191
+ f"({datasets[0].input_id} vs {datasets[1].input_id})"
192
+ )
193
+ tables[table_title] = table_rows
194
+ raw_per_class[str(cls)] = rows_with_total
195
+
196
+ fig.update_layout(
197
+ title="Population Stability Index (PSI) — one-vs-rest per class",
198
+ barmode="group",
199
+ height=300 * n_present,
200
+ )
201
+
202
+ return (
203
+ tables,
204
+ fig,
205
+ RawData(
206
+ psi_raw=raw_per_class,
207
+ model=model.input_id,
208
+ datasets=[datasets[0].input_id, datasets[1].input_id],
209
+ ),
210
+ )
211
+
212
+
79
213
  @tags(
80
214
  "sklearn", "binary_classification", "multiclass_classification", "model_performance"
81
215
  )
@@ -132,10 +266,18 @@ def PopulationStabilityIndex(
132
266
  lead to misinterpretations. Any changes in PSI could be due to shifts in the model (model drift), changes in the
133
267
  relationships between features and the target variable (concept drift), or both. However, distinguishing between
134
268
  these causes is non-trivial.
269
+ - For multiclass models the PSI is computed one-vs-rest (one table/plot per class), which requires per-class
270
+ probabilities from the model's `predict_proba`. Models that cannot produce a full per-class probability matrix
271
+ (e.g. metadata-only models, or predictions supplied as a single precomputed probability column) are skipped for
272
+ the multiclass case.
135
273
  """
136
274
  if model.library in ["statsmodels", "pytorch", "catboost"]:
137
275
  raise SkipTestError(f"Skiping PSI for {model.library} models")
138
276
 
277
+ classes = np.unique(datasets[0].y)
278
+ if len(classes) > 2:
279
+ return _multiclass_psi(datasets, model, num_bins, mode)
280
+
139
281
  psi_results = calculate_psi(
140
282
  datasets[0].y_prob(model).copy(),
141
283
  datasets[1].y_prob(model).copy(),
@@ -182,35 +324,16 @@ def PopulationStabilityIndex(
182
324
  ),
183
325
  )
184
326
 
185
- # sum up the PSI values to get the total values
186
- total_psi = {
187
- key: sum(d.get(key, 0) for d in psi_results)
188
- for key in psi_results[0].keys()
189
- if isinstance(psi_results[0][key], (int, float))
190
- }
191
- psi_results.append(total_psi)
327
+ # sum up the PSI values to get the total values and format the table rows
328
+ rows_with_total, table_rows = _psi_table_rows(psi_results)
192
329
 
193
330
  table_title = f"Population Stability Index for {datasets[0].input_id} and {datasets[1].input_id} Datasets"
194
331
 
195
332
  return (
196
- {
197
- table_title: [
198
- {
199
- "Bin": (
200
- i if i < (len(psi_results) - 1) else "Total"
201
- ), # The last bin is the "Total" bin
202
- "Count Initial": values["initial"],
203
- "Percent Initial (%)": values["percent_initial"] * 100,
204
- "Count New": values["new"],
205
- "Percent New (%)": values["percent_new"] * 100,
206
- "PSI": values["psi"],
207
- }
208
- for i, values in enumerate(psi_results)
209
- ],
210
- },
333
+ {table_title: table_rows},
211
334
  fig,
212
335
  RawData(
213
- psi_raw=psi_results,
336
+ psi_raw=rows_with_total,
214
337
  model=model.input_id,
215
338
  datasets=[datasets[0].input_id, datasets[1].input_id],
216
339
  ),
@@ -6,15 +6,23 @@ from typing import Tuple
6
6
 
7
7
  import numpy as np
8
8
  import plotly.graph_objects as go
9
- from sklearn.metrics import precision_recall_curve
9
+ from sklearn.metrics import average_precision_score, precision_recall_curve
10
10
 
11
11
  from validmind import RawData, tags, tasks
12
12
  from validmind.errors import SkipTestError
13
13
  from validmind.models import FoundationModel
14
14
  from validmind.vm_models import VMDataset, VMModel
15
15
 
16
+ from ._multiclass_proba import multiclass_proba
16
17
 
17
- @tags("sklearn", "binary_classification", "model_performance", "visualization")
18
+
19
+ @tags(
20
+ "sklearn",
21
+ "binary_classification",
22
+ "multiclass_classification",
23
+ "model_performance",
24
+ "visualization",
25
+ )
18
26
  @tasks("classification", "text_classification")
19
27
  def PrecisionRecallCurve(
20
28
  model: VMModel, dataset: VMDataset
@@ -54,8 +62,10 @@ def PrecisionRecallCurve(
54
62
 
55
63
  ### Limitations
56
64
 
57
- - This metric is only applicable to binary classification models - it raises errors for multiclass classification
58
- models or Foundation models.
65
+ - For multiclass models the curve is computed one-vs-rest (one curve per class plus a micro-average), which
66
+ requires per-class probabilities from the model's `predict_proba`. Models that cannot produce a full per-class
67
+ probability matrix (e.g. Foundation/metadata-only models, or predictions supplied as a single precomputed
68
+ probability column) are skipped for the multiclass case.
59
69
  - It may not fully represent the overall accuracy of the model if the cost of false positives and false negatives
60
70
  are extremely different, or if the dataset is heavily imbalanced.
61
71
  """
@@ -63,11 +73,10 @@ def PrecisionRecallCurve(
63
73
  raise SkipTestError("Skipping PrecisionRecallCurve for Foundation models")
64
74
 
65
75
  y_true = dataset.y
66
- # Binary-only by design: multiclass is skipped, not handled (unlike MinimumF1Score).
67
- if len(np.unique(y_true)) > 2:
68
- raise SkipTestError(
69
- "Precision Recall Curve is only supported for binary classification models"
70
- )
76
+ classes = np.unique(y_true)
77
+
78
+ if len(classes) > 2:
79
+ return _multiclass_pr_curve(model, dataset)
71
80
 
72
81
  precision, recall, _ = precision_recall_curve(y_true, dataset.y_prob(model))
73
82
 
@@ -94,3 +103,80 @@ def PrecisionRecallCurve(
94
103
  model=model.input_id,
95
104
  dataset=dataset.input_id,
96
105
  )
106
+
107
+
108
+ def _multiclass_pr_curve(
109
+ model: VMModel, dataset: VMDataset
110
+ ) -> Tuple[go.Figure, RawData]:
111
+ """One-vs-rest precision-recall curves for a multiclass model.
112
+
113
+ Needs the full per-class probability matrix, which the stored single
114
+ probability column cannot provide; the shared helper reaches the underlying
115
+ estimator, aligns the probability columns to the training class order and
116
+ skips models that cannot supply a matching matrix.
117
+ """
118
+ aligned = multiclass_proba(model, dataset, "Precision-Recall Curve")
119
+ y_bin = aligned.y_bin
120
+ y_prob = aligned.y_prob
121
+
122
+ traces = []
123
+ raw_precision = {}
124
+ raw_recall = {}
125
+ raw_ap = {}
126
+ palette = ["#DE257E", "#1F77B4", "#2CA02C", "#FF7F0E", "#9467BD", "#8C564B"]
127
+ for plot_i, (i, cls) in enumerate(
128
+ zip(aligned.present_indices, aligned.classes_present)
129
+ ):
130
+ precision, recall, _ = precision_recall_curve(y_bin[:, i], y_prob[:, i])
131
+ ap = average_precision_score(y_bin[:, i], y_prob[:, i])
132
+ key = str(cls)
133
+ raw_precision[key] = precision
134
+ raw_recall[key] = recall
135
+ raw_ap[key] = ap
136
+ traces.append(
137
+ go.Scatter(
138
+ x=recall,
139
+ y=precision,
140
+ mode="lines",
141
+ name=f"Class {key} (AP = {ap:.2f})",
142
+ line=dict(color=palette[plot_i % len(palette)]),
143
+ )
144
+ )
145
+
146
+ # Micro-average across the one-vs-rest decisions of the present classes.
147
+ present = aligned.present_indices
148
+ y_bin = y_bin[:, present]
149
+ y_prob = y_prob[:, present]
150
+ micro_precision, micro_recall, _ = precision_recall_curve(
151
+ y_bin.ravel(), y_prob.ravel()
152
+ )
153
+ micro_ap = average_precision_score(y_bin, y_prob, average="micro")
154
+ raw_precision["micro"] = micro_precision
155
+ raw_recall["micro"] = micro_recall
156
+ raw_ap["micro"] = micro_ap
157
+ traces.append(
158
+ go.Scatter(
159
+ x=micro_recall,
160
+ y=micro_precision,
161
+ mode="lines",
162
+ name=f"Micro-average (AP = {micro_ap:.2f})",
163
+ line=dict(color="black", dash="dot"),
164
+ )
165
+ )
166
+
167
+ fig = go.Figure(
168
+ data=traces,
169
+ layout=go.Layout(
170
+ title=f"Precision-Recall Curve (one-vs-rest) for {model.input_id} on {dataset.input_id}",
171
+ xaxis=dict(title="Recall"),
172
+ yaxis=dict(title="Precision"),
173
+ ),
174
+ )
175
+
176
+ return fig, RawData(
177
+ precision=raw_precision,
178
+ recall=raw_recall,
179
+ average_precision=raw_ap,
180
+ model=model.input_id,
181
+ dataset=dataset.input_id,
182
+ )