U
    Kvf~                     @   s  d Z ddlmZ ddlmZmZ ddlmZ ddlZddl	Z	ddl
ZddlmZmZ ddlZddlZddlZddlmZ ddlm  mZ ddlm  m  mZ dd	 Zd
ZdZdZdZ e!eeed
e dZ"e!eeede dZ#ee" ee# dqddZ$e#e" Z%dd e%D Z&ej'e%e&ddd Z(ej'dd Z)ej'dd Z*ej'dd Z+ej'dd Z,ej'd d! Z-d"d# Z.ej'd$d% Z/ej'd&d' Z0drd(d)Z1d*d+ Z2d,d- Z3d.d/ Z4d0d1 Z5d2d3 Z6d4d5 Z7d6d7 Z8d8d9 Z9d:d; Z:d<d= Z;d>d? Z<d@dA Z=dBdC Z>dDdE Z?dFdG Z@dHdI ZAdJdK ZBdLdM ZCdNdO ZDdPdQ ZEej'dRdS ZFdTdU ZGdVdW ZHejIjJdXdY ZKejIjJdZd[ ZLd\d] ZMd^d_ ZNd`da ZOejIPdbddcgejIPddddcgejIPdedfdggdhdi ZQejIPdjdkdlgdmdn ZRdodp ZSdS )sz
Author: Samuel Scherrer
    )QUARTER_END)PLATFORM_LINUX32PLATFORM_WIN)productN)assert_allcloseassert_almost_equalETSModelc                 C   s0   t | D ]"\}}|d d kr|d r| |= qd S )N      )	enumerate)Z	modellistimodel r   T/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/tests/test_exponential_smoothing.pyremove_invalid_models_from_list.   s    r   )addmul)r   r   N)TFaustouristsNoildataFc                 C   s0   dddddd}||  ||  ||  ||  S )NAMNd )r   r   NTFr   )errortrendseasonaldamped
short_namer   r   r   short_model_nameD   s    r#   c                 C   s&   g | ]}t |d d |d f qS )Nr   )r#   ).0modr   r   r   
<listcomp>O   s    r&   )paramsidsc                 C   s   | j }|dd \}}}}	|d }
|
dkr<|}
d}||	 }n|}
d }||	 }t|||}||krrtd| d || }t|}t|
|||||	d}|||fS )Nr      r   zmodel z' not implemented or not converging in Rseasonal_periodsr   r   r    damped_trend)paramr#   pytestskipget_params_from_Rr	   )requestr   r   ets_austourists_fit_results_Rets_oildata_fit_results_Rr'   r   r   r    r!   datar+   resultsname	results_Rr   r   r   r   setup_modelT   s0    
	r8   c                 C   s   t | ddddddS )Nr)   r   Tr*   r   r   r   r   r   austourists_model{   s    r9   c                 C   s   | j ddS NFdispfit)r9   r   r   r   austourists_model_fit   s    r?   c                 C   s   t | ddddS )Nr   Tr   r   r,   r   r   r   r   r   oildata_model   s    rA   c               D   C   s   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDgD} t jdEdFtdG}t | |S )HNgg}q>@g:w&3@gj3NCTQ9@gLjh;@giO	@@g4|7@g.4y<@gg#׏A@gySkB@g9@g0>@g@N0<@gИIRB@gN7@guO=@gz2?@glĖA@gk
