
    i             	       p   d Z ddlm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 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jB                  jE                  ejB                  jG                  e$            \  Z%Z& ejN                  ejB                  jQ                  e%d
d      dd      Z)e)jU                  d      Z)dZ+dZ,g dZ-g dZ. ej^                  e.      Z0 ejb                  e- ejd                  e0 ejf                  e0                  Z4 ejj                  d      d        Z6dkdZ7 G d d      Z8ejr                  ju                  dd      d        Z;ejr                  ju                  de+      d        Z<ejr                  ju                  dd       d!        Z=d" Z>d# Z?ejr                  ju                  d$d%g      ejr                  ju                  dd%g      d&               Z@d' ZAd( ZBd) ZCd* ZDejr                  j                  ejr                  ju                  d$e,      ejr                  ju                  de+      d+                      ZFejr                  ju                  d$e,      ejr                  ju                  de+      d,               ZGd- ZHd. ZId/ ZJd0 ZKejj                  d1        ZLejj                  d2        ZMejj                  d3        ZNejr                  ju                  d$e,      ejr                  ju                  de+      ejr                  ju                  d4d5      ejr                  ju                  d6d       d7                             ZOd8 ZPd9 ZQejr                  ju                  d:g d;      d<        ZRd= ZSd> ZTd? ZUejr                  ju                  d@g dA      dB        ZVdC ZWejr                  ju                  dDg dEg dFg dGg      dH        ZXejr                  ju                  dDg dIg dJg dKg      dL        ZYdM ZZdN Z[dO Z\dP Z]ejr                  ju                  d$dQdg      ejr                  ju                  ddQdg      dR               Z^dS Z_dT Z`dU Zaejr                  ju                  d@g dV      ejr                  ju                  d$ddQg      ejr                  ju                  dddQg      dW                      ZbdX ZcdY ZddZ Zeejr                  ju                  d[g d\      d]        Zfd^ Zgejr                  ju                  d_d`dag      ejr                  ju                  dbddcg      dd               Zhejr                  ju                  d$ddQg      ejr                  ju                  dddQg      ejr                  ju                  dedfdag      dg                      Zidh Zjdi Zkdj Zly)lz4
Author: Terence L van Zyl
Modified: Kevin Sheppard
    )	MONTH_END)pytest_warnsN)assert_allcloseassert_almost_equal)ValueWarning)PY_SMOOTHERS	SMOOTHERSExponentialSmoothingHoltSimpleExpSmoothing)HoltWintersArgs_test_to_restricted)r   to_restrictedto_unrestrictedresultszhousing-data.csvDATET)	index_colparse_datesMSaddmulN)gVWD@gmV}
8@g\sG)@@gB@gHG@g'ҨX=@gt=B@gl%}E@ga+esH@gk".?@gLB@g5[y5D@gP|zI@gr_!?@gӸ7}D@g(.E@gϚK@gV`@@g5|	E@g=ϟ6F@g
%M@gclA@g)[$(F@gĖMG@)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                  j   t         j                  j                  d      } | j                  d      }|j	                         }t        dd      D ]  }||dz
     ||   z   d||dz
     z  z
  ||<   ! |dd  }t        j                  d|j                  d   t              }t        j                  ||d	      S )
Nr   i     皙?   2000-1-1periodsr   y)r   name)nprandomRandomStatestandard_normalcopyrangepd
date_rangeshaper   Series)rser&   ir   s        x/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/site-packages/statsmodels/tsa/holtwinters/tests/test_holtwinters.pysesr6   i   s    			q	!B
4 A	A1d^ 0Qx!A$qQx/!0	#$AMM*aggajyIE99Qe#..    c                 z   | j                   d   }t        j                  |      }t        j                  |      }t        j                  |      }	t        j                  |      }
||d<   ||d<   ||z   |	d<   || d   z  d|z
  ||z   z  z   |d<   ||d   |z
  z  d|z
  |z  z   |d<   t        d|      D ]H  }|| |   z  d|z
  ||dz
     ||dz
     z   z  z   ||<   |||   ||dz
     z
  z  d|z
  ||dz
     z  z   ||<   J |dd |dd z   |	dd |d   t        j                  d|dz         |d   z  z   |
dd | |	z
  }|||
||	fS )zQ
    Simple, slow, direct implementation of double exp smoothing for testing
    r   r    N)r0   r(   zerosr-   arange)xalphabetal0b0	nforecastnlvalsbxhatfterrs                r5   _simple_dbl_exp_smootherrI   u   s    	

