U
    Ãmœdgò  ã                   @   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mZmZ ddlmZ ddlmZ ddlmZmZmZ ej ej e¡¡ZG d	d
„ d
ƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ dƒZ"G dd„ de"ƒZ#G dd„ de"ƒZ$G dd„ de"ƒZ%G dd„ dƒZ&G dd„ de&ƒZ'G dd„ de&ƒZ(G dd „ d e&ƒZ)G d!d"„ d"ƒZ*G d#d$„ d$e*ƒZ+G d%d&„ d&e*ƒZ,G d'd(„ d(ƒZ-G d)d*„ d*e-ƒZ.G d+d,„ d,ƒZ/G d-d.„ d.e/ƒZ0G d/d0„ d0e/ƒZ1G d1d2„ d2e/ƒZ2G d3d4„ d4eƒZ3dOd6d7„Z4e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡d?d@„ ƒƒƒZ7e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡dAdB„ ƒƒƒZ8e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡dCdD„ ƒƒƒZ9e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡dEdF„ ƒƒƒZ:dGdH„ Z;e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡dIdJ„ ƒƒƒZ<e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡dKdL„ ƒƒƒZ=e
j5 6d8d9d:d;dg¡e
j5 6d<d5d=g¡e
j5 6d>d5d=g¡dMdN„ ƒƒƒZ>dS )Pa¨  
Tests for smoothing and estimation of unobserved states and disturbances

- Predicted states: :math:`E(\alpha_t | Y_{t-1})`
- Filtered states: :math:`E(\alpha_t | Y_t)`
- Smoothed states: :math:`E(\alpha_t | Y_n)`
- Smoothed disturbances :math:`E(\varepsilon_t | Y_n), E(\eta_t | Y_n)`

Tested against R (FKF, KalmanRun / KalmanSmooth), Stata (sspace), and
MATLAB (ssm toolbox)

Author: Chad Fulton
License: Simplified-BSD
é    N)Úassert_allcloseÚassert_almost_equalÚassert_equal)Údatasets)ÚmlemodelÚsarimaxÚvarmax)ÚTVSS)ÚFILTER_UNIVARIATE)ÚSMOOTH_CLASSICALÚSMOOTH_ALTERNATIVEÚSMOOTH_UNIVARIATEc                   @   sr   e Zd Zed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S )ÚTestStatesAR3Fc                 O   sº  t j tdd¡}t |¡| _tjdddd�| j_t j tdd¡}dd	d
dddddddddg}tj|d |d�| _	t
j| jd f|žddddœ|—Ž| _|r¢d| jj_tjd }| jj|dd�| _t d| jjf¡| j_t d| jjf¡| j_t| jjƒD ]d}tj | jjjd d …d d …|f ¡| jjd|f< tj | jjjd d …d d …|f ¡| jjd|f< qö| jj}| jj}	| jjj}
| jj dd�| _!| j!j"t ||	 ¡t ||
 ¡t | jj#¡d� d S ) NÚresultsúresults_wpi1_ar3_stata.csvú
1960-01-01é|   ÚQS©ÚstartZperiodsÚfreqzresults_wpi1_ar3_matlab_ssm.csvÚa1Úa2Úa3ÚdetPÚ	alphahat1Ú	alphahat2Ú	alphahat3ÚdetVÚepsÚepsvarÚetaÚetavar©ÚheaderÚnamesÚwpi)é   é   r   T)ÚorderZsimple_differencingÚhamilton_representation©gÑêäÅÝà?gÐhc¸?gž?mT§ƒÐ?gŽ_ÓÞûà?Únone)Zcov_typer(   r   )Zfilter_timing©Z measurement_disturbance_variatesZstate_disturbance_variatesZinitial_state_variates)$ÚosÚpathÚjoinÚcurrent_pathÚpdÚread_csvÚstataÚ
date_rangeÚindexÚ
matlab_ssmr   ÚSARIMAXÚmodelÚssmÚtiming_init_filteredÚnpÚr_Úsmoothr   ÚzerosÚnobsÚdet_predicted_state_covÚdet_smoothed_state_covÚrangeÚlinalgÚdetÚfilter_resultsÚpredicted_state_covÚsmoother_resultsÚsmoothed_state_covÚk_endogÚk_posdefÚsimulation_smootherÚsimÚsimulateÚk_states©ÚclsÚalternate_timingÚargsÚkwargsr/   Zmatlab_namesÚparamsÚir@   rJ   rK   © rW   úh/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_smoothing.pyÚsetup_class#   sr    
ÿÿ

ÿ          þÿþ þþ

ÿÿ
ýzTestStatesAR3.setup_classc                 C   s.   t | jj ¡ jd | jjdd … d dƒ d S )Nr   r(   Zdep1é   )r   r   rF   ZpredictÚ	forecastsr4   Úiloc©ÚselfrW   rW   rX   Útest_predict_obsU   s
     þzTestStatesAR3.test_predict_obsc                 C   s*   t | jjjd | jjdd … d dƒ d S )Nr   r(   Zsr1rZ   )r   r   rF   Zstandardized_forecasts_errorr4   r\   r]   rW   rW   rX   Útest_standardized_residuals[   s
     þz)TestStatesAR3.test_standardized_residualsc                 C   sn   t | jjjd d …d d…f j| jjdd … dddg dƒ t | jjjd d …d d…f j| jddd	g dƒ d S )
Néÿÿÿÿr(   Zsp1Zsp2Zsp3rZ   r   r   r   )r   r   rF   Úpredicted_stateÚTr4   r\   r7   r]   rW   rW   rX   Útest_predicted_statesa   s     þ þz#TestStatesAR3.test_predicted_statesc                 C   s   t | jjj| jdg dƒ d S ©Nr   rZ   ©r   r   rA   rc   r7   r]   rW   rW   rX   Útest_predicted_states_covk   s
    
 þz'TestStatesAR3.test_predicted_states_covc                 C   s.   t | jjjj| jjdd … dddg dƒ d S )Nr(   Zsf1Zsf2Zsf3rZ   )r   r   rF   Zfiltered_staterc   r4   r\   r]   rW   rW   rX   Útest_filtered_statesq   s
    
 þz"TestStatesAR3.test_filtered_statesc                 C   sN   t | jjjj| jjdd … dddg dƒ t | jjjj| jdddg dƒ d S )	Nr(   Úsm1Úsm2Úsm3rZ   r   r   r   ©r   r   rH   Úsmoothed_staterc   r4   r\   r7   r]   rW   rW   rX   Útest_smoothed_statesw   s    
 þ
 þz"TestStatesAR3.test_smoothed_statesc                 C   s   t | jjj| jdg dƒ d S ©Nr   rZ   ©r   r   rB   rc   r7   r]   rW   rW   rX   Útest_smoothed_states_cov�   s
    
 þz&TestStatesAR3.test_smoothed_states_covc                 C   s    t | jjjj| jdg dƒ d S ©Nr   rZ   )r   r   rH   Ú smoothed_measurement_disturbancerc   r7   r]   rW   rW   rX   Ú%test_smoothed_measurement_disturbance‡   s
    

 þz3TestStatesAR3.test_smoothed_measurement_disturbancec                 C   s(   | j j}t|jd j| jdg dƒ d S ©Nr   r    rZ   )r   rH   r   Ú$smoothed_measurement_disturbance_covrc   r7   )r^   ÚresrW   rW   rX   Ú)test_smoothed_measurement_disturbance_cov�   s    

 þz7TestStatesAR3.test_smoothed_measurement_disturbance_covc                 C   s    t | jjjj| jdg dƒ d S )Nr!   rZ   )r   r   rH   Úsmoothed_state_disturbancerc   r7   r]   rW   rW   rX   Útest_smoothed_state_disturbance”   s
    

 þz-TestStatesAR3.test_smoothed_state_disturbancec                 C   s$   t | jjjd j| jdg dƒ d S )Nr   r"   rZ   )r   r   rH   Úsmoothed_state_disturbance_covrc   r7   r]   rW   rW   rX   Ú#test_smoothed_state_disturbance_covš   s
    
 þz1TestStatesAR3.test_smoothed_state_disturbance_covN)F)Ú__name__Ú
