U
    Ãmœdƒe  ã                   @   sÀ  d Z ddlZddlZddlmZmZmZ ddlZ	ddl
Z
ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ e ¡ jZe	jd	d
dd�e_dTdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"d d!„ Z#d"d#„ Z$d$d%„ Z%d&d'„ Z&d(d)„ Z'd*d+„ Z(d,d-„ Z)d.d/„ Z*d0d1„ Z+d2d3„ Z,e
j-j.d4d5„ ƒZ/e
j- 0d6d7dg¡d8d9„ ƒZ1d:d;„ Z2d<d=„ Z3d>d?„ Z4d@dA„ Z5dBdC„ Z6dDdE„ Z7dFdG„ Z8dHdI„ Z9dJdK„ Z:dLdM„ Z;dNdO„ Z<dPdQ„ Z=dRdS„ Z>dS )UzV
Tests for structural time series models

Author: Chad Fulton
License: Simplified-BSD
é    N)Úassert_equalÚassert_allcloseÚassert_raises)Ú	macrodata)ÚSpecificationWarning)Ú
structural)ÚUnobservedComponents)Úresults_structuralú
1959-01-01z
2009-07-01ÚQS)ÚstartÚendÚfreqFc              
   C   s  t t| ƒ}|d D �]î}| ¡ }| |d ¡ ||d< t ¡ }| dd ¡}|d k	rhtjdttƒ|d�|_	d|krœt
 |d ¡}|d d	kr”|j ¡ }||d< t|d
 f|Ž}|j | | |j¡¡}	t|j|	ƒ | |d ¡}
|d k	rî|d n
|j	jd }d|k�r|d }n:|dk�rd}n*|dk�r.d}n|dk�r>d}n
dt
jf}t|jdt
j |d  dt
j |d  fƒ | dd¡}| dd¡}|�r¸|
j ¡ |
jd t
 dt
j ¡  }n|
j|
jd …  ¡ }t||d ||d� zRdd lm} zddl m!} |ƒ  W n t"k
�r   Y nX | #¡ }|
j$|d� W n t"k
�rH   Y nX t%j&dd��¦ i }d |k�rr|d  |d < |j'f | d!d ¡d"d#œ|—Ž}|�r¼|j ¡ |jd t
 dt
j ¡  }n|j|
jd …  ¡ }||d k�rðt||d d$d%� | (¡  W 5 Q R X qd S )&NÚmodelsÚkwargsÚuse_exact_diffuser   r
   )r   Úperiodsr   ÚexogZrealgdpÚnumpyÚunempÚparamsr   Úcycle_period_boundsÚA)g      ø?é   ÚQ)g      @é0   ÚM)g      2@é�   é   é   ÚrtolçH¯¼šò×z>Úatolç      à?Úllf)r    r"   )Úregister_matplotlib_converters)ÚfigT©ÚrecordÚmaxiterÚstart_paramséÿÿÿÿ)r*   Údispg-Cëâ6?)r    ))Úgetattrr	   ÚcopyÚupdateÚdtaÚpopÚpdÚ
date_rangeÚlenÚindexÚnpÚlogÚvaluesÚsqueezer   r*   Ztransform_paramsZuntransform_paramsr   ÚfilterÚfreqstrÚinfr   Úcycle_frequency_boundÚpiÚgetÚllf_obsÚsumÚnobs_diffuseÚloglikelihood_burnZmatplotlib.pyplotZpyplotZpandas.plottingr%   ÚImportErrorZfigureZplot_componentsÚwarningsÚcatch_warningsÚfitÚsummary)Únamer   ÚtrueÚmodelr   r8   r   r   ÚmodZ	roundtripZres_truer;   r   r    r"   Zres_llfZpltr%   r&   Z
fit_kwargsÚres© rN   úi/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_structural.pyÚrun_ucm   s”    
ÿ

ÿ





ÿÿÿ

