U
    mde                     @   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rt
|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rt||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@         rtolHz>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 | rt
|j t|jd t|jd nt|jd t|jd d S )Nd         ?r   g{Gz?r   Tr'   F)rQ   r   mle_regressionr   r+   r,   )r   r+   r#   gh㈵>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 qt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 )N2   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 qt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      @gr!   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
|| qdD ]}tt
||t
|| qt|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|||	 qt|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
|| qdD ]}tt
||t
|| qt|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 %%%