From 519189ce5fc8a80a8f16015b75d6deafb4bc5803 Mon Sep 17 00:00:00 2001 From: Thomas Li <47963215+lithomas1@users.noreply.github.com> Date: Wed, 11 Jan 2023 21:33:25 -0800 Subject: [PATCH 1/2] TST: CoW with df.isetitem() --- pandas/tests/copy_view/test_methods.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index af900fd5268ef..6784ab7515399 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -721,3 +721,25 @@ def test_squeeze(using_copy_on_write): # Without CoW the original will be modified assert np.shares_memory(series.values, get_array(df, "a")) assert df.loc[0, "a"] == 0 + + +def test_isetitem(using_copy_on_write): + df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}) + df_orig = df.copy() + df2 = df.copy(deep=None) # Trigger a CoW + df2.isetitem(1, np.array([-1, -2, -3])) + + if using_copy_on_write: + assert np.shares_memory(df["c"].values, df2["c"].values) + assert np.shares_memory(df["a"].values, df2["a"].values) + else: + assert not np.shares_memory(df["c"].values, df2["c"].values) + assert not np.shares_memory(df["a"].values, df2["a"].values) + + df2.loc[0, "a"] = 0 + tm.assert_series_equal(df["a"], df_orig["a"]) # Original is unchanged + + if using_copy_on_write: + assert np.shares_memory(df["c"].values, df2["c"].values) + else: + assert not np.shares_memory(df["c"].values, df2["c"].values) From 04d8b7f71124116ad663bd66be67ae9ad54d93df Mon Sep 17 00:00:00 2001 From: Thomas Li <47963215+lithomas1@users.noreply.github.com> Date: Thu, 12 Jan 2023 07:34:37 -0800 Subject: [PATCH 2/2] Address review comments --- pandas/tests/copy_view/test_methods.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pandas/tests/copy_view/test_methods.py b/pandas/tests/copy_view/test_methods.py index 8942ba123e586..111073795325b 100644 --- a/pandas/tests/copy_view/test_methods.py +++ b/pandas/tests/copy_view/test_methods.py @@ -765,19 +765,19 @@ def test_isetitem(using_copy_on_write): df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6], "c": [7, 8, 9]}) df_orig = df.copy() df2 = df.copy(deep=None) # Trigger a CoW - df2.isetitem(1, np.array([-1, -2, -3])) + df2.isetitem(1, np.array([-1, -2, -3])) # This is inplace if using_copy_on_write: - assert np.shares_memory(df["c"].values, df2["c"].values) - assert np.shares_memory(df["a"].values, df2["a"].values) + assert np.shares_memory(get_array(df, "c"), get_array(df2, "c")) + assert np.shares_memory(get_array(df, "a"), get_array(df2, "a")) else: - assert not np.shares_memory(df["c"].values, df2["c"].values) - assert not np.shares_memory(df["a"].values, df2["a"].values) + assert not np.shares_memory(get_array(df, "c"), get_array(df2, "c")) + assert not np.shares_memory(get_array(df, "a"), get_array(df2, "a")) df2.loc[0, "a"] = 0 - tm.assert_series_equal(df["a"], df_orig["a"]) # Original is unchanged + tm.assert_frame_equal(df, df_orig) # Original is unchanged if using_copy_on_write: - assert np.shares_memory(df["c"].values, df2["c"].values) + assert np.shares_memory(get_array(df, "c"), get_array(df2, "c")) else: - assert not np.shares_memory(df["c"].values, df2["c"].values) + assert not np.shares_memory(get_array(df, "c"), get_array(df2, "c"))