test_libfrequencies.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import pytest
  2. from pandas._libs.tslibs.frequencies import (
  3. INVALID_FREQ_ERR_MSG,
  4. _period_str_to_code,
  5. get_rule_month,
  6. is_subperiod,
  7. is_superperiod,
  8. )
  9. from pandas.tseries import offsets
  10. @pytest.mark.parametrize(
  11. "obj,expected",
  12. [
  13. ("W", "DEC"),
  14. (offsets.Week(), "DEC"),
  15. ("D", "DEC"),
  16. (offsets.Day(), "DEC"),
  17. ("Q", "DEC"),
  18. (offsets.QuarterEnd(startingMonth=12), "DEC"),
  19. ("Q-JAN", "JAN"),
  20. (offsets.QuarterEnd(startingMonth=1), "JAN"),
  21. ("A-DEC", "DEC"),
  22. ("Y-DEC", "DEC"),
  23. (offsets.YearEnd(), "DEC"),
  24. ("A-MAY", "MAY"),
  25. ("Y-MAY", "MAY"),
  26. (offsets.YearEnd(month=5), "MAY"),
  27. ],
  28. )
  29. def test_get_rule_month(obj, expected):
  30. result = get_rule_month(obj)
  31. assert result == expected
  32. @pytest.mark.parametrize(
  33. "obj,expected",
  34. [
  35. ("A", 1000),
  36. ("A-DEC", 1000),
  37. ("A-JAN", 1001),
  38. ("Y", 1000),
  39. ("Y-DEC", 1000),
  40. ("Y-JAN", 1001),
  41. ("Q", 2000),
  42. ("Q-DEC", 2000),
  43. ("Q-FEB", 2002),
  44. ("W", 4000),
  45. ("W-SUN", 4000),
  46. ("W-FRI", 4005),
  47. ("Min", 8000),
  48. ("ms", 10000),
  49. ("US", 11000),
  50. ("NS", 12000),
  51. ],
  52. )
  53. def test_period_str_to_code(obj, expected):
  54. assert _period_str_to_code(obj) == expected
  55. @pytest.mark.parametrize(
  56. "p1,p2,expected",
  57. [
  58. # Input validation.
  59. (offsets.MonthEnd(), None, False),
  60. (offsets.YearEnd(), None, False),
  61. (None, offsets.YearEnd(), False),
  62. (None, offsets.MonthEnd(), False),
  63. (None, None, False),
  64. (offsets.YearEnd(), offsets.MonthEnd(), True),
  65. (offsets.Hour(), offsets.Minute(), True),
  66. (offsets.Second(), offsets.Milli(), True),
  67. (offsets.Milli(), offsets.Micro(), True),
  68. (offsets.Micro(), offsets.Nano(), True),
  69. ],
  70. )
  71. def test_super_sub_symmetry(p1, p2, expected):
  72. assert is_superperiod(p1, p2) is expected
  73. assert is_subperiod(p2, p1) is expected
  74. @pytest.mark.parametrize(
  75. "freq,expected,aliases",
  76. [
  77. ("D", 6000, ["DAY", "DLY", "DAILY"]),
  78. ("M", 3000, ["MTH", "MONTH", "MONTHLY"]),
  79. ("N", 12000, ["NANOSECOND", "NANOSECONDLY"]),
  80. ("H", 7000, ["HR", "HOUR", "HRLY", "HOURLY"]),
  81. ("T", 8000, ["minute", "MINUTE", "MINUTELY"]),
  82. ("L", 10000, ["MILLISECOND", "MILLISECONDLY"]),
  83. ("U", 11000, ["MICROSECOND", "MICROSECONDLY"]),
  84. ("S", 9000, ["sec", "SEC", "SECOND", "SECONDLY"]),
  85. ("B", 5000, ["BUS", "BUSINESS", "BUSINESSLY", "WEEKDAY"]),
  86. ],
  87. )
  88. def test_assert_aliases_deprecated(freq, expected, aliases):
  89. assert isinstance(aliases, list)
  90. assert _period_str_to_code(freq) == expected
  91. for alias in aliases:
  92. with pytest.raises(ValueError, match=INVALID_FREQ_ERR_MSG):
  93. _period_str_to_code(alias)