validmind 1.7.0__tar.gz → 1.8.1__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 (73) hide show
  1. {validmind-1.7.0 → validmind-1.8.1}/PKG-INFO +1 -3
  2. {validmind-1.7.0 → validmind-1.8.1}/pyproject.toml +9 -4
  3. {validmind-1.7.0 → validmind-1.8.1}/validmind/__init__.py +8 -1
  4. validmind-1.7.0/validmind/client.pyx → validmind-1.8.1/validmind/client.py +48 -41
  5. validmind-1.7.0/validmind/data_validation/threshold_tests.pyx → validmind-1.8.1/validmind/data_validation/threshold_tests.py +1 -2
  6. validmind-1.7.0/validmind/datasets/classification/customer_churn.pyx → validmind-1.8.1/validmind/datasets/classification/customer_churn.py +1 -1
  7. validmind-1.8.1/validmind/datasets/classification/datasets/bank_customer_churn.csv +8001 -0
  8. validmind-1.8.1/validmind/datasets/classification/datasets/taiwan_credit.csv +30001 -0
  9. validmind-1.7.0/validmind/datasets/classification/taiwan_credit.pyx → validmind-1.8.1/validmind/datasets/classification/taiwan_credit.py +1 -1
  10. validmind-1.8.1/validmind/datasets/regression/__init__.py +57 -0
  11. validmind-1.8.1/validmind/datasets/regression/datasets/fred_loan_rates.csv +3552 -0
  12. validmind-1.8.1/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +126 -0
  13. validmind-1.8.1/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +126 -0
  14. validmind-1.8.1/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +126 -0
  15. validmind-1.8.1/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +126 -0
  16. validmind-1.8.1/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +126 -0
  17. validmind-1.8.1/validmind/datasets/regression/datasets/lending_club_loan_rates.csv +138 -0
  18. validmind-1.8.1/validmind/datasets/regression/fred.py +132 -0
  19. validmind-1.8.1/validmind/datasets/regression/lending_club.py +70 -0
  20. validmind-1.8.1/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
  21. validmind-1.8.1/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
  22. validmind-1.8.1/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
  23. validmind-1.8.1/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
  24. validmind-1.8.1/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
  25. validmind-1.7.0/validmind/model_validation/sklearn/threshold_tests.pyx → validmind-1.8.1/validmind/model_validation/sklearn/threshold_tests.py +9 -9
  26. validmind-1.8.1/validmind/model_validation/statsmodels/__init__.py +0 -0
  27. validmind-1.7.0/validmind/model_validation/statsmodels/metrics.pyx → validmind-1.8.1/validmind/model_validation/statsmodels/metrics.py +123 -138
  28. {validmind-1.7.0 → validmind-1.8.1}/validmind/test_plans/__init__.py +0 -4
  29. validmind-1.7.0/validmind/test_plans/binary_classifier.pyx → validmind-1.8.1/validmind/test_plans/binary_classifier.py +0 -15
  30. validmind-1.7.0/validmind/test_plans/statsmodels_timeseries.pyx → validmind-1.8.1/validmind/test_plans/statsmodels_timeseries.py +2 -2
  31. validmind-1.7.0/validmind/test_plans/tabular_datasets.pyx → validmind-1.8.1/validmind/test_plans/tabular_datasets.py +0 -13
  32. validmind-1.7.0/validmind/test_plans/time_series.pyx → validmind-1.8.1/validmind/test_plans/time_series.py +3 -3
  33. validmind-1.8.1/validmind/test_suites/__init__.py +73 -0
  34. validmind-1.8.1/validmind/test_suites/test_suites.py +48 -0
  35. {validmind-1.7.0 → validmind-1.8.1}/validmind/vm_models/__init__.py +2 -0
  36. validmind-1.7.0/validmind/vm_models/dataset.pyx → validmind-1.8.1/validmind/vm_models/dataset.py +17 -8
  37. validmind-1.8.1/validmind/vm_models/test_suite.py +57 -0
  38. validmind-1.7.0/validmind/api_client.c +0 -9481
  39. validmind-1.7.0/validmind/api_client.cpython-310-x86_64-linux-gnu.so +0 -0
  40. validmind-1.7.0/validmind/client.c +0 -7198
  41. validmind-1.7.0/validmind/client.cpython-310-x86_64-linux-gnu.so +0 -0
  42. validmind-1.7.0/validmind/datasets/regression/__init__.py +0 -3
  43. validmind-1.7.0/validmind/datasets/regression/fred.pyx +0 -7
  44. validmind-1.7.0/validmind/datasets/regression/lending_club.pyx +0 -7
  45. validmind-1.7.0/validmind/model_utils.c +0 -9281
  46. validmind-1.7.0/validmind/model_utils.cpython-310-x86_64-linux-gnu.so +0 -0
  47. validmind-1.7.0/validmind/utils.c +0 -10284
  48. validmind-1.7.0/validmind/utils.cpython-310-x86_64-linux-gnu.so +0 -0
  49. /validmind-1.7.0/validmind/api_client.pyx → /validmind-1.8.1/validmind/api_client.py +0 -0
  50. {validmind-1.7.0 → validmind-1.8.1}/validmind/data_validation/__init__.py +0 -0
  51. /validmind-1.7.0/validmind/data_validation/metrics.pyx → /validmind-1.8.1/validmind/data_validation/metrics.py +0 -0
  52. {validmind-1.7.0/validmind/model_validation/sklearn → validmind-1.8.1/validmind/datasets}/__init__.py +0 -0
  53. {validmind-1.7.0 → validmind-1.8.1}/validmind/datasets/classification/__init__.py +0 -0
  54. /validmind-1.7.0/validmind/model_utils.pyx → /validmind-1.8.1/validmind/model_utils.py +0 -0
  55. {validmind-1.7.0 → validmind-1.8.1}/validmind/model_validation/__init__.py +0 -0
  56. /validmind-1.7.0/validmind/model_validation/model_metadata.pyx → /validmind-1.8.1/validmind/model_validation/model_metadata.py +0 -0
  57. {validmind-1.7.0/validmind/model_validation/statsmodels → validmind-1.8.1/validmind/model_validation/sklearn}/__init__.py +0 -0
  58. /validmind-1.7.0/validmind/model_validation/sklearn/metrics.pyx → /validmind-1.8.1/validmind/model_validation/sklearn/metrics.py +0 -0
  59. /validmind-1.7.0/validmind/model_validation/statsmodels/threshold_tests.pyx → /validmind-1.8.1/validmind/model_validation/statsmodels/threshold_tests.py +0 -0
  60. /validmind-1.7.0/validmind/model_validation/utils.pyx → /validmind-1.8.1/validmind/model_validation/utils.py +0 -0
  61. /validmind-1.7.0/validmind/utils.pyx → /validmind-1.8.1/validmind/utils.py +0 -0
  62. /validmind-1.7.0/validmind/vm_models/dataset_utils.pyx → /validmind-1.8.1/validmind/vm_models/dataset_utils.py +0 -0
  63. /validmind-1.7.0/validmind/vm_models/figure.pyx → /validmind-1.8.1/validmind/vm_models/figure.py +0 -0
  64. /validmind-1.7.0/validmind/vm_models/metric.pyx → /validmind-1.8.1/validmind/vm_models/metric.py +0 -0
  65. /validmind-1.7.0/validmind/vm_models/metric_result.pyx → /validmind-1.8.1/validmind/vm_models/metric_result.py +0 -0
  66. /validmind-1.7.0/validmind/vm_models/model.pyx → /validmind-1.8.1/validmind/vm_models/model.py +0 -0
  67. /validmind-1.7.0/validmind/vm_models/plot_utils.pyx → /validmind-1.8.1/validmind/vm_models/plot_utils.py +0 -0
  68. /validmind-1.7.0/validmind/vm_models/result_summary.pyx → /validmind-1.8.1/validmind/vm_models/result_summary.py +0 -0
  69. /validmind-1.7.0/validmind/vm_models/test_context.pyx → /validmind-1.8.1/validmind/vm_models/test_context.py +0 -0
  70. /validmind-1.7.0/validmind/vm_models/test_plan.pyx → /validmind-1.8.1/validmind/vm_models/test_plan.py +0 -0
  71. /validmind-1.7.0/validmind/vm_models/test_plan_result.pyx → /validmind-1.8.1/validmind/vm_models/test_plan_result.py +0 -0
  72. /validmind-1.7.0/validmind/vm_models/test_result.pyx → /validmind-1.8.1/validmind/vm_models/test_result.py +0 -0
  73. /validmind-1.7.0/validmind/vm_models/threshold_test.pyx → /validmind-1.8.1/validmind/vm_models/threshold_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: validmind
