U
    ÃmœdW
 ã                   @   sP  d Z ddlmZ ddlZddlZddlZddlZddlm	Z	m
Z
 ddlZddlZddlZddlmZmZ ddlmZmZmZmZmZ ddlmZmZ ddlmZmZmZ ej  !ej  "e#¡¡\Z$Z%ej&ej  'e$d	d
¡ddd�Z(e( )d¡Z(dZ*dZ+ddddddddddddddddd d!d"d#d$d%d&d'gZ,d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?gZ-e .e-¡Z/ej0e,ej1e/e 2e/¡d@�dA�Z3ej4dBdC�dDdE„ ƒZ5dØdFdG„Z6G dHdI„ dIƒZ7ej8 9dJdK¡dLdM„ ƒZ:ej8 9dNe*¡dOdP„ ƒZ;ej8 9dNdQ¡dRdS„ ƒZ<dTdU„ Z=dVdW„ Z>ej8 9dXe+¡ej8 9dNe*¡dYdZ„ ƒƒZ?d[d\„ Z@d]d^„ ZAd_d`„ ZBdadb„ ZCej8jDej8 9dXe+¡ej8 9dNe*¡dcdd„ ƒƒƒZEej8 9dXe+¡ej8 9dNe*¡dedf„ ƒƒZFdgdh„ ZGdidj„ ZHdkdl„ ZIdmdn„ ZJej4dodp„ ƒZKej4dqdr„ ƒZLej4dsdt„ ƒZMej8 9dXe+¡ej8 9dNe*¡ej8 9dudv¡ej8 9dwdQ¡dxdy„ ƒƒƒƒZNdzd{„ ZOd|d}„ ZPej8 9d~dd€d�d‚g¡dƒd„„ ƒZQd…d†„ ZRd‡dˆ„ ZSd‰dŠ„ ZTej8 9d‹dŒd�dŽd�d�d‘d’g¡d“d”„ ƒZUd•d–„ ZVej8 9d—d˜d™dšgd™d˜d›gdœd�d�gg¡dždŸ„ ƒZWej8 9d—d˜d™d gd™d›d�gdœdœdœgg¡d¡d¢„ ƒZXd£d¤„ ZYd¥d¦„ ZZd§d¨„ Z[d©dª„ Z\ej8 9dXd«dg¡ej8 9dNd«dg¡d¬d­„ ƒƒZ]d®d¯„ Z^d°d±„ Z_d²d³„ Z`ej8 9d‹d´dµd¶g¡ej8 9dXdd«g¡ej8 9dNdd«g¡d·d¸„ ƒƒƒZad¹dº„ Zbd»d¼„ Zcd½d¾„ Zdej8 9d¿dÀdÁdÂdÃg¡dÄdÅ„ ƒZedÆdÇ„ Zfej8 9dÈdÉdg¡ej8 9dÊddËg¡dÌdÍ„ ƒƒZgej8 9dXdd«g¡ej8 9dNdd«g¡ej8 9dÎdÏdg¡dÐdÑ„ ƒƒƒZhdÒdÓ„ ZidÔdÕ„ ZjdÖd×„ ZkdS )Ùz4
Author: Terence L van Zyl
Modified: Kevin Sheppard
é    )Úpytest_warnsN)Úassert_allcloseÚassert_almost_equal)ÚConvergenceWarningÚValueWarning)ÚPY_SMOOTHERSÚ	SMOOTHERSÚExponentialSmoothingÚHoltÚSimpleExpSmoothing)ÚHoltWintersArgsÚ_test_to_restricted)r   Úto_restrictedÚto_unrestrictedÚresultszhousing-data.csvZDATET)Z	index_colZparse_datesÚMS©ÚaddÚmulNgV›ÿWÝD@gmV}®¶
8@g\sGÿ)@@g÷ŽªB@g«ö˜HG@g'ÁÒ¨X=@g§t°þÏ=B@gÃÖlå%}E@gaÃÓ+esH@gk¥ö".?@g»µL†ãÛB@g±5[yÉ5D@gPà�|zšI@grÌ_!ã?@g„ñÓ¸7}D@g(º.üàâE@gúÏšÇK@g‚V`Èêì@@g5|ëÆ	E@gÀ=ÏŸ6ÒF@g
�×Ø%âM@gcíïl�˜A@g)[$í(F@gÄ–MõôG@z2005-03-01 00:00:00z2005-06-01 00:00:00z2005-09-01 00:00:00z2005-12-01 00:00:00z2006-03-01 00:00:00z2006-06-01 00:00:00z2006-09-01 00:00:00z2006-12-01 00:00:00z2007-03-01 00:00:00z2007-06-01 00:00:00z2007-09-01 00:00:00z2007-12-01 00:00:00z2008-03-01 00:00:00z2008-06-01 00:00:00z2008-09-01 00:00:00z2008-12-01 00:00:00z2009-03-01 00:00:00z2009-06-01 00:00:00z2009-09-01 00:00:00z2009-12-01 00:00:00z2010-03-01 00:00:00z2010-06-01 00:00:00z2010-09-01 00:00:00z2010-12-01 00:00:00©Úfreq©ÚindexÚmodule)Úscopec                  C   sˆ   t j d¡} |  d¡}| ¡ }tddƒD ],}||d  ||  d||d    ||< q(|dd … }tjd|jd dd�}tj	||d	d
�S )Nr   i°  é   çš™™™™™É?éÈ   ú2000-1-1ÚM©Úperiodsr   Úy)r   Úname)
ÚnpÚrandomÚRandomStateÚstandard_normalÚcopyÚrangeÚpdÚ
date_rangeÚshapeÚSeries)ÚrsÚer"   Úir   © r1   úk/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/holtwinters/tests/test_holtwinters.pyÚsesg   s    
*r3   c                 C   s\  | j d }t |¡}t |¡}t |¡}	t |¡}
||d< ||d< || |	d< || d  d| ||   |d< ||d |  d| |  |d< td|ƒD ]d}|| |  d| ||d  ||d     ||< ||| ||d    d| ||d    ||< q˜|dd… |dd…  |	dd…< |d t d|d ¡|d   |
dd…< | |	 }|||
||	fS )zQ
    Simple, slow, direct implementation of double exp smoothing for testing
    r   r   éÿÿÿÿN)r,   r$   Úzerosr)   Úarange)ÚxÚalphaÚbetaÚl0Úb0Ú	nforecastÚnZlvalsÚbÚxhatÚfÚtÚerrr1   r1   r2   Ú_simple_dbl_exp_smoothers   s"    




  02 (rC   c                   @   s€   e Zd Zedd„ ƒZdd„ Zdd„ Zejj	ddd	�d
d„ ƒZ
dd„ Zdd„ Zejjdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestHoltWintersc                 C   s¦  ddddddddd	d
ddg}ddddddddddddg}t  ||¡}t j|jt  |j¡d�|_|| _ddddddd d!d"d#d$d%d&d'd(g}d)d*d+d,d-d.dddddddddg}t  ||¡}t j|jt  |j¡d�|_|| _d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMg}dNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dad)d*d+d,d-d.dddddg}t  ||¡}t j|jt  |j¡d�|_|| _t| _dbdcdddedfdgdhdidjg	| _	d S )kNç4	(�ê{@g¿'Ö©’g|@g“ Š›z|@g2”n¦zz@gá�ì[W„|@g�¾8§h‰{@g4¬˜ R•z@gK/{#dR~@g‚FŸEÅ @gÓ#WûUv€@gªF¯&€@g2ÆU`ã~@z1996-12-31 00:00:00z1997-12-31 00:00:00z1998-12-31 00:00:00z1999-12-31 00:00:00z2000-12-31 00:00:00z2001-12-31 00:00:00z2002-12-31 00:00:00z2003-12-31 00:00:00z2004-12-31 00:00:00z2005-12-31 00:00:00z2006-12-31 00:00:00z2007-12-31 00:00:00r   g=›UŸ«�1@ç#J{ƒ/Ü5@g4¢´7øâ7@g=,Ôšæí:@gú~j¼tã:@g÷äa¡ÖÔ<@gúíëÀ9>@gj¼t“ô>@gÞ	Š/>@g¿}8g”?@gzïÇíI@@g�–®`½@@g„›Œ*Ã‚C@g^‘šv±D@g„.áÐ[ÌD@z1990-12-31 00:00:00z1991-12-31 00:00:00z1992-12-31 00:00:00z1993-12-31 00:00:00z1994-12-31 00:00:00z1995-12-31 00:00:00g	pz¯~p@gÊ©�aêÄp@gLüQÔ™Jp@g×j;ªp@gñŸn @Xq@gGæ‘?X½q@gÆXÇñ$r@gB]¤P–Gr@g¼¯Ê…JÍr@g¶‚¦%–Ts@g;5—Lås@g¸u7Oõ•t@g¬;Û$.u@g§!ªðç3u@gæÎL0œ‰t@g9î”¤s@g(ò$éZ§s@gXŒºÖžt@géï¥ð œt@giÆ¢)¦u@g�êÄv@g×ú"¡íÅu@g/Ãºz@gDL‰$úz@gk¸Èýz@guæ¾Ãy@gÀ$•)&¿y@g¿}8'«x@güŠýy@gÕé@ÖS„y@g€·@‚âãy@z1970-12-31 00:00:00z1971-12-31 00:00:00z1972-12-31 00:00:00z1973-12-31 00:00:00z1974-12-31 00:00:00z1975-12-31 00:00:00z1976-12-31 00:00:00z1977-12-31 00:00:00z1978-12-31 00:00:00z1979-12-31 00:00:00z1980-12-31 00:00:00z1981-12-31 00:00:00z1982-12-31 00:00:00z1983-12-31 00:00:00z1984-12-31 00:00:00z1985-12-31 00:00:00z1986-12-31 00:00:00z1987-12-31 00:00:00z1988-12-31 00:00:00z1989-12-31 00:00:00g^¡Žî©>g{%jÐ C<g™@üáç«>g­Å&¿HI@gVí¢{³6í?gÒ�B»ê?gž*|	Wà?g�¹fvûã?gø³íîà«å?)
r*   r-   ÚDatetimeIndexr   Ú
infer_freqÚoildata_oilÚ
air_ausairÚlivestock2_livestockÚaustÚstart_params)ÚclsÚdatar   rI   rJ   rK   r1   r1   r2   Úsetup_classŽ   s.   ôô 
ÿññ 
ÿá"á!
þ÷zTestHoltWinters.setup_classc                 C   sx   t | jddddd�j| jd�}t | jddddd�j| jd�}t| dd¡d	d
ddgdƒ t|jdd�d	d
ddgdƒ d S )Né   r   r   Ú	estimated©Úseasonal_periodsÚtrendÚseasonalÚinitialization_method©rM   z2011-03-01 00:00:00z2011-12-01 00:00:00ç¬­Ø_v§N@ç9´Èv¾¯B@ç³q¬‹{G@çºÚŠýeÇI@é   )Úend)r	   rL   ÚfitrM   r   Úpredict)ÚselfÚfit1Úfit2r1   r1   r2   Útest_predict8  s8    ûúûú


