U
    Kvf                     @   s  d Z ddlmZ ddlmZ ddlZddlmZ ddl	m
Z
mZ ddlZddlmZmZ ddlZddlmZmZmZmZ dd	lmZ ddlZdd
lmZmZ ddlmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 dZ4dZ5dZ6dd Z7dd Z8ddddgdggZ9ddgZ:dd d!d"gZ;dd#gZ<d$d%gZ=e>ee9e:e;e<e=Z?g Z@e?D ]@ZAeAd dkseAd seAd# dkseAd re@BeA qe@Z?d&ZCd'd( e?D ZDejEd)e?eDd*d+d, ZFd-d.d/d0d1d2d3d4d5d6d7d8gZGd9d: ZHejIJd;eGd<d= ZKd>d? ZLd@dA ZMejIjNdBdC ZOG dDdE dEZPedddddggdd d!d"gddgdd#gddFgdGdHgddgddIgZ?e>e?Z?dJd( e?D Z?dKd( e?D Z?dLZQdMd( e?D ZDddOdPZRejEd)e?eDd*dQdR ZSejEd)dSdTdU ZTeddddggd gddgdgddFgdHgddgddIgZ?e>e?Z?dVd( e?D Z?dWd( e?D Z?dXZQdYd( e?D ZDejEd)e?ddd eDddd d*dZd[ ZUejIjVejIjNd\d] ZWejIjNd^d_ ZXejIjVd`da ZYdbdc ZZddde Z[ejIjNdfdg Z\ejIjNdhdi Z]G djdk dkePZ^G dldm dme^Z_G dndo doe^Z`ejIJdpe>eaddqdrds ZbejIJdtddgdudv ZcejIjNdwdx Zddydz Zed{d| ZfejIJdtddgd}d~ ZgejIjNdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd ZnejIJdddgdd ZoejIJdddgdd Zpdd Zqdd Zrdd ZsejIjVdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd ZejEdd ZejIJddd"gejIJdddgejIJddddgejIJdddgdd Zdd ZdS )z
Test AR Model
    )	MONTH_END)pytest_warnsN)product)
NamedTupleUnion)assert_allcloseassert_almost_equal)IndexSeries
date_rangeperiod_range)assert_series_equal)	macrodatasunspots)Summary)OLS)SpecificationWarningValueWarning)Bunch)AutoRegAutoRegResultsWrapperar_select_order)arma_generate_sample)DeterministicProcessSeasonality	TimeTrend)SARIMAX)
results_ar         c                 C   s>   t jd}tjtdddt| d}tj|	| |d|fS )Ni l     freqperiodsindex)
nprandomRandomStatepdr   dtdatetimer   r
   standard_normal)nobsrsidx r2   A/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/tests/test_ar.pygen_ar_data*   s    r4   c                 C   s  d}t |\}}t| tr| nt| }g }d|krTtjt||jdd}	|	|	 d|krt
d|d }
tj|
|jdd}
|	|
 t| tr| rt
d| d }n| dkrd }n| }|r8td	}td
D ]}d||d d
|f< qdd td
D }tj|||jd}d|kr.|jd d dd f }|	| |rZ|D ]}|	|| qB|r|||f}dd t|D }tj|||jd}|	| nd }|d| tj|dd }|jd d df }|jd d dd f }||||fS )N  cconstr'   nametr"   timer   )r5      r<   c                 S   s   g | ]}d  |qS )zs.{0}format.0ir2   r2   r3   
<listcomp>F   s     z&gen_ols_regressors.<locals>.<listcomp>columnsr'   c                 S   s   g | ]}d  |qS )zx.{0}r=   r?   r2   r2   r3   rB   P   s     Zaxis)r4   
isinstanceintmaxr+   r
   r(   Zonesr'   appendarangezerosrange	DataFrameilocshiftr.   insertconcatdropna)arseasonaltrendexogr/   yr0   maxlagregr7   r;   lagsseasonsrA   colslagxZdfendogr2   r2   r3   gen_ols_regressors0   sN    




r`      r"   TFnr6   r:   ct   	nonrobustZHC0)ARZSeasonalZTrendZExogzCov Typec                 C   s&   g | ]}d  dd tt|D qS )z, c                 S   s    g | ]\}}|d  t | qS )z: )str)r@   rb   pr2   r2   r3   rB   i   s     z<listcomp>.<listcomp>)joinzipnamesr@   paramr2   r2   r3   rB   h   s   rB   module)scopeparamsidsc                 C   sd   | j \}}}}}t||||\}}}}t|||||d}	|	j|d}
t||}|j|dd}|
|fS )N)rT   rU   rV   )cov_typeF)rr   use_t)rm   r`   r   fitr   )requestrS   rT   rU   rV   rr   rW   r^   r_   Zar_modZar_resZolsZols_resr2   r2   r3   ols_autoreg_resultn   s    
rv   bse
cov_paramsdf_modeldf_residfittedvaluesllfr/   rp   residscaletvaluesrs   c                 C   s   |j |j }||j }|| | }|dkr2| | S |dkrD| |j  S |jdkrR| S |dkrh| t| S |dkrx| | S |dkr| | S |dkr| t| S | S )zS
    fixes to correct for df adjustment b/t OLS and AutoReg with nonrobust cov
    )r~   ry   re   )rw   conf_int)rx   r~   )f_test)r   )Z
