U
    Kvf_Z                     @   s  d dl mZmZmZ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d	 Zejdd
ddddgddd Zejddddg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/d0 Z/d1d2 Z0d3d4 Z1d5d6 Z2d7d8 Z3d9d: Z4ejj5ed;d<d=d> Z6d?d@ Z7dAdB Z8dCdD Z9dEdF Z:dGdH Z;dIdJ Z<ej(dKdLdgej(dMd dNgej(dOdLdgej(dPd dNgej(dddQgej(dRdLdgdSdT Z=dUdV Z>dWdX Z?dYdZ Z@d[d\ ZAd]d^ ZBd_d` ZCdadb ZDej(deEd dceFeGdcejHdddedcdfejIdddgdcdfgdhdi ZJG djdk dkeZKdldm ZLdS )n    )	MONTH_ENDPD_LT_1_0_0QUARTER_ENDYEAR_ENDis_int_index)pytest_warns)HashableTupleN)CalendarFourierCalendarSeasonalityCalendarTimeTrendDeterministicProcessDeterministicTermFourierSeasonality	TimeTrendmodule)scopec                 C   s   t jddddS )N
2000-01-01iA  Bperiodsfreq)pd
date_range)request r   L/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/tests/test_deterministic.py
time_index   s    r   rangeperioddatetimefibint64)r   paramsc                 C   s   | j }|dkr2tjddt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      r   r    Mr   r   {   r#   r"      q   )paramr   r   r   Z	to_period
RangeIndexIndexnparanger   appendNotImplementedError)r   r,   idxr"   _r   r   r   index!   s     r5   Flistc                 C   s4   t jdddd}| jd krd S | jdkr0t|S |S )Nr   i  r   r   r6   )r   r   r,   r6   )r   r3   r   r   r   forecast_index8   s    

r7   c              	   C   s<  t dd}||  |d kr dnt|}d }t| rHtt| dksjt| tj	krnt
| dkrn|d krnt}t| ||| | W 5 Q R X t| t| t|jtstt|jtstt d|kstt d|kstt d|kstt d	|ks
ttd
|kst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intAssertionErrorZ	_constantboolfrom_stringr   )r5   r7   ttstepswarnZtt0r   r   r   test_time_trend_smokeB   s:    


	


rS   c              	   C   s   t d}||  |d krdnt|}d }t| rFtt| dksht| tj	krlt
| dkrl|d krlt}t| ||| | W 5 Q R X t|jtstt| t| t| tjtjfr| jrt | }||  ||| | t t|  d S )Nr?   r9   r(   r:   )r   r@   rA   r   r/   rB   rC   rD   r   r.   rE   rF   r   rG   rJ   r    rL   rM   rH   rI   DatetimeIndexPeriodIndexr   
from_indexr6   )r5   r7   srQ   rR   r   r   r   test_seasonality_smokeb   s2    

	


rX   c              	   C   s   t dd}||  |d kr dnt|}d }t| rHtt| dksjt| tj	krnt
| dkrn|d krnt}t| ||| | W 5 Q R X t|jtstt|jtstt| t| tjtdd t dd W 5 Q R X d S )	Nr?   r8   r9   r(   r:   z2 \* order must be <= periodmatch   )r   r@   rA   r   r/   rB   rC   rD   r   r.   rE   rF   r   rG   rJ   r    floatrM   rK   rL   rH   rI   pytestraises
ValueError)r5   r7   frQ   rR   r   r   r   test_fourier_smoke~   s.    


	
ra   c                 C   s   t tdd}||  |d kr"dnt|}||| | t| t| t|jt	sXt
t|jtsht
t|jtsxt
|jd kst
d S )Nr8   rK   r9   )r   r   r@   rA   rG   rH   rI   rJ   rK   rL   rM   constantrN   r   base_period)r   r7   r<   rQ   r   r   r   test_calendar_time_trend_smoke   s    
re   c                 C   sr   t td}||  |d kr dnt|}||| | t|jtsFtt|j	t
sVtt
| t| t| d S )Nr8   r9   )r
   r   r@   rA   rG   rJ   rK   rL   rM   r   rH   reprrI   )r   r7   cfrQ   r   r   r   test_calendar_fourier_smoke   s    

rh   c                 C   s&   g | ]\}}|  D ]}||fqqS r   )keys).0kvZk2r   r   r   
<listcomp>   s     
  rm   freq_periodc                 C   s   |\}}t ||}||  |d kr(dnt|}||| | t|jtsNtt|jts^tt| t	| t
| t ||}||kstd S )Nr9   )r   r@   rA   rG   rJ   r    rH   rM   r   rf   rI   )r   r7   rn   r   r    csrQ   Zcs2r   r   r   test_calendar_seasonality   s    


rp   c               	   C   s@   t dd} ttdd}tjtdd ||  W 5 Q R X d S )Nr   
   r8   rb    CalendarTimeTrend terms can onlyrY   )r   r-   r   r   r]   r^   	TypeErrorr@   )r5   r<   r   r   r   test_forbidden_index   s    rt   c                 C   sZ   t tdddd}t tddd}||ks*tt| t| |jd k	sHt|jd ksVtd S )NT   z1960-1-1rK   rd   rb   )r   r   rM   rH   rd   )r   r<   ct2r   r   r   test_calendar_time_trend_base   s    rx   c              	   C   sb   t jtdd tdt W 5 Q R X tdd}t jtdd |tjddd	d
 W 5 Q R X d S )NzThe combination of freq=rY   hr   Wzfreq is B but index contains2000-1-1rq   Dr   )r]   r^   r_   r   r   r@   r   r   )r   ro   r   r   r   test_invalid_freq_period   s
    
r}   c               
   C   s   t tddd} tdd}tjtdd | |tj W 5 Q R X tjtdd | |tjf W 5 Q R X tjtdd | |tjtj	f W 5 Q R X t
dddd	dd
ddg}tjtdd" tjtj	tjf}| || W 5 Q R X d S )NTru   rb   r      rr   rY   r(   r8            )r   r   r   r-   r]   r^   rs   Z_check_index_typerT   rU   r.   )r<   r3   typesr   r   r   test_check_index_type   s    r   c                	   C   s,   t jtdd tdddd W 5 Q R X d S )Nz freq is not understood by pandasrY   unknownTru   rb   )r]   r^   r_   r   r   r   r   r   test_unknown_freq   s    r   c              	   C   s<   t dd}tjtdd |d| td W 5 Q R X d S )N   rb   z!The number of values in forecast_rY   rq      )r   r]   r^   r_   rG   r   r-   )r5   rP   r   r   r   test_invalid_formcast_index   s    
r   c               
   C   s|   t ddddddddg} tt t|  W 5 Q R X t jdd	d
ddddddg } tt t|  W 5 Q R X d S )Nr   r(   r8   ru   r   r   r?   r{   rq   )r   )	r   r.   r]   r^   rs   r   rV   r   r_   )r5   r   r   r   test_seasonal_from_index_err   s    r   c              	   C   s*  t dd}|| }|j| jd dfks,tt|dks>ttj|j	|  d }t
| rntt| dkst| tjkrt| dkrt}t| |d| }W 5 Q R X t|dkstt dd}|| }|j| jd dfkstt ddd	}|| }|j| jd dfkstt|jd
dgks2tt ddd	}|| }tj||gdd}tj|| t ddd	}|| d d }	t| |d| d d }
W 5 Q R X |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rc   r   r(   r:      Fr8   rc   rK   trendtrend_squared)Zaxisi2   )rQ   r5   r7   )Zcheck_index_type)r   r@   shaperM   r/   allr   testingassert_index_equalr5   r   rB   rC   rD   r.   rE   rF   r   rG   r6   columnsconcatassert_frame_equalrJ   rT   r-   )r5   rP   constrR   Zconst_fcastemptyt2finalexpectedshort	remainderdirectZcombinedr   r   r   test_time_trend  sP    








 
 
r   c              	   C   s  t dd}|| }|jst|j| jd dfks6ttj|j|  t	
|ddks^tt|jdd tddD kst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krt| d	krt}t| |jd| d
}W 5 Q R X |jdt| d f dksNtt	
|ddkshtt ddd}|| }|jd dkst|jd  dkst|jdksttjt dd t ddd W 5 Q R X tjt dd t dd W 5 Q R X d S )Nr?   r    r   r(         ?c                 S   s   g | ]}d | dqS )zs(,12)r   )rj   ir   r   r   rm   5  s     z$test_seasonality.<locals>.<listcomp>r   r:   rQ   r5   r[   ru   )r    initial_period)r   r8   zinitial_period must be inrY   zperiod must be >= 2)!r   r@   Zis_dummyrM   r   r   r   r   r5   r/   r   sumr6   r   r   zerosZassert_equalZasarrayr   rB   rC   rD   r.   rE   rF   r   rG   ilocrA   r   r]   r^   r_   )r5   rW   Zexogr   r   rR   fcastr   r   r   test_seasonality.  s>    


"

 
r   c                 C   sF   t | }|jdkst|jd| d}t| d}tj	|j
| d S )Nr   r?   r   )r   rV   r    rM   rG   r   _extend_indexr   r   r   r5   )r   rP   r   Znew_idxr   r   r   test_seasonality_time_indexP  s
    
r   c           
      C   s  t ddd}|| }|jdks$t|j| jd d|j fksBt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td S )Nr?   ru   )r    rK   r   r8   r(   g:0yE>)Zatolcossin(r   )r   r@   rK   rM   r   r/   r0   	enumerater   r   pir   assert_allcloser   r1   r6   r   )
r5   r`   termslocr   coljfnr   colsr   r   r   test_fourierY  s    
 r   zbug in old pandas)reasonc               	   C   s2   t d} tjtdd t|  W 5 Q R X d S )N)d   r8   zindex must be a pandasrY   )r/   r   r]   r^   rs   r   Z_index_like)r3   r   r   r   test_index_likek  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szt||}g }td	|j D ]2}|d	 rd
