
    M/Ph
             	          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j"        #                    ej"        $                    e%                    \  Z&Z' ej(        ej"        )                    e&d
d          dd          Z*e*+                    d          Z*dZ,dZ-g dZ.g dZ/ ej0        e/          Z1 ej2        e. ej3        e1 ej4        e1                              Z5 ej6        d          d             Z7djdZ8 G d d          Z9ej:        ;                    dd          d             Z<ej:        ;                    de,          d             Z=ej:        ;                    dd           d!             Z>d" Z?d# Z@ej:        ;                    d$e-          ej:        ;                    de,          d%                         ZAd& ZBd' ZCd( ZDd) ZEej:        jF        ej:        ;                    d$e-          ej:        ;                    de,          d*                                     ZGej:        ;                    d$e-          ej:        ;                    de,          d+                         ZHd, ZId- ZJd. ZKd/ ZLej6        d0             ZMej6        d1             ZNej6        d2             ZOej:        ;                    d$e-          ej:        ;                    de,          ej:        ;                    d3d4          ej:        ;                    d5d           d6                                                 ZPd7 ZQd8 ZRej:        ;                    d9g d:          d;             ZSd< ZTd= ZUd> ZVej:        ;                    d?g d@          dA             ZWdB ZXej:        ;                    dCg dDg dEg dFg          dG             ZYej:        ;                    dCg dHg dIg dJg          dK             ZZdL Z[dM Z\dN Z]dO Z^ej:        ;                    d$dPdg          ej:        ;                    ddPdg          dQ                         Z_dR Z`dS ZadT Zbej:        ;                    d?g dU          ej:        ;                    d$ddPg          ej:        ;                    dddPg          dV                                     ZcdW ZddX ZedY Zfej:        ;                    dZg d[          d\             Zgd] Zhej:        ;                    d^d_d`g          ej:        ;                    daddbg          dc                         Ziej:        ;                    d$ddPg          ej:        ;                    dddPg          ej:        ;                    ddded`g          df                                     Zjdg Zkdh Zldi ZmdS )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                     t           j                            d          } |                     d          }|                                }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        r/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/tsa/holtwinters/tests/test_holtwinters.pysesr7   h   s    			q	!	!B
4  A	A1d^^ 0 0Qx!A$qQx/!	#$$AM*agajyIIIE9Qe#....    c                    | 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 ]Z}|| |         z  d|z
  ||dz
           ||dz
           z   z  z   ||<   |||         ||dz
           z
  z  d|z
  ||dz
           z  z   ||<   [|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HQKKE
A8A;;D
AE!HAaD2gDGqt|q5yR"W55E!H58b=!QXO3AaD1a[[ H H1Q4<1u9q1u!a%1H"IIauQx%A,./1t8qQx2GG!QrT{QqtW$DH9ryIM22QrU::AaaaD
d(C!QT!!r8   c                       e Zd Zed             Zd Zd Zej        	                    dd          d             Z
d Zd	 Zej        j        d
             Zd Zd Zd Zd ZdS )TestHoltWintersc                 R   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| _	        d S )	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   sq   
 
 

 
 
 ie,,,BM+2C$D$D
 
 
 &
 
 
"
 
 
" YtU++
+2=1A#B#B
 
 

 $ 
  
  
B 
  
  
B  "yu55%'%5 &39::&
 &
 &
" $8 

 

 

r8   c                 j   t          | j        dddd                              | j                  }t          | j        dddd                              | j                  }t	          |                    dd          g d	d
           t	          |                    d          g d	d
           d S )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    #I"-
 
 
 #4,#
-
- 	 $I"-
 
 
 #4,#
-
- 	 	LL.0EFF000	
 	
 	

 	LL2L33000	
 	
 	
 	
 	
r8   c                     t          | j        j        dddd                              | j                  }t          |                    d          g dd           d S )	Nrj   r   r   rk   rl   rq   rr   rs   )r   rd   valuesru   re   r   forecastrw   rx   s     r6   test_ndarrayzTestHoltWinters.test_ndarrayZ  sy    #I"-
 
 
 #4,#
-
- 	 	MM!BBBA	
 	
 	
 	
 	
r8   zOptimizer does not convergeF)reasonstrictc                     t          | j        ddd                              dd          }t          |                    d          g dd	           d S )
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  st    #I	
 
 

 #TT#
*
* 	 	MMM""$H$H$H!	
 	
 	
 	
 	
r8   c                    t          | j        d                              dd          }t          | j        d                              dd          }t          | j        d                                          }t          |                    d          d	gd
           t          |j        g dd
           t          |                    d          dgd
           t          |                    d          dgd
           t          |j        d         dd
           t          |j        d         dd           d S )Nlegacy-heuristic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  sX   !4F
 
 

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

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