k_constantry   rz   rr   r(   sqrt)valattribresZnparamr/   Zdf_correctionr2   r2   r3   fix_ols_attribute   s$    


r   	attributec                 C   sJ   | \}}t ||}t ||}t|r0| }| }t|||}t|| d S N)getattrcallabler   r   )rv   r   aoZols_aZar_ar2   r2   r3   test_equiv_ols_autoreg   s    

r   c                 C   sT   | \}}|  }|  }|jdkrF|j|j }t|d|}||j j}t|| d S )Nre   r   )r   rr   Trp   r   r   )rv   r   r   Za_ciZo_ciZspreadr2   r2   r3   test_conf_int_ols_autoreg   s    
r   c                 C   sL   | \}}t |jjd }||j}||j}t|d|}t|| d S )Nr   r   )r(   eyerp   shaper   Zfvaluer   r   )rv   r   r   rZa_fZo_fr2   r2   r3   test_f_test_ols_autoreg   s    r   c                 C   sB   | \}}t |j}|| t |jjd }|j|dd d S )Nr   T)Zscalar)r(   	ones_likerp   t_testr   r   	wald_test)rv   r   _r   r2   r2   r3   test_other_tests_autoreg   s
    
r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
dd Zej	j
dd ZdS )CheckARMixinc                 C   s   t | jj| jjt d S r   )r   res1rp   res2	DECIMAL_6selfr2   r2   r3   test_params   s    zCheckARMixin.test_paramsc                 C   s>   t t | j }t|| jjt t| jj	| jj
t d S r   )r(   r   Zdiagr   rx   r   r   	bse_statar   rw   Z	bse_gretl	DECIMAL_5)r   rw   r2   r2   r3   test_bse   s    zCheckARMixin.test_bsec                 C   s   t | jj| jjt d S r   )r   r   r|   r   r   r   r2   r2   r3   test_llf   s    zCheckARMixin.test_llfc                 C   s   t | jj| jjt d S r   )r   r   fper   r   r   r2   r2   r3   test_fpe   s    zCheckARMixin.test_fpec                 C   sR   ddl m} | }| j| |dd | jj|}t|t| jksNtd S )Nr   )BytesIO)	ior   r   saveseek	__class__loadtypeAssertionError)r   r   fhZres_unpickledr2   r2   r3   test_pickle   s    zCheckARMixin.test_picklec                 C   s   t | j  tstd S r   )rF   r   summaryas_textrg   r   r   r2   r2   r3   test_summary   s    zCheckARMixin.test_summaryc                 C   s   t | jjtjtjfstd S r   )rF   r   Zpvaluesr(   ndarrayr+   r
   r   r   r2   r2   r3   test_pvalues   s    zCheckARMixin.test_pvaluesN)__name__
__module____qualname__r   r   r   r   r   pytestmarksmoker   r   r2   r2   r2   r3   r      s   

r      noneZdropr<   c                 C   s4   g | ],}|d  s,|d dks,|d s,|d r|qS r   r"   rb   rd   ra   r2   rl   r2   r2   r3   rB      s      c                 C   s0   g | ](}|d  r(|d  r|d s(|d r|qS rd   r    r   r2   rl   r2   r2   r3   rB     s      zglags: {0}, trend: {1}, seasonal: {2}, nexog: {3}, periods: {4}, missing: {5}, pandas: {6}, hold_back{7}c                 C   s   g | ]}t j| qS r2   	param_fmtr>   rl   r2   r2   r3   rB     s     (c           
      C   s   t j|}|| }|r(|| |fnd }|rtjtddd| td}tj	|d|d}|rdd t
|jd	 D }tj|||d
}G dd dt}	|	||dS )Ni  r<      r%   r$   r_   r9   r'   c                 S   s   g | ]}d  |qS )zexog.{0}r=   r?   r2   r2   r3   rB     s     zgen_data.<locals>.<listcomp>r"   rC   c                   @   s6   e Zd ZU eejejf ed< eejej	f ed< dS )zgen_data.<locals>.DataSetr_   rV   N)
r   r   r   r   r(   r   r+   r
   __annotations__rM   r2   r2   r2   r3   DataSet  s   
r   r_   rV   )r(   r)   r*   r.   r+   r   r,   r-   r   r
   rL   r   rM   r   )
r/   nexogpandasseedr0   r_   rV   r'   r\   r   r2   r2   r3   gen_data  s    
  r   c           
   
   C   sT   | j d d \}}}| j dd  \}}}}}td||}	t|||||	j|	j||dS Nra      )rU   rZ   rT   periodr_   rV   missing	hold_backrm   r   r   r_   rV   
