U
    Kvf^                     @   s  d dl mZ d dlZd dlmZ d dlZd dlm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZ e jZG dd deZe
jddd ddddggddd Ze
jdddddgddddddgddgdgddd Z e
jddddddgddd Z!e
jdddgddd Z"e
jddddgdd d! Z#e
jdd"d#gdd$d% Z$e
jdd dgdd&d' Z%e
jddddddgdd(d) Z&e
jdd"d#gdd*d+ Z'e
jdd"d#gdd,d- Z(e
jddd.gdd/d0 Z)e
jdd1d2d3 Ze
jdddgdd4d5 Z*ed6d7d8Z+d9d: Z,ed;d<d=Z-d>d? Z.d@dA Z/dBdC Z0dDdE Z1dFdG Z2ed;dHdIZ3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8dTdU Z9dVdW Z:dXdY Z;dZd[ Z<e
j=j>d\d] Z?d^d_ Z@e
j=Ad`dd ddge
j=Adaddbge
j=Adcdbd"gddde ZBdfdg ZCdhdi ZDdjdk ZEdldm ZFdndo ZGdpdq ZHdrds ZIdtdu ZJdvdw ZKdxdy ZLe
j=j>e
j=jMe
j=Ad!dddge
j=Ad+d"d#gdzd{ ZNed;d|d}ZOd~d ZPed;ddZQdd ZRe
j=Ad-d"d#ge
j=Add"d#gdd ZSe
j=Addddddgdd ZTe
j=Addddddgdd ZUe
j=AddejVWd d ddgejVXddggdd ZYdd ZZdS )    )
NamedTupleN)assert_allclose)assert_index_equal)danish_data)Summary)SpecificationWarning)AutoReg)ARDLUECMARDLResultsardl_select_order)DeterministicProcessc                   @   s"   e Zd ZU ejed< ejed< dS )DatasetyxN)__name__
__module____qualname__pdSeries__annotations__	DataFrame r   r   H/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/ardl/tests/test_ardl.pyr      s   

r   module            )scopeparamsc                 C   s   | j S Nparamrequestr   r   r   lags   s    r&      lryiboidec                 C   s   | j S r!   r"   r$   r   r   r   order"   s    
r,   c                 C   s   | j S r!   r"   r$   r   r   r   
uecm_order/   s    r-   c                 C   s   | j S r!   r"   r$   r   r   r   	uecm_lags:   s    r.   ncctc                 C   s   | j S r!   r"   r$   r   r   r   trend?   s    r2   TFc                 C   s   | j S r!   r"   r$   r   r   r   causalD   s    r3   c                 C   s   | j S r!   r"   r$   r   r   r   maxlagI   s    r4   c                 C   s   | j S r!   r"   r$   r   r   r   maxorderN   s    r5   c                 C   s   | j S r!   r"   r$   r   r   r   seasonalS   s    r6   c                 C   s   | j S r!   r"   r$   r   r   r   	use_numpyX   s    r7   
   c                 C   s   | j S r!   r"   r$   r   r   r   	hold_back]   s    r9   )r   c                  C   s   t j} t dddg }t| |S )Nr)   r*   r+   )	dane_datalrmr   )r   r   r   r   r   datab   s    r<   c                 C   sJ   | j d krd S tjj}tjd}tj|	dtjj
d df|ddgdS )Nr   r8   r   Zz0Zz1)indexcolumns)r#   r:   r;   r=   nprandomdefault_rngr   r   Z
standard_tshape)r%   r=   genr   r   r   fixedi   s    
rD   )resc                 C   s  | j }|jj\}}|| jj|fks*t|| jj||fksDtt|| jt	sZt|
| jj||fksttt|jtst|jd kst|jtstt|jtstt|jtstt|jtstt|jtstt|jtstt|jtstt|jtst|   |   |   | jd ksFt| jtsFt| j| j| j ks^t| j| jksptt| jt	std S r!   ) model_xrB   Zscorer    AssertionErrorZhessian
isinstanceZloglikefloatZinformation
exog_nameslistar_lagsr6   boolr9   int
ardl_ordertupleZdf_modelZnobsZendog_namesstrZ
k_constantsummaryZtest_heteroskedasticityZdiagnostic_summaryZdf_residZscaleZsigma2Zfpe)rE   rF   r/   kr   r   r   check_resultsv   s,    rU   c           	      C   sx   | j }| j}|}d }|rjt|}t|}t|trLdd t| D }|d k	r^t|}|rfdnd }|||||fS )Nc                 S   s   i | ]\}}||qS r   r   ).0ivr   r   r   
<dictcomp>   s      z%_convert_to_numpy.<locals>.<dictcomp>r   )r   r   r?   asarrayrI   dict	enumeratevalues)	r<   rD   r,   r6   r7   r   r   zperiodr   r   r   _convert_to_numpy   s    



r`   r<   c                 C   s   t | ||||\}}	}
}}t|||	||||
||d	}| }t| |  d }|
d k	rt|
d d }t|
tj	rtj	||
j
d}d }|	d k	rt|	d d }t|	tj	rtj	||	j
d}|jd||d d S )Nr3   rD   r6   r_      )r>   )exogrD   )r`   r	   fitrU   predictr?   arrayrI   r   r   r>   forecast)r<   r&   r,   r2   r3   rD   r7   r6   r   r   r^   r_   modrE   Z	fixed_oosexog_oosr   r   r   test_model_init   s@        rk   c              
   C   s  t jtdd t| jd W 5 Q R X t jtdd t| jdddg W 5 Q R X t jtdd t| jd| jddd	 W 5 Q R X t jtdd t| jd| jdd
d W 5 Q R X t jtdd( t| jd| jddgddddd W 5 Q R X t jtdd( t| jd| jddgddddd W 5 Q R X t jtdd2 t| jd| jddddgddddgddd W 5 Q R X t jtdd" t| jd| jdddgdd W 5 Q R X d S )Nlags must be a non-negativematch#All values in lags must be positiver   r   zinteger orders must be at leastT)r,   r3   Fr3   z)sequence orders must be strictly positiver   r   r(   z)sequence orders must contain non-negativeZapplez%sequence orders must contain distinct)pytestraises
ValueErrorr	   r   r   	TypeErrorra   r   r   r   test_ardl_order_exceptions   sb               rv   c              	   C   sx   t jtdd( t| jd| jddgddddd	 W 5 Q R X t jtd
d$ t| jd| jdddgidd	 W 5 Q R X d S )Nz,order dictionary contains keys for exogenousrm   r   r   r   r   )r)   r*   otherFrq   zexog contains variables thatr)   )rr   rs   rt   r	   r   r   warnsr   ra   r   r   r   test_ardl_order_keys_exceptions   s       ry   c              	   C   st   t t t| jd| jddd W 5 Q R X t jtdd0 t| jj	ddd}t| jd| jd|d	d
 W 5 Q R X d S )Nr   r6   )deterministiczWhen using deterministic, trendrm   Tr   Zconstantr,   r1   )rz   r2   )
rr   rs   ru   r	   r   r   rx   r   r   r=   )r<   rz   r   r   r   "test_ardl_deterministic_exceptions   s        r|   c              	   C   s4   t jtdd t| jd| jddd W 5 Q R X d S )Nzhold_back must be >=rm   r   r   r9   rr   rs   rt   r	   r   r   ra   r   r   r   test_ardl_holdback_exceptions
  s    r   c              	   C   s   t jd}tjtdd t| jd| jd|d W 5 Q R X t jt	j
jd df}t j |d< tjtdd t| jd| jd|d W 5 Q R X d S )N)r      zfixed must be anrm   r   rD   r   )   r   )r?   r@   Zstandard_normalrr   rs   rt   r	   r   r   r:   r;   rB   inf)r<   rD   r   r   r   test_ardl_fixed_exceptions  s     r   c	                 C   s   t | ||||\}	}
}}}t|	||
||||||||d}t|jtsHtt|jtjsZtt|j	tjsltt|j
tjs~t|j|kst|j|kst|j|kstt|jtst|jd kst|jtstd S )N)rD   r3   r9   r_   r6   glob)r`   r   rI   rF   r	   rH   Zaicr   r   ZbicZhqicr_   r2   r6   Zdl_lagsr[   rM   rL   )r<   r4   r5   r2   r3   rD   r7   r6   r9   r   r   r^   r_   rE   r   r   r   test_ardl_select_order  s:        r   c                 C   sB   t | jd | jd d d ddd }|jjd dks6tt| d S )Nr(   r/   r2   r   r	   r   r   re   r    rB   rH   rU   r<   rE   r   r   r   test_ardl_no_regressors?  s    

r   c                 C   s:   t | jd| jd dd }|jjd dks.tt| d S )Nr   r/   r   r   r   r   r   r   r   test_ardl_only_y_lagK  s    r   c                 C   sz   t | jd | jdddddd }|jjd dks6tt | jd | jdddddd	d
 }|jjd dksntt| d S )Nr   r   r   r(   r/   r   r   	   T)r2   r3      r   r   r   r   r   test_ardl_only_xQ  s$       
 


