U
    *ifm:                     @   s   d dl Zd dlZd dlmZmZmZ d dlmZ d dl	m
  mZ d dlmZmZmZmZ d dlmZ d dlmZ ejje oe pe ddZedejd	G d
d dZedG dd dZeddd Zeddd Zedejj ejd	G dd dZ!dS )    N)is_ci_environmentis_platform_macis_platform_windows)NumbaUtilError)	DataFrameSeriesoption_contextto_datetime)NUMBA_FUNC_CACHEzbOn Azure CI, Windows can fail with 'Windows fatal exception: stack overflow' and MacOS can timeout)reasonnumbazignore:
c                   @   s   e Zd Zejdddgdd Zejdee	de
eddd	gd
d Zejdee	de
eddd	gdd Zejdddgdd Zejdddddgdi ggdd ZdS )
TestEnginejitTFc                 C   s   dd }|rdd l }||}|||d}d}	ttd}
|
jd|dj||	d	|d
d}|
jd|dj|d|	d
d}t|| d S )Nc                 W   s$   d}|D ]}||7 }qt | | S )Nr   npmean)xargsZarg_sumarg r   Q/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/window/test_numba.pyf$   s    
z0TestEngine.test_numba_vs_cython_apply.<locals>.fr   nogilparallelnopython   
   r   )centerr   T)r   engineengine_kwargsrawcython)r    r   r"   )r   r   r   rangerollingapplytmassert_series_equal)selfr   r   r   r   r   r   r   r!   r   sresultexpectedr   r   r   test_numba_vs_cython_apply"   s*    
       z%TestEngine.test_numba_vs_cython_applydata   foo)namec                 C   s   |\}}|||d}| d}	t|	|f d|d|}
t|	|f ddi|}|dkrtttd| d	ftksttt|
| d S )
Nr   r   r   r    r!   r    r#   r   sumvarstdmaxminnanRolling_apply_single)r%   getattrr   r
   AssertionErrorr'   assert_equal)r)   r.   r   r   r   $arithmetic_numba_supported_operatorsmethodkwargsr!   rollr+   r,   r   r   r   $test_numba_vs_cython_rolling_methods;   s"    

 z/TestEngine.test_numba_vs_cython_rolling_methodsc                 C   s   |\}}|||d}t td}| }	t|	|f d|d|}
t|	|f ddi|}|dkrttd| d	ftkstt|
| d S )
Nr   r/   r   r2   r    r#   r3   r9   ZExpanding_apply_single)	r   r   eye	expandingr;   r
   r<   r'   r=   )r)   r.   r   r   r   r>   r?   r@   r!   expandr+   r,   r   r   r   &test_numba_vs_cython_expanding_methodsU   s$    
 z1TestEngine.test_numba_vs_cython_expanding_methodsc                 C   s   dd }dd }|r0dd l }||}||}|||d}ttdd}	|	j|d	|d
d}
|	j|dd
d}t|
| |dftkst	|	j|d	|d
d}
|	j|dd
d}t|
| |	j|d	|d
d}
|	j|dd
d}t|
| d S )Nc                 S   s   t | d S )N   r   r   r   r   r   func_1s   s    z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t | d S )Nr/   )r   r6   rH   r   r   r   func_2v   s    z+TestEngine.test_cache_apply.<locals>.func_2r   r   r   r   r   T)r    r!   r"   r#   r    r"   r:   )
r   r   r   r$   r%   r&   r'   r(   r
   r<   )r)   r   r   r   r   rI   rJ   r   r!   rA   r+   r,   r   r   r   test_cache_applyp   sB    

         zTestEngine.test_cache_applyzwindow,window_kwargsr%      r   )windowmin_periodsrD   c                 C   s   dd }|||d}t ddddgi}	t|	|f d|i|j|dd|d	d
}
t ddddgi}t|
| t|	|f d|i|j|dd|dd
}
t ddddgi}t|
| d S )Nc                 S   s   t | | S Nr   r4   )valuesr   r   r   r   add   s    z,TestEngine.test_dont_cache_args.<locals>.add)r   r   r   valuer   r?   Tr   )   )r"   r    r!   r         ?r          @)r   r;   r&   r'   assert_frame_equal)r)   rN   Zwindow_kwargsr   r   r   r?   rS   r!   dfr+   r,   r   r   r   test_dont_cache_args   s*            zTestEngine.test_dont_cache_argsN)__name__
__module____qualname__pytestmarkparametrizer-   r   r   rC   r   r$   rB   rF   rL   rZ   r   r   r   r   r      s*   
 
 

