U
    Kvfe                     @   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)AZASYZYS)g      ?   )Qr   )g      @0   )MZMS)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&   ImportErrorfigureZplot_componentswarningscatch_warningsfitsummary)namer   truemodelr   r9   r   r   modZ	roundtripZres_truer<   r   r!   r#   Zres_llfZpltr&   r'   Z
fit_kwargsres rP   T/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/statespace/tests/test_structural.pyrun_ucm   s    










rR   c                 C   s   t d t ddd d S )N	irregularTr   rR   close_figuresrP   rP   rQ   test_irregular   s    rX   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_interceptTrT   r   __warningregistry__r   pytestwarnsrR   rW   warningrZ   rP   rP   rQ   test_fixed_intercept   s    ra   c                 C   s   t d t ddd d S )NZdeterministic_constantTrT   rU   rV   rP   rP   rQ   test_deterministic_constant   s    rb   c                 C   s   t d t ddd d S )NZrandom_walkTrT   rU   rV   rP   rP   rQ   test_random_walk   s    rc   c                 C   s   t d t ddd d S )NZlocal_levelTrT   rU   rV   rP   rP   rQ   test_local_level   s    rd   c              	   C   s:   t }d}tj||d td tddd W 5 Q R X d S Nirregular component addedrY   Zfixed_slopeTrT   )r   r]   r^   rR   r_   rP   rP   rQ   test_fixed_slope   s
    rg   c              	   C   s@   i t _t}d}tj||d td tddd W 5 Q R X d S re   r[   r_   rP   rP   rQ   test_fixed_slope_warn   s    rh   c                 C   s   t d t ddd d S )NZdeterministic_trendTrT   rU   rV   rP   rP   rQ   test_deterministic_trend   s    ri   c                 C   s   t d t ddd d S )NZrandom_walk_with_driftTrT   rU   rV   rP   rP   rQ   test_random_walk_with_drift   s    rj   c                 C   s   t d t ddd d S )NZ local_linear_deterministic_trendTrT   rU   rV   rP   rP   rQ   %test_local_linear_deterministic_trend   s    rk   c                 C   s   t d t ddd d S )NZlocal_linear_trendTrT   rU   rV   rP   rP   rQ   test_local_linear_trend   s    rl   c                 C   s   t d t ddd d S )NZsmooth_trendTrT   rU   rV   rP   rP   rQ   test_smooth_trend   s    rm   c                 C   s   t d t ddd d S )NZrandom_trendTrT   rU   rV   rP   rP   rQ   test_random_trend   s    rn   c                 C   s   t d t ddd d S )NZcycle_approx_diffusecycleTrT   rU   rV   rP   rP   rQ   
