Repository: BBVA/mercury-robust (language: python)

Issue:
Show in LinearCombinationsTest the continuous variables with linear combinations
Currently, when the LinearCombinations fails because it finds linear combinations in continuous variables it doesn't show which variables contain the linear combinations. This PR has the modifications to show which are these linear combinations.


Discussion / hints:

Fix patch:
diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index 4844392..f5f6d74 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.0.2
+current_version = 0.0.3
 parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(-(?P<release>\w+)\.(?P<build>\d+))?
 serialize = 
 	{major}.{minor}.{patch}-{release}.{build}
diff --git a/README.md b/README.md
index bc21161..769341c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # mercury-robust
 
 [![](https://github.com/BBVA/mercury-robust/actions/workflows/test.yml/badge.svg)](https://github.com/BBVA/mercury-robust)
-![](https://img.shields.io/badge/latest-0.0.2-blue)
+![](https://img.shields.io/badge/latest-0.0.3-blue)
 
 ## Mercury project at BBVA
 
diff --git a/docs/index.md b/docs/index.md
index fb15234..77795e7 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,7 +1,7 @@
 # mercury-robust
 
 [![](https://github.com/BBVA/mercury-robust/actions/workflows/test.yml/badge.svg)](https://github.com/BBVA/mercury-robust)
-![](https://img.shields.io/badge/latest-0.0.2-blue)
+![](https://img.shields.io/badge/latest-3-blue)
 
 ***mercury-robust*** is a library to perform robust testing on models and/or datasets.
 
diff --git a/mercury/robust/__init__.py b/mercury/robust/__init__.py
index 49b2ada..8d089c9 100644
--- a/mercury/robust/__init__.py
+++ b/mercury/robust/__init__.py
@@ -4,6 +4,6 @@
 Top-level package for mercury robust.
 """
 
-__version__ = '0.0.2'
+__version__ = '0.0.3'
 
 from .suite import TestSuite  # noqa: 402
diff --git a/pyproject.toml b/pyproject.toml
index bd99c16..592f2f5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
 [project]
 name = "mercury-robust"
 license = {file = "LICENSE.txt"}
-version = "0.0.2"
+version = "0.0.3"
 authors = [
   { name="Mercury Team", email="mercury.group@bbva.com" },
 ]


Test patch:
diff --git a/mercury/robust/data_tests.py b/mercury/robust/data_tests.py
index 2a2939e..cb42c71 100644
--- a/mercury/robust/data_tests.py
+++ b/mercury/robust/data_tests.py
@@ -134,7 +134,14 @@ def run(self, *args, **kwargs):
             )
 
         if lin_combinations is not None:
-            raise FailedTestError("Test failed. Linear combinations for continuous features were encountered.")
+            # Create message with the linear combinations found
+            lin_combinations = np.around(lin_combinations, decimals=5)
+            lin_combs_found = []
+            for i in range(lin_combinations.shape[0]):
+                lin_comb_idx = np.where(lin_combinations[i] != 0)[0]
+                lin_comb_cols = self.base_dataset.loc[:, numeric_feats].columns[lin_comb_idx].tolist()
+                lin_combs_found.append(lin_comb_cols)
+            raise FailedTestError(f"Test failed. Linear combinations for continuous features were encountered: {lin_combs_found}.")
 
         individually_redundant = CategoryStruct.individually_redundant(self.base_dataset, current_schema.categorical_feats)
         if len(individually_redundant) > 0:
diff --git a/tests/test_data_tests.py b/tests/test_data_tests.py
index 08e167e..3f136cb 100644
--- a/tests/test_data_tests.py
+++ b/tests/test_data_tests.py
@@ -857,4 +857,20 @@ def test_no_duplicated_test():
     with pytest.raises(FailedTestError):
         test.run()
 
+def test_lin_combinations_cont():
 
+    df = pd.DataFrame()
+    df["f1"] = np.random.uniform(size=100)
+    df["f2"] = df["f1"] * 2
+    df["f3"] = np.random.uniform(size=100)
+    df["f4"] = df["f1"] + df["f2"]
+    df["f5"] = np.random.uniform(size=100)
+
+    df["f6"] = np.random.uniform(size=100)
+    df["f7"] = df["f6"] * 3
+    df["f8"] = df["f6"] * 0.1
+
+    schma_reference = DataSchema().generate(df).calculate_statistics()
+    linear_comb_test = LinearCombinationsTest(df, dataset_schema=schma_reference)
+    with pytest.raises(FailedTestError, match="'f1', 'f2'"):
+        linear_comb_test.run()