
    'YHh
             	       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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jD                  jG                  ejD                  jI                  e%            \  Z&Z' ejP                  ejD                  jS                  e&d
d      dd      Z*e*jW                  d      Z*dZ,dZ-g dZ.g dZ/ ej`                  e/      Z1 ejd                  e. ejf                  e1 ejh                  e1                  Z5 ejl                  d      d        Z7djdZ8 G d d      Z9ejt                  jw                  dd      d        Z<ejt                  jw                  de,      d        Z=ejt                  jw                  dd       d!        Z>d" Z?d# Z@ejt                  jw                  d$e-      ejt                  jw                  de,      d%               ZAd& ZBd' ZCd( ZDd) ZEejt                  j                  ejt                  jw                  d$e-      ejt                  jw                  de,      d*                      ZGejt                  jw                  d$e-      ejt                  jw                  de,      d+               ZHd, ZId- ZJd. ZKd/ ZLejl                  d0        ZMejl                  d1        ZNejl                  d2        ZOejt                  jw                  d$e-      ejt                  jw                  de,      ejt                  jw                  d3d4      ejt                  jw                  d5d       d6                             ZPd7 ZQd8 ZRejt                  jw                  d9g d:      d;        ZSd< ZTd= ZUd> ZVejt                  jw                  d?g d@      dA        ZWdB ZXejt                  jw                  dCg dDg dEg dFg      dG        ZYejt                  jw                  dCg dHg dIg dJg      dK        ZZdL Z[dM Z\dN Z]dO Z^ejt                  jw                  d$dPdg      ejt                  jw                  ddPdg      dQ               Z_dR Z`dS ZadT Zbejt                  jw                  d?g dU      ejt                  jw                  d$ddPg      ejt                  jw                  dddPg      dV                      ZcdW ZddX ZedY Zfejt                  jw                  dZg d[      d\        Zgd] Zhejt                  jw                  d^d_d`g      ejt                  jw                  daddbg      dc               Ziejt                  jw                  d$ddPg      ejt                  jw                  dddPg      ejt                  jw                  ddded`g      df                      Zjdg Zkdh Zldi Zmy)kz4
Author: Terence L van Zyl
Modified: Kevin Sheppard
    )	MONTH_END)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.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        k/var/www/html/planif/env/lib/python3.12/site-packages/statsmodels/tsa/holtwinters/tests/test_holtwinters.pysesr7   h   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)r1   r)   zerosr.   arange)xalphabetal0b0	nforecastnlvalsbxhatfterrs                r6   _simple_dbl_exp_smootherrJ   t   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!!r8   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:00rO   rP   rQ   rR   rS   rT   rU   rV   rW   )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:00rY   rZ   r[   r\   r]   r^   rO   rP   rQ   rR   rS   )	g^>g{%j C<g@>g&HI@gV{6?gҏB?g*|	W?gfv?g?)
r/   r2   DatetimeIndexr   
infer_freqoildata_oil
air_ausairlivestock2_livestockauststart_params)clsdatar   ra   rb   rc   s         r6   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 

r8   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re   z2011-03-01 00:00:00z2011-12-01 00:00:00g_vN@g9vB@gq{G@gڊeI@   )end)r   rd   fitre   r   predict)selffit1fit2s      r6   test_predictzTestHoltWinters.test_predict9  s    #II"-
 #4,,#
- 	 $II"-
 #4,,#
- 	 	LL.0EF0	

 	LL2L30	
r8   c                     t        | j                  j                  dddd      j                  | j                        }t        |j                  d      g dd       y )	Nrj   r   r   rk   rl   rq   rr   rs   )r   rd   valuesru   re   r   forecastrw   rx   s     r6   test_ndarrayzTestHoltWinters.test_ndarrayZ  sW    #II"-
 #4,,#
- 	 	MM!BA	
r8   zOptimizer does not convergeF)reasonstrictc                     t        | j                  ddd      j                  dd      }t        |j	                  d      g dd	       y )
Nrj   r   )rm   rn   ro   bhT)method	use_brutesteps)g9#zN@g/lB@gaG@gHI@rs   r   rd   ru   r   r}   r~   s     r6   test_forecastzTestHoltWinters.test_forecastg  sL    #II	

 #TT#
* 	 	MMM"$H!	
r8   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rp   r"   F	optimized333333?rk   r!   gbL~@rj   )rN   gO~|@g>V|@gAV{@g=0{@g{@g9D{@g2\=$|@gV|@gsY}@g@{`4'~@gsL~@gj=f]@gBX@smoothing_levelgc??initial_levelg{@rs   )r   ra   ru   r   r}   levelparamsrw   rx   ry   fit3s       r6   test_simple_exp_smoothingz)TestHoltWinters.test_simple_exp_smoothings  s    !4F

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

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