__module__Ú__qualname__ÚclassmethodrY   r_   r`   rd   rg   rh   rn   rq   rt   rx   rz   r|   rW   rW   rW   rX   r   "   s   1

r   c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )ÚTestStatesAR3AlternateTimingc                    s   t t| ƒj|ddi|—Ž d S ©NrR   T)Úsuperr�   rY   ©rQ   rS   rT   ©Ú	__class__rW   rX   rY   ¢   s    
ÿÿÿz(TestStatesAR3AlternateTiming.setup_class©r}   r~   r   r€   rY   Ú__classcell__rW   rW   r…   rX   r�   ¡   s   r�   c                       s8   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Z‡  ZS )	Ú!TestStatesAR3AlternativeSmoothingc                    s   t t| ƒj|dti|—Ž d S ©NÚsmooth_method)rƒ   r‰   rY   r   r„   r…   rW   rX   rY   ©   s    
ÿÿÿz-TestStatesAR3AlternativeSmoothing.setup_classc                 C   sh   t | jjjjdd … | jjdd … dddg dƒ t | jjjjdd … | jjdd … ddd	g dƒ d S )
Né   r'   ri   rj   rk   rZ   r   r   r   rl   r]   rW   rW   rX   rn   ®   s     þýz6TestStatesAR3AlternativeSmoothing.test_smoothed_statesc                 C   s0   t | jjjdd … | jjdd … dg dƒ d S )Nr(   r   rZ   )r   r   rB   rc   r7   r\   r]   rW   rW   rX   rq   º   s
     þz:TestStatesAR3AlternativeSmoothing.test_smoothed_states_covc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S ©N©r   r9   r:   r‹   r   Ú_kalman_smootherÚ_smooth_methodr]   rW   rW   rX   Útest_smooth_methodÀ   s    ÿÿz4TestStatesAR3AlternativeSmoothing.test_smooth_method)	r}   r~   r   r€   rY   rn   rq   r‘   rˆ   rW   rW   r…   rX   r‰   ¨   s
   r‰   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú TestStatesAR3UnivariateSmoothingc                    s   t t| ƒj|dti|—Ž d S ©NÚfilter_method)rƒ   r’   rY   r
   r„   r…   rW   rX   rY   É   s    
ÿÿÿz,TestStatesAR3UnivariateSmoothing.setup_classc                 C   s8   t | jjjdƒ t | jjjjdƒ t | jjjjtƒ d S ©Nr   ©r   r9   r:   r‹   r�   r�   r   r]   rW   rW   rX   r‘   Î   s
    ÿz3TestStatesAR3UnivariateSmoothing.test_smooth_method©r}   r~   r   r€   rY   r‘   rˆ   rW   rW   r…   rX   r’   È   s   r’   c                   @   sZ   e Zd Zed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S )ÚTestStatesMissingAR3Fc                 O   s  t j tdd¡}t |¡| _tjdddd�| j_t j tdd¡}dd	d
dddddddddg}tj|d |d�| _	t j tdd¡}t |¡| _
| jd  ¡ | jd< tj| jj| jjdd… df< tj| jj| jjdd … df f|ždddœ|—Ž| _|�rd| jj_tjd }| jj|dd�| _t d| jjf¡| j_t d| jjf¡| j_t| jjƒD ]b}tj | jjd d …d d …|f ¡| jjd |f< tj | jjd d …d d …|f ¡| jjd |f< �qV| jj}| jj }	| jjj!}
| j "¡ | _#| j#j$t ||	 ¡t ||
 ¡t | jj%¡d!� d S )"Nr   r   r   r   r   r   z'results_wpi1_missing_ar3_matlab_ssm.csvr   r   r   r   r   r   r   r   r   r    r!   r"   r#   zresults_smoothing3_R.csvr&   Zdwpié
   é   r(   )r'   r   r   T)r)   r*   r+   ©Ú
return_ssmr   r-   )&r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   ÚR_ssmÚdiffr<   ÚnanÚlocr   r8   r9   r:   r;   r=   r>   r   r?   r@   rA   rB   rC   rD   rE   rG   rI   rJ   rK   rL   rM   rN   rO   rP   rW   rW   rX   rY   Ö   s|    
ÿÿ

ÿ          þ
ÿÿþþþ

ÿÿ
ýz TestStatesMissingAR3.setup_classc                 C   s2   t | jjd d …d d…f j| jdddg dƒ d S )Nra   r   r   r   rZ   )r   r   rb   rc   r7   r]   rW   rW   rX   rd     s
     þz*TestStatesMissingAR3.test_predicted_statesc                 C   s   t | jjj| jdg dƒ d S re   rf   r]   rW   rW   rX   rg     s
    
 þz.TestStatesMissingAR3.test_predicted_states_covc                 C   s"   t | jjj| jdddg dƒ d S )Nr   r   r   rZ   )r   r   rm   rc   r7   r]   rW   rW   rX   rn     s
     þz)TestStatesMissingAR3.test_smoothed_statesc                 C   s   t | jjj| jdg dƒ d S ro   rp   r]   rW   rW   rX   rq   !  s
    
 þz-TestStatesMissingAR3.test_smoothed_states_covc                 C   s   t | jjj| jdg dƒ d S rr   )r   r   rs   rc   r7   r]   rW   rW   rX   rt   '  s
    
 þz:TestStatesMissingAR3.test_smoothed_measurement_disturbancec                 C   s"   t | jjd j| jdg dƒ d S ru   )r   r   rv   rc   r7   r]   rW   rW   rX   rx   -  s
    
 þz>TestStatesMissingAR3.test_smoothed_measurement_disturbance_covc                 C   s   t | jjj| jdg dƒ d S )NZetahaté	   )r   r   ry   rc   r�   r]   rW   rW   rX   rz   7  s
    
 þz4TestStatesMissingAR3.test_smoothed_state_disturbancec                 C   s(   t | jjddd d …f | jd dƒ d S )Nr   ÚdetVetar¡   )r   r   r{   r�   r]   rW   rW   rX   r|   B  s
     þz8TestStatesMissingAR3.test_smoothed_state_disturbance_covN)F)r}   r~   r   r€   rY   rd   rg   rn   rq   rt   rx   rz   r|   rW   rW   rW   rX   r˜   Õ   s   8
r˜   c                       s    e Zd Ze‡ fdd„ƒZ‡  ZS )Ú#TestStatesMissingAR3AlternateTimingc                    s   t t| ƒj|ddi|—Ž d S r‚   )rƒ   r£   rY   r„   r…   rW   rX   rY   O  s    ÿÿÿÿz/TestStatesMissingAR3AlternateTiming.setup_classr‡   rW   rW   r…   rX   r£   N  s   r£   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú(TestStatesMissingAR3AlternativeSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   r¤   rY   r   r„   r…   rW   rX   rY   V  s    
ÿÿÿz4TestStatesMissingAR3AlternativeSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   rŽ   r]   rW   rW   rX   r‘   [  s    ÿÿz;TestStatesMissingAR3AlternativeSmoothing.test_smooth_methodr—   rW   rW   r…   rX   r¤   U  s   r¤   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú'TestStatesMissingAR3UnivariateSmoothingc                    s   t t| ƒj|dti|—Ž d S r“   )rƒ   r¥   rY   r
   r„   r…   rW   rX   rY   d  s    
ÿÿÿz3TestStatesMissingAR3UnivariateSmoothing.setup_classc                 C   s8   t | jjjdƒ t | jjjjdƒ t | jjjjtƒ d S r•   r–   r]   rW   rW   rX   r‘   i  s
    ÿz:TestStatesMissingAR3UnivariateSmoothing.test_smooth_methodr—   rW   rW   r…   rX   r¥   c  s   r¥   c                   @   s”   e Zd ZdZe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d"S )#ÚTestMultivariateMissingaõ  
    Tests for most filtering and smoothing variables against output from the
    R library KFAS.

    Note that KFAS uses the univariate approach which generally will result in
    different predicted values and covariance matrices associated with the
    measurement equation (e.g. forecasts, etc.). In this case, although the
    model is multivariate, each of the series is truly independent so the
    values will be the same regardless of whether the univariate approach
    is used or not.
    c                 K   sd  t j tdd¡}t |¡| _tj 	¡ j
}tjdddd�|_|ddd	g  ¡ jd
d … }tj|jdd…df< tj|jdd…d
f< tj|jdd…df< tj|jdd…df< tj|jdd…df< tj|fdddœ|—Ž}t d¡|d< t d¡|d< t d¡|d< t d¡|d< t d¡|d< | d¡ || _|jg dd�| _t d
| jjf¡| j_t d
| jjf¡| j_t d
| jjf¡| j_t d
| jjf¡| j_t| jjƒD ]Â}tj  | jj!d d …d d …|f ¡| jjd|f< tj  | jj"d d …d d …|d
 f ¡| jjd|f< tj  | jj#d d …d d …|f ¡| jjd|f< tj  | jj$d d …d d …|f ¡| jjd|f< �qœd S )Nr   zresults_smoothing_R.csvú
1959-01-01ú	2009-7-01r   ©r   Úendr   ÚrealgdpÚrealconsÚrealinvr(   r   é2   é   éF   é'   éZ   rŒ   éw   é‚   r'   ©rO   rK   ÚdesignÚobs_covÚ
transitionÚ	selectionÚ	state_covç    €„.ATr›   )%r.   r/   r0   r1   r2   r3   Údesiredr   Ú	macrodataÚload_pandasÚdatar5   r6   rž   r\   r<   rŸ   r   ÚMLEModelÚeyeÚinitialize_approximate_diffuser9   r>   r   r?   r@   Ú!det_scaled_smoothed_estimator_covrA   rB   Ú"det_smoothed_state_disturbance_covrC   rD   rE   Úscaled_smoothed_estimator_covrG   rI   r{   )rQ   rT   r/   ÚdtaÚobsÚmodrV   rW   rW   rX   rY   |  sT    ÿ
ÿÿÿÿÿÿÿÿz#TestMultivariateMissing.setup_classc                 C   s   t t | jj¡dƒ d S )NgðHÐ÷	Á©r   r<   Úsumr   Zllf_obsr]   rW   rW   rX   Útest_loglike­  s    z$TestMultivariateMissing.test_loglikec                 C   s    t | jjj| jdddg ƒ d S )NÚr1Úr2Úr3©r   r   Zscaled_smoothed_estimatorrc   r¼   r]   rW   rW   rX   Útest_scaled_smoothed_estimator°  s    þz6TestMultivariateMissing.test_scaled_smoothed_estimatorc                 C   s   t | jjj| jdg ƒ d S )NÚdetN)r   r   rÃ   rc   r¼   r]   rW   rW   rX   Ú"test_scaled_smoothed_estimator_cov¶  s    
þz:TestMultivariateMissing.test_scaled_smoothed_estimator_covc                 C   s    t | jjj| jdddg ƒ d S )NÚm1Úm2Úm3©r   r   r[   rc   r¼   r]   rW   rW   rX   Útest_forecasts¼  s    þz&TestMultivariateMissing.test_forecastsc                 C   s    t | jjj| jdddg ƒ d S )NÚv1Úv2Úv3©r   r   Zforecasts_errorrc   r¼   r]   rW   rW   rX   Útest_forecasts_errorÂ  s    þz,TestMultivariateMissing.test_forecasts_errorc                 C   s"   t | jj ¡ | jdddg ƒ d S ©NÚF1ZF2ZF3©r   r   Zforecasts_error_covÚdiagonalr¼   r]   rW   rW   rX   Útest_forecasts_error_covÈ  s    
þz0TestMultivariateMissing.test_forecasts_error_covc                 C   s0   t | jjd d …dd …f j| jdddg ƒ d S )Nr(   r   r   r   ©r   r   rb   rc   r¼   r]   rW   rW   rX   rd   Î  s    þz-TestMultivariateMissing.test_predicted_statesc                 C   s   t | jjj| jdg ƒ d S )Nr   ©r   r   rA   rc   r¼   r]   rW   rW   rX   rg   Ô  s    
þz1TestMultivariateMissing.test_predicted_states_covc                 C   s    t | jjj| jdddg ƒ d S )Nr   r   r   ©r   r   rm   rc   r¼   r]   rW   rW   rX   rn   Ú  s    þz,TestMultivariateMissing.test_smoothed_statesc                 C   s   t | jjj| jdg ƒ d S )Nr   ©r   r   rB   rc   r¼   r]   rW   rW   rX   rq   à  s    
þz0TestMultivariateMissing.test_smoothed_states_covc                 C   s    t | jjj| jdddg ƒ d S )NÚmuhat1Úmuhat2Úmuhat3©r   r   Úsmoothed_forecastsrc   r¼   r]   rW   rW   rX   Útest_smoothed_forecastsæ  s    þz/TestMultivariateMissing.test_smoothed_forecastsc                 C   s    t | jjj| jdddg ƒ d S )NÚetahat1Úetahat2Úetahat3©r   r   ry   rc   r¼   r]   rW   rW   rX   rz   ì  s    þz7TestMultivariateMissing.test_smoothed_state_disturbancec                 C   s   t | jjj| jdg ƒ d S )Nr¢   ©r   r   rÄ   rc   r¼   r]   rW   rW   rX   r|   ò  s    
þz;TestMultivariateMissing.test_smoothed_state_disturbance_covc                 C   s    t | jjj| jdddg ƒ d S )NÚepshat1Úepshat2Úepshat3©r   r   rs   rc   r¼   r]   rW   rW   rX   rt   ø  s    þz=TestMultivariateMissing.test_smoothed_measurement_disturbancec                 C   s"   t | jj ¡ | jdddg ƒ d S ©NÚVeps1ÚVeps2ÚVeps3©r   r   rv   rà   r¼   r]   rW   rW   rX   rx   þ  s    
þzATestMultivariateMissing.test_smoothed_measurement_disturbance_covN©r}   r~   r   Ú__doc__r€   rY   rË   rÐ   rÒ   r×   rÜ   rá   rd   rg   rn   rq   rë   rz   r|   rt   rx   rW   rW   rW   rX   r¦   p  s$   
0r¦   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú)TestMultivariateMissingClassicalSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   rü   rY   r   r„   r…   rW   rX   rY     s    
ÿÿÿz5TestMultivariateMissingClassicalSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   ©r   r9   r:   r‹   r   r�   r�   r]   rW   rW   rX   r‘     s    ÿÿz<TestMultivariateMissingClassicalSmoothing.test_smooth_methodr—   rW   rW   r…   rX   rü     s   rü   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú+TestMultivariateMissingAlternativeSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   rþ   rY   r   r„   r…   rW   rX   rY     s    
ÿÿÿz7TestMultivariateMissingAlternativeSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   rŽ   r]   rW   rW   rX   r‘     s    ÿÿz>TestMultivariateMissingAlternativeSmoothing.test_smooth_methodr—   rW   rW   r…   rX   rþ     s   rþ   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú*TestMultivariateMissingUnivariateSmoothingc                    s   t t| ƒj|dti|—Ž d S r“   )rƒ   rÿ   rY   r
   r„   r…   rW   rX   rY   "  s    
ÿÿÿz6TestMultivariateMissingUnivariateSmoothing.setup_classc                 C   s8   t | jjjdƒ t | jjjjdƒ t | jjjjtƒ d S r•   r–   r]   rW   rW   rX   r‘   '  s
    ÿz=TestMultivariateMissingUnivariateSmoothing.test_smooth_methodr—   rW   rW   r…   rX   rÿ   !  s   rÿ   c                   @   s”   e Zd ZdZe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d"S )#ÚTestMultivariateVARáõ  
    Tests for most filtering and smoothing variables against output from the
    R library KFAS.

    Note that KFAS uses the univariate approach which generally will result in
    different predicted values and covariance matrices associated with the
    measurement equation (e.g. forecasts, etc.). In this case, although the
    model is multivariate, each of the series is truly independent so the
    values will be the same regardless of whether the univariate approach is
    used or not.
    c                 O   sN  t j tdd¡}t |¡| _tj 	¡ j
}tjdddd�|_t |ddd	g ¡ ¡ jd
d … }tj|fdddœ|—Ž}t d¡|d< t dddgdddgdddgg¡|d< t dddgdddgdddgg¡|d< t d¡|d< t dddgddd gdd dgg¡|d!< | d"¡ || _|jg d#d$�| _t d
| jjf¡| j_t d
| jjf¡| j_t d
| jjf¡| j_t d
| jjf¡| j_t| jjƒD ]Â}tj  !| jj"d d …d d …|f ¡| jjd%|f< tj  !| jj#d d …d d …|d
 f ¡| jjd%|f< tj  !| jj$d d …d d …|f ¡| jjd%|f< tj  !| jj%d d …d d …|f ¡| jjd%|f< �q†d S )&Nr   úresults_smoothing2_R.csvr§   r¨   r   r©   r«   r¬   r­   r(   r'   rµ   r¶   çÌáí™RË?ç        ç�Ú‡¯?çžS¾×xÿ[?r·   çäA�+o«¼¿çÖ€Žë?ç¸#¥c
r˜?çé^ìÓÐ?ç'é+šŸúß?çK~‘¾³·‘¿çz\¶GÿÀ	Àç$|J�@çÝAá[äÜ?r¸   r¹   ç¿yN^?çàP.„*,?çZúÈ”¬º>rº   r»   Tr›   r   )&r.   r/   r0   r1   r2   r3   r¼   r   r½   r¾   r¿   r5   r6   r<   Úlogrž   r\   r   rÀ   rÁ   ÚarrayrÂ   r9   r>   r   r?   r@   rÃ   rA   rB   rÄ   rC   rD   rE   rÅ   rG   rI   r{   ©rQ   rS   rT   r/   rÆ   rÇ   rÈ   rV   rW   rW   rX   rY   :  sf    
ÿÿ"ý
ý
ý

ÿÿÿÿÿÿÿÿzTestMultivariateVAR.setup_classc                 C   s   t t | jj¡dƒ d S ©NgØÛe}š@rÉ   r]   rW   rW   rX   rË   p  s    z TestMultivariateVAR.test_loglikec                 C   s$   t | jjj| jdddg dd� d S ©NrÌ   rÍ   rÎ   ç-Cëâ6?©ÚatolrÏ   r]   rW   rW   rX   rÐ   s  s
     þz2TestMultivariateVAR.test_scaled_smoothed_estimatorc                 C   s<   t t | jjjd d… ¡t | jdg d d… ¡dd� d S )Nra   rÑ   ç�íµ ÷Æ°>r  ©r   r<   r  r   rÃ   rc   r¼   r]   rW   rW   rX   rÒ   y  s
     þz6TestMultivariateVAR.test_scaled_smoothed_estimator_covc                 C   s$   t | jjj| jdddg dd� d S )NrÓ   rÔ   rÕ   r  r  rÖ   r]   rW   rW   rX   r×   €  s
     þz"TestMultivariateVAR.test_forecastsc                 C   s*   t | jjjd d …df | jd dd� d S )Nr   rØ   r  r  rÛ   r]   rW   rW   rX   rÜ   †  s
     þz(TestMultivariateVAR.test_forecasts_errorc                 C   s,   t | jj ¡ d d …df | jd dd� d S )Nr   rÞ   r  r  rß   r]   rW   rW   rX   rá   Œ  s
     þz,TestMultivariateVAR.test_forecasts_error_covc                 C   s4   t | jjd d …dd …f j| jdddg dd� d S )Nr(   r   r   r   r  r  râ   r]   rW   rW   rX   rd   ’  s
     þz)TestMultivariateVAR.test_predicted_statesc                 C   s    t | jjj| jdg dd� d S )Nr   ç¼‰Ø—²Òœ<r  rã   r]   rW   rW   rX   rg   ˜  s
    
 þz-TestMultivariateVAR.test_predicted_states_covc                 C   s$   t | jjj| jdddg dd� d S ©Nr   r   r   r  r  rä   r]   rW   rW   rX   rn   ž  s
     þz(TestMultivariateVAR.test_smoothed_statesc                 C   s    t | jjj| jdg dd� d S )Nr   r  r  rå   r]   rW   rW   rX   rq   ¤  s
    
 þz,TestMultivariateVAR.test_smoothed_states_covc                 C   s$   t | jjj| jdddg dd� d S ©Nræ   rç   rè   r  r  ré   r]   rW   rW   rX   rë   ª  s
     þz+TestMultivariateVAR.test_smoothed_forecastsc                 C   s$   t | jjj| jdddg dd� d S ©Nrì   rí   rî   r  r  rï   r]   rW   rW   rX   rz   °  s
     þz3TestMultivariateVAR.test_smoothed_state_disturbancec                 C   s    t | jjj| jdg dd� d S ©Nr¢   ç¬CÒÑ]r2<r  rð   r]   rW   rW   rX   r|   ¶  s
    
 þz7TestMultivariateVAR.test_smoothed_state_disturbance_covc                 C   s$   t | jjj| jdddg dd� d S ©Nrñ   rò   ró   r  r  rô   r]   rW   rW   rX   rt   ¼  s
     þz9TestMultivariateVAR.test_smoothed_measurement_disturbancec                 C   s&   t | jj ¡ | jdddg dd� d S )Nrö   r÷   rø   r  r  rù   r]   rW   rW   rX   rx   Â  s
    
 þz=TestMultivariateVAR.test_smoothed_measurement_disturbance_covNrú   rW   rW   rW   rX   r   .  s$   
5r   c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú'TestMultivariateVARAlternativeSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   r$  rY   r   r„   r…   rW   rX   rY   Ê  s    
ÿÿÿz3TestMultivariateVARAlternativeSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   rŽ   r]   rW   rW   rX   r‘   Ï  s    ÿÿz:TestMultivariateVARAlternativeSmoothing.test_smooth_methodr—   rW   rW   r…   rX   r$  É  s   r$  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú%TestMultivariateVARClassicalSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   r%  rY   r   r„   r…   rW   rX   rY   Ø  s    
ÿÿÿz1TestMultivariateVARClassicalSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   rý   r]   rW   rW   rX   r‘   Ý  s    ÿÿz8TestMultivariateVARClassicalSmoothing.test_smooth_methodr—   rW   rW   r…   rX   r%  ×  s   r%  c                   @   s”   e Zd ZdZe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d"S )#ÚTestMultivariateVARUnivariater  c                 O   sV  t j tdd¡}t |¡| _tj 	¡ j
}tjdddd�|_t |ddd	g ¡ ¡ jd
d … }tj|fdddœ|—Ž}d|j_t d¡|d< t dddgdddgdddgg¡|d< t dddgdddgdddgg¡|d< t d¡|d< t ddd gddd!gd d!dgg¡|d"< | d#¡ || _|jg dd$�| _t d
| jjf¡| j_t d
| jjf¡| j_t d
| jjf¡| j_t d
| jjf¡| j_ t!| jjƒD ]Â}tj" #| jj$d d …d d …|f ¡| jjd%|f< tj" #| jj%d d …d d …|d
 f ¡| jjd%|f< tj" #| jj&d d …d d …|f ¡| jjd%|f< tj" #| jj'd d …d d …|f ¡| jj d%|f< �qŽd S )&Nr   r  r§   r¨   r   r©   r«   r¬   r­   r(   r'   rµ   Tr¶   r  r  r  r  r·   r  r  r	  r
  r  r  r  r  r  r¸   r¹   r  r  r  rº   r»   r›   r   )(r.   r/   r0   r1   r2   r3   r¼   r   r½   r¾   r¿   r5   r6   r<   r  rž   r\   r   rÀ   r:   Úfilter_univariaterÁ   r  rÂ   r9   r>   r   r?   r@   rÃ   rA   rB   rÄ   rC   rD   rE   rÅ   rG   rI   r{   r  rW   rW   rX   rY   ñ  sh    
ÿÿ"ý
ý
ý

ÿÿÿÿÿÿÿÿz)TestMultivariateVARUnivariate.setup_classc                 C   s   t t | jj¡dƒ d S r  rÉ   r]   rW   rW   rX   rË   (  s    z*TestMultivariateVARUnivariate.test_loglikec                 C   s$   t | jjj| jdddg dd� d S r  rÏ   r]   rW   rW   rX   rÐ   +  s
     þz<TestMultivariateVARUnivariate.test_scaled_smoothed_estimatorc                 C   s8   t t | jjjd d… ¡t | jdg d d… ¡ƒ d S )Nra   rÑ   r  r]   rW   rW   rX   rÒ   1  s    þz@TestMultivariateVARUnivariate.test_scaled_smoothed_estimator_covc                 C   s*   t | jjjd d …df | jd dd� d S )Nr   rÓ   r  r  rÖ   r]   rW   rW   rX   r×   8  s
     þz,TestMultivariateVARUnivariate.test_forecastsc                 C   s$   t | jjj| jdddg dd� d S )NrØ   rÙ   rÚ   r  r  rÛ   r]   rW   rW   rX   rÜ   >  s
     þz2TestMultivariateVARUnivariate.test_forecasts_errorc                 C   s"   t | jj ¡ | jdddg ƒ d S rÝ   rß   r]   rW   rW   rX   rá   D  s    
þz6TestMultivariateVARUnivariate.test_forecasts_error_covc                 C   s4   t | jjd d …dd …f j| jdddg dd� d S )Nr(   r   r   r   g:Œ0âŽyE>r  râ   r]   rW   rW   rX   rd   J  s
     þz3TestMultivariateVARUnivariate.test_predicted_statesc                 C   s    t | jjj| jdg dd� d S )Nr   r"  r  rã   r]   rW   rW   rX   rg   P  s
    
 þz7TestMultivariateVARUnivariate.test_predicted_states_covc                 C   s$   t | jjj| jdddg dd� d S r  rä   r]   rW   rW   rX   rn   V  s
     þz2TestMultivariateVARUnivariate.test_smoothed_statesc                 C   s    t | jjj| jdg dd� d S )Nr   r"  r  rå   r]   rW   rW   rX   rq   \  s
    
 þz6TestMultivariateVARUnivariate.test_smoothed_states_covc                 C   s$   t | jjj| jdddg dd� d S r  ré   r]   rW   rW   rX   rë   b  s
     þz5TestMultivariateVARUnivariate.test_smoothed_forecastsc                 C   s$   t | jjj| jdddg dd� d S r   rï   r]   rW   rW   rX   rz   h  s
     þz=TestMultivariateVARUnivariate.test_smoothed_state_disturbancec                 C   s    t | jjj| jdg dd� d S r!  rð   r]   rW   rW   rX   r|   n  s
    
 þzATestMultivariateVARUnivariate.test_smoothed_state_disturbance_covc                 C   s$   t | jjj| jdddg dd� d S r#  rô   r]   rW   rW   rX   rt   t  s
     þzCTestMultivariateVARUnivariate.test_smoothed_measurement_disturbancec                 C   s"   t | jj ¡ | jdddg ƒ d S rõ   rù   r]   rW   rW   rX   rx   z  s    
þzGTestMultivariateVARUnivariate.test_smoothed_measurement_disturbance_covNrú   rW   rW   rW   rX   r&  å  s$   
6r&  c                       s0   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Z‡  ZS )Ú&TestMultivariateVARUnivariateSmoothingc                    s   t t| ƒj|dti|—Ž d S r“   )rƒ   r(  rY   r
   r„   r…   rW   rX   rY   ‚  s    
ÿÿÿz2TestMultivariateVARUnivariateSmoothing.setup_classc                 C   s&   t | jjjtƒ t | jjjjtƒ d S r�   ©r   r9   r:   r”   r
   r�   r]   rW   rW   rX   Útest_filter_method‡  s    ÿz9TestMultivariateVARUnivariateSmoothing.test_filter_methodc                 C   s8   t | jjjdƒ t | jjjjdƒ t | jjjjtƒ d S r•   r–   r]   rW   rW   rX   r‘   Œ  s
    ÿz9TestMultivariateVARUnivariateSmoothing.test_smooth_method©r}   r~   r   r€   rY   r*  r‘   rˆ   rW   rW   r…   rX   r(  �  s   r(  c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚTestVARAutocovariancesÚmixedc                 O   sü  t j ¡ j}tjdddd�|_t |dddg ¡ 	¡ j
dd … }|d	krztj|j
d d
…d d …f< tj|j
dd…d d …f< n |dkr¬tj|j
dd
…df< tj|j
dd…df< nn|dk�rtj|j
dd
…df< tj|j
dd…df< tj|j
dd…df< tj|j
dd…df< tj|j
dd…df< tj|fdddœ|—Ž}t d¡|d< t dddgdddgdddgg¡|d< t dddgd d!d"gd#d$d%gg¡|d&< t d¡|d'< t d(d)d*gd)d+d,gd*d,d-gg¡|d.< | d/¡ || _|jg d0d1�| _| d2d ¡ tj|fd3ddœ|—Ž}t d¡|dd d…d d…f< t dddgdddgdddgg¡|d< t dddgd d!d"gd#d$d%gg¡|d&d d…d d…f< t d¡|d&dd …d d…f< t d¡|d'd d…d d…f< t d(d)d*gd)d+d,gd*d,d-gg¡|d.< | d/¡ || _|jg d0d1�| _d S )4Nr§   r¨   r   r©   r«   r¬   r­   r(   Úallr®   r³   r´   Úpartialr   r-  r¯   r°   r±   r²   rŒ   r'   rµ   r¶   gßÙé˜ƒ@r  g=–z²4
þ?g%'Q+_@r·   g ‘^�ôé¿g
GéùÎü?g
ó{³vXð?gÎ¯ÜE.Áÿ¿gXOÂæE@gœÆ¹÷·Òþ?gí™j�aí?g„û®4CÏ¿g¹£8†uä¿r¸   r¹   g1=NçC˜@gÌ¿Qƒ¿%ƒ@gT|Þþìl‹@gö+¯©û=}@gpqê¦Q@g˜¢æ0Z$Œ@rº   r»   Tr›   Zfilter_collapsedé   )r   r½   r¾   r¿   r2   r5   r6   r<   r  rž   r\   rŸ   r   rÀ   rÁ   r  rÂ   r9   r>   r   ÚpopZaugmented_modelÚaugmented_results)rQ   ÚwhichrS   rT   rÆ   rÇ   rÈ   rW   rW   rX   rY   ”  sz    ÿ"
ý
ý
ý

ý
ýý

z"TestVARAutocovariances.setup_classc                 C   sˆ   t | jjd d …d d …dd…f | jjd d…dd …dd…f dd� t | jjd d …d d …dd…f | jjd d…dd …dd …f d	d� d S )
Nr   é   r'   r(   r0  r  r  ra   gH¯¼šò×z>)r   r   Zsmoothed_state_autocovr2  rI   r]   rW   rW   rX   Útest_smoothed_state_autocovÔ  s    þþz2TestVARAutocovariances.test_smoothed_state_autocovN)r-  )r}   r~   r   r€   rY   r5  rW   rW   rW   rX   r,  “  s   ?r,  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú*TestVARAutocovariancesAlternativeSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   r6  rY   r   r„   r…   rW   rX   rY   á  s    
ÿÿÿz6TestVARAutocovariancesAlternativeSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   rŽ   r]   rW   rW   rX   r‘   æ  s    ÿÿz=TestVARAutocovariancesAlternativeSmoothing.test_smooth_methodr—   rW   rW   r…   rX   r6  à  s   r6  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )Ú(TestVARAutocovariancesClassicalSmoothingc                    s   t t| ƒj|dti|—Ž d S rŠ   )rƒ   r7  rY   r   r„   r…   rW   rX   rY   ï  s    
ÿÿÿz4TestVARAutocovariancesClassicalSmoothing.setup_classc                 C   s8   t | jjjtƒ t | jjjjtƒ t | jjjjtƒ d S r�   rý   r]   rW   rW   rX   r‘   ô  s    ÿÿz;TestVARAutocovariancesClassicalSmoothing.test_smooth_methodr—   rW   rW   r…   rX   r7  î  s   r7  c                       s0   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Z‡  ZS )Ú)TestVARAutocovariancesUnivariateSmoothingc                    s   t t| ƒj|dti|—Ž d S r“   )rƒ   r8  rY   r
   r„   r…   rW   rX   rY   ý  s    
ÿÿÿz5TestVARAutocovariancesUnivariateSmoothing.setup_classc                 C   s&   t | jjjtƒ t | jjjjtƒ d S r�   r)  r]   rW   rW   rX   r*    s    ÿz<TestVARAutocovariancesUnivariateSmoothing.test_filter_methodc                 C   s8   t | jjjdƒ t | jjjjdƒ t | jjjjtƒ d S r•   r–   r]   rW   rW   rX   r‘     s
    ÿz<TestVARAutocovariancesUnivariateSmoothing.test_smooth_methodr+  rW   rW   r…   rX   r8  ü  s   r8  c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚTVSSWithLagsc                    s@   t ƒ j|dd� t d¡d | ddd …d d…f< | j d¡ d S )Né   )Z	_k_statesr0  ).Nr¸   rŒ   r  )rƒ   Ú__init__r<   rÁ   r:   rÂ   )r^   Úendogr…   rW   rX   r;    s     zTVSSWithLags.__init__)r}   r~   r   r;  rˆ   rW   rW   r…   rX   r9    s   r9  Tc                 C   s†  t j ¡ j}tjdddd�|_t |ddg ¡ 	¡ j
dd … }| dkrxtj|j
d d	…d d …f< tj|j
d
d…d d …f< nv| dkrªtj|j
dd	…df< tj|j
d
d…df< nD| dkrîtj|j
dd	…df< tj|j
dd…df< tj|j
d
d…df< |d k	�r tj|jd t|ƒ| dd�}| |¡}|�s`tj|dddd�}	||	j_|d k�rP|	j}|	j||d�}
nt|ƒ}	||	j_|	jg |d�}
|	|
fS )Nr§   r¨   r   r©   r«   r¬   r(   r.  r4  é   é   r/  r   r-  é   r   )rZ   r   r   T)r)   Zmeasurement_errorZ	tolerancer›   )r   r½   r¾   r¿   r2   r5   r6   r<   r  rž   r\   rŸ   ÚlenZreindexr   ZVARMAXr:   r'  Ústart_paramsr>   r9  )Úmissingr'  ÚtvpÚoosrU   rœ   rÆ   r<  Znew_ixrÈ   rw   rW   rW   rX   Úget_acov_model  sB    ÿ 

 ÿ

