validmind 2.13.5__tar.gz → 2.13.7__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.5 → validmind-2.13.7}/PKG-INFO +5 -1
  2. {validmind-2.13.5 → validmind-2.13.7}/pyproject.toml +8 -2
  3. validmind-2.13.7/validmind/__version__.py +1 -0
  4. {validmind-2.13.5 → validmind-2.13.7}/validmind/ai/utils.py +112 -22
  5. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/IQROutliersBarPlot.py +6 -2
  6. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/IQROutliersTable.py +5 -2
  7. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ModelPredictionResiduals.py +2 -2
  8. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +10 -0
  9. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +10 -5
  10. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +12 -3
  11. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +41 -1
  12. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +161 -23
  13. validmind-2.13.7/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +204 -0
  14. validmind-2.13.7/validmind/tests/model_validation/sklearn/ROCCurve.py +227 -0
  15. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +43 -3
  16. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +40 -19
  17. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +9 -0
  18. validmind-2.13.7/validmind/tests/model_validation/sklearn/_diagnosis_metrics.py +126 -0
  19. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +2 -2
  20. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/GINITable.py +89 -2
  21. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +2 -2
  22. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +2 -2
  23. validmind-2.13.5/validmind/__version__.py +0 -1
  24. validmind-2.13.5/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -95
  25. validmind-2.13.5/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -111
  26. {validmind-2.13.5 → validmind-2.13.7}/.gitignore +0 -0
  27. {validmind-2.13.5 → validmind-2.13.7}/LICENSE +0 -0
  28. {validmind-2.13.5 → validmind-2.13.7}/README.pypi.md +0 -0
  29. {validmind-2.13.5 → validmind-2.13.7}/validmind/__init__.py +0 -0
  30. {validmind-2.13.5 → validmind-2.13.7}/validmind/ai/test_descriptions.py +0 -0
  31. {validmind-2.13.5 → validmind-2.13.7}/validmind/api_client.py +0 -0
  32. {validmind-2.13.5 → validmind-2.13.7}/validmind/client.py +0 -0
  33. {validmind-2.13.5 → validmind-2.13.7}/validmind/client_config.py +0 -0
  34. {validmind-2.13.5 → validmind-2.13.7}/validmind/credentials_store.py +0 -0
  35. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/__init__.py +0 -0
  36. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/__init__.py +0 -0
  37. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/config.json +0 -0
  38. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/customer_churn.py +0 -0
  39. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
  40. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
  41. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/classification/taiwan_credit.py +0 -0
  42. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/cluster/digits.py +0 -0
  43. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/__init__.py +0 -0
  44. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
  45. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
  46. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/lending_club.py +0 -0
  47. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
  48. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/__init__.py +0 -0
  49. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/agent_dataset.py +0 -0
  50. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/__init__.py +0 -0
  51. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
  52. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
  53. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
  54. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
  55. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
  56. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/llm/rag/rfp.py +0 -0
  57. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/__init__.py +0 -0
  58. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
  59. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
  60. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
  61. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
  62. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
  63. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
  64. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/__init__.py +0 -0
  65. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/california_housing.py +0 -0
  66. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/california_housing.csv +0 -0
  67. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
  68. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
  69. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
  70. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
  71. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
  72. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
  73. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
  74. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
  75. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
  76. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
  77. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
  78. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
  79. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
  80. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
  81. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
  82. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
  83. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
  84. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
  85. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/fred.py +0 -0
  86. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/fred_timeseries.py +0 -0
  87. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/generate_california_housing_csv.py +0 -0
  88. {validmind-2.13.5 → validmind-2.13.7}/validmind/datasets/regression/lending_club.py +0 -0
  89. {validmind-2.13.5 → validmind-2.13.7}/validmind/errors.py +0 -0
  90. {validmind-2.13.5 → validmind-2.13.7}/validmind/experimental/__init__.py +0 -0
  91. {validmind-2.13.5 → validmind-2.13.7}/validmind/experimental/agents.py +0 -0
  92. {validmind-2.13.5 → validmind-2.13.7}/validmind/html_templates/__init__.py +0 -0
  93. {validmind-2.13.5 → validmind-2.13.7}/validmind/html_templates/content_blocks.py +0 -0
  94. {validmind-2.13.5 → validmind-2.13.7}/validmind/input_registry.py +0 -0
  95. {validmind-2.13.5 → validmind-2.13.7}/validmind/logging.py +0 -0
  96. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/__init__.py +0 -0
  97. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/foundation.py +0 -0
  98. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/function.py +0 -0
  99. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/huggingface.py +0 -0
  100. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/metadata.py +0 -0
  101. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/pipeline.py +0 -0
  102. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/pytorch.py +0 -0
  103. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/r_model.py +0 -0
  104. {validmind-2.13.5 → validmind-2.13.7}/validmind/models/sklearn.py +0 -0
  105. {validmind-2.13.5 → validmind-2.13.7}/validmind/oidc_device.py +0 -0
  106. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/__init__.py +0 -0
  107. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/AbsoluteError.py +0 -0
  108. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/BrierScore.py +0 -0
  109. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/CalibrationError.py +0 -0
  110. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/ClassBalance.py +0 -0
  111. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/Confidence.py +0 -0
  112. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/Correctness.py +0 -0
  113. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/LogLoss.py +0 -0
  114. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/OutlierScore.py +0 -0
  115. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/ProbabilityError.py +0 -0
  116. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/Uncertainty.py +0 -0
  117. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/classification/__init__.py +0 -0
  118. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/AnswerRelevancy.py +0 -0
  119. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ArgumentCorrectness.py +0 -0
  120. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Bias.py +0 -0
  121. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ContextualPrecision.py +0 -0
  122. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ContextualRecall.py +0 -0
  123. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ContextualRelevancy.py +0 -0
  124. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Faithfulness.py +0 -0
  125. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/GEval.py +0 -0
  126. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Hallucination.py +0 -0
  127. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/PlanAdherence.py +0 -0
  128. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/PlanQuality.py +0 -0
  129. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/Summarization.py +0 -0
  130. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/TaskCompletion.py +0 -0
  131. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/ToolCorrectness.py +0 -0
  132. {validmind-2.13.5 → validmind-2.13.7}/validmind/scorers/llm/deepeval/__init__.py +0 -0
  133. {validmind-2.13.5 → validmind-2.13.7}/validmind/template.py +0 -0
  134. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/__init__.py +0 -0
  135. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/classifier.py +0 -0
  136. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/cluster.py +0 -0
  137. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/embeddings.py +0 -0
  138. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/llm.py +0 -0
  139. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/nlp.py +0 -0
  140. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/parameters_optimization.py +0 -0
  141. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/regression.py +0 -0
  142. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/statsmodels_timeseries.py +0 -0
  143. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/summarization.py +0 -0
  144. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/tabular_datasets.py +0 -0
  145. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/text_data.py +0 -0
  146. {validmind-2.13.5 → validmind-2.13.7}/validmind/test_suites/time_series.py +0 -0
  147. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/__init__.py +0 -0
  148. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/__types__.py +0 -0
  149. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/_store.py +0 -0
  150. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/comparison.py +0 -0
  151. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
  152. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ADF.py +0 -0
  153. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/AutoAR.py +0 -0
  154. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/AutoMA.py +0 -0
  155. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/AutoStationarity.py +0 -0
  156. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
  157. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/BoxPierce.py +0 -0
  158. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
  159. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ClassImbalance.py +0 -0
  160. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DatasetDescription.py +0 -0
  161. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DatasetSplit.py +0 -0
  162. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
  163. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
  164. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/Duplicates.py +0 -0
  165. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
  166. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
  167. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/HighCardinality.py +0 -0
  168. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
  169. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
  170. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/JarqueBera.py +0 -0
  171. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/KPSS.py +0 -0
  172. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/LJungBox.py +0 -0
  173. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
  174. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/MissingValues.py +0 -0
  175. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
  176. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/MutualInformation.py +0 -0
  177. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
  178. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
  179. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
  180. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
  181. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
  182. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
  183. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
  184. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/RunsTest.py +0 -0
  185. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ScatterPlot.py +0 -0
  186. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ScoreBandDefaultRates.py +0 -0
  187. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
  188. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
  189. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/Skewness.py +0 -0
  190. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/SpreadPlot.py +0 -0
  191. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
  192. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
  193. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
  194. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
  195. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
  196. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
  197. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
  198. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
  199. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
  200. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
  201. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
  202. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
  203. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
  204. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/UniqueRows.py +0 -0
  205. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
  206. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/WOEBinTable.py +0 -0
  207. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
  208. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/__init__.py +0 -0
  209. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
  210. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
  211. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
  212. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
  213. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
  214. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
  215. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
  216. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
  217. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
  218. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
  219. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/data_validation/nlp/__init__.py +0 -0
  220. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/decorator.py +0 -0
  221. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/load.py +0 -0
  222. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/BertScore.py +0 -0
  223. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/BleuScore.py +0 -0
  224. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
  225. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ContextualRecall.py +0 -0
  226. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
  227. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/MeteorScore.py +0 -0
  228. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ModelMetadata.py +0 -0
  229. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/RegardScore.py +0 -0
  230. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
  231. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/RougeScore.py +0 -0
  232. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
  233. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
  234. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
  235. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/TokenDisparity.py +0 -0
  236. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ToxicityScore.py +0 -0
  237. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/__init__.py +0 -0
  238. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
  239. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
  240. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
  241. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
  242. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
  243. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
  244. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
  245. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
  246. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
  247. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
  248. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
  249. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
  250. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
  251. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
  252. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/embeddings/utils.py +0 -0
  253. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
  254. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
  255. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
  256. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
  257. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +0 -0
  258. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
  259. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
  260. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
  261. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +0 -0
  262. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +0 -0
  263. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/ragas/utils.py +0 -0
  264. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
  265. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
  266. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
  267. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +0 -0
  268. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
  269. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
  270. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
  271. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
  272. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
  273. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
  274. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
  275. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
  276. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
  277. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
  278. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
  279. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
  280. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
  281. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
  282. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
  283. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
  284. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
  285. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
  286. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
  287. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
  288. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
  289. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
  290. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
  291. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
  292. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
  293. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
  294. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
  295. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
  296. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
  297. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
  298. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
  299. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
  300. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
  301. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
  302. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
  303. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
  304. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +0 -0
  305. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
  306. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
  307. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
  308. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
  309. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
  310. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
  311. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
  312. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
  313. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +0 -0
  314. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
  315. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
  316. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +0 -0
  317. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +0 -0
  318. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
  319. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/output.py +0 -0
  320. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/BoxPlot.py +0 -0
  321. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/CorrelationHeatmap.py +0 -0
  322. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/HistogramPlot.py +0 -0
  323. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/ViolinPlot.py +0 -0
  324. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/plots/__init__.py +0 -0
  325. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Bias.py +0 -0
  326. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Clarity.py +0 -0
  327. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Conciseness.py +0 -0
  328. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Delimitation.py +0 -0
  329. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
  330. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Robustness.py +0 -0
  331. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/Specificity.py +0 -0
  332. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/__init__.py +0 -0
  333. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
  334. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/run.py +0 -0
  335. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/CorrelationAnalysis.py +0 -0
  336. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/DescriptiveStats.py +0 -0
  337. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/NormalityTests.py +0 -0
  338. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/OutlierDetection.py +0 -0
  339. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/stats/__init__.py +0 -0
  340. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/test_providers.py +0 -0
  341. {validmind-2.13.5 → validmind-2.13.7}/validmind/tests/utils.py +0 -0
  342. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/__init__.py +0 -0
  343. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/Accuracy.py +0 -0
  344. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/F1.py +0 -0
  345. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/Precision.py +0 -0
  346. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
  347. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/classification/Recall.py +0 -0
  348. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
  349. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
  350. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
  351. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
  352. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
  353. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
  354. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
  355. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
  356. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
  357. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
  358. {validmind-2.13.5 → validmind-2.13.7}/validmind/unit_metrics/regression/RootMeanSquaredError.py +0 -0
  359. {validmind-2.13.5 → validmind-2.13.7}/validmind/utils.py +0 -0
  360. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/__init__.py +0 -0
  361. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/dataset/__init__.py +0 -0
  362. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/dataset/dataset.py +0 -0
  363. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/dataset/utils.py +0 -0
  364. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/figure.py +0 -0
  365. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/html_progress.py +0 -0
  366. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/html_renderer.py +0 -0
  367. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/input.py +0 -0
  368. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/model.py +0 -0
  369. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/__init__.py +0 -0
  370. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/pii_filter.py +0 -0
  371. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/result.jinja +0 -0
  372. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/result.py +0 -0
  373. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/result/utils.py +0 -0
  374. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/__init__.py +0 -0
  375. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/runner.py +0 -0
  376. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/summary.py +0 -0
  377. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/test.py +0 -0
  378. {validmind-2.13.5 → validmind-2.13.7}/validmind/vm_models/test_suite/test_suite.py +0 -0
  379. {validmind-2.13.5 → validmind-2.13.7}/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.5
