validmind 2.4.10__tar.gz → 2.4.13__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 (315) hide show
  1. {validmind-2.4.10 → validmind-2.4.13}/PKG-INFO +1 -1
  2. {validmind-2.4.10 → validmind-2.4.13}/pyproject.toml +1 -1
  3. validmind-2.4.13/validmind/__version__.py +1 -0
  4. {validmind-2.4.10 → validmind-2.4.13}/validmind/api_client.py +1 -0
  5. {validmind-2.4.10 → validmind-2.4.13}/validmind/client.py +0 -2
  6. {validmind-2.4.10 → validmind-2.4.13}/validmind/input_registry.py +8 -0
  7. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/DatasetDescription.py +1 -0
  8. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/run.py +35 -19
  9. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/__init__.py +1 -1
  10. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/__init__.py +2 -0
  11. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/dataset/dataset.py +53 -13
  12. validmind-2.4.13/validmind/vm_models/input.py +31 -0
  13. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/model.py +4 -2
  14. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test_context.py +9 -2
  15. validmind-2.4.10/validmind/__version__.py +0 -1
  16. {validmind-2.4.10 → validmind-2.4.13}/LICENSE +0 -0
  17. {validmind-2.4.10 → validmind-2.4.13}/README.pypi.md +0 -0
  18. {validmind-2.4.10 → validmind-2.4.13}/validmind/__init__.py +0 -0
  19. {validmind-2.4.10 → validmind-2.4.13}/validmind/ai/test_descriptions.py +0 -0
  20. {validmind-2.4.10 → validmind-2.4.13}/validmind/ai/utils.py +0 -0
  21. {validmind-2.4.10 → validmind-2.4.13}/validmind/client_config.py +0 -0
  22. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/__init__.py +0 -0
  23. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/classification/__init__.py +0 -0
  24. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/classification/customer_churn.py +0 -0
  25. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
  26. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
  27. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/classification/taiwan_credit.py +0 -0
  28. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/cluster/digits.py +0 -0
  29. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/credit_risk/__init__.py +0 -0
  30. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
  31. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/credit_risk/lending_club.py +0 -0
  32. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/__init__.py +0 -0
  33. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
  34. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
  35. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
  36. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
  37. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
  38. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/llm/rag/rfp.py +0 -0
  39. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/__init__.py +0 -0
  40. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
  41. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
  42. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
  43. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
  44. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
  45. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
  46. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/__init__.py +0 -0
  47. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/california_housing.py +0 -0
  48. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
  49. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
  50. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
  51. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
  52. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
  53. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
  54. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
  55. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
  56. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
  57. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
  58. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
  59. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
  60. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
  61. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
  62. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
  63. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
  64. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
  65. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
  66. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/fred.py +0 -0
  67. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/fred_timeseries.py +0 -0
  68. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/lending_club.py +0 -0
  69. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
  70. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
  71. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
  72. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
  73. {validmind-2.4.10 → validmind-2.4.13}/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
  74. {validmind-2.4.10 → validmind-2.4.13}/validmind/errors.py +0 -0
  75. {validmind-2.4.10 → validmind-2.4.13}/validmind/html_templates/__init__.py +0 -0
  76. {validmind-2.4.10 → validmind-2.4.13}/validmind/html_templates/content_blocks.py +0 -0
  77. {validmind-2.4.10 → validmind-2.4.13}/validmind/logging.py +0 -0
  78. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/__init__.py +0 -0
  79. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/foundation.py +0 -0
  80. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/function.py +0 -0
  81. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/huggingface.py +0 -0
  82. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/metadata.py +0 -0
  83. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/pipeline.py +0 -0
  84. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/pytorch.py +0 -0
  85. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/r_model.py +0 -0
  86. {validmind-2.4.10 → validmind-2.4.13}/validmind/models/sklearn.py +0 -0
  87. {validmind-2.4.10 → validmind-2.4.13}/validmind/template.py +0 -0
  88. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/__init__.py +0 -0
  89. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/classifier.py +0 -0
  90. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/cluster.py +0 -0
  91. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/embeddings.py +0 -0
  92. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/llm.py +0 -0
  93. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/nlp.py +0 -0
  94. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/parameters_optimization.py +0 -0
  95. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/regression.py +0 -0
  96. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/statsmodels_timeseries.py +0 -0
  97. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/summarization.py +0 -0
  98. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/tabular_datasets.py +0 -0
  99. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/text_data.py +0 -0
  100. {validmind-2.4.10 → validmind-2.4.13}/validmind/test_suites/time_series.py +0 -0
  101. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/__init__.py +0 -0
  102. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/__types__.py +0 -0
  103. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/_store.py +0 -0
  104. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
  105. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ADF.py +0 -0
  106. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ANOVAOneWayTable.py +0 -0
  107. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/AutoAR.py +0 -0
  108. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/AutoMA.py +0 -0
  109. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/AutoSeasonality.py +0 -0
  110. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/AutoStationarity.py +0 -0
  111. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/BivariateFeaturesBarPlots.py +0 -0
  112. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/BivariateHistograms.py +0 -0
  113. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
  114. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
  115. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ClassImbalance.py +0 -0
  116. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/DFGLSArch.py +0 -0
  117. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/DatasetSplit.py +0 -0
  118. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
  119. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/Duplicates.py +0 -0
  120. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
  121. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
  122. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/HeatmapFeatureCorrelations.py +0 -0
  123. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/HighCardinality.py +0 -0
  124. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
  125. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -0
  126. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/IQROutliersTable.py +0 -0
  127. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
  128. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/KPSS.py +0 -0
  129. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
  130. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/MissingValues.py +0 -0
  131. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
  132. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/MissingValuesRisk.py +0 -0
  133. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
  134. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
  135. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
  136. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ScatterPlot.py +0 -0
  137. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
  138. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/Skewness.py +0 -0
  139. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/SpreadPlot.py +0 -0
  140. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
  141. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
  142. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
  143. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
  144. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
  145. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
  146. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
  147. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
  148. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
  149. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
  150. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
  151. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
  152. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
  153. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/UniqueRows.py +0 -0
  154. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
  155. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/WOEBinTable.py +0 -0
  156. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
  157. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/__init__.py +0 -0
  158. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
  159. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
  160. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
  161. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
  162. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
  163. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
  164. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
  165. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
  166. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
  167. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
  168. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/data_validation/nlp/__init__.py +0 -0
  169. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/decorator.py +0 -0
  170. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/load.py +0 -0
  171. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/metadata.py +0 -0
  172. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/BertScore.py +0 -0
  173. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/BleuScore.py +0 -0
  174. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
  175. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ContextualRecall.py +0 -0
  176. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
  177. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/MeteorScore.py +0 -0
  178. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ModelMetadata.py +0 -0
  179. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ModelMetadataComparison.py +0 -0
  180. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
  181. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/RegardScore.py +0 -0
  182. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
  183. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/RougeScore.py +0 -0
  184. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
  185. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
  186. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
  187. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/TokenDisparity.py +0 -0
  188. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ToxicityScore.py +0 -0
  189. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/__init__.py +0 -0
  190. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
  191. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
  192. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
  193. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
  194. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
  195. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
  196. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
  197. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
  198. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
  199. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/StabilityAnalysis.py +0 -0
  200. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
  201. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
  202. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
  203. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
  204. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
  205. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
  206. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/AnswerRelevance.py +0 -0
  207. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/AnswerSimilarity.py +0 -0
  208. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/AspectCritique.py +0 -0
  209. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
  210. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
  211. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
  212. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/ContextRelevancy.py +0 -0
  213. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
  214. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/ragas/utils.py +0 -0
  215. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
  216. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
  217. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
  218. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
  219. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ClusterPerformance.py +0 -0
  220. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
  221. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
  222. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +0 -0
  223. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/FeatureImportanceComparison.py +0 -0
  224. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
  225. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
  226. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
  227. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
  228. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
  229. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +0 -0
  230. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
  231. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
  232. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +0 -0
  233. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
  234. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +0 -0
  235. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -0
  236. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -0
  237. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
  238. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
  239. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/RegressionModelsPerformanceComparison.py +0 -0
  240. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
  241. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
  242. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +0 -0
  243. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +0 -0
  244. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
  245. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
  246. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
  247. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +0 -0
  248. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
  249. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
  250. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/BoxPierce.py +0 -0
  251. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +0 -0
  252. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
  253. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/GINITable.py +0 -0
  254. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/JarqueBera.py +0 -0
  255. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
  256. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/LJungBox.py +0 -0
  257. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
  258. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +0 -0
  259. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionCoeffsPlot.py +0 -0
  260. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
  261. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
  262. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
  263. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
  264. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
  265. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionModelsCoeffs.py +0 -0
  266. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
  267. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/RunsTest.py +0 -0
  268. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +0 -0
  269. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/ShapiroWilk.py +0 -0
  270. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
  271. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
  272. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/Bias.py +0 -0
  273. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/Clarity.py +0 -0
  274. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/Conciseness.py +0 -0
  275. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/Delimitation.py +0 -0
  276. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
  277. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/Robustness.py +0 -0
  278. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/Specificity.py +0 -0
  279. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/__init__.py +0 -0
  280. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
  281. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/test_providers.py +0 -0
  282. {validmind-2.4.10 → validmind-2.4.13}/validmind/tests/utils.py +0 -0
  283. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/classification/sklearn/Accuracy.py +0 -0
  284. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/classification/sklearn/F1.py +0 -0
  285. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/classification/sklearn/Precision.py +0 -0
  286. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/classification/sklearn/ROC_AUC.py +0 -0
  287. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/classification/sklearn/Recall.py +0 -0
  288. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/composite.py +0 -0
  289. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
  290. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
  291. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
  292. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
  293. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
  294. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
  295. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/sklearn/AdjustedRSquaredScore.py +0 -0
  296. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/sklearn/MeanAbsoluteError.py +0 -0
  297. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/sklearn/MeanSquaredError.py +0 -0
  298. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/sklearn/RSquaredScore.py +0 -0
  299. {validmind-2.4.10 → validmind-2.4.13}/validmind/unit_metrics/regression/sklearn/RootMeanSquaredError.py +0 -0
  300. {validmind-2.4.10 → validmind-2.4.13}/validmind/utils.py +0 -0
  301. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/dataset/__init__.py +0 -0
  302. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/dataset/utils.py +0 -0
  303. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/figure.py +0 -0
  304. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/metric.py +0 -0
  305. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/metric_result.py +0 -0
  306. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/output_template.py +0 -0
  307. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/result_summary.py +0 -0
  308. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/result_wrapper.py +0 -0
  309. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/test.py +0 -0
  310. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/threshold_test.py +0 -0
  311. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test/threshold_test_result.py +0 -0
  312. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test_suite/runner.py +0 -0
  313. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test_suite/summary.py +0 -0
  314. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test_suite/test.py +0 -0
  315. {validmind-2.4.10 → validmind-2.4.13}/validmind/vm_models/test_suite/test_suite.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: validmind
