@@ -1291,6 +1291,42 @@ def test_constructor_year_and_quarter(self):
12911291 p = PeriodIndex (lops )
12921292 tm .assert_index_equal (p , idx )
12931293
1294+ def test_constructor_freq_mult (self ):
1295+ # GH #7811
1296+ for func in [PeriodIndex , period_range ]:
1297+ # must be the same, but for sure...
1298+ pidx = func (start = '2014-01' , freq = '2M' , periods = 4 )
1299+ expected = PeriodIndex (['2014-01' , '2014-03' , '2014-05' , '2014-07' ], freq = 'M' )
1300+ tm .assert_index_equal (pidx , expected )
1301+
1302+ pidx = func (start = '2014-01-02' , end = '2014-01-15' , freq = '3D' )
1303+ expected = PeriodIndex (['2014-01-02' , '2014-01-05' , '2014-01-08' , '2014-01-11' ,
1304+ '2014-01-14' ], freq = 'D' )
1305+ tm .assert_index_equal (pidx , expected )
1306+
1307+ pidx = func (end = '2014-01-01 17:00' , freq = '4H' , periods = 3 )
1308+ expected = PeriodIndex (['2014-01-01 09:00' , '2014-01-01 13:00' ,
1309+ '2014-01-01 17:00' ], freq = 'H' )
1310+ tm .assert_index_equal (pidx , expected )
1311+
1312+ def test_constructor_freq_mult_dti_compat (self ):
1313+ import itertools
1314+ mults = [1 , 2 , 3 , 4 , 5 ] # -1, -2, -3, -4, -5]
1315+ freqs = ['A' , 'M' , 'D' , 'T' , 'S' ]
1316+ for mult , freq in itertools .product (mults , freqs ):
1317+ freqstr = str (mult ) + freq
1318+ pidx = PeriodIndex (start = '2014-04-01' , freq = freqstr , periods = 10 )
1319+ expected = date_range (start = '2014-04-01' , freq = freqstr , periods = 10 ).to_period (freq )
1320+ tm .assert_index_equal (pidx , expected )
1321+
1322+ mults = [- 1 , - 2 , - 3 , - 4 , - 5 ]
1323+ freqs = ['D' , 'T' , 'S' ]
1324+ for mult , freq in itertools .product (mults , freqs ):
1325+ freqstr = str (mult ) + freq
1326+ pidx = PeriodIndex (start = '2014-04-01' , freq = freqstr , periods = 10 )
1327+ expected = date_range (start = '2014-04-01' , freq = freqstr , periods = 10 ).to_period (freq )
1328+ tm .assert_index_equal (pidx , expected )
1329+
12941330 def test_is_ (self ):
12951331 create_index = lambda : PeriodIndex (freq = 'A' , start = '1/1/2001' ,
12961332 end = '12/1/2009' )
@@ -2149,34 +2185,28 @@ def test_to_period_monthish(self):
21492185 self .assertEqual (prng .freq , 'M' )
21502186
21512187 def test_no_multiples (self ):
2152- self .assertRaises (ValueError , period_range , '1989Q3' , periods = 10 ,
2153- freq = '2Q' )
2154-
2155- self .assertRaises (ValueError , period_range , '1989' , periods = 10 ,
2156- freq = '2A' )
21572188 self .assertRaises (ValueError , Period , '1989' , freq = '2A' )
21582189
2159- # def test_pindex_multiples(self):
2160- # pi = PeriodIndex(start='1/1/10', end='12/31/12', freq='2M')
2161- # self.assertEqual(pi[0], Period('1/1/10', '2M'))
2162- # self.assertEqual(pi[1], Period('3/1/10', '2M'))
2163-
2164- # self.assertEqual(pi[0].asfreq('6M'), pi[2].asfreq('6M'))
2165- # self.assertEqual(pi[0].asfreq('A'), pi[2].asfreq('A'))
2166-
2167- # self.assertEqual(pi[0].asfreq('M', how='S'),
2168- # Period('Jan 2010', '1M'))
2169- # self.assertEqual(pi[0].asfreq('M', how='E'),
2170- # Period('Feb 2010', '1M'))
2171- # self.assertEqual(pi[1].asfreq('M', how='S'),
2172- # Period('Mar 2010', '1M'))
2173-
2174- # i = Period('1/1/2010 12:05:18', '5S')
2175- # self.assertEqual(i, Period('1/1/2010 12:05:15', '5S'))
2176-
2177- # i = Period('1/1/2010 12:05:18', '5S')
2178- # self.assertEqual(i.asfreq('1S', how='E'),
2179- # Period('1/1/2010 12:05:19', '1S'))
2190+ def test_pindex_multiples (self ):
2191+ pi = PeriodIndex (start = '1/1/11' , end = '12/31/11' , freq = '2M' )
2192+ expected = PeriodIndex (['2011-01' , '2011-03' , '2011-05' , '2011-07' ,
2193+ '2011-09' , '2011-11' ], freq = 'M' )
2194+ tm .assert_index_equal (pi , expected )
2195+ self .assertEqual (pi .freq , 'M' )
2196+
2197+ pi = period_range (start = '1/1/11' , end = '12/31/11' , freq = '2M' )
2198+ tm .assert_index_equal (pi , expected )
2199+ self .assertEqual (pi .freq , 'M' )
2200+
2201+ pi = period_range (start = '1/1/11' , periods = 6 , freq = '2M' )
2202+ tm .assert_index_equal (pi , expected )
2203+ self .assertEqual (pi .freq , 'M' )
2204+
2205+ pi = period_range (start = '2011-11-30' , periods = 6 , freq = '-2M' )
2206+ expected = PeriodIndex (['2011-11' , '2011-09' , '2011-07' , '2011-05' ,
2207+ '2011-03' , '2011-01' ], freq = 'M' )
2208+ tm .assert_index_equal (pi , expected )
2209+ self .assertEqual (pi .freq , 'M' )
21802210
21812211 def test_iteration (self ):
21822212 index = PeriodIndex (start = '1/1/10' , periods = 4 , freq = 'B' )
0 commit comments