U
    Kvfj                     @   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Zddl	m
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 ejejejejdZej ej!ej"ej#d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e*Z.G dd de*Z/G dd de*Z0G dd de0Z1G dd de0Z2G dd de0Z3G d d! d!e*Z4G d"d# d#Z5G d$d% d%e5Z6G d&d' d'e5Z7G d(d) d)e5Z8G d*d+ d+e8Z9G d,d- d-e8Z:G d.d/ d/e8Z;G d0d1 d1e5Z<e=fd2d3Z>e=fd4d5Z?d6d7 Z@dS )8a  
Tests for _representation and _kalman_filter modules

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.

Hamilton, James D. 1994.
Time Series Analysis.
Princeton, N.J.: Princeton University Press.
    N)find_best_blas_type)solve_discrete_lyapunov)MEMORY_NO_FORECASTMEMORY_NO_PREDICTEDMEMORY_CONSERVE)MLEModel)_representation_kalman_filter   )results_kalman_filter)assert_almost_equalassert_allclose)sdczc                   @   s\   e Zd ZdZeeddfddZedd Zedd Zd	d
 Z	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.
    r   c              
   C   s  t j| _t| jd | _tj| jd tjdddddgd}t|d |d	< || _	|| _
tj|d	 d
|dd| _d | _}tj|ddf|dd| _ddddg| jd d d d df< tj|df|dd| _tj||df|dd| _d | _}tj||df|dd| _ddddddg| 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|df|dd| _tjt|d d d d d f |d| _tj||df|dd| _tj|f|dd| _tjt|d |d| _tj| jd |d\}}}	}
}|
|g| jddgdd
gddgf< |d
 |d
 d|	d
 g| jt|tj|tdf < ttt| jd d d d df | j| jd d d d df j| _d S )Nstatesdata
1947-01-01
1995-07-01QSfreqGDPindexcolumnsZlgdp   FZndmindtypeorderr
      r!   r"   r      r!   d   
parameters)r   Zuc_unitruepd	DataFrametrue_states
date_rangenplogconserve_memoryloglikelihood_burnarrayobsk_endogzerosdesignobs_interceptobs_covk_states
transitionstate_interceptasfortranarrayeye	selection	state_covinitial_stateinitial_state_covdiag_indicesintdotT)clsr!   r0   r1   r   r4   r9   sigma_vsigma_esigma_wphi_1phi_2 rL   P/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/statespace/tests/test_kalman.pysetup_class:   sr    
 
        zClark1987.setup_classc              	   C   st   t | jf}t|d  }|| j| j| j| j| j| j| j| j	}|
| j| j t|d  }||| j| jd}||fS Nr   )r0   r1   r   r3   prefix_statespace_mapr6   r7   r8   r:   r;   r>   r?   Zinitialize_knownr@   rA   prefix_kalman_filter_mapr0   r1   rF   prefixklassmodelZkfilterrL   rL   rM   init_filter   s$         zClark1987.init_filterc                    s$        fddt j jdS )Nc                    s   t  jj| d  S Nr.   sumfilterloglikelihoodZburnrF   rL   rM   <lambda>       z&Clark1987.run_filter.<locals>.<lambda>loglikestater[   r.   r2   filtered_stater^   rL   r^   rM   
run_filter   s    
zClark1987.run_filterc                 C   s&   t | jd | jd | jd d d S )Nrb   start   r   resultr)   selfrL   rL   rM   test_loglike   s
      zClark1987.test_loglikec                 C   s   t | jd d | jd d  | jjd d df d t | jd d | jd d  | jjd d df d t | jd d | jd d  | jjd d df d d S Nrc   r   rg   r#   r
   r%   r   r   rj   r)   r,   ilocrk   rL   rL   rM   test_filtered_state   s       zClark1987.test_filtered_statec                 C   sp   t t | j}|   |  ttt|ks4ttt| jj	t|j	 tt| jj
t|j
 d S rX   )pickleloadsdumpsr[   idAssertionErrorr   r.   r2   re   r\   )rl   ZpickledrL   rL   rM   test_pickled_filter   s    

zClark1987.test_pickled_filterc                 C   sj   t | j}|   |  ttt|ks.ttt| jjt|j tt| jj	t|j	 d S rX   )
copydeepcopyr[   ru   rv   r   r.   r2   re   r\   )rl   copiedrL   rL   rM   test_copied_filter   s    