ru   rZ   rU   rT   r   r   r   
use_pandasr   datar2   r2   r3   ar_data#  s    r   )ro   c                 C   s   t jd}|d}dt | }td|jd D ]4}dd||d    d||d    ||  ||< q4tjd	|jd d d
d}tj	|dd  |dS )Nc44   
   rd   r   r"         ?g?z
2000-01-01Mr   r&   )
r(   r)   r*   r.   r   rL   r   r+   r   r
   )ru   generW   rA   r'   r2   r2   r3   ar24  s    
2r   c                 C   s4   g | ],}|d  s,|d dks,|d s,|d r|qS r   r2   rl   r2   r2   r3   rB   J  s      c                 C   s0   g | ](}|d  r(|d  r|d s(|d r|qS r   r2   rl   r2   r2   r3   rB   O  s      zilags: {0}, trend: {1}, seasonal: {2}, nexog: {3}, periods: {4}, missing: {5}, pandas: {6}, hold_back: {7}c                 C   s   g | ]}t j| qS r2   r   rl   r2   r2   r3   rB   X  s     c           
   
   C   sT   | j d d \}}}| j dd  \}}}}}td||}	t|||||	j|	j||dS r   r   r   r2   r2   r3   	plot_data\  s    r   c              
   C   s   ddl m} t| j| j| j| j| j| j| j	| j
d}| }| }t||sRt| jd kr|jdd}t||svt|jdd dd}t||stt| tstd S )Nr   )FigurerU   rT   rV   r   r   r   i,  )endF)r   alpha	in_sample)Zmatplotlib.figurer   r   r_   rZ   rU   rT   rV   r   r   r   rt   Zplot_diagnosticsrF   r   plot_predictr   r   )r   Zclose_figuresr   modr   Zfigr2   r2   r3   test_autoreg_smoke_plotsm  s(    

r   c              
   C   s(  t | j| j| j| j| j| j| j| jd}|	 }d }| jd k	rTt
d| jjd f}|j|jdd|d | jdkr| jd kr|j|jdd|d t| jtjr$| jr| jd k	r$tt| jjd | j_| jd k	rtt| jjd | j_t | j| j| j| j| j| j| jd}|j|jdd|d d S )Nr   r"   r   r   exog_oosi^  )rU   rT   rV   r   r   )r   r_   rZ   rU   rT   rV   r   r   r   rt   r(   emptyr   predictrp   rF   r+   r
   listrL   r'   )r   r   r   r   r2   r2   r3   test_autoreg_predict_smoke  sF    


	r   c                  C   sx   t ddd} t| jdddd d}| }t|D ]B}|dr@q0|dkrJq0t||}t|rd|  q0t|t	s0t
q0d S )Nr   r   Frb   )rU   rT   rV   r   )r   r   r   Z
initializer   Zremove_datar   r   Zt_test_pairwiser   Zwald_test_termsapplyrI   )r   r   r_   rt   dir
startswithr   r   rF   objectr   )r   r   r   attrr2   r2   r3   test_parameterless_autoreg  s    

r   c               	   C   s
  t ddd} t| jd}| }tjtdd |j|j| j	d W 5 Q R X tjtdd |j|j| j	d W 5 Q R X tjtd	d t| jdd
d W 5 Q R X tjtdd t| jj
ddd W 5 Q R X t| jd| j	d}| }tjtdd" |j|j| j	jd d d W 5 Q R X tjtdd* |j|j| j	jd d d d
f d W 5 Q R X tjtdd |j|jddd W 5 Q R X tjtdd |j|jdd d W 5 Q R X t| jd| j	d}| }tjtdd$ |j|jd| j	jd d d W 5 Q R X d S )Nr   rd   Tra   z exog and exog_oos cannot be usedmatchrV   r   zhold_back must be >= lagsr"   )r   zfreq cannot be inferredrT   zThe shape of exog \(200, 2\)   z!The number of columns in exog_oosz Prediction must have `end` after   startr   zexog_oos must be provided)r   r   r   zstart and end indicate that 10i  r   )r   r   r_   rt   r   raises
ValueErrorr   rp   rV   valuesrN   )r   r   r   r2   r2   r3   test_predict_errors  s2    &.r   c               	   C   s   t ddd} 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
g W 5 Q R X d S )Nr   rd   Tz"lags must be a non-negative scalarr   zAll values in lags must be posr"   ra   )r   r   r   r   r   r_   r   r2   r2   r3   test_spec_errors  s    r  c              
   C   sX   t | j| j| j| j| j| j| j| jd}|	 }|j
dd | jd krT|j
ddd d S )Nr   Tdynamici  )r   r  )r   r_   rZ   rU   rT   rV   r   r   r   rt   r   )r   r   r   r2   r2   r3   test_dynamic_forecast_smoke  s    