dv3@g5^I=@g
ODA@gJD@glp:@g}֤G<@g"ĕwA@gU1SE@gٟ08@g<kU@@g8B@g[)F@g#Y=@gR,B@go=D@g|͓gH@gRF?@gXKB@gSC$kC@g[RI@ggQ?@gC+eD@gEfE@g+|K@g"S@@g2Η(E@gΥF@g^
M@gœz-kA@gp	1kF@ge *Q|G@gtoN@gɶǂ/C@gAإ|G@go
]I@gڝN@gDJXC@gj-UJ@g:\*K@gϰ fP@goD@guI@gL@gkPP@gëՇE@g@X}`aK@gP(M@gtX#sPR@gd*G@gQ?N@g>P@z
1999-01-01
2015-12-31freq)pd
date_ranger   Series)r4   indexr   r   r   r      s    Fr   c               1   C   s   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1g1} t j| t jd2d3d4d5d6S )7NgJ[@g:Z`@gy/a@gf*IGc@gZ+Wd@g[z4Sh@g)Yn@g
nzs@gB) x@gJ݄1z@g9%uv@gzT{@g iF}@gg#z@gӯ~@gzRA@g*X@g3{Bu@ggIn@gܶak@gFce@g		o@gDFk@gqLHq@g4^p@gLiu@gcƀz@gi9P{@g6{@g?CS{@g'"XS{@gX{@g9S|@gf|@g<4fz@gw|@gh/{@gޫV&z@gdHc~@gbF@gS5J@g#qp)@g8~@gq@g||@g3}@gӍbo@g@Q.@g5;H@Z1965Z2013ZYSrC   )rH   )rE   rG   rF   )r4   r   r   r   r      sf    3r   c              	   C   s   | j ddd}t|}W 5 Q R X i }|D ]F}|dk}i ||< || D ](}t|| | rH|| | || |< qHq,|D ]l}|| D ]^}dD ](}t|| | | d || | |< qdD ]&}t|| | | || | |< qqqx|S )Nrzutf-8)encodingTRUE)alphabetagammaphiZsigma2r   )states	initstate	residualsfittedforecast
simulation)openjsonloadlenfloatnpasarray)pathfZ	R_resultsr5   r!   Znew_keyr   keyr   r   r   obtain_R_results#  s(    r`   c                  C   s   t tjd d } t| S )S
    Dictionary of ets fit results obtained with script ``results/fit_ets.R``.
    r5   zfit_ets_results_seasonal.jsonpathlibPath__file__parentr`   r]   r   r   r   r2   E  s    
r2   c                  C   s   t tjd d } t| S )ra   r5   z fit_ets_results_nonseasonal.jsonrb   rg   r   r   r   r3   R  s    
r3   c              	   C   sP   t |}| tt| j| | jdd}W 5 Q R X |rLt|| j}||_|S )zD
    Fit the model with params as found by R's forecast package
    Fr;   )	r0   
fix_paramsdictzipZparam_namesr>   get_states_from_R	_k_statesrP   )r   r7   	set_stater'   r>   Zstates_Rr   r   r   fit_austourists_with_R_params_  s    rn   c                    s6    fdddD }|t  d 7 }t ttj|}|S )Nc                    s   g | ]} | qS r   r   )r$   r6   r7   r   r   r&   o  s     z%get_params_from_R.<locals>.<listcomp>)rL   rM   rN   rO   rQ   )listfilterr[   isfinite)r7   r'   r   ro   r   r0   m  s    r0   c                 C   sJ   |dkr"| d dd d|f }n$| d dd  }t |t|df}|S )Nr
   rP   r   )r[   ZreshaperY   )r7   Zk_statesxhat_Rr   r   r   rk   v  s
    rk   c                 C   s   | \}}}|j dd d S r:   r=   )r8   r   r'   r7   r   r   r   test_fit_model_austouritsts  s    
rt   c                 C   sT   | \}}}|j |dd\}}|d }t||j}t||ddd t||ddd d S )NTZ
return_rawrS   h㈵>rtolatol)smoothrk   rl   r   )r8   r   r'   r7   yhatZxhatyhat_Rrs   r   r   r   test_smooth_vs_R  s    
r}   c                 C   s>   | \}}}|j |ddd }||}t||d ddd d S )NTru   r   rR   rv   rw   )rz   Z
_residualsr   )r8   r   r'   r7   r{   rR   r   r   r   test_residuals_vs_R  s    

r~   c                 C   s^   | \}}}| |}|j d tdtj |j d  }|d d | }t||ddd d S )N   r
   loglikr   rv   rw   )loglikenobsr[   logpir   )r8   r   r'   r7   r   const	loglike_Rr   r   r   test_loglike_vs_R  s
    

&r   c                 C   sF   | \}}}t ||dd}|d}t|d }t||jddd d S )NTrm   r)   rT   MbP?-C6?rw   )rn   rT   r[   r\   r   values)r8   r   r'   r7   r>   Zfcastexpectedr   r   r   test_forecast_vs_R  s
    

r   c                 C   sd   | \}}}t ||dd}tddddggj}|jddd	|d
}t|d }t||jddd d S )NTr   g@9?gY,?gOQ?g[iY@r)   endr
   )anchorrepetitionsrandom_errorsrU   rv   rw   )rn   r[   r\   Tsimulater   r   )r8   r   r'   r7   r>   Zinnovsimr   r   r   r   test_simulate_vs_R  s    
r   c           
      C   s   | \}}}t r|jdkr|}nd }|jdd|d}|j d tdtj |j d  }|d d | }|j}	z|	|d	 kstW nf tk
r   |jdd|d}|j}	z|	|d	 kstW n& tk
r   t	rt
d
 n Y nX Y nX d S )NAAdATg:0yE>)r<   ZpgtolZstart_paramsr   r
   r   r   r   zKnown to fail on 32-bit Linux)r   r"   r>   r   r[   r   r   llfAssertionErrorr   r.   Zxfail)
r8   reset_randomstater   r'   r7   startr>   r   r   r   r   r   r   test_fit_vs_R  s&    
&r   c           	      C   st   | \}}}t ||dd}|j}|j|d |d}|d }t|d | |ddd |d }t||d  |d	d
d d S )NTr   r   )r   dynamicrS   rv   rw   rT   r   r   )rn   r   predictr   )	r8   r   r'   r7   r>   nZ
predictionr|   Z
forecast_Rr   r   r   test_predict_vs_R  s    
r   c              	   C   sb   ddg\}}t | dddd||d}||j}||d ks>t||d ksNt|d	 d
ks^td S )Ng\Q@z;B@g԰\A@r   Tknown)r   r   r,   initialization_methodinitial_levelinitial_trendr)         r   )r	   Z_internal_paramsZ_start_paramsr   )r   r   r   r   Zinternal_paramsr   r   r   test_initialization_known  s    	r   c                 C   sn   t | ddddd}t | ddddd}|jdd}|jdd}|jj}|jj}t|dd  |dd  d	d
 d S )Nr   T	estimated)r   r   r,   r   	heuristicFr;   
   g      ?rx   )r	   r>   fittedvaluesr   r   )r   Zmodel_estimatedZmodel_heuristicZfit_estimatedZfit_heuristicZyhat_estimatedZyhat_heuristicr   r   r   test_initialization_heuristic  s&    r   c              	   C   s   ddg}t | dddd|id}|jdd}|jdks8tt | dddd}|ddi |jdd}W 5 Q R X |jdks|tt|j|j |  |ddi}|jdkstt|j|j |  d S )	NgGz?r   Tsmoothing_trend)r   r   r,   ZboundsFr;   r@   )	r	   r>   r   r   rh   r   r'   summaryfit_constrained)r   rM   Zmodel1Zfit1model2Zfit2Zfit3r   r   r   test_bounded_fit!  s(    r   c                 C   sJ   t | dddd}|jdkstzt | ddd}W n tk
rD   Y nX d S )Nr   )r   r   r    r)   r   )r    r+   )r	   r+   r   
ValueError)r   r   r   r   r   test_seasonal_periods<  s    r   c                 C   s   | }t |jddddj|jddddj t |jddddj|jddddj |jddd |jddtjjd	 |jddtj d	 |jddtjddd	 |jddd
d	 |jddddj}|jddtj	ddj}t
||kstdS )zS
    check whether all keywords are accepted and work without throwing errors.
    r)   r   )r   random_staterB   r   r   )r   )r   r   Z	bootstrap)r   r   N)r   r   r   scipystatsZnormr[   randomZrandnRandomStateallr   )r?   r>   resZres2r   r   r   test_simulate_keywordsH  s*      
r   c                 C   s   | }|j ddd}t|dks"t|j ddd}t|dks@t|j dddd}t|dks`t|j dd	d
d}t|dkst|j dd	d
d}t|dkst|j ddd}t|dkstd S )Nr   r   r   r            r   r   r      TF   G   P   T   r   )r   rY   r   )r?   r>   predr   r   r   test_predict_rangesg  s    r   c                 C   sL   | j dd}|  | d | j dd}|  | ddi}|  d S )NFr;   r   r   g?)r>   r   Zset_initialization_methodr   )r9   r>   r   r   r   test_summary  s    
r   c                 C   s2   | j | j}| j j| jddd}t||d d S )NFTZapprox_complex_stepZapprox_centeredr)   )r   Zscorer'   r   )r?   Zscore_csZscore_fdr   r   r   
test_score  s    r   c                 C   s&   | j | j | j j| jddd d S )NFTr   )r   Zhessianr'   )r?   r   r   r   test_hessian  s    r   c                 C   sN  | j dddd}| }t|d jdks.ttt|d  sHt| j dddd}| }t|d jdksvttt|d  st| j ddd	d}| }t|d jd
ksttt|d  st| j dd	d}| }t|d jdksttt|d  s"t| j dd	d}| }t|d jdksPttt|d  slt| j dd	d}| }t|d jdksttt|d  st| j dd	d}| }t|d jdksttt|d  s t| j d	d	d}| }t|d jdks.ttt|d  sJtd S )Nr   r   (   r   mean)   r      r   Q   C   r      D      E      O   r   r
   )get_predictionsummary_framerY   r   r   r[   r   isnan)r?   r   r   r   r   r   test_prediction_results  s@    r   c                 C   s   t | dddddd}|jdd}tj| dddd|j|j|jd d d d	}||j|j	|j