zClark1987.test_copied_filterN)__name__
__module____qualname____doc__classmethodfloatrN   rW   rf   rm   rq   rw   r{   rL   rL   rL   rM   r   0   s   	J


r   c                       s4   e Zd ZdZe fddZdd Z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 NzNot implementedr   r!   r0   )pytestskipsuperr   rN   r.   float32rW   rV   r[   rf   rj   r^   	__class__rL   rM   rN      s    

 zTestClark1987Single.setup_classc                 C   s(   t | jd | jd | jd dd d S Nrb   rg   gMbP?)Zrtolr   rj   r)   rk   rL   rL   rM   rm      s
     z TestClark1987Single.test_loglikec                 C   s   t | jd d | jd d  | jjd d df dd t | jd d | jd d  | jjd d df dd t | jd d | jd d  | jjd d df dd d S 	Nrc   r   rg   g{Gz?Zatolr
   r%   r   r   rj   r)   r,   rp   rk   rL   rL   rM   rq      s    z'TestClark1987Single.test_filtered_state	r|   r}   r~   r   r   rN   rm   rq   __classcell__rL   rL   r   rM   r      s
   	r   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                    s2   t t| jtdd |  \| _| _|  | _d S Nr   r   )	r   r   rN   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN      s    
 zTestClark1987Double.setup_classr|   r}   r~   r   r   rN   r   rL   rL   r   rM   r      s   r   c                       s4   e Zd ZdZe fddZdd Zdd Z  ZS )TestClark1987SingleComplexz\
    Basic single precision complex test for the loglikelihood and filtered
    states.
    c                    s>   t d tt| jtjdd |  \| _| _	| 
 | _d S r   )r   r   r   r   rN   r.   	complex64rW   rV   r[   rf   rj   r^   r   rL   rM   rN   
  s    

 z&TestClark1987SingleComplex.setup_classc                 C   s(   t | jd | jd | jd dd d S r   r   rk   rL   rL   rM   rm     s
     z'TestClark1987SingleComplex.test_loglikec                 C   s   t | jd d | jd d  | jjd d df dd t | jd d | jd d  | jjd d df dd t | jd d | jd d  | jjd d df dd d S r   r   rk   rL   rL   rM   rq     s    z.TestClark1987SingleComplex.test_filtered_stater   rL   rL   r   rM   r     s
   	r   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                    s2   t t| jtdd |  \| _| _|  | _d S r   )	r   r   rN   complexrW   rV   r[   rf   rj   r^   r   rL   rM   rN   1  s    
 z&TestClark1987DoubleComplex.setup_classr   rL   rL   r   rM   r   ,  s   r   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                    s6   t t| jtttB d |  \| _| _| 	 | _
d S Nr   )r   r   rN   r   r   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN   >  s    
z!TestClark1987Conserve.setup_classr   rL   rL   r   rM   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 )Clark1987ForecastzE
    Forecasting test for the loglikelihood and filtered states.
    r'   r   c                    sX   t t| || || _| j| _tjtj| jdd d f tj	g| f d|dd| _d S )Nr   r   r   r    )
r   r   rN   	nforecastr3   _obsr.   r2   r_nanrF   r!   r   r0   r   rL   rM   rN   L  s    
 &  zClark1987Forecast.setup_classc                 C   s   t | jd d | jd | j  | jjd d df d t | jd d | jd | j  | jjd d df d t | jd d | jd | j  | jjd d df d d S rn   r   rj   r)   r   r,   rp   rk   rL   rL   rM   rq   X  s       z%Clark1987Forecast.test_filtered_state	r|   r}   r~   r   r   r   rN   rq   r   rL   rL   r   rM   r   H  s   r   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 rX   )r   r   rN   rW   rV   r[   rf   rj   r^   r   rL   rM   rN   k  s    z'TestClark1987ForecastDouble.setup_classr   rL   rL   r   rM   r   g  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                    s0   t t| jtd |  \| _| _|  | _d S Nr&   )	r   r   rN   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN   w  s
    
z.TestClark1987ForecastDoubleComplex.setup_classr   rL   rL   r   rM   r   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                    s6   t t| jtttB d |  \| _| _| 	 | _
d S r   )r   r   rN   r   r   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN     s    
z)TestClark1987ForecastConserve.setup_classr   rL   rL   r   rM   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                    s>   t t| jttd | jd | _|  \| _| _	| 
 | _d S )Nr   rg   )r   r   rN   r   r   r)   r1   rW   rV   r[   rf   rj   r^   r   rL   rM   rN     s    
 z$TestClark1987ConserveAll.setup_classc                 C   s    t | jd d| jd d d S )Nrb   r   rh   ri   rk   rL   rL   rM   rm     s
      z%TestClark1987ConserveAll.test_loglikec                 C   sd   | j jd }t| jd d d | j j|d df d t| jd d d | j j|d df d d S )Nr   rc   r
   r#   r,   shaper   rj   rp   rl   endrL   rL   rM   rq     s      z,TestClark1987ConserveAll.test_filtered_stater   rL   rL   r   rM   r     s
   r   c                   @   sL   e Zd ZdZeeddfddZe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.
    r   c                 C   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< tj	|d|ddj
