U
    Ãmœd‘R  ã                	   @   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�qöt  |||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çê-�™—q=©Zatol)Ú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© rW   úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_weights.pyÚ'test_smoothed_state_obs_weights_sarimax   s®    

ý

ý
ÿ 
ý

ÿ
ý
ÿÿ ÿrY   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
�qþt  |||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*   r6   r,   r+   r   ZVARMAXr0   r1   r2   r3   r4   r5   r7   r8   r9   r:   r-   r;   r<   r   r=   r   )r   r   r>   r$   r?   Z
var_paramsr@   rA   rB   rC   rD   rE   rF   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rW   rX   Ú&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 ||¡ | r„d
|j_| 	g ¡}|j
}|j}	|j}
t  |||	|
f¡t j }t|ƒD ]®}t|
ƒD ] }t  |||f ¡rþt j|d d …|d d …|f< qÌ| ¡ }d|||f< | |¡}|�s0|j ||¡ | �r>d
|j_| 	g ¡}|jj|jj |d d …|d d …|f< qÌqÀt  |||	|	f¡t j }t|ƒD ]Ö}t|	ƒD ]Æ}| |¡}|�s¾|j ||¡ | �rÌ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œ�q�t  ||	|	f¡t j }|�sðt|	ƒD ]b}| ¡ }||  d7  < | |¡}|j ||¡ | 	g ¡}|jj|jj |d d …d d …|f< �qŒ|�s|j ||¡ t |¡\}}}|j}t||ƒ |�r t|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_   rb   ©é   r   é   ©é   r"   r   r   r   Tr&   r'   r"   r(   r)   )ZaxisÚobs_intercept)r"   rb   )r*   r6   r,   r   r+   r/   r0   r1   Úfilter_univariater2   r3   r4   r5   r7   r8   r9   Úcloner:   r-   r<   r   r=   Znobs_diffuser   r   Znansum)r`   r^   Úreset_randomstater>   rC   rD   rE   rF   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   ÚdZcontribution_priorZcontribution_endogZcomputed_smoothed_staterW   rW   rX   Ú$test_smoothed_state_obs_weights_TVSSå   s´    






ÿ
"
ÿ

ÿÿ
 ÿ
 ÿ$þ. ÿrm   Ú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 ¡�r€t 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)ra   r   rc   re   rf   r   r   r   r   ro   Zobs_cov.r"   Z	state_covTr&   r(   r)   )r*   r6   r,   r   r0   r1   r/   ri   r2   r7   ZlinalgZeigvalshZforecasts_error_covr   Úminr3   r4   r5   r8   r9   rj   r:   r-   r   r=   r   )rn   rp   rk   r>   rC   rF   rK   Zeigvalsr   rG   rH   rI   rJ   rL   rM   rN   rT   Ú_rW   rW   rX   Ú3test_smoothed_state_obs_weights_univariate_singularY  sH    





ÿ rs   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 ¡ròt 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< qÀq´t  ||||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œ�q�t |¡\}}}t||dd� t||dd� d S )N)é   rd   r   rc   re   rf   ©rd   r"   rh   r   r   Tr&   r'   r"   r(   r)   )r*   r6   r,   r   r0   r1   r/   Úfilter_collapsedr2   r3   r4   r5   r7   r8   r9   rj   r:   r-   r<   r   r=   r   )rk   r>   rC   rF   r   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rT   rU   rr   rW   rW   rX   Ú)test_smoothed_state_obs_weights_collapsed’  sd    





ÿ
"
ÿÿ ÿrw   Ú	compute_jra   rZ   é	   rg   Ú	compute_trb   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 ¡ròt 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< qÀq´tj||| d�\}}}t  |¡}t  | ¡} t  d¡D ]"}||k�r¤t j|	|d d …f< �q¤t  d¡D ]"}
|
| k�rÒt j|	d d …|
f< �qÒt||	dd� d S )N)ra   rd   r   rc   re   rf   ru   rh   r   r   Tr&   )rz   rx   ra   gH¯¼šò×z>r)   )r*   r6   r,   r   r0   r1   r/   rv   r2   r3   r4   r5   r7   r8   r9   rj   r:   r-   r   r=   Z
atleast_1dÚaranger   )rx   rz   rk   r>   rC   rF   r   rG   rH   rI   rJ   rK   rL   rM   rN   rT   rr   r   rW   rW   rX   Útest_compute_t_compute_jÓ  sT    





ÿ  ÿ



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{®Gáz”?r!   T)r#   r   r\   r&   F)Zresmoothr   r   )r   r.   r2   r   r=   r   )r>   rC   Zres1Zweights1_originalrr   Zres2Zweights2_originalZweights1_no_resmoothZweights1_resmoothZweights2_no_resmoothZweights2_resmoothZweights1_defaultZweights2_defaultrW   rW   rX   Útest_resmooth	  sH     ÿ ÿ ÿ ÿ ÿ ÿ




r}   )!Ú__doc__ZpytestÚ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parametrizerY   r]   rm   rs   rw   r{   r|   r}   rW   rW   rW   rX   Ú<module>   s:   i]r7A&&4