r   c                 C   s:   t | jd | jd dd }|jjd dks.tt| d S )Nr0   r   r   r   r   r   r   r   r   test_ardl_only_trendb  s    r   c                 C   s<   t | jd | jd ddd }|jjd dks0tt| d S )Nr/   Tr2   r6   r   r   r   r   r   r   r   test_ardl_only_seasonalh  s    r   c                 C   sN   t | jjddd}t| jd | jd d|d }|jjd dksBtt	| d S )NTr   r{   r/   )r2   rz   r   r   )
r   r   r=   r	   r   re   r    rB   rH   rU   )r<   rz   rE   r   r   r   test_ardl_only_deterministicn  s         
r   c                 C   s<   t | jd | jd ddd }|jjd dks0tt| d S )Nr1   Tr   r   r'   r   r   r   r   r   test_ardl_no_endog_exogw  s    r   c                 C   s@   t | jddg| jd ddd }|jjd dks4tt| d S )Nr   r   r1   Tr   r      r   r   r   r   r   test_ardl_no_exog}  s     r   c                 C   s   t | jd| jdddd}ddddd	d
dddg	}|j|ks<tt t| jdt| jdddd}dddddddddddddg}|j|kstt t| jdgt| jd ddddd}dd d!d"dg}|j|kstd S )#Nr   Tr0   )r3   r2   constlrm.L1zlrm.L2zlry.L1zlry.L2zibo.L1zibo.L2zide.L1zide.L2Fr1   r2   zy.L1zy.L2zx0.L0zx0.L1zx0.L2zx1.L0zx1.L1zx1.L2zx2.L0zx2.L1zx2.L2r/   r   )r3   r2   r6   r_   zs(1,4)zs(2,4)zs(3,4)zs(4,4))r	   r   r   rK   rH   r?   rZ   )r<   ri   expectedr   r   r   test_ardl_parameter_names  s^    
  
   


