U
    ÃmœdÍ]  ã                   @   s„  d Z ddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ ej ¡ jZejddd	d
�e_dd„ Zdd„ Zej dddg¡ej d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g¡ej ddddg¡dd„ ƒƒZdd„ Zej dddg¡ej ddddg¡dd„ ƒƒZ d d!„ Z!ej dddg¡ej ddddg¡d"d#„ ƒƒZ"dS )$zY
Tests for prediction of state space models

Author: Chad Fulton
License: Simplified-BSD
é    N)Úassert_equalÚassert_raisesÚassert_allcloseÚassert_)Údatasets)ÚsarimaxÚvarmax)ÚTVSSZ1959Q1Z2009Q3ÚQ)ÚstartÚendÚfreqc                  C   s¤  t jdddd�} tj d¡ t jtjjdd�| d d… d	�}tj|d
d�}| 	|j
¡}| ¡ }tt|ƒ|jƒ t|jj| d d… jƒ | ¡ }t|jd | d ƒ tj|ddd�}| 	|j
¡}| ¡ }t|j|jd d ƒ tt|ƒ|jƒ t|jj| dd… jƒ | ¡ }t|jd | d ƒ tj|dddd�}| 	|j
¡}| ¡ }t|j|jd d ƒ tt|ƒ|jƒ t|jj| dd… jƒ | ¡ }t|jd | d ƒ d S )Nz
1950-01-01é   ÚD)r   Zperiodsr   ièò é
   )Úsizeéÿÿÿÿ)Úindex©é   r   r   ©Úorderr   ©r   r   r   T)r   Úsimple_differencingr   )r   é   r   )r   r   r   é   )r   Zseasonal_orderr   é   )ÚpdZ
date_rangeÚnpÚrandomÚseedZSeriesÚnormalr   ÚSARIMAXÚfilterZstart_paramsÚpredictr   ÚlenÚnobsr   ÚvaluesÚforecastÚshape)r   ÚendogÚmodÚresÚpredÚfcast© r/   úi/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_prediction.pyÚtest_predict_dates   s8     
ÿr1   c                  C   sÖ   ddddg} t j| dd�}| ddg¡}d|j_| ddg¡}t|jjd	ƒ t|jd kƒ t|j	jd
ƒ t|j	d kƒ t
t|jdd� t
t|jdd� t| d¡| d¡ƒ | d¡}| d¡}t| ¡ | ¡ ƒ d S )Nç      à?ç333333ó?gš™™™™™Ù?g333333ã?r   r   ç      ð?T)r   é   )r   r   r5   )Údynamicr   )r   r"   r#   ÚssmZmemory_no_predictedr   Úpredicted_stater)   r   Úpredicted_state_covr   Ú
ValueErrorr$   Úget_predictionr   r(   Úget_forecastZsummary_frame)r*   r+   Úres1Úres2Zfcast1Zfcast2r/   r/   r0   Útest_memory_no_predictedE   s    

r?   Úuse_exogTFÚtrendÚnÚcÚtc                 C   s\  t  d¡ dd¡d }| r$t  d¡nd }| r8d|dd…< dg}dg}d	g}dg}g }|d
krd||7 }||7 }| rx||7 }||7 }| ¡ }	t j|	dd …< tj|	d||d�}
|
 |¡}| 	¡ }|j
}| rÐ|d d… nd }tj|d d… d||d�}| |¡}| �r
|dd … nd }|j	dd|d�}|j
}|j|j |j }|D ]}tt||ƒt||ƒƒ �q:d S )Néd   r   r4   ç       @r   é   çš™™™™™¹?r2   r3   ©rC   rD   éÎÿÿÿr   ©r   rA   Úexogé2   r   éc   ©r   r   rL   )r   ÚarangeÚreshapeÚonesÚcopyÚnanr   r"   Úsmoothr;   Úprediction_resultsÚrepresentation_attributesÚfilter_attributesÚsmoother_attributesr   Úgetattr)r@   rA   r*   rL   Útrend_paramsZ	ar_paramsÚexog_paramsÚ
var_paramsÚparamsÚy1Úmod1r=   Úp1Úpr1Úx2Úmod2r>   Úx2fÚp2Úpr2ÚattrsÚkeyr/   r/   r0   Ú!test_concatenated_predict_sarimaxb   sF    

