U
    md٨                     @   s  d Z ddlmZ ddlmZmZ ddlZddl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l.m/Z/ ddl0m1Z1 dZ2dZ3dZ4dd Z5dd Z6ddddgdggZ7ddgZ8ddd d!gZ9dd"gZ:d#d$gZ;e<e	e7e8e9e:e;Z=g Z>e=D ]@Z?e?d dkse?d se?d" dkse?d r~e>@e? q~e>Z=d%ZAd&d' e=D ZBejCd(e=eBd)d*d+ ZDd,d-d.d/d0d1d2d3d4d5d6d7gZEd8d9 ZFejGHd:eEd;d< ZId=d> ZJd?d@ ZKejGjLdAdB ZMG dCdD dDZNe	dddddggddd d!gddgdd"gddEgdFdGgddgddHgZ=e<e=Z=dId' e=D Z=dJd' e=D Z=dKZOdLd' e=D ZBddNdOZPejCd(e=eBd)dPdQ ZQejCd(dRdSdT ZRe	ddddggdgddgdgddEgdGgddgddHgZ=e<e=Z=dUd' e=D Z=dVd' e=D Z=dWZOdXd' e=D ZBejCd(e=ddd eBddd d)dYdZ ZSejGjTejGjLd[d\ ZUejGjLd]d^ ZVejGjTd_d` ZWdadb ZXdcdd ZYejGjLdedf ZZejGjLdgdh Z[G didj djeNZ\G dkdl dle\Z]G dmdn dne\Z^ejGHdoe<e_ddpdqdr Z`ejGHdsddgdtdu ZaejGjLdvdw Zbdxdy Zcdzd{ ZdejGHdsddgd|d} ZeejGjLd~d Zfdd Zgdd Zhdd Zidd Zjdd Zkdd ZlejGHdddgdd ZmejGHdddgdd Zndd Zodd Zpdd ZqejGjTdd Zrdd Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~ejCdd ZejGHddd!gejGHdddgejGHddddgejGHdddgdd Zdd ZdS )z
Test AR Model
    )pytest_warns)
NamedTupleUnionN)product)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d| d}tj|| |d|fS )Ni l     Mfreqperiodsindex)	nprandomRandomStatepdr
   dtdatetimer	   standard_normal)nobsrsidx r2   V/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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>E   s     z&gen_ols_regressors.<locals>.<listcomp>columnsr'   c                 S   s   g | ]}d  |qS )zx.{0}r=   r?   r2   r2   r3   rB   O   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_regressors/   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   h   s     z<listcomp>.<listcomp>)joinzipnamesr@   paramr2   r2   r3   rB   g   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_resultm   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)valZ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| d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$   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	   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-01r"   r   r&   )
r(   r)   r*   r.   r   rL   r   r+   r   r	   )ru   generW   rA   r'   r2   r2   r3   ar23  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   I  s      c                 C   s0   g | ](}|d  r(|d  r|d s(|d r|qS r   r2   rl   r2   r2   r3   rB   N  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   W  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_plotsl  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  d  sh    z%TestAutoRegOLSNoConstant.test_predictNr  r2   r2   r2   r3   r  Y  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kpen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d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<   r   )rX   r$  )r!   rd   r6   )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   informationr   Zhessian)r   rS   r   rH  r2   r2   r3   test_autoreg_score  s    rJ  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    rL  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d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   r   rL   r   rt   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(    





rQ  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 rM  r   rN  r!   rO  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_sarimax8  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d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ddd}t|| |jddd}|dd |
 | |	t ddd   }t
j|t
j|jd dddd}t|| d S )NrR  rM  r   rN  r   r<   r   rd   r!   rO    r"   r   r&   Tr   r   rW  rX       Fr  e   )r(   r)   r*   r.   r   r   cosrJ   pirL   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_seasonalO  sD    

". 