r  c                  C   sp   t  jd } t| dddd t| dddd t| dddd t| ddd	 t| ddd
 t| ddddd d S )NZSUNACTIVITYr    Trb   )globrU   Fr<   )rT   r   r   )r  )r  rT   r   )r   r   r   r   r  r2   r2   r3   test_ar_select_order_smoke  s    r  c                   @   s   e Zd Zdd ZdS )CheckAutoRegMixinc                 C   s   t | jj| jjt d S r   )r   r   rw   r   r   r   r   r2   r2   r3   r     s    zCheckAutoRegMixin.test_bseN)r   r   r   r   r2   r2   r2   r3   r    s   r  c                   @   s$   e Zd ZdZedd Zdd ZdS )TestAutoRegOLSConstantz2
    Test AutoReg fit by OLS with a constant.
    c                 C   sD   t  }ttt|j|j_t|jdd | _	t
jdd| _d S )N	   rZ   Tconstant)r   r   r   rL   lenr_   r'   r   rt   r   r   ARResultsOLSr   clsr   r2   r2   r3   setup_class  s    z"TestAutoRegOLSConstant.setup_classc                 C   s6  | j j}| j j}t|||jd  | jjt t|||jd  | jj	t t|j|dd| jj
t t|j|ddd| jjt t|||jd  | jjt t|j|ddd| jjt t|j|ddd| jjt t|j|dd	d| jjt t|j|dd
d| jjt t|j|ddd| jjt d S Nd   )r   r
  r   r   i  i4  i  i6  i<  iG  r   modelrp   r   r   r   r   ZFVOLSnneg1start0	DECIMAL_4ZFVOLSnneg1start9ZFVOLSnneg1start100ZFVOLSn200start0ZFVOLSdefaultZFVOLSn200start200ZFVOLSn100start325ZFVOLSn301start9ZFVOLSn4start312ZFVOLSn15start312r   r  rp   r2   r2   r3   test_predict#  sh    z#TestAutoRegOLSConstant.test_predictNr   r   r   __doc__classmethodr  r  r2   r2   r2   r3   r	    s   
r	  c                   @   s$   e Zd ZdZedd Zdd ZdS )TestAutoRegOLSNoConstantz1f
    Test AR fit by OLS without a constant.
    c                 C   s6   t  }tt|jddd | _tj	dd| _
d S )Nr
  rb   rZ   rU   Fr  )r   r   r   r(   asarrayr_   rt   r   r   r  r   r  r2   r2   r3   r  _  s    z$TestAutoRegOLSNoConstant.setup_classc                 C   s6  | j j}| j j}t|||jd  | jjt t|||jd  | jj	t t|j|dd| jj
t t|j|ddd| jjt t|||jd  | jjt t|j|ddd| jjt t|j|ddd| jjt t|j|dd	d| jjt t|j|dd
d| jjt t|j|ddd| jjt d S r  r  r  r2   r2   r3   r  e  sh    z%TestAutoRegOLSNoConstant.test_predictNr  r2   r2   r2   r3   r  Z  s   
r  r]      c              	   C   s&  t  }t|j}|d|  d  }t|| d }|j}|j}|j	}t
||||jg}tdjj}	|	| d d d f  }
d|  }t
ddtt|j t|jg}d|j ||  |
d d< t||
t t|| dd }t|j|j t|j	|j	 t|j|j t|j|j d S )	N   r  r7   r"   rd   r   ra   )rZ   r   )r   r   r(   r  r_   r   rt   aichqicbicarrayr   r   ZARLagResultsicr   copylogr/   r|   r   r   r   )r]   r   r_   Z	endog_tmpr   r"  r#  r$  r   r   compkZpenZr2r2   r2   r3   test_autoreg_info_criterion  s&    *r+  	old_namesc              	   C   s   |rt nd }tdddd}ttjdd|d}t| t|d|d }W 5 Q R X |rjt	d	d
dg}nt	dd
dg}|j
j|std S )Nz2011-1H   r   r   r%   r$   Zfoobarr   rd   rZ   r,  	interceptz	foobar.L1z	foobar.L2r7   )FutureWarningr   r
   r(   r)   Zrandnr   r   rt   r	   rp   r'   equalsr   )reset_randomstater,  warningdatesrW   resultsr1   r2   r2   r3   test_autoreg_named_series  s    
r7  c                  C   sH   t  jd   } tdt| dd}|| _t| dd	 }|j
 d S )Ncpi1959Q1Qr.     r  )r   load_pandasr   diffrR   r   r  r'   r   rt   rw   )Zdtar5  rS   r2   r2   r3   test_autoreg_series  s
    r>  c                  C   s   t jd tdddgdgd} t| ttddddtdd}t	|d	d