3
- Version: 1.7.0
3
+ Version: 1.8.1
4
4
  Summary: ValidMind Developer Framework
5
5
  Author: Andres Rodriguez
6
6
  Author-email: andres@validmind.ai
@@ -12,7 +12,6 @@ Classifier: Programming Language :: Python :: 3.10
12
12
  Provides-Extra: r-support
13
13
  Requires-Dist: arch (>=5.4.0,<6.0.0)
14
14
  Requires-Dist: click (>=8.0.4,<9.0.0)
15
- Requires-Dist: cython (>=0.29.34,<0.30.0)
16
15
  Requires-Dist: dython (>=0.7.1,<0.8.0)
17
16
  Requires-Dist: ipython (>=8.11.0,<9.0.0)
18
17
  Requires-Dist: myst-parser (>=1.0.0,<2.0.0)
@@ -33,5 +32,4 @@ Requires-Dist: sphinx-rtd-theme (>=1.2.0,<2.0.0)
33
32
  Requires-Dist: statsmodels (>=0.13.5,<0.14.0)
34
33
  Requires-Dist: tabulate (>=0.8.9,<0.9.0)
35
34
  Requires-Dist: tqdm (>=4.64.0,<5.0.0)
36
- Requires-Dist: twine (>=4.0.2,<5.0.0)
37
35
  Requires-Dist: xgboost (>=1.5.2,<2.0.0)
