a
    \:byZ                     @   s  d dl mZmZ d dlmZ d dlmZmZ d dlZ	d dl
Zd dlZd dlmZmZmZmZmZmZmZmZ ejdddgd	d
d Zejdg dd	dd Zejdg dd	dd Zejjdd Zejjdd Zejjdd Zejjdd Zejjdd Z ej!Z"dd e"# D Z$ej%de$dd  Z&d!d" Z'd#d$ Z(d%d& Z)d'd( Z*d)d* Z+d+d, Z,d-d. Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1ejj2ed7d8d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8dEdF Z9ej%dGddgej%dHd dIgej%dJddgej%dKd dIgej%dLddMgej%dNddgdOdP Z:dQdR Z;dSdT Z<dUdV Z=dWdX Z>dYdZ Z?d[d\ Z@d]d^ ZAej%deBd d_eCe	Dd_ejEd`dad_dbejFd`dad_dbgdcdd ZGG dedf dfeZHdgdh ZIdS )i    )PD_LT_1_0_0is_int_index)pytest_warns)HashableTupleN)CalendarFourierCalendarSeasonalityCalendarTimeTrendDeterministicProcessDeterministicTermFourierSeasonality	TimeTrendmoduleTF)Zscopeparamsc                 C   s$   t jdddd}| jr |dS |S )N
2000-01-01iA  Bperiodsfreq)pd
date_rangeparam	to_periodrequestidx r   Glib/python3.9/site-packages/statsmodels/tsa/tests/test_deterministic.py
time_index   s    
r   )rangeperioddatetimefibint64c                 C   s   | j }|dv r2tjdddd}|dkr|d}nv|dkrHtdd	}n`|d
krbttd	}nF|dkrddg}tdD ]}|	|d |d   qzt|}nt
 |S )N)r!   r"   r      Mr   r!   r    r   {   r$   r#      q   )r   r   r   r   
RangeIndexIndexnparanger    appendNotImplementedError)r   r   r   r#   _r   r   r   index   s     r3   )Nr!   Flistc                 C   sH   t jdddd}| jd u rd S | jdkr2|dS | jdkrDt|S |S )Nr   i  r   r   r!   r4   )r   r   r   r   r4   r   r   r   r   forecast_index5   s    



r5   c                 C   sR  t dd}||  |d u r dnt|}d }t| rHtt| dksjt| tj	u rnt
| dkrn|d u rnt}t| ||| | W d    n1 s0    Y  t| t| t|jtsJ t|jtsJ t d|ksJ t d|ksJ t d|ksJ t d	|ks J td
|ks2J t dd}||  t| d S )NT   S   r(               cttcttn   Fr   )r   	in_samplelenr   r.   anydifftyper   r-   maxUserWarningr   out_of_samplestrhash
isinstanceorderintZ	_constantboolfrom_stringr   )r3   r5   ttstepswarnZtt0r   r   r   test_time_trend_smokeA   s:    


	
,

rP   c                 C   s  t d}||  |d u rdnt|}d }t| rFtt| dksht| tj	u rlt
| dkrl|d u rlt}t| ||| | W d    n1 s0    Y  t|jtsJ t| t| t| tjtjfr| jrt | }||  ||| | t t|  d S )Nr=   r7   r(   r8   )r   r>   r?   r   r.   r@   rA   rB   r   r-   rC   rD   r   rE   rH   r!   rJ   rF   rG   DatetimeIndexPeriodIndexr   
from_indexr4   )r3   r5   srN   rO   r   r   r   test_seasonality_smokea   s2    

	
,

rU   c                 C   s  t dd}||  |d u r dnt|}d }t| rHtt| dksjt| tj	u rnt
| dkrn|d u rnt}t| ||| | W d    n1 s0    Y  t|jtsJ t|jtsJ t| t| tjtdd t dd W d    n1 s0    Y  d S )	Nr=   r6   r7   r(   r8   z2 \* order must be <= periodmatch   )r   r>   r?   r   r.   r@   rA   rB   r   r-   rC   rD   r   rE   rH   r!   floatrI   rJ   rF   rG   pytestraises
ValueError)r3   r5   frN   rO   r   r   r   test_fourier_smoke}   s.    


	
,r^   c                 C   s   t ddd}||  |d u r"dnt|}||| | t| t| t|jtsXJ t|j	t
shJ t|jtsxJ |jd u sJ d S )NAr6   rI   r7   )r	   r>   r?   rE   rF   rG   rH   rI   rJ   constantrK   r   base_period)r   r5   r:   rN   r   r   r   test_calendar_time_trend_smoke   s    
rc   c                 C   sr   t dd}||  |d u r dnt|}||| | t|jtsFJ t|jtsVJ t| t	| t
| d S )Nr_   r6   r7   )r   r>   r?   rE   rH   rI   rJ   r   rF   reprrG   )r   r5   cfrN   r   r   r   test_calendar_fourier_smoke   s    

rf   c                 C   s&   g | ]\}}|  D ]}||fqqS r   )keys).0kvZk2r   r   r   
<listcomp>       rk   freq_periodc                 C   s   |\}}t ||}||  |d u r(dnt|}||| | t|jtsNJ t|jts^J t| t| t	| t ||}||ksJ d S )Nr7   )
r   r>   r?   rE   rH   r!   rF   r   rd   rG   )r   r5   rm   r   r!   csrN   Zcs2r   r   r   test_calendar_seasonality   s    


ro   c                  C   sT   t dd} tddd}tjtdd ||  W d    n1 sF0    Y  d S )Nr   
   r_   r6   r`    CalendarTimeTrend terms can onlyrV   )r   r,   r	   rZ   r[   	TypeErrorr>   )r3   r:   r   r   r   test_forbidden_index   s    rs   c                 C   sZ   t ddddd}t dddd}||ks*J t| t| |jd usHJ |jd u sVJ d S )Nr&   T   z1960-1-1rI   rb   r`   )r	   rF   rb   )r   r:   ct2r   r   r   test_calendar_time_trend_base   s    rw   c                 C   s   t jtdd tdd W d    n1 s.0    Y  tdd}t jtdd& |tjdd	d
d W d    n1 s|0    Y  d S )NzThe combination of freq=rV   Hr_   r   Wzfreq is B but index contains2000-1-1rp   Dr   )rZ   r[   r\   r   r>   r   r   )r   rn   r   r   r   test_invalid_freq_period   s
    (
r|   c                  C   s4  t dddd} tdd}tjtdd | |tj W d    n1 sL0    Y  tjtdd  | |tjf W d    n1 s0    Y  tjtdd$ | |tjtjf W d    n1 s0    Y  t	g d	}tjtdd, tjtjtjf}| || W d    n1 s&0    Y  d S )
Nr_   Trt   r`   r      rq   rV   r   r(   r(   r6   rt            )
r	   r   r,   rZ   r[   rr   Z_check_index_typerQ   rR   r-   )r:   r   typesr   r   r   test_check_index_type   s    ,.2r   c                   C   s@   t jtdd tdddd W d    n1 s20    Y  d S )Nz freq is not understood by pandasrV   unknownTrt   r`   )rZ   r[   r\   r	   r   r   r   r   test_unknown_freq   s    r   c                 C   sP   t dd}tjtdd$ |d| td W d    n1 sB0    Y  d S )N   r`   z!The number of values in forecast_rV   rp      )r   rZ   r[   r\   rE   r   r,   )r3   rM   r   r   r   test_invalid_formcast_index   s    
r   c                  C   s   t g d} tt t|  W d    n1 s80    Y  t jdddg d } tt t|  W d    n1 s0    Y  d S )N)r   r(   r(   r6   rt   r   r   r=   rz   rp   )r   )r   r(   r6   rt   r   r   )	r   r-   rZ   r[   rr   r   rS   r   r\   )r3   r   r   r   test_seasonal_from_index_err   s    (r   c                 C   sT  t dd}|| }|j| jd dfks,J t|dks>J tj|j|  d }t	| rnt
t| dkst| tju rt| dkrt}t| |d| }W d    n1 s0    Y  t|dksJ t dd}|| }|j| jd dfksJ t ddd	}|| }|j| jd dfks.J t|jd
dgksFJ t ddd	}|| }tj||gdd}tj|| t ddd	}|| d d }	t|$ |d| d d }
W d    n1 s0    Y  |jd| d d | dd  d}tj|	|
gdd}t| tjtjfr,tj|| tj|	|gdd}tjj||dd d S )NTra   r   r(   r8      Fr6   ra   rI   trendtrend_squared)Zaxisi2   )rN   r3   r5   )Zcheck_index_type)r   r>   shaper.   allr   testingassert_index_equalr3   r   r@   rA   rB   r-   rC   rD   r   rE   r4   columnsconcatassert_frame_equalrH   rQ   r,   )r3   rM   constrO   Zconst_fcastemptyt2finalexpectedZshortZ	remainderZdirectZcombinedr   r   r   test_time_trend  sL    