d}t
|jdks`tt|jtsptt|jtstt|jtstt|jtst|jrt|jdkst|jd kstd S )Ni90  r"   g      g333333?r  i  r.  r&   r<   r"  )rX   r&  )r"   rd   r6   )r(   r)   r   r   r
   r   r,   r-   r   r   tupleZar_lagsr   rF   r"  dictr$  r#  r  r   rT   rU   r   )rW   tsr   r2   r2   r3   test_ar_order_select  s&      
rB  c                  C   sp   t ddddddddddg
} tjtdd t| dd	 W 5 Q R X tjtdd t| dd
d W 5 Q R X d S )Ng   ?g   ?g   ]?g   `?g   ?zThe model specification cannotr      r  rb   r  )r(   r%  r   r   r   r   )sampler2   r2   r3   "test_autoreg_constant_column_trend  s"    rE  c              	   C   s   t  jd   }tdt|dd}||_| r6tnd }t	| t
|d| d }W 5 Q R X |  }d|ksxtd|kstd	|kstt	| t
|d
| d }W 5 Q R X |  }| rd|kstnd|kstd|kstd S )Nr8  r9  r:  r.  r    r/  z
AutoReg(4)zcpi.L4z
03-31-1960r   r0  r7   
AutoReg(0))r   r<  r   r=  rR   r   r  r'   r1  r   r   rt   r   r   r   )r,  r   r5  r4  r   Zsummr2   r2   r3   test_autoreg_summary_corner  s"    

rG  c                  C   s   t  } tt| jd}| }||j}t	|tj
s>t|jdksLt||jjdksbtt||j ||j d S )Nra   )r    )r    r    )r   r<  r   r(   r  r_   rt   scorerp   rF   r   r   r   Zinformationr   Zhessian)r   rS   r   rH  r2   r2   r3   test_autoreg_score  s    rI  c                  C   sF   t  } tt| jdd}| }t|jt	d|j
d  g d S )Nr"   r  g      ?r   )r   r<  r   r(   r  r_   rt   r   rootsr%  rp   )r   rS   r   r2   r2   r3   test_autoreg_roots  s    rK  c                 C   s<  t jd}t d}|d t d |d< tddD ] }d||d   ||  ||< q6t|d}| }|jdddd}|jddd	d}t	j
td
dddtd}t	j||d}t|d}| }|j|d |d |d d}	|j|d |d dd}
|j|d |d d	d}t|| t||	 t||
 t|| d S )N  r   P^Cy@r"   ?r5   i   r  Ti     r   r&   )r(   r)   r.   r   r   rL   r   rt   r   r+   r   r,   r-   r   r
   r   )r3  r   rW   rA   r   r   Zpred0Zpred1r1   Zpred2Zpred3Zpred4r2   r2   r3   test_equiv_dynamic$  s(    





rP  c            	      C   s&  t jd} | d}t d}|d t d |d< tddD ] }d||d   ||  ||< q@t|ddd	}|jd
dd}t	|d}|
dd}|
|jd d dd}t|| |j
dddd}|j
|jd d dddd}t|| |j
dddd}|j
|jd d dddd}t|| d S )NNa rL  r   rM  r"   rN  r"   r   r   r6   orderrU   Fr   )dispZiprint  L  rd   Tr  2   )r(   r)   r*   r.   r   r   rL   r   rt   r   r   rp   r   )	r0   r   rW   rA   smodsresr   Zspredpredr2   r2   r3   test_dynamic_against_sarimax;  s$    




r\  c                  C   s  t jd} | d}t d}|d t d |d< dt t dd d t j  }t	d	dD ]0}dd
||d	    ||  ||d   ||< qbt
j|t
jtdd	d	dtdd}t|d	dd}| }|jjd }t d}	|jjd	d |	d	d < |jjd }
|ddd}t d}|d |
 | |	d  |d< t	d	dD ].}||d	  |
 | |	d| d   ||< qFt
j|t
j|jd dtdd}t|| |jddd}|dd |
 | |	t ddd   }t
j|t
j|jd dtdd}t|| d S )NrQ  rL  r   rM  r   r<   r   rd   r"   rN    r   r&   Tr   r   rV  rW       Fr  e   )r(   r)   r*   r.   r   r   cosrJ   pirL   r+   r
   r   r,   r-   r   r   rt   rp   rN   rK   r   r'   r   )r0   r   rW   effectsrA   ysr   r   r6   r[   rS   r[  directr2   r2   r3   test_predict_seasonalR  sL    

".  

, 
( rf  c                  C   s\  t jd} | d}t d}| d}|d d t d |d d d |d d< tddD ]@}dd||d    d	||d    ||  ||   ||< qdtj	|tj
td
dddtdd}tj|ddg|jd}t|ddgd|d}| }dt| kst|d}	|jjd }
|jjdd }t |jjdd  }|jd }|jd }|
||dd   ||dd   }||d |dd df  |d |dd df   7 }tj
|jd dtd}tj	||d}t|	| | d}|jddd|d}	t d}|jd }|jd }|
||d   ||d   |d |  |d< |
||d   ||d   |d  |  |d< |
||d   ||d   |d! |  |d"< tddD ]|}|
|||d    |||d    ||< d| |jd k r||  |d|  | 7  < n||  ||d  | 7  < qtj	|tj
|jd dtdd}t|	| d S )#NrQ  rL  )rL  rd   ra   rM  r"   r   rN  r   r]  r   r&   Zx0x1rC   r6   rU   rV   z-XrV  r   r_  r     r`  )r  rd   rW  T)r  r   r^        rd   )r(   r)   r*   r.   r   r   sumrL   r+   r
   r   r,   r-   r   rM   r'   r   rt   rg   r   r   r   rp   rN   r  r   rK   r   )r0   r   rW   r^   rA   rd  Zxdfr   r   r[  r6   rS   exZphi_1Zphi_2re  r1   r   r2   r2   r3   test_predict_exogy  s`    