, 
( rg  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d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  }|
|d |dd   |d |dd   }||d |dd df  |d |dd df   7 }tj
|jd ddd}tj	||d}t|	| | d}|j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 ]}|
|d ||d    |d ||d    ||< d| |jd k r||  |d|  | 7  < n||  ||d  | 7  < qtj	|tj
|jd dddd}t|	| d S )$NrR  rM  )rM  rd   ra   rN  r!   r   rO  r   r^  r"   r   r&   Zx0x1rC   r6   rU   rV   z-XrW  r   r`  r     ra  )r  rd   rX  T)r  r   r_        rd   )r(   r)   r*   r.   r   r   sumrL   r+   r	   r
   r,   r-   rM   r'   r   rt   rg   r   r   r   rp   rN   r  r   rK   r   )r0   r   rW   r^   rA   re  Zxdfr   r   r\  r6   rS   exrf  r1   r   r2   r2   r3   test_predict_exogr  sP    


0> 
,4


4440  rq  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d
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d
dd}t|
| |d}
||t dd  |	d |dd   |	d |dd   }tj	|jd dd
d}tj||d}t|
| d S )NrR  rM  ra   rN  r   rO  r!   r   r^  r"   r   r&   rc   rU   r   rd   rW  rX  Tr_  rm  r`  rj  rn  rl  i  i  r   rk  ra  )r(   r)   r*   r.   r   r   rL   r+   r	   r
   r,   r-   r   rt   rp   rN   r  r   rK   r'   r   rJ   )r0   r   rW   rA   re  r   r   r6   r:   rS   r\  rf  r1   r2   r2   r3   test_predict_irregular_ar  sP    

2 
0006
 

rs  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ddd}t|d	dd}| }|jdd| d}	t
jtdd	d	ddd}
|j|
d |
d | d}t|	| d S )NrR  rM  r   rN  r   r<   r   rd   r!   rO  r^  r"   r   r&   Tr     i  r  i  )r(   r)   r*   r.   r   r   rb  rJ   rc  rL   r+   r	   r
   r,   r-   r   rt   r   r   )r  r0   r   rW   rd  rA   re  r   r   Zpred_intr5  Z
pred_datesr2   r2   r3   test_forecast_start_end_equiv  s"    

". ru  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m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   ry  Tr!   r  rU  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)   r{  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 )Nrt  ry  r   i  r!   Dr#   ffffff?r&   r6   )rU   rZ   r<   r   z
2022-10-08rS  rT  F)rV  )r(   r)   r{  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  )rc  rW   re  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   rY  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d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   r  F)rz  replacerd   g?r  irW   r8   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   re  r   r2   r2   r3   test_autoreg_resids  s    

2r  c                 C   sB  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 ]j}| |d
  }	| |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   rr  rw  r  r   r;  r   r  r   r!      r&   )r   rt   r   r'   r(   nanr  rp   rL   r   rI   r+   r	   r   )r   r   r   Zd25Zs10_d15Zsd_index	referencerh   rA   lag1lag2expectedfullr2   r2   r3   test_dynamic_predictions.  s*    (

r  c                 C   sX  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 ]z}	|	| j
d k r| |	d  }
| |	d  }|	dkr||	d  }
|	dkr||	d  }||d |d |
  |d |   qtj||jd}t|| d S )Nrd   r6   rr  rw  =   )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   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_oosI  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   rr  zDynamic prediction cannotr   r   r  r   r   r  )r   rt   r   r   r   r   r'   )r   r   r   r2   r2   r3   test_invalid_dynamice  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   rh  Zx2rC   r6   ri  r   rw  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_predictionn  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   rr  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 providedrY     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  d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"   r   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	   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_deterministic7  s<       

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

r  )r   )r  Zstatsmodels.compat.pytestr   typingr   r   r-   r,   	itertoolsr   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  rJ  rL  rQ  r]  rg  rq  rs  ru  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>   sV  ,0



#






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

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