U
    KvfLS                  	   @   s  d Z ddlZddlZddlZddlmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ e
j jZejdd	d
de_ejdddgejddddgejdddgejdddgdd Zejdddgejddddgdd Zejddddgejdddgdd Zejdd ddgejd!dd"gd#d$ Zd%d& Zejd'ed(ddd"gd)dd*gd+gejd,ed(d-d"d"gdd"d)gd)gd.d/ Zd0d1 Z dS )2zn
Tests for computation of weight functions in state space models

Author: Chad Fulton
License: Simplified-BSD
    N)assert_equalassert_allclose)datasets)sarimaxvarmax)tools)TVSSZ1959Q1Z2009Q3Q)startendfrequse_exogFTtrendnctconcentrate_scalemeasurement_errorc           !   
   C   s  t dt jdddggj}| r2t ddddd	gnd }d
g}dg}dg}dg}	dg}
g }|dkrh||7 }| rt||7 }||7 }|r||	7 }|s||
7 }tj|d|| r|nd ||d}t dg}t dd }|j|| |	|}|j
}|j}|j}t ||||ft j }t|D ]}t|D ]}t |||f rVt j|d d |d d |f< nx| }|||f  d7  < tj|d|| r|nd ||d}|j|| |	|}|jj|jj |d d |d d |f< q"qt ||||ft j }t|D ]}t|D ]}tj|d|| r|nd ||d}|j|| || |d jdkr|d }t |j|j
f|d< ||dd d d d f< |d||f  d7  < |j	 }|jj|jj |d d |d d |f< qqt |||ft j }t|D ]x}| }||  d7  < tj|d|| r|nd ||d}|j|| |	|}|jj|jj |d d d d |f< q|j|| t|\}}} t||dd t||dd t| |dd d S )N皙?333333?333333ӿg         333333@333333@        皙?      ?ffffff?皙?r   r      r   r   )orderr   exogr   r   皙ٿr"         ?state_intercept:0yE>Zatol-q=)nparraynanTr   SARIMAXeyessminitialize_knownsmoothnobsk_statesk_endogzerosrangeisnancopysmoothed_stateupdatendimr   compute_smoothed_state_weightsr   )!r   r   r   r   endogr$   trend_paramsZ	ar_paramsexog_paramsZmeas_err_params
cov_paramsparamsmod
prior_mean	prior_covresr   mpdesiredjiytmp_modtmp_resdesired_state_intercept_weightsellsidesired_prior_weightsaactualactual_state_intercept_weightsactual_prior_weights rX   Q/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/statespace/tests/test_weights.py'test_smoothed_state_obs_weights_sarimax   s    




 




 rZ   c                 C   s  t d}t j|d< t j|dd d f< t j|d< | rHt ddddd	gnd }d
dg}ddd	dg}ddg}dd	dg}g }|dkr||7 }||7 }| r||7 }||7 }tj|d|| r|nd d}	t ddg}
t ddgddgg}|	j|
| |	|}|	j	}|	j
}|	j}t ||||ft j }t|D ]}t|D ]}t |||f rjt j|d d |d d |f< nl| }d|||f< tj|d|| r|nd d}|j|
| ||}|jj|jj |d d |d d |f< q6q*t ||||ft j }t|D ]}t|D ]}tj|d|| r"|nd d}|j|
| || |d jdkr|d }t |	j
|	j	f|d< |d d d f |dd d d d f< |d||f  d7  < |j }|jj|jj |d d |d d |f< q
qt |||ft j }t|D ]t}|
 }||  d7  < tj|d|| r,|nd d}|j|| ||}|jj|jj |d d d d |f< q|	j|
| t|\}}}t||dd t||dd t||dd d S )N)   r   )r   r   r"   )r   r"   r   r   r   r   r   r   r   r   皙r&          @r    )r"   r   )r#   r   r$   r%   g?r   g333333?g@r'   r(   r)   r*   )r+   r7   r-   r,   r   ZVARMAXr1   r2   r3   r4   r5   r6   r8   r9   r:   r;   r.   r<   r=   r   r>   r   )r   r   r?   r$   r@   Z
var_paramsrA   rB   rC   rD   rE   rF   rG   r   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rX   rY   &test_smoothed_state_obs_weights_varmax   s    









 

"


 r^   diffuser"      