|jd
 | }W 5 Q R X |d |d ||fS )Nr)   r   Tr*   Fr;   r   r   )r   r,   r    r   r   r   initial_seasonal)smoothing_levelr   smoothing_seasonaldamping_trendljungbox)r	   r>   
statespaceExponentialSmoothingr   r   r   rh   r   r   r   r   test_serial_correlation)r   Z	ets_modelets_resultsZstatespace_modelstatespace_resultsr   r   r   statespace_comparison  s<    

r   c                 C   s   | \}}t |j|j t |j|j t |jj|jj t |jdd|jdd t |jdd|jdd |jddd }|jddd }tst	|d |d dd t	|d |d d	d d S )
Nr   )methodZ
jarqueberaZbreakvarr   皙?r   r
   gffffff?)
r   r   Zscaler   r   r   Ztest_normalityZtest_heteroskedasticityr   r   )r   r   r   Zets_hetZstatespace_hetr   r   r   test_results_vs_statespace  s0     



r   c                 C   s   | \}}|j dddd}|j dddd}| }| }t|d jd d |d jd d  t|d jdd  |d jdd  d |j ddd	}|j ddd	}| }| }t|d j|d jd d S )
Nr   r   r   r   ir)   <   r   r   )r   r   r   r   )r   r   r   Zets_predZstatespace_predZstatespace_summaryZets_summaryr   r   r   %test_prediction_results_vs_statespace  s6        r   c                 C   sn  t | dddjdd}|jddd}| }|jddtdd	d
d}| }t|d j|d jddd dd lm} |	d t
dD ]&}|j|jjjd d |f ddd q|j| dd  ddd |j|d ddd |j|d ddd |j|d ddd |j|d dd d |j|d dd!d |  t|d j|d jd"d"d t|d j|d jd"d"d d S )#Nr   )r   r   Fr;   r   7   r       .Ar   	simulatedr   r   simulate_repetitionsr   r   r   mean_numericalr   rw   r   TkAgg  grey皙?colorrL   -r4   label--pi_lower:	sim lower.-exact lowerpi_upper	sim upperexact upperr   )r	   r>   r   r   intr   r   matplotlib.pyplotpyplotswitch_backendrangeplot_resultssimulation_resultsilocshow)r   r>   
pred_exactsummary_exactpred_simsummary_simpltr   r   r   r    test_prediction_results_slow_AANC  sX    
r  c                 C   sv  t | ddddddjdd}|jddd	}| }|jddtd
ddd}| }t|d j|d jddd dd lm} |	d t
dD ]&}|j|jjjd d |f ddd q|j|jdd  ddd |j|d ddd |j|d ddd |j|d dd d |j|d! dd"d |j|d! dd#d |  t|d j|d jd$d%d t|d! j|d! jd$d%d d S )&Nr   Tr)   )r   r   r    r,   r+   Fr;   r   K   r   r   r   r   r   r   r   r   rw   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r  r  r  r  g{Gz?r   )r	   r>   r   r   r  r   r   r  r  r  r	  r
  r  r  r  endogr  )r   r>   r  r  r  r  r  r   r   r   r   !test_prediction_results_slow_AAdA~  sj    