*




4r   c                 C   sJ  t dd}|| }|jsJ |j| jd dfks6J tj|j|  t	|
ddks^J t|jdd tddD ksJ t| jd df}tdD ]}d||d d|f< qtj|t| d }t| rtt| dkst| tju rt| d	krt}t| |jd| d
}W d    n1 s:0    Y  |jdt| d f dksdJ t	|
ddks~J t ddd}|| }|jd dksJ |jd 
 dksJ |jdksJ tjtdd t ddd W d    n1 s0    Y  tjtdd t dd W d    n1 s<0    Y  d S )Nr=   r!   r   r(         ?c                 S   s   g | ]}d | dqS )zs(,12)r   )rh   ir   r   r   rk   4  rl   z$test_seasonality.<locals>.<listcomp>r   r8   rN   r3   rX   rt   )r!   initial_period)r   r6   zinitial_period must be inrV   zperiod must be >= 2) r   r>   Zis_dummyr   r   r   r   r3   r.   r   sumr4   r   r    zerosZassert_equalZasarrayr   r@   rA   rB   r-   rC   rD   r   rE   ilocr?   r   rZ   r[   r\   )r3   rT   Zexogr   r   rO   fcastr   r   r   test_seasonality-  s>    


"

. 
,r   c                 C   sF   t | }|jdksJ |jd| d}t| d}tj|j	| d S )Nr   r=   r   )
r   rS   r!   rE   r   _extend_indexr   r   r   r3   )r   rM   r   Znew_idxr   r   r   test_seasonality_time_indexO  s
    
