U
    Kvf]                     @   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dtyped   )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   X/tmp/pip-unpacked-wheel-2v6byqio/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 )TestClark1987ForecastDoubleR
    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 )TestClark1989Conservey
    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:0yE>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|  st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	   SARIMAXZ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"         ?)Z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   Z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