U
    md~                     @   s  d 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! dpd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& Z.dqd'd(Z/d)d* Z0d+d, Z1d-d. Z2d/d0 Z3d1d2 Z4d3d4 Z5d5d6 Z6d7d8 Z7d9d: Z8d;d< Z9d=d> Z:d?d@ Z;dAdB Z<dCdD Z=dEdF Z>dGdH Z?dIdJ Z@dKdL ZAdMdN ZBdOdP ZCej%dQdR ZDdSdT ZEdUdV ZFejGjHdWdX ZIejGjHdYdZ ZJd[d\ ZKd]d^ ZLd_d` ZMejGNdaddbgejGNdcddbgejGNdddedfgdgdh ZOejGNdidjdkgdldm ZPdndo ZQdS )rz
Author: Samuel Scherrer
    )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   i/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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_nameC   s    r"   c                 C   s&   g | ]}t |d d |d f qS )Nr
   )r"   ).0modr   r   r   
<listcomp>N   s    r%   )paramsZ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_modelS   s0    
	r6   c                 C   s   t | ddddddS )Nr'   r   Tr(   r   r   r   r   r   austourists_modelz   s    r7   c                 C   s   | j ddS NFdispfit)r7   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    r?   c               D   C   s   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDgD} t jdEdFdGdH}t | |S )INgg}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Qfreq)pd
date_rangeSeries)r2   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ASrB   )rG   )rD   rF   rE   )r2   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_resultsr3   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``.
    r3   zfit_ets_results_seasonal.jsonpathlibPath__file__parentr_   r\   r   r   r   r0   D  s    
r0   c                  C   s   t tjd d } t| S )r`   r3   z fit_ets_results_nonseasonal.jsonra   rf   r   r   r   r1   Q  s    
r1   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
    Fr9   )	r.   
fix_paramsdictzipZparam_namesr<   get_states_from_R	_k_statesrO   )r   r5   	set_stater&   r<   Zstates_Rr   r   r   fit_austourists_with_R_params^  s    rm   c                    s6    fdddD }|t  d 7 }t ttj|}|S )Nc                    s   g | ]} | qS r   r   )r#   r4   r5   r   r   r%   n  s     z%get_params_from_R.<locals>.<listcomp>)rK   rL   rM   rN   rP   )listfilterrZ   isfinite)r5   r&   r   rn   r   r.   l  s    r.   c                 C   sJ   |dkr"| d dd d|f }n$| d dd  }t |t|df}|S )Nr	   rO   r   )rZ   ZreshaperX   )r5   Zk_statesxhat_Rr   r   r   rj   u  s
    rj   c                 C   s   | \}}}|j dd d S r8   r;   )r6   r   r&   r5   r   r   r   test_fit_model_austouritsts  s    
rs   c                 C   sT   | \}}}|j |dd\}}|d }t||j}t||ddd t||ddd d S )NTZ
return_rawrR   h㈵>rtolatol)smoothrj   rk   r   )r6   r   r&   r5   yhatZxhatyhat_Rrr   r   r   r   test_smooth_vs_R  s    
r|   c                 C   s>   | \}}}|j |ddd }||}t||d ddd d S )NTrt   r   rQ   ru   rv   )ry   Z
_residualsr   )r6   r   r&   r5   rz   rQ   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   ru   rv   )loglikenobsrZ   logpir   )r6   r   r&   r5   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rl   r'   rS   MbP?-C6?rv   )rm   rS   rZ   r[   r   values)r6   r   r&   r5   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_errorsrT   ru   rv   )rm   rZ   r[   Tsimulater   r   )r6   r   r&   r5   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   rZ   r   r   llfAssertionErrorr   r,   Zxfail)
r6   reset_randomstater   r&   r5   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   dynamicrR   ru   rv   rS   r   r   )rm   r   predictr   )	r6   r   r&   r5   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   	heuristicFr9   
   g      ?rw   )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boundsFr9   r>   )	r   r<   r   r   rg   r   r&   summaryfit_constrained)r   rL   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_stater@   r   r   )r   )r   r   Z	bootstrap)r   r   N)r   r   r   scipystatsZnormrZ   randomZrandnRandomStateallr   )r=   r<   resZres2r   r   r   test_simulate_keywordsG  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   rX   r   )r=   r<   predr   r   r   test_predict_rangesf  s    r   c                 C   sL   | j dd}|  | d | j dd}|  | ddi}|  d S )NFr9   r   r   g?)r<   r   Zset_initialization_methodr   )r7   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_framerX   r   r   rZ   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(   Fr9   r   r   )r   r*   r   r   r   r   initial_seasonal)smoothing_levelr   smoothing_seasonaldamping_trendljungbox)r   r<   
statespaceExponentialSmoothingr   r   r   rg   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   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   Fr9   r   7   r       .Ar   	simulatedr   r   simulate_repetitionsr   r   r   mean_numericalr   rv   r   TkAgg  grey皙?colorrK   -r2   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_AANB  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)   Fr9   r   K   r   r   r   r   r   r   r   r   rv   r   r   r   r   r   r   r   r2   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   rv   r   )rZ   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?)rK   )r   r   )r   rD   rF   r  r)   r   r   r   r*   ry   rS   r   r  r   r   r   )r6   r   r&   r5   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<   rZ   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   )rx   rw   gư>)rZ   Zarangearrayro   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<   aiccrZ   rq   r   )r  r   r/  r   r   r   test_aicc_0_dof1  s    	
r0  )F)F)R__doc__Zstatsmodels.compat.platformr   r   	itertoolsr   rV   rb   numpyrZ   Znumpy.testingr   r   ZpandasrD   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DAMPEDro   ZMODELS_DATA_SEASONALZMODELS_DATA_NONSEASONALr"   ZALL_MODELS_AND_DATAZALL_MODEL_IDSZfixturer6   r7   r=   r?   r   r   r_   r0   r1   rm   r.   rj   rs   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
$ (
:
?
