conftest.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import itertools
  2. import numpy as np
  3. import pytest
  4. from pandas import (
  5. DataFrame,
  6. Series,
  7. notna,
  8. )
  9. def create_series():
  10. return [
  11. Series(dtype=np.float64, name="a"),
  12. Series([np.nan] * 5),
  13. Series([1.0] * 5),
  14. Series(range(5, 0, -1)),
  15. Series(range(5)),
  16. Series([np.nan, 1.0, np.nan, 1.0, 1.0]),
  17. Series([np.nan, 1.0, np.nan, 2.0, 3.0]),
  18. Series([np.nan, 1.0, np.nan, 3.0, 2.0]),
  19. ]
  20. def create_dataframes():
  21. return [
  22. DataFrame(columns=["a", "a"]),
  23. DataFrame(np.arange(15).reshape((5, 3)), columns=["a", "a", 99]),
  24. ] + [DataFrame(s) for s in create_series()]
  25. def is_constant(x):
  26. values = x.values.ravel("K")
  27. return len(set(values[notna(values)])) == 1
  28. @pytest.fixture(
  29. params=(
  30. obj
  31. for obj in itertools.chain(create_series(), create_dataframes())
  32. if is_constant(obj)
  33. ),
  34. )
  35. def consistent_data(request):
  36. return request.param
  37. @pytest.fixture(params=create_series())
  38. def series_data(request):
  39. return request.param
  40. @pytest.fixture(params=itertools.chain(create_series(), create_dataframes()))
  41. def all_data(request):
  42. """
  43. Test:
  44. - Empty Series / DataFrame
  45. - All NaN
  46. - All consistent value
  47. - Monotonically decreasing
  48. - Monotonically increasing
  49. - Monotonically consistent with NaNs
  50. - Monotonically increasing with NaNs
  51. - Monotonically decreasing with NaNs
  52. """
  53. return request.param
  54. @pytest.fixture(params=[0, 2])
  55. def min_periods(request):
  56. return request.param