#%% 	 	DMM!,,zlA>>>J   !	
 	
 	
$ 	DMM!,,zlA>>>DMM!,,zlA>>>DK(9:HaHHHDK8*aHHHHHr8   c                 T   t          | j        d                              ddd          }t          | j        dd                              ddd          }t          | j        dd	
                              dd          }t          |                    d          g dd           t          |j        g dd           t          |j        g dd           t          |                    d          g dd           t          |                    d          g dd           d S )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   O3E
 
 

#c3%#
H
H 	 O"4
 
 
 #c3%#
H
H	 	
 O"-
 
 
 #c3#
7
7	 	
 	MM!AAA1	
 	
 	
 	J  " '	
 	
 	
* 	  $ )	
 	
 	
, 	MM!AAA1	
 	
 	
 	MM!AAA1	
 	
 	
 	
 	
r8   c                 t   t          | j        d                                          }t          | j        dd          }|                    dd          }t          | j        ddd          }|                                }t	          |j        d	         d
d           t	          |j        d         t          j        d           t	          |j        d         t          j        d           t	          |j        d         dd           t	          |j        d         t          j        d           t	          |j        dd           t          |
                                                                t                    s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          |
                                                                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          |
                                                                t                    sJ d S )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  s    "%[
 
 

#%% 	 %"-
 
 

 xxd?xCC%"-	
 
 
 xxzzDK(9:D!DDDDK(9:BFAFFFDK8"&!DDDDK8&!DDDDK8"&!DDDDHgq111$,,..0022C88888DK(9:D!DDDDK(9:D!DDDDK8$BBBDK8&!DDDDK8$BBBDHgq111$,,..0022C88888DK(9:D!DDDDK(9:D!DDDDK8$BBBDK8&!DDDDK8$BBBDHgq111$,,..0022C8888888r8   c                    t          | j        dd          }dddddd	}|                    |          5  |                    d
          }d d d            n# 1 swxY w Y   |                                D ]#}t          |j        |         ||                    $|                    |          5  |                    d          }d d d            n# 1 swxY w Y   t          |j        |j                   t          |j        d         |d                    d |                                D             }|                    |          5  |                    d          }d d d            n# 1 swxY w Y   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          |                    d          |d           d S )NTrk   r   gl9+?gG:?r   g<΍o@g"&R@)r   r   r   r   r   Fr   r   c                 "    i | ]\  }}d |v	||S )r    ).0kvs      r6   
<dictcomp>z4TestHoltWinters.test_holt_damp_r.<locals>.<dictcomp>#  s(    JJJtq!9I9Ia9I9I9Ir8   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
alt_paramsalt_fitdesireds	            r6   test_holt_damp_rz TestHoltWinters.test_holt_damp_r  so    %"-
 
 
  *)!)'
 
 ^^F## 	+ 	+''E'**C	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ;;== 	: 	:CCJsOVC[9999^^F## 	. 	.ggg--G	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.---N?+VO-D	
 	
 	
 KJv||~~JJJ
^^J'' 	. 	.ggg--G	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.;w}1!4gm6H6KLLLLL 	#(*,=DIIII!
 !
 !
D 	cj939DEwOOO!
 !
 !
F 	E#*_-sy897	
 	
 	
 	

 
  
  
B 	('====
 
 
 	R(('======s5   AAA0CCCE//E36E3c                     t          | j        ddddd          }|                                }t          |                    d          g dd           d S )	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  sp    "I"-
 
 
 wwyyMM!CCC	
 	
 	
 	
 	
r8   c                 ^   t          | j        ddddd          }|                                }t          |                    d          g dd	           t          | j        ddddd
                                           t          | j        ddddd
                                           d S )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    #I"-
 
 
 xxzzMM!DDD	
 	
 	

 	I"-	
 	
 	
 #%%%I"%"-	
 	
 	
 #%%%%%r8   c                 J   t          | j        dddd                                          }t          |                    d          g dd           t          | j        dd	dd                                          }t          |                    d          g d
d           d S )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    #I"-
 
 
 #%% 	 	MM!	 	 	 	
 	
 	
 $I"-
 
 
 #%% 	 	MM!	 	 	 	
 	
 	
 	
 	
