U
    Ãmœd]¸  ã                   @   s†  d Z ddlZddlZddl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mZ ddlmZ dd	lmZmZmZmZ ej ej e¡¡Zej d
d¡Z e !ej ee ¡¡Z"G dd„ dƒZ#G dd„ de#ƒZ$G dd„ de#ƒZ%ej& 'd¡G dd„ de#ƒƒZ(G dd„ de#ƒZ)G dd„ de#ƒZ*G dd„ de#ƒZ+G dd„ de+ƒZ,G dd„ de+ƒZ-G dd „ d e+ƒZ.G d!d"„ d"e#ƒZ/G d#d$„ d$ƒZ0G d%d&„ d&e0ƒZ1G d'd(„ d(e0ƒZ2G d)d*„ d*e0ƒZ3G d+d,„ d,e3ƒZ4G d-d.„ d.e3ƒZ5G d/d0„ d0e3ƒZ6G d1d2„ d2e0ƒZ7G d3d4„ d4e0ƒZ8d5d6„ Z9d7d8„ Z:d9d:„ Z;d;d<„ Z<d=d>„ Z=d?d@„ Z>dAdB„ Z?dCdD„ Z@dEdF„ ZAdGdH„ ZBdIdJ„ ZCdKdL„ ZDdMdN„ ZEdOdP„ ZFdQdR„ ZGdS )Sa?  
Tests for python wrapper of state space representation and filtering

Author: Chad Fulton
License: Simplified-BSD

References
----------

Kim, Chang-Jin, and Charles R. Nelson. 1999.
"State-Space Models with Regime Switching:
Classical and Gibbs-Sampling Approaches with Applications".
MIT Press Books. The MIT Press.
é    N©ÚRepresentation)ÚKalmanFilterÚFilterResultsÚPredictionResults)ÚSimulationSmoother)ÚtoolsÚsarimaxé   )Úresults_kalman_filter)Úassert_equalÚassert_almost_equalÚassert_raisesÚassert_allcloseÚresultszresults_clark1989_R.csvc                   @   s<   e Zd ZdZeefdd„ƒZedd„ ƒZdd„ Zdd	„ Z	d
S )Ú	Clark1987a>  
    Clark's (1987) univariate unobserved components model of real GDP (as
    presented in Kim and Nelson, 1999)

    Test data produced using GAUSS code described in Kim and Nelson (1999) and
    found at http://econ.korea.ac.kr/~cjkim/SSMARKOV.htm

    See `results.results_kalman_filter` for more information.
    c              
   K   sÒ  t j| _t | jd ¡| _tj| jd tjdddd�dgd�}t |d ¡|d	< d
}t	f d|dœ|—Ž| _
| j
 |d	 j¡ ddddg| j
jd d …d d …df< ddddddg| j
jddddddgddddddgddddddgf< t | j
j¡| j
_t | jd ¡\}}}}}	||	g| j
jddgddgddgf< |d |d d|d g| j
jt |¡tj|td�f < t |f¡}
t |¡d }t t | j
jd d …d d …df |¡| j
jd d …d d …df j¡}| j
 |
|¡ d S )NÚstatesÚdataú
1947-01-01ú
1995-07-01ÚQS©ÚfreqÚGDP©ÚindexÚcolumnsÚlgdpé   r
   ©Úk_endogÚk_statesr   é   é   Ú
parameters©Údtypeéd   )r   Úuc_uniÚtrueÚpdÚ	DataFrameÚtrue_statesÚ
date_rangeÚnpÚlogr   ÚmodelÚbindÚvaluesÚdesignÚ
transitionÚeyer!   Ú	selectionÚarrayÚ	state_covÚdiag_indicesÚzerosÚintÚdotÚTÚinitialize_known)Úclsr&   Úkwargsr   r!   Úsigma_vÚsigma_eÚsigma_wÚphi_1Úphi_2Úinitial_stateÚinitial_state_cov© rH   úm/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_representation.pyÚsetup_class0   sJ    ý"þþÿ"   ÿÿÿ þzClark1987.setup_classc                 C   s
   | j  ¡ S ©N©r0   Úfilter©r?   rH   rH   rI   Ú
