U
    Kvfv                     @   s  d Z ddlZddlZddlmZmZmZmZm	Z	 ddl
ZddlmZ ddlmZ ddlmZ G dd dZG d	d
 d
ZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZdd Zdd ZG dd  d ZG d!d" d"ZG d#d$ d$Z d%d& Z!d'd( Z"d)d* Z#d+d, Z$d-d. Z%d/d0 Z&d1d2 Z'd3d4 Z(d5d6 Z)d7d8 Z*d9d: Z+d;d< Z,d=d> Z-d?d@ Z.dAdB Z/dS )Cz>
Tests for tools

Author: Chad Fulton
License: Simplified-BSD
    N)assert_allcloseassert_equalassert_array_lessassert_array_equalassert_almost_equal)solve_discrete_lyapunov)tools)acovfc                   @   s   e Zd Zdeddgddggfdddgeddgddggfddddgedddgdddgdddggfdeddgddgg ed	d
gddgg geddd	d
gddddgddddgddddggjfededdgddggfgZdd ZdS )TestCompanionMatrix   r                        c                 C   s$   | j D ]\}}tt|| qd S N)casesr   r   companion_matrix)self
polynomialresult r   O/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/statespace/tests/test_tools.py
test_cases%   s    zTestCompanionMatrix.test_casesN)	__name__
__module____qualname__nparrayTZint64r   r   r   r   r   r   r
      s$   0


r
   c                   @   s   e Zd ZedZdddgdddddgfeddddgd feddddgd	 fed ddddgd	 fed dddd
ddddgfeddddgd	 fed ddddgd	 fed ddddgd	 fed ddddddddgfg	Zdd ZdS )TestDiff
   r   r   r   Nr   r   r   r   <   T   l               iP  i  i  ip  c                 C   s   | j D ]\}}}}}|}t||||}t|| t|}tj||f }tj||f }t||||}t|| t|}t||||}t|| qd S r   )	r   r   diffr   pdSeriesr"   c_	DataFrame)r   Zseriesr.   Z	seas_diffZseasonal_periodsr   Zseasonal_diffxr   r   r   r   >   s    



zTestDiff.test_cases)r   r    r!   r"   aranger3   r   r   r   r   r   r   r%   *   s   
r%   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
TestSolveDiscreteLyapunovFc                 C   s|   |s<t || }t |jd | }t j|| }n2t ||}t |jd | }t j|| }t ||jS Nr   )	r"   ZkronZconjeyeshapelinalgZsolveflattenZreshape)r   aqcomplex_steplhsr3   r   r   r   solve_dicrete_lyapunov_directZ   s    z7TestSolveDiscreteLyapunov.solve_dicrete_lyapunov_directc                 C   s   t dgg}t dgg}t||}t||}t|| t dgg}t dgg}t||}t||}t|| t dgg}t dgg}tj||dd}| j||dd}t|| d S )N      ?      $@y      ?      ?Tr=   )r"   r#   r   r   r   r?   r   r;   r<   actualdesiredr   r   r   test_univariatej   s    



z)TestSolveDiscreteLyapunov.test_univariatec                 C   s   t dddg}tddg}t ||}t||}t|| t dddg}tddg}t j||dd}| j||dd}t|| t dddg}tddg}t j||d	d}| j||d	d}t|| d S )
Nr   gٿr@   rA   g      @yٿ?FrB   T)r   r   r"   diagr   r   r?   rC   r   r   r   test_multivariate   s    