ÿþÿrj   c                 C   sZ  t  d¡ dd¡d }| r$t  d¡nd }ddg}ddd	dg}dd
g}dd	dg}g }|dkrb||7 }||7 }| rv||7 }||7 }| ¡ }	t j|	dd …< tj|	d||d�}
|
 |¡}| 	¡ }|j
}| rÎ|d d… nd }tj|d d… d||d�}| |¡}| �r|dd … nd }|j	dd|d�}|j
}|j|j |j }|D ]}tt||ƒt||ƒƒ �q8d S )NéÈ   rE   r   r4   rH   çš™™™™™É?r2   çš™™™™™¹¿ç        rF   rI   rJ   ©r   r   rK   rM   r   rN   rO   )r   rP   rQ   rR   rS   rT   r   ÚVARMAXrU   r;   rV   rW   rX   rY   r   rZ   )r@   rA   r*   rL   r[   r]   r\   Ú
cov_paramsr^   r_   r`   r=   ra   rb   rc   rd   r>   re   rf   rg   rh   ri   r/   r/   r0   Ú test_concatenated_predict_varmax�   sB    


ÿþÿrr   c                 C   sb  t  d¡ dd¡t j }| r&t  d¡nd }ddg}ddddg}d	d
g}d	dd	g}g }|dkrd||7 }||7 }| rx||7 }||7 }| r�|d d… nd }	tj|d d… d||	d�}
|
 |¡}| rÈ|dd… nd }|jddd|d�}|jddd|d�}|jddd|d�}t	|j
|j
ƒ t	|j|jƒ t	|j
|j
ƒ t	|j|jƒ t	|j
d d… |jƒ t	|jd d… j|jƒ |jdddd|d�}|jdddd|d�}|jdddd|d�}t	|j
|j
ƒ t	|j|jƒ t	|j
|j
ƒ t	|j|jƒ | dk�r |dk�r t	|j
d d… |jƒ t	|jd d… j|jƒ n>t	|j
d d… |
d  |jƒ t	|jd d… |
d  j|jƒ d S )Nrk   rE   r   rH   rl   r2   rm   rn   r4   rF   rI   rM   ro   rK   é=   r   é<   Ú	predicted©r   r   Úinformation_setrL   ÚfilteredÚsmoothedT©r   r   rw   Úsignal_onlyrL   FrB   Úobs_interceptÚobs_cov)r   ÚzerosrQ   rT   rR   r   rp   rU   r;   r   Úpredicted_meanÚvar_pred_meanÚfittedvaluesÚTÚforecasts_error_cov)r@   rA   r*   rL   r[   r]   r\   rq   r^   Úx_fitr+   r,   Úx_fcastÚp_predÚf_predÚs_predÚp_signalÚf_signalÚs_signalr/   r/   r0   Ú*test_predicted_filtered_smoothed_with_nans¶   s–    

  þ  þ  þ   þ   þ   þÿÿrŒ   c           
         sÖ  t t d¡tj ƒ}|j ddgt d¡¡ | g ¡}t t d¡tj ƒ‰ ‡ fdd„dD ƒ}|jf d	d
ddœ|—Ž}|jf d	d
ddœ|—Ž}|jf d	d
ddœ|—Ž}t	|j
|j
ƒ t	|j|jƒ t	|j
|j
ƒ t	|j|jƒ t	|j
d d… |jƒ t	|jd d… j|jƒ |jf d	d
dddœ|—Ž}|jf d	d
dddœ|—Ž}|jf d	d
dddœ|—Ž}	t	|	j
|j
ƒ t	|	j|jƒ t	|j
|j
ƒ t	|j|jƒ t	|j
d d… |d j |jƒ t	|jd d… |d j j|jƒ d S )N©rM   r   r3   çš™™™™™é?r   ©r   r   c                    s   i | ]}|ˆ | “qS r/   r/   ©Ú.0ri   ©Zmod_oosr/   r0   Ú
<dictcomp>  s      zCtest_predicted_filtered_smoothed_with_nans_TVSS.<locals>.<dictcomp>©r|   Údesignr}   Z
transitionZ	selectionZ	state_covr   rt   ru   ©r   r   rw   rx   ry   rM   T©r   r   rw   r{   r|   r}   )r	   r   r~   rT   r7   Úinitialize_knownÚeyerU   r;   r   r   r€   r�   r‚   rƒ   )
Úreset_randomstater+   r,   Úkwargsr†   r‡   rˆ   r‰   rŠ   r‹   r/   r’   r0   Ú/test_predicted_filtered_smoothed_with_nans_TVSS  s„    
  ÿþ  ÿþ  ÿþ   ÿþ   ÿþ   ÿþÿÿrœ   c                 C   sø  t  tddg ¡}|dkr0| ¡ jdd … d }|dkrD|| ¡ 8 }| rRt  d¡nd }| rfd|d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 }| rÌ|d d… nd }	tj|d d… d||	d�}
ddg|
d< t  	ddgddgg¡|
d< |
 
|¡}| �r,|dd… nd }|jddd|d�}|jddd |d�}|jddd!|d�}|jd"|d#�}|
d d d …d f }|
d$ }|
d d d …d d …d f }||j }||j }||jd%d d&…f  }t|jd d… || jƒ t|jdd … |jƒ t|jd d… || jƒ t|jdd … |jƒ t|jd d… || jƒ t|jdd … |jƒ |d d d …d d …f |jj |jd d d …d d …f  }|d d d …d d …f |jj |jd d d …d d …f  }|d d d …d d …f |jd%d d&…f j |jd d d …d d …f  }t|jd d… |j| jƒ t|jdd … |jƒ t|jd d… |j| jƒ t|jdd … |jƒ t|jd d… |j| jƒ t|jdd … |jƒ |jdddd'|d(�}|jddd d'|d(�}|jddd!d'|d(�}|j|j }|jj| j}t|jd d… |jƒ t|jdd … |ƒ t|jd d… |jƒ t|jdd … |ƒ t|jd d… |jƒ t|jdd … |ƒ t|jd d… |ƒ t|jdd … |ƒ t|jd d… |ƒ t|jdd … |ƒ t|jd d… |ƒ t|jdd … |ƒ d S ))NÚrealgdpÚcpi©rB   rC   r   rE   rB   rF   é   é(   rH   rl   r2   rm   rn   r4   rI   rM   ro   rK   r5   g       Àr|   r3   g333333Ó?g333333@r}   rs   r   rt   ru   rv   rx   ry   r   )rL   r•   .r   Trz   )r   ÚlogÚdtaÚdiffÚilocÚmeanrR   r   rp   ÚarrayrU   r;   r<   Úsmoothed_stateÚfiltered_stater8   r   r   r‚   Úsmoothed_state_covÚfiltered_state_covr9   r€   )r@   rA   r*   rL   r[   r]   r\   rq   r^   r„   r+   r,   r…   r†   r‡   rˆ   r.   ÚdÚZÚHÚdesired_s_signalÚdesired_f_signalÚdesired_p_signalZdesired_s_signal_covZdesired_f_signal_covZdesired_p_signal_covr‰   rŠ   r‹   Úfcast_signalÚfcast_signal_covr/   r/   r0   Ú'test_predicted_filtered_smoothed_varmax6  sÒ    

ÿ

  þ  þ  þ

4ÿ4ÿ@ÿ   þ   þ   þr´   c                    sˆ  t t d¡ƒ}|j ddgt d¡¡ | g ¡}t t d¡tj ƒ‰ ‡ fdd„dD ƒ}|jf d	d
ddœ|—Ž}|jf d	d
ddœ|—Ž}|jf d	d
ddœ|—Ž}|jf d	d
dddœ|—Ž}|jf d	d
dddœ|—Ž}|jf d	d
dddœ|—Ž}	|d  	dd	¡d d …d d …d f }
|d  	dd	d¡}|d  	dd	d¡}|j
d|Ž}|jˆ d j }|jˆ d j }||jjd d …d d …d f  }||jjd d …d d …d f  }||jjd d…d d …d f  }t|jd d… |
| d ƒ t|jdd … |jƒ t|jd d… |
| d ƒ t|jdd … |jƒ t|jd d… |
| d ƒ t|jdd … |jƒ t|	jd d… |d ƒ t|	jdd … |ƒ t|jd d… |d ƒ t|jdd … |ƒ t|jd d… |d ƒ t|jdd … |ƒ t|jƒD �]&}t|j| || |jd|f  || j ||  ƒ t|j| || |jd|f  || j ||  ƒ t|j| || |jd|f  || j ||  ƒ t|	j| || |jd|f  || j ƒ t|j| || |jd|f  || j ƒ t|j| || |jd|f  || j ƒ �qÜt|jdd … |jƒ t|jdd … |jƒ t|jdd … |jƒ t|	jdd … |ƒ t|jdd … |ƒ t|jdd … |ƒ d S )Nr�   r3   rŽ   r   r�   c                    s   i | ]}|ˆ | “qS r/   r/   r�   r’   r/   r0   r“   §  s      z9test_predicted_filtered_smoothed_TVSS.<locals>.<dictcomp>r”   r   rt   ru   r–   rx   ry   Tr—   r|   r   r•   r}   r   r   rM   ).r   .)r   )r	   r   r~   r7   r˜   r™   rU   rT   r;   Z	transposer<   r   r‚   r€   r¨   r©   r8   r   Úranger&   rª   r«   r9   )rš   r+   r,   r›   r†   r‡   rˆ   r‰   rŠ   r‹   r¬   r­   r®   r.   r²   r³   r¯   r°   r±   rD   r/   r’   r0   Ú%test_predicted_filtered_smoothed_TVSS¡  sÀ    
  ÿþ  ÿþ  ÿþ   ÿþ   ÿþ   ÿþ"
&ÿ
&ÿ
&ÿ
ÿ
ÿ
ÿr¶   c                 C   st  t  tddg ¡}|dkr0| ¡ jdd … d }|dkrD|| ¡ 8 }| rRt  d¡nd }| rfd|d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 }| rÌ|d d… nd }	| rà|dd… nd }
tj|d d… d||	d�}| 	|¡}| �r|d d… nd }| �r0|dd… nd }tj|d d… d||d�}| 	|¡}|j
ddd|
d�}|j
dd|d�}t|j|jƒ t|j|jƒ |j
ddd|
d�}|j
dd|d�}t|j|jƒ t|j|jƒ |j
ddd|
d�}|j
dd|d�}t|j|jƒ t|j|jƒ |j
ddd|
dd�}|j
dd|dd�}t|j|jƒ t|j|jƒ |j
ddd|
dd�}|j
dd|dd�}t|j|jƒ t|j|jƒ |j
ddd|
dd�}|j
dd|dd�}t|j|jƒ t|j|jƒ |j
ddd|
dd�}|j
dd|dd �}t|j|jƒ t|j|jƒ |j
ddd|
dd�}|j
dd|dd �}t|j|jƒ t|j|jƒ |j
ddd|
dd�}|j
dd|dd �}t|j|jƒ t|j|jƒ |j
ddd|
ddd!�}|j
dd|ddd"�}t|j|jƒ t|j|jƒ |j
ddd|
ddd!�}|j
dd|ddd"�}t|j|jƒ t|j|jƒ |j
ddd|
ddd!�}|j
dd|ddd"�}t|j|jƒ t|j|jƒ d S )#Nr�   rž   rŸ   r   rE   rB   rF   r    r¡   rH   rl   r2   rm   rn   r4   rI   rM   rs   ro   rK   r   rt   )r   r6   r   rL   rO   r   é   Trx   )r   r6   r   rL   rw   )r   r   rL   rw   )r   r6   r   rL   r{   )r   r   rL   r{   )r   r6   r   rL   r{   rw   )r   r   rL   r{   rw   )r   r¢   r£   r¤   r¥   r¦   rR   r   rp   r#   r;   r   r   r€   )r@   rA   r*   rL   r[   r]   r\   rq   r^   Zx_fit1Zx_fcast1r`   r=   Zx_fit2Zx_fcast2rd   r>   ra   rf   r/   r/   r0   Ú&test_predicted_filtered_dynamic_varmaxô  sØ    


ÿ
ÿÿ
ÿÿ
ÿÿÿÿ ÿÿ ÿÿ ÿÿr¸   )#Ú__doc__ZpytestÚnumpyr   Zpandasr   Znumpy.testingr   r   r   r   Zstatsmodelsr   Zstatsmodels.tsa.statespacer   r   Z7statsmodels.tsa.statespace.tests.test_impulse_responsesr	   Z	macrodataZload_pandasÚdatar£   Zperiod_ranger   r1   r?   ÚmarkZparametrizerj   rr   rŒ   rœ   r´   r¶   r¸   r/   r/   r/   r0   Ú<module>   s8   -)'I5iS