o
    Eh?                     @   s  d dl Zd dlZd dl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gZedZeejjeejedkoOe dej d	 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'e
 dd$d% Z(dS )&    N)is_platform_arm)NumbaUtilError)	DataFrameSeriesoption_contextto_datetime)Versionnumbaz0.61z&Segfaults on ARM platforms with numba )reasonsingletable)paramsc                 C      | j S )z3method keyword in rolling/expanding/ewm constructorZparamZrequest r   >lib/python3.10/site-packages/pandas/tests/window/test_numba.pymethod   s   r   summeanZmedianmaxminvarZddofstdc                 C   r   Nr   r   r   r   r   $arithmetic_numba_supported_operators"   s   r   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   f9   s   
z0TestEngine.test_numba_vs_cython_apply.<locals>.fr   nogilparallelnopython   
   r*   )centerstepr	   T)r"   engineengine_kwargsrawcython)r.   r"   r0   r	   r   r   rangerollingapplytmassert_series_equal)selfr   r&   r'   r(   r,   r-   r$   r	   r/   r"   sresultexpectedr   r   r   test_numba_vs_cython_apply7   s   

z%TestEngine.test_numba_vs_cython_applydata               foo)name   r+      r*   c                 C   sd   |\}}|||d}	|j d|d}
t|
|dd|	d|}t|
|dddi|}t|| d S )	Nr%   rA   r-   r	   r.   r/   r.   r1   r   )r4   getattrr6   assert_equal)r8   r=   r&   r'   r(   r   r-   r   kwargsr/   rollr:   r;   r   r   r   $test_numba_vs_cython_rolling_methodsP   s   
z/TestEngine.test_numba_vs_cython_rolling_methodsc                 C   sl   |\}}|||d}t td}| }	t|	|dd|d|}
t|	|dddi|}t|
| d S )Nr%   r>   r	   rH   r.   r1   r   )r   r    eye	expandingrI   r6   rJ   )r8   r=   r&   r'   r(   r   r   rK   r/   expandr:   r;   r   r   r   &test_numba_vs_cython_expanding_methodst   s   
z1TestEngine.test_numba_vs_cython_expanding_methodsc                 C   s   dd }dd }|rd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      t | d S )Nr@   r   r!   r   r   r   func_1      z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t | d S )Nr>   )r    r   rS   r   r   r   func_2   rU   z+TestEngine.test_cache_apply.<locals>.func_2r   r%   r+   r*   rG   r	   T)r.   r/   r0   r1   r.   r0   r2   )r8   r   r&   r'   r(   r-   rT   rV   r	   r/   rL   r:   r;   r   r   r   test_cache_apply   s.   

zTestEngine.test_cache_applyzwindow,window_kwargsr4   r   )windowmin_periodsrO   c                 C   s   dd }|||d}t dg di}	t|	|dd|i|j|dd|d	d
}
t dg di}t|
| t|	|dd|i|j|dd|dd
}
t dg di}t|
| d S )Nc                 S   s   t | | S r   r    r   )valuesr!   r   r   r   add   rU   z,TestEngine.test_dont_cache_args.<locals>.addr(   r&   r'   valuer   r   r   r   Tr	   )rF   )r0   r.   r/   r"         ?rb   rb   r)          @rd   rd   r   )r   rI   r5   r6   assert_frame_equal)r8   rY   Zwindow_kwargsr&   r'   r(   r   r]   r/   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g di}|dj|dd	|d
}t dg di}t|| d d}|dj|dd	|d
}t dg di}t|| d S )NFTc                    s      S r   r   rS   r&   r(   r'   r   r   func   s   z6TestEngine.test_dont_cache_engine_kwargs.<locals>.funcr^   r_   r`   rF   r	   )r0   r.   r/   rc   ra   r   r4   r5   r6   re   )r8   ri   r/   rf   r:   r;   r   rh   r   test_dont_cache_engine_kwargs   s$   

z(TestEngine.test_dont_cache_engine_kwargsN)__name__
__module____qualname__pytestmarkparametrizer<   r   r    rN   naninfTr   r3   rM   rQ   rX   rg   rk   r   r   r   r   r   3   sB    



#
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 r   r   rS   r   r   r   <lambda>       zTestEWM.<lambda>c                 C   
   |  dS NAgroupbyrS   r   r   r   rx         
 Noner~   )Zidsr   r   r   c                 C   sf   t g dtdd}tjtdd t||jdd|dd	 W d    d S 1 s,w   Y  d S )
