U
    Kvf]                     @   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/   T/tmp/pip-unpacked-wheel-2v6byqio/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 )Nd   r   r4          @r      皙?r2   r3   rC   rD   r   r   rA   exog2   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  qt|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pytestZ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