a
    \:b                     @   s  d Z ddlZddlZddlZddlZddlmZmZm	Z	 ddl
ZddlZddlmZmZ ddlmZ ddlmZ ejejeZejdd	ZeejeeZejdd
Zeeje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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+d#d$ Z,d%d& Z-d'd( Z.d)d* Z/d+d, Z0d-d. Z1d/d0 Z2d1d2 Z3ej45d3g d4ej45d5d6d7gd8d9 Z6d:d; Z7d<d= Z8d>d? Z9d@dA Z:dS )BzF
Tests for VARMAX models

Author: Chad Fulton
License: Simplified-BSD
    N)assert_equalassert_allcloseassert_raises)varmaxsarimax)forg   )results_varmaxresultszresults_var_stata.csvzresults_varmax_stata.csvc                   @   sl   e Zd ZdZdd Zejjdd Zejjdd Z	dd	 Z
d
d Zdd ZdddZdddZdd ZdS )CheckVARMAXz
    Test Vector Autoregression against Stata's `dfactor` code (Stata's
    `var` function uses OLS and not state space / MLE, so we cannot get
    equivalent log-likelihoods)
    c                 C   s   t jddt t d | jjddd}d| j_d| j_| jj|jdddd	}d| j_d| j_t|j	| j
j	d
d W d    n1 s0    Y  d S )NTrecordalwaysd   F)maxiterdispZnmi  )methodr   r   h㈵>Zrtol)warningscatch_warningssimplefiltermodelfitenforce_stationarityenforce_invertibilityparamsr   llfr
   )selfr
    r   Klib/python3.9/site-packages/statsmodels/tsa/statespace/tests/test_varmax.pytest_mle%   s    
zCheckVARMAX.test_mlec                 C   s   | j }||j t|jt|jks*J |||j}t||j d|_d|_	|||j}d|_d|_	t||j d S )NFT)
r   filterstart_paramslenparam_namesZtransform_paramsZuntransform_paramsr   r   r   )r   r   actualr   r   r    test_params4   s    

zCheckVARMAX.test_paramsc                    s   | j   | jjdkrtt| j jj }|j	j	j  t fddt
jD }t| j j| nt| j jd  jdkrt| j jj }|j	j	j  t fddt
jD }t| j j| nt| j jd  d S )Nr   c                    s2   g | ]*} d j |j  |d j  f qS Nr   k_endog.0iZcoefficientsr   r   r    
<listcomp>Y   s   
z,CheckVARMAX.test_results.<locals>.<listcomp>c                    s2   g | ]*} d j |j  |d j  f qS r(   r)   r+   r.   r   r    r/   g   s   
)r
   summaryr   k_arnpZarrayr   Z
_params_arreshaper*   ranger   Zcoefficient_matrices_varZk_maZ
_params_maZcoefficient_matrices_vma)r   Z	params_arZcoefficient_matricesZ	params_mar   r.   r    test_resultsM   s4    




zCheckVARMAX.test_resultsc                 C   s   t | jj| jd dd d S )NZloglikeư>r   )r   r
   r   truer   r   r   r    test_loglikeq   s    zCheckVARMAX.test_loglikec                 C   s   t | jj| jd dd d S )Naic   atol)r   r
   r:   r7   r8   r   r   r    test_aict   s    zCheckVARMAX.test_aicc                 C   s   t | jj| jd dd d S )Nbicr;   r<   )r   r
   r?   r7   r8   r   r   r    test_bicx   s    zCheckVARMAX.test_bicr6   c                 K   s*   t | jjf d|i|| jd |d d S )Nendpredictr<   r   r
   rB   r7   )r   rA   r=   kwargsr   r   r    test_predict|   s
    zCheckVARMAX.test_predictc                 K   s,   t | jjf ||d|| jd |d d S )NrA   dynamicdynamic_predictr<   rC   )r   rA   rG   r=   rD   r   r   r    test_dynamic_predict   s
    z CheckVARMAX.test_dynamic_predictc                 C   s&   | j j}d | j _| j j}t|| d S N)r
   standardized_forecasts_errorZ_standardized_forecasts_errorr   )r   Z
cython_sfeZ
python_sfer   r   r    !test_standardized_forecasts_error   s    z-CheckVARMAX.test_standardized_forecasts_errorN)r6   )r6   )__name__
__module____qualname____doc__r!   pytestmarkZsmoker'   r5   r9   r>   r@   rE   rI   rL   r   r   r   r    r      s   

#