z+TestSolveDiscreteLyapunov.test_multivariateN)F)r   r    r!   r?   rF   rH   r   r   r   r   r5   X   s   
r5   c                   @   s  e Zd ZedZdddgfdfdddgejd fdfejd edgfd	d
dfedddgedgfd	d
dfej	edd edd f ej	edd edd f fej	edd edd f fej	edd edd f j
ej	edd edd f j
fdej	edd edd f j
feej	edd edd f ej	edd edd f fd	d
ej	edd edd f fgZdedgfefdeddggfefgZdd Zdd ZdS )
TestConcatr&   ))r   r   r   )r   r   r   r   r   rJ   r   rK   r   r   r   r   TNc                 C   s,   | j D ] }ttj|d d  |d  qd S Nr   )validr   r   concatr   argsr   r   r   
test_valid   s    
zTestConcat.test_validc              
   C   s<   | j D ]0}t|d  tj|d d   W 5 Q R X qd S rL   )invalidpytestraisesr   rN   rO   r   r   r   test_invalid   s    
zTestConcat.test_invalid)r   r    r!   r"   r4   r3   Zr_r/   r0   r1   r$   r2   rM   
ValueErrorr#   rR   rQ   rU   r   r   r   r   rI      s,   
"X> @  rI   c                
   @   sf   e Zd ZddgdfddgdfddgdfdddgdfedddgdfedddgdfgZdd	 Zd
S )TestIsInvertibler         Tgv?Fg?皙?c                 C   s$   | j D ]\}}tt|| qd S r   )r   r   r   Zis_invertible)r   r   Z
invertibler   r   r   r      s    zTestIsInvertible.test_casesN)	r   r    r!   r"   r#   r/   r0   r   r   r   r   r   r   rW      s   


	rW   c                   @   s&   e Zd ZedgdfgZdd ZdS )!TestConstrainStationaryUnivariate       @%c                 C   s(   | j D ]\}}t|}t|| qd S r   )r   r   constrain_stationary_univariater   )r   unconstrainedconstrainedr   r   r   r   r      s    
z,TestConstrainStationaryUnivariate.test_casesNr   r    r!   r"   r#   r   r   r   r   r   r   rZ      s   rZ   c                   @   s.   e Zd ZedgedgfgZdd ZdS )#TestUnconstrainStationaryUnivariater\   r[   c                 C   s(   | j D ]\}}t|}t|| qd S r   )r   r   !unconstrain_stationary_univariater   )r   r_   r^   r   r   r   r   r      s    
z.TestUnconstrainStationaryUnivariate.test_casesNr`   r   r   r   r   ra      s   ra   c                   @   sb   e Zd ZedgedgedgedggZedgedgedggZdd	 Zd
S )TestStationaryUnivariater   rY   rX   +?rA   (\5Drh|?c                 C   sX   | j D ]"}t|}t|}t|| q| jD ]"}t|}t|}t|| q0d S r   )constrained_casesr   rb   r]   r   unconstrained_cases)r   r_   r^   reconstrainedreunconstrainedr   r   r   r      s    





z#TestStationaryUnivariate.test_casesNr   r    r!   r"   r#   rg   rh   r   r   r   r   r   rc      s   
 
 
 

 
 
rc   c                   @   s6   e Zd ZdddgZdddddd	gZd
d Zdd ZdS )TestValidateMatrixShape)TESTr   r   r   r   N)rm   rn   r   r   r&   )rm   r   r   r&   r   r   r&   )rm   r   r   NN)rm   )r   r   r   r   r   r   N)rm   rn   r&   r   N)rm   rn   r   r   N)rm   ro   r   r   N)rm   ro   r   r   r   c                 C   s   | j D ]}tj|  qd S r   )rM   r   validate_matrix_shaperO   r   r   r   test_valid_cases  s    
z(TestValidateMatrixShape.test_valid_casesc              
   C   s0   | j D ]$}tt tj|  W 5 Q R X qd S r   )rR   rS   rT   rV   r   rq   rO   r   r   r   test_invalid_cases  s    
z*TestValidateMatrixShape.test_invalid_casesNr   r    r!   rM   rR   rr   rs   r   r   r   r   rl      s   	rl   c                   @   s2   e Zd ZdddgZddddgZdd	 Zd
d ZdS )TestValidateVectorShape)rm   rp   r   N)rm   rp   r   r&   )rm   r   r&   r   r&   )rm   ro   r   r&   )rm   rp   r&   N)rm   rv   r   N)rm   rv   r   r   c                 C   s   | j D ]}tj|  qd S r   )rM   r   validate_vector_shaperO   r   r   r   rr      s    
z(TestValidateVectorShape.test_valid_casesc              
   C   s0   | j D ]$}tt tj|  W 5 Q R X qd S r   )rR   rS   rT   rV   r   rw   rO   r   r   r   rs   %  s    
z*TestValidateVectorShape.test_invalid_casesNrt   r   r   r   r   ru     s   ru   c            	      C   s  t j} tdddgdddgdddgg}tdddgdddgdddgg}td	d
dgd
ddgdddgg}t| |g|d |dd tddg}tddgddgg}tddgddgg}tddgddgg}tddgddgg}tddgddgg}tdd gd!d"gg}t| ||g|dd#|gdd t| ||g|d$d#||gdd t| ||g|||gdd t| ||g|d%d#|||gdd t| ||g|d&d#||||gdd td'd }ttt j|d(d#t	|d)d*d d+  d S ),Ng      @r         ?r@   gGz?rY   333333?g?g      @gS㥛?g~jt?gn?g rh?gI+?gMbP?Zatolg
ףp=
?g{Gz?g?g      ?gS㥛?gL7A`?g^I+?g;On?g&1?g9v?gM?gZd;O?g!rh?gS㥻?gQ?gX9v?g+η?gsh|??Zmaxlagr   r   r      r   F)Zfftr   )
r   Z-_compute_multivariate_acovf_from_coefficientsr"   r#   r   rG   r4   squeezeZ"_compute_multivariate_sample_acovfr	   )	Z_acovfZSigma_uZPhi_1ZGamma_0ZPhi_2ZGamma_1ZGamma_2ZGamma_3r3   r   r   r   test_multivariate_acovf+  s~    





    
 r~   c                  C   sX   t jd t d} t jjdd}ttjt j| |f ddd t 	ddgdd d S )	Ni  i'  )sizer   r{   r   {Gz?rz   )