AHHQKE
A88A;D
AE!HAaD2gDGqt|q5yR"W55E!H58b=!QXO3AaD1a[ H1Q4<1u9q1u!a%1H"IIauQx%A,./1t8qQx2GG!H
 Qr{QqW$DH9ryyIM2QrU::AaD
d(C!QT!!r7   c                       e Zd Zed        Zd Zd Zej                  j                  dd      d        Z
d Zd	 Zej                  j                  d
        Zd Zd Zd Zd Zy)TestHoltWintersc                    g d}g d}t        j                  ||      }t        j                  |j                  t        j                  |j                              |_        || _        g d}g d}t        j                  ||      }t        j                  |j                  t        j                  |j                              |_        || _        g d}g d}t        j                  ||      }t        j                  |j                  t        j                  |j                              |_        || _        t        | _        g d| _	        y )	N)4	({@g'֩g|@gz|@g2nzz@g[W|@g8h{@g4 Rz@gK/{#dR~@gFEŠ@g#WUv@gF&@g2U`~@)1996-12-31 00:00:001997-12-31 00:00:001998-12-31 00:00:001999-12-31 00:00:002000-12-31 00:00:002001-12-31 00:00:002002-12-31 00:00:002003-12-31 00:00:00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=U1@#J{/5@g477@g=,Ԛ:@g~jt:@ga<@g9>@gjt>@g	/>@g}8g?@gzI@@g`@@g*ÂC@g^vD@g.[D@)1990-12-31 00:00:001991-12-31 00:00:001992-12-31 00:00:001993-12-31 00:00:001994-12-31 00:00:001995-12-31 00:00:00rN   rO   rP   rQ   rR   rS   rT   rU   rV   )g	pz~p@gʩap@gLQԙJp@gj;p@gn@Xq@gG?Xq@gX$r@gB]PGr@gʅJr@g%Ts@g;5Ls@gu7Ot@g;$.u@g!3u@gL0t@g9s@g($Zs@gX֞t@gt@giƢ)u@gv@g"u@g/z@gDL$z@gkz@guy@g$)&y@g}8'x@gy@g@Sy@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:00rX   rY   rZ   r[   r\   r]   rN   rO   rP   rQ   rR   )	g^>g{%j C<g@>g&HI@gV{6?gҏB?g*|	W?gfv?g?)
r.   r1   DatetimeIndexr   
infer_freqoildata_oil
air_ausairlivestock2_livestockauststart_params)clsdatar   r`   ra   rb   s         r5   setup_classzTestHoltWinters.setup_class   s   

 iie,,,BMM+2C2C$D
 &
"
" YYtU+
++2==1A1A#B

 $ 
B 
B  "yyu5%'%5%5 &&399:&
" $8 

r7   c                 P   t        | j                  dddd      j                  | j                        }t        | j                  dddd      j                  | j                        }t	        |j                  dd      g d	d
       t	        |j                  d      g d	d
       y )N   r   r   	estimatedseasonal_periodstrendseasonalinitialization_methodrd   z2011-03-01 00:00:00z2011-12-01 00:00:00g_vN@g9vB@gq{G@gڊeI@   )end)r
   rc   fitrd   r   predict)selffit1fit2s      r5   test_predictzTestHoltWinters.test_predict:  s    #II"-
 #4,,#
- 	 $II"-
 #4,,#
- 	 	LL.0EF0	

 	LL2L30	
r7   c                     t        | j                  j                  dddd      j                  | j                        }t        |j                  d      g dd       y )	Nri   r   r   rj   rk   rp   rq   rr   )r
   rc   valuesrt   rd   r   forecastrv   rw   s     r5   test_ndarrayzTestHoltWinters.test_ndarray[  sU    #II"-
 #4,,#
- 	 	DMM!,.RTUVr7   zOptimizer does not convergeF)reasonstrictc                     t        | j                  ddd      j                  dd      }t        |j	                  d      g dd	       y )
Nri   r   )rl   rm   rn   bhT)method	use_brutesteps)g9#zN@g/lB@gaG@gHI@rr   r
   rc   rt   r   r|   r}   s     r5   test_forecastzTestHoltWinters.test_forecastf  sL    #II	

 #TT#
* 	 	MMM"$H!	
r7   c                 6   t        | j                  d      j                  dd      }t        | j                  d      j                  dd      }t        | j                  d      j                         }t        |j	                  d      d	gd
       t        |j
                  g dd
       t        |j	                  d      dgd
       t        |j	                  d      dgd
       t        |j                  d   dd
       t        |j                  d   dd       y )Nlegacy-heuristicro   r!   F	optimized333333?rj   r    gbL~@ri   )rM   gO~|@g>V|@gAV{@g=0{@g{@g9D{@g2\=$|@gV|@gsY}@g@{`4'~@gsL~@gj=f]@gBX@smoothing_levelgc??initial_levelg{@rr   )r   r`   rt   r   r|   levelparamsrv   rw   rx   fit3s       r5   test_simple_exp_smoothingz)TestHoltWinters.test_simple_exp_smoothingr  s    !4F

#cU#
# 	 "4F

#cU#
# 	 "K

#% 	 	DMM!,zlA>JJ !	
$ 	DMM!,zlA>DMM!,zlA>DKK(9:HaHDKK8*aHr7   c                    t        | j                  d      j                  ddd      }t        | j                  dd      j                  ddd      }t        | j                  dd	
      j                  dd      }t        |j	                  d      g dd       t        |j
                  g dd       t        |j                  g dd       t        |j	                  d      g dd       t        |j	                  d      g dd       y )Nr   r   皙?r!   F)r   smoothing_trendr   T)exponentialro   rj   damped_trendro   r   r      )gzGE@gQF@gףp=
G@g(\H@ǧI@   )gH@gTHt@g#nЬ
@g)r)	@g涷:@g(j@g{{@gi}Z?gi@[?gx?g3`|?g3&A?gu++l?g @g`Nb?ri   )rW   goDI6@gm|9@ghTc;@g~I>@gRB>@gKH{ʔ?@g]S L@@gA@@gh4?"@@gk@@g6@@gG3ywcA@gD@gYOE@gSWE@)gLF@gQG@gQI@gzGJ@g33333L@)glE@gHzE@gGzTF@gGzF@gHzG@)r   ra   rt   r   r|   rm   fittedfcastr   s       r5   	test_holtzTestHoltWinters.test_holt  s   DOO;MNRR S 
 OO"4
 #c3%#
H	 	
 OO"-
 #c3#
7	 	
 	DMM!,.QSTUJJ" '	
* 	$ )	
, 	DMM!,.QSTUDMM!,.QSTUr7   c                    t        | j                  d      j                         }t        | j                  dd      }|j                  dd      }t        | j                  ddd      }|j                         }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        |j                         j                         t              sJ 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        |j                         j                         t              sJ 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        |j                         j                         t              sJ y )Nrj   r   Tr   \(\?least_squares)damping_trendr   )r   r   ro   r         ?r   r   r   r   g(\p@r    initial_trendgYi@        g(\p@g(\@g(\@g
ףp=
?g33333/p@gp=
ף?g     ·@r   )r   rb   rt   r   r   r   r(   nansse
isinstancesummaryas_textstr)rv   rw   mod4fit4mod5fit5s         r5   test_holt_damp_fitz"TestHoltWinters.test_holt_damp_fit  sU    "%%[

#% 	 %%"-

 xxd?xC%%"-	
 xxzDKK(9:D!DDKK(9:BFFAFDKK8"&&!DDKK8&!DDKK8"&&!DDHHgq1$,,.002C888DKK(9:D!DDKK(9:D!DDKK8$BDKK8&!DDKK8$BDHHgq1$,,.002C888DKK(9:D!DDKK(9:D!DDKK8$BDKK8&!DDKK8$BDHHgq1$,,.002C888r7   c                    t        | j                  dd      }dddddd	}|j                  |      5  |j                  d
      }d d d        |j	                         D ]  }t        j                  |   ||            |j                  |      5  |j                  d      }d d d        t        j                  j                         t        |j                  d   |d          |j                         D ci c]  \  }}d|vs|| }}}|j                  |      5  |j                  d      }	d d d        t        j                  	j                  j                  d   |j                  j                  d         rJ t        |j                  |j                  z  dd       g d}
t        t        j                  |j                  d   |j                  f   |
       g d}
