a
    é´«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ožeƒ 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   s   | j S )z3method keyword in rolling/expanding/ewm constructor©Úparam©Úrequest© r   ú]/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/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   Ú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#   r1   ©r	   r   r   ÚrangeÚrollingÚapplyÚtmÚassert_series_equal)Úselfr   r'   r(   r)   r-   r.   r%   r	   r0   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|
|ƒf d|	dœ|¤Ž}t|
|ƒf ddi|¤Ž}t ||¡ d S )Nr&   rB   ©r.   r	   ©r/   r0   r/   r2   )r5   Úgetattrr7   Úassert_equal)r9   r>   r'   r(   r)   r   r.   r   Úkwargsr0   Ú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|	|ƒf d|dœ|¤Ž}
t|	|ƒf ddi|¤Ž}t |
|¡ d S )Nr&   r?   r	   rI   r/   r2   )r   r!   ÚeyeÚ	expandingrJ   r7   rK   )r9   r>   r'   r(   r)   r   r   rL   r0   Ú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„ }|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 )NrA   r    ©r"   r   r   r   Úfunc_1‰   s    z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t  | ¡d S )Nr?   )r!   r   rS   r   r   r   Úfunc_2Œ   s    z+TestEngine.test_cache_apply.<locals>.func_2r   r&   r,   r+   rH   r	   T)r/   r0   r1   r2   ©r/   r1   r3   )r9   r   r'   r(   r)   r.   rT   rU   r	   r0   rM   r;   r<   r   r   r   Útest_cache_apply†   s.    

