test_unary.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import pytest
  2. from pandas import Series
  3. import pandas._testing as tm
  4. class TestSeriesUnaryOps:
  5. # __neg__, __pos__, __invert__
  6. def test_neg(self):
  7. ser = tm.makeStringSeries()
  8. ser.name = "series"
  9. tm.assert_series_equal(-ser, -1 * ser)
  10. def test_invert(self):
  11. ser = tm.makeStringSeries()
  12. ser.name = "series"
  13. tm.assert_series_equal(-(ser < 0), ~(ser < 0))
  14. @pytest.mark.parametrize(
  15. "source, neg_target, abs_target",
  16. [
  17. ([1, 2, 3], [-1, -2, -3], [1, 2, 3]),
  18. ([1, 2, None], [-1, -2, None], [1, 2, None]),
  19. ],
  20. )
  21. def test_all_numeric_unary_operators(
  22. self, any_numeric_ea_dtype, source, neg_target, abs_target
  23. ):
  24. # GH38794
  25. dtype = any_numeric_ea_dtype
  26. ser = Series(source, dtype=dtype)
  27. neg_result, pos_result, abs_result = -ser, +ser, abs(ser)
  28. if dtype.startswith("U"):
  29. neg_target = -Series(source, dtype=dtype)
  30. else:
  31. neg_target = Series(neg_target, dtype=dtype)
  32. abs_target = Series(abs_target, dtype=dtype)
  33. tm.assert_series_equal(neg_result, neg_target)
  34. tm.assert_series_equal(pos_result, ser)
  35. tm.assert_series_equal(abs_result, abs_target)
  36. @pytest.mark.parametrize("op", ["__neg__", "__abs__"])
  37. def test_unary_float_op_mask(self, float_ea_dtype, op):
  38. dtype = float_ea_dtype
  39. ser = Series([1.1, 2.2, 3.3], dtype=dtype)
  40. result = getattr(ser, op)()
  41. target = result.copy(deep=True)
  42. ser[0] = None
  43. tm.assert_series_equal(result, target)