run_filter]   s    zClark1987.run_filterc                 C   s,   t | jj| jd d …  ¡ | jd dƒ d S )NÚstartÚloglikeé   )r   r   Úllf_obsr)   Úsum©ÚselfrH   rH   rI   Útest_loglikeb   s
     þzClark1987.test_loglikec                 C   sš   t | jjd | jd d … | jjd d …df dƒ t | jjd | jd d … | jjd d …df dƒ t | jjd | jd d … | jjd d …df dƒ d S ©Nr   rP   r   r
   r#   r"   ©r   r   Úfiltered_stater)   r,   ÚilocrU   rH   rH   rI   Útest_filtered_stateh   s     þ þ þzClark1987.test_filtered_stateN©
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodÚfloatrJ   rO   rW   r\   rH   rH   rH   rI   r   &   s   	,
r   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987SinglezP
    Basic single precision test for the loglikelihood and filtered states.
    c                    s.   t  d¡ tt| ƒjtjdd� |  ¡ | _d S )NúNot implementedr   ©r&   Úconserve_memory)	ÚpytestÚskipÚsuperrd   rJ   r.   Zfloat32rO   r   rN   ©Ú	__class__rH   rI   rJ   {   s    

 ÿzTestClark1987Single.setup_class©r^   r_   r`   ra   rb   rJ   Ú__classcell__rH   rH   rk   rI   rd   w   s   rd   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987DoublezP
    Basic double precision test for the loglikelihood and filtered states.
    c                    s"   t t| ƒjtdd� |  ¡ | _d S ©Nr   rf   )rj   ro   rJ   rc   rO   r   rN   rk   rH   rI   rJ   ˆ   s
    
 ÿzTestClark1987Double.setup_classrm   rH   rH   rk   rI   ro   „   s   ro   re   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987SingleComplexz\
    Basic single precision complex test for the loglikelihood and filtered
    states.
    c                    s$   t t| ƒjtjdd� |  ¡ | _d S rp   )rj   rq   rJ   r.   Z	complex64rO   r   rN   rk   rH   rI   rJ   –   s
    
 ÿz&TestClark1987SingleComplex.setup_classrm   rH   rH   rk   rI   rq   �   s   rq   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987DoubleComplexz\
    Basic double precision complex test for the loglikelihood and filtered
    states.
    c                    s"   t t| ƒjtdd� |  ¡ | _d S rp   )rj   rr   rJ   ÚcomplexrO   r   rN   rk   rH   rI   rJ   £   s
    
 ÿz&TestClark1987DoubleComplex.setup_classrm   rH   rH   rk   rI   rr   ž   s   rr   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987ConservezM
    Memory conservation test for the loglikelihood and filtered states.
    c                    s"   t t| ƒjtdd� |  ¡ | _d S ©Nr#   rf   )rj   rt   rJ   rc   rO   r   rN   rk   rH   rI   rJ   ¯   s
    
 ÿz!TestClark1987Conserve.setup_classrm   rH   rH   rk   rI   rt   «   s   rt   c                       s4   e Zd ZdZeeddf‡ fdd„	ƒZdd„ Z‡  ZS )ÚClark1987ForecastzE
    Forecasting test for the loglikelihood and filtered states.
    r'   r   c                    sh   t t| ƒj||d� || _tjtj| jjdd d …f tj	g| f d|dd�| j_| jjj
d | j_d S )Nrf   r   r"   ÚF©Úndminr&   Úorderr
   )rj   rv   rJ   Ú	nforecastr.   r7   Úr_r0   ÚendogÚnanÚshapeÚnobs©r?   r&   r{   rg   rk   rH   rI   rJ   »   s    
 ÿ$  þ
zClark1987Forecast.setup_classc                 C   s¦   t | jjd | jd | j … | jjd d …df dƒ t | jjd | jd | j … | jjd d …df dƒ t | jjd | jd | j … | jjd d …df dƒ d S rX   ©r   r   rZ   r)   r{   r,   r[   rU   rH   rH   rI   r\   É   s     þ þ þz%Clark1987Forecast.test_filtered_state©	r^   r_   r`   ra   rb   rc   rJ   r\   rn   rH   rH   rk   rI   rv   ·   s   rv   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987ForecastDoubleúR
    Basic double forecasting test for the loglikelihood and filtered states.
    c                    s   t t| ƒ ¡  |  ¡ | _d S rK   )rj   r„   rJ   rO   r   rN   rk   rH   rI   rJ   Ü   s    z'TestClark1987ForecastDouble.setup_classrm   rH   rH   rk   rI   r„   Ø   s   r„   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )Ú"TestClark1987ForecastDoubleComplexú^
    Basic double complex forecasting test for the loglikelihood and filtered
    states.
    c                    s    t t| ƒjtd� |  ¡ | _d S ©Nr%   )rj   r†   rJ   rs   rO   r   rN   rk   rH   rI   rJ   ç   s    