r8   N)__name__
__module____qualname__classmethodrh   rz   r   pytestmarkxfailr   r   r   smoker   r   r   r   r   r   r8   r6   rL   rL      s       g
 g
 [g
R
 
 
B

 

 

 [;EJJ	
 	
 KJ	
 I  I  IDA
 A
 A
F [)9 )9 )9Vm> m> m>^
 
 
   F*
 *
 *
 *
 *
r8   rL   trend_seasonal))r   N)Nr   )r   r   c                     | \  }}t          j        d           }t          j        t                    5  t          |||d           d d d            d S # 1 swxY w Y   d S )Nd   r   )rn   ro   rm   )r)   onesr   raises
ValueErrorr   )r   rn   ro   r'   s       r6   test_negative_multipliativer     s     %OE8	A	z	"	" 
 
UX	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AAAro   c                     t          j        t                    5  t          t          d| dd           d d d            d S # 1 swxY w Y   d S )NFTr   )rn   ro   r   rm   )r   r   	TypeErrorr   housing_data)ro   s    r6   test_dampen_no_trendr     s    	y	!	! 
 
	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AAA)r   r   c                 
   t          j        t          j        d           t          j        ddd                    }t          j        t                    5  t          || d           d d d            d S # 1 swxY w Y   d S )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NN	 	 	A 
z	"	" G GQAFFFFG G G G G G G G G G G G G G G G G Gs   A88A<?A<c                      t          j        t                    5  t          t	          j        t          t          gd                                                     d d d            d S # 1 swxY w Y   d S )Nr!   axis)r   r   r   r   r/   concatr   ru   r   r8   r6   test_2d_datar   4  s    	z	"	"  I|\2;;;	
 	

#%%%                 s   AA))A-0A-c                  b   t                                           } t          | j                  | _        t	          j        d          5 }t          | ddd          }t          |          dk    sJ dt          |d                   v sJ 	 d d d            n# 1 swxY w Y   |j	        d	k    sJ d S )
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SYCI		 	-	-	- +"uuK
 
 
 1vv{{{{QqT*****+ + + + + + + + + + + + + + + 2%%%%%%s   ABBBrn   c                 l   t          t          | |d          }|                                }|                    ddddii          }t          |                                                                t                    sJ |j        d|j        z  k     sJ t          |j        t                    sJ d S )	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 ckkmm++--s333338dSWn$$$$dk4(((((((r8   c                      t          t          t          j        d         d          } |                     d           d S )Nr   knownr   rp         ?r   )r   r   r   ru   r   s    r6   test_no_params_to_optimizer  Z  sC    
"'*%  C
 GGCG     r8   c                      t          t          d          } t          j        t                    5  |                     t          j        dg                     d d d            d S # 1 swxY w Y   d S )Nrk   r   r  rq   )r   r   r   r   r   ru   r)   arrayr  s    r6   test_invalid_start_param_lengthr  c  s    
|;
O
O
OC	z	"	" . .RXse__---. . . . . . . . . . . . . . . . . .s   *A''A+.A+c                    t          t          dd          }|                                }|                    d          }t          |                                                                t                    sJ t          |                                                                t                    sJ d}|j        |j        |z   k    sJ |                    d          }t          |j        |j        d           d S )	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ckkmm++--s33333dllnn,,..44444
C8sw}$$$$77.7))D$(A666666r8   c                  <   t          t          dd          } |                                 }|                     d          }t          j        |j        |j        k              sJ t          j        d d df         |j        z
  }t          |                                d           t          |
                                                                t                    sJ t          |
                                                                t                    sJ d S )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6#"d&7788888QQQT"T%66D		S)))ckkmm++--s33333dllnn,,..4444444r8   c                    t          t          | |dd                                          }t          |j        d         d           t          t          | |d                                          }t          |j        d         d           d S )Nrk   r  )rn   ro   rp   r   r   )rn   ro   r   )r   r   ru   r   r   )rn   ro   r  s      r6   test_float_boxcoxr+    s     )   
cee  CJ|,c222
	  
 
cee  CJ|,c22222r8   c           	      4   t          t          | |d          }|                                }t          |                                                                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        |                              t          j                  }|                                }t          j        dd
ggdz            }t&          || f         }t(          || f         }t+          ||||||d          }t-          ||||||d          } |||          } |||          }t/          ||            |||          }t/          ||           d S )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_pythonrD    s     )	  C ''))Cckkmm++--s33333ZFa D

2:l++,,AAA
QA$%E#$D'(E