0>  


$4




,,,(  rp  c                  C   s  t jd} | d}t d}|d d t d |d d< tddD ]4}dd||d    d||d    ||  ||< qHtj|tj	t
d	dddtd
d}t|ddgdd}| }|jjd }|jjd }t |jjdd  }	|ddd}
t d}||d  |	d |d   |	d |d   |d< ||d  |	d |d   |	d |d   |d< ||d  |	d |d   |	d |d   |d< tddD ]B}||d|   |	d ||d    |	d ||d    ||< qtj|tj	|jd dtd
d}t|
| |d}
||t dd  |	d |dd   |	d |dd   }tj	|jd dtd
}tj||d}t|
| d S )NrQ  rL  ra   rM  r   rN  r"   r   r]  r   r&   rc   rU   r   rd   rV  rW  Tr^  rl  r_  ri  rm  rk  i  i  r   rj  r`  )r(   r)   r*   r.   r   r   rL   r+   r
   r   r,   r-   r   r   rt   rp   rN   r  r   rK   r'   r   rJ   )r0   r   rW   rA   rd  r   r   r6   r:   rS   r[  re  r1   r2   r2   r3   test_predict_irregular_ar  sX    

2  
0006
 

rr  r  c                 C   s  t jd}|d}t d}|d t d |d< dt t dd d t j  }t	d	dD ]0}dd
||d	    ||  ||d   ||< qbt
j|t
jtdd	d	dtdd}t|d	dd}| }|jdd| d}	t
jtdd	d	dtd}
|j|
d |
d | d}t|	| d S )NrQ  rL  r   rM  r   r<   r   rd   r"   rN  r]  r   r&   Tr     i  r  i  )r(   r)   r*   r.   r   r   ra  rJ   rb  rL   r+   r
   r   r,   r-   r   r   rt   r   r   )r  r0   r   rW   rc  rA   rd  r   r   Zpred_intr5  Z
pred_datesr2   r2   r3   test_forecast_start_end_equiv  s2    

". rt  r         c                 C   s\   t tjjdd}t|dd}| }| d }|j| |d}|jd ||  d ksXt	d S )	N   sizerd   r  r   r   r   r"   )
r+   r
   r(   r)   normalr   rt   r   r   r   )r   Zy_trainmZmfr   r[  r2   r2   r3   test_autoreg_start  s    r|  c              	   C   s   t tjjdd}tdddtdg}t|j|d}t	|dd	d
|d}|
 }t	|ddd
dd}|
 }tt|jt|j tjtdd t	|dd	d
|d W 5 Q R X tjtdd t	|d
dd W 5 Q R X d S )Nr   rx  Tr"   r  rT  r<   Zadditional_termsrb   Frd   )rU   rT   rZ   deterministicrc   )rU   rT   rZ   r   zWhen using deterministic, trendr   zdeterministic must be)r  )r+   r
   r(   r)   rz  r   r   r   r'   r   rt   r   r  rp   r   warnsr   r   	TypeError)r3  rW   termsdpr{  r   m2r   r2   r2   r3   test_deterministic   s     r  c                 C   s   t jjdd}|jd }tjtdddd|d}td|D ] }d||d   ||  ||< q<tj	||d	}t
|d
dd}| }|d}|||d }	|d}
t||	 t||
 t|dd
djdd}|d}tj|j|j d S )Nrs  rx  r   i  r"   Dr#   ffffff?r&   r6   )rU   rZ   r<   r   z
2022-10-08rR  rS  F)rU  )r(   r)   rz  r   r+   r   r,   r-   rL   r
   r   rt   forecastr   r   r   testingassert_index_equalr'   )r3  r   r/   r1   rA   rW   r{  r   r   br6   Zsarimax_resdr2   r2   r3   #test_autoreg_predict_forecast_equiv  s     





r  c                  C   s   t jdddd} tjdd}t j|| d d dd}t|d	d
d}| }|	d}t
|jt jsltt j|j| dd   d S )Nz1990-1-1i  r   r   r   r5   rW   r8   ra   Tr      i)r+   r   r(   r)   r*   r.   r
   r   rt   r  rF   r'   ZPeriodIndexr   r  r  )rb  rW   rd  r   r   Zfcastr2   r2   r3   "test_autoreg_forecast_period_index$  s    
r  c               	   C   sN   t jd} t| ddgd}| }tt |jdddd W 5 Q R X d S )	Nr  r"   ra   r  r   rX  F)r   r   )	r(   r)   r.   r   rt   r   r   r   r   )rW   r   r   r2   r2   r3   test_autoreg_plot_err/  s
    r  c               	   C   s   t jtddddtd} tjd}t|j	| ddd}|