@@ -6,14 +6,18 @@ authors = [
6
6
  "Luis Pallares <luis@validmind.ai>",
7
7
  ]
8
8
  description = "ValidMind Developer Framework"
9
- include = ["validmind/*.c", "validmind/*.py", "validmind/*.pyx", "validmind/*.pyd", "validmind/*.so"]
9
+ # include = [
10
+ # "validmind/**/*.c",
11
+ # "validmind/**/*.pyx",
12
+ # "validmind/**/*.pyd",
13
+ # "validmind/**/*.so",
14
+ # ]
10
15
  name = "validmind"
11
- version = "1.7.0"
16
+ version = "1.8.1"
12
17
 
13
18
  [tool.poetry.dependencies]
14
19
  arch = "^5.4.0"
15
20
  click = "^8.0.4"
16
- cython = "^0.29.34"
17
21
  dython = "^0.7.1"
18
22
  ipython = "^8.11.0"
19
23
  myst-parser = "^1.0.0"
@@ -35,17 +39,18 @@ sphinx-rtd-theme = "^1.2.0"
35
39
  statsmodels = "^0.13.5"
36
40
  tabulate = "^0.8.9"
37
41
  tqdm = "^4.64.0"
38
- twine = "^4.0.2"
39
42
  xgboost = "^1.5.2"
40
43
 
41
44
  [tool.poetry.group.dev.dependencies]
42
45
  black = "^22.1.0"
43
46
  click = "^8.1.3"
47
+ cython = "^0.29.34"
44
48
  flake8 = "^4.0.1"
45
49
  ipykernel = "^6.22.0"
46
50
  jupyter = "^1.0.0"
47
51
  jupyterlab = "^3.6.3"
48
52
  pytest = "^5.2"
53
+ twine = "^4.0.2"
49
54
 
