@@ -1291,6 +1291,42 @@ def test_constructor_year_and_quarter(self):
1291
1291
p = PeriodIndex (lops )
1292
1292
tm .assert_index_equal (p , idx )
1293
1293
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
+
1294
1330
def test_is_ (self ):
1295
1331
create_index = lambda : PeriodIndex (freq = 'A' , start = '1/1/2001' ,
1296
1332
end = '12/1/2009' )
@@ -2149,34 +2185,28 @@ def test_to_period_monthish(self):
2149
2185
self .assertEqual (prng .freq , 'M' )
2150
2186
2151
2187
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' )
2157
2188
self .assertRaises (ValueError , Period , '1989' , freq = '2A' )
2158
2189
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' )
2180
2210
2181
2211
def test_iteration (self ):
2182
2212
index = PeriodIndex (start = '1/1/10' , periods = 4 , freq = 'B' )
0 commit comments