t        t        j                  |j                  d   |j                  f   |
d       g d}
t        |j                   |
d       g d}
t        |j#                  d      |
d       y # 1 sw Y   xY w# 1 sw Y   xY wc c}}w # 1 sw Y   IxY w)NTrj   r   gl9+?gG:?r   g<΍o@g"&R@)r   r   r   r   r   Fr   r   r   r   gXnh@MbP?atol) gOύo@g!0|p@gkp@g-2Pp@gpnp@g
MGUVq@g05q@g%v$r@gjOIr@gd?r@gM&fcSs@gs@g۰t@g{U,u@gu%5u@g	hB4t@g yKs@gg#Us@gR}t@g7t@g|a&#u@gv@gnau@gW$y@ge:z@gEz@gZy@gWJ]	y@gxw? x@gAy@gV'dy@g-?y@r   ) gկR@g%l@gHGr|@gI0n@gRv@g.[Pn@g"t@gN1@gaq|@gis@g&צ@gLh@g4x`(@gȌW<@gg\Lq@g$"aDc@g@gmȈ@gvi~2.@gDkA@g1P?m@gM@g)H>ı@g<P]@g?đ@gv*"@gbt<7V@gq쳒@g.\@gs@g\' @g&A@)gNe5p@gݽ+p@g+R-q@gw3)Yp@g]%{[q@gB'q@gq]r@gHr@gC&0r@gXEz&s@g'ѫs@gZ1x:t@guhՅt@gHu@gzru@gVt@g1s@g1V;s@g`t@gZBt@gN_u@gAHrJv@g|Dv@g!8Bz@gPUz@g7^z@g7Wz@gYEy@g(xx@g;Sy@gKry@)
gmz@gBuR{Uz@gLz@g'؅z@gA9z@g+O4-{@g2tGw`{@gFXi{@gGP{@g(/{@
   -C6?)r   rb   
fix_paramsrt   keysr   r   r   itemsr(   allcloserm   ilocnobsr_r   fittedvaluesr|   )rv   modr   rt   keyopt_fitkv
alt_paramsalt_fitdesireds              r5   test_holt_damp_rz TestHoltWinters.test_holt_damp_r  s<    %%"-
  *)!)'
 ^^F# 	+''E'*C	+ ;;= 	:CCJJsOVC[9	: ^^F# 	.ggg-G	.-79PQ'-||~Jtq!9IadJ
J^^J' 	.ggg-G	.;;w}}11!4gmm6H6H6KLLL 	#((*,=DI!
D 	cjj9399DEwO!
F 	EE#**_-syy897	

 
B 	(('=
 	R('=s	+ 	+	. 	. K	. 	.s/   II&9I3I3I9I#&I09Jc                     t        | j                  ddddd      }|j                         }t        |j	                  d      g dd       y )	Nri   additiverj   Trl   rm   rn   ro   
use_boxcox   )g{GM@gq=
ףPC@g=
ףpG@gRI@gHzgO@g     D@gHzI@g)\HK@r   r   )rv   r   rw   s      r5   test_hw_seasonalz TestHoltWinters.test_hw_seasonal  sI    "II"-
 wwyMM!C	
r7   c                 :   t        | j                  ddddd      }|j                         }t        |j	                  d      g dd	       t        | j                  ddddd
      j                          t        | j                  ddddd
      j                          y )Nri   r   r   rj   Tr   r   )gQN@g(\B@g\(G@gp=
J@gQEP@gQC@g\(H@gQeK@r   r   multiplicativer   )rv   mod2rx   s      r5   test_hw_seasonal_add_mulz(TestHoltWinters.test_hw_seasonal_add_mul  s    #II"-
 xxzMM!D	

 	II"-	
 #%II"%"-	
 #%r7   c                    t        | j                  dddd      j                         }t        |j	                  d      g dd       t        | j                  dd	dd      j                         }t        |j	                  d      g d
d       y )Nri   r   rj   T)rl   rn   ro   r   r   )x=\M@*8 "A@LF@l^Y-G@r   r   r   r   r   r   ){zM@5A@6 F@G@r   r   r   r   r   )rv   r   r   s      r5   test_hw_seasonal_buggyz&TestHoltWinters.test_hw_seasonal_buggy  s    #II"-
 #% 	 	MM!	 	
 $II"-
 #% 	 	MM!	 	
r7   N)__name__
__module____qualname__classmethodrg   ry   r~   pytestmarkxfailr   r   r   smoker   r   r   r   r    r7   r5   rK   rK      s    g
 g
R
BW [[;EJ	
 K	
 ID;Vz [[)9 )9Vk>Z
 F*
r7   rK   trend_seasonal))r   N)Nr   )r   r   c                     | \  }}t        j                  d       }t        j                  t              5  t        |||d       d d d        y # 1 sw Y   y xY w)Nd   r   )rm   rn   rl   )r(   onesr   raises
ValueErrorr
   )r   rm   rn   r&   s       r5   test_negative_multipliativer   
  sP     %OE8	A	z	" UQehQSTU U Us   AArn   c                     t        j                  t              5  t        t        d| dd       d d d        y # 1 sw Y   y xY w)NFTr   )rm   rn   r   rl   )r   r   	TypeErrorr
   housing_data)rn   s    r5   test_dampen_no_trendr     s:    	y	! 
	

 
 
s	   8A)r   r   c                     t        j                  t        j                  d       t        j                  ddd            }t        j                  t              5  t        || d       d d d        y # 1 sw Y   y xY w)Nr   r#   r   r$   r   r    )rn   rl   )	r.   r1   r(   r   r/   r   r   r   r
   )rn   r&   s     r5   test_invalid_seasonalr      s_    
			R]]:sN	A 
z	" GQAFG G Gs   A33A<c                      t        j                  t              5  t        t	        j
                  t        t        gd            j                          d d d        y # 1 sw Y   y xY w)Nr    axis)r   r   r   r
   r.   concatr   rt   r   r7   r5   test_2d_datar   )  sH    	z	" TRYYl'C!LMQQST T Ts   9AA%c                  <   t         j                         } t        | j                        | _        t	        j
                  d      5 }t        | ddd      }t        |      dk(  sJ dt        |d         v sJ 	 d d d        j                  d	k(  sJ y # 1 sw Y   xY w)
NT)recordr   rj   rm   rn   ro   r    r   r      )
r   r,   listr   warningscatch_warningsr
   lenr   rl   )hd2wr   s      r5   test_infer_freqr  .  s    



CSYYCI		 	 	- +"uuK
 1v{{QqT***+ 2%%%+ +s   2BBrm   r   c                 H   t        t        | |d      }|j                         }|j                  ddddii      }t        |j	                         j                         t              sJ |j                  d|j                  z  k  sJ t        |j                  t              sJ y )	Nrj   r   basinhoppingminimizer_kwargsr   L-BFGS-Br   minimize_kwargsg)\(?)
r
   r   rt   r   r   r   r   r   r   dict)rm   rn   r   resres2s        r5   test_start_paramsr  :  s     )	C '')C77+h
-CD  D ckkm++-s33388dSWWn$$$dkk4(((r7   c                  n    t        t        t        j                  d   d      } | j                  d       y )Nr   knownr   ro         ?r   )r
   r   r   rt   r   s    r5   test_no_params_to_optimizer  M  s0    
"''*%C
 GGCG r7   c                      t        t        d      } t        j                  t              5  | j                  t        j                  dg             d d d        y # 1 sw Y   y xY w)Nrj   r   r  rp   )r
   r   r   r   r   rt   r(   arrayr  s    r5   test_invalid_start_param_lengthr  V  sG    
|;
OC	z	" .RXXse_-. . .s   'AA$c                    t        t        dd      }|j                         }|j                  d      }t        |j	                         j                         t              sJ t        |j	                         j                         t              sJ d}|j                  |j                  |z   k  sJ |j                  d      }t        |j                  |j                  d       y )	Nr   rj   rm   ro   r  r   gh㈵>r   )decimal)	r
   r   rt   r   r   r   r   r   r   )reset_randomstater   r  r  tolres3s         r5   test_basin_hoppingr  \  s    