nd}|| d|d	 d  d qt|j|kst|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  rq   r+   Q r{   c                    s   g | ]} t j|d d qS )rW   )unitr   Z	Timedeltarj   valbaser   r   rm   x  s     z)test_calendar_fourier.<locals>.<listcomp>r|   r8   r   r   r   r(   z,freq=D)r   )r/   absrandomstandard_normalcumsumastyper#   r   	Timestampr.   r
   rK   rM   r@   r   r1   r6   r   r   floorr   r   column_stackr   r   values)reset_randomstateincoffsetr5   rg   r   r   r   r   r   r   Zscaler   r   r   test_calendar_fourierr  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st||}ddddg}t|j|kst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st||}dddddg}t|j|kstd S )Nr   rq   r+   r   r{   c                    s   g | ]} t |d  qS )rW   r   r   r   r   r   rm     s     z,test_calendar_time_trend.<locals>.<listcomp>r|   Tru   rv   r   r   r   Ztrend_cubedr(   r   r8   r;   )r   rd   r<   ztrend**4)r/   r   r   r   r   r   r#   r   r   r.   r   rK   rM   r@   r6   r   r   r1   r   r   r   r   rO   r   )r   r   r   r5   r;   r   r   r   r   Zctt2r<   rw   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sBtt|j	d	 D ]}|j