r   c                       s>   e Zd Zedg dfddZ fddZ fddZ  ZS )	CheckLutkepohlapprox)dln_invdln_incdln_consumpc           
      K   s   || _ tjtjg dtjddddd}t|d  |d< t|d	  |d
< t|d  |d< |j	dd|f }	t
j|	f|||d|| _| jj|d |d| _d S )Ninvincconsump
1960-01-01
1982-10-01QSfreqcolumnsindexrY   rU   rZ   rV   r[   rW   z
1960-04-01
1978-10-01ordertrenderror_cov_typer   cov_type)r7   pd	DataFramer	   lutkepohl_data
date_ranger2   logdifflocr   VARMAXr   smoothr
   )
clsr7   rf   rg   rh   rj   included_varsrD   dtaendogr   r   r    setup_class   s    
zCheckLutkepohl.setup_classc                    s   t t| jf ddi| d S )NrA   r]   superrS   rE   r   rD   	__class__r   r    rE      s    zCheckLutkepohl.test_predictc                    s    t t| jf ddd| d S )Nr]   z
1961-01-01rF   )rz   rS   rI   r{   r|   r   r    rI      s
    z#CheckLutkepohl.test_dynamic_predict)rM   rN   rO   classmethodrx   rE   rI   __classcell__r   r   r|   r    rS      s   rS   c                       s8   e Zd Ze fddZdd Zdd Zdd Z  ZS )	TestVARc                    sZ   t j }tjdd  g d |d< tjdd  g d |d< tt| j|dddd	 d S )
Nr   )Z	predict_1Z	predict_2Z	predict_3rB   )Zdyn_predict_1Zdyn_predict_2Zdyn_predict_3rH   r   r   nunstructuredre   )r	   Zlutkepohl_var1copyvar_resultsilocrz   r   rx   rt   r7   r|   r   r    rx      s    

zTestVAR.setup_classc                 C   s.   | j   d }t|d | jd dd d S N      ?   var_oim-C6?r<   r
   Z_cov_params_approxdiagonalr   r7   r   Zbser   r   r    test_bse_approx   s    zTestVAR.test_bse_approxc                 C   s.   | j   d }t|d | jd dd d S Nr   r   r   {Gz?r<   r
   Z_cov_params_oimr   r   r7   r   r   r   r    test_bse_oim   s    zTestVAR.test_bse_oimc           	      C   st  | j  }dd |jD }| jd }td|d s8J t| jjD ]}|| jj }||d  }| jj	| }td| |sJ t
|dd	ksJ td
||d   |sJ td||d   |sJ td||d   |sDJ qD|d }td|sJ t
|ddksJ || jj }| jj| jj }tt
|D ](}td|| || f |sFJ qFd S )Nc                 S   s   g | ]}t |qS r   strr,   tabler   r   r    r/          z(TestVAR.test_summary.<locals>.<listcomp>r   Model:.*VAR\(1\)r   r   Results for equation %s
   L1.dln_inv +%.4fL1.dln_inc +%.4fr   L1.dln_consump +%.4fError covariance matrix   %s +%.4fr
   r0   tablesr7   researchr4   r   r*   endog_namesr$   split_params_state_covr%   	r   r0   r   r   r-   offsetr   namenamesr   r   r    test_summary   s,    


zTestVAR.test_summary	rM   rN   rO   r~   rx   r   r   r   r   r   r   r|   r    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 )	TestVAR_diagonalc                    sZ   t j }tjdd  g d |d< tjdd  g d |d< tt| j|dddd	 d S )
Nr   Zpredict_diag1Zpredict_diag2Zpredict_diag3rB   Zdyn_predict_diag1Zdyn_predict_diag2Zdyn_predict_diag3rH   r   r   r   re   )r	   Zlutkepohl_var1_diagr   r   r   rz   r   rx   r   r|   r   r    rx      s    

zTestVAR_diagonal.setup_classc                 C   s.   | j   d }t|d | jd dd d S )Nr   r   r   r   r<   r   r   r   r   r    r      s    z TestVAR_diagonal.test_bse_approxc                 C   s.   | j   d }t|d | jd dd d S r   r   r   r   r   r    r      s    zTestVAR_diagonal.test_bse_oimc           	      C   st  | j  }dd |jD }| jd }td|d s8J t| jjD ]}|| jj }||d  }| jj	| }td| |sJ t
|dd	ksJ td
||d   |sJ td||d   |sJ td||d   |sDJ qD|d }td|sJ t
|dd	ksJ || jj }| jj| jj }tt
|D ](}td|| || f |sFJ qFd S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r    r/     r   z1TestVAR_diagonal.test_summary.<locals>.<listcomp>r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r     s,    


