o
    Û­jõ?  ã                   @   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©Úparam©Úrequest© r   ú[/var/www/html/CropPilot/venv/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   Ú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   Úf9   s   
z0TestEngine.test_numba_vs_cython_apply.<locals>.fr   ©ÚnogilÚparallelÚnopython©é   é
   r/   )ÚcenterÚstepr	   T)r&   ÚengineÚengine_kwargsÚrawÚcython)r3   r&   r5   ©r	   r"   r   ÚrangeÚrollingÚapplyÚtmÚassert_series_equal)Úselfr"   r+   r,   r-   r1   r2   r)   r	   r4   r&   ÚsÚresultÚexpectedr   r   r   Útest_numba_vs_cython_apply7   s   

ÿÿz%TestEngine.test_numba_vs_cython_applyÚdataé   é   é   é   é   Úfoo)Únameé   r0   é   r/   c                 C   sd   |\}}|||dœ}	|j d|d�}
t|
|ƒdd|	dœ|¤Ž}t|
|ƒdddi|¤Ž}t ||¡ d S )	Nr*   rF   ©r2   r	   ©r3   r4   r3   r6   r   )r9   Úgetattrr;   Úassert_equal)r=   rB   r+   r,   r-   r   r2   r   Úkwargsr4   Ú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*   rC   r	   rM   r3   r6   r   )r   r$   ÚeyeÚ	expandingrN   r;   rO   )r=   rB   r+   r,   r-   r   r   rP   r4   Ú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 )NrE   r#   ©r%   r   r   r   Úfunc_1‰   ó   z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t  | ¡d S )NrC   )r$   r   rX   r   r   r   Úfunc_2Œ   rZ   z+TestEngine.test_cache_apply.<locals>.func_2r   r*   r0   r/   rL   r	   T)r3   r4   r5   r6   ©r3   r5   r7   )r=   r"   r+   r,   r-   r2   rY   r[   r	   r4   rQ   r?   r@   r   r   r   Útest_cache_apply†   s.   

ÿÿÿzTestEngine.test_cache_applyzwindow,window_kwargsr9   r   )ÚwindowÚmin_periodsrT   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¶   rZ   z,TestEngine.test_dont_cache_args.<locals>.add©r-   r+   r,   Úvalue©r   r   r   r   Tr	   )rK   )r5   r3   r4   r&   ©ç      ð?rg   rg   r.   ©ç       @ri   ri   r   )r   rN   r:   r;   Úassert_frame_equal)r=   r^   Úwindow_kwargsr+   r,   r-   r   rb   r4   Ú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   rX   ©r+   r-   r,   r   r   ÚfuncÎ   s   z6TestEngine.test_dont_cache_engine_kwargs.<locals>.funcrc   rd   re   rK   r	   )r5   r3   r4   rh   rf   ©r   r9   r:   r;   rj   )r=   ro   r4   rl   r?   r@   r   rn   r   Útest_dont_cache_engine_kwargsÇ   s$   
ÿ
ÿz(TestEngine.test_dont_cache_engine_kwargsN)Ú__name__Ú
__module__Ú__qualname__ÚpytestÚmarkÚparametrizerA   r   r$   rS   ÚnanÚinfÚTr   r8   rR   rV   r]   rm   rq   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   rX   r   r   r   Ú<lambda>å   ó    zTestEWM.<lambda>c                 C   ó
   |   d¡S ©NÚA©ÚgroupbyrX   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Š   rE   ©r‚   ÚBzengine must be either©Úmatchrg   ©ÚcomrH   ©r3   ©r   r8   ru   ÚraisesÚ