ý

ýzTestHoltWinters.test_predictc                 C   s>   t | jjddddd�j| jd�}t| d¡ddd	d
gdƒ d S )NrQ   r   r   rR   rS   rX   rY   rZ   r[   r\   r]   )r	   rL   Úvaluesr_   rM   r   Úforecast©ra   rb   r1   r1   r2   Útest_ndarrayY  s    ûú 
 ÿzTestHoltWinters.test_ndarrayzOptimizer does not convergeF)ÚreasonÚstrictc                 C   s<   t | jdddd�jddd�}t|jdd�dd	d
dgdƒ d S )NrQ   r   )rT   rU   rV   ZbhT)ÚmethodÚ	use_brute©ZstepsgîëÀ9#zN@g¾Ÿ/ÝlB@g÷äa¡ÖG@gŽðHI@r]   ©r	   rL   r_   r   rf   rg   r1   r1   r2   Útest_forecastf  s    ü û
 
 ÿzTestHoltWinters.test_forecastc                 C   sÌ   t | jdd�jddd�}t | jdd�jddd�}t | jdd� ¡ }t| d¡d	gd
ƒ t|jddddddddddddgd
ƒ t| d¡dgd
ƒ t| d¡dgd
ƒ t|jd dd
ƒ t|jd ddƒ d S )Núlegacy-heuristic©rW   r   F©Ú	optimizedç333333ã?rR   r   gb�¯èÖL~@rQ   rE   gO~ „|@g>ì…V|@gA�VäÇ{@g=Ú0ñ”í{@gÓÁ—ŒÙ{@g9Dýª³˜{@g˜2²\=$|@gæV­ñ¾Ö|@gsíYî§}@g@{`�4'~@gÍs§èÖL~@gÏj�=f]@g·BX�å@Úsmoothing_levelg÷Ãc?‹ì?Úinitial_levelg’‘³°§÷{@r]   )r   rI   r_   r   rf   ÚlevelÚparams©ra   rb   rc   Úfit3r1   r1   r2   Útest_simple_exp_smoothingr  sP     ÿ þ ÿ þ ÿ
ôðz)TestHoltWinters.test_simple_exp_smoothingc                 C   s  t | jdd�jdddd�}t | jddd�jdddd�}t | jdd	d
�jddd�}t| d¡dddddgdƒ t|jdddddddddddddd d!gd"ƒ t|jd#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2gd"ƒ t| d¡d3d4d5d6d7gdƒ t| d¡d8d9d:d;d<gdƒ d S )=Nrp   rq   çš™™™™™é?r   F)ru   Úsmoothing_trendrs   T)ÚexponentialrW   rR   ©Údamped_trendrW   ©ru   r}   é   gáz®GáE@gìQ¸…ËF@g×£p=
·G@gÃõ(\�¢H@gÍÌÌÌÌŒI@é   gHÀèòæð@gTHÇt¸@g#nˆÐ¬
@g)r�)‚ä	@gæ¶·:„Š@g(j‚¶@g{°{á„È@gœãi}Zÿ?g¢iÃ@[‡÷?gæßxˆ�Äõ?g…3�`Â|ô?gñ3&«¿Aó?gu+ø+lþ?gòÚáÃ @gð`“N‡bý?rQ   rF   gÛoíDI6@gìmñø|9@ghTèÕcŠ;@g~ùÃI>@gR–ñÔB>@gKH{îÊ”?@g]S ³³L@@gÄA„°Ÿ@@gòh4?"@@gkŠ•ô‰@@g6ˆè¡ú@@g«G3ywcA@gÑÊÞÎD@gõYñO¡›E@g…SîWäàE@gÍÌÌÌÌLF@g…ëQ¸žG@g…ëQ¸I@gáz®G�J@g33333L@gÍÌÌÌÌlE@gHáz®çE@g®GázTF@g®Gáz´F@gHáz®G@)r
   rJ   r_   r   rf   rU   Úfittedfcastry   r1   r1   r2   Ú	test_holt”  s¢     ÿ  þý  üý ü  ÿñíðì  ÿ  ÿzTestHoltWinters.test_holtc                 C   sÒ  t | jdd� ¡ }t| jddd�}|jddd�}t| jdddd�}| ¡ }t|jd	 d
dƒ t|jd tjdƒ t|jd tjdƒ t|jd ddƒ t|jd tjdƒ t|jddƒ t	| 
¡  ¡ tƒsÎt‚t|jd	 ddƒ t|jd ddƒ t|jd ddƒ t|jd ddƒ t|jd ddƒ t|jddƒ t	| 
¡  ¡ tƒ�sNt‚t|jd	 ddƒ t|jd ddƒ t|jd ddƒ t|jd ddƒ t|jd ddƒ t|jddƒ t	| 
¡  ¡ tƒ�sÎt‚d S )NrR   rq   Tr   ç\�Âõ(\ï?Úleast_squares)Údamping_trendrk   )r~   r€   rW   ru   ç      ð?rƒ   r}   rˆ   rv   g�Âõ(\p@r   Úinitial_trendgš™™™Yiº@ç        gö(\�Âp@g�Âõ(\�@gÃõ(\�”·@g
×£p=
ï?g33333/p@g¤p=
×£ð?g     Â·@r   )r   rK   r_   r
   r   rx   r$   ÚNaNÚsseÚ
isinstanceÚsummaryÚas_textÚstrÚAssertionError)ra   rb   Úmod4Úfit4Zmod5Zfit5r1   r1   r2   Útest_holt_damp_fit×  sL     ÿ
ýüz"TestHoltWinters.test_holt_damp_fitc           	       C   sT  t | jddd�}dddddd	œ}| |¡� |jd
d�}W 5 Q R X | ¡ D ]}t|j| || ƒ qJ| |¡� |jdd�}W 5 Q R X t|j|jƒ t|jd |d ƒ dd„ | ¡ D ƒ}| |¡� |jdd�}W 5 Q R X t	 
|jd |jd ¡røt‚t|j|j ddd� dddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2g }tt	j|jd3 |jf |ƒ d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSg }tt	j|jd |jf |dd� dTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrg}t|j|dd� dsdtdudvdwdxdydzd{d|g
}t| d}¡|d~d� d S )NTrR   r   gl¥„9+ï?gG¬æµé:?r†   g<ŠÎ�ä’o@gÿ"&°Rœ@)ru   r}   rˆ   rv   rŠ   Frr   rŠ   c                 S   s   i | ]\}}d |kr||“qS )rw   r1   )Ú.0ÚkÚvr1   r1   r2   Ú
<dictcomp>"  s       z4TestHoltWinters.test_holt_damp_r.<locals>.<dictcomp>r   gX±Çnh@çü©ñÒMbP?©Zatolg«OÏ�ä’o@g!…0«É|p@gkÌÅp@gï-±2€Pp@gpðn¦‹ªp@g
MGUVq@gž¶0¿5½q@g©%ÿv½$r@gÃjOIr@gÏdÝ?Ìr@gM&fŽcSs@gËÂçÍãs@gØÛ°ù”“t@g{“ÙìU,u@guÁ¿%ß5u@g	hB4�t@g† ÌyK¬s@gg¤#U„©s@g·¶R}Çt@gôÆÛ7›t@g|a&±#¡u@gÜ¾ùv@gó°ênaÉu@gíšWž$þy@gÀeë:z@g»Ez@gZïÁˆÅÇy@gWJš]	Áy@gxšw? ´x@gØAçüy@gV'ýdƒy@g“-ø?çây@rv   g¦òÕ¯Rœ@g¾%ŒŒl@gHGr|¨„@g×Iç0nû@gÁ±¥ÿRv@g.[ÈPnô@g—ñ"²t@gNô1ˆ÷@gìaq|@g¶Ìis@gÐ&×¦åŽ@gõLhÄ@g4x`(«@gÈŒW©<@ggü\LqÏ@g$"a¬Dc@g§÷ïÛø@gmÈˆ¨’@gvi~2.@g�D½kAÌ@g�1Pµ?m@g”ÌM@g)H>Ä±@g<óPË]@gò?Ä‘@gv*„"­@gbt<7±V@gqì³’@gñ.×\@gsîÌÁ¼@gª\'¹ @g &†A†@gN»e®5p@g´Ý½+Ýæp@g+R§¿-q@gw3)ÎY¶p@g]à%{[q@g—ºBí'¸q@gqã]¬r@gÃHÀ°‚r@gC&Î0¥r@gX”¦Ez&s@gÆ'Ñ«s@gøZ1x:t@gšuhÕ…èt@g®êH¢•u@gzë¸r‡u@gÆV�àt@gˆ1â•ús@g1V�Í;ös@g»ºÆûö`t@göZŒBÄät@gÂí¹N_éu@gËAHrØJv@gÛ|D¾v@gÃã½!8Bz@gäP“«ðUz@g7²ØÝ^z@g7W°Ñz@gYE£ÅËÿy@g(÷Æxñx@gžª;Sy@g†Krï¾y@g—â®mÅz@gBuÍR{Uz@g³LÜ�z@g'„ÎØ…Ãz@g¬A9ùåøz@g+ñOÑ4-{@g2tGØw`{@gF¼Xi´’{@gGPÄïÃ{@g(€/ô{@é
   ç-Cëâ6?)r
   rK   Ú
fix_paramsr_   Úkeysr   rx   r�   Úitemsr$   ZallcloserU   r’   ÚnobsÚr_rw   Úfittedvaluesrf   )	ra   Úmodrx   r_   ÚkeyZopt_fitZ
alt_paramsZalt_fitZdesiredr1   r1   r2   Útest_holt_damp_r  s    ýû ÿà"à#  ÿá!öz TestHoltWinters.test_holt_damp_rc              
   C   sD   t | jdddddd�}| ¡ }t| d¡ddd	d
ddddgdƒ d S )NrQ   ÚadditiverR   T©rT   rU   rV   rW   Ú
use_boxcoxé   g{®GáúM@gq=
×£PC@g=
×£p½G@gR¸…ëñI@gHáz®gO@g     €D@gHáz®I@g)\�ÂõHK@rƒ   rn   )ra   r¤   rb   r1   r1   r2   Útest_hw_seasonal²  s    úýz TestHoltWinters.test_hw_seasonalc              
   C   sx   t | jdddddd�}| ¡ }t| d¡dd	d
dddddgdƒ t | jdddddd� ¡  t | jdddddd� ¡  d S )NrQ   r   r   rR   Tr¨   rª   g¸…ëQØN@g�Âõ(\¯B@g\�Âõ(œG@g¤p=
×J@g…ëQ¸EP@gìQ¸…«C@g\�Âõ(ÜH@g…ëQ¸eK@rƒ   r‹   Zmultiplicativern   )ra   Zmod2rc   r1   r1   r2   Útest_hw_seasonal_add_mulÂ  s<    úýú
úz(TestHoltWinters.test_hw_seasonal_add_mulc              
   C   sx   t | jddddd� ¡ }t| d¡ddd	d
ddd	d
gdƒ t | jddddd� ¡ }t| d¡ddddddddgdƒ d S )NrQ   r   rR   T)rT   rV   rW   r©   rª   gxî=\¾M@g*8¼ "áA@g�ÑåÍáLF@gl^ÕY-àG@rƒ   r   g´†{z¡M@gó¾5™£A@gæ6§³� F@gÏì€ýG@rn   )ra   rz   r”   r1   r1   r2   Útest_hw_seasonal_buggyå  sP    û
ø
ôû
ø
ôz&TestHoltWinters.test_hw_seasonal_buggyN)Ú__name__Ú
__module__Ú__qualname__ÚclassmethodrP   rd   rh   ÚpytestÚmarkZxfailro   r{   r…   Úsmoker•   r¦   r«   r¬   r­   r1   r1   r1   r2   rD   �   s    
 *!
"C
+ 0#rD   Útrend_seasonal))r   N)Nr   )r   r   c              	   C   s>   | \}}t  d¡ }t t¡� t|||dd� W 5 Q R X d S )Néd   rœ   )rU   rV   rT   )r$   Úonesr²   ÚraisesÚ
ValueErrorr	   )rµ   rU   rV   r"   r1   r1   r2   Útest_negative_multipliative  s       ÿrº   rV   c              	   C   s,   t  t¡� ttd| ddd� W 5 Q R X d S )NFTrœ   )rU   rV   r€   rT   )r²   r¸   Ú	TypeErrorr	   Úhousing_data)rV   r1   r1   r2   Útest_dampen_no_trend  s    ûr½   )r   r   c              	   C   sJ   t jt d¡ t jdddd�d�}t t¡� t|| dd� W 5 Q R X d S )Nr¶   r   r   r    r   r   )rV   rT   )	r*   r-   r$   r·   r+   r²   r¸   r¹   r	   )rV   r"   r1   r1   r2   Útest_invalid_seasonal*  s    
 ÿr¾   c                	   C   s4   t  t¡�  ttjttgdd�ƒ ¡  W 5 Q R X d S )Nr   ©Zaxis)r²   r¸   r¹   r	   r*   Úconcatr¼   r_   r1   r1   r1   r2   Útest_2d_data3  s    ÿrÁ   c               	   C   sr   t  ¡ } t| jƒ| _tjdd��:}t| dddd�}t|ƒdksBt‚dt	|d ƒksVt‚W 5 Q R X |j
d	ksnt‚d S )
NT)Úrecordr   rR   ©rU   rV   rW   r   r   r   é   )r¼   r(   Úlistr   ÚwarningsÚcatch_warningsr	   Úlenr’   r‘   rT   )Zhd2Úwr¤   r1   r1   r2   Útest_infer_freq:  s       ÿrÊ   rU   c                 C   sl   t t| |dd�}| ¡ }|jddddiid�}t| ¡  ¡ tƒsDt‚|jd|j k sXt‚t|j	t
ƒsht‚d S )	NrR   rÃ   ÚbasinhoppingÚminimizer_kwargsrk   ÚSLSQP©rk   Úminimize_kwargsg)\�Âõ(ð?)r	   r¼   r_   rŽ   r�   r�   r‘   r’   r�   rx   Údict)rU   rV   r¤   ÚresÚres2r1   r1   r2   Útest_start_paramsF  s    ü
þrÓ   c                  C   s$   t ttjd dd�} | jdd� d S )Nr   Úknown©rv   rW   ç      à?©ru   )r	   r¼   Úilocr_   ©r¤   r1   r1   r2   Útest_no_params_to_optimizeY  s    ýrÚ   c               	   C   s:   t tdd�} t t¡� | jt dg¡d� W 5 Q R X d S )NrR   rq   rÖ   rX   )r	   r¼   r²   r¸   r¹   r_   r$   ÚarrayrÙ   r1   r1   r2   Útest_invalid_start_param_lengthb  s    rÜ   c                 C   sˆ   t tddd�}| ¡ }|jdd�}t| ¡  ¡ tƒs8t‚t| ¡  ¡ tƒsNt‚d}|j|j| ksft‚|jdd�}t	|j|jdd� d S )	Nr   rR   ©rU   rW   rË   ©rk   gñhãˆµøä>rƒ   )Údecimal)
r	   r¼   r_   rŽ   r�   r�   r‘   r’   r�   r   )Úreset_randomstater¤   rÑ   rÒ   ZtolZres3r1   r1   r2   Útest_basin_hoppingh  s      ÿrá   c                  C   sŽ   t tddd�} |  ¡ }| jdd�}t |j|jk¡s8t‚tjd d …df |j }t| 	¡ dƒ t
| ¡  ¡ tƒstt‚t
| ¡  ¡ tƒsŠt‚d S )Nr   rR   rÝ   T)Zremove_biasr   r‹   )r	   r¼   r_   r$   Úanyr£   r’   rØ   r   ÚmeanrŽ   r�   r�   r‘   )r¤   rÑ   rÒ   Zerr2r1   r1   r2   Útest_debiasedw  s      ÿrä   c                 C   sN   t t| |ddd� ¡ }t|jd dƒ t t| |dd� ¡ }t|jd dƒ d S )NrR   rÖ   )rU   rV   rW   r©   r©   )rU   rV   r©   )r	   r¼   r_   r   rx   )rU   rV   rÑ   r1   r1   r2   Útest_float_boxcox„  s    û
ü
rå   c                 C   sx  t t| |dd�}| ¡ }t| ¡  ¡ tƒs.t‚|j}tj	d }t
 t
 t¡¡}|rVdnd}t
 d| ¡}|d }	|d }
|d }|d	 }t
 |¡r–d
n|}|d }|d }|	|
||||f|d d…< |rÖ|d |dd …< t
 |¡ t¡}| ¡ }t
 dd
ggd ¡}t|| f }t|| f }t||||||dƒ}t||||||dƒ}|||ƒ}|||ƒ}t||ƒ |||ƒ}t||ƒ d S )NrR   rÃ   r   rÄ   é   ru   r}   Úsmoothing_seasonalrˆ   r‰   rv   rŠ   Úinitial_seasonsr‹   r]   F)r	   r¼   r_   rŽ   r�   r�   r‘   r’   rx   r,   r$   ÚsqueezeÚasarrayr5   ÚisnanZ	ones_likeÚastypeÚintr(   rÛ   r   r   ÚPyHoltWintersArgsr   r   )rU   rV   r¤   rÑ   rx   r¡   r"   ÚmÚpr8   r9   ÚgammaÚphir:   r;   ÚxiZp_copyÚboundsZpy_funcZcy_funcZ
py_hw_argsZ
cy_hw_argsZsse_cyZsse_pyr1   r1   r2   Útest_equivalence_cython_python™  sF    ü




rõ   c            
      C   s   t tdd�} |  ¡ }t| ¡  ¡ tƒs*t‚t 	t 
| j¡¡}|jd }t||d|jd ddd�\}}}}}t||jƒ t||jjd t d¡ ƒ t|| d¡ƒ ttd	dd
�} |  ¡ }t 	t 
| j¡¡}|jd }|jd }	t|||	|jd |jd dd�\}}}}}t||jƒ t|| |j|j ƒ t||jƒ t||jƒ t||jjd |jjd t dddddg¡  ƒ t|| d¡ƒ t| ¡  ¡ tƒ�sœt‚d S )NrR   rq   ru   r‹   rv   r‚   )r9   r:   r;   r<   r4   r   rÝ   r}   rŠ   r   rƒ   r]   rQ   )r   r¼   r_   rŽ   r�   r�   r‘   r’   r$   ré   rê   Úendogrx   rC   r   rw   rØ   r·   rf   r	   r£   rU   rÛ   )
r¤   rÑ   r7   r8   Úlr>   r@   Ú_r?   r9   r1   r1   r2   Útest_direct_holt_addÇ  sV    
     ÿ  ÿ

ú	 *ÿrù   c                 C   sv   t j d¡}d| d¡ }t  |d d …df ¡}||d d …df  }| t¡}t|ddd� ¡ }|j	d	 d
ksrt
‚d S )Ni90  rœ   )éè  rƒ   r   r   r   rR   rÝ   ru   r‹   )r$   r%   r&   r'   Úcumsumrì   rí   r	   r_   rx   r’   )rà   r.   r/   Zy_starr"   rÑ   r1   r1   r2   Útest_integer_arrayð  s    
  ÿ
rü   c                  C   s    t  d¡} t| dddd�}|jdddd	�}|jd
d�}t|t jdt  d¡f dd� |jddd
d	�}|jd
d�}t|t jdt  d¡f dd� t||dd� d S )Nrœ   r   TrR   ©rU   r€   rW   r   r‹   g#B’¡œÇ;)ru   r}   rˆ   r   )Ústarté	   g»½×Ùß|Û=r›   )r$   r6   r	   r_   r`   r   r¢   )rö   r¤   Zres1Zpred1rÒ   Zpred2r1   r1   r2   Útest_damping_trend_zeroü  s    
ür   c            
      C   sT  dddddg} t jdt| ƒd�}t  | |¡}dd	d
ddg}t jdt|ƒd�}t  ||¡}t| dd� ¡ }t|dd� ¡ }t|dd� ¡ }t|dd� ¡ }	t| ¡ dgdƒ t|jddd�dddgdƒ t| ¡ dgdƒ t|jddd�dddgdƒ t| ¡ dgdƒ t|jddd�dddgdƒ t|	 ¡ dgdƒ t|	jddd�dddgdƒ d S )Nrœ   é   é   é(   é2   r   )rþ   r!   rƒ   rQ   rª   é   é    r   )rU   r   é<   r   r‚   é   )rþ   r^   éF   éP   z2000-1-6z2000-1-8é@   é€   é   )r*   r+   rÈ   r-   r	   r_   r   r`   )
Zarray_input_addZseries_index_addZseries_input_addZarray_input_mulZseries_index_mulZseries_input_mulrb   rc   rz   r”   r1   r1   r2   Útest_different_inputs  s@     ÿ ÿ  ÿ  ÿr  c               D   C   s¨   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDgD} t jdEdFdGdH�}t  | |¡S )INg…¶œKq>@g¼t“&3@g(DÀ!TQ9@gÖ‹¡œh—;@gà¹÷pÉ	@@g”ÁQòê|7@g¶Û.4×y<@g¤p=
×�A@gÏ,	PSkB@gýjÌ9@g©0¶ä¸>@gáE_Aš±<@gˆ×õRB@g^ô¤Ó7@g9Ñ®BÊO=@g!ÈA	3Å?@gfN—ÅÄ–A@g�î vÆ3@g5^ºIš=@giãˆµøDA@gÂ&S£D@g+Áâpæ§:@gdu«ç¤G<@g±Pkšw˜A@g5SE@gY‹O0¦8@g¨©ekU@@gÐDØð B@gIKåíŸF@gïæ©¹Y=@gczÂ,B@g‡m‹2äD@gl	ù g£H@gƒQI�€F?@g�ŸqáìB@gÐ¸p $kC@g6<½RžI@g‘z6«Ö?@g¨o™Óe©D@gƒÀÊ¡EfE@g´å\Š«ÚK@g\rÜ)´@@gMÖ¨‡(E@gÆ‚”F@g™ðKý¼ÉM@g×ú"¡-kA@g@Ù”+¼kF@g¸…ëQ|G@gJÒ5“oN@góv„Ó‚/C@g¾¼ ûè|G@gçŒ(í]I@g»aÛ¢ÌÒN@gnnLOX¦C@gÄ_“5êUJ@gCç5v‰*K@gÌE|'fµP@gMg'ƒoD@gÃ¶E™êI@g¥I)èö¾L@g5{ PP@g²ºÕ‡E@gol•`aK@g¿·éÏêM@gÑõ-sPR@g©ÞØ*ÙG@gÔC4ºƒŒN@g3d’‘ƒP@z
1999-03-01ú
2015-12-01Z3MSr   )r*   r+   r-   )rO   r   r1   r1   r2   Úaustourists/  sŽ    ¼Fr  c                  C   sÔ   ddddgddddgd	d
ddgddddgddddgddddgddddgdœ} ddd d!gd"d#d$d%gd&d'd(d)gd*d+d,d-gd.d/d0d1gd2d3d4d5gd6d7d8d9gd:d;d<d=gd>d?d@dAgdBdCdDdEgdFdGdHdIgdJdKdLdMgdNœ}| |dOœS )Pa‡  
    obtained from ets.simulate in the R package forecast, data is from fpp2
    package.

    library(magrittr)
    library(fpp2)
    library(forecast)
    concat <- function(...) {
      return(paste(..., sep=""))
    }
    error <- c("A", "M")
    trend <- c("A", "M", "N")
    seasonal <- c("A", "M", "N")
    models <- outer(error, trend, FUN = "concat") %>%
      outer(seasonal, FUN = "concat") %>% as.vector
    # innov from np.random.seed(0); np.random.randn(4)
    innov <- c(1.76405235, 0.40015721, 0.97873798, 2.2408932)
    params <- expand.grid(models, c(TRUE, FALSE))
    results <- apply(params, 1, FUN = function(p) {
      tryCatch(
        simulate(ets(austourists, model = p[1], damped = as.logical(p[2])),
                 innov = innov),
        error = function(e) c(NA, NA, NA, NA))
    }) %>% t
    rownames(results) <- apply(params, 1, FUN = function(x) paste(x[1], x[2]))
    gùƒ�çÞuS@gS\Uö]YJ@g('ÚUHuP@g‘¸ÇÒ‡öQ@g~Æ…!úi@g%�•Ca@gr§t°þ±o@g‹lçû©g‚@gMÛ¿²Òúj@g¥I)èöÊ_@gàJvl„Ñp@g“©‚‘†@gvT5AÔk@guYLl>�`@gŸqá@È°q@gðÜ{¸¤¸‡@g OäIÒAO@gyuŽÙïN@gfˆc]Ü’O@g×4ï8EGP@gž{e@g3d’‘�V@gË-­†±`@gòú'm@gGZ*oGÿd@gÕxé&1¦V@gÑ"Ûù~Æ`@g‚¨û ¤tm@©ÚAAAÚMAAÚMAMÚMMMÚAANÚMANÚMMNgjMóFS@gÊÞå"ÂI@gÀxýP@g›�kC—Q@gÍui'j@gâ#bJ$´b@g´°§~êp@gº ¾eNèƒ@g.ÿ!ýöES@g+j0ÃI@gá@H0P@gŠå–VCvQ@g'ƒ£äÕûi@gÁ­»yª-e@g–²q¬Ÿs@g°8œùÕÏˆ@gq=
×£Îj@g_˜LŒŒZ@gzäžsj@gqÉq§ôÁ~@g¬ÿs˜ k@gV¼‘yäÑc@g…ëQ¸ž3y@gc('ÚUµ•@gþš¬Qàj@g­ú\mÅ�a@gñcÌ]Ë^s@g¯”eˆ£X‹@gvÃ¶EÕO@g8ó«9@ŒO@g“ÆhUP@g—­õEB¡P@gë�›áŒe@g(
ô‰<áV@g	m9—Ã`@g=›UŸ«ßl@g…|Ð³Y<e@gUMuUX@gî±ô¡ßa@g­†Ä=–�o@gq $˜DN@gS"‰^ÂM@gôlV}N@gøpÉq§ÐN@g/Ý$�`d@gˆ€C¨R%\@g�÷ª•	‡e@gë�›á/u@©r  r  ZANAZMNAr  r  ZMNMr  r  r  ZANNZMNN©TFr1   ©ÚdampedZundampedr1   r1   r2   Úsimulate_expected_results_r}  s,    






ù












ôr  c                  C   sZ  ddddddddd	d
dœ
dddddddddddœ
dddddddddddœ
d d!d"d#d$d%d&d'd(d)dœ
d*d+t jd,d-d.t jt jt jt jdœ
d/d0t jd1d2d3t jt jt jt jdœ
d4d5t jd6d7d8t jt jt jt jdœ
d9œ} d:d;d<t jd=d>d?d@dAdBdœ
dCdDdEt jdFdGdHdIdJdKdœ
dLt jdMt jdNt jdOdPdQdRdœ
dSt jdTt jdUt jdVdWdXdYdœ
dZd[d\t jd]d^d_d`dadbdœ
dcdddet jdfdgdhdidjdkdœ
dlt jdmt jdnt jdodpdqdrdœ
dsdtt jt jdudvt jt jt jt jdœ
dwdxt jt jdydzt jt jt jt jdœ
d{d|t jt jd}d~t jt jt jt jdœ
dt jt jt jd€t jt jt jt jt jdœ
d�t jt jt jd‚t jt jt jt jt jdœ
dƒœ}| |d„œS )…a  
    The final state from the R model fits to get an exact comparison
    Obtained with this R script:

    library(magrittr)
    library(fpp2)
    library(forecast)

    concat <- function(...) {
      return(paste(..., sep=""))
    }

    as_dict_string <- function(named) {
      string <- '{'
      for (name in names(named)) {
        string <- concat(string, """, name, "": ", named[name], ", ")
      }
      string <- concat(string, '}')
      return(string)
    }

    get_var <- function(named, name) {
      if (name %in% names(named))
        val <- c(named[name])
      else
        val <- c(NaN)
      names(val) <- c(name)
      return(val)
    }

    error <- c("A", "M")
    trend <- c("A", "M", "N")
    seasonal <- c("A", "M", "N")
    models <- outer(error, trend, FUN = "concat") %>%
      outer(seasonal, FUN = "concat") %>% as.vector

    # innov from np.random.seed(0); np.random.randn(4)
    innov <- c(1.76405235, 0.40015721, 0.97873798, 2.2408932)
    n <- length(austourists) + 1

    # print fit parameters and final states
    for (damped in c(TRUE, FALSE)) {
      print(paste("damped =", damped))
      for (model in models) {
        state <- tryCatch((function(){
          fit <- ets(austourists, model = model, damped = damped)
          pars <- c()
          # alpha, beta, gamma, phi
          for (name in c("alpha", "beta", "gamma", "phi")) {
            pars <- c(pars, get_var(fit$par, name))
          }
          # l, b, s1, s2, s3, s4
          states <- c()
          for (name in c("l", "b", "s1", "s2", "s3", "s4"))
            states <- c(states, get_var(fit$states[n,], name))
          c(pars, states)
        })(),
        error = function(e) rep(NA, 10))
        cat(concat(""", model, "": ", as_dict_string(state), ",
"))
      }
    }
    gqÎù`¯Ö?g7ý�*Ic ?g{Z§:„˜Ù?gT_ã(\ï?g”Ó™o O@go[V:Ú›æ?g™Pò³@gÏxx|}"³¿gV�ƒ'Àgpt×…Ã*@)
r8   r9   rñ   rò   r÷   r>   Ús1Ús2Ús3Ús4g`Mç¨ÃéÓ?gjóúÍj,¨?g­ ¦ÖâÎÓ?g;È�SÞë?gœs¥e&¥M@g{(eŠ#ä?g^Á�Ç™ª@gZ€ñE¬I@g¤ÇQÎ�f"Àg‰%>³.@ga§CÈuùÞ?g&{}FÐl?g½/(Þ¥?gñÛô(\ï?gd•­ñ‹€O@g4P-šÑ?gõÉÉ?¨�ð?g<ub‹¼î?g'p†™‹¤è?g¸�{Ùö¾ó?g¡6Û¹Àà?g÷Ì1N8?g$¯Î7?gãÍ–n¤ï?gÍñü™O@g*³³•Æð?gÍï¨7dŽð?gy4îÑï·î?gŸ•$§Þ®è?gtÈI»@¾ó?gt Î•Ž?g}õú	•Ž?g0(¿�[ï?g3ZØFUN@gï^ïÄ!_æ?gÎll$‰�?gÄ‘;¼‰�?gÞù^_(\ï?gz7Ø¸ïN@gò,kéxYæ?gÞ7\ÉÊ¸�?g�ëOMÈ¸�?g-¶ßóV4ï?gñÝ³�ÁN@gæp[sñ(ð?r  gCa±jýõÉ?gD¾t–A&?g€ÛµÂºÝ?g.5œì§GO@gZúØ<ºâ?gçiGæä@g=§ŸBÜæó¿g„””	Cê)ÀgB;ŠºÌi(@g.´iÖ¥Ú?gš9N”l7?g<$¢–Ö?g"4_O@g šÝlîÎÜ?gn#-‰Š@g+U²¾6Þ«¿gtÿEƒëd'ÀgÊhO†e*@gŠyœnYá?gë3Y¶Ù?gÆó¤¬ÍL@gxž�aŸ— @g E<Üi@g4½êÂÀg�³ºé¸1@gÀíeÕá?gÆ26+Ö?g_×užÅM@gÏrmÕ@gñÃ,En˜@gy{�™wâÀgžÓß*1@gÈöš$3Ô?g[—÷°7?g•'5T:?gãUWé?4O@g¬‚*�.mà?g2K@˜ð?g…Ytõµî?gDpúvA¥è?g-RZ¿ºó?g»èºŸeyá?gÈ+Ñ™Zã²?gºðºg9?gÆ»ÓméO@g9…¤™Kð?gW_tÖ•˜ð?gl*ëÄöÁî?gs“Žt­è?gëYB‘¯ó?gq©E.ß|ã?g‚�‹Dì%?gÕ}¸ó×’O@g€Ëvu¡�ð?gO^]õ@Äî?g2aÃõ–è?gÂù5?©µó?gÎªÛÂ*ôƒ?g6þ'ôƒ?g Q’N@g¦Q§Jè?g+-Ê¿ Ö„?g:&ðÑ•Ö„?gÝ(’»ÍN@gªúWCs]è?gJÛ]¨±?gæª¬Àÿ6?g‰ ñ›?\N@gÅ„Š2ð?gTº«_³$É?g¡Ò]£ËbM@g£•Bº]Ê?gXÉœ}M@r  r  )r$   Únanr  r1   r1   r2   Úsimulate_fit_state_r³  s¬   Bööööööö·Xöööööööööööö€ û r#  r  r  Úerrorc                 C   s*  ddddœ}|| ||   ||  }||| krPt  || | ¡}	|| | }
ndS t|d| ||d�j|
d |
d	 |
d
 |
d dd�}|
d |jd< |
d |jd< |
d |jd< |
d |jd< |
d |jd< |
d |jd< t  t  |j	¡¡rðdS t  ddddgg¡j
}|jdd||d�}t|	|jdƒ dS )zä
    Test for :meth:``statsmodels.tsa.holtwinters.HoltWintersResults``.

    The tests are using the implementation in the R package ``forecast`` as
    reference, and example data is taken from ``fpp2`` (package and book).
    ÚAr   ÚNr   NrQ   )rT   rU   rV   r€   r8   r9   rñ   rò   F)ru   r}   rç   rˆ   rs   r÷   r4   r>   r  r  éþÿÿÿr   éýÿÿÿr!  éüÿÿÿg@éúôŽ9ü?gÅY�ü,œÙ?gÐîOÒQï?g[¡þiYí@r   )Úrepetitionsr$  Úrandom_errorsr‚   )r$   rê   r	   r_   Ú_levelZ_trendZ_seasonrâ   rë   r£   ÚTÚsimulater   re   )rU   rV   r  r$  r  r  r#  Z
short_nameZ
model_nameÚexpectedÚstater_   ZinnovÚsimr1   r1   r2   Útest_simulate_expected_rÞ  s<    ûõr2  c                 C   s"  t | dddddd� ¡ }t|jdddd�j|jdddd�jƒ t|jdd	dd�j|jdd
dd�jƒ t|jdddd�j|jdddd�jƒ |jddtjjd� |jddtj ¡ d� |jddtj	 
dd¡d� |jdddd� |jdddd�j}|jddtj	 d¡d�j}t ||k¡�st‚dS )zS
    check whether all keywords are accepted and work without throwing errors.
    rQ   r   TrR   ©rT   rU   rV   r€   rW   r   )ÚanchorÚrandom_staterþ   r4   r  r^   z
2016-03-01rœ   )r*  r+  Ú	bootstrap©r*  r5  N)r	   r_   r   r.  re   ÚscipyÚstatsZnormr$   r%   Zrandnr&   Úallr’   )r  r_   rÑ   rÒ   r1   r1   r2   Útest_simulate_keywords  s>    ú

þþþ  
ÿr;  c              	   C   sf   t | ddddddd� ¡ }| d¡j}|jddd	d
�j}tj|dd�}t t || ¡dk ¡sbt	‚dS )zE
    check if simulation results with boxcox fits are reasonable
    rQ   r   r   FrR   T)rT   rU   rV   r€   rW   r©   rœ   r   r7  r   r¿   r‚   N)
r	   r_   rf   re   r.  r$   rã   r:  Úabsr’   )r  r_   r/  rÑ   rã   r1   r1   r2   Útest_simulate_boxcoxE  s    ù
	r=  Úixrœ   r¶   rú   éÐ  c                 C   sŽ   t jddddddddd	d
g
t| | d ƒd�}t t¡� t|ddd� ¡ }W 5 Q R X |jdd�j	}|d | d ksvt
‚|d | d ksŠt
‚d S )NiaN i>^ i‚L i°I iª1 iÒI i  iÕ i» iú rœ   r   r   F)rU   r€   rm   r   r4   é   )r*   r-   r)   r²   Úwarnsr   r	   r_   rf   r   r’   )r>  Zts_1Úmodelr   r1   r1   r2   Útest_forecast_indexZ  s    þ  ÿrC  c                	   C   s0   t jtdd�� tt d¡dd� W 5 Q R X d S )NzCan only dampen the©Úmatchr¶   T)r€   ©r²   r¸   r¹   r	   r$   r·   r1   r1   r1   r2   Útest_error_dampenj  s    rG  c               	   C   sŽ   t j d¡} tjtdd�� t| ddd� W 5 Q R X t| d dd	�}t|tƒsRt‚t| d dd
d�}tjt	dd�� |j
dd	� W 5 Q R X d S )Nr¶   zuse_boxcox must be TruerD  ÚarÔ   ©r©   rW   rƒ   T©r©   rp   zuse_boxcox was setF)r$   r%   r'   r²   r¸   r»   r	   rŽ   r’   r¹   r_   )r"   r¤   r1   r1   r2   Útest_error_boxcoxo  s      ÿrK  c              	   C   s˜  t jtdd�� t| dd� W 5 Q R X t jtdd�� t| dddd� W 5 Q R X t jtdd�� t| ddd	d
ddgd� W 5 Q R X t  t¡� t| dd� W 5 Q R X t  t¡� t| dd� W 5 Q R X t  t¡� t| dd	ddgd� W 5 Q R X t  t¡� t| dddd� W 5 Q R X t  t¡� t| dddddd� W 5 Q R X t| ddd�}t  t¡� |jdd� W 5 Q R X t  t¡� |jddd� W 5 Q R X d S )Nz+initialization is 'known' but initial_levelrD  rÔ   rq   zinitial_trend set but modelr‰   )rW   rv   rŠ   zinitial_seasonal set but modelr   ç333333Ó?çš™™™™™Ù?rÖ   )rW   rv   Úinitial_seasonal)rv   )rŠ   gš™™™™™©?rQ   )rN  r   )rU   rW   rv   ç       @)rU   rV   rW   rv   rŠ   ©rW   rv   Tr‡   )Zuse_basinhoppingrk   ©r²   r¸   r¹   r	   r_   ©r3   r¤   r1   r1   r2   Útest_error_initialization~  sd     ÿü
üüú  ÿrS  rk   r‡   rË   zL-BFGS-BZTNCrÍ   ZPowellztrust-constrc                 C   sp   t  ddg¡}i }t|dd�}|j| ||d�}t|jd ddd	� t|jd
 ddd	� t| ¡  ¡ t	ƒslt
‚d S )Ng¤p=
×£è?g      &@rR   rq   )rk   rM   rÏ   ru   g�Ê³Üã¶è?rš   ©Zrtolrv   g˜nñt×&@)r$   rÛ   r	   r_   r   rx   rŽ   r�   r�   r‘   r’   )rk   r3   ÚsvrÏ   r¤   rÑ   r1   r1   r2   Útest_alternative_minimizers°  s      ÿrV  c              	   C   sÎ   t | dd�}ddi}t t¡� |j|d� W 5 Q R X t t¡� |jd|d� W 5 Q R X dddii}t t¡� |jd	|d� W 5 Q R X dd
dii}|jd	|d�}t|jtƒs´t‚t| 	¡  
¡ tƒsÊt‚d S )NrR   rq   ÚargsZanything)rÏ   r‡   rÎ   rÌ   rË   rk   rÍ   )r	   r²   r¸   r¹   r_   rŽ   rx   rÐ   r’   r�   r�   r‘   )r3   r¤   ÚkwargsrÑ   r1   r1   r2   Útest_minimizer_kwargs_errorÈ  s    rY  rx   r|   rL  çÍÌÌÌÌÌì?r   rÖ   rt   c                 C   sR   t  | ¡} t  dgd ¡}t  ddggd ¡}tt| ||ƒt| | t¡|ƒƒ d S ©NTr]   r‹   r‰   )r$   rÛ   r   r   r   rì   rí   ©rx   Úselrô   r1   r1   r2   Útest_to_restricted_equivØ  s    

þr^  çš™™™™™¹?c                 C   sL   t  | ¡} t  dgd ¡}t  ddggd ¡}t| tt| ||ƒ||ƒƒ d S r[  )r$   rÛ   r   r   r   r\  r1   r1   r2   Útest_restricted_round_tipå  s    
þr`  c              	   C   sÚ   ddi}t  t¡� t| |d� W 5 Q R X dddgi}t  t¡� t| |d� W 5 Q R X ddi}t  t¡� t| |d� W 5 Q R X ddi}t  t¡� t| |d� W 5 Q R X dd	i}t  t¡� t| |d� W 5 Q R X d S )
NZbad_key)r‹   r‰   )rô   ru   r‹   r‰   )r‹   r‰   rO  )r‰   r‹   )g      ð¿rO  )r²   r¸   ÚKeyErrorr	   r»   r¹   ©r3   rô   r1   r1   r2   Útest_bad_boundsò  s    rc  c                 C   sP   ddi}t | |dd�jdd�}t | dd�jdd�}t|jd |jd dd	� d S )
Nru   )r_  r‰   rR   )rô   rW   r‡   rÞ   rq   r�   rT  )r	   r_   r   rx   )r3   rô   rÑ   rÒ   r1   r1   r2   Útest_valid_bounds  s       ÿþÿýrd  c              	   C   s&  t | dd�}| ddi¡� | ¡ }W 5 Q R X |jd dks@t‚t| ¡  ¡ tƒsVt‚t | dddd�}| dd	i¡� | ¡ }W 5 Q R X |jd d	ksšt‚t| ¡  ¡ tƒs°t‚t | dddd
�}| dddœ¡� | ¡ }W 5 Q R X |jd dksöt‚|jd dk�s
t‚t| ¡  ¡ tƒ�s"t‚d S )NrR   rq   ru   rL  r   Trý   rˆ   r†   rÃ   r_  r   )rç   ru   rç   )	r	   rž   r_   rx   r’   rŽ   r�   r�   r‘   ©r3   r¤   rÑ   r1   r1   r2   Útest_fixed_basic  s4       ÿ   ÿrf  c              
   C   sL  t | dd�}t t¡�  | ddi¡� W 5 Q R X W 5 Q R X t t¡�  | ddi¡� W 5 Q R X W 5 Q R X t | ddd�}t t¡�" | dd	d