ÿ
rE  rB  r.  r/  r-  r'  FrC  c                 C   s¶  t | ||ƒ\}}|j ddd¡}|dd…dd…dd…f }|dd…dd…dd…f }|dd…dd…dd…f }| d¡ ddd¡}	t|	dd…dd…dd…f |dd… ddd	� t|	dd… tjƒ | d¡ ddd¡}
t|
dd…dd…dd…f |dd… ddd	� t|
dd… tjƒ | d
¡ ddd¡}t|d
d…dd…dd…f |d
d… ddd	� t|dd
… tjƒ |jddd�}	t|	tjƒ |jddd�}	t|	dd…dd…f |d ddd	� |jdddd� ddd¡}	t|	dd…dd…dd…f |dd… ddd	� |jddd�}
t|
tjƒ |jddd�}
t|
tjƒ |jddd�}
t|
dd…dd…f |d ddd	� |jdddd� ddd¡}
t|
dd…dd…dd…f |dd… ddd	� dS )z"
    Test for Cov(t, t - lag)
    rŒ   r   r(   NrZ   r0  r:  r  )Zrtolr  r'   ©Útr¡   ©r   rª   )rE  rI   Ú	transposeÚsmoothed_state_autocovariancer   r   r<   rŸ   )rB  r'  rC  Ú_rw   ÚcovÚdesired_acov1Údesired_acov2Údesired_acov3Úacov1Úacov2Úacov3rW   rW   rX   Ú-test_smoothed_state_autocovariances_backwards=  sX    ...$  ÿ  ÿ.$  ÿ  ÿrS  c                 C   s`  t | ||dd�\}}ddddddg}|s@t | |||jd	�\}}n:t | ||ƒ\}}|D ]}	||	d
dd…f ||	< qT|j ¡ }i }
i }|rÌddddddg}|D ]0}||d
dd…f |
|< ||d
dd…f ||< qšt|j|jƒ |j ddd¡}|dd…dd…dd…f }|dd…dd…dd…f }|dd…dd…dd…f }tj	|j|j
d
dd…f fdd� ddd¡}| d¡ ddd¡}t|dd…dd…dd…f |dd… ƒ t|dd…dd…dd…f |dd…dd…dd…f ƒ |jd|
d� ddd¡}t|dd…dd…dd…f |dd… ƒ t|dd…dd…dd…f |dd…dd…dd…f ƒ |jd|d� ddd¡}t|dd…dd…dd…f |dd… ƒ t|dd…dd…dd…f |dd…dd…dd…f ƒ |jd|j|
d�}t|dd…dd…f |ddd…dd…f ƒ |jddd�}t|dd…dd…f |d ƒ |jdddd� ddd¡}t|dd…dd…dd…f |dd… ƒ |jd|j|d�}t|dd…dd…f |ddd…dd…f ƒ |jd|jd |
d�}t|dd…dd…f |ddd…dd…f ƒ |jddd�}t|dd…dd…f |d ƒ |jdddd� ddd¡}t|dd…dd…dd…f |dd… ƒ dS )z"
    Test for Cov(t, t + lag)
    r'   ©rD  Úobs_interceptr¶   r·   r¸   r¹   rº   ©rU   .Néýÿÿÿéþÿÿÿra   rŒ   r   r(   rZ   r0  r:  ©Zaxiséûÿÿÿ)Úextend_kwargséüÿÿÿ)rG  r[  rF  r¡   rH  r™   r=  )rE  rA  r:   r>   r   ÚllfrI   rI  r<   ÚconcatenaterG   rJ  r@   )rB  r'  rC  Úmod_oosÚres_oosr%   rÈ   rw   rK  ÚnameZextend_kwargs1Zextend_kwargs2ÚkeysÚkeyrL  rM  rN  rO  Zoos_covrP  rQ  rR  rW   rW   rX   Ú,test_smoothed_state_autocovariances_forwardsm  sÈ    
ÿÿ
 ÿþ  þ(6 ÿ  ÿ(6 ÿ  ÿ(6  ÿ,  ÿ  ÿ(  ÿ,  ÿ,  ÿ  ÿrd  c              
   C   sš  t | ||dd�\}}ddddddg}|s@t | |||jd	�\}}n:t | ||ƒ\}}|D ]}	||	d
d d…f ||	< qT|j ¡ }t|j|jƒ tj|j|j	d
dd …f fdd� 
ddd¡}
|
d d …dd…d d…f }|
d d …dd…d d…f }|
d d …dd…d d…f }i }|�rr|dd
dd …f |dd
dd …f |dd
dd …f |dd
dd …f |dd
dd …f |dd
dd …f dœ}|jd|j|d� 
ddd¡}t|j|j|j|jfƒ t|d d …d d…d d…f |dd … ƒ |jd|jd |d� 
ddd¡}t|j|jd |j|jfƒ t|d d …d d…d d…f |dd … ƒ |jd|jd |d� 
ddd¡}t|j|jd |j|jfƒ t|d d …d d…d d…f |dd … ƒ d S )Nr4  rT  rU  r¶   r·   r¸   r¹   rº   rV  .rZ  ra   rŒ   rY  r   r(   rZ   r0  r:  ©rU  r¶   r·   r¸   r¹   rº   ©rª   r[  rX  rW  r'   )rE  rA  r:   r>   r   r]  r<   r^  rI   rG   rI  rJ  r@   r   ÚshaperO   )rB  r'  rC  r_  r`  r%   rÈ   rw   rK  ra  rL  rM  rN  rO  r[  rP  rQ  rR  rW   rW   rX   Ú0test_smoothed_state_autocovariances_forwards_oosÄ  s„    

ÿÿ
þ  þú  ÿ  ÿ(
 þ  þ( þ  þrh  c              
   C   sž  t | ||dd�\}}ddddddg}|s@t | |||jd	�\}}n:t | ||ƒ\}}|D ]}	||	d
