o
    �¨Êh®>  ã                   @   sf  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 ejj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e d¡dd „ ƒZdS )!é    N)ÚNumbaUtilError)Ú	DataFrameÚSeriesÚoption_contextÚto_datetimeÚsingleÚtable)Úparamsc                 C   ó   | j S )z3method keyword in rolling/expanding/ewm constructor©Úparam©Úrequest© r   úP/var/www/html/env/lib/python3.10/site-packages/pandas/tests/window/test_numba.pyÚmethod   s   r   ÚsumÚmeanÚmedianÚmaxÚminÚvarÚddofÚstdc                 C   r
   ©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ÚargsÚ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_apply-   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'   rC   ©r/   r   ©r0   r1   r0   r3   r   )r6   Úgetattrr8   Úassert_equal)r:   r?   r(   r)   r*   r   r/   r   Úkwargsr1   Úrollr<   r=   r   r   r   Ú$test_numba_vs_cython_rolling_methodsF   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   rJ   r0   r3   r   )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_methodsj   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 )NrB   r    ©r"   r   r   r   Úfunc_1   ó   z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t  | ¡d S )Nr@   )r!   r   rU   r   r   r   Úfunc_2‚   rW   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/   rV   rX   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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¬   rW   z,TestEngine.test_dont_cache_args.<locals>.add©r*   r(   r)   Úvalue©r   r   r   r   Tr   )rH   )r2   r0   r1   r#   ©ç      ð?rd   rd   r+   ©ç       @rf   rf   r   )r   rK   r7   r8   Úassert_frame_equal)r:   r[   Ú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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   rU   ©r(   r*   r)   r   r   ÚfuncÄ   s   z6TestEngine.test_dont_cache_engine_kwargs.<locals>.funcr`   ra   rb   rH   r   )r2   r0   r1   re   rc   ©r   r6   r7   r8   rg   )r:   rl   r1   ri   r<   r=   r   rk   r   Útest_dont_cache_engine_kwargs½   s$   
ÿ
ÿz(TestEngine.test_dont_cache_engine_kwargsN)Ú__name__Ú
__module__Ú__qualname__ÚpytestÚmarkÚparametrizer>   r   r!   rP   ÚnanÚinfÚTr   r5   rO   rS   rZ   rj   rn   r   r   r   r   r   )   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   rU   r   r   r   Ú<lambda>Û   ó    zTestEWM.<lambda>c                 C   ó
   |   d¡S ©NÚA©ÚgroupbyrU   r   r   r   r{   Û   ó   
 ÚNoner�   )Ú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‡   rB   ©r   ÚBzengine must be either©Úmatchrd   ©ÚcomrE   ©r0   ©r   r5   rr   ÚraisesÚ