ÿz.TestClark1987ForecastDoubleComplex.setup_classrm   rH   rH   rk   rI   r†   â   s   r†   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1987ForecastConserveú]
    Memory conservation forecasting test for the loglikelihood and filtered
    states.
    c                    s"   t t| ƒjtdd� |  ¡ | _d S ru   )rj   r‰   rJ   rc   rO   r   rN   rk   rH   rI   rJ   ô   s
    
 ÿz)TestClark1987ForecastConserve.setup_classrm   rH   rH   rk   rI   r‰   ï   s   r‰   c                       s4   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Z‡  ZS )ÚTestClark1987ConserveAllrŠ   c                    s0   t t| ƒjtdd� | jd | j_|  ¡ | _d S )Né   rf   rP   )	rj   r‹   rJ   rc   r)   r0   Úloglikelihood_burnrO   r   rN   rk   rH   rI   rJ     s    
 ÿz$TestClark1987ConserveAll.setup_classc                 C   s   t | jj| jd dƒ d S )NrQ   rR   ©r   r   Úllfr)   rU   rH   rH   rI   rW   	  s
      ÿz%TestClark1987ConserveAll.test_loglikec                 C   s`   | j jd }t| jjd d | j j|d df dƒ t| jjd d | j j|d df dƒ d S )Nr   éÿÿÿÿr
   r   ©r,   r   r   r   rZ   r[   ©rV   ÚendrH   rH   rI   r\     s     þ þz,TestClark1987ConserveAll.test_filtered_state©	r^   r_   r`   ra   rb   rJ   rW   r\   rn   rH   rH   rk   rI   r‹   ü   s
   r‹   c                   @   s<   e Zd ZdZeefdd„ƒZedd„ ƒZdd„ Zdd	„ Z	d
S )Ú	Clark1989aj  
    Clark's (1989) bivariate unobserved components model of real GDP (as
    presented in Kim and Nelson, 1999)

    Tests two-dimensional observation data.

    Test data produced using GAUSS code described in Kim and Nelson (1999) and
    found at http://econ.korea.ac.kr/~cjkim/SSMARKOV.htm

    See `results.results_kalman_filter` for more information.
    c                 K   s^  t j| _t | jd ¡| _tj| jd tjdddd�ddgd	�d
d … }t |d ¡|d< |d d |d< d}t	f d|dœ|—Ž| _
| j
 t |j¡¡ ddddddgddddddgg| j
jd d …d d …df< ddddddddg| j
jddddddd
dgdd
ddddd
dgddddddddgf< t | j
j¡| j
_t | jd ¡\
}}}}}	}
}}}}|||g| j
jdddgdddgdddgf< |
|g| j
jddgddgddgf< |	d | j
jd< |d |d dd|d |d g| j
jt |¡tj|td�f < t |f¡}t |¡d }t t | j
jd d …d d …df |¡| j
jd d …d d …df j¡}| j
 ||¡ d S )Nr   r   r   r   r   r   r   ZUNEMPr   r   r'   é   r"   r   r
   r   r#   rR   r$   ©r
   r
   r   r%   )r   Zuc_bir)   r*   r+   r,   r-   r.   r/   r   r0   r1   Úascontiguousarrayr2   r3   r4   r5   r!   r6   r7   Úobs_covr8   r9   r:   r;   r<   r=   r>   )r?   r&   r@   r   r!   rA   rB   rC   Zsigma_vlZsigma_ecrD   rE   Zalpha_1Zalpha_2Zalpha_3rF   rG   rH   rH   rI   rJ   &  sn    ýü6üþÿÿÿ      ÿ$"     ÿÿÿ þzClark1989.setup_classc                 C   s
   | j  ¡ S rK   rL   rN   rH   rH   rI   rO   [  s    zClark1989.run_filterc                 C   s&   t | jjdd …  ¡ | jd dƒ d S )Nr   rQ   r"   )r   r   rS   rT   r)   rU   rH   rH   rI   rW   `  s
     ýzClark1989.test_loglikec                 C   sÌ   t | jjd | jd d … | jjd d …df dƒ t | jjd | jd d … | jjd d …df dƒ t | jjd | jd d … | jjd d …df dƒ t | jjd | jd d … | jjd d …df dƒ d S ©Nr   rP   r   r
   r"   rR   r#   rY   rU   rH   rH   rI   r\   g  s(     þ þ þ þzClark1989.test_filtered_stateNr]   rH   rH   rH   rI   r•     s   4