ValueErrorrN   Úewm©r=   r|   r   rl   r   r   r   Útest_invalid_engineä   s   "ÿzTestEWM.test_invalid_enginec                 C   r}   r   r   rX   r   r   r   r~   î   r   c                 C   r€   r�   rƒ   rX   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ˆ   rE   r‹   zcython engine does notr�   rg   r�   r6   r-   TrM   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Œ   rE   r†   c                 S   r}   r   r   rX   r   r   r   r~   ÿ   r   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>rˆ   r‚   c                 S   r€   r�   rƒ   rX   r   r   r   r~     r…   r   Trg   )r�   ÚadjustÚ	ignore_nar*   r	   rM   r6   r‘   )r   r8   r•   rN   r;   rj   )r=   r|   r   r+   r,   r-   rš   r™   rl   r•   r4   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   rK   rK   r/   r/   r†   c                 S   r}   r   r   rX   r   r   r   r~     r   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   r€   r�   rƒ   rX   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	   rM   r6   r‘   )r   r   r•   r   r;   rj   )r=   r|   r+   r,   r-   rš   rl   r�   rž   r•   r4   r?   r@   r   r   r   Útest_cython_vs_numba_times  s    
ÿ
ÿz"TestEWM.test_cython_vs_numba_timesN)
rr   rs   rt   ru   rv   rw   r—   r˜   r›   rŸ   r   r   r   r   r{   â   s     ÿÿr{   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   rW   )Nr/   r#   rX   r   r   r   r)   1  rZ   z!test_use_global_config.<locals>.fr0   zcompute.use_numbaTr/   r\   r	   )r   r8   r   r9   r:   r;   r<   )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�   rK   c                 S   r}   r   r   rX   r   r   r   r~   ?  r   z.test_invalid_kwargs_nopython.<locals>.<lambda>r‰   r	   T)rP   r3   r5   )ru   r“   r   r   r8   r9   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   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   ©ÚaxisrK   r`   rX   r   r   r   r)   I  ó   z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.r�   rK   r   )r   r	   Tr\   )ru   r“   r”   r   r8   r9   r:   )r=   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*   rF   r/   r   r   ©r   r¦   r_   r2   ©r   r   ú not supportedr�   r	   ©r4   r3   r   r   )
r   r$   rS   r9   ru   r“   ÚNotImplementedErrorrN   r;   rj   )r=   r¦   r+   r,   r-   r   r2   r   rP   r4   rl   Ú
roll_tableÚ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`   rX   r   r   r   r)   v  r§   z:TestTableMethod.test_table_method_rolling_apply.<locals>.frF   r/   r   r   r©   Tr	   ©r5   r4   r3   r   )r   r$   rS   r9   r:   r;   rj   )r=   r¦   r+   r,   r-   r2   r4   r)   rl   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 )NrK   r/   r   r¥   )r$   ÚonesÚshaper   )r%   Úarrr   r   r   Úweighted_meanƒ  s   PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_mean)rK   r/   g333333ã?)r/   rF   gš™™™™™Ù?)rF   rE   gš™™™™™É?)rE   rC   gffffffæ?r/   r   r   )r   r_   r2   Tr	   ©r5   r3   )rg   ri   rg   )gÍÌÌÌÌÌü?ri   rg   )g©kí}ªª
@g©kí}ªª@rg   )g“‹1°Žãø?rD   rg   rp   )r=   r2   r¶   rl   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`   rX   r   r   r   r)   ™  r§   z<TestTableMethod.test_table_method_expanding_apply.<locals>.frF   r   ©r   r¦   Tr	   r±   r   )r   r$   rS   rT   r:   r;   rj   )
r=   r¦   r+   r,   r-   r4   r)   rl   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*   rF   r   r¹   rª   r«   r�   r	   r¬   r   r   )
r   r$   rS   rT   ru   r“   r­   rN   r;   rj   )r=   r¦   r+   r,   r-   r   r   rP   r4   rl   Úexpand_tableÚexpand_singler?   r@   r   r   r   Ú#test_table_method_expanding_methods¥  s0   
ÿÿ"ÿ
ÿÿ
ÿÿz3TestTableMethod.test_table_method_expanding_methodsrB   rF   )r/   rF   )rF   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*   rK   r   )r�   r   r¦   r	   r¬   r   )r   rN   r•   r;   rj   )r=   rB   r   r¦   r+   r,   r-   r4   rl   r?   r@   r   r   r   Útest_table_method_ewm½  s   ÿÿz%TestTableMethod.test_table_method_ewmN)rr   rs   rt   r¨   r°   r²   r¸   rº   r½   ru   rv   rw   r$   rS   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)rK   r/   rF   rE   rC   Fr/   Tr	   r·   )r   r;   Úassert_produces_warningr¿   r9   r:   r$   Úprod)rl   r   r   r   Útest_npfunc_no_warningsÍ  s   "ÿrÂ   ))Únumpyr$   ru   Úpandas.compatr   Úpandas.errorsr   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsÚtdÚpandasr   r   r   r   Úpandas._testingÚ_testingr;   Úpandas.util.versionr   rv   Ú
single_cpuÚ
pytestmarkÚimportorskipr	   ÚappendÚskipifÚ__version__Úfixturer   r   Ú
skip_if_noÚfilterwarningsr!   r{   r    r¡   Úslowr¢   rÂ   r   r   r   r   Ú<module>   s`    


þÿ


÷ÿ

 -L


 