123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import pytest
- from pandas._libs.tslibs.frequencies import (
- INVALID_FREQ_ERR_MSG,
- _period_str_to_code,
- get_rule_month,
- is_subperiod,
- is_superperiod,
- )
- from pandas.tseries import offsets
- @pytest.mark.parametrize(
- "obj,expected",
- [
- ("W", "DEC"),
- (offsets.Week(), "DEC"),
- ("D", "DEC"),
- (offsets.Day(), "DEC"),
- ("Q", "DEC"),
- (offsets.QuarterEnd(startingMonth=12), "DEC"),
- ("Q-JAN", "JAN"),
- (offsets.QuarterEnd(startingMonth=1), "JAN"),
- ("A-DEC", "DEC"),
- ("Y-DEC", "DEC"),
- (offsets.YearEnd(), "DEC"),
- ("A-MAY", "MAY"),
- ("Y-MAY", "MAY"),
- (offsets.YearEnd(month=5), "MAY"),
- ],
- )
- def test_get_rule_month(obj, expected):
- result = get_rule_month(obj)
- assert result == expected
- @pytest.mark.parametrize(
- "obj,expected",
- [
- ("A", 1000),
- ("A-DEC", 1000),
- ("A-JAN", 1001),
- ("Y", 1000),
- ("Y-DEC", 1000),
- ("Y-JAN", 1001),
- ("Q", 2000),
- ("Q-DEC", 2000),
- ("Q-FEB", 2002),
- ("W", 4000),
- ("W-SUN", 4000),
- ("W-FRI", 4005),
- ("Min", 8000),
- ("ms", 10000),
- ("US", 11000),
- ("NS", 12000),
- ],
- )
- def test_period_str_to_code(obj, expected):
- assert _period_str_to_code(obj) == expected
- @pytest.mark.parametrize(
- "p1,p2,expected",
- [
- # Input validation.
- (offsets.MonthEnd(), None, False),
- (offsets.YearEnd(), None, False),
- (None, offsets.YearEnd(), False),
- (None, offsets.MonthEnd(), False),
- (None, None, False),
- (offsets.YearEnd(), offsets.MonthEnd(), True),
- (offsets.Hour(), offsets.Minute(), True),
- (offsets.Second(), offsets.Milli(), True),
- (offsets.Milli(), offsets.Micro(), True),
- (offsets.Micro(), offsets.Nano(), True),
- ],
- )
- def test_super_sub_symmetry(p1, p2, expected):
- assert is_superperiod(p1, p2) is expected
- assert is_subperiod(p2, p1) is expected
- @pytest.mark.parametrize(
- "freq,expected,aliases",
- [
- ("D", 6000, ["DAY", "DLY", "DAILY"]),
- ("M", 3000, ["MTH", "MONTH", "MONTHLY"]),
- ("N", 12000, ["NANOSECOND", "NANOSECONDLY"]),
- ("H", 7000, ["HR", "HOUR", "HRLY", "HOURLY"]),
- ("T", 8000, ["minute", "MINUTE", "MINUTELY"]),
- ("L", 10000, ["MILLISECOND", "MILLISECONDLY"]),
- ("U", 11000, ["MICROSECOND", "MICROSECONDLY"]),
- ("S", 9000, ["sec", "SEC", "SECOND", "SECONDLY"]),
- ("B", 5000, ["BUS", "BUSINESS", "BUSINESSLY", "WEEKDAY"]),
- ],
- )
- def test_assert_aliases_deprecated(freq, expected, aliases):
- assert isinstance(aliases, list)
- assert _period_str_to_code(freq) == expected
- for alias in aliases:
- with pytest.raises(ValueError, match=INVALID_FREQ_ERR_MSG):
- _period_str_to_code(alias)
|