EC '')C77.7)Dckkm++-s333dlln,,.444
C88sww}$$$77.7)D$((A6r7   c                     t        t        dd      } | j                         }| j                  d      }t        j                  |j
                  |j
                  k7        sJ t        j                  d d df   |j
                  z
  }t        |j                         d       t        |j                         j                         t              sJ t        |j                         j                         t              sJ y )Nr   rj   r  T)remove_biasr   r   )r
   r   rt   r(   anyr   r   r   meanr   r   r   r   )r   r  r  err2s       r5   test_debiasedr%  k  s    
EC '')C77t7$D66#""d&7&77888QT"T%6%66D		S)ckkm++-s333dlln,,.444r7   c                     t        t        | |dd      j                         }t        |j                  d   d       t        t        | |d      j                         }t        |j                  d   d       y )Nrj   r  )rm   rn   ro   r   r   )rm   rn   r   )r
   r   rt   r   r   )rm   rn   r  s      r5   test_float_boxcoxr'  x  su     ) 
ce  CJJ|,c2
	
 
ce  CJJ|,c2r7   c           	         t        t        | |d      }|j                         }t        |j	                         j                         t              sJ |j                  }t        j                  d   }t        j                  t        j                  t                    }|rdnd}t        j                  d|z         }|d   }	|d   }
|d   }|d	   }t        j                  |      rd
n|}|d   }|d   }|	|
||||f|d d |r|d   |dd  t        j                  |      j                  t        j                         }|j#                         }t        j$                  dd
ggdz        }t&        || f   }t(        || f   }t+        ||||||d      }t-        ||||||d      } |||      } |||      }t/        ||        |||      }t/        ||       y )Nrj   r   r   r      r   r   smoothing_seasonalr   r   r   r   initial_seasonsr   rr   F)r
   r   rt   r   r   r   r   r   r0   r(   squeezeasarrayr:   isnan	ones_likeastypeint64r,   r  r   r	   PyHoltWintersArgsr   r   )rm   rn   r   r  r   r   r&   mpr=   r>   gammaphir?   r@   xip_copyboundspy_funccy_func
py_hw_args
cy_hw_argssse_cysse_pys                           r5   test_equivalence_cython_pythonr@    s    )	C '')Cckkm++-s333ZZFa D


2::l+,AAA
QA$%E#$D'(E

!C##CC		 B		 B4B+AbqE()!"	a			)BVVXFXXSzlQ&'FHe,-G5)*G"2vvq!T5IJ VVQ4GJQ
#FQ
#FFF#Q
#FFF#r7   c            	         t        t        d      } | j                         }t        |j	                         j                         t              sJ t        j                  t        j                  | j                              }|j                  d   }t        ||d|j                  d   dd      \  }}}}}t        ||j                         t        ||j                  j                  d   t        j                   d      z         t        ||j#                  d             t%        t        d	d
      } | j                         }t        j                  t        j                  | j                              }|j                  d   }|j                  d   }	t        |||	|j                  d   |j                  d   d      \  }}}}}t        ||j&                         t        ||z   |j                  |j(                  z          t        ||j                         t        ||j(                         t        ||j                  j                  d   |j(                  j                  d   t        j*                  g d      z  z          t        ||j#                  d             t        |j	                         j                         t              sJ y )Nrj   r   r   r   r   r   )r>   r?   r@   rA   r9   r   r  r   r   )r    r   rr   ri   r   )r   r   rt   r   r   r   r   r(   r,  r-  endogr   rI   r   r   r   r   r|   r
   r   rm   r  )
r   r  r<   r=   lrD   rF   _rE   r>   s
             r5   test_direct_holt_addrE    s   
\
MC
'')Cckkm++-s333


2::cii()AJJ()E/	5sszz/:saAq!Q Asyy!Asyy~~b)BGGAJ67As||A'
EC '')C


2::cii()AJJ()E::'(D/	::o&::o&Aq!Q D#**+AE399syy01Asyy!Asyy!	399>>"		r 2RXXo5N NN As||A'ckkm++-s333r7   c                 D   t         j                  j                  d      }d|j                  d      z  }t        j                  |d d df         }||d d df   z   }|j                  t              }t        |dd      j                         }|j                  d	   d
k7  sJ y )Ni90  r   )  r   r   r    r   rj   r  r   r   )
r(   r)   r*   r+   cumsumr0  intr
   rt   r   )r  r2   r3   y_starr&   r  s         r5   test_integer_arrayrK    s    			u	%B
R	**AYYqAwF1a4A	A
q[
Q
U
U
WC::'(C///r7   c                     t        j                  d      } t        | ddd      }|j                  ddd	      }|j	                  d
      }t        |t         j                  dt        j                  d      f   d       |j                  ddd
	      }|j	                  d
      }t        |t         j                  dt        j                  d      f   d       t        ||d       y )Nr   r   Trj   rm   r   ro   r    r   g#B;)r   r   r   r   )start	   g|=r   )r(   r;   r
   rt   ru   r   r   )rB  r   res1pred1r  pred2s         r5   test_damping_trend_zerorS    s    IIbME
)	C 771c7ODLLqL!EE255biil!23%@771c7KDLLqL!EE255biil!23%@E5u-r7   c                     g d} t        j                  dt        |             }t        j                  | |      }g d}t        j                  dt        |            }t        j                  ||      }t	        | d      j                         }t	        |d      j                         }t	        |d      j                         }t	        |d      j                         }	t        |j                         dgd	       t        |j                  d
d      g dd	       t        |j                         dgd	       t        |j                  dd      g dd	       t        |j                         dgd	       t        |j                  d
d      g dd	       t        |	j                         dgd	       t        |	j                  dd      g dd	       y )N)r         (   2   r#   )rN  r%   )r   ri   r          r   )rm   r   <   r    r      )rN  rs   )r[  F   P   z2000-1-6z2000-1-8@   )r_        )r.   r/   r   r1   r
   rt   r   ru   )
array_input_addseries_index_addseries_input_addarray_input_mulseries_index_mulseries_input_mulrw   rx   r   r   s
             r5   test_different_inputsrh    sj   *O}}:s??STyy2BC'O}}:s??STyy2BCu=AACD 0>BBDDu=AACD 0>BBDDa01!4lAFa0::FVWXa01!4naHa0::6r7   c                  f    g d} t        j                  ddd      }t        j                  | |      S )N)DgKq>@gt&3@g(D!TQ9@g֋h;@gp	@@gQ|7@g.4y<@gp=