3
+ Version: 2.13.7
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
@@ -726,7 +726,9 @@ Requires-Dist: langchain-google-genai; extra == 'all'
726
726
  Requires-Dist: langchain-openai>=0.1.8; extra == 'all'
727
727
  Requires-Dist: langchain<0.4.0,>=0.2.0; extra == 'all'
728
728
  Requires-Dist: langdetect; extra == 'all'
729
+ Requires-Dist: llvmlite<0.48,>=0.47.0; (python_version >= '3.14') and extra == 'all'
729
730
  Requires-Dist: nltk<4.0.0,>=3.8.1; extra == 'all'
731
+ Requires-Dist: numba>=0.65.1; (python_version >= '3.14') and extra == 'all'
730
732
  Requires-Dist: pyarrow<16; (python_version < '3.13') and extra == 'all'
731
733
  Requires-Dist: pyarrow<21,>=20; (python_version == '3.13') and extra == 'all'
732
734
  Requires-Dist: pyarrow<23,>=22; (python_version >= '3.14') and extra == 'all'
@@ -753,6 +755,8 @@ Requires-Dist: pyarrow<16; (python_version < '3.13') and extra == 'datasets'
753
755
  Requires-Dist: pyarrow<21,>=20; (python_version == '3.13') and extra == 'datasets'