zTestVAR_diagonal.test_summaryr   r   r   r|   r    r      s
   r   c                       s\   e Zd ZdZe fddZdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Z  ZS )TestVAR_measurement_errora  
    Notes
    -----
    There does not appear to be a way to get Stata to estimate a VAR with
    measurement errors. Thus this test is mostly a smoke test that measurement
    errors are setup correctly: it uses the same params from TestVAR_diagonal
    and sets the measurement errors variance params to zero to check that the
    loglike and predict are the same.

    It also checks that the state-space representation with positive
    measurement errors is correct.
    c                    s   t j }tjdd  g d |d< tjdd  g d |d< tt| j|dddd	d
 g d| _t	j
|d d d | jf }| j|| _d S )Nr   r   rB   r   rH   r   r   r   T)rf   rg   rh   measurement_error)      ?       @g      @r   )r	   Zlutkepohl_var1_diag_measr   r   r   rz   r   rx    true_measurement_error_variancesr2   r_r   rs   results2)rt   r7   r   r|   r   r    rx   3  s    


z%TestVAR_measurement_error.setup_classc                 C   s   d S rJ   r   r8   r   r   r    r!   F  s    z"TestVAR_measurement_error.test_mlec                 C   s   d S rJ   r   r8   r   r   r    r   K  s    z)TestVAR_measurement_error.test_bse_approxc                 C   s   d S rJ   r   r8   r   r   r    r   P  s    z&TestVAR_measurement_error.test_bse_oimc                 C   s   d S rJ   r   r8   r   r   r    r>   T  s    z"TestVAR_measurement_error.test_aicc                 C   s   d S rJ   r   r8   r   r   r    r@   Y  s    z"TestVAR_measurement_error.test_bicc                 C   s~   | j jj D ]j}|dkrq|dkrZ| jjj}t| j	d d d d tj
f }t|| qtt| jj|t| jj| qd S )NZobsobs_cov)r   ssmZshapeskeysr   Zfilter_resultsr   r2   Zdiagr   newaxisr   getattrr
   )r   r   r&   desiredr   r   r    test_representation^  s    
z-TestVAR_measurement_error.test_representationc           	      C   s  | j  }dd |jD }| jd }td|d s8J t| jjD ]}|| jj }||d  }| jj	| }td| |sJ t
|dd	ksJ td
||d   |sJ td||d   |sJ td||d   |sJ td||d    |sDJ qD|d }td|s$J t
|ddks<J || jj }| jj| jj }tt
|D ](}td|| || f |sdJ qdd S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r    r/   o  r   z:TestVAR_measurement_error.test_summary.<locals>.<listcomp>r   r   r   r   r   r   	   r   r   r   r   zmeasurement_variance +%.4gr   r   r   r   r   r   r   r   r    r   m  s2    