||d
 f dksPtqPt jdddd}td| d}||}t|ddkstt|j	d	 D ]}|j
||d f dkstqt jdddd}td| d}||}t|ddkstt|j	d	 D ]"}|j
||d f dks*tq*d S )Nrz   
2000-01-03ry   X  r   r   r   r(   r   r      r   r   r|   r[   r   r   r   r@   r/   r   r   rM   r   r   r   r    r5   ro   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sBtt|j	d	 D ]}|j
||d
 f dksPtqPd S )Nr|   r   ry   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tdd}tt| d}||}t|ddksBtt	|j
d D ]}|j||d	 f dksPtqPd S )
NQr   r   r   r   r(   r   r   ru   )r   r   r   r   r@   r/   r   r   rM   r   r   r   r   r   r   r   test_calendar_seasonal_period_q  s    
r   c                  C   s   d} t jdtdd}tt| d}||}t|ddksBtt	|j
d D ]}|j||d	 f dksPtqPtt| d}||}t|ddkstt	|j
d D ]"}|j||d	 d
 f dkstqd S )NYr   r   r   r   r(   r   r   r?   ru   )r   r   r   r   r@   r/   r   r   rM   r   r   r   r   r   r   r   r   test_calendar_seasonal_period_a  s    

r   rc   TrK   r(   seasonalfourierrq   dropc           	   	   C   sX   |r|rd S t | ||||||d}| }tj|j|  |d}t|tjsTt	d S )N)rc   rK   r   r   r    r   r   )
r   r@   r   r   r   r5   rG   rJ   	DataFramerM   )	r   rc   rK   r   r   r    r   dpr   r   r   r   test_deterministic_process  s    		
r   c              	   C   sX   t jtdd t| dddd W 5 Q R X t jtdd t| ddgd	 W 5 Q R X d S )
Nzseasonal and fourierrY   Tr8   r   )r   r   r    zAll additional termsr(   )r   additional_terms)r]   r^   r_   r   rs   )r   r   r   r   !test_deterministic_process_errors
  s    r   c               
   C   sV   t ddddddddg} t| ddddd	}tjtd