#% 	 	DMM!,zlA>JJ !	
$ 	DMM!,zlA>DMM!,zlA>DKK(9:HaHDKK8*aHr8   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)exponentialrp   rk   damped_trendrp   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?rj   )rX   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   rb   ru   r   r}   rn   fittedfcastr   s       r6   	test_holtzTestHoltWinters.test_holt  s   OO3E

#c3%#
H 	 OO"4
 #c3%#
H	 	
 OO"-
 #c3#
7	 	
 	MM!A1	
 	JJ" '	
* 	$ )	
, 	MM!A1	
 	MM!A1	
r8   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 )Nrk   r   Tr   \(\?least_squares)damping_trendr   )r   r   rp   r         ?r   r   r   r   g(\p@r!   initial_trendgYi@        g(\p@g(\@g(\@g
ףp=
?g33333/p@gp=
ף?g     ·@r   )r   rc   ru   r   r   r   r)   nansse
isinstancesummaryas_textstr)rw   rx   mod4fit4mod5fit5s         r6   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8r8   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)NTrk   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   rc   
fix_paramsru   keysr   r   r   itemsr)   allclosern   ilocnobsr_r   fittedvaluesr}   )rw   modr   ru   keyopt_fitkv
alt_paramsalt_fitdesireds              r6   test_holt_damp_rz TestHoltWinters.test_holt_damp_r  sA    %%"-
  *)!)'
 ^^F# 	+''E'*C	+ ;;= 	:CCJJsOVC[9	: ^^F# 	.ggg-G	.-NN?+VO-D	
 (.||~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('=w	+ 	+	. 	. 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 )	Nrj   additiverk   Trm   rn   ro   rp   
use_boxcox   )g{GM@gq=
ףPC@g=
ףpG@gRI@gHzgO@g     D@gHzI@g)\HK@r   r   )rw   r   rx   s      r6   test_hw_seasonalz TestHoltWinters.test_hw_seasonal  sI    "II"-
 wwyMM!C	
r8   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 )Nrj   r   r   rk   Tr   r   )gQN@g(\B@g\(G@gp=
J@gQEP@gQC@g\(H@gQeK@r   r   multiplicativer   )rw   mod2ry   s      r6   test_hw_seasonal_add_mulz(TestHoltWinters.test_hw_seasonal_add_mul  s    #II"-
 xxzMM!D	

 	II"-	
 #%II"%"-	
 #%r8   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 )Nrj   r   rk   T)rm   ro   rp   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   )rw   r   r   s      r6   test_hw_seasonal_buggyz&TestHoltWinters.test_hw_seasonal_buggy  s    #II"-
 #% 	 	MM!	 	
 $II"-
 #% 	 	MM!	 	
r8   N)__name__
__module____qualname__classmethodrh   rz   r   pytestmarkxfailr   r   r   smoker   r   r   r   r    r8   r6   rL   rL      s    g
 g
R
B

 [[;EJ	
 K	
 IDA
F [[)9 )9Vm>^
 F*
r8   rL   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   )rn   ro   rm   )r)   onesr   raises
ValueErrorr   )r   rn   ro   r'   s       r6   test_negative_multipliativer     sN     %OE8	A	z	" 
UX	

 
 
s   AAro   c                     t        j                  t              5  t        t        d| dd       d d d        y # 1 sw Y   y xY w)NFTr   )rn   ro   r   rm   )r   r   	TypeErrorr   housing_data)ro   s    r6   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!   )ro   rm   )	r/   r2   r)   r   r0   r   r   r   r   )ro   r'   s     r6   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   ru   r   r8   r6   test_2d_datar   4  sE    	z	" II|\2;	

#%  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   rk   rn   ro   rp   r!   r   r      )
r   r-   listr   warningscatch_warningsr   lenr   rm   )hd2wr   s      r6   test_infer_freqr  ;  s    



CSYYCI		 	 	- +"uuK
 1v{{QqT***+ 2%%%+ +s   2BBrn   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 )	Nrk   r   basinhoppingminimizer_kwargsr   SLSQPr   minimize_kwargsg)\(?)