r   c           
      C   s  t ddd}|| }|jdks$J |j| jd d|j fksBJ t| jd d }t|D ]T\}}|d d }|d rtjntj}|dtj	 | | }tj
j|| |dd q^g }	td|j D ]2}|d rd	nd
}|	| d|d d  d qt|j|	ksJ d S )Nr=   rt   )r!   rI   r   r6   r(   g:0yE>)Zatolcossin(r   )r   r>   rI   r   r.   r/   	enumerater   r   pir   assert_allcloser    r0   r4   r   )
r3   r]   termslocr   coljfnr   colsr   r   r   test_fourierX  s    
 r   zbug in old pandas)reasonc                  C   sF   t d} tjtdd t|  W d    n1 s80    Y  d S )N)d   r6   zindex must be a pandasrV   )r.   r   rZ   r[   rr   r   Z_index_like)r   r   r   r   test_index_likej  s    
r   c                    sb  t t jd}t |}d| |d  }d| t j}td  fdd|D }t	|}t
dd	}|jd	kszJ ||}g }td	|j D ]2}|d	 rd
nd}|| d|d	 d  d qt|j|ksJ |d }d	t j |t |  }	g }
tdD ]:}|d	 d }|d	 r(t jnt j}|
|||	  qt |
}
t j|
|j d S )N  rp   r+   Q rz   c                    s   g | ]} t j|d d qS )rT   )Zunitr   Z	Timedeltarh   valbaser   r   rk   w  rl   z)test_calendar_fourier.<locals>.<listcomp>r{   r6   r   r   r   r(   z,freq=D)r   )r.   absrandomstandard_normalcumsumastyper$   r   	Timestampr-   r   rI   r>   r    r0   r4   r   r   Zfloorr   r   column_stackr   r   values)reset_randomstateincoffsetr3   re   r   r   r   r   r   r   Zscaler   r   r   test_calendar_fourierq  s0    




 
r   c                    s  t t jd}t |}d| |d  }d| t j}td  fdd|D }t	|}t
dd	d
 d}|jd