&r   c                   @   s   e Zd Zejjddd dd gddgdejdd	d
gdd Zejjddd dd gddgdejdd	d
gdd Zejdddgejdd	d
gdd Zejdddgdd Z	dS )TestEWMgrouperc                 C   s   | S rP   r   rH   r   r   r   <lambda>       zTestEWM.<lambda>c                 C   s
   |  dS NAgroupbyrH   r   r   r   rc      rd   Nonerh   )Zidsr?   r   r4   c              	   C   sT   t ddddgtdd}tjtdd" t||jdd|d	d
 W 5 Q R X d S )NabrG   rf   Bzengine must be eithermatchrV   comr0   r    r   r$   r^   raises
ValueErrorr;   ewmr)   rb   r?   rY   r   r   r   test_invalid_engine   s    zTestEWM.test_invalid_enginec                 C   s   | S rP   r   rH   r   r   r   rc      rd   c                 C   s
   |  dS re   rg   rH   r   r   r   rc      rd   c              	   C   sZ   t ddddgtdd}tjtdd( t||jdd|d	d
did W 5 Q R X d S )Nrj   rk   rG   rl   zcython engine does notrn   rV   rp   r#   r   Tr2   rs   rw   r   r   r   test_invalid_engine_kwargs   s     z"TestEWM.test_invalid_engine_kwargsc              	   C   s   |dkrdd }t }ndd }d }|dkr.d}tddddgtd	d
}	||	jd||d}
|||d}tj|dd( t|
|d|d}t|
|dd}W 5 Q R X t|| d S )Nri   c                 S   s   | S rP   r   rH   r   r   r   rc      rd   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>c                 S   s
   |  dS re   rg   rH   r   r   r   rc      rd   r4   Trj   rk   rG   rl   rV   )rq   adjust	ignore_nar   nuisancern   r   r2   r#   rr   )FutureWarningr   r$   rv   r'   assert_produces_warningr;   rX   )r)   rb   r?   r   r   r   r{   rz   warnrY   rv   r!   r+   r,   r   r   r   test_cython_vs_numba   s    zTestEWM.test_cython_vs_numbac              	   C   s   |dkrdd }t }ndd }d }d}tddddd	d
g}tddddddgddddddgd}	||	j|d||d}
|||d}tj|dd  |
jd|d}|
jdd}W 5 Q R X t|| d S )Nri   c                 S   s   | S rP   r   rH   r   r   r   rc      rd   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   s
   |  dS re   rg   rH   r   r   r   rc      rd   z23 daysz