ÿÿÿrP   c                 C   s   t dƒ t ddd� d S )NÚ	irregularT©r   ©rP   ©Úclose_figuresrN   rN   rO   Útest_irregularŽ   s    rV   c              	   C   s@   i t _t}d}tj||d�� tdƒ tddd� W 5 Q R X d S )Nz Specified model does not contain©ÚmatchZfixed_interceptTrR   ©r   Ú__warningregistry__r   ÚpytestÚwarnsrP   ©rU   ÚwarningrX   rN   rN   rO   Útest_fixed_intercept“   s    r_   c                 C   s   t dƒ t ddd� d S )NZdeterministic_constantTrR   rS   rT   rN   rN   rO   Útest_deterministic_constant�   s    r`   c                 C   s   t dƒ t ddd� d S )NZrandom_walkTrR   rS   rT   rN   rN   rO   Útest_random_walk¢   s    ra   c                 C   s   t dƒ t ddd� d S )NZlocal_levelTrR   rS   rT   rN   rN   rO   Útest_local_level§   s    rb   c              	   C   s:   t }d}tj||d�� tdƒ tddd� W 5 Q R X d S ©Núirregular component addedrW   Zfixed_slopeTrR   )r   r[   r\   rP   r]   rN   rN   rO   Útest_fixed_slope¬   s
    re   c              	   C   s@   i t _t}d}tj||d�� tdƒ tddd� W 5 Q R X d S rc   rY   r]   rN   rN   rO   Útest_fixed_slope_warn´   s    rf   c                 C   s   t dƒ t ddd� d S )NZdeterministic_trendTrR   rS   rT   rN   rN   rO   Útest_deterministic_trend¿   s    rg   c                 C   s   t dƒ t ddd� d S )NZrandom_walk_with_driftTrR   rS   rT   rN   rN   rO   Útest_random_walk_with_driftÄ   s    rh   c                 C   s   t dƒ t ddd� d S )NZ local_linear_deterministic_trendTrR   rS   rT   rN   rN   rO   Ú%test_local_linear_deterministic_trendÉ   s    ri   c                 C   s   t dƒ t ddd� d S )NZlocal_linear_trendTrR   rS   rT   rN   rN   rO   Útest_local_linear_trendÎ   s    rj   c                 C   s   t dƒ t ddd� d S )NZsmooth_trendTrR   rS   rT   rN   rN   rO   Útest_smooth_trendÓ   s    rk   c                 C   s   t dƒ t ddd� d S )NZrandom_trendTrR   rS   rT   rN   rN   rO   Útest_random_trendØ   s    rl   c                 C   s   t dƒ t ddd� d S )NZcycle_approx_diffuseÚcycleTrR   rS   rT   rN   rN   rO   Ú
test_cycleÝ   s    rn   c                 C   s   t dƒ t ddd� d S )NZseasonal_approx_diffuseÚseasonalTrR   rS   rT   rN   rN   rO   Útest_seasonalâ   s    rp   c                 C   s   t dƒ t ddd� d S )NZfreq_seasonal_approx_diffuseÚfreq_seasonalTrR   rS   rT   rN   rN   rO   Útest_freq_seasonalç   s    rr   c                 C   s   t dƒ t ddd� d S )NZreg_approx_diffuseÚregTrR   rS   rT   rN   rN   rO   Útest_regì   s    rt   c                 C   s   t dƒ t ddd� d S )NZ
rtrend_ar1TrR   rS   rT   rN   rN   rO   Útest_rtrend_ar1ñ   s    ru   c                 C   s   t dƒ t ddd� d S )NZ-lltrend_cycle_seasonal_reg_ar1_approx_diffuseZlltrend_cycle_seasonal_reg_ar1TrR   rS   rT   rN   rN   rO   Ú#test_lltrend_cycle_seasonal_reg_ar1ö   s    rv   r   Tc              	   C   s  t  d¡d }|d }|d d d…  d7  < |dd d…  d8  < tjdd��B t|d|d| d	�}|jd
d�}t|d|d| d	�}|jd
d�}W 5 Q R X t|jjd ddd� t|j	d ddd� | rèt
|jƒ t|jdƒ t|jdƒ nt|jdƒ t|jdƒ d S )Néd   ç      ð?r   g{®Gáz„?r   Tr'   F)rQ   r   Úmle_regressionr   r+   ©r,   )r   r+   r#   gñhãˆµøä>©r"   r   )r6   ÚarangerE   rF   r   rG   r   Zregression_coefficientsÚfilteredr   ÚprintÚpredicted_diffuse_state_covr   rB   rC   )r   Úendogr   Úmod1Úres1Úmod2Úres2rN   rN   rO   Útest_mle_regü   s8     þ þþ
r…   c               
   C   s  i t _ddg} t}d}tj||d�� t| ƒ}t|jdƒ W 5 Q R X t t	¡� t| dƒ W 5 Q R X t}d}tj||d��  t| ddd	�}t|jd
ƒ W 5 Q R X ddddg}|D ]<}|di}t}d}tj||d�� t| d
f|Ž W 5 Q R X q°t t	¡� t| dd� W 5 Q R X d S )Nr   r   rd   rW   rQ   zinvalid specz!Trend component specified withoutT)ÚtrendrQ   údeterministic trendr†   Ústochastic_levelÚstochastic_trendz may be overridden when the trend)ro   )
r   rZ   r   r[   r\   r   r   Útrend_specificationÚraisesÚ
ValueError)r€   r^   rX   rL   Ztrend_attributesÚ	attributer   rN   rN   rO   Útest_specifications  s2    ÿrŽ   c                  C   sî   t dƒ} tjd }tjd }tj d¡ tjt | ¡t | ¡d f }tjj| d�}t 	| d ¡}t
d| ƒD ]8}|d	 ||  |d ||d    ||  ||d < ql|dd … }|t ||¡7 }t||dd
�}t|jdddddgdd� d S )Ng     ˆÃ@)é
   éþÿÿÿ)r#   çš™™™™™¹?iÒ  rx   ©Úsizer   r   r   )r   Úautoregressiver#   r‘   r�   r�   r{   )Úintr6   Úr_ÚrandomÚseedZc_Úonesr|   ÚnormalÚzerosÚrangeÚdotr   r   r*   )ÚnobsÚbetaÚphir   Zepsr€   ÚtrL   rN   rN   rO   Útest_start_paramsJ  s    

6r¢   c                  C   sz   t  d¡d } t  d¡}t| |ddd�}| dddg¡}|jdt  dd	¡d d …t jf d
�}t  dd	¡d }t||ƒ d S )Né2   r�   Ú	dconstanté   )r   Úlevelro   gVçž¯Ò<r   r   é<   ©r   )r6   r|   r   ÚsmoothÚforecastZnewaxisr   )r€   r   rL   rM   ÚactualÚdesiredrN   rN   rO   Útest_forecastd  s    
$r­   c               
   C   sø  d} d}t j d¡ t jj| |fd�}t j|d d…df< t jj| dfd�}t jj| dfd�}tjdd	| d
�}tj||d�}tj| 	¡ |d�}tj||d�}t
|d|d�t
|d|d�t
|d|d�t
|d|d�t
|d|d�t
|d|d�g}	|	D ]Þ}
|
j |
jdd�}| ¡  | ¡  |jdd� | ¡  t jjd|
jfd�}|jd|d� |jd|d� t jjd|
jfd�}t t¡� |jd|d� W 5 Q R X t jjd|
jd fd�}t t¡� |jd|d� W 5 Q R X qêt t¡� t
|dt  d¡d� W 5 Q R X d S )Né   r   i¸  r’   r¥   r   r   z
1970-01-01r   )r   r   )r5   Úllevelr¨   Frz   T)Zdynamic)Zstepsr   )r�   r¥   )r6   r—   r˜   rš   Únanr2   r3   Ú	DataFrameZSeriesr9   r   r*   rG   rH   ÚpredictZget_predictionZk_exogrª   Zget_forecastr[   r‹   rŒ   r›   )rž   Úk_endogr€   Zexog1Zexog2r5   Zendog_pdZexog1_pdZexog2_pdr   rL   rM   Zoos_exogrN   rN   rO   Útest_misc_exogp  sH    ú	r´   c                  C   sh   t j d¡ t t jjdd�¡} t | d¡}| |j	¡}|j
dddgd�}t|j t dg¡¡dƒ d S )	Niç r£   r’   r¯   r   Úa)r   r   r5   T)r6   r—   r˜   r2   r±   rš   r   r   r©   r*   r²   r   r5   ÚequalsÚIndex)r€   rL   rM   ÚoutrN   rN   rO   Útest_predict_custom_index£  s    r¹   c                  C   sâ  t  ¡ } t| d dddidddœgdd	d
gdddgdd�}dddddd	tj d dg}| |¡ t|jdƒ t|jdƒ t|j	dƒ t
|jjdƒ t|jt|ƒƒ tjddgddddgddddddgddgf  dd¡}t
|jjd d …d d …df |ƒ tt ddgddgg¡t ddddgddddgddddgddddgg¡t t d	tj d d ¡t d	tj d d ¡ddddgt d	tj d d ¡ t d	tj d d ¡ddddgddt d	tj d	 d ¡t d	tj d	 d ¡ddgddt d	tj d	 d ¡ t d	tj d	 d ¡ddgddddt d	tj d ¡t d	tj d ¡gddddt d	tj d ¡ t d	tj d ¡gg¡t dt d	tj d ¡ dt d	tj d ¡ gdt d	tj d ¡ dt d	tj d ¡ gg¡gƒ}t
|jjd d …d d …df |dd� t d¡}t d	¡|dd	…dd	…f< t d¡|d	d…d	d…f< t d	¡|dd …dd …f< t
|jjd d …d d …df |ƒ tt |dd… ¡t d¡|d  t d	¡|d  gƒ}t
|jjd d …d d …df |ƒ d S )Nr   ÚlltrendÚperiodr¥   é	   é   )r»   Z	harmonicsTr   é   F)r¦   rq   rm   r   Údamped_cycleÚstochastic_freq_seasonalÚstochastic_cycler   é   é   g      >@gÍÌÌÌÌÌì?é   é   r   r+   g      "@g      @gÍÌÌÌÌÌì¿r!   r{   )rÄ   rÅ   r�   )r0   r.   r   r6   r>   r/   r   Úk_statesZk_state_covrC   r   ÚssmÚk_posdefZk_paramsr4   r–   ZreshapeÚdesignÚ__direct_sumÚarrayÚcosÚsinÚ
transitionr›   ÚeyeÚ	selectionZdiagÚ	state_cov)r8   rK   r   Zexpected_designZexpected_transitionZexpected_selectionZexpected_state_covrN   rN   rO   Ú(test_matrices_somewhat_complicated_model¬  sŽ    ÿø   ü


ý ý 
ÿ


ý:868.0û2.ÿó  ÿ
 ýrÒ   c                 C   sn   t jdd„ | D ƒdd�}t  |¡}d}| D ]>}|j\}}||ksDt‚||||| …||| …f< ||7 }q*|S )zLCompute the matrix direct sum of an iterable of square numpy 2-d arrays
    c                 S   s   g | ]
}|j ‘qS rN   )Úshape)Ú.0ÚmrN   rN   rO   Ú
<listcomp>÷  s     z __direct_sum.<locals>.<listcomp>r   )Zaxis)r6   rA   r›   rÓ   ÚAssertionError)Zsquare_matricesZ	new_shapeZ	new_arrayÚoffsetrÕ   ÚrowsÚcolsrN   rN   rO   rÊ   ô  s    


rÊ   c            	      C   s  d} t  | ¡d }t  | ¡}t|d|d�}| ddg¡}d}t  d¡}t  d¡}t|jd|d�dƒ t|jd|d�dƒ t|jd|d�dƒ d}t  |¡}t  |df¡}t|j||d�dƒ t|j||d�dƒ tt|j|dd� tt|j|dd	gd� tt|j|t  |d	f¡d� d S )
Nrw   ç       @rQ   r¨   rx   r   )r   r   r�   r   )r6   r™   r   r©   r   rª   r   rŒ   )	rž   r€   r   rL   rM   Zexog_fcast_scalarZexog_fcast_1dimZexog_fcast_2dimÚhrN   rN   rO   Útest_forecast_exog  s&    



rÝ   c                 C   s¤   ddddddddd	d
ddddddddddddg}dddddddddd d!g}|D ]}t t||ƒt| |ƒƒ qN|D ]}t t|j|ƒt| j|ƒƒ qnt | ¡ |  ¡ ƒ d S )"Nr¦   r†   Zseasonal_periodsro   Zfreq_seasonal_periodsZfreq_seasonal_harmonicsrq   rm   Zar_orderr”   rQ   rˆ   r‰   Ústochastic_seasonalrÀ   rÁ   r¿   ry   rŠ   Z
trend_maskZ
regressionr=   rž   r³   rÆ   rÈ   Zobs_interceptrÉ   Zobs_covZstate_interceptrÎ   rÐ   rÑ   )r   r-   rÇ   Ú_get_init_kwds)rL   rƒ   ÚattrsZ	ssm_attrsÚattrrN   rN   rO   Úcheck_equivalent_models"  sP                   ù
         þrâ   c                  C   sö   d} t  | ¡d }t  | ¡}ddddddd	d
ddddddddddddddg}|D ] }t||dd|d�}t|fd|i| ¡ —Ž}t||ƒ t|||dd�}t|fd|i| ¡ —Ž}t||ƒ t|||dddd�}t|fd|i| ¡ —Ž}t||ƒ qPd S ) Nrw   rÛ   rQ   Zntrendzfixed interceptzdeterministic constantr¤   zlocal levelr¯   zrandom walkZrwalkzfixed sloper‡   Zdtrendz local linear deterministic trendZlldtrendzrandom walk with driftZrwdriftzlocal linear trendrº   zsmooth trendZstrendzrandom trendZrtrendr   T)r¦   ro   rÞ   r   r   r   )r¦   r   r”   )r¦   r   rm   rÁ   r¿   )r6   r™   r   rß   râ   )rž   r€   r   Zlevelsr¦   rL   rƒ   rN   rN   rO   Útest_recreate_model9  sZ    
                ú ÿ
ÿ
 þrã   c            	      C   s  t  d¡} t  | ¡}ddddg}t| d|d�}| |¡}t| d d… d|d d… d�}| |¡}|j| dd … |dd … d�}t|j|jƒ t|j	|j	ƒ dD ]}tt
||ƒt
||ƒƒ qždD ]}tt
||ƒt
||ƒƒ q¾t|jd	t  d	¡d�|jd	t  d	¡d�ƒ d S )
Nrw   rx   r‘   r¯   r¨   r£   ©rž   r$   r@   rC   ©Zfiltered_stateZfiltered_state_covZpredicted_stateZpredicted_state_covZ	forecastsZforecasts_errorZforecasts_error_covZstandardized_forecasts_errorZforecasts_error_diffuse_covr   Zscaled_smoothed_estimatorZscaled_smoothed_estimator_covZsmoothing_errorZsmoothed_stateZsmoothed_state_covZsmoothed_state_autocovZ smoothed_measurement_disturbanceZsmoothed_state_disturbanceZ$smoothed_measurement_disturbance_covZsmoothed_state_disturbance_covr�   )r6   r|   Ú	ones_liker   r©   Úappendr   Úspecificationr   Úcov_params_defaultr-   rª   r™   ©	r€   r   r   r�   r‚   rƒ   r„   Úres3rá   rN   rN   rO   Útest_append_results^  s"    



ÿrì   c            
      C   sþ   t  d¡} t  | ¡}ddddg}t| d|d�}| |¡}t| d d… d|d d… d�}| |¡}|j| dd … |dd … d�}t|j|jdd … ƒ dD ]6}t||ƒ}	|	d k	r¾|	ddd …f }	t	t||ƒ|	ƒ q˜t|j
d	t  d	¡d�|j
d	t  d	¡d�ƒ d S )
Nrw   rx   r‘   r¯   r¨   r£   rå   .r�   )r6   r|   ræ   r   r©   Úextendr   r@   r-   r   rª   r™   )
r€   r   r   r�   r‚   rƒ   r„   rë   rá   r¬   rN   rN   rO   Útest_extend_resultsƒ  s"    




ÿrî   c            	      C   s  t  d¡} t  | ¡}ddddg}t| d d… d|d d… d�}| |¡}t| dd … d|dd … d�}| |¡}|j| d d… |d d… d�}t|j|jƒ t|j	|j	ƒ dD ]}tt
||ƒt
||ƒƒ q®dD ]}tt
||ƒt
||ƒƒ qÎt|jd	t  d	¡d�|jd	t  d	¡d�ƒ d S )
Nrw   rx   r‘   r£   r¯   r¨   rä   rå   r�   )r6   r|   ræ   r   r©   Úapplyr   rè   r   ré   r-   rª   r™   rê   rN   rN   rO   Útest_apply_results¨  s"    



ÿrð   )F)?Ú__doc__rE   r   r6   Znumpy.testingr   r   r   Zpandasr2   r[   Zstatsmodels.datasetsr   Zstatsmodels.tools.sm_exceptionsr   Zstatsmodels.tsa.statespacer   Z%statsmodels.tsa.statespace.structuralr   Z(statsmodels.tsa.statespace.tests.resultsr	   Zload_pandasÚdatar0   r3   r5   rP   rV   r_   r`   ra   rb   re   rf   rg   rh   ri   rj   rk   rl   rn   rp   rr   rt   ru   ÚmarkZslowrv   Zparametrizer…   rŽ   r¢   r­   r´   r¹   rÒ   rÊ   rÝ   râ   rã   rì   rî   rð   rN   rN   rN   rO   Ú<module>   s`   

u


"+3	H %%%