U
    mdZ                     @   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dddddgd	dd Zejd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 Z-d3d4 Z.d5d6 Z/d7d8 Z0d9d: Z1ejj2ed;d<d=d> Z3d?d@ Z4dAdB Z5dCdD Z6dEdF Z7dGdH Z8dIdJ Z9ej%dKddgej%dLd dMgej%dNddgej%dOd dMgej%dddPgej%dQddgdRdS Z:dTdU Z;dVdW Z<dXdY Z=dZd[ Z>d\d] Z?d^d_ Z@d`da ZAej%deBd dbeCe	DdbejEdcdddbdeejFdcdddbdegdfdg ZGG dhdi dieZHdjdk ZIdS )l    )PD_LT_1_0_0is_int_index)pytest_warns)HashableTupleN)CalendarFourierCalendarSeasonalityCalendarTimeTrendDeterministicProcessDeterministicTermFourierSeasonality	TimeTrendmoduleTF)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   a/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/tests/test_deterministic.py
time_index   s    
r    rangeperioddatetimefibint64c                 C   s   | j }|dk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     r4   listc                 C   sH   t jdddd}| jd krd S | jdkr2|dS | jdkrDt|S |S )Nr   i  r   r   r"   r5   )r   r   r   r   r5   r   r   r   r   forecast_index5   s    



r6   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   )r4   r6   ttstepswarnZtt0r   r   r   test_time_trend_smokeA   s:    


	


rR   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>   r8   r)   r9   )r   r?   r@   r   r/   rA   rB   rC   r   r.   rD   rE   r   rF   rI   r"   rK   rL   rG   rH   DatetimeIndexPeriodIndexr   
from_indexr5   )r4   r6   srP   rQ   r   r   r   test_seasonality_smokea   s2    

	


rW   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>   r7   r8   r)   r9   z2 \* order must be <= periodmatch   )r   r?   r@   r   r/   rA   rB   rC   r   r.   rD   rE   r   rF   rI   r"   floatrL   rJ   rK   rG   rH   pytestraises
ValueError)r4   r6   frP   rQ   r   r   r   test_fourier_smoke}   s.    


	
r`   c                 C   s   t d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 )NAr7   rJ   r8   )r	   r?   r@   rF   rG   rH   rI   rJ   rK   rL   constantrM   r   base_period)r    r6   r;   rP   r   r   r   test_calendar_time_trend_smoke   s    
re   c                 C   sr   t dd}||  |d kr dnt|}||| | t|jtsFtt|jt	sVtt	| t
| t| d S )Nra   r7   r8   )r   r?   r@   rF   rI   rJ   rK   rL   r   rG   reprrH   )r    r6   cfrP   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 )Nr8   )r   r?   r@   rF   rI   r"   rG   rL   r   rf   rH   )r    r6   rn   r   r"   csrP   Zcs2r   r   r   test_calendar_seasonality   s    


rp   c               	   C   s@   t dd} tddd}tjtdd ||  W 5 Q R X d S )Nr   
   ra   r7   rb    CalendarTimeTrend terms can onlyrX   )r   r-   r	   r\   r]   	TypeErrorr?   )r4   r;   r   r   r   test_forbidden_index   s    rt   c                 C   sZ   t ddddd}t dddd}||ks*tt| t| |jd k	sHt|jd ksVtd S )Nr'   T   z1960-1-1rJ   rd   rb   )r	   rL   rG   rd   )r    r;   ct2r   r   r   test_calendar_time_trend_base   s    rx   c              	   C   sb   t jtdd tdd 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=rX   Hra   r   Wzfreq is B but index contains2000-1-1rq   Dr   )r\   r]   r^   r   r?   r   r   )r    ro   r   r   r   test_invalid_freq_period   s
    
r}   c               
   C   s   t d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 )Nra   Tru   rb   r      rr   rX   r)   r7            )
