From 335b6874bfc717a4662ff10ee3dd9b98c287b923 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler <61934744+phofl@users.noreply.github.com> Date: Thu, 7 Dec 2023 20:20:05 +0100 Subject: [PATCH 1/2] CoW: Warn for transform inplace modification --- pandas/core/series.py | 6 +++++- pandas/tests/copy_view/test_methods.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pandas/core/series.py b/pandas/core/series.py index 464e066b4e86a..de4b3e750a7e8 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -4740,7 +4740,11 @@ def transform( ) -> DataFrame | Series: # Validate axis argument self._get_axis_number(axis) - ser = self.copy(deep=False) if using_copy_on_write() else self + ser = ( + self.copy(deep=False) + if using_copy_on_write() or warn_copy_on_write() + else self + ) result = SeriesApply(ser, func=func, args=args, kwargs=kwargs).transform() return result diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 1e3c95dbc1ca3..558b483933f25 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -1938,8 +1938,8 @@ def func(ser): ser.iloc[0] = 100 return ser - # TODO(CoW-warn) should warn? - ser.transform(func) + with tm.assert_cow_warning(warn_copy_on_write): + ser.transform(func) if using_copy_on_write: tm.assert_series_equal(ser, ser_orig) From c7d1eec138f82cf4b8c7f4adf7273bedc8c45598 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler <61934744+phofl@users.noreply.github.com> Date: Thu, 7 Dec 2023 20:31:59 +0100 Subject: [PATCH 2/2] Remove todo --- pandas/core/frame.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 1630c2c31920d..179279cc08bab 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -4895,7 +4895,6 @@ def eval(self, expr: str, *, inplace: bool = False, **kwargs) -> Any | None: inplace = validate_bool_kwarg(inplace, "inplace") kwargs["level"] = kwargs.pop("level", 0) + 1 - # TODO(CoW) those index/column resolvers create unnecessary refs to `self` index_resolvers = self._get_index_resolvers() column_resolvers = self._get_cleaned_column_resolvers() resolvers = column_resolvers, index_resolvers