z&TestVAR_measurement_error.test_summary)rM   rN   rO   rP   r~   rx   r!   r   r   r>   r@   r   r   r   r   r   r|   r    r   &  s   r   c                       s@   e Zd Ze fddZdd Zdd Zdd Zd	d
 Z  Z	S )TestVAR_obs_interceptc                    s`   t j }tjdd  g d |d< tjdd  g d |d< tt| j|ddd|d	 d
 d S )Nr   )Zpredict_int1Zpredict_int2Zpredict_int3rB   )Zdyn_predict_int1Zdyn_predict_int2Zdyn_predict_int3rH   r   r   r   obs_intercept)rf   rg   rh   r   )r	   Zlutkepohl_var1_obs_interceptr   r   r   rz   r   rx   r   r|   r   r    rx     s    

z!TestVAR_obs_intercept.setup_classc                 C   s.   | j   d }t|d | jd dd d S r   r   r   r   r   r    r     s    z%TestVAR_obs_intercept.test_bse_approxc                 C   s.   | j   d }t|d | jd dd d S r   r   r   r   r   r    r     s    z"TestVAR_obs_intercept.test_bse_oimc                 C   s   d S rJ   r   r8   r   r   r    r>     s    zTestVAR_obs_intercept.test_aicc                 C   s   d S rJ   r   r8   r   r   r    r@     s    zTestVAR_obs_intercept.test_bic)
rM   rN   rO   r~   rx   r   r   r>   r@   r   r   r   r|   r    r     s   r   c                       sl   e Zd Ze fddZdd Zdd Zdd Zd	d
 Zdd Z	 fddZ
dd Zdd Zdd Z  ZS )TestVAR_exogc              	      s   t j }tjdd g d |d< d|d jdd d f< tjdd  g d |d< tdd	 }tt| j	|d
dd|ddd d S )Nr   L   )Zpredict_exog1_1Zpredict_exog1_2Zpredict_exog1_3rB   r   )Zfcast_exog1_dln_invZfcast_exog1_dln_incZfcast_exog1_dln_consumpfcastK   r   r   r   r   approximate_diffuserf   rg   rh   exogZinitializationloglikelihood_burn)
r	   Zlutkepohl_var1_exogr   r   r   r2   arangerz   r   rx   rt   r7   r   r|   r   r    rx     s    

zTestVAR_exog.setup_classc                 C   s   d S rJ   r   r8   r   r   r    r!     s    zTestVAR_exog.test_mlec                 C   s   d S rJ   r   r8   r   r   r    r>     s    zTestVAR_exog.test_aicc                 C   s   d S rJ   r   r8   r   r   r    r@     s    zTestVAR_exog.test_bicc                 C   s6   | j   d }t|d d d | jd dd d S Nr   ir   r   r   r<   r   r   r   r   r    r     s    zTestVAR_exog.test_bse_approxc                 C   s6   | j   d }t|d d d | jd dd d S r   r   r   r   r   r    r     s    zTestVAR_exog.test_bse_oimc                    s   t t| jddd d S Nrd   gMbP?rA   r=   ry   r8   r|   r   r    rE     s    zTestVAR_exog.test_predictc                 C   s   d S rJ   r   r8   r   r   r    rI     s    z!TestVAR_exog.test_dynamic_predictc                 C   sF   t ddd d d t jf }| jjd|d}t|| jd dd d S )	Nr   [   r      Zstepsr   r   r6   r<   )r2   r   r   r
   forecastr   r7   r   r   r   r   r   r    test_forecast  s    zTestVAR_exog.test_forecastc           	      C   s  | j  }dd |jD }| jd }td|d s8J t| jjD ]}|| jj }||d  }| jj	| }td| |sJ t
|dd	ksJ td
||d   |sJ td||d   |sJ td||d   |sJ tdt|| jj | dd |sDJ qD|d }td|s.J t
|ddksFJ || jj }| jj| jj }tt
|D ](}td|| || f |snJ qnd S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r    r/     r   z-TestVAR_exog.test_summary.<locals>.<listcomp>r   zModel:.*VARX\(1\)r   r   r   r   r   r   r   r   r   z	beta.x1 +   Zprecr   r   r   r   )r
   r0   r   r7   r   r   r4   r   r*   r   r$   r   r   Z_params_regressionr   r%   r   r   r   r    r     s8    


zTestVAR_exog.test_summary)rM   rN   rO   r~   rx   r!   r>   r@   r   r   rE   rI   r   r   r   r   r   r|   r    r     s   r   c                       sd   e Zd Ze fddZdd Zdd Zdd Zd	d
 Zdd Z	 fddZ
dd Zdd Z  ZS )TestVAR_exog2c              	      s   t j }tjdd g d |d< d|d jdd d f< tjdd  g d |d< tjtdtd	d
 d d tj	f f }t
t| j|ddd|ddd d S )Nr   r   )Zpredict_exog2_1Zpredict_exog2_2Zpredict_exog2_3rB   r   )Zfcast_exog2_dln_invZfcast_exog2_dln_incZfcast_exog2_dln_consumpr   )r   r   r   r   r   r   r   r   r   )r	   Zlutkepohl_var1_exog2r   r   r   r2   c_onesr   r   rz   r   rx   r   r|   r   r    rx   $  s    
,
zTestVAR_exog2.setup_classc                 C   s   d S rJ   r   r8   r   r   r    r!   4  s    zTestVAR_exog2.test_mlec                 C   s   d S rJ   r   r8   r   r   r    r>   7  s    zTestVAR_exog2.test_aicc                 C   s   d S rJ   r   r8   r   r   r    r@   :  s    zTestVAR_exog2.test_bicc                 C   s   d S rJ   r   r8   r   r   r    r   =  s    zTestVAR_exog2.test_bse_approxc                 C   s   d S rJ   r   r8   r   r   r    r   @  s    zTestVAR_exog2.test_bse_oimc                    s   t t| jddd d S r   ry   r8   r|   r   r    rE   C  s    zTestVAR_exog2.test_predictc                 C   s   d S rJ   r   r8   r   r   r    rI   F  s    z"TestVAR_exog2.test_dynamic_predictc                 C   sV   t jt dt ddd d d t jf f }| jjd|d}t|| jd dd	 d S )
N)r   r   r   r   r   r   r   r   r6   r<   )	r2   r   r   r   r   r
   r   r   r7   r   r   r   r    r   J  s
    zTestVAR_exog2.test_forecast)rM   rN   rO   r~   rx   r!   r>   r@   r   r   rE   rI   r   r   r   r   r|   r    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 )	TestVAR2c                    s`   t j }tjdd  ddg |d< tjdd  ddg |d< tt| j|dd	d