œ¡� W 5 Q R X W 5 Q R X t | dddd�}t t¡�" | dddœ¡� W 5 Q R X W 5 Q R X dddœ}t | dd|dd�}tjtdd��* | dddœ¡� | ¡  W 5 Q R X W 5 Q R X d S )NrR   rq   r}   rL  ru   g333333Ó¿r   rÝ   rM  r�   rÃ   r|   ©ru   rç   )rM  r|   )çffffffæ?rZ  )rU   rV   rô   rW   z!After adjusting for user-providedrD  rt   )r}   rç   )r	   r²   r¸   ra  rž   r¹   r_   )r3   r¤   rô   r1   r1   r2   Útest_fixed_errors,  sN      ÿ   ÿÿ
ûÿri  r   c              	   C   st   t | ||dd�}|jdd�}|jjs(t‚| ddi¡� |jdd�}W 5 Q R X |jjsZt‚t| ¡  ¡ t	ƒspt‚d S )NrR   rÃ   T)rl   ru   r_  )
r	   r_   Úmle_retvalsÚsuccessr’   rž   rŽ   r�   r�   r‘   )r3   rU   rV   r¤   rÑ   r1   r1   r2   Ú
test_bruteR  s       ÿrl  c              	   C   sz   t  t¡� t| ddd� W 5 Q R X t  t¡� t| dddd� W 5 Q R X t  t¡� t| dt d¡dd	� W 5 Q R X d S )
Nr‰   Ú	heuristicrÕ   r   rp   )rU   rŠ   rW   rÄ   rR   )rV   rN  rW   rF  )r3   r1   r1   r2   Útest_fix_set_parametersa  s(      ÿüürn  c              
   C   sP   t | dd�}tjtdd��, | ddi¡� |jdd� W 5 Q R X W 5 Q R X d S )	NrR   rq   zCannot fix a parameterrD  ru   g      Ð?r   r×   )r	   r²   r¸   r¹   rž   r_   rR  r1   r1   r2   Útest_fix_unfixablev  s    ro  c              	   C   st   dddœ}t jtdd�� t| d|dd� ¡  W 5 Q R X d	d
