|
1 | 1 |
|
2 | 2 | from contextlib import contextmanager |
3 | 3 | from typing import Any |
| 4 | +from unittest.mock import MagicMock |
4 | 5 | import pytest |
5 | 6 | import numpy as np |
6 | 7 | import pandas as pd |
| 8 | +from pytest_mock import MockerFixture |
7 | 9 |
|
8 | 10 | from cobra.preprocessing.preprocessor import PreProcessor |
9 | 11 |
|
@@ -146,3 +148,33 @@ def test_get_variable_list(self, continuous_vars: list, |
146 | 148 | discrete_vars) |
147 | 149 |
|
148 | 150 | assert actual == expected |
| 151 | + |
| 152 | + @staticmethod |
| 153 | + def mock_transform(df: pd.DataFrame, args): |
| 154 | + """Mock the transform method.""" |
| 155 | + df["new_column"] = "Hello World" |
| 156 | + return df |
| 157 | + |
| 158 | + def test_mutable_train_data_fit_transform(self, mocker: MockerFixture): |
| 159 | + """Test if the train_data input is not changed when performing fit_transform.""" |
| 160 | + train_data = pd.DataFrame([[1, "2", 3], [10, "20", 30], [100, "200", 300]], columns=["foo", "bar", "baz"]) |
| 161 | + preprocessor = PreProcessor.from_params( |
| 162 | + model_type="classification", |
| 163 | + n_bins=10, |
| 164 | + weight= 0.8 |
| 165 | + ) |
| 166 | + preprocessor._categorical_data_processor = MagicMock() |
| 167 | + preprocessor._categorical_data_processor.transform = self.mock_transform |
| 168 | + preprocessor._discretizer = MagicMock() |
| 169 | + preprocessor._discretizer.transform = self.mock_transform |
| 170 | + preprocessor._target_encoder = MagicMock() |
| 171 | + preprocessor._target_encoder.transform = self.mock_transform |
| 172 | + |
| 173 | + result = preprocessor.fit_transform( |
| 174 | + train_data, |
| 175 | + continuous_vars=["foo"], |
| 176 | + discrete_vars=["bar"], |
| 177 | + target_column_name=["baz"] |
| 178 | + ) |
| 179 | + assert "new_column" not in train_data.columns |
| 180 | + assert "new_column" in result.columns |
0 commit comments