accumulate.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import pytest
  2. import pandas as pd
  3. from pandas.tests.extension.base.base import BaseExtensionTests
  4. class BaseAccumulateTests(BaseExtensionTests):
  5. """
  6. Accumulation specific tests. Generally these only
  7. make sense for numeric/boolean operations.
  8. """
  9. def check_accumulate(self, s, op_name, skipna):
  10. result = getattr(s, op_name)(skipna=skipna)
  11. if result.dtype == pd.Float32Dtype() and op_name == "cumprod" and skipna:
  12. pytest.skip(
  13. f"Float32 precision lead to large differences with op {op_name} "
  14. f"and skipna={skipna}"
  15. )
  16. expected = getattr(s.astype("float64"), op_name)(skipna=skipna)
  17. self.assert_series_equal(result, expected, check_dtype=False)
  18. @pytest.mark.parametrize("skipna", [True, False])
  19. def test_accumulate_series_raises(self, data, all_numeric_accumulations, skipna):
  20. op_name = all_numeric_accumulations
  21. ser = pd.Series(data)
  22. with pytest.raises(NotImplementedError):
  23. getattr(ser, op_name)(skipna=skipna)
  24. @pytest.mark.parametrize("skipna", [True, False])
  25. def test_accumulate_series(self, data, all_numeric_accumulations, skipna):
  26. op_name = all_numeric_accumulations
  27. ser = pd.Series(data)
  28. self.check_accumulate(ser, op_name, skipna)