d d…f ||	< qT|j ¡ }t|j|jƒ tj|j|j	d
dd …f fdd� 
ddd¡}
|
d d …d d…dd…f }|
d d …d d…dd…f }|
d d …d d…dd…f }|jd }i }|�r||dd
dd …f |dd
dd …f |dd
dd …f |dd
dd …f |dd
dd …f |dd
dd …f dœ}|jd||d� 
ddd¡}t|j|jd |j|jfƒ t|dd …d d…d d…f |dd … ƒ t|d d… tjƒ |jd||d� 
ddd¡}t|dd …d d…d d…f |dd … ƒ t|d d… tjƒ |jd||d� 
ddd¡}t|dd …d d…d d…f |dd … ƒ t|d d… tjƒ d S )Nr4  rT  rU  r¶   r·   r¸   r¹   rº   rV  .rZ  ra   rŒ   rY  r   r(   rZ   r0  r:  re  rf  r'   )rE  rA  r:   r>   r   r]  r<   r^  rI   rG   rI  r@   rJ  r   rg  rO   rŸ   )rB  r'  rC  r_  r`  r%   rÈ   rw   rK  ra  rL  rM  rN  rO  rª   r[  rP  rQ  rR  rW   rW   rX   Ú1test_smoothed_state_autocovariances_backwards_oos  sˆ    

ÿÿ
þ  þ
ú  ÿ  ÿ(  ÿ  ÿ(  ÿ  ÿ(ri  c               	   C   sâ   t dddd�\} }tjtdd�� |jdddd� W 5 Q R X tjtdd�� |jddd	� W 5 Q R X tjtdd�� |jddd
� W 5 Q R X tjtdd�� |jddd� W 5 Q R X tjtdd�� |jdddd� W 5 Q R X d S )NF)rB  r'  rC  zCannot specify both `t`©Úmatchr(   )rG  r   zNegative `t`ra   rF  )r   )rª   z`end` must be after `start`r4  rZ   rH  )rE  ÚpytestÚraisesÚ
ValueErrorrJ  )rK  rw   rW   rW   rX   Ú+test_smoothed_state_autocovariances_invalid^  s    ro  c                 C   s2  t | ||ƒ\}}|rg n|j}t d¡tj }ddg|d< tj|j|fdd�}| |¡}|j|dd�}	| 	¡ }
tj|
dd …< | |
¡}|j|dd�}dd	d
|j
d	 |j
|j
d	 |j
d fD ]r}|	j||d�}|	jd|f |jd|f  }t|j|dd� t|jd ƒ |	j|||d	 d�}t|j|d dd� qºd S )N)r™   rŒ   gš™™™™™¹?gš™™™™™É¿r   rY  Tr›   éöÿÿÿr(   é–   r¡   rF  .g›+¡†›„=r  rH  )N.)rE  rA  r<   r?   rŸ   r^  r<  Úcloner>   Úcopyr@   Únewsrê   r   Úupdate_impactsr   Úrevision_impacts)rB  r'  rC  rÈ   rw   rU   ÚappendÚendog2Úmod2Úres2Zendog3Zmod3Zres3rG  Úoutr¼   rW   rW   rX   Útest_news_basicr  s(    

*ÿr|  c                 C   sø   t | ||dd�\}}|rg n|j}|j ¡ }ddg|d< ddg|d< | |¡}|j|dd	�}|jd }	d
dd|	d |	|	d |	d fD ]n}
|j||
d�}|jd|
f |j	jd|
f  }t
|j|dd� |j	jd|
f |jd|
f  }t
|j|dd� q„d S )Nr™   rT  r  iõÿÿÿg333333Ó¿gš™™™™™Ù¿rp  Tr›   r   r(   rq  r¡   rF  .g»½×Ùß|Û=r  )rE  rA  r<  rs  rr  r>   r@   rt  rê   Zrevision_resultsr   ru  rv  )rB  r'  rC  rÈ   rw   rU   rx  ry  rz  r@   rG  r{  r¼   rW   rW   rX   Útest_news_revisionsŸ  s$    


"ÿÿr}  c              	   C   s  d}t | ||dd�\}}|r g n|j}|j ¡ }ddg|d< | |¡}|j|dd�}	|j|dd�}
|
j||jd d	� d
}t	j
t|d�� |	j||jd d	� W 5 Q R X |rÞd}t	j
t|d�� |
j||jd d	� W 5 Q R X t | ||ƒ\}}|rög n|j}|j ¡ d |jd … }| |¡}|j|dd�}|d }t	j
t|d�� |j||jd d	� W 5 Q R X t t |j¡¡}|jddgdd�}|d }t	j
t|d�� |j||jd d	� W 5 Q R X t | || dd�\}}|�rÞd}nd}t	j
t|d�� |j||jd d	� W 5 Q R X d S )Nz«This results object has %s and so it does not appear to by an extension of `previous`. Can only compute the news by comparing this results set to previous results objects.r(   rT  gš™™™™™É?g      à?ra   Tr›   rF  zECannot compute news without having applied the Kalman smoother first.rj  z[Cannot compute the impacts of news on periods outside of the sample in time-varying models.rŒ   z"fewer observations than `previous`g      ð?z0different state space dimensions than `previous`z/time-invariant design while `previous` does notz-time-varying design while `previous` does not)rE  rA  r<  rs  rr  Úfilterr>   rt  r@   rl  rm  rn  ÚRuntimeErrorr   r8   r<   r?   )rB  r'  rC  Zerror_ssrÈ   rw   rU   rx  ry  Zres2_filteredZres2_smoothedÚmsgrz  rW   rW   rX   Útest_news_invalidÄ  sF    


r�  )NNT)?rû   r.   Únumpyr<   Znumpy.testingr   r   r   Zpandasr2   rl  Zstatsmodelsr   Zstatsmodels.tsa.statespacer   r   r   Z7statsmodels.tsa.statespace.tests.test_impulse_responsesr	   Z(statsmodels.tsa.statespace.kalman_filterr
   Z*statsmodels.tsa.statespace.kalman_smootherr   r   r   r/   ÚdirnameÚabspathÚ__file__r1   r   r�   r‰   r’   r˜   r£   r¤   r¥   r¦   rü   rþ   rÿ   r   r$  r%  r&  r(  r,  r6  r7  r8  r9  rE  ÚmarkZparametrizerS  rd  rh  ri  ro  r|  r}  r�  rW   rW   rW   rX   Ú<module>   sˆ    y   M	  ÿ
&-TJJ*"