| _d | _}d | _}|| _|| _tj||df|dd| _ddddddgddddddgg| jd d d d df< tj|df|dd| _tj||df|dd| _tj||df|dd| _ddddddddg| 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|df|dd| _tjt|d d d d d f |d| _tj||df|dd| _tj|f|d| _tjt|d |d| _tj	| jd |d\
}}}	}
}}}}}}|||g| jdddgdddgdddgf< ||g| jddgddgddgf< |d | jd< |d |d dd|	d |
d g| jt|tj|tdf < ttt| jd d d d df | j| jd d d d df j
| _d S )Nr   r   r   r   r   r   r   ZUNEMPr   r#   r'   r   Cr       r
   r   r$   r   r%   rh   r&   r(   )r
   r
   r   )r   Zuc_bir)   r*   r+   r,   r-   r.   r/   r2   rE   r3   r4   r9   r0   r1   r5   r6   r7   r8   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   )rF   r!   r0   r1   r   r4   r9   rG   rH   rI   Zsigma_vlZsigma_ecrJ   rK   Zalpha_1Zalpha_2Zalpha_3rL   rL   rM   rN     s    

4         "       zClark1989.setup_classc              	   C   st   t | jf}t|d  }|| j| j| j| j| j| j| j| j	}|
| j| j t|d  }||| j| jd}||fS rO   rP   rS   rL   rL   rM   rW     s$         zClark1989.init_filterc                    s$        fddt j jdS )Nc                    s   t  jj| d  S rX   rY   r]   r^   rL   rM   r_   )  r`   z&Clark1989.run_filter.<locals>.<lambda>ra   rd   r^   rL   r^   rM   rf   "  s    
zClark1989.run_filterc                 C   s    t | jd d| jd d d S Nrb   r   r   ri   rk   rL   rL   rM   rm   -  s
     zClark1989.test_loglikec                 C   s   t | jd d | jd d  | jjd d df d t | jd d | jd d  | jjd d df d t | jd d | jd d  | jjd d df d t | jd d | jd d  | jjd d df d d S 	Nrc   r   rg   r#   r
   r   rh   r%   ro   rk   rL   rL   rM   rq   4  s(        zClark1989.test_filtered_stateN)r|   r}   r~   r   r   r   rN   rW   rf   rm   rq   rL   rL   rL   rM   r     s   R


r   c                       s$   e Zd ZdZe fddZ  ZS )TestClark1989z|
    Basic double precision test for the loglikelihood and filtered
    states with two-dimensional observation vector.
    c                    s2   t t| jtdd |  \| _| _|  | _d S r   )	r   r   rN   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN   L  s    zTestClark1989.setup_classr   rL   rL   r   rM   r   G  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                    s6   t t| jtttB d |  \| _| _| 	 | _
d S r   )r   r   rN   r   r   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN   X  s    
z!TestClark1989Conserve.setup_classr   rL   rL   r   rM   r   S  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| _tjtj| jtj	tj
tj
g|  d|f d|dd| _|  \| _| _|  | _d S )Nr   r   r    )r   r   rN   r   r3   r   r.   r2   Zc_r   r   ZreshaperW   rV   r[   rf   rj   r   r   rL   rM   rN   g  s      zClark1989Forecast.setup_classc                 C   s   t | jd d | jd | j  | jjd d df d t | jd d | jd | j  | jjd d df d t | jd d | jd | j  | jjd d df d t | jd d | jd | j  | jjd d df d d S r   r   rk   rL   rL   rM   rq   y  s(        z%Clark1989Forecast.test_filtered_stater   rL   rL   r   rM   r   b  s   r   c                       s$   e Zd ZdZe fddZ  ZS )TestClark1989ForecastDoubler   c                    s,   t t|   |  \| _| _|  | _d S rX   )r   r   rN   rW   rV   r[   rf   rj   r^   r   rL   rM   rN     s    z'TestClark1989ForecastDouble.setup_classr   rL   rL   r   rM   r     s   r   c                       s$   e Zd ZdZe fddZ  ZS )"TestClark1989ForecastDoubleComplexr   c                    s0   t t| jtd |  \| _| _|  | _d S r   )	r   r   rN   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN     s
    
z.TestClark1989ForecastDoubleComplex.setup_classr   rL   rL   r   rM   r     s   r   c                       s$   e Zd ZdZe fddZ  ZS )TestClark1989ForecastConserver   c                    s6   t t| jtttB d |  \| _| _| 	 | _
d S r   )r   r   rN   r   r   r   rW   rV   r[   rf   rj   r^   r   rL   rM   rN     s    
z)TestClark1989ForecastConserve.setup_classr   rL   rL   r   rM   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                    s8   t t| jttd d| _|  \| _| _| 	 | _
d S )Nr   r   )r   r   rN   r   r   r1   rW   rV   r[   rf   rj   r^   r   rL   rM   rN     s    
 z$TestClark1989ConserveAll.setup_classc                 C   s    t | jd d| jd d d S r   ri   rk   rL   rL   rM   rm     s
      z%TestClark1989ConserveAll.test_loglikec                 C   s   | j jd }t| jd d d | j j|d df d t| jd d d | j j|d df d t| jd d d | j j|d df d t| jd d d | j j|d df d d S )	Nr   rc   r   r
   r#   r   rh   r%   r   r   rL   rL   rM   rq     s*        z,TestClark1989ConserveAll.test_filtered_stater   rL   rL   r   rM   r     s
   	r   c           
      C   s   t jd| d}t|ddd}|j  t jdg| d}t dg| }t dg| }||d< ||d	< t d| |d
< ||d< |j	  |j
  |jj}t |j}t |j}t||d|d    t jt d| |}	t||	 t||d|d    t|t|| d S )N
   r&   r
   r9   Zk_posdefffffff@g?g?r;   r:   r>   r?   )r   r   r   )r.   r5   r   ssminitialize_stationaryr2   Zdiagastyper=   _initialize_filter_initialize_state_statespacer@   rA   r   linalginvrD   r   
r!   ZendogmodZ	interceptphiZsigma2r   r@   rA   ZdesiredrL   rL   rM   $check_stationary_initialization_1dim  s(    



r   c           
      C   s  t jd| d}t|ddd}|j  t jddg| d}t jddgd	d
gg| d}t jdd	gd	dgg| d}||d< ||d< t d| |d< ||d< |j  |j	  |jj
}t |j}t |j}t jt d| | |}	t||	 t||}	t||	dd d S )Nr   r&   r   r   r   gffffff$g?g?gɿgffffff?gffffff?g      @r;   r:   r>   r?   gh㈵>r   )r.   r5   r   r   r   r2   r=   r   r   r   r   r@   rA   r   Zsolver   r   r   rL   rL   rM   $check_stationary_initialization_2dim  s6    






r   c                   C   sT   t tj t tj t tj t tj ttj ttj ttj ttj d S rX   )r   r.   r   Zfloat64r   Z
complex128r   rL   rL   rL   rM   test_stationary_initialization  s    






r   )Ar   rx   rr   Znumpyr.   Zpandasr*   osr   Zscipy.linalg.blasr   Zscipy.linalgr   Z(statsmodels.tsa.statespace.kalman_filterr   r   r   Z#statsmodels.tsa.statespace.mlemodelr   Zstatsmodels.tsa.statespacer   r	   resultsr   Znumpy.testingr   r   ZsStatespaceZdStatespaceZcStatespaceZzStatespacerQ   ZsKalmanFilterZdKalmanFilterZcKalmanFilterZzKalmanFilterrR   pathdirnameabspath__file__current_pathr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   rL   rL   rM   <module>   s`        #&' *(#