ddgd d S )Nr   Zpredict_var2_1Zpredict_var2_2rB   Zdyn_predict_var2_1Zdyn_predict_var2_2rH   )r   r   r   r   rU   rV   )rf   rg   rh   ru   )r	   Zlutkepohl_var2r   r   r   rz   r   rx   r   r|   r   r    rx   T  s    



zTestVAR2.setup_classc                 C   s>   | j   d }t|d d d | jd d d dd d S )Nr   r   r   r   r   r<   r   r   r   r   r    r   _  s    zTestVAR2.test_bse_approxc                 C   s>   | j   d }t|d d d | jd d d dd d S )Nr   r   r   r   r   r<   r   r   r   r   r    r   d  s    zTestVAR2.test_bse_oimc           	      C   s  | j  }dd |jD }| jd }td|d s8J t| jjD ]}|| jj | jj	 }||d  }| jj
| }td| |sJ t|dd	ksJ td
||d   |sJ td||d   |sJ td||d   |sJ td||d   |sDJ qD|d }td|s*J t|ddksBJ || jj }| jj| jj }tt|D ](}td|| || f |sjJ qjd S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r    r/   k  r   z)TestVAR2.test_summary.<locals>.<listcomp>r   zModel:.*VAR\(2\)r   r   r   r   r   r   r   r   zL2.dln_inv +%.4fzL2.dln_inc +%.4fr;   r   r   r   r   )r
   r0   r   r7   r   r   r4   r   r*   r1   r   r$   r   r   r%   r   r   r   r    r   i  s*    

zTestVAR2.test_summaryr   r   r   r|   r    r   S  s
   
r   c                   @   s   e Zd ZedddZdS )CheckFREDManufacturingrT   c                 K   s   || _ tjtdd}t|d}t|}	W d    n1 s@0    Y  tj|	j	dd|	_
|	d  |	d< |	d  |	d	< |	jd
d dd	gf }
tjdd6 td tj|
f|||d|| _W d    n1 s0    Y  | jj|d |d| _d S )Nr
   zmanufac.dtarbZMSr_   Z	lncaputilZ
dlncaputilZlnhoursZdlnhoursz
1972-02-01Tr   r   re   r   ri   )r7   ospathjoincurrent_pathopenrk   Z
read_stataZDatetimeIndexZmonthrc   rp   rq   r   r   r   r   rr   r   rs   r
   )rt   r7   rf   rg   rh   rj   rD   r   Z	test_datarv   rw   r   r   r    rx     s     (
&z"CheckFREDManufacturing.setup_classN)rT   )rM   rN   rO   r~   rx   r   r   r   r    r     s   r   c                       s   e Zd ZdZe fddZdd Zej	ddd Z
ej	dd	d
 Zdd Zdd Z fddZ fddZdd Z  ZS )	TestVARMAN
    Test against the sspace VARMA example with some params set to zeros.
    c                    sZ   t j }tjdd  ddg |d< tjdd  ddg |d< tt| j|dd	d
d d S )Nr   Zpredict_varma11_1Zpredict_varma11_2rB   Zdyn_predict_varma11_1Zdyn_predict_varma11_2rH   r   r   r   r   re   )r	   Zfred_varma11r   varmax_resultsr   rz   r   rx   r   r|   r   r    rx     s    



zTestVARMA.setup_classc                 C   s   d S rJ   r   r8   r   r   r    r!     s    zTestVARMA.test_mle,Known failure: standard errors do not match.c                 C   s   d S rJ   r   r8   r   r   r    r     s    zTestVARMA.test_bse_approxc                 C   s   d S rJ   r   r8   r   r   r    r     s    zTestVARMA.test_bse_oimc                 C   s   d S rJ   r   r8   r   r   r    r>     s    zTestVARMA.test_aicc                 C   s   d S rJ   r   r8   r   r   r    r@     s    zTestVARMA.test_bicc                    s   t t| jddd d S N
2009-05-01r   r   )rz   r   rE   r8   r|   r   r    rE     s    zTestVARMA.test_predictc                    s   t t| jddd d S Nr   
2000-01-01rF   )rz   r   rI   r8   r|   r   r    rI     s    zTestVARMA.test_dynamic_predictc           
   	   C   s  | j  }dd |jD }| jd }td|d s8J t| jjD ]}|| jj }| jjd | jj	 || jj  }||d  }| jj
