U
    sVcK@                     @   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 ejje o|e p|e ddZejddgd	d
d Zejdi gdi gdi gdi gdi gdi gddd igdi gddd igg	d	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_datetimez`On GHA CI, Windows can fail with 'Windows fatal exception: stack overflow' and MacOS can timeout)reasonsingletable)paramsc                 C   s   | j S )z3method keyword in rolling/expanding/ewm constructorparamrequest r   B/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/window/test_numba.pymethod   s    r   summeanZmedianmaxminvarZddofstdc                 C   s   | j S Nr   r   r   r   r   $arithmetic_numba_supported_operators#   s    r   numbaignorec                   @   sV  e Zd Zejdddgdd Zejdee	deddddej
ejd	d
d
d
g
ddddej
ejdd
d
d
g
ej
ej
ddddddddg
gjeedddedddejdddd
gedddej
dddd
g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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   npr   )xargsZarg_sumargr   r   r   f:   s    
z0TestEngine.test_numba_vs_cython_apply.<locals>.fr   nogilparallelnopython   
   r,   )centerstepr   T)r$   engineengine_kwargsrawcython)r0   r$   r2   r   r    r   rangerollingapplytmassert_series_equal)selfr    r(   r)   r*   r.   r/   r&   r   r1   r$   sresultexpectedr   r   r   test_numba_vs_cython_apply8   s*    
       z%TestEngine.test_numba_vs_cython_applydata               foo)name   r-      r,   c                 C   sd   |\}}|||d}	|j d|d}
t|
|f d|	d|}t|
|f ddi|}t|| d S )Nr'   rC   r/   r   r0   r1   r0   r3   )r6   getattrr8   assert_equal)r:   r?   r(   r)   r*   r   r/   r   kwargsr1   rollr<   r=   r   r   r   $test_numba_vs_cython_rolling_methodsQ   s    
 z/TestEngine.test_numba_vs_cython_rolling_methodsc                 C   sl   |\}}|||d}t td}| }	t|	|f d|d|}
t|	|f ddi|}t|
| d S )Nr'   r@   r   rJ   r0   r3   )r   r"   eye	expandingrK   r8   rL   )r:   r?   r(   r)   r*   r   r   rM   r1   expandr<   r=   r   r   r   &test_numba_vs_cython_expanding_methodsv   s    
 z1TestEngine.test_numba_vs_cython_expanding_methodsc                 C   s   dd }dd }|r0dd l }||}||}|||d}	ttdjd|d	}
|
j|d
|	dd}|
j|ddd}t|| |
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 )NrB   r!   r#   r   r   r   func_1   s    z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t | d S )Nr@   )r"   r   rT   r   r   r   func_2   s    z+TestEngine.test_cache_apply.<locals>.func_2r   r'   r-   r,   rI   r   T)r0   r1   r2   r3   r0   r2   r4   )r:   r    r(   r)   r*   r/   rU   rV   r   r1   rN   r<   r=   r   r   r   test_cache_apply   s@    

         zTestEngine.test_cache_applyzwindow,window_kwargsr6   r   )windowmin_periodsrQ   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 r   r"   r   )valuesr#   r   r   r   add   s    z,TestEngine.test_dont_cache_args.<locals>.addr*   r(   r)   valuer   r   Tr   )rH   )r2   r0   r1   r$         ?r+          @)r   rK   r7   r8   assert_frame_equal)r:   rY   Zwindow_kwargsr(   r)   r*   r   r]   r1   dfr<   r=   r   r   r   test_dont_cache_args   s*            zTestEngine.test_dont_cache_argsc                    s   d dd fdd} d}t ddddgi}|dj|dd	|d
}t ddddgi}t|| d d}|dj|dd	|d
}t ddddgi}t|| d S )NFTc                    s      S r   r   rT   r(   r*   r)   r   r   func   s    z6TestEngine.test_dont_cache_engine_kwargs.<locals>.funcr^   r_   r   rH   r   )r2   r0   r1   ra   r`   r   r6   r7   r8   rb   )r:   rf   r1   rc   r<   r=   r   re   r   test_dont_cache_engine_kwargs   s0    
   
   z(TestEngine.test_dont_cache_engine_kwargsN)__name__
