PageRenderTime 32ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/pandas/tseries/tests/test_period.py

http://github.com/pydata/pandas
Python | 2663 lines | 1993 code | 550 blank | 120 comment | 98 complexity | b1d0757cd4a97534734fe6a978e394f5 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0
  1. """Tests suite for Period handling.
  2. Parts derived from scikits.timeseries code, original authors:
  3. - Pierre Gerard-Marchant & Matt Knox
  4. - pierregm_at_uga_dot_edu - mattknow_ca_at_hotmail_dot_com
  5. """
  6. from datetime import datetime, date, timedelta
  7. from numpy.ma.testutils import assert_equal
  8. from pandas import Timestamp
  9. from pandas.tseries.frequencies import MONTHS, DAYS, _period_code_map
  10. from pandas.tseries.period import Period, PeriodIndex, period_range
  11. from pandas.tseries.index import DatetimeIndex, date_range, Index
  12. from pandas.tseries.tools import to_datetime
  13. import pandas.tseries.period as pmod
  14. import pandas.core.datetools as datetools
  15. import pandas as pd
  16. import numpy as np
  17. from numpy.random import randn
  18. from pandas.compat import range, lrange, lmap, zip
  19. from pandas import Series, TimeSeries, DataFrame, _np_version_under1p9
  20. from pandas import tslib
  21. from pandas.util.testing import(assert_series_equal, assert_almost_equal,
  22. assertRaisesRegexp)
  23. import pandas.util.testing as tm
  24. from pandas import compat
  25. from numpy.testing import assert_array_equal
  26. class TestPeriodProperties(tm.TestCase):
  27. "Test properties such as year, month, weekday, etc...."
  28. #
  29. def test_quarterly_negative_ordinals(self):
  30. p = Period(ordinal=-1, freq='Q-DEC')
  31. self.assertEqual(p.year, 1969)
  32. self.assertEqual(p.quarter, 4)
  33. p = Period(ordinal=-2, freq='Q-DEC')
  34. self.assertEqual(p.year, 1969)
  35. self.assertEqual(p.quarter, 3)
  36. p = Period(ordinal=-2, freq='M')
  37. self.assertEqual(p.year, 1969)
  38. self.assertEqual(p.month, 11)
  39. def test_period_cons_quarterly(self):
  40. # bugs in scikits.timeseries
  41. for month in MONTHS:
  42. freq = 'Q-%s' % month
  43. exp = Period('1989Q3', freq=freq)
  44. self.assertIn('1989Q3', str(exp))
  45. stamp = exp.to_timestamp('D', how='end')
  46. p = Period(stamp, freq=freq)
  47. self.assertEqual(p, exp)
  48. def test_period_cons_annual(self):
  49. # bugs in scikits.timeseries
  50. for month in MONTHS:
  51. freq = 'A-%s' % month
  52. exp = Period('1989', freq=freq)
  53. stamp = exp.to_timestamp('D', how='end') + timedelta(days=30)
  54. p = Period(stamp, freq=freq)
  55. self.assertEqual(p, exp + 1)
  56. def test_period_cons_weekly(self):
  57. for num in range(10, 17):
  58. daystr = '2011-02-%d' % num
  59. for day in DAYS:
  60. freq = 'W-%s' % day
  61. result = Period(daystr, freq=freq)
  62. expected = Period(daystr, freq='D').asfreq(freq)
  63. self.assertEqual(result, expected)
  64. def test_period_cons_nat(self):
  65. p = Period('NaT', freq='M')
  66. self.assertEqual(p.ordinal, tslib.iNaT)
  67. self.assertEqual(p.freq, 'M')
  68. p = Period('nat', freq='W-SUN')
  69. self.assertEqual(p.ordinal, tslib.iNaT)
  70. self.assertEqual(p.freq, 'W-SUN')
  71. p = Period(tslib.iNaT, freq='D')
  72. self.assertEqual(p.ordinal, tslib.iNaT)
  73. self.assertEqual(p.freq, 'D')
  74. self.assertRaises(ValueError, Period, 'NaT')
  75. def test_timestamp_tz_arg(self):
  76. import pytz
  77. p = Period('1/1/2005', freq='M').to_timestamp(tz='Europe/Brussels')
  78. self.assertEqual(p.tz,
  79. pytz.timezone('Europe/Brussels').normalize(p).tzinfo)
  80. def test_timestamp_tz_arg_dateutil(self):
  81. import dateutil
  82. from pandas.tslib import maybe_get_tz
  83. p = Period('1/1/2005', freq='M').to_timestamp(tz=maybe_get_tz('dateutil/Europe/Brussels'))
  84. self.assertEqual(p.tz, dateutil.tz.gettz('Europe/Brussels'))
  85. def test_timestamp_tz_arg_dateutil_from_string(self):
  86. import dateutil
  87. p = Period('1/1/2005', freq='M').to_timestamp(tz='dateutil/Europe/Brussels')
  88. self.assertEqual(p.tz, dateutil.tz.gettz('Europe/Brussels'))
  89. def test_timestamp_nat_tz(self):
  90. t = Period('NaT', freq='M').to_timestamp()
  91. self.assertTrue(t is tslib.NaT)
  92. t = Period('NaT', freq='M').to_timestamp(tz='Asia/Tokyo')
  93. self.assertTrue(t is tslib.NaT)
  94. def test_period_constructor(self):
  95. i1 = Period('1/1/2005', freq='M')
  96. i2 = Period('Jan 2005')
  97. self.assertEqual(i1, i2)
  98. i1 = Period('2005', freq='A')
  99. i2 = Period('2005')
  100. i3 = Period('2005', freq='a')
  101. self.assertEqual(i1, i2)
  102. self.assertEqual(i1, i3)
  103. i4 = Period('2005', freq='M')
  104. i5 = Period('2005', freq='m')
  105. self.assertRaises(ValueError, i1.__ne__, i4)
  106. self.assertEqual(i4, i5)
  107. i1 = Period.now('Q')
  108. i2 = Period(datetime.now(), freq='Q')
  109. i3 = Period.now('q')
  110. self.assertEqual(i1, i2)
  111. self.assertEqual(i1, i3)
  112. # Biz day construction, roll forward if non-weekday
  113. i1 = Period('3/10/12', freq='B')
  114. i2 = Period('3/10/12', freq='D')
  115. self.assertEqual(i1, i2.asfreq('B'))
  116. i2 = Period('3/11/12', freq='D')
  117. self.assertEqual(i1, i2.asfreq('B'))
  118. i2 = Period('3/12/12', freq='D')
  119. self.assertEqual(i1, i2.asfreq('B'))
  120. i3 = Period('3/10/12', freq='b')
  121. self.assertEqual(i1, i3)
  122. i1 = Period(year=2005, quarter=1, freq='Q')
  123. i2 = Period('1/1/2005', freq='Q')
  124. self.assertEqual(i1, i2)
  125. i1 = Period(year=2005, quarter=3, freq='Q')
  126. i2 = Period('9/1/2005', freq='Q')
  127. self.assertEqual(i1, i2)
  128. i1 = Period(year=2005, month=3, day=1, freq='D')
  129. i2 = Period('3/1/2005', freq='D')
  130. self.assertEqual(i1, i2)
  131. i3 = Period(year=2005, month=3, day=1, freq='d')
  132. self.assertEqual(i1, i3)
  133. i1 = Period(year=2012, month=3, day=10, freq='B')
  134. i2 = Period('3/12/12', freq='B')
  135. self.assertEqual(i1, i2)
  136. i1 = Period('2005Q1')
  137. i2 = Period(year=2005, quarter=1, freq='Q')
  138. i3 = Period('2005q1')
  139. self.assertEqual(i1, i2)
  140. self.assertEqual(i1, i3)
  141. i1 = Period('05Q1')
  142. self.assertEqual(i1, i2)
  143. lower = Period('05q1')
  144. self.assertEqual(i1, lower)
  145. i1 = Period('1Q2005')
  146. self.assertEqual(i1, i2)
  147. lower = Period('1q2005')
  148. self.assertEqual(i1, lower)
  149. i1 = Period('1Q05')
  150. self.assertEqual(i1, i2)
  151. lower = Period('1q05')
  152. self.assertEqual(i1, lower)
  153. i1 = Period('4Q1984')
  154. self.assertEqual(i1.year, 1984)
  155. lower = Period('4q1984')
  156. self.assertEqual(i1, lower)
  157. i1 = Period('1982', freq='min')
  158. i2 = Period('1982', freq='MIN')
  159. self.assertEqual(i1, i2)
  160. i2 = Period('1982', freq=('Min', 1))
  161. self.assertEqual(i1, i2)
  162. expected = Period('2007-01', freq='M')
  163. i1 = Period('200701', freq='M')
  164. self.assertEqual(i1, expected)
  165. i1 = Period('200701', freq='M')
  166. self.assertEqual(i1, expected)
  167. i1 = Period(200701, freq='M')
  168. self.assertEqual(i1, expected)
  169. i1 = Period(ordinal=200701, freq='M')
  170. self.assertEqual(i1.year, 18695)
  171. i1 = Period(datetime(2007, 1, 1), freq='M')
  172. i2 = Period('200701', freq='M')
  173. self.assertEqual(i1, i2)
  174. i1 = Period(date(2007, 1, 1), freq='M')
  175. i2 = Period(datetime(2007, 1, 1), freq='M')
  176. self.assertEqual(i1, i2)
  177. i1 = Period('2007-01-01 09:00:00.001')
  178. expected = Period(datetime(2007, 1, 1, 9, 0, 0, 1000), freq='L')
  179. self.assertEqual(i1, expected)
  180. i1 = Period('2007-01-01 09:00:00.00101')
  181. expected = Period(datetime(2007, 1, 1, 9, 0, 0, 1010), freq='U')
  182. self.assertEqual(i1, expected)
  183. self.assertRaises(ValueError, Period, ordinal=200701)
  184. self.assertRaises(ValueError, Period, '2007-1-1', freq='X')
  185. def test_freq_str(self):
  186. i1 = Period('1982', freq='Min')
  187. self.assertNotEqual(i1.freq[0], '1')
  188. def test_repr(self):
  189. p = Period('Jan-2000')
  190. self.assertIn('2000-01', repr(p))
  191. p = Period('2000-12-15')
  192. self.assertIn('2000-12-15', repr(p))
  193. def test_repr_nat(self):
  194. p = Period('nat', freq='M')
  195. self.assertIn(repr(tslib.NaT), repr(p))
  196. def test_millisecond_repr(self):
  197. p = Period('2000-01-01 12:15:02.123')
  198. self.assertEqual("Period('2000-01-01 12:15:02.123', 'L')", repr(p))
  199. def test_microsecond_repr(self):
  200. p = Period('2000-01-01 12:15:02.123567')
  201. self.assertEqual("Period('2000-01-01 12:15:02.123567', 'U')", repr(p))
  202. def test_strftime(self):
  203. p = Period('2000-1-1 12:34:12', freq='S')
  204. res = p.strftime('%Y-%m-%d %H:%M:%S')
  205. self.assertEqual(res, '2000-01-01 12:34:12')
  206. tm.assert_isinstance(res, compat.text_type) # GH3363
  207. def test_sub_delta(self):
  208. left, right = Period('2011', freq='A'), Period('2007', freq='A')
  209. result = left - right
  210. self.assertEqual(result, 4)
  211. self.assertRaises(ValueError, left.__sub__,
  212. Period('2007-01', freq='M'))
  213. def test_to_timestamp(self):
  214. p = Period('1982', freq='A')
  215. start_ts = p.to_timestamp(how='S')
  216. aliases = ['s', 'StarT', 'BEGIn']
  217. for a in aliases:
  218. self.assertEqual(start_ts, p.to_timestamp('D', how=a))
  219. end_ts = p.to_timestamp(how='E')
  220. aliases = ['e', 'end', 'FINIsH']
  221. for a in aliases:
  222. self.assertEqual(end_ts, p.to_timestamp('D', how=a))
  223. from_lst = ['A', 'Q', 'M', 'W', 'B',
  224. 'D', 'H', 'Min', 'S']
  225. def _ex(p):
  226. return Timestamp((p + 1).start_time.value - 1)
  227. for i, fcode in enumerate(from_lst):
  228. p = Period('1982', freq=fcode)
  229. result = p.to_timestamp().to_period(fcode)
  230. self.assertEqual(result, p)
  231. self.assertEqual(p.start_time, p.to_timestamp(how='S'))
  232. self.assertEqual(p.end_time, _ex(p))
  233. # Frequency other than daily
  234. p = Period('1985', freq='A')
  235. result = p.to_timestamp('H', how='end')
  236. expected = datetime(1985, 12, 31, 23)
  237. self.assertEqual(result, expected)
  238. result = p.to_timestamp('T', how='end')
  239. expected = datetime(1985, 12, 31, 23, 59)
  240. self.assertEqual(result, expected)
  241. result = p.to_timestamp(how='end')
  242. expected = datetime(1985, 12, 31)
  243. self.assertEqual(result, expected)
  244. expected = datetime(1985, 1, 1)
  245. result = p.to_timestamp('H', how='start')
  246. self.assertEqual(result, expected)
  247. result = p.to_timestamp('T', how='start')
  248. self.assertEqual(result, expected)
  249. result = p.to_timestamp('S', how='start')
  250. self.assertEqual(result, expected)
  251. assertRaisesRegexp(ValueError, 'Only mult == 1', p.to_timestamp, '5t')
  252. p = Period('NaT', freq='W')
  253. self.assertTrue(p.to_timestamp() is tslib.NaT)
  254. def test_start_time(self):
  255. freq_lst = ['A', 'Q', 'M', 'D', 'H', 'T', 'S']
  256. xp = datetime(2012, 1, 1)
  257. for f in freq_lst:
  258. p = Period('2012', freq=f)
  259. self.assertEqual(p.start_time, xp)
  260. self.assertEqual(Period('2012', freq='B').start_time,
  261. datetime(2012, 1, 2))
  262. self.assertEqual(Period('2012', freq='W').start_time,
  263. datetime(2011, 12, 26))
  264. p = Period('NaT', freq='W')
  265. self.assertTrue(p.start_time is tslib.NaT)
  266. def test_end_time(self):
  267. p = Period('2012', freq='A')
  268. def _ex(*args):
  269. return Timestamp(Timestamp(datetime(*args)).value - 1)
  270. xp = _ex(2013, 1, 1)
  271. self.assertEqual(xp, p.end_time)
  272. p = Period('2012', freq='Q')
  273. xp = _ex(2012, 4, 1)
  274. self.assertEqual(xp, p.end_time)
  275. p = Period('2012', freq='M')
  276. xp = _ex(2012, 2, 1)
  277. self.assertEqual(xp, p.end_time)
  278. xp = _ex(2012, 1, 2)
  279. p = Period('2012', freq='D')
  280. self.assertEqual(p.end_time, xp)
  281. xp = _ex(2012, 1, 1, 1)
  282. p = Period('2012', freq='H')
  283. self.assertEqual(p.end_time, xp)
  284. xp = _ex(2012, 1, 3)
  285. self.assertEqual(Period('2012', freq='B').end_time, xp)
  286. xp = _ex(2012, 1, 2)
  287. self.assertEqual(Period('2012', freq='W').end_time, xp)
  288. p = Period('NaT', freq='W')
  289. self.assertTrue(p.end_time is tslib.NaT)
  290. def test_anchor_week_end_time(self):
  291. def _ex(*args):
  292. return Timestamp(Timestamp(datetime(*args)).value - 1)
  293. p = Period('2013-1-1', 'W-SAT')
  294. xp = _ex(2013, 1, 6)
  295. self.assertEqual(p.end_time, xp)
  296. def test_properties_annually(self):
  297. # Test properties on Periods with annually frequency.
  298. a_date = Period(freq='A', year=2007)
  299. assert_equal(a_date.year, 2007)
  300. def test_properties_quarterly(self):
  301. # Test properties on Periods with daily frequency.
  302. qedec_date = Period(freq="Q-DEC", year=2007, quarter=1)
  303. qejan_date = Period(freq="Q-JAN", year=2007, quarter=1)
  304. qejun_date = Period(freq="Q-JUN", year=2007, quarter=1)
  305. #
  306. for x in range(3):
  307. for qd in (qedec_date, qejan_date, qejun_date):
  308. assert_equal((qd + x).qyear, 2007)
  309. assert_equal((qd + x).quarter, x + 1)
  310. def test_properties_monthly(self):
  311. # Test properties on Periods with daily frequency.
  312. m_date = Period(freq='M', year=2007, month=1)
  313. for x in range(11):
  314. m_ival_x = m_date + x
  315. assert_equal(m_ival_x.year, 2007)
  316. if 1 <= x + 1 <= 3:
  317. assert_equal(m_ival_x.quarter, 1)
  318. elif 4 <= x + 1 <= 6:
  319. assert_equal(m_ival_x.quarter, 2)
  320. elif 7 <= x + 1 <= 9:
  321. assert_equal(m_ival_x.quarter, 3)
  322. elif 10 <= x + 1 <= 12:
  323. assert_equal(m_ival_x.quarter, 4)
  324. assert_equal(m_ival_x.month, x + 1)
  325. def test_properties_weekly(self):
  326. # Test properties on Periods with daily frequency.
  327. w_date = Period(freq='WK', year=2007, month=1, day=7)
  328. #
  329. assert_equal(w_date.year, 2007)
  330. assert_equal(w_date.quarter, 1)
  331. assert_equal(w_date.month, 1)
  332. assert_equal(w_date.week, 1)
  333. assert_equal((w_date - 1).week, 52)
  334. def test_properties_daily(self):
  335. # Test properties on Periods with daily frequency.
  336. b_date = Period(freq='B', year=2007, month=1, day=1)
  337. #
  338. assert_equal(b_date.year, 2007)
  339. assert_equal(b_date.quarter, 1)
  340. assert_equal(b_date.month, 1)
  341. assert_equal(b_date.day, 1)
  342. assert_equal(b_date.weekday, 0)
  343. assert_equal(b_date.dayofyear, 1)
  344. #
  345. d_date = Period(freq='D', year=2007, month=1, day=1)
  346. #
  347. assert_equal(d_date.year, 2007)
  348. assert_equal(d_date.quarter, 1)
  349. assert_equal(d_date.month, 1)
  350. assert_equal(d_date.day, 1)
  351. assert_equal(d_date.weekday, 0)
  352. assert_equal(d_date.dayofyear, 1)
  353. def test_properties_hourly(self):
  354. # Test properties on Periods with hourly frequency.
  355. h_date = Period(freq='H', year=2007, month=1, day=1, hour=0)
  356. #
  357. assert_equal(h_date.year, 2007)
  358. assert_equal(h_date.quarter, 1)
  359. assert_equal(h_date.month, 1)
  360. assert_equal(h_date.day, 1)
  361. assert_equal(h_date.weekday, 0)
  362. assert_equal(h_date.dayofyear, 1)
  363. assert_equal(h_date.hour, 0)
  364. #
  365. def test_properties_minutely(self):
  366. # Test properties on Periods with minutely frequency.
  367. t_date = Period(freq='Min', year=2007, month=1, day=1, hour=0,
  368. minute=0)
  369. #
  370. assert_equal(t_date.quarter, 1)
  371. assert_equal(t_date.month, 1)
  372. assert_equal(t_date.day, 1)
  373. assert_equal(t_date.weekday, 0)
  374. assert_equal(t_date.dayofyear, 1)
  375. assert_equal(t_date.hour, 0)
  376. assert_equal(t_date.minute, 0)
  377. def test_properties_secondly(self):
  378. # Test properties on Periods with secondly frequency.
  379. s_date = Period(freq='Min', year=2007, month=1, day=1,
  380. hour=0, minute=0, second=0)
  381. #
  382. assert_equal(s_date.year, 2007)
  383. assert_equal(s_date.quarter, 1)
  384. assert_equal(s_date.month, 1)
  385. assert_equal(s_date.day, 1)
  386. assert_equal(s_date.weekday, 0)
  387. assert_equal(s_date.dayofyear, 1)
  388. assert_equal(s_date.hour, 0)
  389. assert_equal(s_date.minute, 0)
  390. assert_equal(s_date.second, 0)
  391. def test_properties_nat(self):
  392. p_nat = Period('NaT', freq='M')
  393. t_nat = pd.Timestamp('NaT')
  394. # confirm Period('NaT') work identical with Timestamp('NaT')
  395. for f in ['year', 'month', 'day', 'hour', 'minute', 'second',
  396. 'week', 'dayofyear', 'quarter']:
  397. self.assertEqual(getattr(p_nat, f), -1)
  398. self.assertEqual(getattr(t_nat, f), -1)
  399. for f in ['weekofyear', 'dayofweek', 'weekday', 'qyear']:
  400. self.assertEqual(getattr(p_nat, f), -1)
  401. def test_pnow(self):
  402. dt = datetime.now()
  403. val = pmod.pnow('D')
  404. exp = Period(dt, freq='D')
  405. self.assertEqual(val, exp)
  406. def test_constructor_corner(self):
  407. self.assertRaises(ValueError, Period, year=2007, month=1,
  408. freq='2M')
  409. self.assertRaises(ValueError, Period, datetime.now())
  410. self.assertRaises(ValueError, Period, datetime.now().date())
  411. self.assertRaises(ValueError, Period, 1.6, freq='D')
  412. self.assertRaises(ValueError, Period, ordinal=1.6, freq='D')
  413. self.assertRaises(ValueError, Period, ordinal=2, value=1, freq='D')
  414. self.assertRaises(ValueError, Period)
  415. self.assertRaises(ValueError, Period, month=1)
  416. p = Period('2007-01-01', freq='D')
  417. result = Period(p, freq='A')
  418. exp = Period('2007', freq='A')
  419. self.assertEqual(result, exp)
  420. def test_constructor_infer_freq(self):
  421. p = Period('2007-01-01')
  422. self.assertEqual(p.freq, 'D')
  423. p = Period('2007-01-01 07')
  424. self.assertEqual(p.freq, 'H')
  425. p = Period('2007-01-01 07:10')
  426. self.assertEqual(p.freq, 'T')
  427. p = Period('2007-01-01 07:10:15')
  428. self.assertEqual(p.freq, 'S')
  429. p = Period('2007-01-01 07:10:15.123')
  430. self.assertEqual(p.freq, 'L')
  431. p = Period('2007-01-01 07:10:15.123000')
  432. self.assertEqual(p.freq, 'L')
  433. p = Period('2007-01-01 07:10:15.123400')
  434. self.assertEqual(p.freq, 'U')
  435. def test_asfreq_MS(self):
  436. initial = Period("2013")
  437. self.assertEqual(initial.asfreq(freq="M", how="S"), Period('2013-01', 'M'))
  438. self.assertRaises(ValueError, initial.asfreq, freq="MS", how="S")
  439. tm.assertRaisesRegexp(ValueError, "Unknown freqstr: MS", pd.Period, '2013-01', 'MS')
  440. self.assertTrue(_period_code_map.get("MS") is None)
  441. def noWrap(item):
  442. return item
  443. class TestFreqConversion(tm.TestCase):
  444. "Test frequency conversion of date objects"
  445. def test_asfreq_corner(self):
  446. val = Period(freq='A', year=2007)
  447. self.assertRaises(ValueError, val.asfreq, '5t')
  448. def test_conv_annual(self):
  449. # frequency conversion tests: from Annual Frequency
  450. ival_A = Period(freq='A', year=2007)
  451. ival_AJAN = Period(freq="A-JAN", year=2007)
  452. ival_AJUN = Period(freq="A-JUN", year=2007)
  453. ival_ANOV = Period(freq="A-NOV", year=2007)
  454. ival_A_to_Q_start = Period(freq='Q', year=2007, quarter=1)
  455. ival_A_to_Q_end = Period(freq='Q', year=2007, quarter=4)
  456. ival_A_to_M_start = Period(freq='M', year=2007, month=1)
  457. ival_A_to_M_end = Period(freq='M', year=2007, month=12)
  458. ival_A_to_W_start = Period(freq='WK', year=2007, month=1, day=1)
  459. ival_A_to_W_end = Period(freq='WK', year=2007, month=12, day=31)
  460. ival_A_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  461. ival_A_to_B_end = Period(freq='B', year=2007, month=12, day=31)
  462. ival_A_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  463. ival_A_to_D_end = Period(freq='D', year=2007, month=12, day=31)
  464. ival_A_to_H_start = Period(freq='H', year=2007, month=1, day=1,
  465. hour=0)
  466. ival_A_to_H_end = Period(freq='H', year=2007, month=12, day=31,
  467. hour=23)
  468. ival_A_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  469. hour=0, minute=0)
  470. ival_A_to_T_end = Period(freq='Min', year=2007, month=12, day=31,
  471. hour=23, minute=59)
  472. ival_A_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  473. hour=0, minute=0, second=0)
  474. ival_A_to_S_end = Period(freq='S', year=2007, month=12, day=31,
  475. hour=23, minute=59, second=59)
  476. ival_AJAN_to_D_end = Period(freq='D', year=2007, month=1, day=31)
  477. ival_AJAN_to_D_start = Period(freq='D', year=2006, month=2, day=1)
  478. ival_AJUN_to_D_end = Period(freq='D', year=2007, month=6, day=30)
  479. ival_AJUN_to_D_start = Period(freq='D', year=2006, month=7, day=1)
  480. ival_ANOV_to_D_end = Period(freq='D', year=2007, month=11, day=30)
  481. ival_ANOV_to_D_start = Period(freq='D', year=2006, month=12, day=1)
  482. assert_equal(ival_A.asfreq('Q', 'S'), ival_A_to_Q_start)
  483. assert_equal(ival_A.asfreq('Q', 'e'), ival_A_to_Q_end)
  484. assert_equal(ival_A.asfreq('M', 's'), ival_A_to_M_start)
  485. assert_equal(ival_A.asfreq('M', 'E'), ival_A_to_M_end)
  486. assert_equal(ival_A.asfreq('WK', 'S'), ival_A_to_W_start)
  487. assert_equal(ival_A.asfreq('WK', 'E'), ival_A_to_W_end)
  488. assert_equal(ival_A.asfreq('B', 'S'), ival_A_to_B_start)
  489. assert_equal(ival_A.asfreq('B', 'E'), ival_A_to_B_end)
  490. assert_equal(ival_A.asfreq('D', 'S'), ival_A_to_D_start)
  491. assert_equal(ival_A.asfreq('D', 'E'), ival_A_to_D_end)
  492. assert_equal(ival_A.asfreq('H', 'S'), ival_A_to_H_start)
  493. assert_equal(ival_A.asfreq('H', 'E'), ival_A_to_H_end)
  494. assert_equal(ival_A.asfreq('min', 'S'), ival_A_to_T_start)
  495. assert_equal(ival_A.asfreq('min', 'E'), ival_A_to_T_end)
  496. assert_equal(ival_A.asfreq('T', 'S'), ival_A_to_T_start)
  497. assert_equal(ival_A.asfreq('T', 'E'), ival_A_to_T_end)
  498. assert_equal(ival_A.asfreq('S', 'S'), ival_A_to_S_start)
  499. assert_equal(ival_A.asfreq('S', 'E'), ival_A_to_S_end)
  500. assert_equal(ival_AJAN.asfreq('D', 'S'), ival_AJAN_to_D_start)
  501. assert_equal(ival_AJAN.asfreq('D', 'E'), ival_AJAN_to_D_end)
  502. assert_equal(ival_AJUN.asfreq('D', 'S'), ival_AJUN_to_D_start)
  503. assert_equal(ival_AJUN.asfreq('D', 'E'), ival_AJUN_to_D_end)
  504. assert_equal(ival_ANOV.asfreq('D', 'S'), ival_ANOV_to_D_start)
  505. assert_equal(ival_ANOV.asfreq('D', 'E'), ival_ANOV_to_D_end)
  506. assert_equal(ival_A.asfreq('A'), ival_A)
  507. def test_conv_quarterly(self):
  508. # frequency conversion tests: from Quarterly Frequency
  509. ival_Q = Period(freq='Q', year=2007, quarter=1)
  510. ival_Q_end_of_year = Period(freq='Q', year=2007, quarter=4)
  511. ival_QEJAN = Period(freq="Q-JAN", year=2007, quarter=1)
  512. ival_QEJUN = Period(freq="Q-JUN", year=2007, quarter=1)
  513. ival_Q_to_A = Period(freq='A', year=2007)
  514. ival_Q_to_M_start = Period(freq='M', year=2007, month=1)
  515. ival_Q_to_M_end = Period(freq='M', year=2007, month=3)
  516. ival_Q_to_W_start = Period(freq='WK', year=2007, month=1, day=1)
  517. ival_Q_to_W_end = Period(freq='WK', year=2007, month=3, day=31)
  518. ival_Q_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  519. ival_Q_to_B_end = Period(freq='B', year=2007, month=3, day=30)
  520. ival_Q_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  521. ival_Q_to_D_end = Period(freq='D', year=2007, month=3, day=31)
  522. ival_Q_to_H_start = Period(freq='H', year=2007, month=1, day=1,
  523. hour=0)
  524. ival_Q_to_H_end = Period(freq='H', year=2007, month=3, day=31,
  525. hour=23)
  526. ival_Q_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  527. hour=0, minute=0)
  528. ival_Q_to_T_end = Period(freq='Min', year=2007, month=3, day=31,
  529. hour=23, minute=59)
  530. ival_Q_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  531. hour=0, minute=0, second=0)
  532. ival_Q_to_S_end = Period(freq='S', year=2007, month=3, day=31,
  533. hour=23, minute=59, second=59)
  534. ival_QEJAN_to_D_start = Period(freq='D', year=2006, month=2, day=1)
  535. ival_QEJAN_to_D_end = Period(freq='D', year=2006, month=4, day=30)
  536. ival_QEJUN_to_D_start = Period(freq='D', year=2006, month=7, day=1)
  537. ival_QEJUN_to_D_end = Period(freq='D', year=2006, month=9, day=30)
  538. assert_equal(ival_Q.asfreq('A'), ival_Q_to_A)
  539. assert_equal(ival_Q_end_of_year.asfreq('A'), ival_Q_to_A)
  540. assert_equal(ival_Q.asfreq('M', 'S'), ival_Q_to_M_start)
  541. assert_equal(ival_Q.asfreq('M', 'E'), ival_Q_to_M_end)
  542. assert_equal(ival_Q.asfreq('WK', 'S'), ival_Q_to_W_start)
  543. assert_equal(ival_Q.asfreq('WK', 'E'), ival_Q_to_W_end)
  544. assert_equal(ival_Q.asfreq('B', 'S'), ival_Q_to_B_start)
  545. assert_equal(ival_Q.asfreq('B', 'E'), ival_Q_to_B_end)
  546. assert_equal(ival_Q.asfreq('D', 'S'), ival_Q_to_D_start)
  547. assert_equal(ival_Q.asfreq('D', 'E'), ival_Q_to_D_end)
  548. assert_equal(ival_Q.asfreq('H', 'S'), ival_Q_to_H_start)
  549. assert_equal(ival_Q.asfreq('H', 'E'), ival_Q_to_H_end)
  550. assert_equal(ival_Q.asfreq('Min', 'S'), ival_Q_to_T_start)
  551. assert_equal(ival_Q.asfreq('Min', 'E'), ival_Q_to_T_end)
  552. assert_equal(ival_Q.asfreq('S', 'S'), ival_Q_to_S_start)
  553. assert_equal(ival_Q.asfreq('S', 'E'), ival_Q_to_S_end)
  554. assert_equal(ival_QEJAN.asfreq('D', 'S'), ival_QEJAN_to_D_start)
  555. assert_equal(ival_QEJAN.asfreq('D', 'E'), ival_QEJAN_to_D_end)
  556. assert_equal(ival_QEJUN.asfreq('D', 'S'), ival_QEJUN_to_D_start)
  557. assert_equal(ival_QEJUN.asfreq('D', 'E'), ival_QEJUN_to_D_end)
  558. assert_equal(ival_Q.asfreq('Q'), ival_Q)
  559. def test_conv_monthly(self):
  560. # frequency conversion tests: from Monthly Frequency
  561. ival_M = Period(freq='M', year=2007, month=1)
  562. ival_M_end_of_year = Period(freq='M', year=2007, month=12)
  563. ival_M_end_of_quarter = Period(freq='M', year=2007, month=3)
  564. ival_M_to_A = Period(freq='A', year=2007)
  565. ival_M_to_Q = Period(freq='Q', year=2007, quarter=1)
  566. ival_M_to_W_start = Period(freq='WK', year=2007, month=1, day=1)
  567. ival_M_to_W_end = Period(freq='WK', year=2007, month=1, day=31)
  568. ival_M_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  569. ival_M_to_B_end = Period(freq='B', year=2007, month=1, day=31)
  570. ival_M_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  571. ival_M_to_D_end = Period(freq='D', year=2007, month=1, day=31)
  572. ival_M_to_H_start = Period(freq='H', year=2007, month=1, day=1,
  573. hour=0)
  574. ival_M_to_H_end = Period(freq='H', year=2007, month=1, day=31,
  575. hour=23)
  576. ival_M_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  577. hour=0, minute=0)
  578. ival_M_to_T_end = Period(freq='Min', year=2007, month=1, day=31,
  579. hour=23, minute=59)
  580. ival_M_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  581. hour=0, minute=0, second=0)
  582. ival_M_to_S_end = Period(freq='S', year=2007, month=1, day=31,
  583. hour=23, minute=59, second=59)
  584. assert_equal(ival_M.asfreq('A'), ival_M_to_A)
  585. assert_equal(ival_M_end_of_year.asfreq('A'), ival_M_to_A)
  586. assert_equal(ival_M.asfreq('Q'), ival_M_to_Q)
  587. assert_equal(ival_M_end_of_quarter.asfreq('Q'), ival_M_to_Q)
  588. assert_equal(ival_M.asfreq('WK', 'S'), ival_M_to_W_start)
  589. assert_equal(ival_M.asfreq('WK', 'E'), ival_M_to_W_end)
  590. assert_equal(ival_M.asfreq('B', 'S'), ival_M_to_B_start)
  591. assert_equal(ival_M.asfreq('B', 'E'), ival_M_to_B_end)
  592. assert_equal(ival_M.asfreq('D', 'S'), ival_M_to_D_start)
  593. assert_equal(ival_M.asfreq('D', 'E'), ival_M_to_D_end)
  594. assert_equal(ival_M.asfreq('H', 'S'), ival_M_to_H_start)
  595. assert_equal(ival_M.asfreq('H', 'E'), ival_M_to_H_end)
  596. assert_equal(ival_M.asfreq('Min', 'S'), ival_M_to_T_start)
  597. assert_equal(ival_M.asfreq('Min', 'E'), ival_M_to_T_end)
  598. assert_equal(ival_M.asfreq('S', 'S'), ival_M_to_S_start)
  599. assert_equal(ival_M.asfreq('S', 'E'), ival_M_to_S_end)
  600. assert_equal(ival_M.asfreq('M'), ival_M)
  601. def test_conv_weekly(self):
  602. # frequency conversion tests: from Weekly Frequency
  603. ival_W = Period(freq='WK', year=2007, month=1, day=1)
  604. ival_WSUN = Period(freq='WK', year=2007, month=1, day=7)
  605. ival_WSAT = Period(freq='WK-SAT', year=2007, month=1, day=6)
  606. ival_WFRI = Period(freq='WK-FRI', year=2007, month=1, day=5)
  607. ival_WTHU = Period(freq='WK-THU', year=2007, month=1, day=4)
  608. ival_WWED = Period(freq='WK-WED', year=2007, month=1, day=3)
  609. ival_WTUE = Period(freq='WK-TUE', year=2007, month=1, day=2)
  610. ival_WMON = Period(freq='WK-MON', year=2007, month=1, day=1)
  611. ival_WSUN_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  612. ival_WSUN_to_D_end = Period(freq='D', year=2007, month=1, day=7)
  613. ival_WSAT_to_D_start = Period(freq='D', year=2006, month=12, day=31)
  614. ival_WSAT_to_D_end = Period(freq='D', year=2007, month=1, day=6)
  615. ival_WFRI_to_D_start = Period(freq='D', year=2006, month=12, day=30)
  616. ival_WFRI_to_D_end = Period(freq='D', year=2007, month=1, day=5)
  617. ival_WTHU_to_D_start = Period(freq='D', year=2006, month=12, day=29)
  618. ival_WTHU_to_D_end = Period(freq='D', year=2007, month=1, day=4)
  619. ival_WWED_to_D_start = Period(freq='D', year=2006, month=12, day=28)
  620. ival_WWED_to_D_end = Period(freq='D', year=2007, month=1, day=3)
  621. ival_WTUE_to_D_start = Period(freq='D', year=2006, month=12, day=27)
  622. ival_WTUE_to_D_end = Period(freq='D', year=2007, month=1, day=2)
  623. ival_WMON_to_D_start = Period(freq='D', year=2006, month=12, day=26)
  624. ival_WMON_to_D_end = Period(freq='D', year=2007, month=1, day=1)
  625. ival_W_end_of_year = Period(freq='WK', year=2007, month=12, day=31)
  626. ival_W_end_of_quarter = Period(freq='WK', year=2007, month=3, day=31)
  627. ival_W_end_of_month = Period(freq='WK', year=2007, month=1, day=31)
  628. ival_W_to_A = Period(freq='A', year=2007)
  629. ival_W_to_Q = Period(freq='Q', year=2007, quarter=1)
  630. ival_W_to_M = Period(freq='M', year=2007, month=1)
  631. if Period(freq='D', year=2007, month=12, day=31).weekday == 6:
  632. ival_W_to_A_end_of_year = Period(freq='A', year=2007)
  633. else:
  634. ival_W_to_A_end_of_year = Period(freq='A', year=2008)
  635. if Period(freq='D', year=2007, month=3, day=31).weekday == 6:
  636. ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007,
  637. quarter=1)
  638. else:
  639. ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007,
  640. quarter=2)
  641. if Period(freq='D', year=2007, month=1, day=31).weekday == 6:
  642. ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=1)
  643. else:
  644. ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=2)
  645. ival_W_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  646. ival_W_to_B_end = Period(freq='B', year=2007, month=1, day=5)
  647. ival_W_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  648. ival_W_to_D_end = Period(freq='D', year=2007, month=1, day=7)
  649. ival_W_to_H_start = Period(freq='H', year=2007, month=1, day=1,
  650. hour=0)
  651. ival_W_to_H_end = Period(freq='H', year=2007, month=1, day=7,
  652. hour=23)
  653. ival_W_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  654. hour=0, minute=0)
  655. ival_W_to_T_end = Period(freq='Min', year=2007, month=1, day=7,
  656. hour=23, minute=59)
  657. ival_W_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  658. hour=0, minute=0, second=0)
  659. ival_W_to_S_end = Period(freq='S', year=2007, month=1, day=7,
  660. hour=23, minute=59, second=59)
  661. assert_equal(ival_W.asfreq('A'), ival_W_to_A)
  662. assert_equal(ival_W_end_of_year.asfreq('A'),
  663. ival_W_to_A_end_of_year)
  664. assert_equal(ival_W.asfreq('Q'), ival_W_to_Q)
  665. assert_equal(ival_W_end_of_quarter.asfreq('Q'),
  666. ival_W_to_Q_end_of_quarter)
  667. assert_equal(ival_W.asfreq('M'), ival_W_to_M)
  668. assert_equal(ival_W_end_of_month.asfreq('M'),
  669. ival_W_to_M_end_of_month)
  670. assert_equal(ival_W.asfreq('B', 'S'), ival_W_to_B_start)
  671. assert_equal(ival_W.asfreq('B', 'E'), ival_W_to_B_end)
  672. assert_equal(ival_W.asfreq('D', 'S'), ival_W_to_D_start)
  673. assert_equal(ival_W.asfreq('D', 'E'), ival_W_to_D_end)
  674. assert_equal(ival_WSUN.asfreq('D', 'S'), ival_WSUN_to_D_start)
  675. assert_equal(ival_WSUN.asfreq('D', 'E'), ival_WSUN_to_D_end)
  676. assert_equal(ival_WSAT.asfreq('D', 'S'), ival_WSAT_to_D_start)
  677. assert_equal(ival_WSAT.asfreq('D', 'E'), ival_WSAT_to_D_end)
  678. assert_equal(ival_WFRI.asfreq('D', 'S'), ival_WFRI_to_D_start)
  679. assert_equal(ival_WFRI.asfreq('D', 'E'), ival_WFRI_to_D_end)
  680. assert_equal(ival_WTHU.asfreq('D', 'S'), ival_WTHU_to_D_start)
  681. assert_equal(ival_WTHU.asfreq('D', 'E'), ival_WTHU_to_D_end)
  682. assert_equal(ival_WWED.asfreq('D', 'S'), ival_WWED_to_D_start)
  683. assert_equal(ival_WWED.asfreq('D', 'E'), ival_WWED_to_D_end)
  684. assert_equal(ival_WTUE.asfreq('D', 'S'), ival_WTUE_to_D_start)
  685. assert_equal(ival_WTUE.asfreq('D', 'E'), ival_WTUE_to_D_end)
  686. assert_equal(ival_WMON.asfreq('D', 'S'), ival_WMON_to_D_start)
  687. assert_equal(ival_WMON.asfreq('D', 'E'), ival_WMON_to_D_end)
  688. assert_equal(ival_W.asfreq('H', 'S'), ival_W_to_H_start)
  689. assert_equal(ival_W.asfreq('H', 'E'), ival_W_to_H_end)
  690. assert_equal(ival_W.asfreq('Min', 'S'), ival_W_to_T_start)
  691. assert_equal(ival_W.asfreq('Min', 'E'), ival_W_to_T_end)
  692. assert_equal(ival_W.asfreq('S', 'S'), ival_W_to_S_start)
  693. assert_equal(ival_W.asfreq('S', 'E'), ival_W_to_S_end)
  694. assert_equal(ival_W.asfreq('WK'), ival_W)
  695. def test_conv_business(self):
  696. # frequency conversion tests: from Business Frequency"
  697. ival_B = Period(freq='B', year=2007, month=1, day=1)
  698. ival_B_end_of_year = Period(freq='B', year=2007, month=12, day=31)
  699. ival_B_end_of_quarter = Period(freq='B', year=2007, month=3, day=30)
  700. ival_B_end_of_month = Period(freq='B', year=2007, month=1, day=31)
  701. ival_B_end_of_week = Period(freq='B', year=2007, month=1, day=5)
  702. ival_B_to_A = Period(freq='A', year=2007)
  703. ival_B_to_Q = Period(freq='Q', year=2007, quarter=1)
  704. ival_B_to_M = Period(freq='M', year=2007, month=1)
  705. ival_B_to_W = Period(freq='WK', year=2007, month=1, day=7)
  706. ival_B_to_D = Period(freq='D', year=2007, month=1, day=1)
  707. ival_B_to_H_start = Period(freq='H', year=2007, month=1, day=1,
  708. hour=0)
  709. ival_B_to_H_end = Period(freq='H', year=2007, month=1, day=1,
  710. hour=23)
  711. ival_B_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  712. hour=0, minute=0)
  713. ival_B_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
  714. hour=23, minute=59)
  715. ival_B_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  716. hour=0, minute=0, second=0)
  717. ival_B_to_S_end = Period(freq='S', year=2007, month=1, day=1,
  718. hour=23, minute=59, second=59)
  719. assert_equal(ival_B.asfreq('A'), ival_B_to_A)
  720. assert_equal(ival_B_end_of_year.asfreq('A'), ival_B_to_A)
  721. assert_equal(ival_B.asfreq('Q'), ival_B_to_Q)
  722. assert_equal(ival_B_end_of_quarter.asfreq('Q'), ival_B_to_Q)
  723. assert_equal(ival_B.asfreq('M'), ival_B_to_M)
  724. assert_equal(ival_B_end_of_month.asfreq('M'), ival_B_to_M)
  725. assert_equal(ival_B.asfreq('WK'), ival_B_to_W)
  726. assert_equal(ival_B_end_of_week.asfreq('WK'), ival_B_to_W)
  727. assert_equal(ival_B.asfreq('D'), ival_B_to_D)
  728. assert_equal(ival_B.asfreq('H', 'S'), ival_B_to_H_start)
  729. assert_equal(ival_B.asfreq('H', 'E'), ival_B_to_H_end)
  730. assert_equal(ival_B.asfreq('Min', 'S'), ival_B_to_T_start)
  731. assert_equal(ival_B.asfreq('Min', 'E'), ival_B_to_T_end)
  732. assert_equal(ival_B.asfreq('S', 'S'), ival_B_to_S_start)
  733. assert_equal(ival_B.asfreq('S', 'E'), ival_B_to_S_end)
  734. assert_equal(ival_B.asfreq('B'), ival_B)
  735. def test_conv_daily(self):
  736. # frequency conversion tests: from Business Frequency"
  737. ival_D = Period(freq='D', year=2007, month=1, day=1)
  738. ival_D_end_of_year = Period(freq='D', year=2007, month=12, day=31)
  739. ival_D_end_of_quarter = Period(freq='D', year=2007, month=3, day=31)
  740. ival_D_end_of_month = Period(freq='D', year=2007, month=1, day=31)
  741. ival_D_end_of_week = Period(freq='D', year=2007, month=1, day=7)
  742. ival_D_friday = Period(freq='D', year=2007, month=1, day=5)
  743. ival_D_saturday = Period(freq='D', year=2007, month=1, day=6)
  744. ival_D_sunday = Period(freq='D', year=2007, month=1, day=7)
  745. ival_D_monday = Period(freq='D', year=2007, month=1, day=8)
  746. ival_B_friday = Period(freq='B', year=2007, month=1, day=5)
  747. ival_B_monday = Period(freq='B', year=2007, month=1, day=8)
  748. ival_D_to_A = Period(freq='A', year=2007)
  749. ival_Deoq_to_AJAN = Period(freq='A-JAN', year=2008)
  750. ival_Deoq_to_AJUN = Period(freq='A-JUN', year=2007)
  751. ival_Deoq_to_ADEC = Period(freq='A-DEC', year=2007)
  752. ival_D_to_QEJAN = Period(freq="Q-JAN", year=2007, quarter=4)
  753. ival_D_to_QEJUN = Period(freq="Q-JUN", year=2007, quarter=3)
  754. ival_D_to_QEDEC = Period(freq="Q-DEC", year=2007, quarter=1)
  755. ival_D_to_M = Period(freq='M', year=2007, month=1)
  756. ival_D_to_W = Period(freq='WK', year=2007, month=1, day=7)
  757. ival_D_to_H_start = Period(freq='H', year=2007, month=1, day=1,
  758. hour=0)
  759. ival_D_to_H_end = Period(freq='H', year=2007, month=1, day=1,
  760. hour=23)
  761. ival_D_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  762. hour=0, minute=0)
  763. ival_D_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
  764. hour=23, minute=59)
  765. ival_D_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  766. hour=0, minute=0, second=0)
  767. ival_D_to_S_end = Period(freq='S', year=2007, month=1, day=1,
  768. hour=23, minute=59, second=59)
  769. assert_equal(ival_D.asfreq('A'), ival_D_to_A)
  770. assert_equal(ival_D_end_of_quarter.asfreq('A-JAN'),
  771. ival_Deoq_to_AJAN)
  772. assert_equal(ival_D_end_of_quarter.asfreq('A-JUN'),
  773. ival_Deoq_to_AJUN)
  774. assert_equal(ival_D_end_of_quarter.asfreq('A-DEC'),
  775. ival_Deoq_to_ADEC)
  776. assert_equal(ival_D_end_of_year.asfreq('A'), ival_D_to_A)
  777. assert_equal(ival_D_end_of_quarter.asfreq('Q'), ival_D_to_QEDEC)
  778. assert_equal(ival_D.asfreq("Q-JAN"), ival_D_to_QEJAN)
  779. assert_equal(ival_D.asfreq("Q-JUN"), ival_D_to_QEJUN)
  780. assert_equal(ival_D.asfreq("Q-DEC"), ival_D_to_QEDEC)
  781. assert_equal(ival_D.asfreq('M'), ival_D_to_M)
  782. assert_equal(ival_D_end_of_month.asfreq('M'), ival_D_to_M)
  783. assert_equal(ival_D.asfreq('WK'), ival_D_to_W)
  784. assert_equal(ival_D_end_of_week.asfreq('WK'), ival_D_to_W)
  785. assert_equal(ival_D_friday.asfreq('B'), ival_B_friday)
  786. assert_equal(ival_D_saturday.asfreq('B', 'S'), ival_B_friday)
  787. assert_equal(ival_D_saturday.asfreq('B', 'E'), ival_B_monday)
  788. assert_equal(ival_D_sunday.asfreq('B', 'S'), ival_B_friday)
  789. assert_equal(ival_D_sunday.asfreq('B', 'E'), ival_B_monday)
  790. assert_equal(ival_D.asfreq('H', 'S'), ival_D_to_H_start)
  791. assert_equal(ival_D.asfreq('H', 'E'), ival_D_to_H_end)
  792. assert_equal(ival_D.asfreq('Min', 'S'), ival_D_to_T_start)
  793. assert_equal(ival_D.asfreq('Min', 'E'), ival_D_to_T_end)
  794. assert_equal(ival_D.asfreq('S', 'S'), ival_D_to_S_start)
  795. assert_equal(ival_D.asfreq('S', 'E'), ival_D_to_S_end)
  796. assert_equal(ival_D.asfreq('D'), ival_D)
  797. def test_conv_hourly(self):
  798. # frequency conversion tests: from Hourly Frequency"
  799. ival_H = Period(freq='H', year=2007, month=1, day=1, hour=0)
  800. ival_H_end_of_year = Period(freq='H', year=2007, month=12, day=31,
  801. hour=23)
  802. ival_H_end_of_quarter = Period(freq='H', year=2007, month=3, day=31,
  803. hour=23)
  804. ival_H_end_of_month = Period(freq='H', year=2007, month=1, day=31,
  805. hour=23)
  806. ival_H_end_of_week = Period(freq='H', year=2007, month=1, day=7,
  807. hour=23)
  808. ival_H_end_of_day = Period(freq='H', year=2007, month=1, day=1,
  809. hour=23)
  810. ival_H_end_of_bus = Period(freq='H', year=2007, month=1, day=1,
  811. hour=23)
  812. ival_H_to_A = Period(freq='A', year=2007)
  813. ival_H_to_Q = Period(freq='Q', year=2007, quarter=1)
  814. ival_H_to_M = Period(freq='M', year=2007, month=1)
  815. ival_H_to_W = Period(freq='WK', year=2007, month=1, day=7)
  816. ival_H_to_D = Period(freq='D', year=2007, month=1, day=1)
  817. ival_H_to_B = Period(freq='B', year=2007, month=1, day=1)
  818. ival_H_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  819. hour=0, minute=0)
  820. ival_H_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
  821. hour=0, minute=59)
  822. ival_H_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  823. hour=0, minute=0, second=0)
  824. ival_H_to_S_end = Period(freq='S', year=2007, month=1, day=1,
  825. hour=0, minute=59, second=59)
  826. assert_equal(ival_H.asfreq('A'), ival_H_to_A)
  827. assert_equal(ival_H_end_of_year.asfreq('A'), ival_H_to_A)
  828. assert_equal(ival_H.asfreq('Q'), ival_H_to_Q)
  829. assert_equal(ival_H_end_of_quarter.asfreq('Q'), ival_H_to_Q)
  830. assert_equal(ival_H.asfreq('M'), ival_H_to_M)
  831. assert_equal(ival_H_end_of_month.asfreq('M'), ival_H_to_M)
  832. assert_equal(ival_H.asfreq('WK'), ival_H_to_W)
  833. assert_equal(ival_H_end_of_week.asfreq('WK'), ival_H_to_W)
  834. assert_equal(ival_H.asfreq('D'), ival_H_to_D)
  835. assert_equal(ival_H_end_of_day.asfreq('D'), ival_H_to_D)
  836. assert_equal(ival_H.asfreq('B'), ival_H_to_B)
  837. assert_equal(ival_H_end_of_bus.asfreq('B'), ival_H_to_B)
  838. assert_equal(ival_H.asfreq('Min', 'S'), ival_H_to_T_start)
  839. assert_equal(ival_H.asfreq('Min', 'E'), ival_H_to_T_end)
  840. assert_equal(ival_H.asfreq('S', 'S'), ival_H_to_S_start)
  841. assert_equal(ival_H.asfreq('S', 'E'), ival_H_to_S_end)
  842. assert_equal(ival_H.asfreq('H'), ival_H)
  843. def test_conv_minutely(self):
  844. # frequency conversion tests: from Minutely Frequency"
  845. ival_T = Period(freq='Min', year=2007, month=1, day=1,
  846. hour=0, minute=0)
  847. ival_T_end_of_year = Period(freq='Min', year=2007, month=12, day=31,
  848. hour=23, minute=59)
  849. ival_T_end_of_quarter = Period(freq='Min', year=2007, month=3, day=31,
  850. hour=23, minute=59)
  851. ival_T_end_of_month = Period(freq='Min', year=2007, month=1, day=31,
  852. hour=23, minute=59)
  853. ival_T_end_of_week = Period(freq='Min', year=2007, month=1, day=7,
  854. hour=23, minute=59)
  855. ival_T_end_of_day = Period(freq='Min', year=2007, month=1, day=1,
  856. hour=23, minute=59)
  857. ival_T_end_of_bus = Period(freq='Min', year=2007, month=1, day=1,
  858. hour=23, minute=59)
  859. ival_T_end_of_hour = Period(freq='Min', year=2007, month=1, day=1,
  860. hour=0, minute=59)
  861. ival_T_to_A = Period(freq='A', year=2007)
  862. ival_T_to_Q = Period(freq='Q', year=2007, quarter=1)
  863. ival_T_to_M = Period(freq='M', year=2007, month=1)
  864. ival_T_to_W = Period(freq='WK', year=2007, month=1, day=7)
  865. ival_T_to_D = Period(freq='D', year=2007, month=1, day=1)
  866. ival_T_to_B = Period(freq='B', year=2007, month=1, day=1)
  867. ival_T_to_H = Period(freq='H', year=2007, month=1, day=1, hour=0)
  868. ival_T_to_S_start = Period(freq='S', year=2007, month=1, day=1,
  869. hour=0, minute=0, second=0)
  870. ival_T_to_S_end = Period(freq='S', year=2007, month=1, day=1,
  871. hour=0, minute=0, second=59)
  872. assert_equal(ival_T.asfreq('A'), ival_T_to_A)
  873. assert_equal(ival_T_end_of_year.asfreq('A'), ival_T_to_A)
  874. assert_equal(ival_T.asfreq('Q'), ival_T_to_Q)
  875. assert_equal(ival_T_end_of_quarter.asfreq('Q'), ival_T_to_Q)
  876. assert_equal(ival_T.asfreq('M'), ival_T_to_M)
  877. assert_equal(ival_T_end_of_month.asfreq('M'), ival_T_to_M)
  878. assert_equal(ival_T.asfreq('WK'), ival_T_to_W)
  879. assert_equal(ival_T_end_of_week.asfreq('WK'), ival_T_to_W)
  880. assert_equal(ival_T.asfreq('D'), ival_T_to_D)
  881. assert_equal(ival_T_end_of_day.asfreq('D'), ival_T_to_D)
  882. assert_equal(ival_T.asfreq('B'), ival_T_to_B)
  883. assert_equal(ival_T_end_of_bus.asfreq('B'), ival_T_to_B)
  884. assert_equal(ival_T.asfreq('H'), ival_T_to_H)
  885. assert_equal(ival_T_end_of_hour.asfreq('H'), ival_T_to_H)
  886. assert_equal(ival_T.asfreq('S', 'S'), ival_T_to_S_start)
  887. assert_equal(ival_T.asfreq('S', 'E'), ival_T_to_S_end)
  888. assert_equal(ival_T.asfreq('Min'), ival_T)
  889. def test_conv_secondly(self):
  890. # frequency conversion tests: from Secondly Frequency"
  891. ival_S = Period(freq='S', year=2007, month=1, day=1,
  892. hour=0, minute=0, second=0)
  893. ival_S_end_of_year = Period(freq='S', year=2007, month=12, day=31,
  894. hour=23, minute=59, second=59)
  895. ival_S_end_of_quarter = Period(freq='S', year=2007, month=3, day=31,
  896. hour=23, minute=59, second=59)
  897. ival_S_end_of_month = Period(freq='S', year=2007, month=1, day=31,
  898. hour=23, minute=59, second=59)
  899. ival_S_end_of_week = Period(freq='S', year=2007, month=1, day=7,
  900. hour=23, minute=59, second=59)
  901. ival_S_end_of_day = Period(freq='S', year=2007, month=1, day=1,
  902. hour=23, minute=59, second=59)
  903. ival_S_end_of_bus = Period(freq='S', year=2007, month=1, day=1,
  904. hour=23, minute=59, second=59)
  905. ival_S_end_of_hour = Period(freq='S', year=2007, month=1, day=1,
  906. hour=0, minute=59, second=59)
  907. ival_S_end_of_minute = Period(freq='S', year=2007, month=1, day=1,
  908. hour=0, minute=0, second=59)
  909. ival_S_to_A = Period(freq='A', year=2007)
  910. ival_S_to_Q = Period(freq='Q', year=2007, quarter=1)
  911. ival_S_to_M = Period(freq='M', year=2007, month=1)
  912. ival_S_to_W = Period(freq='WK', year=2007, month=1, day=7)
  913. ival_S_to_D = Period(freq='D', year=2007, month=1, day=1)
  914. ival_S_to_B = Period(freq='B', year=2007, month=1, day=1)
  915. ival_S_to_H = Period(freq='H', year=2007, month=1, day=1,
  916. hour=0)
  917. ival_S_to_T = Period(freq='Min', year=2007, month=1, day=1,
  918. hour=0, minute=0)
  919. assert_equal(ival_S.asfreq('A'), ival_S_to_A)
  920. assert_equal(ival_S_end_of_year.asfreq('A'), ival_S_to_A)
  921. assert_equal(ival_S.asfreq('Q'), ival_S_to_Q)
  922. assert_equal(ival_S_end_of_quarter.asfreq('Q'), ival_S_to_Q)
  923. assert_equal(ival_S.asfreq('M'), ival_S_to_M)
  924. assert_equal(ival_S_end_of_month.asfreq('M'), ival_S_to_M)
  925. assert_equal(ival_S.asfreq('WK'), ival_S_to_W)
  926. assert_equal(ival_S_end_of_week.asfreq('WK'), ival_S_to_W)
  927. assert_equal(ival_S.asfreq('D'), ival_S_to_D)
  928. assert_equal(ival_S_end_of_day.asfreq('D'), ival_S_to_D)
  929. assert_equal(ival_S.asfreq('B'), ival_S_to_B)
  930. assert_equal(ival_S_end_of_bus.asfreq('B'), ival_S_to_B)
  931. assert_equal(ival_S.asfreq('H'), ival_S_to_H)
  932. assert_equal(ival_S_end_of_hour.asfreq('H'), ival_S_to_H)
  933. assert_equal(ival_S.asfreq('Min'), ival_S_to_T)
  934. assert_equal(ival_S_end_of_minute.asfreq('Min'), ival_S_to_T)
  935. assert_equal(ival_S.asfreq('S'), ival_S)
  936. def test_asfreq_nat(self):
  937. p = Period('NaT', freq='A')
  938. result = p.asfreq('M')
  939. self.assertEqual(result.ordinal, tslib.iNaT)
  940. self.assertEqual(result.freq, 'M')
  941. class TestPeriodIndex(tm.TestCase):
  942. def setUp(self):
  943. pass
  944. def test_hash_error(self):
  945. index = period_range('20010101', periods=10)
  946. with tm.assertRaisesRegexp(TypeError,
  947. "unhashable type: %r" %
  948. type(index).__name__):
  949. hash(index)
  950. def test_make_time_series(self):
  951. index = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  952. series = Series(1, index=index)
  953. tm.assert_isinstance(series, TimeSeries)
  954. def test_astype(self):
  955. idx = period_range('1990', '2009', freq='A')
  956. result = idx.astype('i8')
  957. self.assert_numpy_array_equal(result, idx.values)
  958. def test_constructor_use_start_freq(self):
  959. # GH #1118
  960. p = Period('4/2/2012', freq='B')
  961. index = PeriodIndex(start=p, periods=10)
  962. expected = PeriodIndex(start='4/2/2012', periods=10, freq='B')
  963. self.assertTrue(index.equals(expected))
  964. def test_constructor_field_arrays(self):
  965. # GH #1264
  966. years = np.arange(1990, 2010).repeat(4)[2:-2]
  967. quarters = np.tile(np.arange(1, 5), 20)[2:-2]
  968. index = PeriodIndex(year=years, quarter=quarters, freq='Q-DEC')
  969. expected = period_range('1990Q3', '2009Q2', freq='Q-DEC')
  970. self.assertTrue(index.equals(expected))
  971. self.assertRaises(
  972. ValueError, PeriodIndex, year=years, quarter=quarters,
  973. freq='2Q-DEC')
  974. index = PeriodIndex(year=years, quarter=quarters)
  975. self.assertTrue(index.equals(expected))
  976. years = [2007, 2007, 2007]
  977. months = [1, 2]
  978. self.assertRaises(ValueError, PeriodIndex, year=years, month=months,
  979. freq='M')
  980. self.assertRaises(ValueError, PeriodIndex, year=years, month=months,
  981. freq='2M')
  982. self.assertRaises(ValueError, PeriodIndex, year=years, month=months,
  983. freq='M', start=Period('2007-01', freq='M'))
  984. years = [2007, 2007, 2007]
  985. months = [1, 2, 3]
  986. idx = PeriodIndex(year=years, month=months, freq='M')
  987. exp = period_range('2007-01', periods=3, freq='M')
  988. self.assertTrue(idx.equals(exp))
  989. def test_constructor_U(self):
  990. # U was used as undefined period
  991. self.assertRaises(ValueError, period_range, '2007-1-1', periods=500,
  992. freq='X')
  993. def test_constructor_arrays_negative_year(self):
  994. years = np.arange(1960, 2000).repeat(4)
  995. quarters = np.tile(lrange(1, 5), 40)
  996. pindex = PeriodIndex(year=years, quarter=quarters)
  997. self.assert_numpy_array_equal(pindex.year, years)
  998. self.assert_numpy_array_equal(pindex.quarter, quarters)
  999. def test_constructor_invalid_quarters(self):
  1000. self.assertRaises(ValueError, PeriodIndex, year=lrange(2000, 2004),
  1001. quarter=lrange(4), freq='Q-DEC')
  1002. def test_constructor_corner(self):
  1003. self.assertRaises(ValueError, PeriodIndex, periods=10, freq='A')
  1004. start = Period('2007', freq='A-JUN')
  1005. end = Period('2010', freq='A-DEC')
  1006. self.assertRaises(ValueError, PeriodIndex, start=start, end=end)
  1007. self.assertRaises(ValueError, PeriodIndex, start=start)
  1008. self.assertRaises(ValueError, PeriodIndex, end=end)
  1009. result = period_range('2007-01', periods=10.5, freq='M')
  1010. exp = period_range('2007-01', periods=10, freq='M')
  1011. self.assertTrue(result.equals(exp))
  1012. def test_constructor_fromarraylike(self):
  1013. idx = period_range('2007-01', periods=20, freq='M')
  1014. self.assertRaises(ValueError, PeriodIndex, idx.values)
  1015. self.assertRaises(ValueError, PeriodIndex, list(idx.values))
  1016. self.assertRaises(ValueError, PeriodIndex,
  1017. data=Period('2007', freq='A'))
  1018. result = PeriodIndex(iter(idx))
  1019. self.assertTrue(result.equals(idx))
  1020. result = PeriodIndex(idx)
  1021. self.assertTrue(result.equals(idx))
  1022. result = PeriodIndex(idx, freq='M')
  1023. self.assertTrue(result.equals(idx))
  1024. result = PeriodIndex(idx, freq='D')
  1025. exp = idx.asfreq('D', 'e')
  1026. self.assertTrue(result.equals(exp))
  1027. def test_constructor_datetime64arr(self):
  1028. vals = np.arange(100000, 100000 + 10000, 100, dtype=np.int64)
  1029. vals = vals.view(np.dtype('M8[us]'))
  1030. self.assertRaises(ValueError, PeriodIndex, vals, freq='D')
  1031. def test_constructor_simple_new(self):
  1032. idx = period_range('2007-01', name='p', periods=20, freq='M')
  1033. result = idx._simple_new(idx, 'p', freq=idx.freq)
  1034. self.assertTrue(result.equals(idx))
  1035. result = idx._simple_new(idx.astype('i8'), 'p', freq=idx.freq)
  1036. self.assertTrue(result.equals(idx))
  1037. def test_constructor_nat(self):
  1038. self.assertRaises(
  1039. ValueError, period_range, start='NaT', end='2011-01-01', freq='M')
  1040. self.assertRaises(
  1041. ValueError, period_range, start='2011-01-01', end='NaT', freq='M')
  1042. def test_constructor_year_and_quarter(self):
  1043. year = pd.Series([2001, 2002, 2003])
  1044. quarter = year - 2000
  1045. idx = PeriodIndex(year=year, quarter=quarter)
  1046. strs = ['%dQ%d' % t for t in zip(quarter, year)]
  1047. lops = list(map(Period, strs))
  1048. p = PeriodIndex(lops)
  1049. tm.assert_index_equal(p, idx)
  1050. def test_is_(self):
  1051. create_index = lambda: PeriodIndex(freq='A', start='1/1/2001',
  1052. end='12/1/2009')
  1053. index = create_index()
  1054. self.assertEqual(index.is_(index), True)
  1055. self.assertEqual(index.is_(create_index()), False)
  1056. self.assertEqual(index.is_(index.view()), True)
  1057. self.assertEqual(index.is_(index.view().view().view().view().view()), True)
  1058. self.assertEqual(index.view().is_(index), True)
  1059. ind2 = index.view()
  1060. index.name = "Apple"
  1061. self.assertEqual(ind2.is_(index), True)
  1062. self.assertEqual(index.is_(index[:]), False)
  1063. self.assertEqual(index.is_(index.asfreq('M')), False)
  1064. self.assertEqual(index.is_(index.asfreq('A')), False)
  1065. self.assertEqual(index.is_(index - 2), False)
  1066. self.assertEqual(index.is_(index - 0), False)
  1067. def test_comp_period(self):
  1068. idx = period_range('2007-01', periods=20, freq='M')
  1069. result = idx < idx[10]
  1070. exp = idx.values < idx.values[10]
  1071. self.assert_numpy_array_equal(result, exp)
  1072. def test_getitem_ndim2(self):
  1073. idx = period_range('2007-01', periods=3, freq='M')
  1074. result = idx[:, None]
  1075. # MPL kludge
  1076. tm.assert_isinstance(result, PeriodIndex)
  1077. def test_getitem_partial(self):
  1078. rng = period_range('2007-01', periods=50, freq='M')
  1079. ts = Series(np.random.randn(len(rng)), rng)
  1080. self.assertRaises(KeyError, ts.__getitem__, '2006')
  1081. result = ts['2008']
  1082. self.assertTrue((result.index.year == 2008).all())
  1083. result = ts['2008':'2009']
  1084. self.assertEqual(len(result), 24)
  1085. result = ts['2008-1':'2009-12']
  1086. self.assertEqual(len(result), 24)
  1087. result = ts['2008Q1':'2009Q4']
  1088. self.assertEqual(len(result), 24)
  1089. result = ts[:'2009']
  1090. self.assertEqual(len(result), 36)
  1091. result = ts['2009':]
  1092. self.assertEqual(len(result), 50 - 24)
  1093. exp = result
  1094. result = ts[24:]
  1095. assert_series_equal(exp, result)
  1096. ts = ts[10:].append(ts[10:])
  1097. self.assertRaises(ValueError, ts.__getitem__, slice('2008', '2009'))
  1098. def test_getitem_datetime(self):
  1099. rng = period_range(start='2012-01-01', periods=10, freq='W-MON')
  1100. ts = Series(lrange(len(rng)), index=rng)
  1101. dt1 = datetime(2011, 10, 2)
  1102. dt4 = datetime(2012, 4, 20)
  1103. rs = ts[dt1:dt4]
  1104. assert_series_equal(rs, ts)
  1105. def test_sub(self):
  1106. rng = period_range('2007-01', periods=50)
  1107. result = rng - 5
  1108. exp = rng + (-5)
  1109. self.assertTrue(result.equals(exp))
  1110. def test_periods_number_check(self):
  1111. self.assertRaises(
  1112. ValueError, period_range, '2011-1-1', '2012-1-1', 'B')
  1113. def test_tolist(self):
  1114. index = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1115. rs = index.tolist()
  1116. [tm.assert_isinstance(x, Period) for x in rs]
  1117. recon = PeriodIndex(rs)
  1118. self.assertTrue(index.equals(recon))
  1119. def test_to_timestamp(self):
  1120. index = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1121. series = Series(1, index=index, name='foo')
  1122. exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
  1123. result = series.to_timestamp(how='end')
  1124. self.assertTrue(result.index.equals(exp_index))
  1125. self.assertEqual(result.name, 'foo')
  1126. exp_index = date_range('1/1/2001', end='1/1/2009', freq='AS-JAN')
  1127. result = series.to_timestamp(how='start')
  1128. self.assertTrue(result.index.equals(exp_index))
  1129. def _get_with_delta(delta, freq='A-DEC'):
  1130. return date_range(to_datetime('1/1/2001') + delta,
  1131. to_datetime('12/31/2009') + delta, freq=freq)
  1132. delta = timedelta(hours=23)
  1133. result = series.to_timestamp('H', 'end')
  1134. exp_index = _get_with_delta(delta)
  1135. self.assertTrue(result.index.equals(exp_index))
  1136. delta = timedelta(hours=23, minutes=59)
  1137. result = series.to_timestamp('T', 'end')
  1138. exp_index = _get_with_delta(delta)
  1139. self.assertTrue(result.index.equals(exp_index))
  1140. result = series.to_timestamp('S', 'end')
  1141. delta = timedelta(hours=23, minutes=59, seconds=59)
  1142. exp_index = _get_with_delta(delta)
  1143. self.assertTrue(result.index.equals(exp_index))
  1144. self.assertRaises(ValueError, index.to_timestamp, '5t')
  1145. index = PeriodIndex(freq='H', start='1/1/2001', end='1/2/2001')
  1146. series = Series(1, index=index, name='foo')
  1147. exp_index = date_range('1/1/2001 00:59:59', end='1/2/2001 00:59:59',
  1148. freq='H')
  1149. result = series.to_timestamp(how='end')
  1150. self.assertTrue(result.index.equals(exp_index))
  1151. self.assertEqual(result.name, 'foo')
  1152. def test_to_timestamp_quarterly_bug(self):
  1153. years = np.arange(1960, 2000).repeat(4)
  1154. quarters = np.tile(lrange(1, 5), 40)
  1155. pindex = PeriodIndex(year=years, quarter=quarters)
  1156. stamps = pindex.to_timestamp('D', 'end')
  1157. expected = DatetimeIndex([x.to_timestamp('D', 'end') for x in pindex])
  1158. self.assertTrue(stamps.equals(expected))
  1159. def test_to_timestamp_preserve_name(self):
  1160. index = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009',
  1161. name='foo')
  1162. self.assertEqual(index.name, 'foo')
  1163. conv = index.to_timestamp('D')
  1164. self.assertEqual(conv.name, 'foo')
  1165. def test_to_timestamp_repr_is_code(self):
  1166. zs=[Timestamp('99-04-17 00:00:00',tz='UTC'),
  1167. Timestamp('2001-04-17 00:00:00',tz='UTC'),
  1168. Timestamp('2001-04-17 00:00:00',tz='America/Los_Angeles'),
  1169. Timestamp('2001-04-17 00:00:00',tz=None)]
  1170. for z in zs:
  1171. self.assertEqual( eval(repr(z)), z)
  1172. def test_to_timestamp_period_nat(self):
  1173. # GH 7228
  1174. index = PeriodIndex(['NaT', '2011-01', '2011-02'], freq='M', name='idx')
  1175. result = index.to_timestamp('D')
  1176. expected = DatetimeIndex([pd.NaT, datetime(2011, 1, 1),
  1177. datetime(2011, 2, 1)], name='idx')
  1178. self.assertTrue(result.equals(expected))
  1179. self.assertEqual(result.name, 'idx')
  1180. result2 = result.to_period(freq='M')
  1181. self.assertTrue(result2.equals(index))
  1182. self.assertEqual(result2.name, 'idx')
  1183. def test_as_frame_columns(self):
  1184. rng = period_range('1/1/2000', periods=5)
  1185. df = DataFrame(randn(10, 5), columns=rng)
  1186. ts = df[rng[0]]
  1187. assert_series_equal(ts, df.ix[:, 0])
  1188. # GH # 1211
  1189. repr(df)
  1190. ts = df['1/1/2000']
  1191. assert_series_equal(ts, df.ix[:, 0])
  1192. def test_indexing(self):
  1193. # GH 4390, iat incorrectly indexing
  1194. index = period_range('1/1/2001', periods=10)
  1195. s = Series(randn(10), index=index)
  1196. expected = s[index[0]]
  1197. result = s.iat[0]
  1198. self.assertEqual(expected, result)
  1199. def test_frame_setitem(self):
  1200. rng = period_range('1/1/2000', periods=5)
  1201. rng.name = 'index'
  1202. df = DataFrame(randn(5, 3), index=rng)
  1203. df['Index'] = rng
  1204. rs = Index(df['Index'])
  1205. self.assertTrue(rs.equals(rng))
  1206. rs = df.reset_index().set_index('index')
  1207. tm.assert_isinstance(rs.index, PeriodIndex)
  1208. self.assertTrue(rs.index.equals(rng))
  1209. def test_period_set_index_reindex(self):
  1210. # GH 6631
  1211. df = DataFrame(np.random.random(6))
  1212. idx1 = period_range('2011/01/01', periods=6, freq='M')
  1213. idx2 = period_range('2013', periods=6, freq='A')
  1214. df = df.set_index(idx1)
  1215. self.assertTrue(df.index.equals(idx1))
  1216. df = df.reindex(idx2)
  1217. self.assertTrue(df.index.equals(idx2))
  1218. def test_nested_dict_frame_constructor(self):
  1219. rng = period_range('1/1/2000', periods=5)
  1220. df = DataFrame(randn(10, 5), columns=rng)
  1221. data = {}
  1222. for col in df.columns:
  1223. for row in df.index:
  1224. data.setdefault(col, {})[row] = df.get_value(row, col)
  1225. result = DataFrame(data, columns=rng)
  1226. tm.assert_frame_equal(result, df)
  1227. data = {}
  1228. for col in df.columns:
  1229. for row in df.index:
  1230. data.setdefault(row, {})[col] = df.get_value(row, col)
  1231. result = DataFrame(data, index=rng).T
  1232. tm.assert_frame_equal(result, df)
  1233. def test_frame_to_time_stamp(self):
  1234. K = 5
  1235. index = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1236. df = DataFrame(randn(len(index), K), index=index)
  1237. df['mix'] = 'a'
  1238. exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
  1239. result = df.to_timestamp('D', 'end')
  1240. self.assertTrue(result.index.equals(exp_index))
  1241. assert_almost_equal(result.values, df.values)
  1242. exp_index = date_range('1/1/2001', end='1/1/2009', freq='AS-JAN')
  1243. result = df.to_timestamp('D', 'start')
  1244. self.assertTrue(result.index.equals(exp_index))
  1245. def _get_with_delta(delta, freq='A-DEC'):
  1246. return date_range(to_datetime('1/1/2001') + delta,
  1247. to_datetime('12/31/2009') + delta, freq=freq)
  1248. delta = timedelta(hours=23)
  1249. result = df.to_timestamp('H', 'end')
  1250. exp_index = _get_with_delta(delta)
  1251. self.assertTrue(result.index.equals(exp_index))
  1252. delta = timedelta(hours=23, minutes=59)
  1253. result = df.to_timestamp('T', 'end')
  1254. exp_index = _get_with_delta(delta)
  1255. self.assertTrue(result.index.equals(exp_index))
  1256. result = df.to_timestamp('S', 'end')
  1257. delta = timedelta(hours=23, minutes=59, seconds=59)
  1258. exp_index = _get_with_delta(delta)
  1259. self.assertTrue(result.index.equals(exp_index))
  1260. # columns
  1261. df = df.T
  1262. exp_index = date_range('1/1/2001', end='12/31/2009', freq='A-DEC')
  1263. result = df.to_timestamp('D', 'end', axis=1)
  1264. self.assertTrue(result.columns.equals(exp_index))
  1265. assert_almost_equal(result.values, df.values)
  1266. exp_index = date_range('1/1/2001', end='1/1/2009', freq='AS-JAN')
  1267. result = df.to_timestamp('D', 'start', axis=1)
  1268. self.assertTrue(result.columns.equals(exp_index))
  1269. delta = timedelta(hours=23)
  1270. result = df.to_timestamp('H', 'end', axis=1)
  1271. exp_index = _get_with_delta(delta)
  1272. self.assertTrue(result.columns.equals(exp_index))
  1273. delta = timedelta(hours=23, minutes=59)
  1274. result = df.to_timestamp('T', 'end', axis=1)
  1275. exp_index = _get_with_delta(delta)
  1276. self.assertTrue(result.columns.equals(exp_index))
  1277. result = df.to_timestamp('S', 'end', axis=1)
  1278. delta = timedelta(hours=23, minutes=59, seconds=59)
  1279. exp_index = _get_with_delta(delta)
  1280. self.assertTrue(result.columns.equals(exp_index))
  1281. # invalid axis
  1282. assertRaisesRegexp(ValueError, 'axis', df.to_timestamp, axis=2)
  1283. assertRaisesRegexp(ValueError, 'Only mult == 1', df.to_timestamp, '5t', axis=1)
  1284. def test_index_duplicate_periods(self):
  1285. # monotonic
  1286. idx = PeriodIndex([2000, 2007, 2007, 2009, 2009], freq='A-JUN')
  1287. ts = Series(np.random.randn(len(idx)), index=idx)
  1288. result = ts[2007]
  1289. expected = ts[1:3]
  1290. assert_series_equal(result, expected)
  1291. result[:] = 1
  1292. self.assertTrue((ts[1:3] == 1).all())
  1293. # not monotonic
  1294. idx = PeriodIndex([2000, 2007, 2007, 2009, 2007], freq='A-JUN')
  1295. ts = Series(np.random.randn(len(idx)), index=idx)
  1296. result = ts[2007]
  1297. expected = ts[idx == 2007]
  1298. assert_series_equal(result, expected)
  1299. def test_index_unique(self):
  1300. idx = PeriodIndex([2000, 2007, 2007, 2009, 2009], freq='A-JUN')
  1301. expected = PeriodIndex([2000, 2007, 2009], freq='A-JUN')
  1302. self.assert_numpy_array_equal(idx.unique(), expected.values)
  1303. self.assertEqual(idx.nunique(), 3)
  1304. idx = PeriodIndex([2000, 2007, 2007, 2009, 2007], freq='A-JUN', tz='US/Eastern')
  1305. expected = PeriodIndex([2000, 2007, 2009], freq='A-JUN', tz='US/Eastern')
  1306. self.assert_numpy_array_equal(idx.unique(), expected.values)
  1307. self.assertEqual(idx.nunique(), 3)
  1308. def test_constructor(self):
  1309. pi = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1310. assert_equal(len(pi), 9)
  1311. pi = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2009')
  1312. assert_equal(len(pi), 4 * 9)
  1313. pi = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
  1314. assert_equal(len(pi), 12 * 9)
  1315. pi = PeriodIndex(freq='D', start='1/1/2001', end='12/31/2009')
  1316. assert_equal(len(pi), 365 * 9 + 2)
  1317. pi = PeriodIndex(freq='B', start='1/1/2001', end='12/31/2009')
  1318. assert_equal(len(pi), 261 * 9)
  1319. pi = PeriodIndex(freq='H', start='1/1/2001', end='12/31/2001 23:00')
  1320. assert_equal(len(pi), 365 * 24)
  1321. pi = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 23:59')
  1322. assert_equal(len(pi), 24 * 60)
  1323. pi = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 23:59:59')
  1324. assert_equal(len(pi), 24 * 60 * 60)
  1325. start = Period('02-Apr-2005', 'B')
  1326. i1 = PeriodIndex(start=start, periods=20)
  1327. assert_equal(len(i1), 20)
  1328. assert_equal(i1.freq, start.freq)
  1329. assert_equal(i1[0], start)
  1330. end_intv = Period('2006-12-31', 'W')
  1331. i1 = PeriodIndex(end=end_intv, periods=10)
  1332. assert_equal(len(i1), 10)
  1333. assert_equal(i1.freq, end_intv.freq)
  1334. assert_equal(i1[-1], end_intv)
  1335. end_intv = Period('2006-12-31', '1w')
  1336. i2 = PeriodIndex(end=end_intv, periods=10)
  1337. assert_equal(len(i1), len(i2))
  1338. self.assertTrue((i1 == i2).all())
  1339. assert_equal(i1.freq, i2.freq)
  1340. end_intv = Period('2006-12-31', ('w', 1))
  1341. i2 = PeriodIndex(end=end_intv, periods=10)
  1342. assert_equal(len(i1), len(i2))
  1343. self.assertTrue((i1 == i2).all())
  1344. assert_equal(i1.freq, i2.freq)
  1345. try:
  1346. PeriodIndex(start=start, end=end_intv)
  1347. raise AssertionError('Cannot allow mixed freq for start and end')
  1348. except ValueError:
  1349. pass
  1350. end_intv = Period('2005-05-01', 'B')
  1351. i1 = PeriodIndex(start=start, end=end_intv)
  1352. try:
  1353. PeriodIndex(start=start)
  1354. raise AssertionError(
  1355. 'Must specify periods if missing start or end')
  1356. except ValueError:
  1357. pass
  1358. # infer freq from first element
  1359. i2 = PeriodIndex([end_intv, Period('2005-05-05', 'B')])
  1360. assert_equal(len(i2), 2)
  1361. assert_equal(i2[0], end_intv)
  1362. i2 = PeriodIndex(np.array([end_intv, Period('2005-05-05', 'B')]))
  1363. assert_equal(len(i2), 2)
  1364. assert_equal(i2[0], end_intv)
  1365. # Mixed freq should fail
  1366. vals = [end_intv, Period('2006-12-31', 'w')]
  1367. self.assertRaises(ValueError, PeriodIndex, vals)
  1368. vals = np.array(vals)
  1369. self.assertRaises(ValueError, PeriodIndex, vals)
  1370. def test_shift(self):
  1371. pi1 = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1372. pi2 = PeriodIndex(freq='A', start='1/1/2002', end='12/1/2010')
  1373. self.assertTrue(pi1.shift(0).equals(pi1))
  1374. assert_equal(len(pi1), len(pi2))
  1375. assert_equal(pi1.shift(1).values, pi2.values)
  1376. pi1 = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1377. pi2 = PeriodIndex(freq='A', start='1/1/2000', end='12/1/2008')
  1378. assert_equal(len(pi1), len(pi2))
  1379. assert_equal(pi1.shift(-1).values, pi2.values)
  1380. pi1 = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
  1381. pi2 = PeriodIndex(freq='M', start='2/1/2001', end='1/1/2010')
  1382. assert_equal(len(pi1), len(pi2))
  1383. assert_equal(pi1.shift(1).values, pi2.values)
  1384. pi1 = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
  1385. pi2 = PeriodIndex(freq='M', start='12/1/2000', end='11/1/2009')
  1386. assert_equal(len(pi1), len(pi2))
  1387. assert_equal(pi1.shift(-1).values, pi2.values)
  1388. pi1 = PeriodIndex(freq='D', start='1/1/2001', end='12/1/2009')
  1389. pi2 = PeriodIndex(freq='D', start='1/2/2001', end='12/2/2009')
  1390. assert_equal(len(pi1), len(pi2))
  1391. assert_equal(pi1.shift(1).values, pi2.values)
  1392. pi1 = PeriodIndex(freq='D', start='1/1/2001', end='12/1/2009')
  1393. pi2 = PeriodIndex(freq='D', start='12/31/2000', end='11/30/2009')
  1394. assert_equal(len(pi1), len(pi2))
  1395. assert_equal(pi1.shift(-1).values, pi2.values)
  1396. def test_shift_nat(self):
  1397. idx = PeriodIndex(['2011-01', '2011-02', 'NaT', '2011-04'], freq='M', name='idx')
  1398. result = idx.shift(1)
  1399. expected = PeriodIndex(['2011-02', '2011-03', 'NaT', '2011-05'], freq='M', name='idx')
  1400. self.assertTrue(result.equals(expected))
  1401. self.assertEqual(result.name, expected.name)
  1402. def test_asfreq(self):
  1403. pi1 = PeriodIndex(freq='A', start='1/1/2001', end='1/1/2001')
  1404. pi2 = PeriodIndex(freq='Q', start='1/1/2001', end='1/1/2001')
  1405. pi3 = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2001')
  1406. pi4 = PeriodIndex(freq='D', start='1/1/2001', end='1/1/2001')
  1407. pi5 = PeriodIndex(freq='H', start='1/1/2001', end='1/1/2001 00:00')
  1408. pi6 = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 00:00')
  1409. pi7 = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 00:00:00')
  1410. self.assertEqual(pi1.asfreq('Q', 'S'), pi2)
  1411. self.assertEqual(pi1.asfreq('Q', 's'), pi2)
  1412. self.assertEqual(pi1.asfreq('M', 'start'), pi3)
  1413. self.assertEqual(pi1.asfreq('D', 'StarT'), pi4)
  1414. self.assertEqual(pi1.asfreq('H', 'beGIN'), pi5)
  1415. self.assertEqual(pi1.asfreq('Min', 'S'), pi6)
  1416. self.assertEqual(pi1.asfreq('S', 'S'), pi7)
  1417. self.assertEqual(pi2.asfreq('A', 'S'), pi1)
  1418. self.assertEqual(pi2.asfreq('M', 'S'), pi3)
  1419. self.assertEqual(pi2.asfreq('D', 'S'), pi4)
  1420. self.assertEqual(pi2.asfreq('H', 'S'), pi5)
  1421. self.assertEqual(pi2.asfreq('Min', 'S'), pi6)
  1422. self.assertEqual(pi2.asfreq('S', 'S'), pi7)
  1423. self.assertEqual(pi3.asfreq('A', 'S'), pi1)
  1424. self.assertEqual(pi3.asfreq('Q', 'S'), pi2)
  1425. self.assertEqual(pi3.asfreq('D', 'S'), pi4)
  1426. self.assertEqual(pi3.asfreq('H', 'S'), pi5)
  1427. self.assertEqual(pi3.asfreq('Min', 'S'), pi6)
  1428. self.assertEqual(pi3.asfreq('S', 'S'), pi7)
  1429. self.assertEqual(pi4.asfreq('A', 'S'), pi1)
  1430. self.assertEqual(pi4.asfreq('Q', 'S'), pi2)
  1431. self.assertEqual(pi4.asfreq('M', 'S'), pi3)
  1432. self.assertEqual(pi4.asfreq('H', 'S'), pi5)
  1433. self.assertEqual(pi4.asfreq('Min', 'S'), pi6)
  1434. self.assertEqual(pi4.asfreq('S', 'S'), pi7)
  1435. self.assertEqual(pi5.asfreq('A', 'S'), pi1)
  1436. self.assertEqual(pi5.asfreq('Q', 'S'), pi2)
  1437. self.assertEqual(pi5.asfreq('M', 'S'), pi3)
  1438. self.assertEqual(pi5.asfreq('D', 'S'), pi4)
  1439. self.assertEqual(pi5.asfreq('Min', 'S'), pi6)
  1440. self.assertEqual(pi5.asfreq('S', 'S'), pi7)
  1441. self.assertEqual(pi6.asfreq('A', 'S'), pi1)
  1442. self.assertEqual(pi6.asfreq('Q', 'S'), pi2)
  1443. self.assertEqual(pi6.asfreq('M', 'S'), pi3)
  1444. self.assertEqual(pi6.asfreq('D', 'S'), pi4)
  1445. self.assertEqual(pi6.asfreq('H', 'S'), pi5)
  1446. self.assertEqual(pi6.asfreq('S', 'S'), pi7)
  1447. self.assertEqual(pi7.asfreq('A', 'S'), pi1)
  1448. self.assertEqual(pi7.asfreq('Q', 'S'), pi2)
  1449. self.assertEqual(pi7.asfreq('M', 'S'), pi3)
  1450. self.assertEqual(pi7.asfreq('D', 'S'), pi4)
  1451. self.assertEqual(pi7.asfreq('H', 'S'), pi5)
  1452. self.assertEqual(pi7.asfreq('Min', 'S'), pi6)
  1453. self.assertRaises(ValueError, pi7.asfreq, 'T', 'foo')
  1454. self.assertRaises(ValueError, pi1.asfreq, '5t')
  1455. def test_asfreq_nat(self):
  1456. idx = PeriodIndex(['2011-01', '2011-02', 'NaT', '2011-04'], freq='M')
  1457. result = idx.asfreq(freq='Q')
  1458. expected = PeriodIndex(['2011Q1', '2011Q1', 'NaT', '2011Q2'], freq='Q')
  1459. self.assertTrue(result.equals(expected))
  1460. def test_period_index_length(self):
  1461. pi = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
  1462. assert_equal(len(pi), 9)
  1463. pi = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2009')
  1464. assert_equal(len(pi), 4 * 9)
  1465. pi = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
  1466. assert_equal(len(pi), 12 * 9)
  1467. start = Period('02-Apr-2005', 'B')
  1468. i1 = PeriodIndex(start=start, periods=20)
  1469. assert_equal(len(i1), 20)
  1470. assert_equal(i1.freq, start.freq)
  1471. assert_equal(i1[0], start)
  1472. end_intv = Period('2006-12-31', 'W')
  1473. i1 = PeriodIndex(end=end_intv, periods=10)
  1474. assert_equal(len(i1), 10)
  1475. assert_equal(i1.freq, end_intv.freq)
  1476. assert_equal(i1[-1], end_intv)
  1477. end_intv = Period('2006-12-31', '1w')
  1478. i2 = PeriodIndex(end=end_intv, periods=10)
  1479. assert_equal(len(i1), len(i2))
  1480. self.assertTrue((i1 == i2).all())
  1481. assert_equal(i1.freq, i2.freq)
  1482. end_intv = Period('2006-12-31', ('w', 1))
  1483. i2 = PeriodIndex(end=end_intv, periods=10)
  1484. assert_equal(len(i1), len(i2))
  1485. self.assertTrue((i1 == i2).all())
  1486. assert_equal(i1.freq, i2.freq)
  1487. try:
  1488. PeriodIndex(start=start, end=end_intv)
  1489. raise AssertionError('Cannot allow mixed freq for start and end')
  1490. except ValueError:
  1491. pass
  1492. end_intv = Period('2005-05-01', 'B')
  1493. i1 = PeriodIndex(start=start, end=end_intv)
  1494. try:
  1495. PeriodIndex(start=start)
  1496. raise AssertionError(
  1497. 'Must specify periods if missing start or end')
  1498. except ValueError:
  1499. pass
  1500. # infer freq from first element
  1501. i2 = PeriodIndex([end_intv, Period('2005-05-05', 'B')])
  1502. assert_equal(len(i2), 2)
  1503. assert_equal(i2[0], end_intv)
  1504. i2 = PeriodIndex(np.array([end_intv, Period('2005-05-05', 'B')]))
  1505. assert_equal(len(i2), 2)
  1506. assert_equal(i2[0], end_intv)
  1507. # Mixed freq should fail
  1508. vals = [end_intv, Period('2006-12-31', 'w')]
  1509. self.assertRaises(ValueError, PeriodIndex, vals)
  1510. vals = np.array(vals)
  1511. self.assertRaises(ValueError, PeriodIndex, vals)
  1512. def test_frame_index_to_string(self):
  1513. index = PeriodIndex(['2011-1', '2011-2', '2011-3'], freq='M')
  1514. frame = DataFrame(np.random.randn(3, 4), index=index)
  1515. # it works!
  1516. frame.to_string()
  1517. def test_asfreq_ts(self):
  1518. index = PeriodIndex(freq='A', start='1/1/2001', end='12/31/2010')
  1519. ts = Series(np.random.randn(len(index)), index=index)
  1520. df = DataFrame(np.random.randn(len(index), 3), index=index)
  1521. result = ts.asfreq('D', how='end')
  1522. df_result = df.asfreq('D', how='end')
  1523. exp_index = index.asfreq('D', how='end')
  1524. self.assertEqual(len(result), len(ts))
  1525. self.assertTrue(result.index.equals(exp_index))
  1526. self.assertTrue(df_result.index.equals(exp_index))
  1527. result = ts.asfreq('D', how='start')
  1528. self.assertEqual(len(result), len(ts))
  1529. self.assertTrue(result.index.equals(index.asfreq('D', how='start')))
  1530. def test_badinput(self):
  1531. self.assertRaises(datetools.DateParseError, Period, '1/1/-2000', 'A')
  1532. # self.assertRaises(datetools.DateParseError, Period, '-2000', 'A')
  1533. # self.assertRaises(datetools.DateParseError, Period, '0', 'A')
  1534. def test_negative_ordinals(self):
  1535. p = Period(ordinal=-1000, freq='A')
  1536. p = Period(ordinal=0, freq='A')
  1537. idx1 = PeriodIndex(ordinal=[-1, 0, 1], freq='A')
  1538. idx2 = PeriodIndex(ordinal=np.array([-1, 0, 1]), freq='A')
  1539. assert_array_equal(idx1,idx2)
  1540. def test_dti_to_period(self):
  1541. dti = DatetimeIndex(start='1/1/2005', end='12/1/2005', freq='M')
  1542. pi1 = dti.to_period()
  1543. pi2 = dti.to_period(freq='D')
  1544. self.assertEqual(pi1[0], Period('Jan 2005', freq='M'))
  1545. self.assertEqual(pi2[0], Period('1/31/2005', freq='D'))
  1546. self.assertEqual(pi1[-1], Period('Nov 2005', freq='M'))
  1547. self.assertEqual(pi2[-1], Period('11/30/2005', freq='D'))
  1548. def test_pindex_slice_index(self):
  1549. pi = PeriodIndex(start='1/1/10', end='12/31/12', freq='M')
  1550. s = Series(np.random.rand(len(pi)), index=pi)
  1551. res = s['2010']
  1552. exp = s[0:12]
  1553. assert_series_equal(res, exp)
  1554. res = s['2011']
  1555. exp = s[12:24]
  1556. assert_series_equal(res, exp)
  1557. def test_getitem_day(self):
  1558. # GH 6716
  1559. # Confirm DatetimeIndex and PeriodIndex works identically
  1560. didx = DatetimeIndex(start='2013/01/01', freq='D', periods=400)
  1561. pidx = PeriodIndex(start='2013/01/01', freq='D', periods=400)
  1562. for idx in [didx, pidx]:
  1563. # getitem against index should raise ValueError
  1564. values = ['2014', '2013/02', '2013/01/02',
  1565. '2013/02/01 9H', '2013/02/01 09:00']
  1566. for v in values:
  1567. if _np_version_under1p9:
  1568. with tm.assertRaises(ValueError):
  1569. idx[v]
  1570. else:
  1571. # GH7116
  1572. # these show deprecations as we are trying
  1573. # to slice with non-integer indexers
  1574. #with tm.assertRaises(IndexError):
  1575. # idx[v]
  1576. continue
  1577. s = Series(np.random.rand(len(idx)), index=idx)
  1578. assert_series_equal(s['2013/01'], s[0:31])
  1579. assert_series_equal(s['2013/02'], s[31:59])
  1580. assert_series_equal(s['2014'], s[365:])
  1581. invalid = ['2013/02/01 9H', '2013/02/01 09:00']
  1582. for v in invalid:
  1583. with tm.assertRaises(KeyError):
  1584. s[v]
  1585. def test_range_slice_day(self):
  1586. # GH 6716
  1587. didx = DatetimeIndex(start='2013/01/01', freq='D', periods=400)
  1588. pidx = PeriodIndex(start='2013/01/01', freq='D', periods=400)
  1589. for idx in [didx, pidx]:
  1590. # slices against index should raise IndexError
  1591. values = ['2014', '2013/02', '2013/01/02',
  1592. '2013/02/01 9H', '2013/02/01 09:00']
  1593. for v in values:
  1594. with tm.assertRaises(IndexError):
  1595. idx[v:]
  1596. s = Series(np.random.rand(len(idx)), index=idx)
  1597. assert_series_equal(s['2013/01/02':], s[1:])
  1598. assert_series_equal(s['2013/01/02':'2013/01/05'], s[1:5])
  1599. assert_series_equal(s['2013/02':], s[31:])
  1600. assert_series_equal(s['2014':], s[365:])
  1601. invalid = ['2013/02/01 9H', '2013/02/01 09:00']
  1602. for v in invalid:
  1603. with tm.assertRaises(IndexError):
  1604. idx[v:]
  1605. def test_getitem_seconds(self):
  1606. # GH 6716
  1607. didx = DatetimeIndex(start='2013/01/01 09:00:00', freq='S', periods=4000)
  1608. pidx = PeriodIndex(start='2013/01/01 09:00:00', freq='S', periods=4000)
  1609. for idx in [didx, pidx]:
  1610. # getitem against index should raise ValueError
  1611. values = ['2014', '2013/02', '2013/01/02',
  1612. '2013/02/01 9H', '2013/02/01 09:00']
  1613. for v in values:
  1614. if _np_version_under1p9:
  1615. with tm.assertRaises(ValueError):
  1616. idx[v]
  1617. else:
  1618. # GH7116
  1619. # these show deprecations as we are trying
  1620. # to slice with non-integer indexers
  1621. #with tm.assertRaises(IndexError):
  1622. # idx[v]
  1623. continue
  1624. s = Series(np.random.rand(len(idx)), index=idx)
  1625. assert_series_equal(s['2013/01/01 10:00'], s[3600:3660])
  1626. assert_series_equal(s['2013/01/01 9H'], s[:3600])
  1627. for d in ['2013/01/01', '2013/01', '2013']:
  1628. assert_series_equal(s[d], s)
  1629. def test_range_slice_seconds(self):
  1630. # GH 6716
  1631. didx = DatetimeIndex(start='2013/01/01 09:00:00', freq='S', periods=4000)
  1632. pidx = PeriodIndex(start='2013/01/01 09:00:00', freq='S', periods=4000)
  1633. for idx in [didx, pidx]:
  1634. # slices against index should raise IndexError
  1635. values = ['2014', '2013/02', '2013/01/02',
  1636. '2013/02/01 9H', '2013/02/01 09:00']
  1637. for v in values:
  1638. with tm.assertRaises(IndexError):
  1639. idx[v:]
  1640. s = Series(np.random.rand(len(idx)), index=idx)
  1641. assert_series_equal(s['2013/01/01 09:05':'2013/01/01 09:10'], s[300:660])
  1642. assert_series_equal(s['2013/01/01 10:00':'2013/01/01 10:05'], s[3600:3960])
  1643. assert_series_equal(s['2013/01/01 10H':], s[3600:])
  1644. assert_series_equal(s[:'2013/01/01 09:30'], s[:1860])
  1645. for d in ['2013/01/01', '2013/01', '2013']:
  1646. assert_series_equal(s[d:], s)
  1647. def test_range_slice_outofbounds(self):
  1648. # GH 5407
  1649. didx = DatetimeIndex(start='2013/10/01', freq='D', periods=10)
  1650. pidx = PeriodIndex(start='2013/10/01', freq='D', periods=10)
  1651. for idx in [didx, pidx]:
  1652. df = DataFrame(dict(units=[100 + i for i in range(10)]), index=idx)
  1653. empty = DataFrame(index=DatetimeIndex([], freq='D'), columns=['units'])
  1654. tm.assert_frame_equal(df['2013/09/01':'2013/09/30'], empty)
  1655. tm.assert_frame_equal(df['2013/09/30':'2013/10/02'], df.iloc[:2])
  1656. tm.assert_frame_equal(df['2013/10/01':'2013/10/02'], df.iloc[:2])
  1657. tm.assert_frame_equal(df['2013/10/02':'2013/09/30'], empty)
  1658. tm.assert_frame_equal(df['2013/10/15':'2013/10/17'], empty)
  1659. tm.assert_frame_equal(df['2013-06':'2013-09'], empty)
  1660. tm.assert_frame_equal(df['2013-11':'2013-12'], empty)
  1661. def test_pindex_fieldaccessor_nat(self):
  1662. idx = PeriodIndex(['2011-01', '2011-02', 'NaT', '2012-03', '2012-04'], freq='D')
  1663. self.assert_numpy_array_equal(idx.year, np.array([2011, 2011, -1, 2012, 2012]))
  1664. self.assert_numpy_array_equal(idx.month, np.array([1, 2, -1, 3, 4]))
  1665. def test_pindex_qaccess(self):
  1666. pi = PeriodIndex(['2Q05', '3Q05', '4Q05', '1Q06', '2Q06'], freq='Q')
  1667. s = Series(np.random.rand(len(pi)), index=pi).cumsum()
  1668. # Todo: fix these accessors!
  1669. self.assertEqual(s['05Q4'], s[2])
  1670. def test_period_dt64_round_trip(self):
  1671. dti = date_range('1/1/2000', '1/7/2002', freq='B')
  1672. pi = dti.to_period()
  1673. self.assertTrue(pi.to_timestamp().equals(dti))
  1674. dti = date_range('1/1/2000', '1/7/2002', freq='B')
  1675. pi = dti.to_period(freq='H')
  1676. self.assertTrue(pi.to_timestamp().equals(dti))
  1677. def test_to_period_quarterly(self):
  1678. # make sure we can make the round trip
  1679. for month in MONTHS:
  1680. freq = 'Q-%s' % month
  1681. rng = period_range('1989Q3', '1991Q3', freq=freq)
  1682. stamps = rng.to_timestamp()
  1683. result = stamps.to_period(freq)
  1684. self.assertTrue(rng.equals(result))
  1685. def test_to_period_quarterlyish(self):
  1686. offsets = ['BQ', 'QS', 'BQS']
  1687. for off in offsets:
  1688. rng = date_range('01-Jan-2012', periods=8, freq=off)
  1689. prng = rng.to_period()
  1690. self.assertEqual(prng.freq, 'Q-DEC')
  1691. def test_to_period_annualish(self):
  1692. offsets = ['BA', 'AS', 'BAS']
  1693. for off in offsets:
  1694. rng = date_range('01-Jan-2012', periods=8, freq=off)
  1695. prng = rng.to_period()
  1696. self.assertEqual(prng.freq, 'A-DEC')
  1697. def test_to_period_monthish(self):
  1698. offsets = ['MS', 'EOM', 'BM']
  1699. for off in offsets:
  1700. rng = date_range('01-Jan-2012', periods=8, freq=off)
  1701. prng = rng.to_period()
  1702. self.assertEqual(prng.freq, 'M')
  1703. def test_no_multiples(self):
  1704. self.assertRaises(ValueError, period_range, '1989Q3', periods=10,
  1705. freq='2Q')
  1706. self.assertRaises(ValueError, period_range, '1989', periods=10,
  1707. freq='2A')
  1708. self.assertRaises(ValueError, Period, '1989', freq='2A')
  1709. # def test_pindex_multiples(self):
  1710. # pi = PeriodIndex(start='1/1/10', end='12/31/12', freq='2M')
  1711. # self.assertEqual(pi[0], Period('1/1/10', '2M'))
  1712. # self.assertEqual(pi[1], Period('3/1/10', '2M'))
  1713. # self.assertEqual(pi[0].asfreq('6M'), pi[2].asfreq('6M'))
  1714. # self.assertEqual(pi[0].asfreq('A'), pi[2].asfreq('A'))
  1715. # self.assertEqual(pi[0].asfreq('M', how='S'),
  1716. # Period('Jan 2010', '1M'))
  1717. # self.assertEqual(pi[0].asfreq('M', how='E'),
  1718. # Period('Feb 2010', '1M'))
  1719. # self.assertEqual(pi[1].asfreq('M', how='S'),
  1720. # Period('Mar 2010', '1M'))
  1721. # i = Period('1/1/2010 12:05:18', '5S')
  1722. # self.assertEqual(i, Period('1/1/2010 12:05:15', '5S'))
  1723. # i = Period('1/1/2010 12:05:18', '5S')
  1724. # self.assertEqual(i.asfreq('1S', how='E'),
  1725. # Period('1/1/2010 12:05:19', '1S'))
  1726. def test_iteration(self):
  1727. index = PeriodIndex(start='1/1/10', periods=4, freq='B')
  1728. result = list(index)
  1729. tm.assert_isinstance(result[0], Period)
  1730. self.assertEqual(result[0].freq, index.freq)
  1731. def test_take(self):
  1732. index = PeriodIndex(start='1/1/10', end='12/31/12', freq='D', name='idx')
  1733. expected = PeriodIndex([datetime(2010, 1, 6), datetime(2010, 1, 7),
  1734. datetime(2010, 1, 9), datetime(2010, 1, 13)],
  1735. freq='D', name='idx')
  1736. taken1 = index.take([5, 6, 8, 12])
  1737. taken2 = index[[5, 6, 8, 12]]
  1738. for taken in [taken1, taken2]:
  1739. self.assertTrue(taken.equals(expected))
  1740. tm.assert_isinstance(taken, PeriodIndex)
  1741. self.assertEqual(taken.freq, index.freq)
  1742. self.assertEqual(taken.name, expected.name)
  1743. def test_joins(self):
  1744. index = period_range('1/1/2000', '1/20/2000', freq='D')
  1745. for kind in ['inner', 'outer', 'left', 'right']:
  1746. joined = index.join(index[:-5], how=kind)
  1747. tm.assert_isinstance(joined, PeriodIndex)
  1748. self.assertEqual(joined.freq, index.freq)
  1749. def test_join_self(self):
  1750. index = period_range('1/1/2000', '1/20/2000', freq='D')
  1751. for kind in ['inner', 'outer', 'left', 'right']:
  1752. res = index.join(index, how=kind)
  1753. self.assertIs(index, res)
  1754. def test_join_does_not_recur(self):
  1755. df = tm.makeCustomDataframe(3, 2, data_gen_f=lambda *args:
  1756. np.random.randint(2), c_idx_type='p',
  1757. r_idx_type='dt')
  1758. s = df.iloc[:2, 0]
  1759. res = s.index.join(df.columns, how='outer')
  1760. expected = Index([s.index[0], s.index[1],
  1761. df.columns[0], df.columns[1]], object)
  1762. tm.assert_index_equal(res, expected)
  1763. def test_align_series(self):
  1764. rng = period_range('1/1/2000', '1/1/2010', freq='A')
  1765. ts = Series(np.random.randn(len(rng)), index=rng)
  1766. result = ts + ts[::2]
  1767. expected = ts + ts
  1768. expected[1::2] = np.nan
  1769. assert_series_equal(result, expected)
  1770. result = ts + _permute(ts[::2])
  1771. assert_series_equal(result, expected)
  1772. # it works!
  1773. for kind in ['inner', 'outer', 'left', 'right']:
  1774. ts.align(ts[::2], join=kind)
  1775. with assertRaisesRegexp(ValueError, 'Only like-indexed'):
  1776. ts + ts.asfreq('D', how="end")
  1777. def test_align_frame(self):
  1778. rng = period_range('1/1/2000', '1/1/2010', freq='A')
  1779. ts = DataFrame(np.random.randn(len(rng), 3), index=rng)
  1780. result = ts + ts[::2]
  1781. expected = ts + ts
  1782. expected.values[1::2] = np.nan
  1783. tm.assert_frame_equal(result, expected)
  1784. result = ts + _permute(ts[::2])
  1785. tm.assert_frame_equal(result, expected)
  1786. def test_union(self):
  1787. index = period_range('1/1/2000', '1/20/2000', freq='D')
  1788. result = index[:-5].union(index[10:])
  1789. self.assertTrue(result.equals(index))
  1790. # not in order
  1791. result = _permute(index[:-5]).union(_permute(index[10:]))
  1792. self.assertTrue(result.equals(index))
  1793. # raise if different frequencies
  1794. index = period_range('1/1/2000', '1/20/2000', freq='D')
  1795. index2 = period_range('1/1/2000', '1/20/2000', freq='W-WED')
  1796. self.assertRaises(ValueError, index.union, index2)
  1797. self.assertRaises(ValueError, index.join, index.to_timestamp())
  1798. def test_intersection(self):
  1799. index = period_range('1/1/2000', '1/20/2000', freq='D')
  1800. result = index[:-5].intersection(index[10:])
  1801. self.assertTrue(result.equals(index[10:-5]))
  1802. # not in order
  1803. left = _permute(index[:-5])
  1804. right = _permute(index[10:])
  1805. result = left.intersection(right).order()
  1806. self.assertTrue(result.equals(index[10:-5]))
  1807. # raise if different frequencies
  1808. index = period_range('1/1/2000', '1/20/2000', freq='D')
  1809. index2 = period_range('1/1/2000', '1/20/2000', freq='W-WED')
  1810. self.assertRaises(ValueError, index.intersection, index2)
  1811. def test_fields(self):
  1812. # year, month, day, hour, minute
  1813. # second, weekofyear, week, dayofweek, weekday, dayofyear, quarter
  1814. # qyear
  1815. pi = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2005')
  1816. self._check_all_fields(pi)
  1817. pi = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2002')
  1818. self._check_all_fields(pi)
  1819. pi = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2002')
  1820. self._check_all_fields(pi)
  1821. pi = PeriodIndex(freq='D', start='12/1/2001', end='6/1/2001')
  1822. self._check_all_fields(pi)
  1823. pi = PeriodIndex(freq='B', start='12/1/2001', end='6/1/2001')
  1824. self._check_all_fields(pi)
  1825. pi = PeriodIndex(freq='H', start='12/31/2001', end='1/1/2002 23:00')
  1826. self._check_all_fields(pi)
  1827. pi = PeriodIndex(freq='Min', start='12/31/2001', end='1/1/2002 00:20')
  1828. self._check_all_fields(pi)
  1829. pi = PeriodIndex(freq='S', start='12/31/2001 00:00:00',
  1830. end='12/31/2001 00:05:00')
  1831. self._check_all_fields(pi)
  1832. end_intv = Period('2006-12-31', 'W')
  1833. i1 = PeriodIndex(end=end_intv, periods=10)
  1834. self._check_all_fields(i1)
  1835. def _check_all_fields(self, periodindex):
  1836. fields = ['year', 'month', 'day', 'hour', 'minute',
  1837. 'second', 'weekofyear', 'week', 'dayofweek',
  1838. 'weekday', 'dayofyear', 'quarter', 'qyear']
  1839. periods = list(periodindex)
  1840. for field in fields:
  1841. field_idx = getattr(periodindex, field)
  1842. assert_equal(len(periodindex), len(field_idx))
  1843. for x, val in zip(periods, field_idx):
  1844. assert_equal(getattr(x, field), val)
  1845. def test_is_full(self):
  1846. index = PeriodIndex([2005, 2007, 2009], freq='A')
  1847. self.assertFalse(index.is_full)
  1848. index = PeriodIndex([2005, 2006, 2007], freq='A')
  1849. self.assertTrue(index.is_full)
  1850. index = PeriodIndex([2005, 2005, 2007], freq='A')
  1851. self.assertFalse(index.is_full)
  1852. index = PeriodIndex([2005, 2005, 2006], freq='A')
  1853. self.assertTrue(index.is_full)
  1854. index = PeriodIndex([2006, 2005, 2005], freq='A')
  1855. self.assertRaises(ValueError, getattr, index, 'is_full')
  1856. self.assertTrue(index[:0].is_full)
  1857. def test_map(self):
  1858. index = PeriodIndex([2005, 2007, 2009], freq='A')
  1859. result = index.map(lambda x: x + 1)
  1860. expected = index + 1
  1861. self.assertTrue(result.equals(expected))
  1862. result = index.map(lambda x: x.ordinal)
  1863. exp = [x.ordinal for x in index]
  1864. assert_array_equal(result, exp)
  1865. def test_map_with_string_constructor(self):
  1866. raw = [2005, 2007, 2009]
  1867. index = PeriodIndex(raw, freq='A')
  1868. types = str,
  1869. if compat.PY3:
  1870. # unicode
  1871. types += compat.text_type,
  1872. for t in types:
  1873. expected = np.array(lmap(t, raw), dtype=object)
  1874. res = index.map(t)
  1875. # should return an array
  1876. tm.assert_isinstance(res, np.ndarray)
  1877. # preserve element types
  1878. self.assertTrue(all(isinstance(resi, t) for resi in res))
  1879. # dtype should be object
  1880. self.assertEqual(res.dtype, np.dtype('object').type)
  1881. # lastly, values should compare equal
  1882. assert_array_equal(res, expected)
  1883. def test_convert_array_of_periods(self):
  1884. rng = period_range('1/1/2000', periods=20, freq='D')
  1885. periods = list(rng)
  1886. result = pd.Index(periods)
  1887. tm.assert_isinstance(result, PeriodIndex)
  1888. def test_with_multi_index(self):
  1889. # #1705
  1890. index = date_range('1/1/2012', periods=4, freq='12H')
  1891. index_as_arrays = [index.to_period(freq='D'), index.hour]
  1892. s = Series([0, 1, 2, 3], index_as_arrays)
  1893. tm.assert_isinstance(s.index.levels[0], PeriodIndex)
  1894. tm.assert_isinstance(s.index.values[0][0], Period)
  1895. def test_to_datetime_1703(self):
  1896. index = period_range('1/1/2012', periods=4, freq='D')
  1897. result = index.to_datetime()
  1898. self.assertEqual(result[0], Timestamp('1/1/2012'))
  1899. def test_get_loc_msg(self):
  1900. idx = period_range('2000-1-1', freq='A', periods=10)
  1901. bad_period = Period('2012', 'A')
  1902. self.assertRaises(KeyError, idx.get_loc, bad_period)
  1903. try:
  1904. idx.get_loc(bad_period)
  1905. except KeyError as inst:
  1906. self.assertEqual(inst.args[0], bad_period)
  1907. def test_append_concat(self):
  1908. # #1815
  1909. d1 = date_range('12/31/1990', '12/31/1999', freq='A-DEC')
  1910. d2 = date_range('12/31/2000', '12/31/2009', freq='A-DEC')
  1911. s1 = Series(np.random.randn(10), d1)
  1912. s2 = Series(np.random.randn(10), d2)
  1913. s1 = s1.to_period()
  1914. s2 = s2.to_period()
  1915. # drops index
  1916. result = pd.concat([s1, s2])
  1917. tm.assert_isinstance(result.index, PeriodIndex)
  1918. self.assertEqual(result.index[0], s1.index[0])
  1919. def test_pickle_freq(self):
  1920. # GH2891
  1921. import pickle
  1922. prng = period_range('1/1/2011', '1/1/2012', freq='M')
  1923. new_prng = pickle.loads(pickle.dumps(prng))
  1924. self.assertEqual(new_prng.freq,'M')
  1925. def test_slice_keep_name(self):
  1926. idx = period_range('20010101', periods=10, freq='D', name='bob')
  1927. self.assertEqual(idx.name, idx[1:].name)
  1928. def test_factorize(self):
  1929. idx1 = PeriodIndex(['2014-01', '2014-01', '2014-02', '2014-02',
  1930. '2014-03', '2014-03'], freq='M')
  1931. exp_arr = np.array([0, 0, 1, 1, 2, 2])
  1932. exp_idx = PeriodIndex(['2014-01', '2014-02', '2014-03'], freq='M')
  1933. arr, idx = idx1.factorize()
  1934. self.assert_numpy_array_equal(arr, exp_arr)
  1935. self.assertTrue(idx.equals(exp_idx))
  1936. arr, idx = idx1.factorize(sort=True)
  1937. self.assert_numpy_array_equal(arr, exp_arr)
  1938. self.assertTrue(idx.equals(exp_idx))
  1939. idx2 = pd.PeriodIndex(['2014-03', '2014-03', '2014-02', '2014-01',
  1940. '2014-03', '2014-01'], freq='M')
  1941. exp_arr = np.array([2, 2, 1, 0, 2, 0])
  1942. arr, idx = idx2.factorize(sort=True)
  1943. self.assert_numpy_array_equal(arr, exp_arr)
  1944. self.assertTrue(idx.equals(exp_idx))
  1945. exp_arr = np.array([0, 0, 1, 2, 0, 2])
  1946. exp_idx = PeriodIndex(['2014-03', '2014-02', '2014-01'], freq='M')
  1947. arr, idx = idx2.factorize()
  1948. self.assert_numpy_array_equal(arr, exp_arr)
  1949. self.assertTrue(idx.equals(exp_idx))
  1950. def test_recreate_from_data(self):
  1951. for o in ['M', 'Q', 'A', 'D', 'B', 'T', 'S', 'L', 'U', 'N', 'H']:
  1952. org = PeriodIndex(start='2001/04/01', freq=o, periods=1)
  1953. idx = PeriodIndex(org.values, freq=o)
  1954. self.assertTrue(idx.equals(org))
  1955. def _permute(obj):
  1956. return obj.take(np.random.permutation(len(obj)))
  1957. class TestMethods(tm.TestCase):
  1958. "Base test class for MaskedArrays."
  1959. def test_add(self):
  1960. dt1 = Period(freq='D', year=2008, month=1, day=1)
  1961. dt2 = Period(freq='D', year=2008, month=1, day=2)
  1962. assert_equal(dt1 + 1, dt2)
  1963. #
  1964. # GH 4731
  1965. msg = "unsupported operand type\(s\)"
  1966. with tm.assertRaisesRegexp(TypeError, msg):
  1967. dt1 + "str"
  1968. with tm.assertRaisesRegexp(TypeError, msg):
  1969. dt1 + dt2
  1970. def test_nat_ops(self):
  1971. p = Period('NaT', freq='M')
  1972. self.assertEqual((p + 1).ordinal, tslib.iNaT)
  1973. self.assertEqual((p - 1).ordinal, tslib.iNaT)
  1974. self.assertEqual((p - Period('2011-01', freq='M')).ordinal, tslib.iNaT)
  1975. self.assertEqual((Period('2011-01', freq='M') - p).ordinal, tslib.iNaT)
  1976. def test_pi_ops_nat(self):
  1977. idx = PeriodIndex(['2011-01', '2011-02', 'NaT', '2011-04'], freq='M', name='idx')
  1978. result = idx + 2
  1979. expected = PeriodIndex(['2011-03', '2011-04', 'NaT', '2011-06'], freq='M', name='idx')
  1980. self.assertTrue(result.equals(expected))
  1981. result2 = result - 2
  1982. self.assertTrue(result2.equals(idx))
  1983. msg = "unsupported operand type\(s\)"
  1984. with tm.assertRaisesRegexp(TypeError, msg):
  1985. idx + "str"
  1986. class TestPeriodRepresentation(tm.TestCase):
  1987. """
  1988. Wish to match NumPy units
  1989. """
  1990. def test_annual(self):
  1991. self._check_freq('A', 1970)
  1992. def test_monthly(self):
  1993. self._check_freq('M', '1970-01')
  1994. def test_weekly(self):
  1995. self._check_freq('W-THU', '1970-01-01')
  1996. def test_daily(self):
  1997. self._check_freq('D', '1970-01-01')
  1998. def test_business_daily(self):
  1999. self._check_freq('B', '1970-01-01')
  2000. def test_hourly(self):
  2001. self._check_freq('H', '1970-01-01')
  2002. def test_minutely(self):
  2003. self._check_freq('T', '1970-01-01')
  2004. def test_secondly(self):
  2005. self._check_freq('S', '1970-01-01')
  2006. def test_millisecondly(self):
  2007. self._check_freq('L', '1970-01-01')
  2008. def test_microsecondly(self):
  2009. self._check_freq('U', '1970-01-01')
  2010. def test_nanosecondly(self):
  2011. self._check_freq('N', '1970-01-01')
  2012. def _check_freq(self, freq, base_date):
  2013. rng = PeriodIndex(start=base_date, periods=10, freq=freq)
  2014. exp = np.arange(10, dtype=np.int64)
  2015. self.assert_numpy_array_equal(rng.values, exp)
  2016. def test_negone_ordinals(self):
  2017. freqs = ['A', 'M', 'Q', 'D', 'H', 'T', 'S']
  2018. period = Period(ordinal=-1, freq='D')
  2019. for freq in freqs:
  2020. repr(period.asfreq(freq))
  2021. for freq in freqs:
  2022. period = Period(ordinal=-1, freq=freq)
  2023. repr(period)
  2024. self.assertEqual(period.year, 1969)
  2025. period = Period(ordinal=-1, freq='B')
  2026. repr(period)
  2027. period = Period(ordinal=-1, freq='W')
  2028. repr(period)
  2029. class TestComparisons(tm.TestCase):
  2030. def setUp(self):
  2031. self.january1 = Period('2000-01', 'M')
  2032. self.january2 = Period('2000-01', 'M')
  2033. self.february = Period('2000-02', 'M')
  2034. self.march = Period('2000-03', 'M')
  2035. self.day = Period('2012-01-01', 'D')
  2036. def test_equal(self):
  2037. self.assertEqual(self.january1, self.january2)
  2038. def test_equal_Raises_Value(self):
  2039. with tm.assertRaises(ValueError):
  2040. self.january1 == self.day
  2041. def test_notEqual(self):
  2042. self.assertNotEqual(self.january1, 1)
  2043. self.assertNotEqual(self.january1, self.february)
  2044. def test_greater(self):
  2045. self.assertTrue(self.february > self.january1)
  2046. def test_greater_Raises_Value(self):
  2047. with tm.assertRaises(ValueError):
  2048. self.january1 > self.day
  2049. def test_greater_Raises_Type(self):
  2050. with tm.assertRaises(TypeError):
  2051. self.january1 > 1
  2052. def test_greaterEqual(self):
  2053. self.assertTrue(self.january1 >= self.january2)
  2054. def test_greaterEqual_Raises_Value(self):
  2055. with tm.assertRaises(ValueError):
  2056. self.january1 >= self.day
  2057. with tm.assertRaises(TypeError):
  2058. print(self.january1 >= 1)
  2059. def test_smallerEqual(self):
  2060. self.assertTrue(self.january1 <= self.january2)
  2061. def test_smallerEqual_Raises_Value(self):
  2062. with tm.assertRaises(ValueError):
  2063. self.january1 <= self.day
  2064. def test_smallerEqual_Raises_Type(self):
  2065. with tm.assertRaises(TypeError):
  2066. self.january1 <= 1
  2067. def test_smaller(self):
  2068. self.assertTrue(self.january1 < self.february)
  2069. def test_smaller_Raises_Value(self):
  2070. with tm.assertRaises(ValueError):
  2071. self.january1 < self.day
  2072. def test_smaller_Raises_Type(self):
  2073. with tm.assertRaises(TypeError):
  2074. self.january1 < 1
  2075. def test_sort(self):
  2076. periods = [self.march, self.january1, self.february]
  2077. correctPeriods = [self.january1, self.february, self.march]
  2078. self.assertEqual(sorted(periods), correctPeriods)
  2079. def test_period_nat_comp(self):
  2080. p_nat = Period('NaT', freq='D')
  2081. p = Period('2011-01-01', freq='D')
  2082. nat = pd.Timestamp('NaT')
  2083. t = pd.Timestamp('2011-01-01')
  2084. # confirm Period('NaT') work identical with Timestamp('NaT')
  2085. for left, right in [(p_nat, p), (p, p_nat), (p_nat, p_nat),
  2086. (nat, t), (t, nat), (nat, nat)]:
  2087. self.assertEqual(left < right, False)
  2088. self.assertEqual(left > right, False)
  2089. self.assertEqual(left == right, False)
  2090. self.assertEqual(left != right, True)
  2091. self.assertEqual(left <= right, False)
  2092. self.assertEqual(left >= right, False)
  2093. def test_pi_nat_comp(self):
  2094. idx1 = PeriodIndex(['2011-01', '2011-02', 'NaT', '2011-05'], freq='M')
  2095. result = idx1 > Period('2011-02', freq='M')
  2096. self.assert_numpy_array_equal(result, np.array([False, False, False, True]))
  2097. result = idx1 == Period('NaT', freq='M')
  2098. self.assert_numpy_array_equal(result, np.array([False, False, False, False]))
  2099. result = idx1 != Period('NaT', freq='M')
  2100. self.assert_numpy_array_equal(result, np.array([True, True, True, True]))
  2101. idx2 = PeriodIndex(['2011-02', '2011-01', '2011-04', 'NaT'], freq='M')
  2102. result = idx1 < idx2
  2103. self.assert_numpy_array_equal(result, np.array([True, False, False, False]))
  2104. result = idx1 == idx1
  2105. self.assert_numpy_array_equal(result, np.array([True, True, False, True]))
  2106. result = idx1 != idx1
  2107. self.assert_numpy_array_equal(result, np.array([False, False, True, False]))
  2108. if __name__ == '__main__':
  2109. import nose
  2110. nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],
  2111. exit=False)