d |dd W 5 Q R X d S )Nr   r(   r8   ru   r   r   r   Trc   rK   r   r    zThe index in the deterministicrY   r?   )r   r.   r   r]   r^   rs   r   r3   r   r   r   r   test_range_error  s        r   c               	   C   s  t jdtdd} t| dddd}|dd |dd	 |d
d |dd |dd |dd tt |dd W 5 Q R X 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 5 Q R X |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 5 Q R X d S )Nr{   x   r   Tr(   )rc   rK   r   z2001-1-1z2008-1-1z2015-1-1z2013-1-1r   r         z1990-1-1z2010-1-1r&   zstart must be non-negativerY   i   r?   r   i)
r   r   r   r   r   r]   r^   r_   period_ranger-   r   r   r   r   test_range_index_basic  sD        r   c                  C   sz   t dt j} 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/   r0   r   r#   r   r   r-   r   r   r@   r   )r3   r   dp2r   r   r   test_range_casting>  s$            r   c               	   C   sD   t ddd} t| dd}tjtdd |dd	 W 5 Q R X d S )
Nr   i  r[   Tr   zThe step of the index is not 1rY   r   i  )r   r-   r   r]   r^   r_   r   r   r   r   r   test_non_unit_rangeK  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 5 Q R X tjtdd t| dd|d W 5 Q R X d S )	NTr(   rb   )r   r   z%One or more terms in additional_termsrY   )rc   rK   r   )	r   r   r   r   r   r@   r]   r^   r_   )r   Z	add_termsr   r   r   r   r   test_additional_termsR  s,          r   c                 C   s^   t ddd}t| d|gdd}| jd dks4tt| |gdd}tj| |  d S )NTr(   r   )rc   r   r   r8   r   r   )r   r   r@   r   rM   r   r   r   )r   rP   r   r   r   r   r   test_drop_two_consantse  s       r   r   r{   ZMSr   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   Tr8   r   %      r   r      )	r   r   r-   r/   r   Zassert_array_equalr@   rG   r   )r5   r   r   r   r   r   test_determintic_term_equivo  s    
r   c                   @   s   e Zd Zeeedf dddZedddZddd	d
ddddddddg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)r5   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?   r8   r(   r      r   r   r5   )r   r/   r   r   r0   r   r   r   r   r   r   )r   r5   Znobsr   r   valuer   r   r   r@     s$    


&zDummyTerm.in_sampleN)rQ   r5   r7   r   c                 C   s0   |  |||}tj|df}tj|| j|dS )Nr?   r  )r   r/   r   r   r   r   r   )r   rQ   r5   r7   Zfcast_indexr   r   r   r   rG     s    zDummyTerm.out_of_sample)N)__name__
__module____qualname__propertyr	   r   r  rH   r  r   r   r.   r   r@   rL   rG   r   r   r   r   r     s0    r   c                     s   t dd} t }t| |t ks(tt| |gdd}| }|jdksNt|	d}|jdksftt
|jt
|jks~td}|D ]" t fd	d
|D dkstqd S )Nr   r   Tr   )r   r   r   )r   r   )r   r   dummynormalc                    s   g | ]} |krd qS )r(   r   )rj   r   Z	valid_colr   r   rm     s      ztest_drop.<locals>.<listcomp>r(   )r   r-   r   rH   r   rM   r   r@   r   rG   r6   r   r   )r5   r
  r   Zin_sampZoosZvalidr   r  r   	test_drop  s    
r  )MZstatsmodels.compat.pandasr   r   r   r   r   Zstatsmodels.compat.pytestr   typingr   r	   Znumpyr/   Zpandasr   r]   Zstatsmodels.tsa.deterministicr
   r   r   r   r   r   r   r   Zfixturer   r5   r7   markZsmokerS   rX   ra   re   rh   Z
_supportedr$   itemsZ	cs_paramsZparametrizerp   rt   rx   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.   r0   r   r   r   r   r  r   r   r   r   <module>   s   (

 

	






	+"	
%

	$

	

8