U
    f/e*                     @   s   d dl Zd dl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ddejdG dd	 d	ZeddG d
d dZedddd Zedddd ZeddejjejdG dd dZdS )    N)NumbaUtilError)	DataFrameSeriesoption_contextto_datetime)NUMBA_FUNC_CACHEnumbaz0.46.0zignore:\nThe keyword argumentc                   @   sP   e Zd Zejdddgdd Zdd Zdd	 Zejddd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   B/tmp/pip-unpacked-wheel-tiezk1ph/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_applyc                 C   sv   |}|||d}t td}|d}t||d|d}	t||dd}
ttd| d	ftksftt|	|
 d S )
Nr      r   r   r   r   r   r   nanRolling_apply_single)	r   r   eyer    getattrr   AssertionErrorr"   assert_frame_equal)r$   r   r   r   $arithmetic_numba_supported_operatorsmethodr   dfrollr&   r'   r   r   r   $test_numba_vs_cython_rolling_methods.   s    
z/TestEngine.test_numba_vs_cython_rolling_methodsc                 C   st   |}|||d}t td}| }t||d|d}	t||dd}
ttd| dftksdtt|	|
 d S )	Nr   r)   r   r*   r   r+   r,   ZExpanding_apply_single)	r   r   r.   	expandingr/   r   r0   r"   r1   )r$   r   r   r   r2   r3   r   r4   expandr&   r'   r   r   r   &test_numba_vs_cython_expanding_methods@   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_1X   s    z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t | d S )Nr)   )r   Zstdr;   r   r   r   func_2[   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   r0   )r$   r
   r   r   r   r<   r=   r   r   r5   r&   r'   r   r   r   test_cache_applyU   sB    

         zTestEngine.test_cache_applyN)
__name__
__module____qualname__pytestmarkparametrizer(   r6   r9   r?   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dd	 Zejjdd
d dd gddgddd Zejjddd dd gddgddd Zejjddd dd gddgddd Z	dS )TestEWMMeangrouperc                 C   s   | S Nr   r;   r   r   r   <lambda>       zTestEWMMean.<lambda>c                 C   s
   |  dS NAgroupbyr;   r   r   r   rI      rJ   NonerN   )idsc              	   C   sP   t ddddgtdd}tjtdd ||jddjd	d
 W 5 Q R X d S )Nabr:   rL   Bzengine must be eithermatch      ?comZfoor+   r   r   rC   raises
ValueErrorewmr   r$   rG   r4   r   r   r   test_invalid_engine   s    zTestEWMMean.test_invalid_enginec                 C   s   | S rH   r   r;   r   r   r   rI      rJ   c                 C   s
   |  dS rK   rM   r;   r   r   r   rI      rJ   c              	   C   sV   t ddddgtdd}tjtdd$ ||jddjd	d
did W 5 Q R X d S )NrQ   rR   r:   rS   zcython engine does notrU   rW   rX   r   r   Tr*   rZ   r^   r   r   r   test_invalid_engine_kwargs   s     z&TestEWMMean.test_invalid_engine_kwargsc                 C   s   | S rH   r   r;   r   r   r   rI      rJ   c                 C   s
   |  dS rK   rM   r;   r   r   r   rI      rJ   c                 C   sd   t ddddgtdd}||jd||d}|||d}	|jd|	d	}
|jd
d}t|
| d S )NrQ   rR   r:   rS   rW   )rY   adjust	ignore_nar   r   r*   r   r+   )r   r   r]   r   r"   r1   )r$   rG   r   r   r   rb   ra   r4   r]   r   r&   r'   r   r   r   test_cython_vs_numba   s    z TestEWMMean.test_cython_vs_numbac                 C   s   | S rH   r   r;   r   r   r   rI      rJ   c                 C   s
   |  dS rK   rM   r;   r   r   r   rI      rJ   c                 C   s   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}
|	jd|
d}|	jdd}t|| d S )Nz23 daysz
2020-01-01z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03rQ   rR   r      r   rS   T)halflifera   rb   timesr   r   r*   r   r+   )r   r   r]   r   r"   r1   )r$   rG   r   r   r   rb   re   rf   r4   r]   r   r&   r'   r   r   r   test_cython_vs_numba_times   s*    
&   z&TestEWMMean.test_cython_vs_numba_timesN)
r@   rA   rB   rC   rD   rE   r_   r`   rc   rg   r   r   r   r   rF   }   s0     
  
  
  rF   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   r;   r   r   r   r      s    z!test_use_global_config.<locals>.fr   zcompute.use_numbaTr   r>   r   )r   r   r   r    r!   r"   r#   )r   r%   r&   r'   r   r   r   test_use_global_config   s     rh   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 withrU   rd   c                 S   s   | S rH   r   r;   r   r   r   rI      rJ   z.test_invalid_kwargs_nopython.<locals>.<lambda>rQ   r   T)kwargsr   r   )rC   r[   r   r   r   r    r!   r   r   r   r   test_invalid_kwargs_nopython   s       rj   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Z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   axisrd   r   sumr;   r   r   r   r      s    z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.rU   rd   table)r3   r   Tr>   )rC   r[   r\   r   r   r    r!   )r$   r   r   r   r   test_table_series_valueerror   s       z,TestTableMethod.test_table_series_valueerrorc                 C   sn   |}|||d}t td}t|jdd|dd||dd}	t|jdd	|dd||dd}
t|	|
 d S )
Nr      r   rq   r   r3   rn   min_periodsr   r   r   single)r   r   r.   r/   r    r"   r1   r$   rn   r   r   r   r2   r3   r   r4   r&   r'   r   r   r   !test_table_method_rolling_methods   s$        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 rl   ro   r;   r   r   r   r      s    z:TestTableMethod.test_table_method_rolling_apply.<locals>.frs   r   rq   r   rt   Tr   r   r   r   rw   )r   r   r.   r    r!   r"   r1   
r$   rn   r   r   r   r   r   r4   r&   r'   r   r   r   test_table_method_rolling_apply   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 )Nrd   r   r   rm   )r   Zonesshaperp   )r   Zarrr   r   r   weighted_mean  s    PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_meanrd   r   g333333?rs   g?r:   g?r)   gffffff?rq   r   )r3   ru   Tr   )r   r   rW   g       @g?gk}
@gk}@g1?   )r   r    r!   r"   r1   )r$   r~   r4   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 rl   ro   r;   r   r   r   r     s    z<TestTableMethod.test_table_method_expanding_apply.<locals>.frs   rq   r3   rn   Tr   rz   rw   )r   r   r.   r7   r!   r"   r1   r{   r   r   r   !test_table_method_expanding_apply  s           z1TestTableMethod.test_table_method_expanding_applyc                 C   sf   |}|||d}t td}t|jd|d||dd}	t|jd|d||dd}
t|	|
 d S )Nr   rs   rq   r   r   rv   rw   )r   r   r.   r/   r7   r"   r1   rx   r   r   r   #test_table_method_expanding_methods#  s      z3TestTableMethod.test_table_method_expanding_methodsN)	r@   rA   rB   rr   ry   r|   r   r   r   r   r   r   r   rk      s   rk   )Znumpyr   rC   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   Z
skip_if_norD   filterwarningsr	   rF   rh   rj   Zslowrk   r   r   r   r   <module>   s&   

i
>