ÿÿÿzTestEngine.test_cache_applyzwindow,window_kwargsr5   r   )ÚwindowÚmin_periodsrP   c                 C   s°   dd„ }|||dœ}t dg d¢iƒ}	t|	|ƒf d|i|¤Žj|dd|d	d
�}
t dg d¢iƒ}t |
|¡ t|	|ƒf 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¶   s    z,TestEngine.test_dont_cache_args.<locals>.add©r)   r'   r(   Úvalue©r   r   r   r   Tr	   )rG   )r1   r/   r0   r#   ©ç      ð?ra   ra   r*   ©ç       @rc   rc   )r   rJ   r6   r7   Úassert_frame_equal)r9   rX   Zwindow_kwargsr'   r(   r)   r   r\   r0   Ú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_   rG   r	   )r1   r/   r0   rb   r`   ©r   r5   r6   r7   rd   )r9   rh   r0   re   r;   r<   r   rg   r   Útest_dont_cache_engine_kwargsÇ   s$    
ÿ
ÿz(TestEngine.test_dont_cache_engine_kwargsN)Ú__name__Ú
__module__Ú__qualname__ÚpytestÚmarkÚparametrizer=   r   r!   rO   ÚnanÚinfÚTr   r4   rN   rR   rW   rf   rj   r   r   r   r   r   3   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   rS   r   r   r   Ú<lambda>å   ó    zTestEWM.<lambda>c                 C   s
   |   d¡S ©NÚA©ÚgroupbyrS   r   r   r   rv   å   rw   ÚNoner{   )Úidsr   r   r   c                 C   sd   t g d¢tdƒdœƒ}tjtdd��, t||ƒjdd�|ƒdd	� W d   ƒ n1 sV0    Y  d S )
N©ÚaÚbr   r€   rA   ©ry   ÚBzengine must be either©Úmatchra   ©ÚcomrD   ©r/   ©r   r4   rn   ÚraisesÚ
ValueErrorrJ   Úewm©r9   ru   r   re   r   r   r   Útest_invalid_engineä   s    zTestEWM.test_invalid_enginec                 C   s   | S r   r   rS   r   r   r   rv   î   rw   c                 C   s
   |   d¡S rx   rz   rS   r   r   r   rv   î   rw   c                 C   sj   t g d¢tdƒdœƒ}tjtdd��2 t||ƒjdd�|ƒdd	d
id� W d   ƒ n1 s\0    Y  d S )Nr~   rA   r�   zcython engine does notrƒ   ra   r…   r2   r)   TrI   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rBd
}||ƒjd||d�}	|||dœ}
t|	|ƒd|
d�}t|	|ƒdd�}t ||¡ d S )Nr‚   rA   r|   c                 S   s   | S r   r   rS   r   r   r   rv   ÿ   rw   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>r~   ry   c                 S   s
   |   d¡S rx   rz   rS   r   r   r   rv     rw   r   Tra   )r†   ÚadjustÚ	ignore_nar&   r	   rI   r2   r‡   )r   r4   r‹   rJ   r7   rd   )r9   ru   r   r'   r(   r)   r�   r�   re   r‹   r0   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   rG   rG   r+   r+   r|   c                 S   s   | S r   r   rS   r   r   r   rv     rw   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   s
   |   d¡S rx   rz   rS   r   r   r   rv     rw   )r   r€   r   r€   r€   r   ry   z23 days)ú
2020-01-01r’   z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03T)Úhalflifer�   r�   Útimesr&   r	   rI   r2   r‡   )r   r   r‹   r   r7   rd   )r9   ru   r'   r(   r)   r�   re   r“   r”   r‹   r0   r;   r<   r   r   r   Útest_cython_vs_numba_times  s     
ÿ
ÿz"TestEWM.test_cython_vs_numba_timesN)
rk   rl   rm   rn   ro   rp   r�   rŽ   r‘   r•   r   r   r   r   rt   â   s   ÿÿrt   c                  C   sz   dd„ } t tdƒƒ}tddƒ�& | d¡j| d dd�}W d   ƒ n1 sJ0    Y  | d¡j| ddd�}t ||¡ d S )	Nc                 S   s   t  | ¡d S )Nr+   r    rS   r   r   r   r%   1  s    z!test_use_global_config.<locals>.fr,   zcompute.use_numbaTr+   rV   r	   )r   r4   r   r5   r6   r7   r8   )r%   r:   r;   r<   r   r   r   Útest_use_global_config/  s    4r–   c                   C   sZ   t jtdd��8 ttdƒƒ d¡jdd„ ddiddd	� W d   ƒ n1 sL0    Y  d S )
Nz"numba does not support kwargs withrƒ   rG   c                 S   s   | S r   r   rS   r   r   r   rv   ?  rw   z.test_invalid_kwargs_nopython.<locals>.<lambda>r   r	   T)rL   r/   r1   )rn   r‰   r   r   r4   r5   r6   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��2 ttdƒƒjddd�j|dd	d
� W d   ƒ n1 sN0    Y  d S )Nc                 S   s   t j| dd�d S ©Nr   ©ÚaxisrG   rZ   rS   r   r   r   r%   I  s    z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.rƒ   rG   r   )r   r	   TrV   )rn   r‰   rŠ   r   r4   r5   r6   )r9   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 rŽtjt|› d�d	��* t||ƒf |	d
dœ|¤Ž W d   ƒ qâ1 s‚0    Y  nT|
jdd|d|d�}t||ƒf |	d
dœ|¤Ž}t||ƒf |	d
dœ|¤Ž}t 	||¡ d S )Nr&   rB   r+   r   r   ©r   r›   rY   r.   ©r   r   ú not supportedrƒ   r	   ©r0   r/   r   )
r   r!   rO   r5   rn   r‰   ÚNotImplementedErrorrJ   r7   rd   )r9   r›   r'   r(   r)   r   r.   r   rL   r0   re   Z
roll_tableZroll_singler;   r<   r   r   r   Ú!test_table_method_rolling_methodsS  s2    	
ÿÿ&
ÿ
ÿÿ
ÿÿ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™   rZ   rS   r   r   r   r%   v  s    z:TestTableMethod.test_table_method_rolling_apply.<locals>.frB   r+   r   r   r�   Tr	   ©r1   r0   r/   r   )r   r!   rO   r5   r6   r7   rd   )r9   r›   r'   r(   r)   r.   r0   r%   re   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 )NrG   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)rG   r+   g333333ã?)r+   rB   gš™™™™™Ù?)rB   rA   gš™™™™™É?)rA   r?   gffffffæ?r+   r   r   )r   rY   r.   Tr	   ©r1   r/   )ra   rc   ra   )gÍÌÌÌÌÌü?rc   ra   )g©kí}ªª
@g©kí}ªª@ra   )g“‹1°Žãø?r@   ra   ri   )r9   r.   r§   re   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™   rZ   rS   r   r   r   r%   ™  s    z<TestTableMethod.test_table_method_expanding_apply.<locals>.frB   r   ©r   r›   Tr	   r£   r   )r   r!   rO   rP   r6   r7   rd   )
r9   r›   r'   r(   r)   r0   r%   re   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 rˆtjt|› d�d��* t|
|ƒf |dd	œ|¤Ž W d   ƒ qÖ1 s|0    Y  nN|	jd
|d�}t|
|ƒf |dd	œ|¤Ž}t||ƒf |dd	œ|¤Ž}t 	||¡ d S )Nr&   rB   r   rª   rž   rŸ   rƒ   r	   r    r   )
r   r!   rO   rP   rn   r‰   r¡   rJ   r7   rd   )r9   r›   r'   r(   r)   r   r   rL   r0   re   Zexpand_tableZexpand_singler;   r<   r   r   r   Ú#test_table_method_expanding_methods¥  s.    
ÿÿ&
ÿÿ
ÿÿz3TestTableMethod.test_table_method_expanding_methodsr>   rB   )r+   rB   )rB   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&   rG   r   )r†   r   r›   r	   r    r   )r   rJ   r‹   r7   rd   )r9   r>   r   r›   r'   r(   r)   r0   re   r;   r<   r   r   r   Útest_table_method_ewm½  s    ÿÿz%TestTableMethod.test_table_method_ewmN)rk   rl   rm   rœ   r¢   r¤   r©   r«   r¬   rn   ro   rp   r!   rO   r¥   r­   r   r   r   r   r˜   C  s    $r˜   c                  C   sX   t dg d¢iƒ} t d¡�* | j d¡jtjddd� W d   ƒ n1 sJ0    Y  d S )NÚcol1)rG   r+   rB   rA   r?   Fr+   Tr	   r¨   )r   r7   Zassert_produces_warningr®   r5   r6   r!   Úprod)re   r   r   r   Útest_npfunc_no_warningsÍ  s    r°   ))Únumpyr!   rn   Zpandas.compatr   Zpandas.errorsr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr   r   r   r   Zpandas._testingZ_testingr7   Zpandas.util.versionr   ro   Z
single_cpuZ
pytestmarkZimportorskipr	   ÚappendZskipifÚ__version__Zfixturer   r   Z
skip_if_noÚfilterwarningsr   rt   r–   r—   Zslowr˜   r°   r   r   r   r   Ú<module>   s^   


þÿ


÷ÿ

 -L


 