__module____qualname__pytestmarkparametrizer>   r   r"   rP   naninfTr   r5   rO   rS   rX   rd   rh   r   r   r   r   r   4   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 r   r   rT   r   r   r   <lambda>       zTestEWM.<lambda>c                 C   s
   |  dS NAgroupbyrT   r   r   r   rt      ru   Nonery   )idsr   r   r   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brB   rw   Bzengine must be eithermatchr`   comrE   r0   r   r5   rl   raises
ValueErrorrK   ewmr:   rs   r   rc   r   r   r   test_invalid_engine   s    zTestEWM.test_invalid_enginec                 C   s   | S r   r   rT   r   r   r   rt      ru   c                 C   s
   |  dS rv   rx   rT   r   r   r   rt      ru   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 )Nr|   r}   rB   r~   zcython engine does notr   r`   r   r3   r*   TrJ   r   r   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 )Nrz   c                 S   s   | S r   r   rT   r   r   r   rt     ru   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>c                 S   s
   |  dS rv   rx   rT   r   r   r   rt     ru   r   Tr|   r}   rB   r~   r`   )r   adjust	ignore_nar'   nuisancer   r   rJ   r3   r   )FutureWarningr   r5   r   r8   assert_produces_warningrK   rb   )r:   rs   r   r(   r)   r*   r   r   warnrc   r   r1   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 )Nrz   c                 S   s   | S r   r   rT   r   r   r   rt     ru   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   s
   |  dS rv   rx   rT   r   r   r   rt     ru   z23 daysz
2020-01-01z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03r|   r}   r   rH   r,   r~   T)halflifer   r   timesr'   r   r   r   rJ   r3   r   )r   r	   r   r   r8   r   r   rb   )r:   rs   r(   r)   r*   r   r   r   r   rc   r   r1   r<   r=   r   r   r   test_cython_vs_numba_times  s6    
&   z"TestEWM.test_cython_vs_numba_timesN)
ri   rj   rk   rl   rm   rn   r   r   r   r   r   r   r   r   rr      s&       rr   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!   rT   r   r   r   r&   :  s    z!test_use_global_config.<locals>.fr-   zcompute.use_numbaTr,   rW   r   )r   r5   r   r6   r7   r8   r9   )r&   r;   r<   r=   r   r   r   test_use_global_config8  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 withr   rH   c                 S   s   | S r   r   rT   r   r   r   rt   H  ru   z.test_invalid_kwargs_nopython.<locals>.<lambda>r|   r   T)rM   r0   r2   )rl   r   r   r   r5   r6   r7   r   r   r   r   test_invalid_kwargs_nopythonD  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   axisrH   r[   rT   r   r   r   r&   R  s    z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.r   rH   r   )r   r   TrW   )rl   r   r   r   r5   r6   r7   )r:   r&   r   r   r   test_table_series_valueerrorQ  s       z,TestTableMethod.test_table_series_valueerrorc              	   C   s   |\}}|||d}	t td}
|
jdd|d|d}|dkrztjt| dd	  t||f |	d
d| W 5 Q R X nT|
jdd|d|d}t||f |	d
d|}t||f |	d
d|}t	|| d S )Nr'   rC   r,   r   r   r   r   rZ   r/   r   r    not supportedr   r   r1   r0   r   )
r   r"   rP   r6   rl   r   NotImplementedErrorrK   r8   rb   )r:   r   r(   r)   r*   r   r/   r   rM   r1   rc   Z
roll_tableZroll_singler<   r=   r   r   r   !test_table_method_rolling_methods\  s@    	
     
 
 z1TestTableMethod.test_table_method_rolling_methodsc                 C   sv   |||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   r[   rT   r   r   r   r&     s    z:TestTableMethod.test_table_method_rolling_apply.<locals>.frC   r,   r   r   r   Tr   r2   r1   r0   r   )r   r"   rP   r6   r7   r8   rb   )r:   r   r(   r)   r*   r/   r1   r&   rc   r<   r=   r   r   r   test_table_method_rolling_apply|  s8                  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d d | }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 )NrH   r,   r   r   )r"   onesshaper   )r#   Zarrr   r   r   weighted_mean  s    PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_meanrH   r,   g333333?rC   g?rB   g?r@   gffffff?r   r   )r   rZ   r/   Tr   )r2   r0   r`   ra   g?gk}
@gk}@g1?rA   rg   )r:   r/   r   rc   r<   r=   r   r   r   'test_table_method_rolling_weighted_mean  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   r[   rT   r   r   r   r&     s    z<TestTableMethod.test_table_method_expanding_apply.<locals>.frC   r   r   r   Tr   r   r   )r   r"   rP   rQ   r7   r8   rb   )
r:   r   r(   r)   r*   r1   r&   rc   r<   r=   r   r   r   !test_table_method_expanding_apply  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'   rC   r   r   r   r   r   r   r   r   )
r   r"   rP   rQ   rl   r   r   rK   r8   rb   )r:   r   r(   r)   r*   r   r   rM   r1   rc   Zexpand_tableZexpand_singler<   r=   r   r   r   #test_table_method_expanding_methods  s4    
 
 
 z3TestTableMethod.test_table_method_expanding_methodsr?   rC   )r,   rC   )rC   r,   r   r   r   c                 C   s`   |||d}t |}t|jdd|d||dd}	t|jdd|d||dd}
t|	|
 d S )Nr'   rH   r   )r   r   r   r   r   r   )r   rK   r   r8   rb   )r:   r?   r   r   r(   r)   r*   r1   rc   r<   r=   r   r   r   test_table_method_ewm  s      z%TestTableMethod.test_table_method_ewmN)ri   rj   rk   r   r   r   r   r   r   rl   rm   rn   r"   rP   r   r   r   r   r   r   r   L  s    $r   )#Znumpyr"   rl   Zpandas.compatr   r   r   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r	   Zpandas._testingZ_testingr8   rm   ZskipifZ
pytestmarkZfixturer   r   Z
skip_if_nofilterwarningsr   rr   r   r   Zslowr   r   r   r   r   <module>   sN   




 /R