dœ}t jtdd�� t| d|dd� ¡  W 5 Q R X d S )N)r_  r   )rL  rM  r�   zThe bounds for smoothing_trendrD  r   rR   )rU   rô   rW   )rL  rÖ   )rh  r|   rg  z!The bounds for smoothing_seasonal)rV   rô   rW   rQ  rb  r1   r1   r2   Útest_infeasible_bounds}  s     
   ÿ
ürp  rR   rm  rp   c                 C   s>   t | |||d�}| ¡ }|jjs$t‚t| ¡  ¡ tƒs:t‚d S )NrÃ   )	r	   r_   rj  rk  r’   rŽ   r�   r�   r‘   )r3   rk   rU   rV   r¤   rÑ   r1   r1   r2   Útest_initialization_methods�  s       ÿrq  c                 C   sR   t | dd� ¡ }|jdkst‚|jjd | jd ks8t‚t|j|jdd … ƒ d S )NrR   rq   r   r4   )	r	   r_   r—   r’   Zresidr,   r   Zfcastvaluesr„   )r3   rÑ   r1   r1   r2   Útest_attributes›  s    rr  c              	   C   sv   t | d ddd�}tjtdd�� |jdd� W 5 Q R X | ¡ }t| ¡ ƒ}t d|¡s\t	‚t
| ¡  ¡ tƒsrt	‚d S )	Nrƒ   Trm  rI  zuse_boxcox was set at modelrD  rJ  zBox-Cox:[\s]*True)r	   r²   r¸   r¹   r_   r‘   r�   ÚreÚfindallr’   rŽ   r�   )r3   r¤   rÑ   Zsummr1   r1   r2   Útest_summary_boxcox¢  s      ÿru  c              	   C   s  t t | ¡dd�}| ¡ }t| ¡  ¡ tƒs0t‚t	j
tdd�� |jddd� W 5 Q R X t	j
tdd�� |jdd	t d
¡d� W 5 Q R X |jdd	dd� t	j
tdd�� |jdd	dd� W 5 Q R X t	j
tdd�� |jdd	ddd� W 5 Q R X t	j
tdd�� |jdd	dd� W 5 Q R X d S )Nrm  rq   zerror must berD  rœ   Úunknown)r$  z	If randomr§   )r  r  )r$  r+  r¶   )r$  r4  zCannot anchorr?  zArgument random_stateZ	bad_value)r$  r4  r5  zArgument random_errorsZ
bad_values)r	   r$   rê   r_   rŽ   r�   r�   r‘   r’   r²   r¸   r¹   r.  Úemptyre  r1   r1   r2   Útest_simulate®  s,     ÿ    ÿrx  Ú	index_typr+   Úperiodr)   Ú	irregularc           
   	   C   s`  | j d }i }d }d }|dkr4tjd|d dd�}nŽ|dkrRtjd|d dd�}np|dkrrt |d ¡}d	|d
< nP|dkrÂtj d¡}t t 	|j
dd|d d�¡¡}t}d	|d
< tjdddd�}|d krÖ|dd … }|  ¡ } |d d… | _t|ƒ�" t| fddddœ|—Ž ¡ }W 5 Q R X t|ƒ� | d¡}	W 5 Q R X t|	tjƒ�sLt‚tj |	j|¡ d S )Nr   rz  r   é$   r   r    r+   r)   rÄ   rT   r{  rQ   )Úsizerú   i  r   )rþ   ÚstopÚstepiÜÿÿÿr   rm  rÃ   )r,   r*   Zperiod_ranger+   Z
RangeIndexr$   r%   r&   ÚIndexrû   Úrandintr   r(   r   r   r	   r_   rf   rŽ   r-   r’   ÚtestingZassert_index_equal)
r3   ry  r¡   rX  ÚwarningZfcast_indexr   r.   rÑ   Úfcastr1   r1   r2   Útest_forecast_index_typesÃ  sF    

 
ÿüû
r…  c              	   C   sŠ   t | d |  ¡  ddd�}| ¡ }t| ¡  ¡ tƒs8t‚t 	t¡� t
|j|jƒ W 5 Q R X t|dƒrjt‚t|dƒrxt‚t|dƒr†t‚d S )Nr   rR   T)rW   r©   Z_untransformed_levelZ_untransformed_trendZ_untransformed_seasonal)r	   Úminr_   rŽ   r�   r�   r‘   r’   r²   r¸   r   rw   r£   Úhasattrre  r1   r1   r2   Útest_boxcox_componentsë  s      ÿrˆ  r*  r   r+  r6  c                 C   s„   t | dddddd� ¡ }|jdd||d�}|dkr6d	nd|f}|j|ksLt‚|jd
d||d�}|dkrjdnd
|f}|j|ks€t‚d S )NrQ   r   TrR   r3  r   r   )r4  r+  r*  )r   rœ   )rœ   )r	   r_   r.  r,   r’   )r  r+  r*  r_   r1  Zexpected_shaper1   r1   r2   Útest_forecast_1_simulationù  s0    ú
	   ÿ   ÿr‰  r¡   rÿ   c                 C   s.   t | d |… ||ddd� ¡ }|jjs*t‚d S )NrQ   rR   )rU   rV   rT   rW   )r	   r_   rj  rk  r’   )r3   rU   rV   r¡   rÑ   r1   r1   r2   Ú(test_estimated_initialization_short_data  s    
û
rŠ  c              	   C   s2  t j d¡}tj|d�}d|j_t|ddddd�}|jddd	�}|j	d
d�}|j
d d
ks^t‚tjdd|j
d  d�}t jj||j
d dd�}t|ƒ}||_t|jtjƒs®t‚|jjd ks¾t‚|jjd ksÎt‚tjtdd�� t|ddddd�}W 5 Q R X |jddd	�}tjtdd�� |j	d
d� W 5 Q R X d S )Ni`	  )rO   ÚdrÄ   r   rm  rS   T)rs   rl   if rm   r   z
2020-01-01rƒ   )r!   F)r}  ÚreplacezA date index has been providedrD  zNo supported)r$   r%   r'   r*   Z	DataFramer   r   r	   r_   rf   r,   r’   r+   ÚchoiceÚsortedrŽ   rG   Zinferred_freqr²   rA  r   )rà   r"   Zdf_yrB  Zfittedr„  r   r1   r1   r2   Útest_invalid_index!  s>    ûûr�  c                  C   sB   dddddddg} t | ddd�}| ¡ }|j t|jd dƒ d S )Nr‹   g      Y@rÔ   g      4@rP  rv   )r	   r_   rx   r   )ZseriesÚesZes_fitr1   r1   r2   Útest_initial_levelG  s      ÿr‘  c               
   C   sš   t tddddd� ¡ } t | jd ¡}t | jd d¡}t | jd	 d¡}t tdddd