| }td| |sJ t|dd	ksJ td
t||d  dd |sJ tdt||d  dd |sJ tdt||d  dd |s(J tdt||d  dd |sDJ qD|d }td|shJ t|ddksJ || jj }| jj| jj }	tt|	D ]0}td|	| t|| ddf |sJ qd S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r    r/     r   z*TestVARMA.test_summary.<locals>.<listcomp>r   zModel:.*VARMA\(1,1\)r   r   r   r   r   zL1.dlncaputil +r   r   zL1.dlnhours +r   zL1.e\(dlncaputil\) +zL1.e\(dlnhours\) +r   r      z%s +%s)r
   r0   r   r7   r   r   r4   r   r*   r1   r   r$   r   r   r   r%   )
r   r0   r   r   r-   Z	offset_arZ	offset_mar   r   r   r   r   r    r     sL    





zTestVARMA.test_summary)rM   rN   rO   rP   r~   rx   r!   rQ   rR   skipr   r   r>   r@   rE   rI   r   r   r   r   r|   r    r     s   




r   c                       s|   e Zd ZdZe fddZdd Zej	ddd Z
ej	dd	d
 Zdd Zdd Z fddZ fddZ  ZS )TestVMA1r   c                    sZ   t j }tjdd  ddg |d< tjdd  ddg |d< tt| j|dd	d
d d S )Nr   Zpredict_vma1_1Zpredict_vma1_2rB   Zdyn_predict_vma1_1Zdyn_predict_vma1_2rH   r   r   r   r   re   )r	   Z	fred_vma1r   r   r   rz   r   rx   r   r|   r   r    rx     s    



zTestVMA1.setup_classc                 C   s   d S rJ   r   r8   r   r   r    r!     s    zTestVMA1.test_mler   c                 C   s   d S rJ   r   r8   r   r   r    r     s    zTestVMA1.test_bse_approxc                 C   s   d S rJ   r   r8   r   r   r    r   #  s    zTestVMA1.test_bse_oimc                 C   s   d S rJ   r   r8   r   r   r    r>   (  s    zTestVMA1.test_aicc                 C   s   d S rJ   r   r8   r   r   r    r@   .  s    zTestVMA1.test_bicc                    s   t t| jddd d S r   )rz   r   rE   r8   r|   r   r    rE   4  s    zTestVMA1.test_predictc                    s   t t| jddd d S r   )rz   r   rI   r8   r|   r   r    rI   7  s    zTestVMA1.test_dynamic_predict)rM   rN   rO   rP   r~   rx   r!   rQ   rR   r   r   r   r>   r@   rE   rI   r   r   r   r|   r    r     s   




r   c                  C   sZ   t ddd} t d}tj|tjddddd}tj| |d	d
 tj| |d	d
 d S )N   
   r   r   z
2009-01-01ZASr_   rc   r   r   rf   )r2   r   r3   rk   Seriesrn   r   rr   )rw   r   exog2r   r   r    test_specifications<  s    