ksJ ||}g d}t|j|ksJ d|d  }g }tdD ]}|||  qt |}t j||j t
dd	d d}t
jdd d}	tj|||	| t
dd	d d}
t
jdd d}tj|
||| t
dd	d d}|jdks~J ||}g d}t|j|ksJ d S )Nr   rp   r+   r   rz   c                    s   g | ]} t |d  qS )rT   r   r   r   r   r   rk     rl   z,test_calendar_time_trend.<locals>.<listcomp>r{   Trt   ru   )r   r   r   trend_cubedr(   r   r6   r9   )r   rb   r:   )r   r   r   r   ztrend**4)r.   r   r   r   r   r   r$   r   r   r-   r	   rI   r>   r4   r   r    r0   r   r   r   r   rL   r   )r   r   r   r3   r9   r   r   r   r   Zctt2r:   rv   Zcttttr   r   r   test_calendar_time_trend  s:    





r   c                  C   sR  d} t jdddd}td| d}||}t|ddksBJ t|jd	 D ]}|j	||d
 f dksPJ qPt jdddd}td| d}||}t|ddksJ t|jd	 D ]}|j	||d f dksJ qt jdddd}td| d}||}t|ddksJ t|jd	 D ]"}|j	||d f dks*J q*d S )Nry   
2000-01-03rx   X  r   r   r   r(   r   r      r   r   r{   rX   
r   r   r   r>   r.   r   r   r    r   r   r!   r3   rn   r   r   r   r   r   test_calendar_seasonal_period_w  s&    


r   c                  C   st   d} t jdddd}td| d}||}t|ddksBJ t|jd	 D ]}|j	||d
 f dksPJ qPd S )Nr{   r   rx   r   r   r   r(   r   r      r   r   r   r   r   test_calendar_seasonal_period_d  s    
r   c                  C   st   d} t jdddd}td| d}||}t|ddksBJ t|jd	 D ]}|j	||d
 f dksPJ qPd S )NQr   r&   r   r   r   r(   r   r   rt   r   r   r   r   r   test_calendar_seasonal_period_q  s    
r   c                  C   s   d} t jdddd}td| d}||}t|ddksBJ t|jd	 D ]}|j	||d
 f dksPJ qPtd| d}||}t|ddksJ t|jd	 D ]"}|j	||d
 d f dksJ qd S )Nr_   r   r&   r   r   r   r(   r   r   r=   r   rt   r   r   r   r   r   test_calendar_seasonal_period_a  s    

r   ra   rI   r(   seasonalfourierr!   rp   dropc           	   	   C   sX   |r|rd S t | ||||||d}| }tj|j|  |d}t|tjsTJ d S )N)ra   rI   r   r   r!   r   r   )	r
   r>   r   r   r   r3   rE   rH   	DataFrame)	r   ra   rI   r   r   r!   r   dpr   r   r   r   test_deterministic_process  s    		
r   c                 C   s   t jtdd  t| dddd W d    n1 s40    Y  t jtdd  t| ddgd	 W d    n1 sr0    Y  d S )
Nzseasonal and fourierrV   Tr6   r   )r   r   r!   zAll additional termsr(   )r   additional_terms)rZ   r[   r\   r
   rr   )r   r   r   r   !test_deterministic_process_errors	  s    .r   c                  C   s^   t g d} t| ddddd}tjtdd |dd W d    n1 sP0    Y  d S )	Nr~   Tr6   ra   rI   r   r!   zThe index in the deterministicrV   r   r=   )r   r-   r
   rZ   r[   rr   r    r   r   r   r   r   test_range_error  s    
r   c                  C   s  t jdddd} t| dddd}|dd	 |dd
 |dd	 |dd |dd |dd tt |dd W d    n1 s0    Y  t jdddd} t| dddd}|dd	 |dd
 |dd	 tjtdd |dd W d    n1 s0    Y  |dd |dd |dd t dd} t| ddddd}|dd |dd |dd |dd tt |dd W d    n1 s0    Y  d S )Nrz   r&   x   r   Tr(   )ra   rI   r   z2001-1-1z2008-1-1z2015-1-1z2013-1-1r   r         z1990-1-1z2010-1-1zstart must be non-negativerV   i   r=   r   i)	r   r   r
   r    rZ   r[   r\   period_ranger,   r   r   r   r   test_range_index_basic  s<    *,
r   c                  C   sr   t d} t| ddddd}tdd} t| ddddd}tj| |  tj|dd|dd d S )	Nr   Tr(   r=   r   r   r   r   )	r.   r/   r
   r   r,   r   r   r>   r    )r   r   dp2r   r   r   test_range_casting=  s    