r•   c                       s,   e Zd ZdZe‡ fdd„ƒZdd„ Z‡  ZS )ÚTestClark1989z|
    Basic double precision test for the loglikelihood and filtered
    states with two-dimensional observation vector.
    c                    s"   t t| ƒjtdd� |  ¡ | _d S rp   )rj   r›   rJ   rc   rO   r   rN   rk   rH   rI   rJ     s    zTestClark1989.setup_classc                 C   s*   t | jjjdd�jdd�td dd� d S )Nr
   )Zaxisr   ZV1g-Cëâ6?©Zatol)r   r   Zkalman_gainrT   Úclark1989_resultsrU   rH   rH   rI   Útest_kalman_gain„  s     ÿzTestClark1989.test_kalman_gain)r^   r_   r`   ra   rb   rJ   rž   rn   rH   rH   rk   rI   r›   z  s   r›   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1989Conserveúy
    Memory conservation test for the loglikelihood and filtered states with
    two-dimensional observation vector.
    c                    s"   t t| ƒjtdd� |  ¡ | _d S ru   )rj   rŸ   rJ   rc   rO   r   rN   rk   rH   rI   rJ   Ž  s
    
 ÿz!TestClark1989Conserve.setup_classrm   rH   rH   rk   rI   rŸ   ‰  s   rŸ   c                       s4   e Zd ZdZeeddf‡ fdd„	ƒZdd„ Z‡  ZS )ÚClark1989Forecastr    r'   r   c                    sx   t t| ƒj||d� || _tjtj| jjtj	tj
tj
g|   d|¡f d|dd�| j_| jjjd | j_|  ¡ | _d S )Nrf   r"   rw   rx   r
   )rj   r¡   rJ   r{   r.   r7   Úc_r0   r}   r|   r~   Úreshaper   r€   rO   r   r�   rk   rH   rI   rJ   ›  s"    
 ÿÿÿ  û
zClark1989Forecast.setup_classc                 C   sÜ   t | jjd | jd | j … | jjd d …df dƒ t | jjd | jd | j … | jjd d …df dƒ t | jjd | jd | j … | jjd d …df dƒ t | jjd | jd | j … | jjd d …df dƒ d S rš   r‚   rU   rH   rH   rI   r\   ®  s(     þ þ þ þz%Clark1989Forecast.test_filtered_staterƒ   rH   rH   rk   rI   r¡   –  s   r¡   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1989ForecastDoubler…   c                    s   t t| ƒ ¡  |  ¡ | _d S rK   )rj   r¤   rJ   rO   r   rN   rk   rH   rI   rJ   Å  s    z'TestClark1989ForecastDouble.setup_classrm   rH   rH   rk   rI   r¤   Á  s   r¤   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )Ú"TestClark1989ForecastDoubleComplexr‡   c                    s    t t| ƒjtd� |  ¡ | _d S rˆ   )rj   r¥   rJ   rs   rO   r   rN   rk   rH   rI   rJ   Ð  s    
ÿz.TestClark1989ForecastDoubleComplex.setup_classrm   rH   rH   rk   rI   r¥   Ë  s   r¥   c                       s$   e Zd ZdZe‡ fdd„ƒZ‡  ZS )ÚTestClark1989ForecastConserverŠ   c                    s"   t t| ƒjtdd� |  ¡ | _d S ru   )rj   r¦   rJ   rc   rO   r   rN   rk   rH   rI   rJ   Ý  s
    
 ÿz)TestClark1989ForecastConserve.setup_classrm   rH   rH   rk   rI   r¦   Ø  s   r¦   c                       s4   e Zd ZdZe‡ fdd„ƒZdd„ Zdd„ Z‡  ZS )ÚTestClark1989ConserveAllrŠ   c                    s*   t t| ƒjtdd� d| j_|  ¡ | _d S )NrŒ   rf   r   )rj   r§   rJ   rc   r0   r�   rO   r   rN   rk   rH   rI   rJ   ê  s    
 ÿz$TestClark1989ConserveAll.setup_classc                 C   s   t | jj| jd dƒ d S )NrQ   r"   rŽ   rU   rH   rH   rI   rW   ó  s
      ÿz%TestClark1989ConserveAll.test_loglikec                 C   s°   | j jd }t| jjd d | j j|d df dƒ t| jjd d | j j|d df dƒ t| jjd d | j j|d df dƒ t| jjd d | j j|d df dƒ d S )Nr   r�   r
   r   r"   rR   r#   r‘   r’   rH   rH   rI   r\   ø  s*     þ þ þ þz,TestClark1989ConserveAll.test_filtered_stater”   rH   rH   rk   rI   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 )	ÚTestClark1989PartialMissingc                    sB   t t| ƒ ¡  | jj}tj|ddd …f< | j |¡ |  ¡ | _	d S )Nr
   iÍÿÿÿ)
rj   r¨   rJ   r0   r}   r.   ÚNaNr1   rO   r   )r?   r}   rk   rH   rI   rJ     s
    z'TestClark1989PartialMissing.setup_classc                 C   s   t | jjdd …  ¡ dƒ d S )Nr   g$FÏ-t@“@)r   r   rS   rT   rU   rH   rH   rI   rW     s    z(TestClark1989PartialMissing.test_loglikec                 C   s   d S rK   rH   rU   rH   rH   rI   r\     s    z/TestClark1989PartialMissing.test_filtered_statec                 C   s2   t | jjjdd … tjd d …dd …f dd� d S )Nr
   g:Œ0âŽyE>rœ   )r   r   Úpredicted_stater=   r�   r[   rU   rH   rH   rI   Útest_predicted_state  s
     þz0TestClark1989PartialMissing.test_predicted_state)	r^   r_   r`   rb   rJ   rW   r\   r«   rn   rH   rH   rk   rI   r¨     s
   r¨   c                     s2  t  d¡d } tddd�‰ ˆ  | ¡ ‡ fdd„}‡ fdd	„}‡ fd