r   r   ru   r   r   r   r   r   r   dict)rn   ro   r   resres2s        r6   test_start_paramsr  G  s     )	C '')C77+h-@A  D ckkm++-s33388dSWWn$$$dkk4(((r8   c                  n    t        t        t        j                  d   d      } | j                  d       y )Nr   knownr   rp         ?r   )r   r   r   ru   r   s    r6   test_no_params_to_optimizer  Z  s0    
"''*%C
 GGCG r8   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)Nrk   r   r  rq   )r   r   r   r   r   ru   r)   arrayr  s    r6   test_invalid_start_param_lengthr  c  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   rk   rn   rp   r  r   gh㈵>r   )decimal)	r   r   ru   r   r   r   r   r   r   )reset_randomstater   r  r  tolres3s         r6   test_basin_hoppingr   i  s    
EC '')C77.7)Dckkm++-s333dlln,,.444
C88sww}$$$77.7)D$((A6r8   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   rk   r  T)remove_biasr   r   )r   r   ru   r)   anyr   r   r   meanr   r   r   r   )r   r  r  err2s       r6   test_debiasedr&  x  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4r8   c                     t        t        | |dd      j                         }t        |j                  d   d       t        t        | |d      j                         }t        |j                  d   d       y )Nrk   r  )rn   ro   rp   r   r   )rn   ro   r   )r   r   ru   r   r   )rn   ro   r  s      r6   test_float_boxcoxr(    su     ) 
ce  CJJ|,c2
	
 
ce  CJJ|,c2r8   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 )Nrk   r   r   r      r   r   smoothing_seasonalr   r   r   r   initial_seasonsr   rs   F)r   r   ru   r   r   r   r   r   r1   r)   squeezeasarrayr;   isnan	ones_likeastypeint64r-   r  r	   r
   PyHoltWintersArgsr   r   )rn   ro   r   r  r   r   r'   mpr>   r?   gammaphir@   rA   xip_copyboundspy_funccy_func
py_hw_args
cy_hw_argssse_cysse_pys                           r6   test_equivalence_cython_pythonrA    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#r8   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 )Nrk   r   r   r   r   r   )r?   r@   rA   rB   r:   r   r  r   r   )r!   r   rs   rj   r   )r   r   ru   r   r   r   r   r)   r-  r.  endogr   rJ   r   r   r   r   r}   r   r   rn   r  )
r   r  r=   r>   lrE   rG   _rF   r?   s
             r6   test_direct_holt_addrF    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3r8   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   rk   r  r   r   )