׏A@g,	PSkB@gj9@g0>@gE_A<@gRB@g^7@g9ѮBO=@g!A	3?@gfNĖA@g v3@g5^I=@gi㈵DA@g&SD@g+p:@gduG<@gPkwA@g5SE@gYO08@gekU@@gDB@gIKF@gY=@gcz,B@gm2D@gl	gH@gQIF?@gqB@gиp $kC@g6<RI@gz6?@goeD@gʡEfE@g\K@g\r)@@gM֨(E@gF@gKM@g"-kA@g@ٔ+kF@gQ|G@gJ5oN@gvӂ/C@g |G@g(]I@gaۢN@gnnLOXC@g_5UJ@gC5v*K@gE|'fP@gMg'oD@göEI@gI)L@g5{PP@gՇE@gol`aK@gM@g-sPR@g*G@gC4N@g3dP@z
1999-03-01
2015-12-013MSr   )r.   r/   r1   )rf   r   s     r5   austouristsrl    s0    EDL MM,5AE99T5!!r7   c                      g dg dg dg dg dg dg dd} g d	g d
g dg dg dg dg dg dg dg dg dg dd}| |dS )a  
    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]))
    )guS@gS\U]YJ@g('UHuP@g҇Q@)g~ƅ!i@g%Ca@grto@glg@)gMۿj@gI)_@gJvlp@g@)gvT5Ak@guYLl>`@gq@Ȱq@g{@)gOIAO@gyuN@gfc]ܒO@g48EGP@)g{e@g3dV@g-`@g'm@)gGZ*oGd@gx&1V@g"~`@g tm@AAAMAAMAMMMMAANMANMMN)gjMFS@g"I@gxP@gkCQ@)gui'j@g#bJ$b@g~p@geN@)g.!ES@g+j0I@g@H0P@gVCvQ@)g'i@gy-e@gqs@g8ψ@)gq=