d„}tt|ƒ tt|ƒ tt|ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tˆ jd dƒ dˆ d< tˆ d  ¡ dƒ tˆ jd dƒ tˆ d dƒ t  	ˆ d j
¡ˆ d< tˆ jd dƒ dˆ d< tˆ jd dƒ tˆ d dƒ d S )Né
   ç      ð?r
   r"   r   c                      s   dˆ d< d S )Nr
   ÚdesignsrH   rH   ©ÚmodrH   rI   Úset_designs.  s    z(test_slice_notation.<locals>.set_designsc                      s   dˆ d< d S )Nr
   )r®   r   r   rH   rH   r¯   rH   rI   Úset_designs21  s    z)test_slice_notation.<locals>.set_designs2c                      s   dˆ d< d S ©Nr
   r   rH   rH   r¯   rH   rI   Úset_designs34  s    z)test_slice_notation.<locals>.set_designs3c                      s   ˆ d S )Nr®   rH   rH   r¯   rH   rI   Ú<lambda><  ó    z%test_slice_notation.<locals>.<lambda>c                      s   ˆ d S )N)r®   r   r   r   rH   rH   r¯   rH   rI   rµ   =  r¶   c                      s   ˆ d S )Nr   rH   rH   r¯   rH   rI   rµ   >  r¶   )r   r   r   r   )r3   r   r   r   r3   ©r   r   ©r3   r   r   )r.   Úaranger   r1   r   Ú
IndexErrorr   r3   rT   r:   r   )r}   r±   r²   r´   rH   r¯   rI   Útest_slice_notation%  s,    



r»   c                  C   sâ   dd„ } t t| ƒ dd„ }t t|ƒ d}d}t || ¡ ||¡d }t |¡}t|dd�}t|j|ƒ t|j	|ƒ d}d}t || ¡ ||¡d }t|dd�}t|j|ƒ t|j	|ƒ t|j
d ƒ | ¡  t|j
d k	d	ƒ d S )
Nc                   S   s   t ddƒ d S r³   r   rH   rH   rH   rI   Úzero_kstatesS  s    z)test_representation.<locals>.zero_kstatesc                  S   s   t  d¡} t| dd� d S )Nr·   r"   ©r!   )r.   r:   r   )r}   rH   rH   rI   Úempty_endogX  s    
z(test_representation.<locals>.empty_endogr¬   r"   r­   r½   T)r   Ú
ValueErrorr.   r¹   r£   Úasfortranarrayr   r   r€   r    Z_statespaceZ_initialize_representation)r¼   r¾   r€   r    Zarrr}   r°   rH   rH   rI   Útest_representationO  s(    


rÁ   c                	      s&  t ddd�‰ tt‡ fdd„ƒ ˆ  t d¡ d¡d ¡ tˆ jdƒ ˆ  tj	d	tj
d
�¡ t t¡�$ ˆ  t d¡ ddd¡d ¡ W 5 Q R X ˆ  t t d¡ dd¡¡¡ tˆ jdƒ ˆ  t d¡ dd¡¡ tˆ jdƒ t t¡�$ ˆ  t t d¡ dd¡¡¡ W 5 Q R X tt‡ fdd„ƒ d S )Nr"   r½   c                      s   ˆ   ddddg¡S )Nr
   r"   r#   r   )r1   rH   r¯   rH   rI   rµ   |  r¶   ztest_bind.<locals>.<lambda>r¬   )rR   r"   r­   rR   )r   r"   r%   é   r#   c                      s   ˆ   t d¡ dd¡¡S )Nr¬   r"   rR   )r1   r.   r¹   r£   rH   r¯   rH   rI   rµ   –  r¶   )r   r   r¿   r1   r.   r¹   r£   r   r€   r:   Úfloat64rh   ÚraisesrÀ   rH   rH   r¯   rI   Ú	test_bindv  s    ((rÅ   c               	   C   s  t ddd�} t t¡� |  ¡  W 5 Q R X t d¡d }t d¡d }|  ||¡ t	| j
j ¡ dƒ t	| j
j ¡  ¡ dƒ t d¡}t t¡� |  ||¡ W 5 Q R X t d	¡}t t¡� |  ||¡ W 5 Q R X t d¡d }t d¡}t t¡� |  ||¡ W 5 Q R X d S )
Nr
   r"   r½   g      ø?g      @r#   r–   r¬   )r¬   r¬   )r   rh   rÄ   ÚRuntimeErrorZ_initialize_stater.   r:   r5   r>   r   ÚinitializationZconstantrT   Zstationary_covZdiagonalr¿   )r°   rF   rG   rH   rH   rI   Útest_initialization™  s$    