r"   randomseedr4   normalr   r   Z!_compute_multivariate_sample_pacfr1   rG   )r3   yr   r   r   test_multivariate_pacfg  s    
 r   c                   @   s   e Zd ZedggededggfedgggededgggfgZedgggedggedgggeddgdd	gged
dgddggggZdd ZdS )#TestConstrainStationaryMultivariater[   r   %?r   d   2         r&   ry   r@   c                    s   | j D ]$\}} t||}t|d   q| jD ]}t|tkrXt|d j	d }nt|j	d }t||\ }t
dg fddtt D  j}tttj|d q2d S )Nr   r   c                    s   g | ]}t  |  qS r   )r"   r}   ).0ir_   r   r   
<listcomp>  s   zBTestConstrainStationaryMultivariate.test_cases.<locals>.<listcomp>)r   r   !constrain_stationary_multivariater   eigval_casestypelistr"   r7   r8   r   rangelenr$   r   absr9   Zeigvals)r   r^   error_variancer   cov_Z	companionr   r   r   r     s"     

z.TestConstrainStationaryMultivariate.test_casesN)	r   r    r!   r"   r#   r7   r   r   r   r   r   r   r   r   r  s   "&	*r   c                   @   s`   e Zd ZedggededggfedgggededgggfgZdd ZdS )%TestUnconstrainStationaryMultivariater   r   r[   c                 C   s0   | j D ]$\}}}t||}t|d | qd S r6   )r   r   #unconstrain_stationary_multivariater   )r   r_   r   r^   r   r   r   r   r     s     z0TestUnconstrainStationaryMultivariate.test_casesN)r   r    r!   r"   r#   r7   r   r   r   r   r   r   r     s   "&r   c                   @   sh  e Zd Zedggedggedggedggedgggeddggedggedgggeddgd	d
ggeddgddgggeddddgd	d
ddggg	ZedggedggedggedgggeddggedggedgggeddgddggeddgddgggeddddgddddgggZdd ZdS )TestStationaryMultivariater   rY   rX   rd   g?gɿry   r   gq=
ףpͿg333333?gQ?g?g333333ӿre   rf   r   r   r   r   r   r   r&   r@   r   c                 C   s   | j D ]`}t|tkr,t|d jd }nt|jd }t||\}}t||\}}t	|| q| j
D ]d}t|tkrt|d jd }nt|jd }t||\}}t||\}}t	||dd qnd S )Nr   g-C6?rz   )rg   r   r   r"   r7   r8   r   r   r   r   rh   )r   r_   r   r^   r   ri   rj   r   r   r   r     s    