754
756
  Requires-Dist: pyarrow<23,>=22; (python_version >= '3.14') and extra == 'datasets'
755
757
  Provides-Extra: explainability
758
+ Requires-Dist: llvmlite<0.48,>=0.47.0; (python_version >= '3.14') and extra == 'explainability'
759
+ Requires-Dist: numba>=0.65.1; (python_version >= '3.14') and extra == 'explainability'
756
760
  Requires-Dist: shap>=0.46.0; extra == 'explainability'
757
761
  Provides-Extra: huggingface
758
762
  Requires-Dist: sentencepiece<0.3.0,>=0.2.0; extra == 'huggingface'
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "validmind"
3
- version = "2.13.5"
3
+ version = "2.13.7"
4
4
  description = "ValidMind Library"
5
5
  readme = "README.pypi.md"
6
6
  requires-python = ">=3.9,<3.15"
@@ -65,6 +65,8 @@ all = [
65
65
  "pyarrow (>=22,<23) ; python_version >= '3.14'",
66
66
  "arch (>=7.0.0)",
67
67
  "shap (>=0.46.0)",
68
+ "numba (>=0.65.1) ; python_version >= '3.14'",
69
+ "llvmlite (>=0.47.0,<0.48) ; python_version >= '3.14'",
68
70
  "scorecardpy==0.1.9.6",
69
71
  "setuptools (<82)",
70
72
  ]