ValueErrorrK   Úewm©r:   ry   r   ri   r   r   r   Útest_invalid_engineÚ   s   "ÿzTestEWM.test_invalid_enginec                 C   rz   r   r   rU   r   r   r   r{   ä   r|   c                 C   r}   r~   r€   rU   r   r   r   r{   ä   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…   rB   rˆ   zcython engine does notrŠ   rd   rŒ   r3   r*   TrJ   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‰   rB   rƒ   c                 S   rz   r   r   rU   r   r   r   r{   õ   r|   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>r…   r   c                 S   r}   r~   r€   rU   r   r   r   r{   ø   r‚   r   Trd   )r�   ÚadjustÚ	ignore_nar'   r   rJ   r3   rŽ   )r   r5   r’   rK   r8   rg   )r:   ry   r   r(   r)   r*   r—   r–   ri   r’   r1   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   rH   rH   r,   r,   rƒ   c                 S   rz   r   r   rU   r   r   r   r{   	  r|   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   r}   r~   r€   rU   r   r   r   r{     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   rJ   r3   rŽ   )r   r   r’   r   r8   rg   )r:   ry   r(   r)   r*   r—   ri   rš   r›   r’   r1   r<   r=   r   r   r   Útest_cython_vs_numba_times  s    
ÿ
ÿz"TestEWM.test_cython_vs_numba_timesN)
ro   rp   rq   rr   rs   rt   r”   r•   r˜   rœ   r   r   r   r   rx   Ø   s     ÿÿrx   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   rT   )Nr,   r    rU   r   r   r   r&   '  rW   z!test_use_global_config.<locals>.fr-   zcompute.use_numbaTr,   rY   r   )r   r5   r   r6   r7   r8   r9   )r&   r;   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Š   rH   c                 S   rz   r   r   rU   r   r   r   r{   5  r|   z.test_invalid_kwargs_nopython.<locals>.<lambda>r†   r   T)rM   r0   r2   )rr   r�   r   r   r5   r6   r7   r   r   r   r   Útest_invalid_kwargs_nopython1  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   ©ÚaxisrH   r]   rU   r   r   r   r&   ?  ó   z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.rŠ   rH   r   )r   r   TrY   )rr   r�   r‘   r   r5   r6   r7   )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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'   rC   r,   r   r   ©r   r£   r\   r/   ©r   r   ú not supportedrŠ   r   ©r1   r0   r   r   )
r   r!   rP   r6   rr   r�   ÚNotImplementedErrorrK   r8   rg   )r:   r£   r(   r)   r*   r   r/   r   rM   r1   ri   Ú
roll_tableÚroll_singler<   r=   r   r   r   Ú!test_table_method_rolling_methodsI  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]   rU   r   r   r   r&   l  r¤   z:TestTableMethod.test_table_method_rolling_apply.<locals>.frC   r,   r   r   r¦   Tr   ©r2   r1   r0   r   )r   r!   rP   r6   r7   r8   rg   )r:   r£   r(   r)   r*   r/   r1   r&   ri   r<   r=   r   r   r   Útest_table_method_rolling_applyi  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 )NrH   r,   r   r¢   )r!   ÚonesÚshaper   )r"   Úarrr   r   r   Úweighted_meany  s   PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_mean)rH   r,   g333333ã?)r,   rC   gš™™™™™Ù?)rC   rB   gš™™™™™É?)rB   r@   gffffffæ?r,   r   r   )r   r\   r/   Tr   ©r2   r0   )rd   rf   rd   )gÍÌÌÌÌÌü?rf   rd   )g©kí}ªª
@g©kí}ªª@rd   )g“‹1°Žãø?rA   rd   rm   )r:   r/   r³   ri   r<   r=   r   r   r   Ú'test_table_method_rolling_weighted_meanx  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]   rU   r   r   r   r&   �  r¤   z<TestTableMethod.test_table_method_expanding_apply.<locals>.frC   r   ©r   r£   Tr   r®   r   )r   r!   rP   rQ   r7   r8   rg   )
r:   r£   r(   r)   r*   r1   r&   ri   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'   rC   r   r¶   r§   r¨   rŠ   r   r©   r   r   )
r   r!   rP   rQ   rr   r�   rª   rK   r8   rg   )r:   r£   r(   r)   r*   r   r   rM   r1   ri   Úexpand_tableÚexpand_singler<   r=   r   r   r   Ú#test_table_method_expanding_methods›  s0   
ÿÿ"ÿ
ÿÿ
ÿÿ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   rg   )r:   r?   r   r£   r(   r)   r*   r1   ri   r<   r=   r   r   r   Útest_table_method_ewm³  s   ÿÿz%TestTableMethod.test_table_method_ewmN)ro   rp   rq   r¥   r­   r¯   rµ   r·   rº   rr   rs   rt   r!   rP   r°   r»   r   r   r   r   rŸ   9  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)rH   r,   rC   rB   r@   Fr,   Tr   r´   )r   r8   Úassert_produces_warningr¼   r6   r7   r!   Úprod)ri   r   r   r   Útest_npfunc_no_warningsÃ  s   "ÿr¿   ) Únumpyr!   rr   Úpandas.errorsr   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsÚtdÚpandasr   r   r   r   Úpandas._testingÚ_testingr8   rs   Ú
single_cpuÚ
pytestmarkÚfixturer   r   Ú
skip_if_noÚfilterwarningsr   rx   r�   rž   ÚslowrŸ   r¿   r   r   r   r   Ú<module>   sN    


÷ÿ

 -L


 