r  c                  C   s   t jd} | d}| }td|jd D ],}||d  d||d    ||  ||< q.|dd  }tj|dd}|	 }t
|	 }t|jd |jd	d	d
 t|jdd  |jdd  d	d	d
 d S )Nr   i.  r
   r      r   )r   r   r   rw   r   )r[   r   r   Zstandard_normalcopyr	  shapeholtwintersr   r>   r	   r   r'   r   r   )geneyr   r%   r   Zets_resr   r   r   test_convergence_simple  s0    
* 	   r  c                 C   s   | j }G dd d}d|_|d|_d}||}|d|_||}t||d d|_|d|_d}||}|d	|_||}t||d d S )
Nc                   @   s   e Zd Zdd ZdS )z3test_exact_prediction_intervals.<locals>.DummyModelc                 S   s
   || _ d S r   )r"   )selfr"   r   r   r   __init__  s    z<test_exact_prediction_intervals.<locals>.DummyModel.__init__N)__name__
__module____qualname__r!  r   r   r   r   
DummyModel  s   r%  g+?ZAAdNr   ZAANr   r   ZAAA)r  r   r   Z_relative_forecast_variancer   )r?   r>   r%  stepsZs_AAdNZs_AANZs_AAdAZs_AAAr   r   r   test_exact_prediction_intervals  s     