d}td}|d d	 |d d	< td	dD ]4}d	d
||d    d||d	    ||  ||< qlt j|dd  |dd}tt t|d	d }W 5 Q R X tt|jstd S )Nr!   r"   r   r   r   r  F)ry  replacerd   g?r  irW   r8   r  )r+   r   r,   r-   r   r(   r)   r*   sortedchoicer.   rK   rL   r
   r   r  r   r   rt   allisfiniter}   r   )r1   r0   Z	idx_datesr   rW   rA   rd  r   r2   r2   r3   test_autoreg_resids8  s    

2r  c                 C   sF  t | ddd}| }|jdd}|jddd}|j| jd | jd d}tjtjg}t|j}td| j	d	 D ]n}| j
|d
  }	| j
|d  }
|dkr||d
  }	|dkr||d  }
||d	 |d
 |	  |d |
   qrtj|| jd}t|| t|| t|dd  |dd   | }t|d d |d d  d S )Nrd   r6   rq  rv  r  r   r;  r   r  r   r"      r&   )r   rt   r   r'   r(   nanr  rp   rL   r   rN   rI   r+   r
   r   )r   r   r   Zd25Zs10_d15Zsd_index	referencerh   rA   lag1lag2expectedfullr2   r2   r3   test_dynamic_predictionsG  s*    (

r  c                 C   s^  t | ddd}| }|jddd}|jdddd	}| jd
 d| jd
 | jd    }|j| jd | jd |d	}t|| t|dd  |dd   tjtjg}t|j}t	d|j
d D ]}	|	| j
d k r| j|	d  }
| j|	d  }|	dkr||	d  }
|	dkr||	d  }||d |d |
  |d |   qtj||jd}t|| d S )Nrd   r6   rq  rv  =   )r  r   r   r;  )r   r  r   r   r<   r   r   r"   r  r&   )r   rt   r   r'   r   r(   r  r  rp   rL   r   rN   rI   r+   r
   )r   r   r   Zd25_endZs10_d15_endr   Zsd_index_endr  rh   rA   r  r  r  r2   r2   r3   test_dynamic_predictions_oosb  s2    "  


(r  c              	   C   st   t | ddd}| }tjtdd |jdd W 5 Q R X tjtdd  |j| jd | jd	 d
 W 5 Q R X d S )Nrd   r6   rq  zDynamic prediction cannotr   r   r  r   r   r  )r   rt   r   r   r   r   r'   )r   r   r   r2   r2   r3   test_invalid_dynamic~  s    r  c           	      C   s   t jd}tj|| jd dfddg| jd}t| dd|d}|	 }|
 }|j
|d	}t|| |j
d
d}|j
d
|d}t|| d S )Nr   r   rd   rg  Zx2rC   r6   rh  r   rv  r  )r  rV   )r(   r)   r*   r+   rM   r.   r   r'   r   rt   r   r   )	r   r   rV   r   r   Z	pred_baseZ	pred_replZdyn_baseZdyn_replr2   r2   r3   test_exog_prediction  s    
r  c              	   C   s   t t t| ddddd}W 5 Q R X t| ddddd}|jdksHt|jdksVtd|jksdtd|jksrtd	|jkstd
|jkstd S )Nrd   rc   T)rU   rT   r,  Fr<   r0  z
seasonal.1r7   zs(2,12))r   r  r1  r   rU   r   r   Z
exog_names)r   r   newr2   r2   r3   test_old_names  s    r  c                 C   s,   t | d d d }t| ts(td S Nr   rd   )r   rt   rF   Zdiagnostic_summaryr   r   )r   r   r2   r2   r3   test_diagnostic_summary_short  s    r  c                 C   s<   t | d d d}| }| }||j}t|| d S r  )r   rt   r   rp   r   )r   r   r   Zres_predZmod_predr2   r2   r3   test_ar_model_predict  s
    r  c                 C   sJ   t | d d d dd}| }| }| }d|ks:td|ksFtd S )Nr   rb   rq  rF  zNo Model Parameters)r   rt   r   r   r   )r   r   r   r   Zsumm_txtr2   r2   r3   test_autoreg_no_variables  s    r  c              	   C   sP   ddl m}m} tt ||  W 5 Q R X tt ||  W 5 Q R X d S )Nr   )rf   	ARResults)statsmodels.tsa.ar_modelrf   r  r   r   NotImplementedError)r   rf   r  r2   r2   r3   test_removal  s
    r  c                 C   s  | \}}|j j}|jd d }|d | }|j j}|d k	rF|d | }|j||d}dt| kshtt|t	svtt