z%TestStationaryMultivariate.test_casesNrk   r   r   r   r   r     s,       *	r   c                  C   sj  d} d}d}t || f}t ||| f}t dddgdddgd	d
dggd d d d t jf |d d d d d d f< | }d|d< t dddgd	d
dgdddgg|d d d d df< d|dd d df< d|d ddf< t d	d
dgdddgdddgg|d d d d df< d|d dd d df< d|d< d|d< t dddgdddgdddgg|d d d d df< d|dd d df< d|dd d df< d|d< t dddgd	d
dgdddgg|d d d d df< d|dd d df< d|d< t dddgdddgdddgg|d d d d df< d|dd d df< t |}t |t j}tj	||ddddd t
|| d S )Nr   r                            !   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TFZinplacer"   zerosr#   newaxiscopyasfortranarrayastypeint32r   Zreorder_missing_matrixr   nobsk_endogk_statesmissinggivenrE   rD   r   r   r   test_reorder_matrix_rows  sj    
   r   c                  C   s  d} d}d}t || f}t ||| f}t dddgdddgd	d
dggd d d d t jf |d d d d d d f< | }d|d< t dddgdddgd
ddggd d d d t jf |d d d d d d f< d|d d ddf< d|d ddf< t dddgdddgdddgg|d d d d df< d|d d d ddf< d|d< d|d< t dddgdddgd
ddgg|d d d d df< d|d d ddf< d|d d ddf< d|d< t dddgdddgd	ddgg|d d d d df< d|d d ddf< d|d< t dddgdddgd	d
dgg|d d d d df< d|d d ddf< t |}t |t j}tj	||ddddd t
|d d d d df |d d d d df  d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   FTr   r   r   r   r   r   test_reorder_matrix_cols	  sn    
   r   c                  C   s  d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t d
ddgdddgdddggd d d d t jf |d d d d d d f< | }t dddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< t dddgdddgdddgg|d d d d df< d|d dd d df< d|d d d ddf< t dddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< d|dd d df< d|d d ddf< t d
ddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< t d
ddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< t |}t |t j}tj	||ddddd t
|| d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   TFr   r   r   r   r   r   rE   rD   r   r   r   test_reorder_submatrix=  st    
   r   c                  C   s  d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t d
ddgdddgdddggd d d d t jf |d d d d d d f< | }t dddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< t dddgdddgdddgg|d d d d df< d|d dd d df< d|d d d ddf< t dddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< d|dd d df< d|d d ddf< t d
ddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< t d
ddgdddgdddgg|d d d d df< d|dd d df< d|d d ddf< t | }t |t j}tj	||ddddd t
|| t | }tj	||ddddd t
|| d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   TFr   r   r   r   r   r   test_reorder_diagonal_submatrixw  s       
   r   c                  C   s  d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t || f}t dddgd d t jf |d d d d f< | }ddd