r'  c                 C   s   | \}}}t t|j|j|j|j|j|jd}|	|}|j
dd}|j
dd}t|jd |jd  |j|j|jdd}|j|j|jd dd}	|jdd}
|jdd}t|
jd	 |jd	  d S )
Nr*   r
   )r&  r   r   )r   r   r   g?)rL   )r   r   )r	   rE   rG   r  r+   r   r   r    r,   rz   rT   r   r  r   r   r   )r8   r   r'   r7   r   r   Zfcast1Zfcast2Zpred1Zpred2Zdf1Zdf2r   r   r   test_one_step_ahead  s,    


r(  r   r   r    r   	   r   c                 C   s:   t | d | ||ddd }tt|j s6td S )Nr)   r   )r   r    r+   r   )r	   r>   r[   anyr   r'   r   )r   r   r    r   r   r   r   r   (test_estimated_initialization_short_data  s    

r+  r   r   r   c                 C   sZ   t d}t t|d }t|dd|d }t|j|j |ddd |j	dk sVt
d S )	Ng      (@d   r   r   )r    r+   r   r   )ry   rx   gư>)r[   Zarangearrayrp   r	   r>   r   r   r   Zmaer   )r   r   r    Ztime_seriesr   r   r   r   test_seasonal_order  s    


r.  c               	   C   sL   dddddg} t | dddd	d	d
d}| j}t|r<t|dksHtd S )Ng     @[@g     @Y@g      Z@g     V@g     @Z@r   g      Y@g        r   T)r  r   r   r   r   r   r,   r   )r	   r>   aiccr[   rr   r   )r  r   r/  r   r   r   test_aicc_0_dof2  s    	
r0  )F)F)T__doc__Zstatsmodels.compat.pandasr   Zstatsmodels.compat.platformr   r   	itertoolsr   rW   rc   Znumpyr[   Znumpy.testingr   r   ZpandasrE   r.   Zscipy.statsr   Z)statsmodels.tsa.exponential_smoothing.etsr	   Zstatsmodels.tsa.holtwintersZtsar  Z0statsmodels.tsa.statespace.exponential_smoothingr   Zexponential_smoothingr   ZERRORSZTRENDSZ	SEASONALSZDAMPEDrp   ZMODELS_DATA_SEASONALZMODELS_DATA_NONSEASONALr#   ZALL_MODELS_AND_DATAZALL_MODEL_IDSZfixturer8   r9   r?   rA   r   r   r`   r2   r3   rn   r0   rk   rt   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markr/   r  r  r  r'  r(  Zparametrizer+  r.  r0  r   r   r   r   <module>   s   


&


	
M
>"


	
	
2
$ (
:
?