r   c                 C   sN   dd l }t| jd| jddddgdddd }| }t||jjsJt	d S )	Nr   r   r   r   r(   r1   Tr   )
matplotlib.figurer	   r   r   re   plot_diagnosticsrI   figureFigurerH   )r<   close_figures
matplotlibrE   figr   r   r   test_diagnostics_plot  s    
	r   c           	      C   s   t | jd||d}t| jd||d}| }| }t|j|j |j|jksRt|j|jksbt|j	|j	ksrt|
d}|
d}t|| t|j|j | }| }t|| t|j|j d S )Nr   r   rc   )r   r   r	   re   r   r    rM   rH   r2   r6   rh   r   r=   rf   )	r<   r2   r6   arardlar_resardl_resar_fcast
ardl_fcastr   r   r   test_against_autoreg  s     



r   startendr   dynamicc                 C   sp   t | jd||d}t| jd||d}| }| }	|j|||d}
|	j|||d}t|
j|j t|
| d S )Nr   r   )r   r   r   )r   r   r	   re   rf   r   r=   r   )r<   r2   r6   r   r   r   r   r   r   r   r   r   r   r   r   &test_against_autoreg_predict_start_end  s    r   c              	   C   s   t jtdd t| jd W 5 Q R X t jtdd t| jdddg W 5 Q R X t jtdd t| jddddg W 5 Q R X t jtdd t| jd| jd	dd
 W 5 Q R X d S )Nrl   rm   ro   rp   r   r   r   zhold_back must be r   r}   r~   ra   r   r   r   test_invalid_init  s      r   c                 C   sp   t | jd| jddd }|d}|jd dks6tt | jdg| jdg }|d}|jd dksltd S )Nr   r   Trq   r   r   )r	   r   r   re   rh   rB   rH   )r<   rE   valr   r   r   test_prediction_oos_no_new_data  s    

r   c           
   	   C   s   t | d dd|\}}}}}t|d|ddd }tjtdd |d W 5 Q R X t|tj	rt
