@@ -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