Nabr   r   r@   r|   Bzengine must be eithermatchrb   comrC   r.   r   r3   ro   raises
ValueErrorrI   ewmr8   rv   r   rf   r   r   r   test_invalid_engine   s   "zTestEWM.test_invalid_enginec                 C   rw   r   r   rS   r   r   r   rx      ry   c                 C   rz   r{   r}   rS   r   r   r   rx      r   c                 C   sl   t g dtdd}tjtdd t||jdd|dd	d
id W d    d S 1 s/w   Y  d S )Nr   r@   r   zcython engine does notr   rb   r   r1   r(   TrH   r   r   r   r   r   test_invalid_engine_kwargs   s   "z"TestEWM.test_invalid_engine_kwargsc                 C   s   t dtdi}|dkrdd }n
g d|d< dd }|d	kr!d
}||jd||d}	|||d}
t|	|d|
d}t|	|dd}t|| d S )Nr   r@   r   c                 S   rw   r   r   rS   r   r   r   rx      ry   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>r   r|   c                 S   rz   r{   r}   rS   r   r   r   rx     r   r   Trb   )r   adjust	ignore_nar%   r	   rH   r1   r   )r   r3   r   rI   r6   re   )r8   rv   r   r&   r'   r(   r   r   rf   r   r/   r:   r;   r   r   r   test_cython_vs_numba   s   
zTestEWM.test_cython_vs_numbac                 C   s   t dg di}|dkrdd }n
dd }g d|d< d	}tg d
}||j|d||d}	|||d}
|	jd|
d}|	jdd}t|| d S )Nr   )r   r   rF   rF   r*   r*   r   c                 S   rw   r   r   rS   r   r   r   rx     ry   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   rz   r{   r}   rS   r   r   r   rx     r   )r   r   r   r   r   r   r|   z23 days)
2020-01-01r   z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03T)halflifer   r   timesr%   r	   rH   r1   r   )r   r   r   r   r6   re   )r8   rv   r&   r'   r(   r   rf   r   r   r   r/   r:   r;   r   r   r   test_cython_vs_numba_times  s    

z"TestEWM.test_cython_vs_numba_timesN)
rl   rm   rn   ro   rp   rq   r   r   r   r   r   r   r   r   ru      s     ru   c                  C   sz   dd } t td}tdd |dj| d dd}W d    n1 s%w   Y  |dj| ddd}t|| d S )	Nc                 S   rR   )Nr*   r   rS   r   r   r   r$   1  rU   z!test_use_global_config.<locals>.fr+   zcompute.use_numbaTr*   rW   r	   )r   r3   r   r4   r5   r6   r7   )r$   r9   r:   r;   r   r   r   test_use_global_config/  s   r   c                   C   s\   t jtdd ttddjdd ddiddd	 W d    d S 1 s'w   Y  d S )
Nz"numba does not support kwargs withr   rF   c                 S   rw   r   r   rS   r   r   r   rx   ?  ry   z.test_invalid_kwargs_nopython.<locals>.<lambda>r   r	   T)rK   r.   r0   )ro   r   r   r   r3   r4   r5   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   s^   dd }t jtdd ttdjdddj|dd	d
 W d    d S 1 s(w   Y  d S )Nc                 S      t j| ddd S Nr   axisrF   r[   rS   r   r   r   r$   I     z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.r   rF   r   )r   r	   TrW   )ro   r   r   r   r3   r4   r5   )r8   r$   r   r   r   test_table_series_valueerrorH  s   "z,TestTableMethod.test_table_series_valueerrorc                 C   s   |\}}|||d}	t td}