ףj@g_LZ@gzsj@gqq~@)gsk@gVyc@gQ3y@gc('U@)gQj@g\mŝa@gc]^s@geX@)gvöEO@g89@O@ghUP@gEBP@)g됛e@g(
<V@g	m9`@g=Ul@)g|гY<e@gUMuUX@ga@g=o@)gq $DN@gS"^M@glV}N@gpqN@)g/$`d@gCR%\@g	e@g됛/u@ro  rp  ANAMNArq  rr  MNMrs  rt  ru  ANNMNNTFr   dampedundampeds     r5   simulate_expected_results_rr  i  sZ    : 8;;;7::F 8;7;;<;7::7;H **r7   c                     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                  dt         j                  t         j                  t         j                  t         j                  t         j                  d
dt         j                  t         j                  t         j                  dt         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@gxx|}"gV'gptׅ*@)
r=   r>   r5  r6  rC  rD   s1s2s3s4g`M?gjj,?g ?g;ȍS?gse&M@g{(e#?g^Ǚ@gZEI@gQ΁f"g%>.@gaCu?g&{}Fl?g/(ޥ?g(\?gdO@g4P-?g??g<ub?g'p?g{?g6۹?g1N8?g$7?g͖n?gO@g*?g7d?gy4?g$ޮ?gtI@?gt ?g}	?g0([?g3ZFUN@g^!_?gll$?gđ;?g^_(\?gz7ظN@g,kxY?g7\ʸ?gOMȸ?g-V4?gݳN@gp[s(?rn  gCaj?gDtA&?g۵º?g.5GO@gZ<?giG@g=Bg	C)gB;i(@g.i֥?g9Nl7?g<$?g"4_O@g l?gn#-@g+U6ޫgtEd'ghOe*@gynY?g3Y?gL@gxa @gE<i@g4g1@ge?g26+?g_uM@grm@g,En@gy{wg*1@g$3?g[7?g'5T:?gUW?4O@g*.m?g2K@?gYt?gDpvA?g-RZ?g躟ey?g+љZ?gg9?gƻmO@g9K?gW_t֕?gl*?gst?gYB?gqE.|?gD%?g}גO@gvu?gO^]@?g2a?g5??gΪ*?g6'?g QN@gQJ?g+-ʿք?g:&ѕք?g(N@gWCs]?gJ]?g檬6?g ?\N@gń2?gT_$?g]bM@gB]?gXɜ}M@rv  r|  )r(   r   r}  s     r5   simulate_fit_state_rr    s   D &&&$ ""%#"
 &&&$!!""#"
 ''($!""##"
 '()$!!"##"
 '&VV$!"&&&&&&&&
 (&VV$!"&&&&&&&&
 '&VV$!!&&&&&&&&
SUFp &(&66!""##"
 '(&66!""%#"
 &FF&66 "!#!
 'FF&66!""#"
 '()66!""##"
 $&)66!!"##"
 'FF)66!!##"
 ('VV66!"&&&&&&&&
 (&VV66!"&&&&&&&&
 ((VV66!!&&&&&&&&
 'FFVV66!&&&&&&&&
 'FFVV66!&&&&&&&&
KQHd **r7   r~  r|  errorc                    dddd}||   ||    z   ||   z   }|||   v r$t        j                  ||   |         }	||   |   }
nyt        |d| ||      j                  |
d   |
d	   |
d
   |
d   d      }|
d   |j                  d<   |
d   |j
                  d<   |
d   |j                  d<   |
d   |j                  d<   |
d   |j                  d<   |
d   |j                  d<   t        j                  t        j                  |j                              ryt        j                  g dg      j                  }|j                  dd||      }t        |	|j                  d       y)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).
    AMNr   Nri   )rl   rm   rn   r   r=   r>   r5  r6  F)r   r   r*  r   r   rC  r9   rD   r  r  r  r  )g@9?gY,?gOQ?g[iY@r    )repetitionsr  random_errorsr   )r(   r-  r
   rt   _level_trend_seasonr"  r.  r   Tsimulater   r{   )rm   rn   r~  r  rl  r  r  
short_name
model_nameexpectedstatert   innovsims                 r5   test_simulate_expected_rr    s{   ( S4JE"Z%66H9MMJ088::9&A*MN$V,Z8  
cgf >El 
   3ZCJJrN3ZCJJrNDkCKKODkCKKODkCKKODkCKKO 
vvbhhs''()JJGHIKKE
,,qauE,
JC#**a0r7   c                    t        | ddddd      j                         }t        |j                  ddd      j                  |j                  ddd      j                         t        |j                  dd	d      j                  |j                  dd
d      j                         t        |j                  ddd      j                  |j                  ddd      j                         |j                  ddt
        j                  j                         |j                  ddt
        j                  j                                |j                  ddt        j                  j                  dd             |j                  ddd       |j                  ddd      j                  }|j                  ddt        j                  j                  d            j                  }t        j                  ||k(        sJ y)zS
    check whether all keywords are accepted and work without throwing errors.
    ri   r   Trj   rl   rm   rn   r   ro   r   )anchorrandom_staterN  r9   rj  rs   z
2016-03-01r   )r  r  	bootstrapr  r  N)r
   rt   r   r  r{   scipystatsnormr(   r)   randnr*   all)rl  rt   r  r  s       r5   test_simulate_keywordsr    s    ) 
ce  Qqq188QwQ7>> Qr299Q|!<CC Qu15<<Q|!<CC LL%++2B2BLCLL%++2B2B2DLELL"))//!R2HLILL+L> ,,qbr,
:
A
AC<<	r		(=(=b(A  f 	 66#+r7   c           	      D   t        | dddddd      j                         }|j                  d      j                  }|j	                  ddd	
      j                  }t        j                  |d      }t        j                  t        j                  ||z
        dk        sJ y)zE
    check if simulation results with boxcox fits are reasonable
    ri   r   r   Frj   T)rl   rm   rn   r   ro   r   r   r   r  r    r   r   N)	r
   rt   r|   r{   r  r(   r#  r  abs)rl  rt   r  r  r#  s        r5   test_simulate_boxcoxr  1  s     ) 
ce  ||A%%H
,,qbq,
9
@
@C773QD66"&&)A-...r7   ix)r   r   rG    c                     t        j                  g dt        | | dz               }t        |dd      j	                         }|j                  d      j                  }|d   | dz   k(  sJ |d	   | d
z   k(  sJ y )N)
iaN i>^ iL iI i1 iI i i i i r   r   r   F)rm   r   r   r   r9      )r.   r1   r-   r
   rt   r|   r   )r  ts_1modelr   s       r5   test_forecast_indexr  F  s~     99NBR D !UGKKMENNN$**E8rBw9Rr7   c                      t        j                  t        d      5  t        t	        j
                  d      d       d d d        y # 1 sw Y   y xY w)NzCan only dampen thematchr   T)r   r   r   r   r
   r(   r   r   r7   r5   test_error_dampenr  S  s8    	z)>	? >RWWS\=> > >s   !AAc                     t         j                  j                  d      } t        j                  t
        d      5  t        | dd       d d d        t        | dz  d	      }t        |t              sJ t        | dz  dd
      }t        j                  t        d      5  |j                  d	       d d d        y # 1 sw Y   sxY w# 1 sw Y   y xY w)Nr   zuse_boxcox must be Truer  ar  r   ro   r   Tr   r   zuse_boxcox was setF)
r(   r)   r+   r   r   r   r
   r   r   rt   )r&   r   s     r5   test_error_boxcoxr  X  s    
		!!#&A	y(A	B OQ3gNO q!t
5Cc/000
	15GC 
z)=	> "5!" "O O" "s   B< C<CCc           	         t        j                  t        d      5  t        | d       d d d        t        j                  t        d      5  t        | ddd       d d d        t        j                  t        d      5  t        | ddg d	
       d d d        t        j                  t              5  t        | d       d d d        t        j                  t              5  t        | d       d d d        t        j                  t              5  t        | g d       d d d        t        j                  t              5  t        | ddd       d d d        t        j                  t              5  t        | ddddd       d d d        t        | dd      }t        j                  t              5  |j	                  d       d d d        t        j                  t              5  |j	                  dd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y   KxY w# 1 sw Y   'xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz+initialization is 'known' but initial_levelr  r  r   zinitial_trend set but modelr   )ro   r   r   zinitial_seasonal set but model)r!   333333?皙?r  )ro   r   initial_seasonal)r   )r   )r   r!   g?ri   )r  r   )rm   ro   r          @)rm   rn   ro   r   r   ro   r   Tr   )use_basinhoppingr   r   r   r   r
   rt   r6   r   s     r5   test_error_initializationr  g  s   	z)V	W AS@A	z)F	G 
")		

 
z)I	J 
")1		

 
z	" 5S45	z	" 5S45	z	" HS3FGH	z	" 
")		

 
z	" 
")	

 s'QT
UC	z	" #c"#	z	" ?o>? ?SA A
 

 
5 55 5H H
 

 
# #? ?sw   HH H3H,"H9II3I 4I,(I8HHH),H69III I),I58Jr   )r   r  r  TNCSLSQPPowellztrust-constrc                 @   t        j                  ddg      }i }t        |d      }|j                  | ||      }t	        |j
                  d   dd	       t	        |j
                  d
   dd	       t        |j                         j                         t              sJ y )Ngp=
ף?g      &@rj   r   )r   rd   r	  r   gʳ?r   rtolr   gnt&@)
r(   r  r
   rt   r   r   r   r   r   r   )r   r6   svr	  r   r  s         r5   test_alternative_minimizersr    s     
4-	 BO
s+
FC
''b/'
RCCJJ01:DICJJ/4Hckkm++-s333r7   c                 |   t        | d      }ddi}t        j                  t              5  |j	                  |       d d d        t        j                  t              5  |j	                  d|       d d d        dddii}t        j                  t              5  |j	                  d	|       d d d        dd
dii}|j	                  d	|      }t        |j                  t              sJ t        |j                         j                         t              sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nrj   r   argsanything)r	  r   r  r  r  r   r  )r
   r   r   r   rt   r   r   r
  r   r   r   )r6   r   kwargsr  s       r5   test_minimizer_kwargs_errorr    s   
s+
FCj!F	z	" ('(	z	" @?@ 6:"67F	z	" ?~v>? 8W"56F
'''
@Ccjj$'''ckkm++-s333( (@ @? ?s#   DD&D2D#&D/2D;r   )r   r  ?)r  r   r!   )r  r   r   c           	         t        j                  |       } t        j                  dgdz        }t        j                  ddggdz        }t        t        | ||      t	        | |j                  t         j                        |             y NTrr   r   r   )r(   r  r   r   r   r0  r1  r   selr9  s      r5   test_to_restricted_equivr    sj    XXfF
((D6A:
CXXSzlQ&'Ffc6*FCJJrxx$8&Ar7   )r   r  皙?)r  r!   r   )r  r  r  c           
          t        j                  |       } t        j                  dgdz        }t        j                  ddggdz        }t        | t        t	        | ||      ||             y r  )r(   r  r   r   r   r  s      r5   test_restricted_round_tipr    s]    XXfF
((D6A:
CXXSzlQ&'Ffc6:CHr7   c                 ~   ddi}t        j                  t              5  t        | |       d d d        dddgi}t        j                  t              5  t        | |       d d d        ddi}t        j                  t
              5  t        | |       d d d        ddi}t        j                  t
              5  t        | |       d d d        dd	i}t        j                  t
              5  t        | |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w# 1 sw Y   y xY w)
Nbad_key)r   r   )r9  r   r   r   )r   r   r  )r   r   )g      r  )r   r   KeyErrorr
   r   r   r6   r9  s     r5   test_bad_boundsr    s   $F	x	  1S01#s,F	y	! 1S011F	z	" 1S01,F	z	" 1S01-F	z	" 1S01 11 11 11 11 11 1s;   DDD9D',D3DDD$'D03D<c                     ddi}t        | |d      j                  d      }t        | d      j                  d      }t        |j                  d   |j                  d   d	       y )
Nr   )r  r   rj   )r9  ro   r   r  r   r   r  )r
   rt   r   r   )r6   r9  r  r  s       r5   test_valid_boundsr    su    ,F
F+	cc!   ;GKK L D 

$%%&r7   c                 b   t        | d      }|j                  ddi      5  |j                         }d d d        j                  d   dk(  sJ t	        |j                         j                         t              sJ t        | ddd      }|j                  dd	i      5  |j                         }d d d        |j                  d   d	k(  sJ t	        |j                         j                         t              sJ t        | ddd
      }|j                  ddd      5  |j                         }d d d        |j                  d   dk(  sJ |j                  d   dk(  sJ t	        |j                         j                         t              sJ y # 1 sw Y   \xY w# 1 sw Y   xY w# 1 sw Y   yxY w)Nrj   r   r   r  r   TrM  r   r   r   r  r!   )r*  r   r*  )r
   r   rt   r   r   r   r   r   r6   r   r  s      r5   test_fixed_basicr    s   
s+
FC	*C0	1 ggi::'(C///ckkm++-s333
5t;C 
$/	0 ggi::o&$...ckkm++-s333
55C 
ssK	L ggi::*+s222::'(C///ckkm++-s333)   s#   FFF%FF"%F.c                    t        | d      }t        j                  t              5  |j	                  ddi      5  	 d d d        d d d        t        j                  t
              5  |j	                  ddi      5  	 d d d        d d d        t        | dd      }t        j                  t
              5  |j	                  dd	d
      5  	 d d d        d d d        t        | ddd      }t        j                  t
              5  |j	                  ddd      5  	 d d d        d d d        ddd}t        | dd|d      }t        j                  t
        d      5  |j	                  ddd      5  |j                          d d d        d d d        y # 1 sw Y   UxY w# 1 sw Y   ZxY w# 1 sw Y   0xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   vxY w# 1 sw Y   y xY w)Nrj   r   r   r  r   g333333ӿr   r  r  r   r   r   r   r*  )r  r   )ffffff?r  )rm   rn   r9  ro   z!After adjusting for user-providedr  r   )r   r*  )r
   r   r   r  r   r   rt   )r6   r   r9  s      r5   test_fixed_errorsr    s   
s+
FC	x	  ^^.45 		 
z	" ^^.56 		 s%{
SC	z	" ^^LM 		 55C 
z	" ^^3OP 		 ",:NF
)C 
z)L	M ^^3OP 	GGI	 1	 	 	 	 
	 	 	 	 	 	 s   FFF&F7:F*<F73GG
GG(GG(H .G4?H F	FF'*F4	/F77GG		GGG%	!G((G14G=	9H  H	r   c                 v   t        | ||d      }|j                  d      }|j                  j                  sJ |j	                  ddi      5  |j                  d      }d d d        |j                  j                  sJ t        |j                         j                         t              sJ y # 1 sw Y   PxY w)Nrj   r   T)r   r   r  )	r
   rt   mle_retvalssuccessr   r   r   r   r   )r6   rm   rn   r   r  s        r5   
test_bruter  +  s     58;C ''D'
!C??""""	*C0	1 &ggg%&??""""ckkm++-s333& &s   B//B8c                    t        j                  t              5  t        | dd       d d d        t        j                  t              5  t        | ddd       d d d        t        j                  t              5  t        | dt	        j
                  d      d	       d d d        y # 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   y xY w)
Nr   	heuristicr  r   r   )rm   r   ro   r   rj   )rn   r  ro   r  )r6   s    r5   test_fix_set_parametersr  :  s    	z	" XS;WX	z	" 
"4		

 
z	" 
WWR["-		

 
X X
 

 
s#   B'
B3;#B?'B03B<?Cc                     t        | d      }t        j                  t        d      5  |j	                  ddi      5  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nrj   r   zCannot fix a parameterr  r   g      ?r!   r  )r
   r   r   r   r   rt   r  s     r5   test_fix_unfixabler  M  sl    
s+
FC	z)A	B )^^.56 	)GGCG(	)) )	) 	)) )s"   A-A!A-!A*	&A--A6c                 L   ddd}t        j                  t        d      5  t        | d|d      j	                          d d d        d	d
d}t        j                  t        d      5  t        | d|d      j	                          d d d        y # 1 sw Y   PxY w# 1 sw Y   y xY w)N)r  r!   )r  r  r   zThe bounds for smoothing_trendr  r   rj   )rm   r9  ro   )r  r  )r  r   r  z!The bounds for smoothing_seasonal)rn   r9  ro   r  r  s     r5   test_infeasible_boundsr  T  s    !+
KF	z)I	J uV;	

#% ",:NF	z)L	M "-		

 #%  
 s   B'BBB#)rj   r  r   c                     t        | |||      }|j                         }|j                  j                  sJ t	        |j                         j                         t              sJ y )Nr   )r
   rt   r  r  r   r   r   r   )r6   r   rm   rn   r   r  s         r5   test_initialization_methodsr  d  sV     586C '')C??""""ckkm++-s333r7   c                     t        | d      j                         }|j                  dkD  sJ |j                  j                  d   | j                  d   k(  sJ t        |j                  |j                  dd         y )Nrj   r   r   r9   )r
   rt   r   residr0   r   fcastvaluesr   )r6   r  s     r5   test_attributesr  p  sc    
s+
F
J
J
LC5519999??11---COOS__RS%9:r7   c                    t        | dz  dd      }t        j                  t        d      5  |j	                  d       d d d        |j	                         }t        |j                               }t        j                  d|      sJ t        |j                         j                         t
              sJ y # 1 sw Y   yxY w)	Nr   Tr  r  zuse_boxcox was set at modelr  r  zBox-Cox:[\s]*True)r
   r   r   r   rt   r   r   refindallr   r   )r6   r   r  summs       r5   test_summary_boxcoxr   w  s    
Q4{C 
z)F	G !4 !
'')Cs{{}D::*D111ckkm++-s333! !s   B88Cc                    t        t        j                  |       d      }|j                         }t	        |j                         j                         t              sJ t        j                  t        d      5  |j                  dd       d d d        t        j                  t        d      5  |j                  dd	t        j                  d
             d d d        |j                  dd	d       t        j                  t        d      5  |j                  dd	d       d d d        t        j                  t        d      5  |j                  dd	dd       d d d        t        j                  t        d      5  |j                  dd	d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   y xY w)Nr  r   zerror must ber  r   unknown)r  z	If randomr   )rU  rU  )r  r  r   )r  r  zCannot anchorr  zArgument random_state	bad_value)r  r  r  zArgument random_errors
bad_values)r
   r(   r-  rt   r   r   r   r   r   r   r   r  emptyr  s      r5   test_simulater    sx   
rzz#k
RC
'')Cckkm++-s333	z	9 *Ry)*	z	5 MRz(9KLMLL:cL2	z	9 8Rz$78	z)@	A QRz#KPQ	z)A	B GRzFG G* *M M8 8Q QG Gs<   :F1(F,F8GGF),F58GGG	index_typ)r/   periodr-   	irregularc           
         | j                   d   }i }d }d }|dk(  rt        j                  d|dz   d      }n|dk(  r t        j                  d|dz   t              }n|dk(  rt        j
                  |dz         }d	|d
<   n|dk(  rt        j                  j                  d      }t        j                  t        j                  |j                  dd|dz                     }t        }d	|d
<   t        j
                  ddd      }|dd  }| j                         } d d | _        t        |      5  t!        | fdddd|j#                         }d d d        t        |      5  j%                  d      }	d d d        t'        	t        j(                        sJ t        j*                  j-                  |	j                  |       y # 1 sw Y   uxY w# 1 sw Y   \xY w)Nr   r  r#   $   r  r$   r/   r-   r   rl   r	  ri   )sizerG  i  r    )rN  stopstepir   r  r   )r0   r.   period_ranger/   r   
RangeIndexr(   r)   r*   IndexrH  randintr   r,   r   r   r
   rt   r|   r   r1   testingassert_index_equal)
r6   r  r   r  warningfcast_indexr   r2   r  fcasts
             r5   test_forecast_index_typesr    s   99Q<DFGKH
D2ICH	l	"j$))L	g	dRi(%'!"	k	!YY""1%2::a:#CDE%'!"mm$TBCDk
((*CdsCI	g	 "
"-	

 
 #% 	 
g	 !R !eRYY'''JJ!!%++{; ! !s   /G!GGGc                    t        | dz   | j                         z
  dd      }|j                         }t        |j	                         j                         t              sJ t        j                  t              5  t        |j                  |j                         d d d        t        |d      rJ t        |d      rJ t        |d      rJ y # 1 sw Y   4xY w)Nr    rj   T)ro   r   _untransformed_level_untransformed_trend_untransformed_seasonal)r
   minrt   r   r   r   r   r   r   AssertionErrorr   r   r   hasattrr  s      r5   test_boxcox_componentsr     s    
a#'');4C '')Cckkm++-s333	~	& 5		3#3#345 s2333s2333s566665 5s   :!CCr  r    r   r  r  c                    t        | ddddd      j                         }|j                  dd||      }|dk(  rd	nd|f}|j                  |k(  sJ |j                  d
d||      }|dk(  rdnd
|f}|j                  |k(  sJ y )Nri   r   Trj   r  r    r   )r  r  r  )r    r   )r   )r
   rt   r  r0   )rl  r  r  rt   r  expected_shapes         r5   test_forecast_1_simulationr#    s     ) 
ce  ,,	!=k  C )A-TA{3CN99&&&
,,
1M{  C *Q.UR4EN99&&&r7   r   rO  c                 v    t        | d | ||dd      j                         }|j                  j                  sJ y )Nri   rj   )rm   rn   rl   ro   )r
   rt   r  r  )r6   rm   rn   r   r  s        r5   (test_estimated_initialization_short_datar%    sD    
 ET
) 
ce  ??""""r7   c                    t         j                  j                  d      }t        j                  |      }d|j
                  _        t        |dddd      }|j                  dd	      }|j                  d
      }|j                  d   d
k(  sJ t        j                  dd|j                  d   z        }t         j                  j                  ||j                  d   d      }t        |      }||_        t        |j
                  t        j                        sJ |j
                  j                  J |j
                  j                   J t#        j$                  t&        d      5  t        |dddd      }d d d        |j                  dd	      }t#        j$                  t&        d      5  |j                  d
       d d d        y # 1 sw Y   SxY w# 1 sw Y   y xY w)Ni`	  )rf   dr   r   r  rk   T)r   r   if r   r   z