2020-01-01z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03rj   rk   r   rU   r   rl   T)halfliferz   r{   timesr   r|   rn   r   r2   r#   rr   )r}   r	   r   rv   r'   r~   r   rX   )r)   rb   r   r   r   r{   r   r   r   rY   rv   r!   r+   r,   r   r   r   test_cython_vs_numba_times   s6    
&   z"TestEWM.test_cython_vs_numba_timesN)
r[   r\   r]   r^   r_   r`   rx   ry   r   r   r   r   r   r   ra      s&       ra   c               	   C   sf   dd } t td}tdd |dj| d dd}W 5 Q R X |dj| ddd}t|| d S )	Nc                 S   s   t | d S )Nr   r   rH   r   r   r   r   
  s    z!test_use_global_config.<locals>.fr   zcompute.use_numbaTr   rK   r   )r   r$   r   r%   r&   r'   r(   )r   r*   r+   r,   r   r   r   test_use_global_config  s     r   c                	   C   sF   t jtdd. ttddjdd ddiddd	 W 5 Q R X d S )
Nz"numba does not support kwargs withrn   rU   c                 S   s   | S rP   r   rH   r   r   r   rc     rd   z.test_invalid_kwargs_nopython.<locals>.<lambda>rj   r   T)r@   r    r"   )r^   rt   r   r   r$   r%   r&   r   r   r   r   test_invalid_kwargs_nopython  s       r   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dedededge	j
dddgdd ZdS )TestTableMethodc              	   C   sH   dd }t jtdd( ttdjdddj|dd	d
 W 5 Q R X d S )Nc                 S   s   t j| ddd S Nr   axisrU   rQ   rH   r   r   r   r   "  s    z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.rn   rU   table)r?   r   TrK   )r^   rt   ru   r   r$   r%   r&   )r)   r   r   r   r   test_table_series_valueerror!  s       z,TestTableMethod.test_table_series_valueerrorc              	   C   s   |\}}|||d}t td}	|	jdd|dd}
|dkrxtjt| dd	  t|
|f |d
d| W 5 Q R X nR|	jdd|dd}t|
|f |d
d|}t||f |d
d|}t	|| d S )Nr   rM   r   r   r   r?   r   rO   r5   r6    not supportedrn   r   r!   r    single)
r   r   rC   r%   r^   rt   NotImplementedErrorr;   r'   rX   )r)   r   r   r   r   r>   r?   r@   r!   rY   Z
roll_tableZroll_singler+   r,   r   r   r   !test_table_method_rolling_methods,  s4    
 
 
 z1TestTableMethod.test_table_method_rolling_methodsc           
      C   sr   |||d}dd }t td}|jdd|ddj|d	|d
d}|jdd|ddj|d	|d
d}	t||	 d S )Nr   c                 S   s   t j| ddd S r   rQ   rH   r   r   r   r   G  s    z:TestTableMethod.test_table_method_rolling_apply.<locals>.frM   r   r   r   r   Tr   r"   r!   r    r   )r   r   rC   r%   r&   r'   rX   
r)   r   r   r   r   r!   r   rY   r+   r,   r   r   r   test_table_method_rolling_applyD  s           z/TestTableMethod.test_table_method_rolling_applyc                 C   s   dd }t dddgdddgddd	gdd
dgg}|jddddj|ddd}t dddgdddgdddgdddgg}t|| d S )Nc                 S   sh   t d| jd f}| d d d df | d d df  jdd| d d df   |d d d df< |S )NrU   r   r   r   )r   onesshaper4   )r   Zarrr   r   r   weighted_meanT  s    PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_meanrU   r   g333333?rM   g?rG   g?r/   gffffff?r   r   )r?   rO   Tr   )r"   r    rV   rW   g?gk}
@gk}@g1?   )r   r%   r&   r'   rX   )r)   r   rY   r+   r,   r   r   r   'test_table_method_rolling_weighted_meanS  s    (  z7TestTableMethod.test_table_method_rolling_weighted_meanc           
      C   sj   |||d}dd }t td}|jd|dj|d|dd	}|jd
|dj|d|dd	}	t||	 d S )Nr   c                 S   s   t j| ddd S r   rQ   rH   r   r   r   r   j  s    z<TestTableMethod.test_table_method_expanding_apply.<locals>.frM   r   r?   r   Tr   r   r   )r   r   rC   rD   r&   r'   rX   r   r   r   r   !test_table_method_expanding_applyg  s           z1TestTableMethod.test_table_method_expanding_applyc              	   C   s   |\}}|||d}t td}	|	jd|d}
|dkrttjt| dd  t|
|f |dd	| W 5 Q R X nN|	jd
|d}t|
|f |dd	|}t||f |dd	|}t	|| d S )Nr   rM   r   r   r   r   rn   r   r   r   )
r   r   rC   rD   r^   rt   r   r;   r'   rX   )r)   r   r   r   r   r>   r?   r@   r!   rY   Zexpand_tableZexpand_singler+   r,   r   r   r   #test_table_method_expanding_methodsv  s4    
 
 
 z3TestTableMethod.test_table_method_expanding_methodsr.   rM   )r   rM   )rM   r   r?   r   r4   c                 C   s`   |||d}t |}t|jdd|d||dd}	t|jdd|d||dd}
t|	|
 d S )Nr   rU   r   )rq   r?   r   r   r   r   )r   r;   rv   r'   rX   )r)   r.   r?   r   r   r   r   r!   rY   r+   r,   r   r   r   test_table_method_ewm  s      z%TestTableMethod.test_table_method_ewmN)r[   r\   r]   r   r   r   r   r   r   r^   r_   r`   r   rC   r   r   r   r   r   r   r     s   $r   )"numpyr   r^   Zpandas.compatr   r   r   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r	   Zpandas._testingZ_testingr'   Zpandas.core.util.numba_r
   r_   ZskipifZ
pytestmarkZ
skip_if_nofilterwarningsr   ra   r   r   Zslowr   r   r   r   r   <module>   s2   
 R