!C#
'##CC		 B		 B4B+AbqbE *()!""	a			)	)BVVXXFXSzlQ&''FHe,-G5)*G"2vvq!T5IIJ VVQ4GGJWQ
##FWQ
##FFF###WQ
##FFF#####r8   c            	         t          t          d          } |                                 }t          |                                                                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          ||                    d                     t%          t          d	d
          } |                                 }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          ||                    d                     t          |                                                                t                    sJ d S )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)   r0  r1  endogr   rJ   r   r   r   r   r}   r   r   rn   r  )
r   r  r=   r>   lrE   rG   _rF   r?   s
             r6   test_direct_holt_addrI    s{   
\
M
M
MC
''))Cckkmm++--s33333

2:ci(())AJ()E/	5ssz/:sa  Aq!Q Asy!!!Asy~b)BGAJJ6777As||A'''
E  C ''))C

2:ci(())AJ()E:'(D/	:o&:o&  Aq!Q D#*+++AE39sy0111Asy!!!Asy!!!	39>"	r 2RXooo5N5N NN   As||A'''ckkmm++--s3333333r8   c                 p   t           j                            d          }d|                    d          z  }t          j        |d d df                   }||d d df         z   }|                    t                    }t          |dd                                          }|j	        d	         d
k    sJ d S )Ni90  r   )  r   r   r!   r   rk   r  r   r   )
r)   r*   r+   r,   cumsumr4  intr   ru   r   )r   r3   r4   y_starr'   r  s         r6   test_integer_arrayrO    s    			u	%	%B
R	***AYqAwF111a4A	A
	k  	cee  :'(C//////r8   c                     t          j        d          } t          | ddd          }|                    ddd	          }|                    d
          }t          |t           j        dt          j        d          f         d           |                    ddd
	          }|                    d
          }t          |t           j        dt          j        d          f         d           t          ||d           d S )Nr   r   Trk   rn   r   rp   r!   r   g#B;)r   r   r   r   )start	   g|=r   )r)   r<   r   ru   rv   r   r   )rF  r   res1pred1r  pred2s         r6   test_damping_trend_zerorW    s    IbMME
)	  C 771c7OODLLqL!!EE25bill!23%@@@@771c7KKDLLqL!!EE25bill!23%@@@@E5u------r8   c                  n   g d} t          j        dt          |                     }t          j        | |          }g d}t          j        dt          |                    }t          j        ||          }t	          | d                                          }t	          |d                                          }t	          |d                                          }t	          |d                                          }	t          |                                dgd	           t          |                    d
d          g dd	           t          |                                dgd	           t          |                    dd          g dd	           t          |                                dgd	           t          |                    d
d          g dd	           t          |	                                dgd	           t          |	                    dd          g dd	           d S )N)r         (   2   r$   )rR  r&   )r   rj   r          r   )rn   r   <   r!   r      )rR  rt   )r_  F   P   z2000-1-6z2000-1-8@   )rc        )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_inputsrl    s&   ***O}#o"6"6   y2BCC'''O}#o"6"6   y2BCCu===AACCD 0>>>BBDDDu===AACCD 0>>>BBDDDa0001!44lllAFFFa000::66a   a0001!44nnnaHHHa000::66    r8   c                  b    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   austouristsrp  0  sA    E E EDL M,5AAAE9T5!!!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@rs  rt  ANAMNAru  rv  MNMrw  rx  ry  ANNMNNTFr   dampedundampeds     r6   simulate_expected_results_rr  ~  s    : 877;;;;;;;;;777:::::: F 877;;;777;;;;;;<<<;;;777::::::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?   r9  r:  rG  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(?rr  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@rz  r  )r)   r   r  s     r6   simulate_fit_state_rr    s   D &&&$ ""%#"
 
 &&&$!!""#"
 
 ''($!""##"
 
 '()$!!"##"
 
 '&V$!"&&&&
 
 (&V$!"&&&&
 
 '&V$!!&&&&
 
SU UFp &(&6!""##"
 
 '(&6!""%#"
 
 &F&6 "!#!
 
 'F&6!""#"
 
 '()6!""##"
 
 $&)6!!"##"
 
 'F)6!!##"
 
 ('V6!"&&&&
 
 (&V6!"&&&&
 
 ((V6!!&&&&
 
 'FV6!&&&&
 
 'FV6!&&&&
 
KQ QHd ***r8   r  r  errorc                    dddd}||         ||          z   ||         z   }|||         v r/t          j        ||         |                   }	||         |         }
ndS t          |d| ||                              |
d         |
d	         |
d
         |
d         d          }|
d         |j        d<   |
d         |j        d<   |
d         |j        d<   |
d         |j        d<   |
d         |j        d<   |
d         |j        d<   t          j        t          j        |j	                            rdS t          j        g dg          j
        }|                    dd||          }t          |	|j        d           dS )z
    Test for :meth:``statsmodels.tsa.holtwinters.HoltWintersResults``.

    The tests are using the implementation in the R package ``forecast`` as
    reference, and example data is taken from ``fpp2`` (package and book).
    AMNr   Nrj   )rm   rn   ro   r   r>   r?   r9  r:  F)r   r   r.  r   r   rG  r:   rE   r  r  r  r  )g@9?gY,?gOQ?g[iY@r!   )repetitionsr  random_errorsr   )r)   r1  r   ru   _level_trend_seasonr&  r2  r   Tsimulater   r|   )rn   ro   r  r  rp  r  r  