50
55
  [tool.poetry.extras]
51
56
  r-support = ["rpy2"]
@@ -30,7 +30,13 @@ from .api_client import ( # noqa: E402
30
30
  log_figure,
31
31
  )
32
32
 
33
- from .client import init_dataset, init_model, init_r_model, run_test_plan # noqa: E402
33
+ from .client import ( # noqa: E402
34
+ init_dataset,
35
+ init_model,
36
+ init_r_model,
37
+ run_test_plan,
38
+ run_test_suite,
39
+ )
34
40
 
35
41
  # TODO: need to fix this import * situation
36
42
  from .data_validation import * # noqa
@@ -45,6 +51,7 @@ __all__ = [ # noqa
45
51
  "init_r_model",
46
52
  "test_plans",
47
53
  "run_test_plan",
54
+ "run_test_suite",
48
55
  # Framework Logging API
49
56
  "log_dataset",
50
57
  "log_figure",
@@ -8,7 +8,8 @@ import xgboost as xgb
8
8
  from sklearn.linear_model import LinearRegression, LogisticRegression
9
9
 
10
10
  # from .model_validation import evaluate_model as mod_evaluate_model
11
- from .test_plans import get_by_name
11
+ from .test_plans import get_by_name as get_test_plan_by_name
12
+ from .test_suites import get_by_name as get_test_suite_by_name
12
13
  from .vm_models import (
13
14
  Dataset,
14
15
  DatasetTargets,
@@ -16,6 +17,7 @@ from .vm_models import (
16
17
  ModelAttributes,
17
18
  R_MODEL_TYPES,
18
19
  TestPlan,
20
+ TestSuite,
19
21
  )
20
22
 
21
23
 
@@ -65,10 +67,10 @@ def init_dataset(
65
67
 
66
68
 
67
69
  def init_model(
68
- model: object,
69
- train_ds: Dataset = None,
70
- test_ds: Dataset = None,
71
- validation_ds: Dataset = None
70
+ model: object,
71
+ train_ds: Dataset = None,
72
+ test_ds: Dataset = None,
73
+ validation_ds: Dataset = None,
72
74
  ) -> Model:
73
75
  """
74
76
  Initializes a VM Model, which can then be passed to other functions
@@ -92,7 +94,9 @@ def init_model(
92
94
  )
93
95
  )
94
96
 
95
- return Model.init_vm_model(model, train_ds, test_ds, validation_ds, attributes=ModelAttributes())
97
+ return Model.init_vm_model(
98
+ model, train_ds, test_ds, validation_ds, attributes=ModelAttributes()
99
+ )
96
100
 
97
101
 
98
102
  def init_r_model(model_path: str, model_type: str) -> Model:
@@ -193,7 +197,7 @@ def run_test_plan(test_plan_name, send=True, **kwargs):
193
197
  dict: A dictionary of test results
194
198
  """
195
199
  try:
196
- Plan: TestPlan = get_by_name(test_plan_name)
200
+ Plan: TestPlan = get_test_plan_by_name(test_plan_name)
197
201
  except ValueError as exc:
198
202
  raise ValueError(
199
203
  "Error retrieving test plan {}. {}".format(test_plan_name, str(exc))
@@ -211,37 +215,40 @@ def run_test_plan(test_plan_name, send=True, **kwargs):
211
215
  return plan
212
216
 
213
217
 
214
- # def evaluate_model(model, train_set, val_set, test_set, eval_opts=None, send=True):
215
- # """
216
- # Evaluates a model and logs results to the ValidMind API. This function will log information
217
- # about the trained model (parameters, etc.), training metrics, test metrics, and run model
218
- # evaluation tests.
219
-
220
- # :param model: The model to evaluate. Only scikit-learn and XGBoost models are supported at the moment
221
- # :param (pd.DataFrame, pd.DataFrame) train_set: (x_train, y_train) tuple
222
- # :param (pd.DataFrame, pd.DataFrame) val_set: (x_val, y_val) tuple
223
- # :param (pd.DataFrame, pd.DataFrame) test_set: (x_test, y_test) tuple
224
- # :param dict eval_opts: A dictionary of options for the model evaluation
225
- # :param bool send: Whether to post the test results to the API. send=False is useful for testing
226
- # """
227
- # print("Logging model metadata and parameters...")
228
- # log_model(model)
229
-
230
- # print("Extracting training/validation set metrics from trained model...")
231
- # x_train, y_train = train_set
232
- # x_val, y_val = val_set
233
-
234
- # log_training_metrics(
235
- # model, x_train.copy(), y_train.copy(), x_val.copy(), y_val.copy()
236
- # )
237
-
238
- # print("Running model evaluation tests...")
239
- # eval_results = mod_evaluate_model(
240
- # model,
241
- # test_set=test_set,
242
- # train_set=train_set,
243
- # eval_opts=eval_opts,
244
- # send=send,
245
- # )
246
-
247
- # return eval_results
218
+ def run_test_suite(test_suite_name, send=True, **kwargs):
219
+ """High Level function for running a test suite
220
+
221
+ This function provides a high level interface for running a test suite. A test suite is
222
+ a collection of test plans. This function will automatically find the correct test suite
223
+ class based on the test_suite_name, initialize each of the test plans, and run them.
224
+
225
+ Args:
226
+ test_suite_name (str): The test suite name (e.g. 'binary_classifier_full_suite')
227
+ send (bool, optional): Whether to post the test results to the API. send=False is useful for testing. Defaults to True.
228
+ **kwargs: Additional keyword arguments to pass to the test suite. These will provide
229
+ the TestSuite instance with the necessary context to run the tests. e.g. dataset, model etc.
230
+ See the documentation for the specific test plan, metric or threshold test for more details.
231
+
232
+ Raises:
233
+ ValueError: If the test suite name is not found or if there is an error initializing the test suite
234
+
235
+ Returns:
236
+ TestSuite: the TestSuite instance
237
+ """
238
+ try:
239
+ Suite: TestSuite = get_test_suite_by_name(test_suite_name)
240
+ except ValueError as exc:
241
+ raise ValueError(
242
+ "Error retrieving test suite {}. {}".format(test_suite_name, str(exc))
243
+ )
244
+
245
+ try:
246
+ suite = Suite(**kwargs)
247
+ except ValueError as exc:
248
+ raise ValueError(
249
+ "Error initializing test suite {}. {}".format(test_suite_name, str(exc))
250
+ )
251
+
252
+ suite.run(send=send)
253
+
254
+ return suite
@@ -389,7 +389,7 @@ class TimeSeriesOutliers(ThresholdTest):
389
389
  raise ValueError("zscore_threshold must be provided in params")
390
390
  zscore_threshold = self.params["zscore_threshold"]
391
391
 
392
- temp_df = self.df.copy(deep=True)
392
+ temp_df = self.df.copy()
393
393
  temp_df = temp_df.dropna()
394
394
  typeset = ProfilingTypeSet(Settings())
395
395
  dataset_types = typeset.infer_type(temp_df)
@@ -462,7 +462,6 @@ class TimeSeriesOutliers(ThresholdTest):
462
462
  Returns:
463
463
  matplotlib.figure.Figure: A matplotlib figure object with subplots for each variable.
464
464
  """
465
- print(outliers_table)
466
465
  sns.set(style="darkgrid")
467
466
  n_variables = len(df.columns)
468
467
  fig, axes = plt.subplots(n_variables, 1, sharex=True)
@@ -11,7 +11,7 @@ from . import (
11
11
  )
12
12
 
13
13
  current_path = os.path.dirname(os.path.abspath(__file__))
14
- dataset_path = os.path.join(current_path, "..", "..", "..", "notebooks", "datasets")
14
+ dataset_path = os.path.join(current_path, "datasets")
15
15
 
16
16
  drop_columns = ["RowNumber", "CustomerId", "Surname", "CreditScore"]
17
17
  boolean_columns = ["Gender"]