|j|j d }|j jd k	r|j jdd  }|jd|d}t|tjst|jdkst|j||d	d
}	t|j|	jrtt|j|	jr
t|jj|	jjks tt|j|	jr6t|j jd kr|	jd|d}
t|
tjsdt|
jdksttt|
|rtd S )Nr   rd   r   zusing a differentir   r   )r   T)r_   rV   refit)r  r_   r   rV   r   rg   r   r   rF   r   r   rp   r  r(   r   Zallcloser|   r{   )rv   r   r   rW   rb   r^   Z	res_applyr   Zfcasts_applyZ	res_refitZfcasts_refitr2   r2   r3   test_autoreg_apply  s6    r  c              	   C   sT  t jd}t|dd}| }tjtdd ||d d  W 5 Q R X t j|j	d df}t|d	|d
 }tjtdd ||dd  W 5 Q R X t j|j	d df}t|d	|d
 }tjtdd, |j|dd |ddd df d W 5 Q R X t|d	d }tjtdd$ |j|dd |dd d W 5 Q R X d S )Nr   r   r  zAn exception occuredr   r   r   ra   r"   )rZ   rV   zexog must be providedrX     zThe number of exogrd   r   zexog must be None)
r(   r)   r.   r   rt   r   r   r   r   r   )r3  rW   r   r   r^   r2   r2   r3   test_autoreg_apply_exception  s     0r  c            	      C   s(  t jd} | d}| d}| d}| d}tjd|jd |jd  td}tj||d |jd  dd	}tj	||d |jd  d
d t
|jd D d}tj|||jd d  dd	}tj	|||jd d  |jd}tj||gdd}tj||gdd}G dd dt}|||||||S )Nr   r   )r   ra   )r   ra   r   z2020-1-1r   rW   r8   c                 S   s   g | ]}d | qS )r^   r2   r?   r2   r2   r3   rB   	  s     zappend_data.<locals>.<listcomp>r"   )r'   rD   rE   c                   @   sJ   e Zd ZU ejed< ejed< ejed< ejed< ejed< ejed< dS )zappend_data.<locals>.AppendDatarW   y_oosy_bothr^   x_oosx_bothN)r   r   r   r+   r
   r   rM   r2   r2   r2   r3   
AppendData  s   





r  )r(   r)   r*   r.   r+   r   r   r   r
   rM   rL   rD   rQ   r   )	r0   rW   r^   r  r  r'   r  r  r  r2   r2   r3   append_data  s,    



   r  rU   r   rZ   rT   c              	   C   s  |sdnd }| j }| j}| j}| j}	| j}
| j}|spt|}t|	}	t|}t|
}
t|}t|}t|||||d	 }|j
|dd}t|||||d	 }t||	||||d	 }|j
||
dd}t||||||d	 }t|j|j t|j|j |rbtjtdd |
t| W 5 Q R X tjtd	d |
|t|
 W 5 Q R X tjtd
d |j
||
d W 5 Q R X tjtdd |
| W 5 Q R X d S )Nr<   )rZ   rU   rT   r   Tr  )rV   rZ   rU   rT   r   rV   r  zendog must have the same typer   zexog must have the same typezOriginal model doesr   zOriginal model has exog)rW   r  r  r^   r  r  r(   r  r   rt   rI   r   rp   r   r   r  r   )r  r   rZ   rU   rT   r   rW   r  r  r^   r  r  r   
res_append
res_directZres_exogZres_exog_appendZres_exog_directr2   r2   r3   test_autoreg_append  sr    





    
    
     

	r  c                 C   s   | j }| j}| j}| j}| j}| j}tdddtdg}t|j	|d}t
|dd|d }	|	j|dd	}
t
|dd||j	d }t|
j|j t
t|dd|d }|t|}t|j|j t
||dd|d
 }	|	j||dd}
t
||dd||j	d
 }t|
j|j d S )NTr"   r}  r<   r~  ra   rb   )rZ   rU   r  r  )rV   rZ   rU   r  r  )rW   r  r  r^   r  r  r   r   r   r'   r   rt   rI   r   r   rp   r(   r  )r  rW   r  r  r^   r  r  r  r  r   r  r  Zres_npZres_append_npr2   r2   r3   !test_autoreg_append_deterministicP  s<       



r  )r   )r  Zstatsmodels.compat.pandasr   Zstatsmodels.compat.pytestr   r-   r,   	itertoolsr   typingr   r   Znumpyr(   Znumpy.testingr   r   r   r+   r	   r
   r   r   Zpandas.testingr   r   Zstatsmodels.datasetsr   r   Zstatsmodels.iolib.summaryr   Z#statsmodels.regression.linear_modelr   Zstatsmodels.tools.sm_exceptionsr   r   Zstatsmodels.tools.toolsr   r  r   r   r   Zstatsmodels.tsa.arima_processr   Zstatsmodels.tsa.deterministicr   r   r   Z"statsmodels.tsa.statespace.sarimaxr   Zstatsmodels.tsa.tests.resultsr   r   r   r  r4   r`   rS   rT   rU   rV   Zcovsr   rp   finalrm   rI   rk   rq   Zfixturerv   
attributesr   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   Z
matplotlibr   r   r   r   r  r  r  r  r	  r  rJ   r+  r7  r>  rB  rE  rG  rI  rK  rP  r\  rf  rp  rr  rt  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r2   r2   r3   <module>   sX  ,0



#







"

$
 



CB


	

'4-

	
			
1