r   c                  C   sv  i t _tddd} tt  t j| ddd W d    n1 sH0    Y  tt  t j| ddd W d    n1 s0    Y  tt t j| dd	 W d    n1 s0    Y  t	j
d
d(}t	d t j| dd	 W d    n1 s0    Y  t	j
d
dD}t	d t j| dd	 d}t|d j|ksJJ W d    n1 s`0    Y  t	  d S )Nr   r   r   r    rf   rg   )rf   rh   )r   r   rf   Tr   r   r   zcEstimation of VARMA(p,q) models is not generically robust, due especially to identification issues.r   )r   Z__warningregistry__r2   r   r3   rQ   raises
ValueErrorrr   r   r   r   r   messageresetwarnings)rw   wr   r   r   r    test_misspecificationsJ  s"    ..,
,
8r  c               	   C   s@  d} d}t jd t jj| |fd}t j|d ddf< t j|dddf< t jj| dfd}t jj| dfd}tjd	d
| d}tj||d}tj|	 |d}tj||d}t
j||ddt
j||ddt
j||ddt
j||ddg}	|	D ]
}
|
j |
jdd}|  |  |jdd |  t jjd|
jfd}|jd|d |jd|d t jjd|
jfd}tt |jd|d W d    n1 s0    Y  t jjd|
jd fd}tt |jd|d W d    q1 s0    Y  qtt& t
j|t ddd W d    n1 s20    Y  d S )Nr   r   i  sizer   r      r   z
1970-01-01r^   )r`   Zperiodsr   r   r   F)r   T)rG   r   )r   r   )r2   randomseednormalnanrk   rn   rl   r   Zsqueezer   rr   r#   r   r0   rB   Zget_predictionZk_exogr   Zget_forecastrQ   r   r   zeros)nobsr*   rw   Zexog1r   rc   Zendog_pdZexog1_pdZexog2_pdZmodelsmodresZoos_exogr   r   r    test_misc_exogm  sF    
.0r  c                  C   sh   t jd tt jjdd} tj| dd}||j	}|j
dddgd}|jtdgsdJ d S )	Ni )2   r   r  r   r   r   a)startrA   rc   )r2   r  r  rk   rl   r	  r   rr   rs   r#   rB   rc   ZequalsZIndex)rw   r  r  outr   r   r    test_predict_custom_index  s    r  c            	   	   C   s4  d} t | dfd }t | }tj|d|dd}|t jdgd ddd	dd	f }d
}t d	}t d}t|jd	|dd t|jd	|dd t|jd	|dd d}t |}t |d	f}t|j||dd t|j||dd tt	|j|d
d tt	|j|d	dgd tt	|j|t |dfd d S )Nr   r   r   r   r   )rf   r   rg   r   r   r   r   r   r   r   )
r2   r   r   rr   rs   r   r   r   r   r   )	r  rw   r   r  r  Zexog_fcast_scalarZexog_fcast_1dimZexog_fcast_2dimhr   r   r    test_forecast_exog  s&    
"


r  c                 C   sj   g d}g d}|D ]}t t||t| | q|D ]}t t|j|t| j| q4t | |   d S )N)rf   rg   rh   r   r   r   Zk_params)r  r*   Zk_statesZk_posdefr   Zdesignr   state_interceptZ
transitionZ	selectionZ	state_cov)r   r   r   _get_init_kwds)r  mod2attrsZ	ssm_attrsattrr   r   r    check_equivalent_models  s    r  c               	   C   s   d} t | dfd }t | }ddg}ddg}dd	g}d
dg}d
dg}d
dg}dd l}	g d}
|	||||||D ]}tt|
|}tjd
dJ td t	j
|fd|i|}t	j
|fd|i| }W d    n1 s0    Y  t|| qtd S )Nr   r;   r   r   r   tr   r   r   FTr   )rf   rg   rh   r   r   r   r   ignorer   )r2   r   	itertoolsproductdictzipr   r   r   r   rr   r  r  )r  rw   r   ZordersZtrendsZerror_cov_typesZmeasurement_errorsZenforce_stationaritiesZenforce_invertibilitiesr   r   elementrD   r  r  r   r   r    test_recreate_model  s,    


8r%  c            	      C   s  t ddd} t d}g d}tj| dd|d}||}tj| d d dd|d d d}||}|j| dd  |dd  d	}t|j	|j	 t
|j|j d
D ]}tt||t|| qdD ]}tt||t|| qt
|jdt dd	|jdt dd	 d S )N   r   r   皙?皙?r   皙        r)  r   r   r   r+  r   r   r  rf   rg   r   r  r  r  r   llf_obsr   filtered_statefiltered_state_covpredicted_statepredicted_state_cov	forecastsforecasts_errorforecasts_error_covrK   Zforecasts_error_diffuse_covZpredicted_diffuse_state_covscaled_smoothed_estimatorscaled_smoothed_estimator_covsmoothing_errorsmoothed_statesmoothed_state_covsmoothed_state_autocov smoothed_measurement_disturbancesmoothed_state_disturbance$smoothed_measurement_disturbance_covsmoothed_state_disturbance_covr   )r2   r   r3   r   r   rr   rs   appendr   specificationr   cov_params_defaultr   r   	rw   r   r   mod1res1r  res2res3r  r   r   r    test_append_results  s"    