g|d d d
f< d
ddg|d d d
f< dd
d
g|d d df< d
d
dg|d d df< dd
d
g|d d df< d
dd
g|d d df< ddd
g|d d df< dd
dg|d d df< ddd
g|d d df< ddd
g|d d df< t | }t |t j}tj	||dd t
|| d S )Nr   r   r   r   r   r   r   r   r   r   r   Tr   )r"   r   r#   r   r   r   r   r   r   Zreorder_missing_vectorr   r   r   r   r   test_reorder_vector  s4    .r   c               	   C   s   d} d}d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]8}t|t |d d |f  }d
|d |d d |f< qjt j||| fdd}t |t j}tj	|||ddddd t
|| d S Nr   r   r   r   r   r   r   r   r   rx   ForderTFr   r"   r   r   intsumr   r   r   r   copy_missing_matrixr   r   r   r   r   AtnBr   r   r   test_copy_missing_matrix_rows  s$    r   c               	   C   s   d} d}d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]8}t|t |d d |f  }d
|d d d ||f< qjt j||| fdd}t |t j}tj	|||ddddd t
|| d S Nr   r   r   r   r   r   r   r   r   rx   r   r   FTr   r   r   r   r   r   test_copy_missing_matrix_cols  s$    r   c               	   C   s   d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]8}t|t |d d |f  }d
|d |d ||f< qft j||| fdd}t |t j}tj	|||ddddd t
|| d S Nr   r   r   r   r   r   r   r   r   rx   r   r   TFr   r   r   r   r   r   r   r   r   r   r   r   test_copy_missing_submatrix  s"    r   c               	   C   s(  d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]>}t|t |d d |f  }t ||d |d ||f< qft j||| fd
d}t |t j}t	j
|||ddddd t|| t j||| fd
d}t	j
|||ddddd t|| d S )Nr   r   r   r   r   r   r   r   r   r   r   TFr   )r"   r   r   r   r   r7   r   r   r   r   r   r   r   r   r   r   $test_copy_missing_diagonal_submatrix  s(    
r   c                  C   s   d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t || f}t| D ]2}t|t |d d |f  }d
|d ||f< qdt j|| fdd}t |t j}tj	|||dd t
|| d S Nr   r   r   r   r   r   r   r   r   rx   r   r   Tr   )r"   r   r   r   r   r   r   r   r   Zcopy_missing_vectorr   r   r   r   r   test_copy_missing_vector8  s"    r   c               	   C   s   d} d}d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]0}t|D ]"}|||f rvd
||d d |f< qvqjt j||| fdd}t |t j}tj|||ddddd t|| d S r   	r"   r   r   r   r   r   r   Zcopy_index_matrixr   r   r   r   indexr   r   r   r   r   r   r   test_copy_index_matrix_rowsO  s&    r   c               	   C   s   d} d}d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]0}t|D ]"}|||f rvd
|d d ||f< qvqjt j||| fdd}t |t j}tj|||ddddd t|| d S r   r   r   r   r   r   test_copy_index_matrix_colsh  s&    r   c               	   C   s   d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ]B}t|D ]4}|||f rrd
||d d |f< d
|d d ||f< qrqft j||| fdd}t |t j}tj|||ddddd t|| d S r   r   r   r   r   r   r   r   r   r   r   r   test_copy_index_submatrix  s&    r   c               	   C   s  d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t ||| f}t| D ],}t|D ]}|||f rrd
||||f< qrqft j||| fdd}t |t j}tj|||ddddd t|| t j||| fdd}tj|||ddddd t|| d S r   r   r   r   r   r   "test_copy_index_diagonal_submatrix  s*    
r   c                  C   s   d} d}t || f}d|d< d|d ddf< d|d< d|d< d|d< d|d	< t || f}t| D ]*}t|D ]}|||f rpd
|||f< qpqdt j|| fdd}t |t j}tj|||dd t|| d S r   )	r"   r   r   r   r   r   r   Zcopy_index_vectorr   r   r   r   r   test_copy_index_vector  s$    r   )0__doc__rS   Znumpyr"   Znumpy.testingr   r   r   r   r   Zpandasr/   Zscipy.linalgr   Zstatsmodels.tsa.statespacer   Zstatsmodels.tsa.stattoolsr	   r
   r%   r5   rI   rW   rZ   ra   rc   rl   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sJ   .C <&,44:>!