test_cycle   s    rp   c                 C   s   t d t ddd d S )NZseasonal_approx_diffuseseasonalTrT   rU   rV   rP   rP   rQ   test_seasonal   s    rr   c                 C   s   t d t ddd d S )NZfreq_seasonal_approx_diffusefreq_seasonalTrT   rU   rV   rP   rP   rQ   test_freq_seasonal   s    rt   c                 C   s   t d t ddd d S )NZreg_approx_diffuseregTrT   rU   rV   rP   rP   rQ   test_reg   s    rv   c                 C   s   t d t ddd d S )NZ
rtrend_ar1TrT   rU   rV   rP   rP   rQ   test_rtrend_ar1   s    rw   c                 C   s   t d t ddd d S )NZ-lltrend_cycle_seasonal_reg_ar1_approx_diffuseZlltrend_cycle_seasonal_reg_ar1TrT   rU   rV   rP   rP   rQ   #test_lltrend_cycle_seasonal_reg_ar1   s    rx   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)rS   r   mle_regressionr   r,   r-   )r   r,   r$   gh㈵>r#   r   )r7   arangerG   rH   r   rI   r   Zregression_coefficientsfilteredr   printpredicted_diffuse_state_covr   rC   rD   )r   endogr   mod1res1mod2res2rP   rP   rQ   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   rf   rY   rS   zinvalid specz!Trend component specified withoutT)trendrS   deterministic trendr   stochastic_levelstochastic_trendz may be overridden when the trend)rq   )
r   r\   r   r]   r^   r   r   trend_specificationraises
ValueError)r   r`   rZ   rN   Ztrend_attributes	attributer   rP   rP   rQ   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  rz   sizer   r    r   )r   autoregressiver$   r   r   r   r}   )intr7   r_randomseedZc_onesr~   normalzerosrangedotr   r   r+   )nobsbetaphir   Zepsr   trN   rP   rP   rQ   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   levelrq   gV瞯<r   r    <   r   )r7   r~   r   smoothforecastZnewaxisr   )r   r   rN   rO   actualdesiredrP   rP   rQ   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   )r6   llevelr   Fr|   T)Zdynamic)Zstepsr   )r   r   )r7   r   r   r   nanr3   r4   	DataFrameZSeriesr:   r   r+   rI   rJ   predictZget_predictionZk_exogr   Zget_forecastr]   r   r   r   )r   k_endogr   Zexog1Zexog2r6   Zendog_pdZexog1_pdZexog2_pdr   rN   rO   Zoos_exogrP   rP   rQ   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   r6   T)r7   r   r   r3   r   r   r   r   r   r+   r   r   r6   equalsZIndex)r   rN   rO   outrP   rP   rQ   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   rs   ro   r   damped_cyclestochastic_freq_seasonalstochastic_cycler          g      >@g?      r   r,   g      "@g      @gr"   r}   )r   r   r   )r1   r/   r   r7   r?   r0   r   k_statesZk_state_covrD   r   ssmk_posdefZk_paramsr5   r   Zreshapedesign__direct_sumarraycossin
transitionr   Zeye	selectionZdiag	state_cov)r9   rM   r   Zexpected_designZexpected_transitionZexpected_selectionZexpected_state_covrP   rP   rQ   (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 rP   )shape).0mrP   rP   rQ   
<listcomp>  s     z __direct_sum.<locals>.<listcomp>r   )Zaxis)r7   rB   r   r   AssertionError)Zsquare_matricesZ	new_shapeZ	new_arrayoffsetr   ZrowscolsrP   rP   rQ   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 )
Nry          @rS   r   rz   r    )r    r    r   r   )r7   r   r   r   r   r   r   r   )	r   r   r   rN   rO   Zexog_fcast_scalarZexog_fcast_1dimZexog_fcast_2dimhrP   rP   rQ   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_periodsrq   Zfreq_seasonal_periodsZfreq_seasonal_harmonicsrs   ro   Zar_orderr   rS   r   r   stochastic_seasonalr   r   r   r{   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)rN   r   attrsZ	ssm_attrsattrrP   rP   rQ   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 ) Nry   r   rS   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   rq   r   r   r   r    )r   r   r   )r   r   ro   r   r   )r7   r   r   r   r   )r   r   r   levelsr   rN   r   rP   rP   rQ   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 )
Nry   rz   r   r   r   r   r   r%   rA   rD   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   )r7   r~   	ones_liker   r   appendr   specificationr   cov_params_defaultr.   r   r   	r   r   r   r   r   r   r   res3r   rP   rP   rQ   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 )
Nry   rz   r   r   r   r   r   .r   )r7   r~   r   r   r   extendr   rA   r.   r   r   r   )
r   r   r   r   r   r   r   r   r   r   rP   rP   rQ   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 )
Nry   rz   r   r   r   r   r   r   r   )r7   r~   r   r   r   applyr   r   r   r   r.   r   r   r   rP   rP   rQ   test_apply_results  s"    



r   )F)?__doc__rG   r   r7   Znumpy.testingr   r   r   Zpandasr3   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datar1   r4   r6   rR   rX   ra   rb   rc   rd   rg   rh   ri   rj   rk   rl   rm   rn   rp   rr   rt   rv   rw   markZslowrx   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   rP   rP   rQ   <module>   s`   

u


"+3	H %%%