1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import pytest
 
from pandas import (
    PeriodIndex,
    period_range,
)
import pandas._testing as tm
 
 
class TestPeriodIndex:
    def test_asfreq(self):
        pi1 = period_range(freq="A", start="1/1/2001", end="1/1/2001")
        pi2 = period_range(freq="Q", start="1/1/2001", end="1/1/2001")
        pi3 = period_range(freq="M", start="1/1/2001", end="1/1/2001")
        pi4 = period_range(freq="D", start="1/1/2001", end="1/1/2001")
        pi5 = period_range(freq="H", start="1/1/2001", end="1/1/2001 00:00")
        pi6 = period_range(freq="Min", start="1/1/2001", end="1/1/2001 00:00")
        pi7 = period_range(freq="S", start="1/1/2001", end="1/1/2001 00:00:00")
 
        assert pi1.asfreq("Q", "S") == pi2
        assert pi1.asfreq("Q", "s") == pi2
        assert pi1.asfreq("M", "start") == pi3
        assert pi1.asfreq("D", "StarT") == pi4
        assert pi1.asfreq("H", "beGIN") == pi5
        assert pi1.asfreq("Min", "S") == pi6
        assert pi1.asfreq("S", "S") == pi7
 
        assert pi2.asfreq("A", "S") == pi1
        assert pi2.asfreq("M", "S") == pi3
        assert pi2.asfreq("D", "S") == pi4
        assert pi2.asfreq("H", "S") == pi5
        assert pi2.asfreq("Min", "S") == pi6
        assert pi2.asfreq("S", "S") == pi7
 
        assert pi3.asfreq("A", "S") == pi1
        assert pi3.asfreq("Q", "S") == pi2
        assert pi3.asfreq("D", "S") == pi4
        assert pi3.asfreq("H", "S") == pi5
        assert pi3.asfreq("Min", "S") == pi6
        assert pi3.asfreq("S", "S") == pi7
 
        assert pi4.asfreq("A", "S") == pi1
        assert pi4.asfreq("Q", "S") == pi2
        assert pi4.asfreq("M", "S") == pi3
        assert pi4.asfreq("H", "S") == pi5
        assert pi4.asfreq("Min", "S") == pi6
        assert pi4.asfreq("S", "S") == pi7
 
        assert pi5.asfreq("A", "S") == pi1
        assert pi5.asfreq("Q", "S") == pi2
        assert pi5.asfreq("M", "S") == pi3
        assert pi5.asfreq("D", "S") == pi4
        assert pi5.asfreq("Min", "S") == pi6
        assert pi5.asfreq("S", "S") == pi7
 
        assert pi6.asfreq("A", "S") == pi1
        assert pi6.asfreq("Q", "S") == pi2
        assert pi6.asfreq("M", "S") == pi3
        assert pi6.asfreq("D", "S") == pi4
        assert pi6.asfreq("H", "S") == pi5
        assert pi6.asfreq("S", "S") == pi7
 
        assert pi7.asfreq("A", "S") == pi1
        assert pi7.asfreq("Q", "S") == pi2
        assert pi7.asfreq("M", "S") == pi3
        assert pi7.asfreq("D", "S") == pi4
        assert pi7.asfreq("H", "S") == pi5
        assert pi7.asfreq("Min", "S") == pi6
 
        msg = "How must be one of S or E"
        with pytest.raises(ValueError, match=msg):
            pi7.asfreq("T", "foo")
        result1 = pi1.asfreq("3M")
        result2 = pi1.asfreq("M")
        expected = period_range(freq="M", start="2001-12", end="2001-12")
        tm.assert_numpy_array_equal(result1.asi8, expected.asi8)
        assert result1.freqstr == "3M"
        tm.assert_numpy_array_equal(result2.asi8, expected.asi8)
        assert result2.freqstr == "M"
 
    def test_asfreq_nat(self):
        idx = PeriodIndex(["2011-01", "2011-02", "NaT", "2011-04"], freq="M")
        result = idx.asfreq(freq="Q")
        expected = PeriodIndex(["2011Q1", "2011Q1", "NaT", "2011Q2"], freq="Q")
        tm.assert_index_equal(result, expected)
 
    @pytest.mark.parametrize("freq", ["D", "3D"])
    def test_asfreq_mult_pi(self, freq):
        pi = PeriodIndex(["2001-01", "2001-02", "NaT", "2001-03"], freq="2M")
 
        result = pi.asfreq(freq)
        exp = PeriodIndex(["2001-02-28", "2001-03-31", "NaT", "2001-04-30"], freq=freq)
        tm.assert_index_equal(result, exp)
        assert result.freq == exp.freq
 
        result = pi.asfreq(freq, how="S")
        exp = PeriodIndex(["2001-01-01", "2001-02-01", "NaT", "2001-03-01"], freq=freq)
        tm.assert_index_equal(result, exp)
        assert result.freq == exp.freq
 
    def test_asfreq_combined_pi(self):
        pi = PeriodIndex(["2001-01-01 00:00", "2001-01-02 02:00", "NaT"], freq="H")
        exp = PeriodIndex(["2001-01-01 00:00", "2001-01-02 02:00", "NaT"], freq="25H")
        for freq, how in zip(["1D1H", "1H1D"], ["S", "E"]):
            result = pi.asfreq(freq, how=how)
            tm.assert_index_equal(result, exp)
            assert result.freq == exp.freq
 
        for freq in ["1D1H", "1H1D"]:
            pi = PeriodIndex(["2001-01-01 00:00", "2001-01-02 02:00", "NaT"], freq=freq)
            result = pi.asfreq("H")
            exp = PeriodIndex(["2001-01-02 00:00", "2001-01-03 02:00", "NaT"], freq="H")
            tm.assert_index_equal(result, exp)
            assert result.freq == exp.freq
 
            pi = PeriodIndex(["2001-01-01 00:00", "2001-01-02 02:00", "NaT"], freq=freq)
            result = pi.asfreq("H", how="S")
            exp = PeriodIndex(["2001-01-01 00:00", "2001-01-02 02:00", "NaT"], freq="H")
            tm.assert_index_equal(result, exp)
            assert result.freq == exp.freq
 
    def test_astype_asfreq(self):
        pi1 = PeriodIndex(["2011-01-01", "2011-02-01", "2011-03-01"], freq="D")
        exp = PeriodIndex(["2011-01", "2011-02", "2011-03"], freq="M")
        tm.assert_index_equal(pi1.asfreq("M"), exp)
        tm.assert_index_equal(pi1.astype("period[M]"), exp)
 
        exp = PeriodIndex(["2011-01", "2011-02", "2011-03"], freq="3M")
        tm.assert_index_equal(pi1.asfreq("3M"), exp)
        tm.assert_index_equal(pi1.astype("period[3M]"), exp)