2020-01-01r   )r%   F)r  replacezA date index has been providedr  zNo supported)r(   r)   r+   r.   	DataFramer   r   r
   rt   r|   r0   r/   choicesortedr   r^   inferred_freqr   warnsr   )r  r&   df_yr  fittedr  r   s          r5   test_invalid_indexr0    s   
		!!(+A<<QDDJJO )E YYY6FOO&O)E;;q>V###MM,AGGAJ?EIIUAFE5MEDJdjj""2"2333::??"""::##+++	l*J	K 
$"-

 YYY6F	l.	9 &f%& &
 
& &s   )G0GGG!c                      g d} t        | dd      }|j                         }|j                   t        |j                  d   d       y )N)r   r   r   g      Y@r   r   r   r  g      4@r  r   )r
   rt   r   r   )serieseses_fits      r5   test_initial_levelr5    s;    2F	fGSW	XBVVXF
MMFMM/2D9r7   c            
         t        t        dddd      j                         } t        j                  | j
                  d         }t        j                  | j
                  d   d      }t        j                  | j
                  d	   d      }t        t        dddd
|||      j                         }t        |j
                  d   |       t        |j
                  d   |       t        |j
                  d	   |       y )Nri   r   r   rj   rk   r   r   r    r+  r  )rl   rm   rn   ro   r   r   r  )r
   rc   rt   r(   roundr   r   )rw   lvlrm   seasrx   s        r5   test_all_initial_valuesr:    s    ) 