r	   r   r-   r\   r]   rs   Z_check_index_typerS   rT   r.   )r;   r   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 pandasrX   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_rX   rq      )r   r\   r]   r^   rF   r   r-   )r4   rO   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)   r7   ru   r   r   r>   r{   rq   )r   )	r   r.   r\   r]   rs   r   rU   r   r^   )r4   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)   r9      Fr7   rc   rJ   trendtrend_squared)Zaxisi2   )rP   r4   r6   )Zcheck_index_type)r   r?   shaperL   r/   allr   testingassert_index_equalr4   r   rA   rB   rC   r.   rD   rE   r   rF   r5   columnsconcatassert_frame_equalrI   rS   r-   )r4   rO   constrQ   Zconst_fcastemptyt2finalexpectedshort	remainderdirect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   4  s     z$test_seasonality.<locals>.<listcomp>r   r9   rP   r4   rZ   ru   )r"   initial_period)r   r7   zinitial_period must be inrX   zperiod must be >= 2)!r   r?   Zis_dummyrL   r   r   r   r   r4   r/   r   sumr5   r   r!   zerosZassert_equalZasarrayr   rA   rB   rC   r.   rD   rE   r   rF   ilocr@   r   r\   r]   r^   )r4   rV   Zexogr   r   rQ   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   rU   r"   rL   rF   r   _extend_indexr   r   r   r4   )r    rO   r   Znew_idxr   r   r   test_seasonality_time_indexO  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"   rJ   r   r7   r)   g:0yE>)Zatolcossin(r   )r   r?   rJ   rL   r   r/   r0   	enumerater   r   pir   assert_allcloser!   r1   r5   r   )
r4   r_   termslocr   coljfnr   colsr   r   r   test_fourierX  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   r7   zindex must be a pandasrX   )r/   r   r\   r]   rs   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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 )rV   )unitr   Z	Timedeltarj   valbaser   r   rm   w  s     z)test_calendar_fourier.<locals>.<listcomp>r|   r7   r   r   r   r)   z,freq=D)r   )r/   absrandomstandard_normalcumsumastyper%   r   	Timestampr.   r   rJ   rL   r?   r!   r1   r5   r   r   floorr   r   column_stackr   r   values)reset_randomstateincoffsetr4   rg   r   r   r   r   r   r   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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 )rV   r   r   r   r   r   rm     s     z,test_calendar_time_trend.<locals>.<listcomp>r|   Tru   rv   r   r   r   Ztrend_cubedr)   r   r7   r:   )r   rd   r;   ztrend**4)r/   r   r   r   r   r   r%   r   r   r.   r	   rJ   rL   r?   r5   r   r!   r1   r   r   r   r   rN   r   )r   r   r   r4   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|   rZ   r   r   r   r?   r/   r   r   rL   r!   r   r   r"   r4   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ddd}td| 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   r   ru   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sBtt|j	d	 D ]}|j
||d
 f dksPtqPtd| d}||}t|ddkstt|j	d	 D ]"}|j
||d
 d f dkstqd S )Nra   r   r'   r   r   r   r)   r   r   r>   r   ru   r   r   r   r   r   test_calendar_seasonal_period_a  s    

r   rc   rJ   r)   seasonalfourierrq   dropc           	   	   C   sX   |r|rd S t | ||||||d}| }tj|j|  |d}t|tjsTt	d S )N)rc   rJ   r   r   r"   r   r   )
r
   r?   r   r   r   r4   rF   rI   	DataFramerL   )	r    rc   rJ   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 fourierrX   Tr7   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)   r7   ru   r   r   r   Trc   rJ   r   r"   zThe index in the deterministicrX   r>   )r   r.   r
   r\   r]   rs   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 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{   r'   x   r   Tr)   )rc   rJ   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-negativerX   i   r>   r   i)	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!   )r   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  rZ   Tr   zThe step of the index is not 1rX   r   i  )r   r-   r
   r\   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 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_termsrX   )rc   rJ   r   )	r   r
   r   r   r   r?   r\   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s4tt| |gdd}tj| |  d S )NTr)   r   )rc   r   r   r7   r   r   )r   r
   r?   r   rL   r   r   r   )r    rO   r   r   r   r   r   test_drop_two_consantsd  s       r   r   r{   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   Tr7   r   %      r   r      )	r
   r   r-   r/   r   Zassert_array_equalr?   rF   r!   )r4   r   r   r   r   r   test_determintic_term_equivn  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)r4   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>   r7   r)   r      r   r   r4   )r   r/   r   r!   r0   r   r   r   r   r   r   )r  r4   Znobsr   r   valuer   r   r   r?     s$    


&zDummyTerm.in_sampleN)rP   r4   r6   r   c                 C   s0   |  |||}tj|df}tj|| j|dS )Nr>   r  )r   r/   r   r   r   r   r   )r  rP   r4   r6   Zfcast_indexr   r   r   r   rF     s    zDummyTerm.out_of_sample)N)__name__
__module____qualname__propertyr   r   r  rG   r  r   r   r.   r   r?   rK   rF   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   rG   r   rL   r
   r?   r   rF   r5   r   r   )r4   r  r   Zin_sampZoosZvalidr   r  r   	test_drop  s    
r  )JZstatsmodels.compat.pandasr   r   Zstatsmodels.compat.pytestr   typingr   r   numpyr/   Zpandasr   r\   Zstatsmodels.tsa.deterministicr   r   r	   r
   r   r   r   r   Zfixturer    r4   r6   markZsmokerR   rW   r`   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