rÈ   c                  C   sJ  d} d}d}t  d¡}t  | ¡d }t  t  | | ¡d | |f¡}t  t  | d ¡d | | f¡}t  |¡d }t  t  |d ¡d ||f¡}t  t  || ¡d ||f¡}	t  t  |d ¡d ||f¡}
t|||||||||	|
d�
}t|d |ƒ t|d |ƒ t|d	 |ƒ t|d
 |ƒ t|d |ƒ t|d |	ƒ t|d |
ƒ d S )Nr"   r#   r
   ©r¬   r"   r­   ©	r!   Úk_posdefÚobs_interceptr3   r™   Ústate_interceptr4   r6   r8   rÌ   r3   r™   rÍ   r4   r6   r8   )r.   r:   r¹   r£   r   r   )r    r!   rË   r}   rÌ   r3   r™   rÍ   r4   r6   r8   r°   rH   rH   rI   Ú!test_init_matrices_time_invariant¸  sB    
 ÿ ÿ   ürÎ   c                  C   sŒ  d} d}d}d}t  d¡}t  t  ||  ¡d || f¡}t  t  || |  ¡d ||| f¡}t  t  |d |  ¡d ||| f¡}t  t  ||  ¡d || f¡}t  t  |d |  ¡d ||| f¡}	t  t  || |  ¡d ||| f¡}
t  t  |d |  ¡d ||| f¡}t||||||||	|
|d�
}t|d |ƒ t|d	 |ƒ t|d
 |ƒ t|d |ƒ t|d |	ƒ t|d |