ce 	 ((4;;/
0CHHT[[115E88DKK 12A6D%	 
ce 	 DKK0#6DKK0%8DKK 12D9r7   )r   )m__doc__statsmodels.compat.pandasr   statsmodels.compat.pytestr   osr  r   numpyr(   numpy.testingr   r   pandasr.   r   scipy.statsr  statsmodels.tools.sm_exceptionsr   statsmodels.tsa.holtwintersr   r	   r
   r   r   2statsmodels.tsa.holtwinters._exponential_smoothersr   r   &statsmodels.tsa.holtwinters._smoothersr2  r   r   pathsplitabspath__file__baserD  read_csvjoinr   asfreq	SEASONALSTRENDSrf   r   to_datetimeidxr1   r^   r_   rc   fixturer6   rI   rK   r   parametrizer   r   r   r   r  r  r  r  r  r%  r   r'  r@  rE  rK  rS  rh  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r#  r%  r0  r5  r:  r   r7   r5   <module>rU     s  
 0 2 	 	   >    8   ''--1
2ar{{GGLLy"45
 ""4( 		4	4 bnnUryy-R--cc8JKL h/  /"4x	
 x	
v DUU Y/
 0
 ^4G 5GT
	& 5'*eW-) . +)"!.7
5 &)Y/3 0 * 3$ &)Y/)$ 0 *)$X&4R0.&4 J" J"Z 2+ 2+j g+ g+T	 &)Y/=1.161 2 2 0 *61r'T/* 45	  6	 >
"+?\ 444  O_o#VW X O_o#VW X1$42@ 5$-0eT]3
4 4 1
4
&)  #QR4-0dE]34 4 1 S4;	4G" &TU"< V"<J7 B04*=>' ? 1'. 4-0dE]3!R)	# * 4 1	##&L::r7   