short_name
model_nameexpectedstateru   innovsims                 r6   test_simulate_expected_rr    s   ( S44JE"Z%66H9MMJ0888:9&A*MNN$V,Z8    
cgf >El 
    3ZCJrN3ZCJrNDkCKODkCKODkCKODkCKO 
vbhs'(()) JGGGHIIKE
,,qauE,
J
JC#*a00000r8   c                 ,   t          | ddddd                                          }t          |                    ddd          j        |                    ddd          j                   t          |                    dd	d          j        |                    dd
d          j                   t          |                    ddd          j        |                    ddd          j                   |                    ddt
          j        j                   |                    ddt
          j                                                   |                    ddt          j	        
                    dd                     |                    ddd           |                    ddd          j        }|                    ddt          j	                            d                    j        }t          j        ||k              sJ dS )zS
    check whether all keywords are accepted and work without throwing errors.
    rj   r   Trk   rm   rn   ro   r   rp   r   )anchorrandom_staterR  r:   rn  rt   z
2016-03-01r   )r  r  	bootstrapr  r  N)r   ru   r   r  r|   scipystatsnormr)   r*   randnr+   all)rp  ru   r  r  s       r6   test_simulate_keywordsr    s    )   
cee  Qqq118QwQ77>   Qr229Q|!<<C   Qu155<Q|!<<C   LL%+2BLCCCLL%+2B2B2D2DLEEELL")//!R2H2HLIIILL+L>>> ,,qbr,
:
:
AC<<	r	(=(=b(A(A    	 6#+r8   c           	      N   t          | dddddd                                          }|                    d          j        }|                    ddd	
          j        }t          j        |d          }t          j        t          j        ||z
            dk               sJ dS )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)rp  ru   r  r  r'  s        r6   test_simulate_boxcoxr  F  s     )   
cee  ||A%H
,,qbq,
9
9
@C73QD6"&))A-.......r8   ix)r   r   rK    c                 |   t          j        g dt          | | dz                       }t          j        t
                    5  t          |dd                                          }d d d            n# 1 swxY w Y   |                    d          j	        }|d         | dz   k    sJ |d	         | d
z   k    sJ d S )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    9NNNBR    D 
(	)	)  $E
 
 

#%% 	               NNN$$*E8rBw9Rs   %A44A8;A8c                      t          j        t          d          5  t          t	          j        d          d           d d d            d S # 1 swxY w Y   d S )NzCan only dampen thematchr   T)r   r   r   r   r   r)   r   r   r8   r6   test_error_dampenr  k  s    	z)>	?	?	? > >RWS\\====> > > > > > > > > > > > > > > > > >s   $AAAc                     t           j                            d          } t          j        t
          d          5  t          | dd           d d d            n# 1 swxY w Y   t          | dz  d	          }t          |t                    sJ t          | dz  dd
          }t          j        t          d          5  |	                    d	           d d d            d S # 1 swxY w Y   d S )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	B	B O OQ3gNNNNO O O O O O O O O O O O O O O q!t
5
5
5Cc/00000
	15G  C 
z)=	>	>	> " "5!!!" " " " " " " " " " " " " " " " " "s#   AA!A C$$C(+C(c           	         t          j        t          d          5  t          | d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | ddd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          | ddg d	
           d d d            n# 1 swxY w Y   t          j        t                    5  t          | d           d d d            n# 1 swxY w Y   t          j        t                    5  t          | d           d d d            n# 1 swxY w Y   t          j        t                    5  t          | g d           d d d            n# 1 swxY w Y   t          j        t                    5  t          | ddd           d d d            n# 1 swxY w Y   t          j        t                    5  t          | ddddd           d d d            n# 1 swxY w Y   t          | dd          }t          j        t                    5  |                    d           d d d            n# 1 swxY w Y   t          j        t                    5  |                    dd           d d d            d S # 1 swxY w Y   d S )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 A 	S@@@@A A A A A A A A A A A A A A A 