univariatec                 C   st  t d}|dkr t j|d d< t j|d< t j|dd d f< t j|d< t|}t ddg}t d	}|sx|j|| | rd
|j_|	g }|j
}|j}	|j}
t |||	|
ft j }t|D ]}t|
D ]}t |||f rt j|d d |d d |f< q| }d|||f< ||}|s0|j|| | r>d
|j_|	g }|jj|jj |d d |d d |f< qqt |||	|	ft j }t|D ]}t|	D ]}||}|s|j|| | rd
|j_|d jdkr|d }t |j|j
f|d< |d d d f |dd d d d f< |d||f  d7  < |j	 }|jj|jj |d d |d d |f< qqt ||	|	ft j }|st|	D ]b}| }||  d7  < ||}|j|| |	g }|jj|jj |d d d d |f< q|s|j|| t|\}}}|j}t|| |rt|d | t jdd t|d d d |f t jdd t|d | t j t|d d d |f t j t|t j ntt||dd t j||d d d d f  d	d}t j|||d j d d d d d d f  dd}|| }t||jj t||d |d f ||d |d f dd t||d |d f ||d |d f dd d S )N)
      r`   rc      r         r"   r   r   r   Tr&   r'   r"   r*   r)   )Zaxisobs_intercept)r"   rc   )r+   r7   r-   r   r,   r0   r1   r2   filter_univariater3   r4   r5   r6   r8   r9   r:   cloner;   r.   r=   r   r>   Znobs_diffuser   r   Znansum)ra   r_   reset_randomstater?   rD   rE   rF   rG   r   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   dZcontribution_priorZcontribution_endogZcomputed_smoothed_staterX   rX   rY   $test_smoothed_state_obs_weights_TVSS   s    







"



 
 $. rn   singularbothperiodsr   c                 C   s  t d}t j|d< t j|dd d f< t j|d< t|}|jddgt dd  | d	krpd|d
dd |f< n<d|d
ddd |f< d|d
ddd |f< d|d
| | d |f< d|dd d d d d |f< d|j_|g }t	|D ]*}t j
|jd|f }tt |d q|j}|j}	|j}
t |||	|
ft j }t	|D ]}t	|
D ]}t |||f rt j|d d |d d |f< np| }d|||f< ||}|jddgt dd  d|j_|g }|jj|jj |d d |d d |f< qLq@t|\}}}t||dd d S )N)rb   r   rd   rf   rg   r   r   r   r   rp   Zobs_cov.r"   Z	state_covTr&   r*   r)   )r+   r7   r-   r   r1   r2   r0   rj   r3   r8   ZlinalgZeigvalshZforecasts_error_covr   minr4   r5   r6   r9   r:   rk   r;   r.   r   r>   r   )ro   rq   rl   r?   rD   rG   rL   Zeigvalsr   rH   rI   rJ   rK   rM   rN   rO   rU   _rX   rX   rY   3test_smoothed_state_obs_weights_univariate_singularY  sH    





 rt   c                 C   s  t d}t j|dd d f< t j|d< t j|dd d f< t j|d< t|}t d|d< |jdd	gt d d
|j_|g }|j	}|j
}|j}t ||||ft j }t|D ]}t|D ]}	t |||	f rt j|d d |d d |	f< q| }
d|
||	f< ||
}t d|d< |jdd	gt d d
|j_|g }|jj|jj |d d |d d |	f< qqt ||||ft j }t|D ]}t|D ]}||}t d|d< |jdd	gt d d
|j_|d jdkr(|d }t |j
|j	f|d< |d d d f |dd d d d f< |d||f  d7  < |j }|jj|jj |d d |d d |f< qqt|\}}}t||dd t||dd d S )N)   re   r   rd   rf   rg   re   r"   ri   r   r   Tr&   r'   r"   r*   r)   )r+   r7   r-   r   r1   r2   r0   filter_collapsedr3   r4   r5   r6   r8   r9   r:   rk   r;   r.   r=   r   r>   r   )rl   r?   rD   rG   r   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rU   rV   rs   rX   rX   rY   )test_smoothed_state_obs_weights_collapsed  sd    






"
 rx   	compute_jrb   r[   	   rh   	compute_trc   c                 C   s8  t d}t j|dd d f< t j|d< t j|dd d f< t j|d< t|}t d|d< |jdd	gt d d
|j_|g }|j	}|j
}|j}t ||||ft j }	t|D ]}
t|D ]}t ||
|f rt j|	d d |
d d |f< q| }d||
|f< ||}t d|d< |jdd	gt d d
|j_|g }|jj|jj |	d d |
d d |f< qqtj||| d\}}}t t |}|  t t | } |   t dD ]"}||krt j|	|d d f< qt dD ]"}
|
| krt j|	d d |
f< qt || }|	| }	t||	dd d S )N)rb   re   r   rd   rf   rg   rv   ri   r   r   Tr&   )r{   ry   rb   gHz>r)   )r+   r7   r-   r   r1   r2   r0   rw   r3   r4   r5   r6   r8   r9   r:   rk   r;   r.   r   r>   uniqueZ
atleast_1dsortarangeZix_r   )ry   r{   rl   r?   rD   rG   r   rH   rI   rJ   rK   rL   rM   rN   rO   rU   rs   r   ixrX   rX   rY   test_compute_t_compute_j  s\    





  

r   c                  C   s  dddddg} t j| ddd}|dd	d
g}tj|dd\}}}|dd
dg}tj|dd\}}}tj|dd\}}}tj|dd\}}}tj|dd\}	}}tj|dd\}
}}t|\}}}t|\}}}t|| t|| t|| t|	| t|
| t|| d S )Nr   r   r\   r   g{Gz?r!   T)r#   r   r]   r&   F)Zresmoothr   r   )r   r/   r3   r   r>   r   )r?   rD   Zres1Zweights1_originalrs   Zres2Zweights2_originalZweights1_no_resmoothZweights1_resmoothZweights2_no_resmoothZweights2_resmoothZweights1_defaultZweights2_defaultrX   rX   rY   test_resmooth  sH          




r   )!__doc__ZpytestZnumpyr+   ZpandaspdZnumpy.testingr   r   Zstatsmodelsr   Zstatsmodels.tsa.statespacer   r   r   Z7statsmodels.tsa.statespace.tests.test_impulse_responsesr   Z	macrodataZload_pandasdataZdtaZperiod_rangeindexmarkZparametrizerZ   r^   rn   rt   rx   r~   r   r   rX   rX   rX   rY   <module>   s:   i]r7A&&: