U
    md^                     @   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   ]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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!   ) modelZ_xrB   Zscorer    AssertionErrorZhessian
isinstanceZloglikefloat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_residscaleZsigma2Zfpe)rE   rF   r/   kr   r   r   check_resultsv   s,    rV   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?   asarrayrH   dict	enumeratevalues)	r<   rD   r,   r6   r7   r   r   zperiodr   r   r   _convert_to_numpy   s    



ra   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   )ra   r	   fitrV   predictr?   arrayrH   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@        rl   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-negativeapplez%sequence orders must contain distinct)pytestraises
ValueErrorr	   r   r   	TypeErrorrb   r   r   r   test_ardl_order_exceptions   sb               rx   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 exogenousrn   r   r   r   r   )r)   r*   otherFrr   zexog contains variables thatr)   )rt   ru   rv   r	   r   r   warnsr   rb   r   r   r   test_ardl_order_keys_exceptions   s       r{   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, trendrn   Tr   Zconstantr,   r1   )r|   r2   )
rt   ru   rw   r	   r   r   rz   r   r   r=   )r<   r|   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 >=rn   r   r   r9   rt   ru   rv   r	   r   r   rb   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 anrn   r   rD   r   )   r   )r?   r@   Zstandard_normalrt   ru   rv   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)ra   r   rH   rF   r	   rG   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   rf   r    rB   rG   rV   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   r|   r   r   )
r   r   r=   r	   r   rf   r    rB   rG   rV   )r<   r|   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   rG   r?   r[   )r<   rj   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   rf   plot_diagnosticsrH   ZfigureFigurerG   )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   rd   )r   r   r	   rf   r   r    rM   rG   r2   r6   ri   r   r=   rg   )	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	   rf   rg   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 )Nrm   rn   rp   rq   r   r   r   zhold_back must be r   r   r   rb   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   Trr   r   r   )r	   r   r   rf   ri   rB   rG   )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   rr   zexog_oos must bern   r   rd   z!exog_oos must be a DataFrame whenre   zmust have the same columns)ra   r	   rf   rt   ru   rv   ri   rH   r   r   r?   r[   r   rw   iloc)
r<   rD   r7   r   r   r_   r,   _rE   rk   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   rf   rg   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 numberrn   r   z&exog must have the same number of rowszexog must have the same columnsr?   r[   r   r	   r   rf   rt   ru   rv   rg   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 numberrn   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 providedrn   rd   zfixed_oos must have at least   r   Trr   zexog_oos must be providedzexog_oos must have at leastir   )r?   r[   r   r	   r   rf   rt   ru   rv   ri   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\)rn   r   r   r   rb   r   r   r   test_insuficient_dataP  s    r   c                 C   s@   t | jd }|d}|d}t|| t|j|j d S )Nr   rd   z
1990-07-01)r	   r   rf   ri   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   rf   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   rf   r   rH   rG   Zplot_predictrS   r   )r<   r6   r2   r   r   rj   rE   r   r   r   r   test_ardl_smoke_plotsf  s    r   c                 C   s   t | ||||\}}	}
}}t|||	||||
||d	}| }t| |  t|||	||||
||d	}t|}| }t| |  d S )Nrc   )ra   r
   rf   rV   rg   r	   	from_ardl)r<   r.   r-   r2   r3   rD   r7   r6   r   r   r_   r`   rj   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   )
rt   rz   r   r
   r   r	   r   r   rP   rG   )r<   rj   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_formularf   rV   rg   )r<   r.   r-   r2   r3   rD   r6   ZfmlaZdfrj   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 Nonern   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      )rt   ru   rw   r
   r   r   rv   r	   r   rf   NotImplementedErrorrg   )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?   r[   r
   rf   r    copyr   r   	ci_paramsZci_bserB   rG   Z
ci_tvaluesZ
ci_pvaluesrR   Z
ci_summaryZci_conf_intZci_cov_paramsZ	ci_resids)r7   r   r   r   rj   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;   rf   bounds_testr   statrR   rG   )r   rj   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;   rf   r   p_valuesallrG   Z	crit_vals)r   rj   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   rj   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;   rf   r   rR   rG   r   r   r   r   )rj   rE   r   Zbounds_result_simr   r   r   test_bounds_test_simulate_orderD  s"    

   r   )[typingr   numpyr?   Znumpy.testingr   Zpandasr   Zpandas.testingr   rt   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   rV   ra   rl   rx   r{   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   


	













#+&	/
		.	!

$
