test_asfreq.py 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. import pytest
  2. from pandas._libs.tslibs.frequencies import (
  3. INVALID_FREQ_ERR_MSG, _period_code_map)
  4. from pandas.errors import OutOfBoundsDatetime
  5. from pandas import Period, offsets
  6. class TestFreqConversion(object):
  7. """Test frequency conversion of date objects"""
  8. @pytest.mark.parametrize('freq', ['A', 'Q', 'M', 'W', 'B', 'D'])
  9. def test_asfreq_near_zero(self, freq):
  10. # GH#19643, GH#19650
  11. per = Period('0001-01-01', freq=freq)
  12. tup1 = (per.year, per.hour, per.day)
  13. prev = per - 1
  14. assert prev.ordinal == per.ordinal - 1
  15. tup2 = (prev.year, prev.month, prev.day)
  16. assert tup2 < tup1
  17. def test_asfreq_near_zero_weekly(self):
  18. # GH#19834
  19. per1 = Period('0001-01-01', 'D') + 6
  20. per2 = Period('0001-01-01', 'D') - 6
  21. week1 = per1.asfreq('W')
  22. week2 = per2.asfreq('W')
  23. assert week1 != week2
  24. assert week1.asfreq('D', 'E') >= per1
  25. assert week2.asfreq('D', 'S') <= per2
  26. @pytest.mark.xfail(reason='GH#19643 period_helper asfreq functions fail '
  27. 'to check for overflows')
  28. def test_to_timestamp_out_of_bounds(self):
  29. # GH#19643, currently gives Timestamp('1754-08-30 22:43:41.128654848')
  30. per = Period('0001-01-01', freq='B')
  31. with pytest.raises(OutOfBoundsDatetime):
  32. per.to_timestamp()
  33. def test_asfreq_corner(self):
  34. val = Period(freq='A', year=2007)
  35. result1 = val.asfreq('5t')
  36. result2 = val.asfreq('t')
  37. expected = Period('2007-12-31 23:59', freq='t')
  38. assert result1.ordinal == expected.ordinal
  39. assert result1.freqstr == '5T'
  40. assert result2.ordinal == expected.ordinal
  41. assert result2.freqstr == 'T'
  42. def test_conv_annual(self):
  43. # frequency conversion tests: from Annual Frequency
  44. ival_A = Period(freq='A', year=2007)
  45. ival_AJAN = Period(freq="A-JAN", year=2007)
  46. ival_AJUN = Period(freq="A-JUN", year=2007)
  47. ival_ANOV = Period(freq="A-NOV", year=2007)
  48. ival_A_to_Q_start = Period(freq='Q', year=2007, quarter=1)
  49. ival_A_to_Q_end = Period(freq='Q', year=2007, quarter=4)
  50. ival_A_to_M_start = Period(freq='M', year=2007, month=1)
  51. ival_A_to_M_end = Period(freq='M', year=2007, month=12)
  52. ival_A_to_W_start = Period(freq='W', year=2007, month=1, day=1)
  53. ival_A_to_W_end = Period(freq='W', year=2007, month=12, day=31)
  54. ival_A_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  55. ival_A_to_B_end = Period(freq='B', year=2007, month=12, day=31)
  56. ival_A_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  57. ival_A_to_D_end = Period(freq='D', year=2007, month=12, day=31)
  58. ival_A_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
  59. ival_A_to_H_end = Period(freq='H', year=2007, month=12, day=31,
  60. hour=23)
  61. ival_A_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  62. hour=0, minute=0)
  63. ival_A_to_T_end = Period(freq='Min', year=2007, month=12, day=31,
  64. hour=23, minute=59)
  65. ival_A_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  66. minute=0, second=0)
  67. ival_A_to_S_end = Period(freq='S', year=2007, month=12, day=31,
  68. hour=23, minute=59, second=59)
  69. ival_AJAN_to_D_end = Period(freq='D', year=2007, month=1, day=31)
  70. ival_AJAN_to_D_start = Period(freq='D', year=2006, month=2, day=1)
  71. ival_AJUN_to_D_end = Period(freq='D', year=2007, month=6, day=30)
  72. ival_AJUN_to_D_start = Period(freq='D', year=2006, month=7, day=1)
  73. ival_ANOV_to_D_end = Period(freq='D', year=2007, month=11, day=30)
  74. ival_ANOV_to_D_start = Period(freq='D', year=2006, month=12, day=1)
  75. assert ival_A.asfreq('Q', 'S') == ival_A_to_Q_start
  76. assert ival_A.asfreq('Q', 'e') == ival_A_to_Q_end
  77. assert ival_A.asfreq('M', 's') == ival_A_to_M_start
  78. assert ival_A.asfreq('M', 'E') == ival_A_to_M_end
  79. assert ival_A.asfreq('W', 'S') == ival_A_to_W_start
  80. assert ival_A.asfreq('W', 'E') == ival_A_to_W_end
  81. assert ival_A.asfreq('B', 'S') == ival_A_to_B_start
  82. assert ival_A.asfreq('B', 'E') == ival_A_to_B_end
  83. assert ival_A.asfreq('D', 'S') == ival_A_to_D_start
  84. assert ival_A.asfreq('D', 'E') == ival_A_to_D_end
  85. assert ival_A.asfreq('H', 'S') == ival_A_to_H_start
  86. assert ival_A.asfreq('H', 'E') == ival_A_to_H_end
  87. assert ival_A.asfreq('min', 'S') == ival_A_to_T_start
  88. assert ival_A.asfreq('min', 'E') == ival_A_to_T_end
  89. assert ival_A.asfreq('T', 'S') == ival_A_to_T_start
  90. assert ival_A.asfreq('T', 'E') == ival_A_to_T_end
  91. assert ival_A.asfreq('S', 'S') == ival_A_to_S_start
  92. assert ival_A.asfreq('S', 'E') == ival_A_to_S_end
  93. assert ival_AJAN.asfreq('D', 'S') == ival_AJAN_to_D_start
  94. assert ival_AJAN.asfreq('D', 'E') == ival_AJAN_to_D_end
  95. assert ival_AJUN.asfreq('D', 'S') == ival_AJUN_to_D_start
  96. assert ival_AJUN.asfreq('D', 'E') == ival_AJUN_to_D_end
  97. assert ival_ANOV.asfreq('D', 'S') == ival_ANOV_to_D_start
  98. assert ival_ANOV.asfreq('D', 'E') == ival_ANOV_to_D_end
  99. assert ival_A.asfreq('A') == ival_A
  100. def test_conv_quarterly(self):
  101. # frequency conversion tests: from Quarterly Frequency
  102. ival_Q = Period(freq='Q', year=2007, quarter=1)
  103. ival_Q_end_of_year = Period(freq='Q', year=2007, quarter=4)
  104. ival_QEJAN = Period(freq="Q-JAN", year=2007, quarter=1)
  105. ival_QEJUN = Period(freq="Q-JUN", year=2007, quarter=1)
  106. ival_Q_to_A = Period(freq='A', year=2007)
  107. ival_Q_to_M_start = Period(freq='M', year=2007, month=1)
  108. ival_Q_to_M_end = Period(freq='M', year=2007, month=3)
  109. ival_Q_to_W_start = Period(freq='W', year=2007, month=1, day=1)
  110. ival_Q_to_W_end = Period(freq='W', year=2007, month=3, day=31)
  111. ival_Q_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  112. ival_Q_to_B_end = Period(freq='B', year=2007, month=3, day=30)
  113. ival_Q_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  114. ival_Q_to_D_end = Period(freq='D', year=2007, month=3, day=31)
  115. ival_Q_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
  116. ival_Q_to_H_end = Period(freq='H', year=2007, month=3, day=31, hour=23)
  117. ival_Q_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  118. hour=0, minute=0)
  119. ival_Q_to_T_end = Period(freq='Min', year=2007, month=3, day=31,
  120. hour=23, minute=59)
  121. ival_Q_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  122. minute=0, second=0)
  123. ival_Q_to_S_end = Period(freq='S', year=2007, month=3, day=31, hour=23,
  124. minute=59, second=59)
  125. ival_QEJAN_to_D_start = Period(freq='D', year=2006, month=2, day=1)
  126. ival_QEJAN_to_D_end = Period(freq='D', year=2006, month=4, day=30)
  127. ival_QEJUN_to_D_start = Period(freq='D', year=2006, month=7, day=1)
  128. ival_QEJUN_to_D_end = Period(freq='D', year=2006, month=9, day=30)
  129. assert ival_Q.asfreq('A') == ival_Q_to_A
  130. assert ival_Q_end_of_year.asfreq('A') == ival_Q_to_A
  131. assert ival_Q.asfreq('M', 'S') == ival_Q_to_M_start
  132. assert ival_Q.asfreq('M', 'E') == ival_Q_to_M_end
  133. assert ival_Q.asfreq('W', 'S') == ival_Q_to_W_start
  134. assert ival_Q.asfreq('W', 'E') == ival_Q_to_W_end
  135. assert ival_Q.asfreq('B', 'S') == ival_Q_to_B_start
  136. assert ival_Q.asfreq('B', 'E') == ival_Q_to_B_end
  137. assert ival_Q.asfreq('D', 'S') == ival_Q_to_D_start
  138. assert ival_Q.asfreq('D', 'E') == ival_Q_to_D_end
  139. assert ival_Q.asfreq('H', 'S') == ival_Q_to_H_start
  140. assert ival_Q.asfreq('H', 'E') == ival_Q_to_H_end
  141. assert ival_Q.asfreq('Min', 'S') == ival_Q_to_T_start
  142. assert ival_Q.asfreq('Min', 'E') == ival_Q_to_T_end
  143. assert ival_Q.asfreq('S', 'S') == ival_Q_to_S_start
  144. assert ival_Q.asfreq('S', 'E') == ival_Q_to_S_end
  145. assert ival_QEJAN.asfreq('D', 'S') == ival_QEJAN_to_D_start
  146. assert ival_QEJAN.asfreq('D', 'E') == ival_QEJAN_to_D_end
  147. assert ival_QEJUN.asfreq('D', 'S') == ival_QEJUN_to_D_start
  148. assert ival_QEJUN.asfreq('D', 'E') == ival_QEJUN_to_D_end
  149. assert ival_Q.asfreq('Q') == ival_Q
  150. def test_conv_monthly(self):
  151. # frequency conversion tests: from Monthly Frequency
  152. ival_M = Period(freq='M', year=2007, month=1)
  153. ival_M_end_of_year = Period(freq='M', year=2007, month=12)
  154. ival_M_end_of_quarter = Period(freq='M', year=2007, month=3)
  155. ival_M_to_A = Period(freq='A', year=2007)
  156. ival_M_to_Q = Period(freq='Q', year=2007, quarter=1)
  157. ival_M_to_W_start = Period(freq='W', year=2007, month=1, day=1)
  158. ival_M_to_W_end = Period(freq='W', year=2007, month=1, day=31)
  159. ival_M_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  160. ival_M_to_B_end = Period(freq='B', year=2007, month=1, day=31)
  161. ival_M_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  162. ival_M_to_D_end = Period(freq='D', year=2007, month=1, day=31)
  163. ival_M_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
  164. ival_M_to_H_end = Period(freq='H', year=2007, month=1, day=31, hour=23)
  165. ival_M_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  166. hour=0, minute=0)
  167. ival_M_to_T_end = Period(freq='Min', year=2007, month=1, day=31,
  168. hour=23, minute=59)
  169. ival_M_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  170. minute=0, second=0)
  171. ival_M_to_S_end = Period(freq='S', year=2007, month=1, day=31, hour=23,
  172. minute=59, second=59)
  173. assert ival_M.asfreq('A') == ival_M_to_A
  174. assert ival_M_end_of_year.asfreq('A') == ival_M_to_A
  175. assert ival_M.asfreq('Q') == ival_M_to_Q
  176. assert ival_M_end_of_quarter.asfreq('Q') == ival_M_to_Q
  177. assert ival_M.asfreq('W', 'S') == ival_M_to_W_start
  178. assert ival_M.asfreq('W', 'E') == ival_M_to_W_end
  179. assert ival_M.asfreq('B', 'S') == ival_M_to_B_start
  180. assert ival_M.asfreq('B', 'E') == ival_M_to_B_end
  181. assert ival_M.asfreq('D', 'S') == ival_M_to_D_start
  182. assert ival_M.asfreq('D', 'E') == ival_M_to_D_end
  183. assert ival_M.asfreq('H', 'S') == ival_M_to_H_start
  184. assert ival_M.asfreq('H', 'E') == ival_M_to_H_end
  185. assert ival_M.asfreq('Min', 'S') == ival_M_to_T_start
  186. assert ival_M.asfreq('Min', 'E') == ival_M_to_T_end
  187. assert ival_M.asfreq('S', 'S') == ival_M_to_S_start
  188. assert ival_M.asfreq('S', 'E') == ival_M_to_S_end
  189. assert ival_M.asfreq('M') == ival_M
  190. def test_conv_weekly(self):
  191. # frequency conversion tests: from Weekly Frequency
  192. ival_W = Period(freq='W', year=2007, month=1, day=1)
  193. ival_WSUN = Period(freq='W', year=2007, month=1, day=7)
  194. ival_WSAT = Period(freq='W-SAT', year=2007, month=1, day=6)
  195. ival_WFRI = Period(freq='W-FRI', year=2007, month=1, day=5)
  196. ival_WTHU = Period(freq='W-THU', year=2007, month=1, day=4)
  197. ival_WWED = Period(freq='W-WED', year=2007, month=1, day=3)
  198. ival_WTUE = Period(freq='W-TUE', year=2007, month=1, day=2)
  199. ival_WMON = Period(freq='W-MON', year=2007, month=1, day=1)
  200. ival_WSUN_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  201. ival_WSUN_to_D_end = Period(freq='D', year=2007, month=1, day=7)
  202. ival_WSAT_to_D_start = Period(freq='D', year=2006, month=12, day=31)
  203. ival_WSAT_to_D_end = Period(freq='D', year=2007, month=1, day=6)
  204. ival_WFRI_to_D_start = Period(freq='D', year=2006, month=12, day=30)
  205. ival_WFRI_to_D_end = Period(freq='D', year=2007, month=1, day=5)
  206. ival_WTHU_to_D_start = Period(freq='D', year=2006, month=12, day=29)
  207. ival_WTHU_to_D_end = Period(freq='D', year=2007, month=1, day=4)
  208. ival_WWED_to_D_start = Period(freq='D', year=2006, month=12, day=28)
  209. ival_WWED_to_D_end = Period(freq='D', year=2007, month=1, day=3)
  210. ival_WTUE_to_D_start = Period(freq='D', year=2006, month=12, day=27)
  211. ival_WTUE_to_D_end = Period(freq='D', year=2007, month=1, day=2)
  212. ival_WMON_to_D_start = Period(freq='D', year=2006, month=12, day=26)
  213. ival_WMON_to_D_end = Period(freq='D', year=2007, month=1, day=1)
  214. ival_W_end_of_year = Period(freq='W', year=2007, month=12, day=31)
  215. ival_W_end_of_quarter = Period(freq='W', year=2007, month=3, day=31)
  216. ival_W_end_of_month = Period(freq='W', year=2007, month=1, day=31)
  217. ival_W_to_A = Period(freq='A', year=2007)
  218. ival_W_to_Q = Period(freq='Q', year=2007, quarter=1)
  219. ival_W_to_M = Period(freq='M', year=2007, month=1)
  220. if Period(freq='D', year=2007, month=12, day=31).weekday == 6:
  221. ival_W_to_A_end_of_year = Period(freq='A', year=2007)
  222. else:
  223. ival_W_to_A_end_of_year = Period(freq='A', year=2008)
  224. if Period(freq='D', year=2007, month=3, day=31).weekday == 6:
  225. ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007, quarter=1)
  226. else:
  227. ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007, quarter=2)
  228. if Period(freq='D', year=2007, month=1, day=31).weekday == 6:
  229. ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=1)
  230. else:
  231. ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=2)
  232. ival_W_to_B_start = Period(freq='B', year=2007, month=1, day=1)
  233. ival_W_to_B_end = Period(freq='B', year=2007, month=1, day=5)
  234. ival_W_to_D_start = Period(freq='D', year=2007, month=1, day=1)
  235. ival_W_to_D_end = Period(freq='D', year=2007, month=1, day=7)
  236. ival_W_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
  237. ival_W_to_H_end = Period(freq='H', year=2007, month=1, day=7, hour=23)
  238. ival_W_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  239. hour=0, minute=0)
  240. ival_W_to_T_end = Period(freq='Min', year=2007, month=1, day=7,
  241. hour=23, minute=59)
  242. ival_W_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  243. minute=0, second=0)
  244. ival_W_to_S_end = Period(freq='S', year=2007, month=1, day=7, hour=23,
  245. minute=59, second=59)
  246. assert ival_W.asfreq('A') == ival_W_to_A
  247. assert ival_W_end_of_year.asfreq('A') == ival_W_to_A_end_of_year
  248. assert ival_W.asfreq('Q') == ival_W_to_Q
  249. assert ival_W_end_of_quarter.asfreq('Q') == ival_W_to_Q_end_of_quarter
  250. assert ival_W.asfreq('M') == ival_W_to_M
  251. assert ival_W_end_of_month.asfreq('M') == ival_W_to_M_end_of_month
  252. assert ival_W.asfreq('B', 'S') == ival_W_to_B_start
  253. assert ival_W.asfreq('B', 'E') == ival_W_to_B_end
  254. assert ival_W.asfreq('D', 'S') == ival_W_to_D_start
  255. assert ival_W.asfreq('D', 'E') == ival_W_to_D_end
  256. assert ival_WSUN.asfreq('D', 'S') == ival_WSUN_to_D_start
  257. assert ival_WSUN.asfreq('D', 'E') == ival_WSUN_to_D_end
  258. assert ival_WSAT.asfreq('D', 'S') == ival_WSAT_to_D_start
  259. assert ival_WSAT.asfreq('D', 'E') == ival_WSAT_to_D_end
  260. assert ival_WFRI.asfreq('D', 'S') == ival_WFRI_to_D_start
  261. assert ival_WFRI.asfreq('D', 'E') == ival_WFRI_to_D_end
  262. assert ival_WTHU.asfreq('D', 'S') == ival_WTHU_to_D_start
  263. assert ival_WTHU.asfreq('D', 'E') == ival_WTHU_to_D_end
  264. assert ival_WWED.asfreq('D', 'S') == ival_WWED_to_D_start
  265. assert ival_WWED.asfreq('D', 'E') == ival_WWED_to_D_end
  266. assert ival_WTUE.asfreq('D', 'S') == ival_WTUE_to_D_start
  267. assert ival_WTUE.asfreq('D', 'E') == ival_WTUE_to_D_end
  268. assert ival_WMON.asfreq('D', 'S') == ival_WMON_to_D_start
  269. assert ival_WMON.asfreq('D', 'E') == ival_WMON_to_D_end
  270. assert ival_W.asfreq('H', 'S') == ival_W_to_H_start
  271. assert ival_W.asfreq('H', 'E') == ival_W_to_H_end
  272. assert ival_W.asfreq('Min', 'S') == ival_W_to_T_start
  273. assert ival_W.asfreq('Min', 'E') == ival_W_to_T_end
  274. assert ival_W.asfreq('S', 'S') == ival_W_to_S_start
  275. assert ival_W.asfreq('S', 'E') == ival_W_to_S_end
  276. assert ival_W.asfreq('W') == ival_W
  277. msg = INVALID_FREQ_ERR_MSG
  278. with pytest.raises(ValueError, match=msg):
  279. ival_W.asfreq('WK')
  280. def test_conv_weekly_legacy(self):
  281. # frequency conversion tests: from Weekly Frequency
  282. msg = INVALID_FREQ_ERR_MSG
  283. with pytest.raises(ValueError, match=msg):
  284. Period(freq='WK', year=2007, month=1, day=1)
  285. with pytest.raises(ValueError, match=msg):
  286. Period(freq='WK-SAT', year=2007, month=1, day=6)
  287. with pytest.raises(ValueError, match=msg):
  288. Period(freq='WK-FRI', year=2007, month=1, day=5)
  289. with pytest.raises(ValueError, match=msg):
  290. Period(freq='WK-THU', year=2007, month=1, day=4)
  291. with pytest.raises(ValueError, match=msg):
  292. Period(freq='WK-WED', year=2007, month=1, day=3)
  293. with pytest.raises(ValueError, match=msg):
  294. Period(freq='WK-TUE', year=2007, month=1, day=2)
  295. with pytest.raises(ValueError, match=msg):
  296. Period(freq='WK-MON', year=2007, month=1, day=1)
  297. def test_conv_business(self):
  298. # frequency conversion tests: from Business Frequency"
  299. ival_B = Period(freq='B', year=2007, month=1, day=1)
  300. ival_B_end_of_year = Period(freq='B', year=2007, month=12, day=31)
  301. ival_B_end_of_quarter = Period(freq='B', year=2007, month=3, day=30)
  302. ival_B_end_of_month = Period(freq='B', year=2007, month=1, day=31)
  303. ival_B_end_of_week = Period(freq='B', year=2007, month=1, day=5)
  304. ival_B_to_A = Period(freq='A', year=2007)
  305. ival_B_to_Q = Period(freq='Q', year=2007, quarter=1)
  306. ival_B_to_M = Period(freq='M', year=2007, month=1)
  307. ival_B_to_W = Period(freq='W', year=2007, month=1, day=7)
  308. ival_B_to_D = Period(freq='D', year=2007, month=1, day=1)
  309. ival_B_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
  310. ival_B_to_H_end = Period(freq='H', year=2007, month=1, day=1, hour=23)
  311. ival_B_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  312. hour=0, minute=0)
  313. ival_B_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
  314. hour=23, minute=59)
  315. ival_B_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  316. minute=0, second=0)
  317. ival_B_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=23,
  318. minute=59, second=59)
  319. assert ival_B.asfreq('A') == ival_B_to_A
  320. assert ival_B_end_of_year.asfreq('A') == ival_B_to_A
  321. assert ival_B.asfreq('Q') == ival_B_to_Q
  322. assert ival_B_end_of_quarter.asfreq('Q') == ival_B_to_Q
  323. assert ival_B.asfreq('M') == ival_B_to_M
  324. assert ival_B_end_of_month.asfreq('M') == ival_B_to_M
  325. assert ival_B.asfreq('W') == ival_B_to_W
  326. assert ival_B_end_of_week.asfreq('W') == ival_B_to_W
  327. assert ival_B.asfreq('D') == ival_B_to_D
  328. assert ival_B.asfreq('H', 'S') == ival_B_to_H_start
  329. assert ival_B.asfreq('H', 'E') == ival_B_to_H_end
  330. assert ival_B.asfreq('Min', 'S') == ival_B_to_T_start
  331. assert ival_B.asfreq('Min', 'E') == ival_B_to_T_end
  332. assert ival_B.asfreq('S', 'S') == ival_B_to_S_start
  333. assert ival_B.asfreq('S', 'E') == ival_B_to_S_end
  334. assert ival_B.asfreq('B') == ival_B
  335. def test_conv_daily(self):
  336. # frequency conversion tests: from Business Frequency"
  337. ival_D = Period(freq='D', year=2007, month=1, day=1)
  338. ival_D_end_of_year = Period(freq='D', year=2007, month=12, day=31)
  339. ival_D_end_of_quarter = Period(freq='D', year=2007, month=3, day=31)
  340. ival_D_end_of_month = Period(freq='D', year=2007, month=1, day=31)
  341. ival_D_end_of_week = Period(freq='D', year=2007, month=1, day=7)
  342. ival_D_friday = Period(freq='D', year=2007, month=1, day=5)
  343. ival_D_saturday = Period(freq='D', year=2007, month=1, day=6)
  344. ival_D_sunday = Period(freq='D', year=2007, month=1, day=7)
  345. # TODO: unused?
  346. # ival_D_monday = Period(freq='D', year=2007, month=1, day=8)
  347. ival_B_friday = Period(freq='B', year=2007, month=1, day=5)
  348. ival_B_monday = Period(freq='B', year=2007, month=1, day=8)
  349. ival_D_to_A = Period(freq='A', year=2007)
  350. ival_Deoq_to_AJAN = Period(freq='A-JAN', year=2008)
  351. ival_Deoq_to_AJUN = Period(freq='A-JUN', year=2007)
  352. ival_Deoq_to_ADEC = Period(freq='A-DEC', year=2007)
  353. ival_D_to_QEJAN = Period(freq="Q-JAN", year=2007, quarter=4)
  354. ival_D_to_QEJUN = Period(freq="Q-JUN", year=2007, quarter=3)
  355. ival_D_to_QEDEC = Period(freq="Q-DEC", year=2007, quarter=1)
  356. ival_D_to_M = Period(freq='M', year=2007, month=1)
  357. ival_D_to_W = Period(freq='W', year=2007, month=1, day=7)
  358. ival_D_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
  359. ival_D_to_H_end = Period(freq='H', year=2007, month=1, day=1, hour=23)
  360. ival_D_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  361. hour=0, minute=0)
  362. ival_D_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
  363. hour=23, minute=59)
  364. ival_D_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  365. minute=0, second=0)
  366. ival_D_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=23,
  367. minute=59, second=59)
  368. assert ival_D.asfreq('A') == ival_D_to_A
  369. assert ival_D_end_of_quarter.asfreq('A-JAN') == ival_Deoq_to_AJAN
  370. assert ival_D_end_of_quarter.asfreq('A-JUN') == ival_Deoq_to_AJUN
  371. assert ival_D_end_of_quarter.asfreq('A-DEC') == ival_Deoq_to_ADEC
  372. assert ival_D_end_of_year.asfreq('A') == ival_D_to_A
  373. assert ival_D_end_of_quarter.asfreq('Q') == ival_D_to_QEDEC
  374. assert ival_D.asfreq("Q-JAN") == ival_D_to_QEJAN
  375. assert ival_D.asfreq("Q-JUN") == ival_D_to_QEJUN
  376. assert ival_D.asfreq("Q-DEC") == ival_D_to_QEDEC
  377. assert ival_D.asfreq('M') == ival_D_to_M
  378. assert ival_D_end_of_month.asfreq('M') == ival_D_to_M
  379. assert ival_D.asfreq('W') == ival_D_to_W
  380. assert ival_D_end_of_week.asfreq('W') == ival_D_to_W
  381. assert ival_D_friday.asfreq('B') == ival_B_friday
  382. assert ival_D_saturday.asfreq('B', 'S') == ival_B_friday
  383. assert ival_D_saturday.asfreq('B', 'E') == ival_B_monday
  384. assert ival_D_sunday.asfreq('B', 'S') == ival_B_friday
  385. assert ival_D_sunday.asfreq('B', 'E') == ival_B_monday
  386. assert ival_D.asfreq('H', 'S') == ival_D_to_H_start
  387. assert ival_D.asfreq('H', 'E') == ival_D_to_H_end
  388. assert ival_D.asfreq('Min', 'S') == ival_D_to_T_start
  389. assert ival_D.asfreq('Min', 'E') == ival_D_to_T_end
  390. assert ival_D.asfreq('S', 'S') == ival_D_to_S_start
  391. assert ival_D.asfreq('S', 'E') == ival_D_to_S_end
  392. assert ival_D.asfreq('D') == ival_D
  393. def test_conv_hourly(self):
  394. # frequency conversion tests: from Hourly Frequency"
  395. ival_H = Period(freq='H', year=2007, month=1, day=1, hour=0)
  396. ival_H_end_of_year = Period(freq='H', year=2007, month=12, day=31,
  397. hour=23)
  398. ival_H_end_of_quarter = Period(freq='H', year=2007, month=3, day=31,
  399. hour=23)
  400. ival_H_end_of_month = Period(freq='H', year=2007, month=1, day=31,
  401. hour=23)
  402. ival_H_end_of_week = Period(freq='H', year=2007, month=1, day=7,
  403. hour=23)
  404. ival_H_end_of_day = Period(freq='H', year=2007, month=1, day=1,
  405. hour=23)
  406. ival_H_end_of_bus = Period(freq='H', year=2007, month=1, day=1,
  407. hour=23)
  408. ival_H_to_A = Period(freq='A', year=2007)
  409. ival_H_to_Q = Period(freq='Q', year=2007, quarter=1)
  410. ival_H_to_M = Period(freq='M', year=2007, month=1)
  411. ival_H_to_W = Period(freq='W', year=2007, month=1, day=7)
  412. ival_H_to_D = Period(freq='D', year=2007, month=1, day=1)
  413. ival_H_to_B = Period(freq='B', year=2007, month=1, day=1)
  414. ival_H_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
  415. hour=0, minute=0)
  416. ival_H_to_T_end = Period(freq='Min', year=2007, month=1, day=1, hour=0,
  417. minute=59)
  418. ival_H_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  419. minute=0, second=0)
  420. ival_H_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=0,
  421. minute=59, second=59)
  422. assert ival_H.asfreq('A') == ival_H_to_A
  423. assert ival_H_end_of_year.asfreq('A') == ival_H_to_A
  424. assert ival_H.asfreq('Q') == ival_H_to_Q
  425. assert ival_H_end_of_quarter.asfreq('Q') == ival_H_to_Q
  426. assert ival_H.asfreq('M') == ival_H_to_M
  427. assert ival_H_end_of_month.asfreq('M') == ival_H_to_M
  428. assert ival_H.asfreq('W') == ival_H_to_W
  429. assert ival_H_end_of_week.asfreq('W') == ival_H_to_W
  430. assert ival_H.asfreq('D') == ival_H_to_D
  431. assert ival_H_end_of_day.asfreq('D') == ival_H_to_D
  432. assert ival_H.asfreq('B') == ival_H_to_B
  433. assert ival_H_end_of_bus.asfreq('B') == ival_H_to_B
  434. assert ival_H.asfreq('Min', 'S') == ival_H_to_T_start
  435. assert ival_H.asfreq('Min', 'E') == ival_H_to_T_end
  436. assert ival_H.asfreq('S', 'S') == ival_H_to_S_start
  437. assert ival_H.asfreq('S', 'E') == ival_H_to_S_end
  438. assert ival_H.asfreq('H') == ival_H
  439. def test_conv_minutely(self):
  440. # frequency conversion tests: from Minutely Frequency"
  441. ival_T = Period(freq='Min', year=2007, month=1, day=1, hour=0,
  442. minute=0)
  443. ival_T_end_of_year = Period(freq='Min', year=2007, month=12, day=31,
  444. hour=23, minute=59)
  445. ival_T_end_of_quarter = Period(freq='Min', year=2007, month=3, day=31,
  446. hour=23, minute=59)
  447. ival_T_end_of_month = Period(freq='Min', year=2007, month=1, day=31,
  448. hour=23, minute=59)
  449. ival_T_end_of_week = Period(freq='Min', year=2007, month=1, day=7,
  450. hour=23, minute=59)
  451. ival_T_end_of_day = Period(freq='Min', year=2007, month=1, day=1,
  452. hour=23, minute=59)
  453. ival_T_end_of_bus = Period(freq='Min', year=2007, month=1, day=1,
  454. hour=23, minute=59)
  455. ival_T_end_of_hour = Period(freq='Min', year=2007, month=1, day=1,
  456. hour=0, minute=59)
  457. ival_T_to_A = Period(freq='A', year=2007)
  458. ival_T_to_Q = Period(freq='Q', year=2007, quarter=1)
  459. ival_T_to_M = Period(freq='M', year=2007, month=1)
  460. ival_T_to_W = Period(freq='W', year=2007, month=1, day=7)
  461. ival_T_to_D = Period(freq='D', year=2007, month=1, day=1)
  462. ival_T_to_B = Period(freq='B', year=2007, month=1, day=1)
  463. ival_T_to_H = Period(freq='H', year=2007, month=1, day=1, hour=0)
  464. ival_T_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
  465. minute=0, second=0)
  466. ival_T_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=0,
  467. minute=0, second=59)
  468. assert ival_T.asfreq('A') == ival_T_to_A
  469. assert ival_T_end_of_year.asfreq('A') == ival_T_to_A
  470. assert ival_T.asfreq('Q') == ival_T_to_Q
  471. assert ival_T_end_of_quarter.asfreq('Q') == ival_T_to_Q
  472. assert ival_T.asfreq('M') == ival_T_to_M
  473. assert ival_T_end_of_month.asfreq('M') == ival_T_to_M
  474. assert ival_T.asfreq('W') == ival_T_to_W
  475. assert ival_T_end_of_week.asfreq('W') == ival_T_to_W
  476. assert ival_T.asfreq('D') == ival_T_to_D
  477. assert ival_T_end_of_day.asfreq('D') == ival_T_to_D
  478. assert ival_T.asfreq('B') == ival_T_to_B
  479. assert ival_T_end_of_bus.asfreq('B') == ival_T_to_B
  480. assert ival_T.asfreq('H') == ival_T_to_H
  481. assert ival_T_end_of_hour.asfreq('H') == ival_T_to_H
  482. assert ival_T.asfreq('S', 'S') == ival_T_to_S_start
  483. assert ival_T.asfreq('S', 'E') == ival_T_to_S_end
  484. assert ival_T.asfreq('Min') == ival_T
  485. def test_conv_secondly(self):
  486. # frequency conversion tests: from Secondly Frequency"
  487. ival_S = Period(freq='S', year=2007, month=1, day=1, hour=0, minute=0,
  488. second=0)
  489. ival_S_end_of_year = Period(freq='S', year=2007, month=12, day=31,
  490. hour=23, minute=59, second=59)
  491. ival_S_end_of_quarter = Period(freq='S', year=2007, month=3, day=31,
  492. hour=23, minute=59, second=59)
  493. ival_S_end_of_month = Period(freq='S', year=2007, month=1, day=31,
  494. hour=23, minute=59, second=59)
  495. ival_S_end_of_week = Period(freq='S', year=2007, month=1, day=7,
  496. hour=23, minute=59, second=59)
  497. ival_S_end_of_day = Period(freq='S', year=2007, month=1, day=1,
  498. hour=23, minute=59, second=59)
  499. ival_S_end_of_bus = Period(freq='S', year=2007, month=1, day=1,
  500. hour=23, minute=59, second=59)
  501. ival_S_end_of_hour = Period(freq='S', year=2007, month=1, day=1,
  502. hour=0, minute=59, second=59)
  503. ival_S_end_of_minute = Period(freq='S', year=2007, month=1, day=1,
  504. hour=0, minute=0, second=59)
  505. ival_S_to_A = Period(freq='A', year=2007)
  506. ival_S_to_Q = Period(freq='Q', year=2007, quarter=1)
  507. ival_S_to_M = Period(freq='M', year=2007, month=1)
  508. ival_S_to_W = Period(freq='W', year=2007, month=1, day=7)
  509. ival_S_to_D = Period(freq='D', year=2007, month=1, day=1)
  510. ival_S_to_B = Period(freq='B', year=2007, month=1, day=1)
  511. ival_S_to_H = Period(freq='H', year=2007, month=1, day=1, hour=0)
  512. ival_S_to_T = Period(freq='Min', year=2007, month=1, day=1, hour=0,
  513. minute=0)
  514. assert ival_S.asfreq('A') == ival_S_to_A
  515. assert ival_S_end_of_year.asfreq('A') == ival_S_to_A
  516. assert ival_S.asfreq('Q') == ival_S_to_Q
  517. assert ival_S_end_of_quarter.asfreq('Q') == ival_S_to_Q
  518. assert ival_S.asfreq('M') == ival_S_to_M
  519. assert ival_S_end_of_month.asfreq('M') == ival_S_to_M
  520. assert ival_S.asfreq('W') == ival_S_to_W
  521. assert ival_S_end_of_week.asfreq('W') == ival_S_to_W
  522. assert ival_S.asfreq('D') == ival_S_to_D
  523. assert ival_S_end_of_day.asfreq('D') == ival_S_to_D
  524. assert ival_S.asfreq('B') == ival_S_to_B
  525. assert ival_S_end_of_bus.asfreq('B') == ival_S_to_B
  526. assert ival_S.asfreq('H') == ival_S_to_H
  527. assert ival_S_end_of_hour.asfreq('H') == ival_S_to_H
  528. assert ival_S.asfreq('Min') == ival_S_to_T
  529. assert ival_S_end_of_minute.asfreq('Min') == ival_S_to_T
  530. assert ival_S.asfreq('S') == ival_S
  531. def test_asfreq_mult(self):
  532. # normal freq to mult freq
  533. p = Period(freq='A', year=2007)
  534. # ordinal will not change
  535. for freq in ['3A', offsets.YearEnd(3)]:
  536. result = p.asfreq(freq)
  537. expected = Period('2007', freq='3A')
  538. assert result == expected
  539. assert result.ordinal == expected.ordinal
  540. assert result.freq == expected.freq
  541. # ordinal will not change
  542. for freq in ['3A', offsets.YearEnd(3)]:
  543. result = p.asfreq(freq, how='S')
  544. expected = Period('2007', freq='3A')
  545. assert result == expected
  546. assert result.ordinal == expected.ordinal
  547. assert result.freq == expected.freq
  548. # mult freq to normal freq
  549. p = Period(freq='3A', year=2007)
  550. # ordinal will change because how=E is the default
  551. for freq in ['A', offsets.YearEnd()]:
  552. result = p.asfreq(freq)
  553. expected = Period('2009', freq='A')
  554. assert result == expected
  555. assert result.ordinal == expected.ordinal
  556. assert result.freq == expected.freq
  557. # ordinal will not change
  558. for freq in ['A', offsets.YearEnd()]:
  559. result = p.asfreq(freq, how='S')
  560. expected = Period('2007', freq='A')
  561. assert result == expected
  562. assert result.ordinal == expected.ordinal
  563. assert result.freq == expected.freq
  564. p = Period(freq='A', year=2007)
  565. for freq in ['2M', offsets.MonthEnd(2)]:
  566. result = p.asfreq(freq)
  567. expected = Period('2007-12', freq='2M')
  568. assert result == expected
  569. assert result.ordinal == expected.ordinal
  570. assert result.freq == expected.freq
  571. for freq in ['2M', offsets.MonthEnd(2)]:
  572. result = p.asfreq(freq, how='S')
  573. expected = Period('2007-01', freq='2M')
  574. assert result == expected
  575. assert result.ordinal == expected.ordinal
  576. assert result.freq == expected.freq
  577. p = Period(freq='3A', year=2007)
  578. for freq in ['2M', offsets.MonthEnd(2)]:
  579. result = p.asfreq(freq)
  580. expected = Period('2009-12', freq='2M')
  581. assert result == expected
  582. assert result.ordinal == expected.ordinal
  583. assert result.freq == expected.freq
  584. for freq in ['2M', offsets.MonthEnd(2)]:
  585. result = p.asfreq(freq, how='S')
  586. expected = Period('2007-01', freq='2M')
  587. assert result == expected
  588. assert result.ordinal == expected.ordinal
  589. assert result.freq == expected.freq
  590. def test_asfreq_combined(self):
  591. # normal freq to combined freq
  592. p = Period('2007', freq='H')
  593. # ordinal will not change
  594. expected = Period('2007', freq='25H')
  595. for freq, how in zip(['1D1H', '1H1D'], ['E', 'S']):
  596. result = p.asfreq(freq, how=how)
  597. assert result == expected
  598. assert result.ordinal == expected.ordinal
  599. assert result.freq == expected.freq
  600. # combined freq to normal freq
  601. p1 = Period(freq='1D1H', year=2007)
  602. p2 = Period(freq='1H1D', year=2007)
  603. # ordinal will change because how=E is the default
  604. result1 = p1.asfreq('H')
  605. result2 = p2.asfreq('H')
  606. expected = Period('2007-01-02', freq='H')
  607. assert result1 == expected
  608. assert result1.ordinal == expected.ordinal
  609. assert result1.freq == expected.freq
  610. assert result2 == expected
  611. assert result2.ordinal == expected.ordinal
  612. assert result2.freq == expected.freq
  613. # ordinal will not change
  614. result1 = p1.asfreq('H', how='S')
  615. result2 = p2.asfreq('H', how='S')
  616. expected = Period('2007-01-01', freq='H')
  617. assert result1 == expected
  618. assert result1.ordinal == expected.ordinal
  619. assert result1.freq == expected.freq
  620. assert result2 == expected
  621. assert result2.ordinal == expected.ordinal
  622. assert result2.freq == expected.freq
  623. def test_asfreq_MS(self):
  624. initial = Period("2013")
  625. assert initial.asfreq(freq="M", how="S") == Period('2013-01', 'M')
  626. msg = INVALID_FREQ_ERR_MSG
  627. with pytest.raises(ValueError, match=msg):
  628. initial.asfreq(freq="MS", how="S")
  629. with pytest.raises(ValueError, match=msg):
  630. Period('2013-01', 'MS')
  631. assert _period_code_map.get("MS") is None