ƒ t|d |ƒ d S )Nr¬   r"   r#   r
   rÉ   r­   rÊ   rÌ   r3   r™   rÍ   r4   r6   r8   )r.   r:   r£   r¹   r   r   )r€   r    r!   rË   r}   rÌ   r3   r™   rÍ   r4   r6   r8   r°   rH   rH   rI   Útest_init_matrices_time_varyingÙ  s`    
ÿ ÿ ÿ ÿ ÿþ ÿ   ürÏ   c                  C   s0   t ddd�} tt| jƒ |  ¡  tt| jƒ d S )Nr
   r   )r   r   rÆ   Ú_initialize_filterZinitialize_approximate_diffuserM   r¯   rH   rH   rI   Útest_no_endog  s    rÑ   c                  C   s‚  t j ¡ D ]Š\} }tjdd|d�}tdd|d�}| |¡ | ¡  t|j	| ƒ t|j
|ƒ t| |jkdƒ |j|  }t|t j|  ƒsˆt‚t|j|ƒ q
tddd�}t|j	dƒ t|j
tjƒ t|jd ƒ t tjdd	gtjd
�¡}| |¡ | ¡  |jd }| |¡ | ¡  t|j|ƒ t d¡|_| ¡  t|j|kdƒ |jd }t tjdd	gtjd
�¡}| |¡ t|j|kdƒ d S )Nr­   r"   )ry   r&   r
   )r    r!   r&   Tr   Údç       @r%   ©r
   r
   r"   F)r   Zprefix_dtype_mapÚitemsr.   r7   r   r1   rÐ   r   Úprefixr&   Z_kalman_filtersÚ
isinstanceZprefix_kalman_filter_mapÚAssertionErrorZ_kalman_filterrÃ   r˜   r:   r3   Z
complex128)rÖ   r&   r}   r°   ZkfrH   rH   rI   Útest_cython  s:    






rÙ   c                  C   sd   t  d¡} t| ddd�}d|dd d …f< d|dd d …f< d|dd d …f< | ¡ }tt|tƒdƒ d S ©	N©r¬   r
   r
   Úapproximate_diffuse©r!   rÇ   r3   r6   r8   T)r.   Úonesr   rM   r   r×   r   )r}   r°   ÚresrH   rH   rI   Útest_filterI  s    
rà   c                  C   s^   t  d¡} t| ddd�}d|dd d …f< d|dd d …f< d|dd d …f< d|_tt|jƒ d S rÚ   )r.   rÞ   r   Zmemory_no_likelihoodr   rÆ   Ú
loglikeobs)r}   r°   rH   rH   rI   rW   W  s    
rW   c               	   C   sŒ  t  d¡ t d¡} t| ddd�}d|dd d …f< t d¡|d< d|d	d d …f< d|d
d d …f< d|_| ¡ }tt	|j
ƒ d|_d|_| ¡ }tt	|j
dd� d|_| ¡ }tt	|j
dd� tt	|j
ddd� tt	|j
dd� t jdd��,}|j
ddd� d}tt|d jƒ|ƒ W 5 Q R X t jdd��4}|j
ddt d¡d� d}tt|d jƒ|ƒ W 5 Q R X t t	¡�" |j
|jd dt d¡d� W 5 Q R X tt	|j
|jd d� tt	|j
|jd t d¡d� t| 
¡ jjd|jfƒ |j
dd� |j
ddd�}tt|tƒdƒ t|jjdƒ t|jjdƒ t|jjdƒ t|jjdƒ t|jjd ƒ t|jjdƒ t|jjdƒ t|jjdƒ t|jjdƒ t|jjdƒ t|jjdƒ t|j jdƒ t|j!jdƒ t|j"jd!ƒ t|j#jd!ƒ t|j$jd!ƒ tt%t&|d"ƒ t| ddd�}d|dd d …f< t d#¡|d$< d|d	d d …f< d|d
d d …f< | ¡ }tt	|j
|jd t d¡d%� tt	|j
|jd t d&¡d%� d S )'NÚalwaysrÛ   r
   rÜ   rÝ   r3   ©r
   r¬   rÌ   r6   r8   TF)Údynamicr�   )rP   r"   )rP   r“   )Úrecord)r“   rä   zXDynamic prediction specified to begin after the end of prediction, and so has no effect.r   é   )r
   r
   )r“   rä   rÌ   zdDynamic prediction specified to begin during out-of-sample forecasting period, and so has no effect.)r“   r3   rÌ   )r“   )r“   rÌ   r#   rR   )r
   r"   )r
   rÔ   Útest)r
   r
   r¬   r™   )r“   r™   )r
   r
   r
   )'ÚwarningsÚsimplefilterr.   rÞ   r   r:   Zmemory_no_forecastrM   r   r¿   ZpredictZmemory_no_predictedÚcatch_warningsr   ÚstrÚmessagerh   rÄ   r€   Z	forecastsr   r×   r   r}   rÌ   r3   r™   rÍ   r4   r6   r8   Úforecasts_errorrZ   rª   Úforecasts_error_covZfiltered_state_covZpredicted_state_covÚAttributeErrorÚgetattr)r}   r°   rß   Úwrì   Zprediction_resultsrH   rH   rI   Útest_predicte  sˆ    

ÿÿÿÿrò   c                  C   s²   t j} tj| d tjdddd�dgd�}t |d ¡|d< tj|d d	d
d�}|j	dd�}t 
|j|j¡}|jjd t |jjd ¡ }t|jjd|d …f |d|d …f ƒ d S )Nr   r   r   r   r   r   r   r   r—   T)rz   Zuse_exact_diffuser�   )Zdispr   r·   .)r   r(   r*   r+   r-   r.   r/   r	   ÚSARIMAXÚfitÚmaximumr�   Znobs_diffuseZfilter_resultsrí   Úsqrtrî   r   Ústandardized_forecasts_error)r)   r   r°   rß   rÒ   r÷   rH   rH   rI   Ú!test_standardized_forecasts_erroræ  s(    ýÿ
ÿÿþrø   c                  C   s„  ddl m}  d}d}t |¡}tjj|d |d�}ttjd ddd	�}d
|d< d
|d< d
|d< |j|||d�d  	¡ }tjdt 
|¡d d… f }t||ƒ ttjd ddd	�}d
|d< d
|d< d
|d< |j|t |¡|d�d  	¡ }tjdt 
|¡d d… d f }t||ƒ tt d¡ddd	�}d|d< d
|d< d|d< d
|d< d
|d< |j|t |¡|d�d  	¡ }tjdt 
|d ¡d d… d d f }t||ƒ tt d¡dddd�}t d¡d
  dd¡|d< d
|d< d
|d< d
|d< |j|||d�d  	¡ }tjdt 
|¡d d… t dd¡ f }t||ƒ tt d¡dddd�}t d¡d
  dd¡|d< d
|d< d
|d< d
|d< tt|j|d ||ƒ d}d}	tjdgdd�}| tj||	|f ¡ |jj|||t |j¡d�d  	¡ }| d|	gd| gtjd|d d… f ƒ}t||ƒ tjdddgddd�}| ddd d!dg¡}
|
j|||t |j¡d�}| |
j|
jtjd|d d… f ƒ}t||ƒ d S )"Nr   )Úlfilterr¬   r"   ç      à?)ÚscaleÚsizer
   ÚdiffuserÝ   r­   r¸   ©r4   r   r   ©r6   r   r   )Úmeasurement_shocksÚstate_shocksr�   rã   g      @)rÌ   r   r   g       À)rÍ   r   r   r–   rR   )r!   r€   rÇ   rÌ   çš™™™™™¹?)r
   r   r
   ©rz   )r   r  rF   çš™™™™™É¿)r
   r   r
   r   )rz   Zseasonal_ordergš™™™™™É?g333333Ó¿)Zscipy.signalrù   r.   r:   ÚrandomÚnormalr   r|   ZsimulateZsqueezeÚcumsumr   rÞ   r¹   r£   r   r¿   r	   ró   ÚupdateÚssmr!   rM   Zpolynomial_reduced_maZpolynomial_reduced_ar)rù   ZnsimulationsZsigma2r   r  r°   ÚactualÚdesiredÚphiÚthetarß   rH   rH   rI   Útest_simulate  sÐ    
 þþ
 þþ 
ÿ þþ(
ÿ þþ(
ÿÿ 
ýý(
ÿ  
þ þr  c                  C   s$  t dddd�} d| d< d| d< d| d< d| d	< | jd
d�}t d¡}t||ƒ t dddd�} d| d< d| d< d| d< d| d	< | jd
dgd�}t d¡d }t||ƒ t dddd�} d| d< d| d< d| d< d| d	< | jd
dd�}t d¡d }t||ƒ t dddd�} d| d< d| d< d| d< d| d	< | jd
ddd�}t t d¡d ¡d d …tjf }| jd
dgddd�}t t d¡d ¡d d …tjf }t||ƒ t dddd�} d| d< d| d< d| d< d| d< d| d< d| d	< | jd
d�}t d¡}t||ƒ t dddd�} tt| jdd� tt| jddgd� tt| jg d� t dddd�} 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 d …d d …f< t d¡}| jd
dd�}t||ƒ | jd
ddgd�}t||ƒ | jd
dd�}t||ƒ | jd
ddgd�}t||ƒ | jd
ddd�}t||ƒ | jd
ddgdd�}t||ƒ | jd
ddgdd�}t||ƒ t dddd�} 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gdd gg¡| dd d …d d …f< t d¡}| jd
dd�}t||ƒ | jd
dd�}t||ƒ | jd
ddd�}t|||d  ƒ | jd
ddd�}t||ƒ t dddd�} t 	d¡| 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gdd gg¡| dd d …d d …f< t d¡}t d¡}| jd
dd�}t|tj||f ƒ | jd
dd�}t|tj||f ƒ | jd
ddd�}t|tj||d f ƒ | jd
ddd�}t|tj||f ƒ tjd!dd"gd#d$�} d}|  |dg¡ t tjd|gd
 f ¡}| jjd
d�}t|d d …df |ƒ |  |dg¡}|jd
d�}t||ƒ d S )%Nr
   rý   )r    r!   rÇ   r­   r¸   rþ   rÿ   rÓ   )r8   r   r   r¬   )Ústeps)ræ   r
   r"   )r  ÚimpulseT)r  ÚorthogonalizedgÍ;fž ö?)r  r  Ú
cumulative)r  r  r  r  g      Y@)rÍ   r   g     @�À)rÌ   r   )r  r3   r   r4   r6   r8   )r  r  r  rú   g      ô?r  r  )r
   r   r   r  )r   Zimpulse_responsesr.   rÞ   r   r  Znewaxisr   r¿   r5   r7   r:   r¢   r	   ró   r  Zcumprodr|   r	  rM   )r°   r
  r  rÞ   r:   r  rß   rH   rH   rI   Útest_impulse_responsest  sì    



ÿ"ÿ"








  ÿ
  ÿ
(



(

r  c            	      C   s  t  d¡ dd¡} t  t j|  ¡ t j |  ¡ t j | | f ¡}t  t j| | |  ¡ t j |  ¡ t j f ¡}t  t j| |  ¡ t j | |  ¡ t j f ¡}tt  t j| | f ¡ddd�}d|dd d …d d …f< t  |j	¡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 …d d …f< | 
¡ }t|ddd�}d|dd d …d d …f< t  |j	¡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 …d d …f< | 
¡ }t||ƒ t|ddd�}d|dd d …d d …f< t  |j	¡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 …d d …f< | 
¡ }t||ƒ t|ddd�}d|dd d …d d …f< t  |j	¡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 …d d …f< | 
¡ }t||ƒ d S )Nr¬   r
   rÜ   rÝ   r3   rú   r™   r4   r6   r8   )r.   r¹   r£   r˜   r¢   Úcopyr~   r   r5   r    rá   r   )	r}   Zendog_pre_naZendog_post_naZendog_inject_nar°   r�   Z
llf_pre_naZllf_post_naZllf_inject_narH   rH   rI   Útest_missing)  sb    ÿÿÿÿ"ÿ"
ÿ"
ÿ"r  )Hra   Úosrè   Únumpyr.   Zpandasr*   rh   Z)statsmodels.tsa.statespace.representationr   Z(statsmodels.tsa.statespace.kalman_filterr   r   r   Z.statsmodels.tsa.statespace.simulation_smootherr   Zstatsmodels.tsa.statespacer   r	   r   r   Znumpy.testingr   r   r   r   ÚpathÚdirnameÚabspathÚ__file__Úcurrent_pathÚjoinZclark1989_pathZread_csvr�   r   rd   ro   Úmarkri   rq   rr   rt   rv   r„   r†   r‰   r‹   r•   r›   rŸ   r¡   r¤   r¥   r¦   r§   r¨   r»   rÁ   rÅ   rÈ   rÎ   rÏ   rÑ   rÙ   rà   rW   rò   rø   r  r  r  rH   rH   rH   rI   Ú<module>   sh   Q
!
`+
'*'#!(; o 6