|||d� ¡ }t|jd |ƒ t|jd |ƒ t|jd	 |ƒ d S )NrQ   r   r   rR   rS   rv   rŠ   r   rè   rÔ   )rT   rU   rV   rW   rv   rŠ   rN  )r	   rL   r_   r$   Úroundrx   r   )rb   ZlvlrU   Zseasrc   r1   r1   r2   Útest_all_initial_valuesR  s.    û
ø

r“  )r   )lÚ__doc__Zstatsmodels.compat.pytestr   Úosrs  rÆ   Únumpyr$   Znumpy.testingr   r   Zpandasr*   r²   Zscipy.statsr8  Zstatsmodels.tools.sm_exceptionsr   r   Zstatsmodels.tsa.holtwintersr   r   r	   r
   r   Z2statsmodels.tsa.holtwinters._exponential_smoothersr   r   Z&statsmodels.tsa.holtwinters._smoothersrî   r   r   ÚpathÚsplitÚabspathÚ__file__Úbaserø   Zread_csvÚjoinr¼   ZasfreqZ	SEASONALSZTRENDSrO   r   Úto_datetimeÚidxr-   rG   rH   rL   Zfixturer3   rC   rD   r³   Zparametrizerº   r½   r¾   rÁ   rÊ   rÓ   rÚ   rÜ   rá   rä   r´   rå   rõ   rù   rü   r   r  r  r  r#  r2  r;  r=  rC  rG  rK  rS  rV  rY  r^  r`  rc  rd  rf  ri  rl  rn  ro  rp  rq  rr  ru  rx  r…  rˆ  r‰  rŠ  r�  r‘  r“  r1   r1   r1   r2   Ú<module>   s~  ý
èè



     
 ÿ
	

	,) 
M
5
  ,9*
2ùþ
 ÿ

 ÿ

& ÿ	 
ÿ
%&