| jd d }	tjtd	d |jd|	d
 W 5 Q R X tjtdd( |jd| jjd dd df d
 W 5 Q R X d S )Nr   Fr   rq   zexog_oos must berm   r   rc   z!exog_oos must be a DataFrame whenrd   zmust have the same columns)r`   r	   re   rr   rs   rt   rh   rI   r   r   r?   rZ   r   ru   iloc)
r<   rD   r7   r   r   r^   r,   _rE   rj   r   r   r   test_prediction_exceptions  s     r   c                 C   s   t | jd| jddg }| }|j| jd}t|| t|j|j t | jd| jddg|d }| }|j|d}t|| t|j|j d S )Nr   r   r   r   r   )r	   r   r   re   rf   r   r   r=   )r<   rD   rE   directZaltr   r   r   test_prediction_replacements  s    

r   c              	   C   s"  t | j}t| jd|ddg }tjtdd* |j	t | jd d d df d W 5 Q R X tjtdd" |j	t | jd d d W 5 Q R X t| jd| jddg }tjtd	d& |j	| jj
d d d df d W 5 Q R X tjtdd |j	| jj
d d d W 5 Q R X d S )
Nr   r   r   zexog must have the same numberrm   r   z&exog must have the same number of rowszexog must have the same columnsr?   rZ   r   r	   r   re   rr   rs   rt   rf   r   r<   r   rE   r   r   r   test_prediction_wrong_shape  s"    . &* r   c              	   C   s  t | j}t| jd|d }tjtdd* |j	t | jd d d df d W 5 Q R X tjtdd" |j	t | jd d d W 5 Q R X t| jd| jd }tjtdd& |j	| jj
d d d df d W 5 Q R X tjtdd |j	| jj
d d d W 5 Q R X d S )Nr   r   zfixed must have the same numberrm   r   z'fixed must have the same number of rowsr   r   r   r   r   r   !test_prediction_wrong_shape_fixed0  s"    . &* r   c              	   C   s   t | j}t| jd|d }tjtdd |	d W 5 Q R X tjtdd |j	d|d d d W 5 Q R X t| jd| jdd	d
 }tjtdd |	d W 5 Q R X tjtdd  |j	d| jj
dd  d W 5 Q R X d S )Nr   r   zfixed_oos must be providedrm   rc   zfixed_oos must have at least   r   Trq   zexog_oos must be providedzexog_oos must have at leastir   )r?   rZ   r   r	   r   re   rr   rs   rt   rh   r   r   r   r   r   test_insuficient_oosB  s     r   c              	   C   s0   t jtdd t| jd| jd W 5 Q R X d S )NzThe number of regressors \(36\)rm   r   r   r~   ra   r   r   r   test_insuficient_dataP  s    r   c                 C   s@   t | jd }|d}|d}t|| t|j|j d S )Nr   rc   z
1990-07-01)r	   r   re   rh   r   r   r=   )r<   rE   numericdater   r   r   test_forecast_dateU  s
    


r   c                 C   sX   t | jd }t| jd }|jdd}|jdd}t|j|j t|j|j d S )Nr   z
2020-01-01r   )r	   r   re   r   Zget_predictionr   Zpredicted_meanZvar_pred_mean)r<   rE   r   predZar_predr   r   r   test_get_prediction]  s    r   c                 C   s   ddl m} t| jd||d}| }| }t||s<t|jdd}t||sVt|jdd dd	}t||sttt|	 t
std S )
Nr   )r   r   r   d   r   K   F)r   alphaZ	in_sample)r   r   r	   r   re   r   rI   rH   Zplot_predictrS   r   )r<   r6   r2   r   r   ri   rE   r   r   r   r   test_ardl_smoke_plotsf  s    r   c                 C   s   t | ||||\}}	}
}}t|||	||||
||d	}| }t| |  t|||	||||
||d	}t|}| }t| |  d S )Nrb   )r`   r
   re   rU   rf   r	   	from_ardl)r<   r.   r-   r2   r3   rD   r7   r6   r   r   r^   r_   ri   rE   r   ZuecmZuecm_resr   r   r   test_uecm_model_init}  sH    
    
r   c                 C   sH   t t& tt| jd| jddd d}W 5 Q R X |jdksDt	d S )Nr   r)   r+   r*   )r   r   r   )
rr   rx   r   r
   r   r	   r   r   rP   rH   )r<   ri   r   r   r   test_from_ardl_none  s
    r   c              	   C   s|   d}t j| j| jgdd}|d k	rH|dd|j 7 }t j||gdd}tj|||||||d}	|	 }
t	|
 |

  d S )Nzlrm ~ lry + ibo + ider   )Zaxisz | z + )r3   r6   )r   concatr   r   joinr>   r
   Zfrom_formulare   rU   rf   )r<   r.   r-   r2   r3   rD   r6   ZfmlaZdfri   rE   r   r   r   test_uecm_model_formula  s"    		r   c              	   C   s  t jtdd t| jd| jdddg W 5 Q R X t jtdd t| jddg| jd W 5 Q R X t jtdd  t| jd| jdddgi W 5 Q R X t jtd	d t| jd| jd  W 5 Q R X t jtd
d  t| jd| jdddd W 5 Q R X t jtdd t| jd| jddd W 5 Q R X t jtdd t| jd| jd W 5 Q R X t| jd| jddgddd}t jtdd t| W 5 Q R X t| jd| jddgddd}t jtdd t| W 5 Q R X t| jddg| jd}t jtdd t| W 5 Q R X t| jd| jd	 }t t
 |jdd W 5 Q R X t t
 |jdd W 5 Q R X t t
 |jdd W 5 Q R X d S )Nzorder must be Nonerm   r   r   r   zlags must be anzorder values must be positiver*   zModel must containzAll included exogr   zhold_back must ber   r'   r   r}   zThe number ofr   zUECM can only be created fromr   r   T)r      )rr   rs   ru   r
   r   r   rt   r	   r   re   NotImplementedErrorrf   )r<   r   rE   r   r   r   test_uecm_errors  s<    " $$ r   use_tc                 C   s  t j}t dddg }| r,t|}t|}t|d|d}|j|d}| rj|jd d  }||d  }n |jjd d  }||d  }t	|j
| |jjd	kst|jjd	kst|jjd	kstd
t| kst| jdkst| jdkst|jjt jjkstd S )Nr)   r*   r+   r   )r   r'   r   r   )r'   zCointegrating Vector)r'   r   )r'   r'   )r:   r;   r?   rZ   r
   re   r    copyr   r   	ci_paramsZci_bserB   rH   Z
ci_tvaluesZ
ci_pvaluesrR   Z
ci_summaryZci_conf_intZci_cov_paramsZ	ci_resids)r7   r   r   r   ri   rE   r   r   r   r   test_uecm_ci_repr  s(    

r   casec                 C   sh   t tjdtdddg dddd}| }dd	d
ddd}|| }t|j||   dt|ksdtd S )Nr   r)   r*   r+   r   r   r(   gy$.?gw@gA`@g;@g<,$@)r   r   r   r   r'   BoundsTestResult)	r
   r:   r;   re   bounds_testr   statrR   rH   )r   ri   rE   r   bounds_resultr   r   r   test_bounds_test
  s     

r   c                 C   s   t tjdtdddg dddd}| }|j| ddddd	gd
d}|jdk sVt|jdk sht|jdk  s~td S )Nr   r)   r*   r+   r   r   r(   Fr   '  r   
asymptoticseednsim              ?	r
   r:   r;   re   r   p_valuesallrH   Z	crit_vals)r   ri   rE   r   r   r   r   test_bounds_test_simulation  s     
  
 r   r   c                 C   sz   t tjdtdddg dddd}| }|jdd| d	d
}|jdk sNt|jdk s`t|jdk  svtd S )Nr   r)   r*   r+   r   r   r(   Fr   r   r   r   r   )r   ri   rE   r   r   r   r   test_bounds_test_seed0  s     
   r   c                  C   s   t tjdtdddg dddd} |  }|d}dt|ksDt|jdd	d
dddgd}t|j|j |j	|j	k
 s~td S )Nr   r)   r*   r+   r   r   r(   r   Fr   )r   r   r   )r
   r:   r;   re   r   rR   rH   r   r   r   r   )ri   rE   r   Zbounds_result_simr   r   r   test_bounds_test_simulate_orderD  s"    

   r   )[typingr   Znumpyr?   Znumpy.testingr   Zpandasr   Zpandas.testingr   rr   Zstatsmodels.datasetsr   Zstatsmodels.iolib.summaryr   Zstatsmodels.tools.sm_exceptionsr   Zstatsmodels.tsa.ar_modelr   Zstatsmodels.tsa.ardl.modelr	   r
   r   r   Zstatsmodels.tsa.deterministicr   Zload_pandasr<   r:   r   Zfixturer&   r,   r-   r.   r2   r3   r4   r5   r6   r7   r9   rD   rU   r`   rk   rv   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   markr   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   Zsmoker   r   r   r   r   r   r   r   r@   ZRandomStaterA   r   r   r   r   r   r   <module>   s   


	













#+&	/
		.	!

$