"
rI  rg   )r   cctr   TFc              	   C   s   t ddd}g }| dkr&ddg}| dkr6g d}t j|d	d
dddddf }tj|d| d}||}|rv|  ||d d }||}|r|  |	|dd  }	t
|	j|jdd   dD ]:}
t||
}|d ur|ddd f }t
t|	|
|dd qt
|	d|d d S )Nr&  r   r   rJ  r(  r)  rK  )r(  r)  r   r   r   r*  r+  r   r   r   r  )r0  r1  r2  r3  r4  r5  r6  rK   r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  .g-q=r<   r   )r2   r   r3   r   r   rr   rs   r   Zcloneextendr   r.  r   )rg   r   rw   Ztrend_paramsr   rE  rF  r  rG  rH  r  r   r   r   r    test_extend_results  s4    


rM  c            
      C   s
  t ddd} t d}g d}tj| dd|d}||}tj| d d dd|d d d}||}|j| dd  |dd  d	}t|j	|j	dd   d
D ]6}t
||}	|	d ur|	ddd f }	tt
|||	 qt|jdt dd	|jdt dd	 d S )Nr&  r   r   r'  r   r  r,  r  r  r/  .r   )r2   r   r3   r   r   rr   rs   rL  r   r.  r   r   r   )
rw   r   r   rE  rF  r  rG  rH  r  r   r   r   r    test_extend_results_exogP  s"    

"

rN  c            	      C   s$  t ddd} t d}g d}tj| d d dd|d d d}||}tj| dd  dd|dd  d}||}|j| d d |d d d	}t|j	|j	 t
|j|j d
D ]}tt||t|| qdD ]}tt||t|| qt
|jdt dd	|jdt dd	 d S )Nr&  r   r   r'  r  r   r  r,  r  r-  r/  r   )r2   r   r3   r   r   rr   rs   Zapplyr   rB  r   rC  r   r   rD  r   r   r    test_apply_resultsw  s"    
"
"
rO  c                  C   sz  t jtjg dt jddddd} t|  jdd  } | jd d d df }| jd d df }g d	}g d
}|d |d |d dd|d |d |d |d |d g
}t	j
||ddd}|j  ||}|j}tt|t|j tj|jd d df |ddd}	|	j  tj|jd d df |ddd}
|
j  |	|}|
|}t|jdd  |j|j dd   d S )NrX   r\   r]   r^   r_   ra   r   r   )g{Gzgffffff?g333333ӿgMb`?)gMbp?g?      r   r   r;   r   r   )r   rf   rh   )r   r   r   rJ  )r   rf   rg   )rk   rl   r	   rm   rn   r2   ro   rp   r   r   rr   r   Zinitialize_diffusers   r#   r   r$   r%   r   ZSARIMAXr   r.  )rv   rw   r   Z
ma_params1Z
ma_params2Z
vma_paramsZmod_vmaZres_mvaZspZmod_ma1Zmod_ma2Zres_ma1Zres_ma2r   r   r    test_vma1_exog  sF    







rQ  c                  C   s  t d} g d}g d}tj| ddd}|}t|j| tj| ddgd}dd	g| }t|j| |d
dg|  t|d d
dg tj| dddgd}g d| }t|j| |g d|  t|d d
 t|d d |g d|  t|d t dd t|d dt dd  |g d|  t|d d
t dd  t|d ddt dd   tj| dddgd}ddg| }t|j| |ddg|  t|d t dd t|d dt dd  tj| dg dd}g d| }t|j| |g d|  t|d d
 t|d d |g d|  t|d t ddd  t|d dt ddd   |g d|  t|d d
t ddd   t|d ddt ddd    d S )N)r;   r   )zL1.y1.y1zL1.y2.y1zL1.y1.y2zL1.y2.y2zsqrt.var.y1zsqrt.cov.y1.y2zsqrt.var.y2)r   r   r   g?r   r+  r   r   r   r   r   intercept.y1intercept.y2333333?rP  r  )rR  drift.y1rS  drift.y2)rT  r   rP  r   )r  r   )r  r   )r   r   r   皙?r      rW  )rT  r   rP  rW  r   rU  rV  )r   r   r   )rR  z
trend.2.y1rS  z
trend.2.y2)	r2   r  r   rr   r   r%   updater   r   )rw   Z
base_namesZbase_paramsr  r   r   r   r    test_param_names_trend  sZ    
rZ  );rP   r   r   r   Znumpyr2   Znumpy.testingr   r   r   Zpandasrk   rQ   Zstatsmodels.tsa.statespacer   r   Zstatsmodels.iolib.summaryr   r
   r	   r   dirnameabspath__file__r   r   Zvar_pathZread_csvr   Zvarmax_pathr   objectr   rS   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r%  rI  rR   ZparametrizerM  rN  rO  rQ  rZ  r   r   r   r    <module>   sT   s;;n!j4;c4#2	 (0'),