Skip to content

Commit 05ccc98

Browse files
authored
BUG: NumericArray.__pos__ should make a copy (#44492)
1 parent 80372bb commit 05ccc98

File tree

5 files changed

+8
-2
lines changed

5 files changed

+8
-2
lines changed

pandas/core/arrays/numeric.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def __neg__(self):
168168
return type(self)(-self._data, self._mask.copy())
169169

170170
def __pos__(self):
171-
return self
171+
return self.copy()
172172

173173
def __abs__(self):
174174
return type(self)(abs(self._data), self._mask.copy())

pandas/core/arrays/timedeltas.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ def __neg__(self) -> TimedeltaArray:
800800
return type(self)(-self._ndarray)
801801

802802
def __pos__(self) -> TimedeltaArray:
803-
return type(self)(self._ndarray, freq=self.freq)
803+
return type(self)(self._ndarray.copy(), freq=self.freq)
804804

805805
def __abs__(self) -> TimedeltaArray:
806806
# Note: freq is not preserved

pandas/tests/arrays/floating/test_arithmetic.py

+2
Original file line numberDiff line numberDiff line change
@@ -200,4 +200,6 @@ def test_unary_float_operators(float_ea_dtype, source, neg_target, abs_target):
200200

201201
tm.assert_extension_array_equal(neg_result, neg_target)
202202
tm.assert_extension_array_equal(pos_result, arr)
203+
assert not np.shares_memory(pos_result._data, arr._data)
204+
assert not np.shares_memory(pos_result._mask, arr._mask)
203205
tm.assert_extension_array_equal(abs_result, abs_target)

pandas/tests/arrays/integer/test_arithmetic.py

+2
Original file line numberDiff line numberDiff line change
@@ -300,4 +300,6 @@ def test_unary_int_operators(any_signed_int_ea_dtype, source, neg_target, abs_ta
300300

301301
tm.assert_extension_array_equal(neg_result, neg_target)
302302
tm.assert_extension_array_equal(pos_result, arr)
303+
assert not np.shares_memory(pos_result._data, arr._data)
304+
assert not np.shares_memory(pos_result._mask, arr._mask)
303305
tm.assert_extension_array_equal(abs_result, abs_target)

pandas/tests/arrays/test_timedeltas.py

+2
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,11 @@ def test_pos(self):
9999

100100
result = +arr
101101
tm.assert_timedelta_array_equal(result, arr)
102+
assert not np.shares_memory(result._ndarray, arr._ndarray)
102103

103104
result2 = np.positive(arr)
104105
tm.assert_timedelta_array_equal(result2, arr)
106+
assert not np.shares_memory(result2._ndarray, arr._ndarray)
105107

106108
def test_neg(self):
107109
vals = np.array([-3600 * 10 ** 9, "NaT", 7200 * 10 ** 9], dtype="m8[ns]")

0 commit comments

Comments
 (0)