3
- Version: 2.4.10
3
+ Version: 2.4.13
4
4
  Summary: ValidMind Developer Framework
5
5
  License: Commercial License
6
6
  Author: Andres Rodriguez
@@ -10,7 +10,7 @@ description = "ValidMind Developer Framework"
10
10
  license = "Commercial License"
11
11
  name = "validmind"
12
12
  readme = "README.pypi.md"
13
- version = "2.4.10"
13
+ version = "2.4.13"
14
14
 
15
15
  [tool.poetry.dependencies]
16
16
  python = ">=3.8.1,<3.12"
@@ -0,0 +1 @@
1
+ __version__ = "2.4.13"
@@ -152,6 +152,7 @@ def _get_session() -> aiohttp.ClientSession:
152
152
  "X-API-KEY": _api_key,
153
153
  "X-API-SECRET": _api_secret,
154
154
  "X-PROJECT-CUID": _model_cuid,
155
+ "X-MONITORING": str(_monitoring),
155
156
  }
156
157
  )
157
158
 
@@ -48,7 +48,6 @@ def init_dataset(
48
48
  index_name: str = None,
49
49
  date_time_index: bool = False,
50
50
  columns: list = None,
51
- options: dict = None,
52
51
  text_column: str = None,
53
52
  target_column: str = None,
54
53
  feature_columns: list = None,
@@ -72,7 +71,6 @@ def init_dataset(
72
71
  Args:
73
72
  dataset : dataset from various python libraries
74
73
  model (VMModel): ValidMind model object
75
- options (dict): A dictionary of options for the dataset
76
74
  targets (vm.vm.DatasetTargets): A list of target variables
77
75
  target_column (str): The name of the target column in the dataset
78
76
  feature_columns (list): A list of names of feature columns in the dataset
@@ -6,6 +6,8 @@
6
6
  Central class to register inputs
7
7
  """
8
8
 
9
+ from validmind.vm_models.input import VMInput
10
+
9
11
  from .errors import InvalidInputError
10
12
 
11
13
 
@@ -14,6 +16,12 @@ class InputRegistry:
14
16
  self.registry = {}
15
17
 
16
18
  def add(self, key, obj):
19
+ if not isinstance(obj, VMInput):
20
+ raise InvalidInputError(
21
+ f"Input object must be an instance of VMInput. "
22
+ f"Got {type(obj)} instead."
23
+ )
24
+
17
25
  self.registry[key] = obj
18
26
 
19
27
  def get(self, key):
@@ -134,6 +134,7 @@ class DatasetDescription(Metric):
134
134
  )
135
135
  else:
136
136
  vm_dataset_variables[column] = {"id": column, "type": str(type)}
137
+
137
138
  return list(vm_dataset_variables.values())
138
139
 
139
140
  def describe_dataset_field(self, df, field):
@@ -83,32 +83,47 @@ def _combine_summaries(summaries: List[Dict[str, Any]]):
83
83
  )
84
84
 
85
85
 
86
- def _update_plotly_titles(figures, input_groups, title_template):
87
- current_title = figures[0].figure.layout.title.text
86
+ def _get_input_id(v):
87
+ if isinstance(v, str):
88
+ return v # If v is a string, return it as is.
89
+ elif isinstance(v, list) and all(hasattr(item, "input_id") for item in v):
90
+ # If v is a list and all items have an input_id attribute, join their input_id values.
91
+ return ", ".join(item.input_id for item in v)
92
+ elif hasattr(v, "input_id"):
93
+ return v.input_id # If v has an input_id attribute, return it.
94
+ return str(v) # Otherwise, return the string representation of v.
95
+
96
+
97
+ def _update_plotly_titles(figures, input_group, title_template):
98
+ for figure in figures:
99
+
100
+ current_title = figure.figure.layout.title.text
101
+
102
+ input_description = " and ".join(
103
+ f"{key}: {_get_input_id(value)}" for key, value in input_group.items()
104
+ )
88
105
 
89
- for i, figure in enumerate(figures):
90
106
  figure.figure.layout.title.text = title_template.format(
91
107
  current_title=f"{current_title} " if current_title else "",
92
- input_description=" and ".join(
93
- f"{k}: {v if isinstance(v, str) else ', '.join(item.input_id for item in v) if isinstance(v, list) and all(hasattr(item, 'input_id') for item in v) else v.input_id}"
94
- for k, v in input_groups[i].items()
95
- ),
108
+ input_description=input_description,
96
109
  )
97
110
 
98
111
 
99
- def _update_matplotlib_titles(figures, input_groups, title_template):
100
- current_title = (
101
- figures[0].figure._suptitle.get_text() if figures[0].figure._suptitle else ""
102
- )
112
+ def _update_matplotlib_titles(figures, input_group, title_template):
113
+ for figure in figures:
114
+
115
+ current_title = (
116
+ figure.figure._suptitle.get_text() if figure.figure._suptitle else ""
117
+ )
118
+
119
+ input_description = " and ".join(
120
+ f"{key}: {_get_input_id(value)}" for key, value in input_group.items()
121
+ )
103
122
 
104
- for i, figure in enumerate(figures):
105
123
  figure.figure.suptitle(
106
124
  title_template.format(
107
125
  current_title=f"{current_title} " if current_title else "",
108
- input_description=" and ".join(
109
- f"{k}: {v if isinstance(v, str) else ', '.join(item.input_id for item in v) if isinstance(v, list) and all(hasattr(item, 'input_id') for item in v) else v.input_id}"
110
- for k, v in input_groups[i].items()
111
- ),
126
+ input_description=input_description,
112
127
  )
113
128
  )
114
129
 
@@ -120,11 +135,12 @@ def _combine_figures(figure_lists: List[List[Any]], input_groups: List[Dict[str,
120
135
 
121
136
  title_template = "{current_title}({input_description})"
122
137
 
123
- for figures in list(zip(*figure_lists)):
138
+ for idx, figures in enumerate(figure_lists):
139
+ input_group = input_groups[idx]
124
140
  if is_plotly_figure(figures[0].figure):
125
- _update_plotly_titles(figures, input_groups, title_template)
141
+ _update_plotly_titles(figures, input_group, title_template)
126
142
  elif is_matplotlib_figure(figures[0].figure):
127
- _update_matplotlib_titles(figures, input_groups, title_template)
143
+ _update_matplotlib_titles(figures, input_group, title_template)
128
144
  else:
129
145
  logger.warning("Cannot properly annotate png figures")
130
146
 
@@ -80,7 +80,7 @@ def _serialize_dataset(dataset, model):
80
80
  and pre-computed prediction columns, addressing potential hash collisions.
81
81
  """
82
82
  return _fast_hash(
83
- dataset.df[
83
+ dataset._df[
84
84
  [
85
85
  *dataset.feature_columns,
86
86
  dataset.target_column,
@@ -8,6 +8,7 @@ Models entrypoint
8
8
 
9
9
  from .dataset.dataset import VMDataset
10
10
  from .figure import Figure
11
+ from .input import VMInput
11
12
  from .model import R_MODEL_TYPES, ModelAttributes, VMModel
12
13
  from .test.metric import Metric
13
14
  from .test.metric_result import MetricResult
@@ -20,6 +21,7 @@ from .test_suite.runner import TestSuiteRunner
20
21
  from .test_suite.test_suite import TestSuite
21
22
 
22
23
  __all__ = [
24
+ "VMInput",
23
25
  "VMDataset",
24
26
  "VMModel",
25
27
  "Figure",
@@ -7,6 +7,7 @@ Dataset class wrapper
7
7
  """
8
8
 
9
9
  import warnings
10
+ from copy import deepcopy
10
11
 
11
12
  import numpy as np
12
13
  import pandas as pd
@@ -14,6 +15,7 @@ import polars as pl
14
15
 
15
16
  from validmind.logging import get_logger
16
17
  from validmind.models import FunctionModel, PipelineModel
18
+ from validmind.vm_models.input import VMInput
17
19
  from validmind.vm_models.model import VMModel
18
20
 
19
21
  from .utils import ExtraColumns, as_df, compute_predictions, convert_index_to_datetime
@@ -21,7 +23,7 @@ from .utils import ExtraColumns, as_df, compute_predictions, convert_index_to_da
21
23
  logger = get_logger(__name__)
22
24
 
23
25
 
24
- class VMDataset:
26
+ class VMDataset(VMInput):
25
27
  """Base class for VM datasets
26
28
 
27
29
  Child classes should be used to support new dataset types (tensor, polars etc)
@@ -60,7 +62,6 @@ class VMDataset:
60
62
  text_column: str = None,
61
63
  extra_columns: dict = None,
62
64
  target_class_labels: dict = None,
63
- options: dict = None,
64
65
  ):
65
66
  """
66
67
  Initializes a VMDataset instance.
@@ -77,7 +78,6 @@ class VMDataset:
77
78
  feature_columns (str, optional): The feature column names of the dataset. Defaults to None.
78
79
  text_column (str, optional): The text column name of the dataset for nlp tasks. Defaults to None.
79
80
  target_class_labels (Dict, optional): The class labels for the target columns. Defaults to None.
80
- options (Dict, optional): Additional options for the dataset. Defaults to None.
81
81
  """
82
82
  # initialize input_id
83
83
  self.input_id = input_id
@@ -101,8 +101,6 @@ class VMDataset:
101
101
  if date_time_index:
102
102
  self._df = convert_index_to_datetime(self._df)
103
103
 
104
- self.options = options
105
-
106
104
  self.columns = columns or []
107
105
  self.column_aliases = {}
108
106
  self.target_column = target_column
@@ -199,6 +197,56 @@ class VMDataset:
199
197
  "Cannot use precomputed probabilities without precomputed predictions"
200
198
  )
201
199
 
200
+ def with_options(self, **kwargs) -> "VMDataset":
201
+ """Support options provided when passing an input to run_test or run_test_suite
202
+
203
+ Example:
204
+ ```python
205
+ # to only use a certain subset of columns in the dataset:
206
+ run_test(
207
+ "validmind.SomeTestID",
208
+ inputs={
209
+ "dataset": {
210
+ "input_id": "my_dataset_id",
211
+ "columns": ["col1", "col2"],
212
+ }
213
+ }
214
+ )
215
+
216
+ # behind the scenes, this retrieves the dataset object (VMDataset) from the registry
217
+ # and then calls the `with_options()` method and passes `{"columns": ...}`
218
+ ```
219
+
220
+ Args:
221
+ **kwargs: Options:
222
+ - columns: Filter columns in the dataset
223
+
224
+ Returns:
225
+ VMDataset: A new instance of the dataset with only the specified columns
226
+ """
227
+ if "columns" in kwargs:
228
+ # filter columns (create a temp copy of self with only specified columns)
229
+ # TODO: need a more robust mechanism for this as we expand on this feature
230
+ columns = kwargs.pop("columns")
231
+
232
+ new = deepcopy(self)
233
+
234
+ new._set_feature_columns(
235
+ [col for col in new.feature_columns if col in columns]
236
+ )
237
+ new.text_column = new.text_column if new.text_column in columns else None
238
+ new.target_column = (
239
+ new.target_column if new.target_column in columns else None
240
+ )
241
+ new.extra_columns.extras = new.extra_columns.extras.intersection(columns)
242
+
243
+ return new
244
+
245
+ if kwargs:
246
+ raise NotImplementedError(
247
+ f"Options {kwargs} are not supported for this input"
248
+ )
249
+
202
250
  def assign_predictions(
203
251
  self,
204
252
  model: VMModel,
@@ -444,7 +492,6 @@ class DataFrameDataset(VMDataset):
444
492
  feature_columns: list = None,
445
493
  text_column: str = None,
446
494
  target_class_labels: dict = None,
447
- options: dict = None,
448
495
  date_time_index: bool = False,
449
496
  ):
450
497
  """
@@ -459,7 +506,6 @@ class DataFrameDataset(VMDataset):
459
506
  feature_columns (list, optional): The feature columns of the dataset. Defaults to None.
460
507
  text_column (str, optional): The text column name of the dataset for NLP tasks. Defaults to None.
461
508
  target_class_labels (dict, optional): The class labels for the target columns. Defaults to None.
462
- options (dict, optional): Additional options for the dataset. Defaults to None.
463
509
  date_time_index (bool, optional): Whether to use date-time index. Defaults to False.
464
510
  """
465
511
  index = None
@@ -478,7 +524,6 @@ class DataFrameDataset(VMDataset):
478
524
  feature_columns=feature_columns,
479
525
  text_column=text_column,
480
526
  target_class_labels=target_class_labels,
481
- options=options,
482
527
  date_time_index=date_time_index,
483
528
  )
484
529
 
@@ -498,7 +543,6 @@ class PolarsDataset(VMDataset):
498
543
  feature_columns: list = None,
499
544
  text_column: str = None,
500
545
  target_class_labels: dict = None,
501
- options: dict = None,
502
546
  date_time_index: bool = False,
503
547
  ):
504
548
  """
@@ -513,7 +557,6 @@ class PolarsDataset(VMDataset):
513
557
  feature_columns (list, optional): The feature columns of the dataset. Defaults to None.
514
558
  text_column (str, optional): The text column name of the dataset for NLP tasks. Defaults to None.
515
559
  target_class_labels (dict, optional): The class labels for the target columns. Defaults to None.
516
- options (dict, optional): Additional options for the dataset. Defaults to None.
517
560
  date_time_index (bool, optional): Whether to use date-time index. Defaults to False.
518
561
  """
519
562
  super().__init__(
@@ -528,7 +571,6 @@ class PolarsDataset(VMDataset):
528
571
  feature_columns=feature_columns,
529
572
  text_column=text_column,
530
573
  target_class_labels=target_class_labels,
531
- options=options,
532
574
  date_time_index=date_time_index,
533
575
  )
534
576
 
@@ -551,7 +593,6 @@ class TorchDataset(VMDataset):
551
593
  feature_columns: list = None,
552
594
  text_column: str = None,
553
595
  target_class_labels: dict = None,
554
- options: dict = None,
555
596
  ):
556
597
  """
557
598
  Initializes a TorchDataset instance.
@@ -609,5 +650,4 @@ class TorchDataset(VMDataset):
609
650
  text_column=text_column,
610
651
  extra_columns=extra_columns,
611
652
  target_class_labels=target_class_labels,
612
- options=options,
613
653
  )
@@ -0,0 +1,31 @@
1
+ # Copyright © 2023-2024 ValidMind Inc. All rights reserved.
2
+ # See the LICENSE file in the root of this repository for details.
3
+ # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
+
5
+ """Base class for ValidMind Input types"""
6
+
7
+ from abc import ABC
8
+
9
+
10
+ class VMInput(ABC):
11
+ """
12
+ Base class for ValidMind Input types
13
+ """
14
+
15
+ def with_options(self, **kwargs) -> "VMInput":
16
+ """
17
+ Allows for setting options on the input object that are passed by the user
18
+ when using the input to run a test or set of tests
19
+
20
+ To allow options, just override this method in the subclass (see VMDataset)
21
+ and ensure that it returns a new instance of the input with the specified options
22
+ set.
23
+
24
+ Args:
25
+ **kwargs: Arbitrary keyword arguments that will be passed to the input object
26
+
27
+ Returns:
28
+ VMInput: A new instance of the input with the specified options set
29
+ """
30
+ if kwargs:
31
+ raise NotImplementedError("This type of input does not support options")
@@ -7,11 +7,13 @@ Model class wrapper module
7
7
  """
8
8
  import importlib
9
9
  import inspect
10
- from abc import ABC, abstractmethod
10
+ from abc import abstractmethod
11
11
  from dataclasses import dataclass
12
12
 
13
13
  from validmind.errors import MissingOrInvalidModelPredictFnError
14
14
 
15
+ from .input import VMInput
16
+
15
17
  SUPPORTED_LIBRARIES = {
16
18
  "catboost": "CatBoostModel",
17
19
  "xgboost": "XGBoostModel",
@@ -77,7 +79,7 @@ class ModelAttributes:
77
79
  )
78
80
 
79
81
 
80
- class VMModel(ABC):
82
+ class VMModel(VMInput):
81
83
  """
82
84
  An base class that wraps a trained model instance and its associated data.
83
85
 
@@ -78,13 +78,12 @@ class TestInput:
78
78
  ... (any): Any other arbitrary inputs that can be used by tests
79
79
  """
80
80
 
81
- # TODO: we need to look into adding metadata for test inputs and logging that
82
-
83
81
  def __init__(self, inputs):
84
82
  """Initialize with either a dictionary of inputs"""
85
83
  for key, value in inputs.items():
86
84
  # 1) retrieve input object from input registry if an input_id string is provided
87
85
  # 2) check the input_id type if a list of inputs (mix of strings and objects) is provided
86
+ # 3) if its a dict, it should contain the `input_id` key as well as other options
88
87
  if isinstance(value, str):
89
88
  value = input_registry.get(key=value)
90
89
  elif isinstance(value, list) or isinstance(value, tuple):
@@ -92,6 +91,14 @@ class TestInput:
92
91
  input_registry.get(key=v) if isinstance(v, str) else v
93
92
  for v in value
94
93
  ]
94
+ elif isinstance(value, dict):
95
+ assert "input_id" in value, (
96
+ "Input dictionary must contain an 'input_id' key "
97
+ "to retrieve the input object from the input registry."
98
+ )
99
+ value = input_registry.get(key=value.get("input_id")).with_options(
100
+ **{k: v for k, v in value.items() if k != "input_id"}
101
+ )
95
102
 
96
103
  setattr(self, key, value)
97
104
 
@@ -1 +0,0 @@
1
- __version__ = "2.4.10"
File without changes
File without changes