r)   r*   r+   r,   cumsumr1  intr   ru   r   )r  r3   r4   y_starr'   r  s         r6   test_integer_arrayrL    s    			u	%B
R	**AYYqAwF1a4A	A
	k	ce  ::'(C///r8   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   Trk   rn   r   rp   r!   r   g#B;)r   r   r   r   )start	   g|=r   )r)   r<   r   ru   rv   r   r   )rC  r   res1pred1r  pred2s         r6   test_damping_trend_zerorT    s    IIbME
)	C 771c7ODLLqL!EE255biil!23%@771c7KDLLqL!EE255biil!23%@E5u-r8   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$   )rO  r&   )r   rj   r          r   )rn   r   <   r!   r      )rO  rt   )r\  F   P   z2000-1-6z2000-1-8@   )r`        )r/   r0   r  r2   r   ru   r   rv   )
array_input_addseries_index_addseries_input_addarray_input_mulseries_index_mulseries_input_mulrx   ry   r   r   s
             r6   test_different_inputsri    sx   *O}}#o"6 yy2BC'O}}#o"6 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::6a a01!4naHa0::6r8   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/   r0   r2   )rg   r   s     r6   austouristsrm  0  s0    EDL MM,5AE99T5!!r8   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@rp  rq  ANAMNArr  rs  MNMrt  ru  rv  ANNMNNTFr   dampedundampeds     r6   simulate_expected_results_rr  ~  sZ    : 8;;;7::F 8;7;;<;7::7;H **r8   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?   r6  r7  rD  rE   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(?ro  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@rw  r}  )r)   r   r~  s     r6   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 **r8   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   Nrj   )rm   rn   ro   r   r>   r?   r6  r7  F)r   r   r+  r   r   rD  r:   rE   r  r  r  r  )g@9?gY,?gOQ?g[iY@r!   )repetitionsr  random_errorsr   )r)   r.  r   ru   _level_trend_seasonr#  r/  r   Tsimulater   r|   )rn   ro   r  r  rm  r  r  
short_name
model_nameexpectedstateru   innovsims                 r6   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0r8   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.
    rj   r   Trk   rm   rn   ro   r   rp   r   )anchorrandom_staterO  r:   rk  rt   z
2016-03-01r   )r  r  	bootstrapr  r  N)r   ru   r   r  r|   scipystatsnormr)   r*   randnr+   all)rm  ru   r  r  s       r6   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#+r8   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
    rj   r   r   Frk   T)rm   rn   ro   r   rp   r   r   r   r  r!   r   r   N)	r   ru   r}   r|   r  r)   r$  r  abs)rm  ru   r  r  r$  s        r6   test_simulate_boxcoxr  F  s     ) 
ce  ||A%%H
,,qbq,
9
@
@C773QD66"&&)A-...r8   ix)r   r   rH    c                 P   t        j                  g dt        | | dz               }t        j                  t
              5  t        |dd      j                         }d d d        j                  d      j                  }|d   | dz   k(  sJ |d	   | d
z   k(  sJ y # 1 sw Y   @xY w)N)
iaN i>^ iL iI i1 iI i i i i r   r   r   F)rn   r   r   r   r:      )
r/   r2   r.   r   warnsr   r   ru   r}   r   )r  ts_1modelr   s       r6   test_forecast_indexr  [  s     99NBR D 
(	) $E

#% 	 NNN$**E8rBw9R s    BB%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   r8   r6   test_error_dampenr  k  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   rp   r   Tr   r   zuse_boxcox was setF)
r)   r*   r,   r   r   r   r   r   r   ru   )r'   r   s     r6   test_error_boxcoxr  p  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   )rp   r   r   zinitial_seasonal set but model)r"   333333?皙?r  )rp   r   initial_seasonal)r   )r   )r   r"   g?rj   )r  r   )rn   rp   r          @)rn   ro   rp   r   r   rp   r   Tr   )use_basinhoppingr   r   r   r   r   ru   r7   r   s     r6   test_error_initializationr    s"   	G
 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	" 
")	

 7#C 
z	" #c"#	z	" ?o>? ?[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  zL-BFGS-BTNCr  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      &@rk   r   )r   re   r
  r   gʳ?r   rtolr   gnt&@)
r)   r  r   ru   r   r   r   r   r   r   )r   r7   svr
  r   r  s         r6   test_alternative_minimizersr    s     
4-	 BO
s+
FC
''B  C CJJ01:DICJJ/4Hckkm++-s333r8   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)Nrk   r   argsanything)r
  r   r	  r  r  r   r  )r   r   r   r   ru   r   r   r  r   r   r   )r7   r   kwargsr  s       r6   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 NTrs   r   r   )r)   r  r   r   r   r1  r2  r   selr:  s      r6   test_to_restricted_equivr    sl     XXfF
((D6A:
CXXSzlQ&'Ffc6*FCJJrxx$8&Ar8   )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      r6   test_restricted_round_tipr    s_     XXfF
((D6A:
CXXSzlQ&'Ffc6:CHr8   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   )r:  r   r   r   )r   r   r  )r   r   )g      r  )r   r   KeyErrorr   r   r   r7   r:  s     r6   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   rk   )r:  rp   r   r  r   r   r  )r   ru   r   r   )r7   r:  r  r  s       r6   test_valid_boundsr    su    ,F
F+	cc!   ;GKK L D 

$%%&r8   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)Nrk   r   r   r  r   TrN  r   r   r   r  r"   )r+  r   r+  )r   r   ru   r   r   r   r   r   r7   r   r  s      r6   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)Nrk   r   r   r  r   g333333ӿr   r  r  r   r   r   r   r+  )r  r   )ffffff?r  )rn   ro   r:  rp   z!After adjusting for user-providedr  r   )r   r+  )r   r   r   r  r   r   ru   )r7   r   r:  s      r6   test_fixed_errorsr  -  s   
s+
FC	x	  ^^.45 		 
z	" ^^.56 		 5C 
z	" ^^LM 		 55C 
z	" ^^ #3?
 	 	 ",:NF
)C 
z)L	M ^^ #3?
 	 GGI	 9	 	 	 	 	 	 	 	 	 	 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)Nrk   r   T)r   r   r  )	r   ru   mle_retvalssuccessr   r   r   r   r   )r7   rn   ro   r   r  s        r6   
test_bruter  S  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   )rn   r   rp   r   rk   )ro   r  rp   r  )r7   s    r6   test_fix_set_parametersr  b  s    	z	" 
s+	

 
z	" 
"4		

 
z	" 
WWR["-		

 

 

 

 
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)	Nrk   r   zCannot fix a parameterr  r   g      ?r"   r  )r   r   r   r   r   ru   r  s     r6   test_fix_unfixabler  w  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   rk   )rn   r:  rp   )r  r  )r  r   r  z!The bounds for smoothing_seasonal)ro   r:  rp   r  r  s     r6   test_infeasible_boundsr  ~  s    !+
KF	z)I	J uV;	

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

 #%  
 s   B'BBB#)rk   r  r   c                     t        | |||      }|j                         }|j                  j                  sJ t	        |j                         j                         t              sJ y )Nr   )r   ru   r  r  r   r   r   r   )r7   r   rn   ro   r   r  s         r6   test_initialization_methodsr    sV     586C '')C??""""ckkm++-s333r8   c                     t        | d      j                         }|j                  dkD  sJ |j                  j                  d   | j                  d   k(  sJ t        |j                  |j                  dd         y )Nrk   r   r   r:   )r   ru   r   residr1   r   fcastvaluesr   )r7   r  s     r6   test_attributesr    sc    
s+
F
J
J
LC5519999??11---COOS__RS%9:r8   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   ru   r   r   refindallr   r   )r7   r   r  summs       r6   test_summary_boxcoxr    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   )rV  rV  )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.  ru   r   r   r   r   r   r   r   r  emptyr  s      r6   test_simulater    s   



3{C '')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 
j; 	 	

 
z)A	B GRzFG G* *M M8 8
 
G Gs<   :F1(F,F8GGF),F58GGG	index_typ)r0   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%   r0   r.   r   rm   r
  rj   )sizerH  i  r!   )rO  stopstepir   r  r   )r1   r/   period_ranger0   r   
RangeIndexr)   r*   r+   IndexrI  randintr   r-   r   r   r   ru   r}   r   r2   testingassert_index_equal)
r7   r  r   r  warningfcast_indexr   r3   r  fcasts
             r6   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!   rk   T)rp   r   _untransformed_level_untransformed_trend_untransformed_seasonal)r   minru   r   r   r   r   r   r   AssertionErrorr   r   r   hasattrr  s      r6   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 )Nrj   r   Trk   r  r!   r   )r  r  r  )r!   r   )r   )r   ru   r  r1   )rm  r  r  ru   r  expected_shapes         r6   test_forecast_1_simulationr$    s     ) 
ce  ,,	!=k  C )A-TA{3CN99&&&
,,
1M{  C *Q.UR4EN99&&&r8   r   rP  c                 v    t        | d | ||dd      j                         }|j                  j                  sJ y )Nrj   rk   )rn   ro   rm   rp   )r   ru   r  r  )r7   rn   ro   r   r  s        r6   (test_estimated_initialization_short_datar&    sD    
 ET
) 
ce  ??""""r8   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`	  )rg   dr   r   r  rl   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   ru   r}   r1   r0   choicesortedr   r_   inferred_freqr   r  r   )r  r'   df_yr  fittedr  r   s          r6   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   ru   r   r   )serieseses_fits      r6   test_initial_levelr5  H  s?    2F	gT
B VVXF
MMFMM/2D9r8   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 )Nrj   r   r   rk   rl   r   r   r!   r,  r  )rm   rn   ro   rp   r   r   r  )r   rd   ru   r)   roundr   r   )rx   lvlrn   seasry   s        r6   test_all_initial_valuesr:  S  s    ) 
ce 	 ((4;;/
0CHHT[[115E88DKK 12A6D%	 
ce 	 DKK0#6DKK0%8DKK 12D9r8   )r   )n__doc__statsmodels.compat.pandasr   statsmodels.compat.pytestr   osr  r   numpyr)   numpy.testingr   r   pandasr/   r   scipy.statsr  statsmodels.tools.sm_exceptionsr   r   statsmodels.tsa.holtwintersr	   r
   r   r   r   2statsmodels.tsa.holtwinters._exponential_smoothersr   r   &statsmodels.tsa.holtwinters._smoothersr3  r   r   pathsplitabspath__file__baserE  read_csvjoinr   asfreq	SEASONALSTRENDSrg   r   to_datetimeidxr2   r_   r`   rd   fixturer7   rJ   rL   r   parametrizer   r   r   r   r  r  r  r  r   r&  r   r(  rA  rF  rL  rT  ri  rm  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   r8   r6   <module>rU     s   0 2 	 	   >    L   ''--1
2ar{{GGLLy"45
 ""4( 		4	4 bnnUryy-R--cc8JKL h/  /"4B

 B

J D

 Y/
 0
 ^4G 5G	& &)Y/) 0 *)"!.7
5 &)Y/3 0 * 3$ &)Y/)$ 0 *)$X&4R	0.&@ J" J"Z 2+ 2+j g+ g+T	 &)Y/=1.161 2 2 0 *61r'T/* 45  6 >
"/?d 	4	44  A A1$42#L 5$-0eT]3
4 4 1
4
*)  < 4-0dE]34 4 1
4;	4G* ?"<"<J7 B04*=>' ? 1'. 4-0dE]3!R)	# * 4 1	##&L::r8   