z)F	G	G	G 
 
")		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z)I	J	J	J 
 
")111		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z	"	" 5 5S44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	z	"	" 5 5S44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	z	"	" H HS3F3F3FGGGGH H H H H H H H H H H H H H H	z	"	" 
 
")		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z	"	" 
 
")	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7#  C 
z	"	" # #c"""# # # # # # # # # # # # # # #	z	"	" ? ?o>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   :>> B  BB&CCC,D

DD.EEE0FFF4GGG8HH!HI33I7:I7J<<K K r   )r   r	  zL-BFGS-BTNCr  Powellztrust-constrc                 r   t          j        ddg          }i }t          |d          }|                    | ||          }t	          |j        d         dd	           t	          |j        d
         dd	           t          |                                                                t                    sJ d S )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+
F
F
FC
''B   C CJ01:DIIIICJ/4HHHHckkmm++--s3333333r8   c                    t          | d          }ddi}t          j        t                    5  |                    |           d d d            n# 1 swxY w Y   t          j        t                    5  |                    d|           d d d            n# 1 swxY w Y   dddii}t          j        t                    5  |                    d	|           d d d            n# 1 swxY w Y   dd
dii}|                    d	|          }t          |j        t                    sJ t          |                                	                                t                    sJ d S )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+
F
F
FCj!F	z	"	" ( ('''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	z	"	" @ @???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 6:"67F	z	"	" ? ?~v>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8W"56F
'''
@
@Ccj$'''''ckkmm++--s3333333s5   AAA6BB!BC((C,/C,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	          | |                    t           j                  |                     d S NTrs   r   r   )r)   r  r   r   r   r4  r5  r   selr=  s      r6   test_to_restricted_equivr    s     XfF
(D6A:

CXSzlQ&''Ffc6**FCJJrx$8$8&A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	          | ||          ||                     d S r  )r)   r  r   r   r   r  s      r6   test_restricted_round_tipr    s|     XfF
(D6A:

CXSzlQ&''Ffc6::CHH    r8   c                    ddi}t          j        t                    5  t          | |           d d d            n# 1 swxY w Y   dddgi}t          j        t                    5  t          | |           d d d            n# 1 swxY w Y   ddi}t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   ddi}t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   dd	i}t          j        t
                    5  t          | |           d d d            d S # 1 swxY w Y   d S )
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 1S00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1#s,F	y	!	! 1 1S00001 1 1 1 1 1 1 1 1 1 1 1 1 1 11F	z	"	" 1 1S00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1,F	z	"	" 1 1S00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1-F	z	"	" 1 1S00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1sW   <A A &BBB,C

CC2DDD8EEEc                     ddi}t          | |d                              d          }t          | d                              d          }t          |j        d         |j        d         d	           d S )
Nr   )r  r   rk   )r=  rp   r   r  r   r   r  )r   ru   r   r   )r7   r=  r  r  s       r6   test_valid_boundsr    s    ,F
F+  	cc!!   ;GGGKK L  D 
$%%&     r8   c                    t          | d          }|                    ddi          5  |                                }d d d            n# 1 swxY w Y   |j        d         dk    sJ t	          |                                                                t                    sJ t          | ddd          }|                    dd	i          5  |                                }d d d            n# 1 swxY w Y   |j        d         d	k    sJ t	          |                                                                t                    sJ t          | ddd
          }|                    ddd          5  |                                }d d d            n# 1 swxY w Y   |j        d         dk    sJ |j        d         dk    sJ t	          |                                                                t                    sJ d S )Nrk   r   r   r  r   TrQ  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+
F
F
FC	*C0	1	1  ggii              :'(C////ckkmm++--s33333
5t;  C 
$/	0	0  ggii              :o&$....ckkmm++--s33333
55  C 
ssKK	L	L  ggii              :*+s2222:'(C////ckkmm++--s3333333s5   A

AAC..C25C22FFFc                    t          | d          }t          j        t                    5  |                    ddi          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t
                    5  |                    ddi          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          | dd          }t          j        t
                    5  |                    dd	d
          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          | ddd          }t          j        t
                    5  |                    ddd          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ddd}t          | dd|d          }t          j        t
          d          5  |                    ddd          5  |                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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+
F
F
FC	x	 	   ^^.455 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               
z	"	"  ^^.566 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               5  C 
z	"	"  ^^LLMM 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               55  C 
z	"	"  ^^ #3??
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	               ",:NNF
)  C 
z)L	M	M	M  ^^ #3??
 
 	 	 GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s  A(AA(A	A(A	A((A,/A,C	$B2&C	2B6	6C	9B6	:C		CC?D=D&D=&D*	*D=-D*	.D==EE4F2FF2F	F2"F	#F22F69F61I
H+I+H/	/I2H/	3II
Ir   c                    t          | ||d          }|                    d          }|j        j        sJ |                    ddi          5  |                    d          }d d d            n# 1 swxY w Y   |j        j        sJ t          |                                                                t                    sJ d S )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	1 & &ggg%%& & & & & & & & & & & & & & &?""""ckkmm++--s3333333s   A22A69A6c                    t          j        t                    5  t          | dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          | ddd           d d d            n# 1 swxY w Y   t          j        t                    5  t          | dt	          j        d          d	           d d d            d S # 1 swxY w Y   d S )
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	"	" 
 
WR[["-		
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s1   9= =A==BB!&CCCc                    t          | d          }t          j        t          d          5  |                    ddi          5  |                    d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nrk   r   zCannot fix a parameterr  r   g      ?r"   r  )r   r   r   r   r   ru   r  s     r6   test_fix_unfixabler  w  s   
s+
F
F
FC	z)A	B	B	B ) )^^.566 	) 	)GGCG(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s5   B A(B (A,	,B /A,	0B  BBc                 |   ddd}t          j        t          d          5  t          | d|d                                           d d d            n# 1 swxY w Y   d	d
d}t          j        t          d          5  t          | d|d                                           d d d            d S # 1 swxY w Y   d S )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  ~  sT   !+
KKF	z)I	J	J	J  uV;	
 	
 	

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

 #%%%                 s#   &AAA>&B11B58B5)rk   r  r   c                     t          | |||          }|                                }|j        j        sJ t	          |                                                                t                    sJ d S )Nr   )r   ru   r  r  r   r   r   r   )r7   r   rn   ro   r   r  s         r6   test_initialization_methodsr    sq     586  C ''))C?""""ckkmm++--s3333333r8   c                     t          | d                                          }|j        dk    sJ |j        j        d         | j        d         k    sJ t          |j        |j        dd                     d S )Nrk   r   r   r:   )r   ru   r   residr1   r   fcastvaluesr   )r7   r  s     r6   test_attributesr    sr    
s+
F
F
F
J
J
L
LC5199999?11----COS_RSS%9:::::r8   c                    t          | dz  dd          }t          j        t          d          5  |                    d           d d d            n# 1 swxY w Y   |                                }t          |                                          }t          j        d|          sJ t          |                                
                                t
                    sJ d S )	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	G	G ! !4   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
''))Cs{{}}D:*D11111ckkmm++--s3333333s   AAAc                 .   t          t          j        |           d          }|                                }t	          |                                                                t                    sJ t          j	        t          d          5  |                    dd           d d d            n# 1 swxY w Y   t          j	        t          d          5  |                    dd	t          j        d
                     d d d            n# 1 swxY w Y   |                    dd	d           t          j	        t          d          5  |                    dd	d           d d d            n# 1 swxY w Y   t          j	        t          d          5  |                    dd	dd           d d d            n# 1 swxY w Y   t          j	        t          d          5  |                    dd	d           d d d            d S # 1 swxY w Y   d S )Nr  r   zerror must ber  r   unknown)r  z	If randomr   )rY  rY  )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)   r1  ru   r   r   r   r   r   r   r   r  emptyr  s      r6   test_simulater
    sJ   


3{  C ''))Cckkmm++--s33333	z	9	9	9 * *Ry)))* * * * * * * * * * * * * * *	z	5	5	5 M MRz(9K9KLLLM M M M M M M M M M M M M M MLL:cL222	z	9	9	9 8 8Rz$7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	z)@	A	A	A 
 
j; 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
z)A	B	B	B G GRzFFFG G G G G G G G G G G G G G G G G GsZ   B22B69B6+DDDE22E69E6F>>GG$H

HH	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    rt          j                            d          }t          j	        t          j
        |                    dd|dz                                 }t          }d	|d
<   t          j        ddd          }|
|dd          }|                                 } |d d         | _        t          |          5  t!          | fdddd|                                }d d d            n# 1 swxY w Y   t          |          5  |                    d          }	d d d            n# 1 swxY w Y   t'          |	t          j                  sJ t          j                            |	j        |           d S )Nr   r  r$   $   r  r%   r0   r.   r   rm   r  rj   )sizerK  i  r!   )rR  stopstepir   r  r   )r1   r/   period_ranger0   r   
RangeIndexr)   r*   r+   IndexrL  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    9Q<DFGKH
D2ICHHH	l	"	"j$))LLL	g		dRi((%'!""	k	!	!Y""1%%2::a:#C#CDDEE%'!"m$TBBBCDDk
((**CdsdCI	g		  "
"-	
 

 
 
 #%% 	               
g		 ! !R  ! ! ! ! ! ! ! ! ! ! ! ! ! ! !eRY'''''J!!%+{;;;;;s$   $E33E7:E7F//F36F3c                    t          | dz   |                                 z
  dd          }|                                }t          |                                                                t                    sJ t          j        t                    5  t          |j        |j                   d d d            n# 1 swxY w Y   t          |d          rJ t          |d          rJ t          |d          rJ d S )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ckkmm++--s33333	~	&	& 5 5	3#34445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 s233333s233333s56666666s   B::B>B>r  r!   r   r  r  c                    t          | ddddd                                          }|                    dd||          }|dk    rd	nd|f}|j        |k    sJ |                    d
d||          }|dk    rdnd
|f}|j        |k    sJ d S )Nrj   r   Trk   r  r!   r   )r  r  r  )r!   r   )r   )r   ru   r  r1   )rp  r  r  ru   r  expected_shapes         r6   test_forecast_1_simulationr'    s     )   
cee  ,,	!=k   C )A--TTA{3CN9&&&&
,,
1M{   C *Q..UUR4EN9&&&&&&r8   r   rS  c                 ~    t          | d |         ||dd                                          }|j        j        sJ d S )Nrj   rk   )rn   ro   rm   rp   )r   ru   r  r  )r7   rn   ro   r   r  s        r6   (test_estimated_initialization_short_datar)    sV    
 ETE
)   
cee  ?""""""r8   c                    t           j                            d          }t          j        |          }d|j        _        t          |dddd          }|                    dd	          }|	                    d
          }|j
        d         d