|
jdd|d|d}|dv rItjt| dd	 t||d|	d
d| W d    d S 1 sBw   Y  d S |
jdd|d|d}t||d|	d
d|}t||d|	d
d|}t	|| d S )Nr%   rA   r*   r   r   r   r   rZ   r-   r   r    not supportedr   r	   r/   r.   r   r   )
r   r    rN   r4   ro   r   NotImplementedErrorrI   r6   re   )r8   r   r&   r'   r(   r   r-   r   rK   r/   rf   Z
roll_tableZroll_singler:   r;   r   r   r   !test_table_method_rolling_methodsS  s4   	
"


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   r   r   r[   rS   r   r   r   r$   v  r   z:TestTableMethod.test_table_method_rolling_apply.<locals>.frA   r*   r   r   r   Tr	   r0   r/   r.   r   )r   r    rN   r4   r5   r6   re   )r8   r   r&   r'   r(   r-   r/   r$   rf   r:   r;   r   r   r   test_table_method_rolling_applys  s   



z/TestTableMethod.test_table_method_rolling_applyc                 C   s   dd }t g dg dg dg dg}|jddd	|d
j|ddd}t g dg dg dg d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 )NrF   r*   r   r   )r    onesshaper   )r!   Zarrr   r   r   weighted_mean  s   PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_mean)rF   r*   g333333?)r*   rA   g?)rA   r@   g?)r@   r>   gffffff?r*   r   r   )r   rZ   r-   Tr	   r0   r.   )rb   rd   rb   )g?rd   rb   )gk}
@gk}@rb   )g1?r?   rb   rj   )r8   r-   r   rf   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   r   r   r[   rS   r   r   r   r$     r   z<TestTableMethod.test_table_method_expanding_apply.<locals>.frA   r   r   r   Tr	   r   r   )r   r    rN   rO   r5   r6   re   )
r8   r   r&   r'   r(   r/   r$   rf   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v rFtjt| dd t|
|d|dd	| W d    d S 1 s?w   Y  d S |	jd
|d}t|
|d|dd	|}t||d|dd	|}t	|| d S )Nr%   rA   r   r   r   r   r   r	   r   r   r   )
r   r    rN   rO   ro   r   r   rI   r6   re   )r8   r   r&   r'   r(   r   r   rK   r/   rf   Zexpand_tableZexpand_singler:   r;   r   r   r   #test_table_method_expanding_methods  s0   
"

z3TestTableMethod.test_table_method_expanding_methodsr=   rA   )r*   rA   )rA   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%   rF   r   )r   r   r   r	   r   r   )r   rI   r   r6   re   )r8   r=   r   r   r&   r'   r(   r/   rf   r:   r;   r   r   r   test_table_method_ewm  s   z%TestTableMethod.test_table_method_ewmN)rl   rm   rn   r   r   r   r   r   r   ro   rp   rq   r    rN   r   r   r   r   r   r   r   C  s     $r   c                  C   sZ   t dg di} td | jdjtjddd W d    d S 1 s&w   Y  d S )Ncol1)rF   r*   rA   r@   r>   Fr*   Tr	   r   )r   r6   Zassert_produces_warningr   r4   r5   r    Zprod)rf   r   r   r   test_npfunc_no_warnings  s   "r   ))Znumpyr    ro   Zpandas.compatr   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsZtdZpandasr   r   r   r   Zpandas._testingZ_testingr6   Zpandas.util.versionr   rp   Z
single_cpuZ
pytestmarkZimportorskipr	   appendZskipif__version__Zfixturer   r   Z
skip_if_nofilterwarningsr   ru   r   r   Zslowr   r   r   r   r   r   <module>   s`    







 -L


 