@@ -107,7 +109,11 @@ nlp = [
107
109
  pytorch = ["torch (>=2.0.0)"]
108
110
  stats = ["scipy", "statsmodels (>=0.14.2,<0.15.0)", "arch (>=7.0.0)"]
109
111
  xgboost = ["xgboost (>=1.5.2,<3)"]
110
- explainability = ["shap (>=0.46.0)"]
112
+ explainability = [
113
+ "shap (>=0.46.0)",
114
+ "numba (>=0.65.1) ; python_version >= '3.14'",
115
+ "llvmlite (>=0.47.0,<0.48) ; python_version >= '3.14'",
116
+ ]
111
117
  credit_risk = ["scorecardpy==0.1.9.6", "setuptools (<82)"]
112
118
  datasets = [
113
119
  "datasets (>=2.10.0,<3.0.0) ; python_version < '3.14'",
@@ -0,0 +1 @@
1
+ __version__ = "2.13.7"
@@ -17,6 +17,7 @@ __client = None
17
17
  __model = None
18
18
  __judge_llm = None
19
19
  __judge_embeddings = None
20
+ __judge_llm_explicitly_set = False
20
21
  OPENAI_MODEL = "gpt-4.1"
21
22
  OPENAI_EMBEDDINGS_MODEL = "text-embedding-3-small"
22
23
  GEMINI_MODEL = "gemini-2.5-pro"
@@ -238,14 +239,95 @@ def _unwrap_deepeval_response(response):
238
239
  return getattr(response, "content", response)
239
240
 
240
241
 
241
- def _build_gemini_deepeval_model(model):
242
+ def _is_reason_only_schema(schema):
243
+ """True when ``schema`` is a single-field ``{reason}`` explanation schema.
244
+
245
+ DeepEval's ``*ScoreReason`` schemas carry only the human-readable explanation
246
+ and do not affect the metric score, so a missing value can be degraded safely.
247
+ """
248
+ fields = getattr(schema, "model_fields", None) or getattr(
249
+ schema, "__fields__", None
250
+ )
251
+ try:
252
+ return set(fields.keys()) == {"reason"}
253
+ except Exception:
254
+ return False
255
+
256
+
257
+ def _require_structured_response(result, schema):
258
+ """Guard against a judge LLM returning no parseable structured output.
259
+
260
+ Gemini's default function-calling path yields ``None`` when the model
261
+ response contains no tool call. Returning that ``None`` to DeepEval surfaces
262
+ as a cryptic ``'NoneType' object has no attribute 'reason'``.
263
+
264
+ For reason-only schemas the metric score is already computed from earlier
265
+ verdict calls, so a missing explanation is cosmetic: degrade to a placeholder
266
+ reason and keep the score. Score-bearing schemas (statements, verdicts) are
267
+ never faked -- doing so would yield a silently wrong score -- so those raise.
268
+ """
269
+ if result is not None:
270
+ return result
271
+
272
+ schema_name = getattr(schema, "__name__", schema)
273
+
274
+ if _is_reason_only_schema(schema):
275
+ logger.warning(
276
+ "Judge LLM returned no structured output for %s; recording the score "
277
+ "with an empty explanation.",
278
+ schema_name,
279
+ )
280
+ return schema(reason="N/A (judge LLM returned no explanation)")
281
+
282
+ raise ValueError(
283
+ f"Judge LLM returned no parseable structured output for {schema_name}. "
284
+ "This usually means the model produced no tool call for the requested "
285
+ "schema. Try a different judge model, or check provider quotas and "
286
+ "safety settings."
287
+ )
288
+
289
+
290
+ def _structured_generate(chat_model, prompt, schema):
291
+ """Invoke ``chat_model`` for structured output, retrying via json_mode.
292
+
293
+ Gemini's default function-calling path can return ``None`` when the model
294
+ emits no tool call; json_mode binds a response schema and is deterministic.
295
+ """
296
+ result = chat_model.with_structured_output(schema).invoke(prompt)
297
+ if result is None:
298
+ try:
299
+ result = chat_model.with_structured_output(
300
+ schema, method="json_mode"
301
+ ).invoke(prompt)
302
+ except Exception:
303
+ pass
304
+ return _require_structured_response(result, schema)
305
+
306
+
307
+ async def _a_structured_generate(chat_model, prompt, schema):
308
+ """Async counterpart of :func:`_structured_generate`."""
309
+ result = await chat_model.with_structured_output(schema).ainvoke(prompt)
310
+ if result is None:
311
+ try:
312
+ result = await chat_model.with_structured_output(
313
+ schema, method="json_mode"
314
+ ).ainvoke(prompt)
315
+ except Exception:
316
+ pass
317
+ return _require_structured_response(result, schema)
318
+
319
+
320
+ def _build_langchain_deepeval_model(chat_model):
321
+ """Wrap any LangChain BaseChatModel as a DeepEval-compatible model.
322
+
323
+ Used when set_judge_config() has been called so that DeepEval scorers
324
+ honour the same judge model as prompt-validation and RAGAS tests.
325
+ """
242
326
  DeepEvalBaseLLM = _import_deepeval_base_llm()
243
- judge_llm, _ = _build_gemini_judge_config(model)
244
327
 
245
- class GeminiDeepEvalModel(DeepEvalBaseLLM):
246
- def __init__(self, chat_model, model_name):
247
- self._chat_model = chat_model
248
- self._model_name = model_name
328
+ class LangChainDeepEvalModel(DeepEvalBaseLLM):
329
+ def __init__(self, model):
330
+ self._chat_model = model
249
331
  self.model = self.load_model()
250
332
 
251
333
  def load_model(self, *args, **kwargs):
@@ -254,27 +336,28 @@ def _build_gemini_deepeval_model(model):
254
336
  def generate(self, prompt: str, schema=None):
255
337
  chat_model = self.load_model()
256
338
  if schema is not None and hasattr(chat_model, "with_structured_output"):
257
- response = chat_model.with_structured_output(schema).invoke(prompt)
258
- else:
259
- response = chat_model.invoke(prompt)
260
-
261
- return _unwrap_deepeval_response(response)
339
+ return _structured_generate(chat_model, prompt, schema)
340
+ return _unwrap_deepeval_response(chat_model.invoke(prompt))
262
341
 
263
342
  async def a_generate(self, prompt: str, schema=None):
264
343
  chat_model = self.load_model()
265
344
  if schema is not None and hasattr(chat_model, "with_structured_output"):
266
- response = await chat_model.with_structured_output(schema).ainvoke(
267
- prompt
268
- )
269
- else:
270
- response = await chat_model.ainvoke(prompt)
271
-
272
- return _unwrap_deepeval_response(response)
345
+ return await _a_structured_generate(chat_model, prompt, schema)
346
+ return _unwrap_deepeval_response(await chat_model.ainvoke(prompt))
273
347
 
274
348
  def get_model_name(self, *args, **kwargs):
275
- return self._model_name
349
+ for attr in ("model", "model_name", "azure_deployment"):
350
+ val = getattr(self._chat_model, attr, None)
351
+ if val:
352
+ return val
353
+ return type(self._chat_model).__name__
354
+
355
+ return LangChainDeepEvalModel(chat_model)
356
+
276
357
 
277
- return GeminiDeepEvalModel(judge_llm, model)
358
+ def _build_gemini_deepeval_model(model):
359
+ judge_llm, _ = _build_gemini_judge_config(model)
360
+ return _build_langchain_deepeval_model(judge_llm)
278
361
 
279
362
 
280
363
  def run_deepeval_evaluation(*, test_cases, metrics):
@@ -332,6 +415,12 @@ def get_deepeval_model():
332
415
  OpenAI/Azure scorers currently pass a model string. Gemini support requires a
333
416
  native DeepEval model object so the provider can be configured correctly.
334
417
  """
418
+ if (
419
+ __judge_llm_explicitly_set
420
+ and __judge_llm is not None
421
+ and __judge_embeddings is not None
422
+ ):
423
+ return _build_langchain_deepeval_model(__judge_llm)
335
424
 
336
425
  provider = _get_configured_provider()
337
426
  _, model = get_client_and_model()
@@ -359,7 +448,7 @@ def get_deepeval_model():
359
448
 
360
449
 
361
450
  def set_judge_config(judge_llm, judge_embeddings):
362
- global __judge_llm, __judge_embeddings
451
+ global __judge_llm, __judge_embeddings, __judge_llm_explicitly_set
363
452
  try:
364
453
  from langchain_core.embeddings import Embeddings
365
454
  from langchain_core.language_models.chat_models import BaseChatModel
@@ -372,12 +461,13 @@ def set_judge_config(judge_llm, judge_embeddings):
372
461
  ):
373
462
  __judge_llm = judge_llm
374
463
  __judge_embeddings = judge_embeddings
375
- # Assuming 'your_object' is the object you want to check
464
+ __judge_llm_explicitly_set = True
376
465
  elif isinstance(judge_llm, FunctionModel) and isinstance(
377
466
  judge_embeddings, FunctionModel
378
467
  ):
379
468
  __judge_llm = judge_llm.model
380
469
  __judge_embeddings = judge_embeddings.model
470
+ __judge_llm_explicitly_set = True
381
471
  else:
382
472
  raise ValueError(
383
473
  "Provided Judge LLM/Embeddings are not Langchain compatible. Ensure the judge LLM/embedding provided are an instance of "
@@ -5,6 +5,7 @@
5
5
 
6
6
  from typing import Tuple
7
7
 
8
+ import pandas as pd
8
9
  import plotly.graph_objects as go
9
10
 
10
11
  from validmind import RawData, tags, tasks
@@ -76,9 +77,12 @@ def IQROutliersBarPlot(
76
77
  """
77
78
  df = dataset.df
78
79
 
79
- # Exclude binary/boolean features (IQR is not meaningful and quantile fails on bool)
80
+ # Exclude boolean and binary features. The IQR is not meaningful for them and
81
+ # `quantile` raises "numpy boolean subtract" on boolean dtype columns.
80
82
  eligible_columns = [
81
- col for col in dataset.feature_columns_numeric if len(df[col].unique()) > 2
83
+ col
84
+ for col in dataset.feature_columns_numeric
85
+ if not pd.api.types.is_bool_dtype(df[col]) and df[col].nunique() > 2
82
86
  ]
83
87
 
84
88
  figures = []
@@ -5,6 +5,8 @@
5
5
 
6
6
  from typing import Any, Dict, Tuple
7
7
 
8
+ import pandas as pd
9
+
8
10
  from validmind import RawData, tags, tasks
9
11
  from validmind.vm_models import VMDataset
10
12
 
@@ -72,8 +74,9 @@ def IQROutliersTable(
72
74
  all_outliers = {}
73
75
 
74
76
  for col in dataset.feature_columns_numeric:
75
- # Skip binary features
76
- if len(df[col].unique()) <= 2:
77
+ # Skip boolean and binary features. The IQR is not meaningful for them and
78
+ # `quantile` raises "numpy boolean subtract" on boolean dtype columns.
79
+ if pd.api.types.is_bool_dtype(df[col]) or df[col].nunique() <= 2:
77
80
  continue
78
81
 
79
82
  outliers = compute_outliers(df[col], threshold)
@@ -12,7 +12,7 @@ from validmind.errors import MissingDependencyError
12
12
  from validmind.vm_models import VMDataset, VMModel
13
13
 
14
14
  try:
15
- from scipy.stats import kstest
15
+ from scipy.stats import kstest, norm
16
16
  except ImportError as e:
17
17
  if "scipy" in str(e):
18
18
  raise MissingDependencyError(
@@ -109,7 +109,7 @@ def ModelPredictionResiduals(
109
109
 
110
110
  # Perform KS normality test
111
111
  ks_stat, p_value = kstest(
112
- residuals, "norm", args=(residuals.mean(), residuals.std())
112
+ residuals, norm(loc=residuals.mean(), scale=residuals.std()).cdf
113
113
  )
114
114
  ks_normality = "Normal" if p_value > p_value_threshold else "Not Normal"
115
115
 
@@ -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
 
@@ -58,10 +58,19 @@ def MinimumF1Score(
58
58
  closely with specific requirements.
59
59
  """
60
60
 
61
- if len(np.unique(dataset.y)) > 2:
62
- score = f1_score(dataset.y, dataset.y_pred(model), average="macro")
61
+ y_true = dataset.y
62
+ y_pred = dataset.y_pred(model)
63
+
64
+ # Decide the averaging method from the labels f1_score actually sees -- the
65
+ # union of y_true and y_pred. Inspecting y_true alone is not enough: a split
66
+ # whose true labels collapse to <=2 classes while the model predicts a third
67
+ # class is still multiclass to sklearn, and average="binary" would raise
68
+ # "Target is multiclass but average='binary'".
69
+ n_classes = len(np.unique(np.concatenate([y_true, y_pred])))
70
+ if n_classes > 2:
71
+ score = f1_score(y_true, y_pred, average="macro")
63
72
  else:
64
- score = f1_score(dataset.y, dataset.y_pred(model))
73
+ score = f1_score(y_true, y_pred)
65
74
 
66
75
  return (
67
76
  [
@@ -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)