k    sJ t          j        dd|j
        d         z            }t           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            n# 1 swxY w Y   |                    dd	          }t#          j        t&          d          5  |	                    d
           d d d            d S # 1 swxY w Y   d S )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_indexr3  "  sV   
	!!(++A<QDDJO )  E YYY66FOO&O))E;q>V####M,AGAJ???EIUAFFE5MMEDJdj""233333:?""":#+++	l*J	K	K	K 
 
$"-
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 YYY66F	l.	9	9	9 & &f%%%& & & & & & & & & & & & & & & & & &s$   E55E9<E92GGGc                      g d} t          | dd          }|                                }|j         t          |j        d         d           d S )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_levelr8  H  s[    222F	gT
 
 
B VVXXF
MMFM/2D99999r8   c            
         t          t          dddd                                          } t          j        | j        d                   }t          j        | j        d         d          }t          j        | j        d	         d          }t          t          dddd
|||                                          }t          |j        d         |           t          |j        d         |           t          |j        d	         |           d S )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   )   
cee 	 (4;/
0
0CHT[1155E8DK 12A66D%	 	 	 
cee 	 DK0#666DK0%888DK 12D9999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._smoothersr6  r   r   pathsplitabspath__file__baserH  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+  rD  rI  rO  rW  rl  rp  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)  r3  r8  r=  r   r8   r6   <module>rX     s	    0 / / / / / 2 2 2 2 2 2 				 				      > > > > > > > >          L L L L L L L L                              '--11
2
2ar{GLLy"455  
 ""4(( 		  4	 	 	4 bnUry-R-cc8J8JKKKLLL h/ /  /" " " "4B

 B

 B

 B

 B

 B

 B

 B

J D 
 
 
 Y//
 
 0/
 ^44G G 54G  	& 	& 	& &))Y//) ) 0/ *))"! ! !. . .7 7 7
5 
5 
5 &))Y//3 3 0/ *) 3$ &))Y//)$ )$ 0/ *))$X&4 &4 &4R	0 	0 	0. . .&  @ J" J" J"Z 2+ 2+ 2+j g+ g+ g+T	 &))Y//=11.1161 61 21 21 0/ *)61r' ' 'T/ / /* 44455    65 > > >
" " "/? /? /?d    	4 	4 	44 4 4  A    A   1 1 1$  4 4 42# # #L 5$-00eT]33
4 
4 43 10
4
 
 
*) ) )    <<<  4-00dE]334 4 43 10 
4; ; ;	4 	4 	4G G G* ??? "< "< "<J7 7 7 B004*=>>' ' ?> 10'. 4-00dE]33!R))	# 	# *) 43 10	##& #& #&L: : :: : : : :r8   