r   c                  C   sX   t ddd} t| dd}tjtdd |dd	 W d    n1 sJ0    Y  d S )
Nr   i  rX   Tr   zThe step of the index is not 1rV   r   i  )r   r,   r
   rZ   r[   r\   r    r   r   r   r   test_non_unit_rangeJ  s    r   c                 C   s   t dddg}t| |d}t| ddd}tj| |  tjtdd  t| || d W d    n1 sr0    Y  tjtdd  t| dd|d W d    n1 s0    Y  d S )	NTr(   r`   )r   r   z%One or more terms in additional_termsrV   )ra   rI   r   )	r   r
   r   r   r   r>   rZ   r[   r\   )r   Z	add_termsr   r   r   r   r   test_additional_termsQ  s     $r   c                 C   s^   t ddd}t| d|gdd}| jd dks4J t| |gdd}tj| |  d S )NTr(   r   )ra   r   r   r6   r   r   )r   r
   r>   r   r   r   r   )r   rM   r   r   r   r   r   test_drop_two_consantsd  s    
r   r   rz   r&   r   c                 C   s   t tddddd}t | ddd}tj| |  tj|d|d tj|dd|dd tj|dd	|dd	 tj|dd
|dd
 d S )Nr   r   Tr6   r   %      r   r      )	r
   r   r,   r.   r   Zassert_array_equalr>   rE   r    )r3   r   r   r   r   r   test_determintic_term_equivn  s    
r   c                   @   sl   e Zd Zeeedf dddZedddZg dZ	e
je
jdd	d
Zdee
je
je
jdddZdS )	DummyTerm.)returnc                 C   s   dS )N)Dummyr   selfr   r   r   _eq_attr  s    zDummyTerm._eq_attrc                 C   s   dS )Nr   r   r   r   r   r   __str__  s    zDummyTerm.__str__)Zconst1Zconst2Ztrend1Ztrend2Znormal1Znormal2Zdummy1_1Zdummy1_2Zalways_drop1Zalways_drop2Zdummy2_1Zdummy2_2)r3   r   c                 C   s   |j d }t|j d df}tdddD ]}|dkr<d}nr|dkrPt|}n^|dkrftj|}nH|dkrt|}d|d d d< n&|dkrd}nt|}d|dd d< | |d d |f< |d d |d f< q*tj	|| j
|dS )	Nr   r=   r6   r(   r      r   r   r3   )r   r.   r   r    r/   r   r   r   r   r   r   )r   r3   Znobsr   r   valuer   r   r   r>     s$    


&zDummyTerm.in_sampleN)rN   r3   r5   r   c                 C   s0   |  |||}tj|df}tj|| j|dS )Nr=   r   )r   r.   r   r   r   r   r   )r   rN   r3   r5   Zfcast_indexr   r   r   r   rE     s    zDummyTerm.out_of_sample)N)__name__
__module____qualname__propertyr   r   r   rF   r   r   r   r-   r   r>   rJ   rE   r   r   r   r   r     s    r   c                     s   t dd} t }t| |t ks(J t| |gdd}| }|jdksNJ |d}|jdksfJ t	|j
t	|j
ks~J d}|D ]" t fd	d
|D dksJ qd S )Nr   r   Tr   )r   r   r   )r   r   )r   r   dummyZnormalc                    s   g | ]} |v rd qS )r(   r   )rh   r   Z	valid_colr   r   rk     rl   ztest_drop.<locals>.<listcomp>r(   )r   r,   r   rF   r   r
   r>   r   rE   r4   r   r   )r3   r  r   Zin_sampZoosZvalidr   r  r   	test_drop  s    
r  )JZstatsmodels.compat.pandasr   r   Zstatsmodels.compat.pytestr   typingr   r   Znumpyr.   Zpandasr   rZ   Zstatsmodels.tsa.deterministicr   r   r	   r
   r   r   r   r   Zfixturer   r3   r5   ZmarkZsmokerP   rU   r^   rc   rf   Z
_supportedr   itemsZ	cs_paramsZparametrizero   rs   rw   r|   r   r   r   r   r   r   r   r   Zskipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r,   r-   r/   r   r   r   r   r  r   r   r   r   <module>   s   (









	+"	
%

	$

	

8