From 80dccb58eb54214a92058d3b556669be59b8b9e9 Mon Sep 17 00:00:00 2001 From: Patrick Hoefler Date: Tue, 20 Jun 2023 22:01:28 +0200 Subject: [PATCH 1/2] CoW: Add test for mask --- pandas/tests/copy_view/test_methods.py | 33 +++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 3af47d0b37338..ffb92ff927471 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -1428,11 +1428,18 @@ def test_putmask_dont_copy_some_blocks(using_copy_on_write, val, exp): @pytest.mark.parametrize("dtype", ["int64", "Int64"]) -def test_where_noop(using_copy_on_write, dtype): +@pytest.mark.parametrize( + "func", + [ + lambda ser: ser.where(ser < 0, 10), + lambda ser: ser.mask(ser >= 0, 10), + ], +) +def test_where_mask_noop(using_copy_on_write, dtype, func): ser = Series([1, 2, 3], dtype=dtype) ser_orig = ser.copy() - result = ser.where(ser > 0, 10) + result = func(ser) if using_copy_on_write: assert np.shares_memory(get_array(ser), get_array(result)) @@ -1446,22 +1453,36 @@ def test_where_noop(using_copy_on_write, dtype): @pytest.mark.parametrize("dtype", ["int64", "Int64"]) -def test_where(using_copy_on_write, dtype): +@pytest.mark.parametrize( + "func", + [ + lambda ser: ser.where(ser < 0, 10), + lambda ser: ser.mask(ser >= 0, 10), + ], +) +def test_where_mask(using_copy_on_write, dtype, func): ser = Series([1, 2, 3], dtype=dtype) ser_orig = ser.copy() - result = ser.where(ser < 0, 10) + result = func(ser) assert not np.shares_memory(get_array(ser), get_array(result)) tm.assert_series_equal(ser, ser_orig) @pytest.mark.parametrize("dtype, val", [("int64", 10.5), ("Int64", 10)]) -def test_where_noop_on_single_column(using_copy_on_write, dtype, val): +@pytest.mark.parametrize( + "func", + [ + lambda df, val: df.where(df < 0, val), + lambda df, val: df.mask(df >= 0, val), + ], +) +def test_where_mask_noop_on_single_column(using_copy_on_write, dtype, val, func): df = DataFrame({"a": [1, 2, 3], "b": [-4, -5, -6]}, dtype=dtype) df_orig = df.copy() - result = df.where(df < 0, val) + result = func(df, val) if using_copy_on_write: assert np.shares_memory(get_array(df, "b"), get_array(result, "b")) From 5edc80784ddbbc8356ef834ac104edd2fc7c6c4b Mon Sep 17 00:00:00 2001 From: Patrick Hoefler <61934744+phofl@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:01:39 +0200 Subject: [PATCH 2/2] Update test_methods.py --- pandas/tests/copy_view/test_methods.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index ffb92ff927471..deebb6cb6fdf3 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -1431,8 +1431,8 @@ def test_putmask_dont_copy_some_blocks(using_copy_on_write, val, exp): @pytest.mark.parametrize( "func", [ - lambda ser: ser.where(ser < 0, 10), - lambda ser: ser.mask(ser >= 0, 10), + lambda ser: ser.where(ser > 0, 10), + lambda ser: ser.mask(ser <= 0, 10), ], ) def test_where_mask_noop(using_copy_on_write, dtype, func):