U
    ÎZjK@  ã                   @   s~  d dl Zd dlZd dlmZmZ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 ejjeƒ o|eƒ p|eƒ dd�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"dS )"é    N)Úis_ci_environmentÚis_platform_macÚis_platform_windows)ÚNumbaUtilError)Ú	DataFrameÚSeriesÚoption_contextÚto_datetimez`On GHA CI, Windows can fail with 'Windows fatal exception: stack overflow' and MacOS can timeout)ÚreasonÚsingleÚtable)Úparamsc                 C   s   | j S )z3method keyword in rolling/expanding/ewm constructor©Úparam©Úrequest© r   úa/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/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   Ú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ÚargsZ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_apply8   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'   rC   ©r/   r   ©r0   r1   r0   r3   )r6   Úgetattrr8   Úassert_equal)r:   r?   r(   r)   r*   r   r/   r   Úkwargsr1   Úrollr<   r=   r   r   r   Ú$test_numba_vs_cython_rolling_methodsQ   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   rJ   r0   r3   )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_methodsv   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 )NrB   r!   ©r#   r   r   r   Úfunc_1Œ   s    z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t  | ¡d S )Nr@   )r"   r   rT   r   r   r   Úfunc_2�   s    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/   rU   rV   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dddgiƒ}	t|	|ƒf d|i|—Žj|dd|d	d
�}
t ddddgiƒ}t |
|¡ t|	|ƒf d|i|—Žj|dd|dd
�}
t ddddg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)   Úvaluer   r   Tr   )rH   )r2   r0   r1   r$   ç      ð?r+   ç       @)r   rK   r7   r8   Úassert_frame_equal)r:   rY   Z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dddgiƒ}| d¡j|dd	|d
�}t ddddgiƒ}t ||¡ d‰ˆˆ ˆdœ}| d¡j|dd	|d
�}t ddddgiƒ}t ||¡ d S )NFTc                    s   ˆ ˆ ˆ S r   r   rT   ©r(   r*   r)   r   r   ÚfuncÑ   s    z6TestEngine.test_dont_cache_engine_kwargs.<locals>.funcr^   r_   r   rH   r   )r2   r0   r1   ra   r`   ©r   r6   r7   r8   rb   )r:   rf   r1   rc   r<   r=   r   re   r   Útest_dont_cache_engine_kwargsÊ   s0    
   ÿ
   ÿz(TestEngine.test_dont_cache_engine_kwargsN)Ú__name__Ú
__module__Ú__qualname__ÚpytestÚmarkÚparametrizer>   r   r"   rP   ÚnanÚinfÚTr   r5   rO   rS   rX   rd   rh   r   r   r   r   r   4   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   rT   r   r   r   Ú<lambda>è   ó    zTestEWM.<lambda>c                 C   s
   |   d¡S ©NÚA©ÚgroupbyrT   r   r   r   rt   è   ru   ÚNonery   )Zidsr   r   r   c              	   C   sT   t ddddgtdƒdœƒ}tjtdd��" t||ƒjdd�|ƒd	d
� W 5 Q R X d S )NÚaÚbrB   ©rw   ÚBzengine must be either©Úmatchr`   ©ÚcomrE   ©r0   ©r   r5   rl   ÚraisesÚ
ValueErrorrK   Úewm©r:   rs   r   rc   r   r   r   Útest_invalid_engineç   s    zTestEWM.test_invalid_enginec                 C   s   | S r   r   rT   r   r   r   rt   ñ   ru   c                 C   s
   |   d¡S rv   rx   rT   r   r   r   rt   ñ   ru   c              	   C   sZ   t ddddgtdƒdœƒ}tjtdd��( t||ƒjdd�|ƒd	d
did� W 5 Q R X d S )Nr{   r|   rB   r}   zcython engine does notr   r`   r�   r3   r*   TrJ   r„   rˆ   r   r   r   Útest_invalid_engine_kwargsð   s     ÿz"TestEWM.test_invalid_engine_kwargsc              	   C   s´   |dkrdd„ }t }ndd„ }d }|dkr.d}tddddgtd	ƒd
œƒ}	||	ƒjd||d�}
|||dœ}tj|dd��( t|
|ƒd|d�}t|
|ƒdd�}W 5 Q R X t ||¡ d S )Nrz   c                 S   s   | S r   r   rT   r   r   r   rt     ru   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>c                 S   s
   |   d¡S rv   rx   rT   r   r   r   rt     ru   r   Tr{   r|   rB   r}   r`   )r‚   ÚadjustÚ	ignore_nar'   Únuisancer   r   rJ   r3   rƒ   )ÚFutureWarningr   r5   r‡   r8   Úassert_produces_warningrK   rb   )r:   rs   r   r(   r)   r*   rŒ   r‹   Úwarnrc   r‡   r1   r<   r=   r   r   r   Útest_cython_vs_numbaû   s    zTestEWM.test_cython_vs_numbac              	   C   sÆ   |dkrdd„ }t }ndd„ }d }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œ}tj|dd��  |
jd|d�}|
jdd�}W 5 Q R X t ||¡ d S )Nrz   c                 S   s   | S r   r   rT   r   r   r   rt     ru   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   s
   |   d¡S rv   rx   rT   r   r   r   rt     ru   z23 daysz
2020-01-01z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03r{   r|   r   rH   r,   r}   T)Úhalflifer‹   rŒ   Útimesr'   r�   r   r   rJ   r3   rƒ   )rŽ   r	   r   r‡   r8   r�   r   rb   )r:   rs   r(   r)   r*   rŒ   r�   r’   r“   rc   r‡   r1   r<   r=   r   r   r   Útest_cython_vs_numba_times  s6    úÿ
&   ÿz"TestEWM.test_cython_vs_numba_timesN)
ri   rj   rk   rl   rm   rn   r‰   rŠ   r‘   r”   r   r   r   r   rr   å   s&     ÿ  ÿrr   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!   rT   r   r   r   r&   :  s    z!test_use_global_config.<locals>.fr-   zcompute.use_numbaTr,   rW   r   )r   r5   r   r6   r7   r8   r9   )r&   r;   r<   r=   r   r   r   Útest_use_global_config8  s     r•   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 withr   rH   c                 S   s   | S r   r   rT   r   r   r   rt   H  ru   z.test_invalid_kwargs_nopython.<locals>.<lambda>r{   r   T)rM   r0   r2   )rl   r…   r   r   r5   r6   r7   r   r   r   r   Útest_invalid_kwargs_nopythonD  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   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   ©ÚaxisrH   r[   rT   r   r   r   r&   R  s    z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.r   rH   r   )r   r   TrW   )rl   r…   r†   r   r5   r6   r7   )r:   r&   r   r   r   Útest_table_series_valueerrorQ  s     ÿ  ÿz,TestTableMethod.test_table_series_valueerrorc              	   C   sÒ   |\}}|||dœ}	t t d¡ƒ}
|
jdd|d|d�}|dkrztjt|› d�d	��  t||ƒf |	d
dœ|—Ž W 5 Q R X nT|
jdd|d|d�}t||ƒf |	d
dœ|—Ž}t||ƒf |	d
dœ|—Ž}t 	||¡ d S )Nr'   rC   r,   r   r   ©r   rš   rZ   r/   ©r   r   ú not supportedr   r   ©r1   r0   r   )
r   r"   rP   r6   rl   r…   ÚNotImplementedErrorrK   r8   rb   )r:   rš   r(   r)   r*   r   r/   r   rM   r1   rc   Z
roll_tableZroll_singler<   r=   r   r   r   Ú!test_table_method_rolling_methods\  s@    	
 ÿÿ    ÿ
 ÿÿ
 ÿÿ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˜   r[   rT   r   r   r   r&     s    z:TestTableMethod.test_table_method_rolling_apply.<locals>.frC   r,   r   r   rœ   Tr   ©r2   r1   r0   r   )r   r"   rP   r6   r7   r8   rb   )r:   rš   r(   r)   r*   r/   r1   r&   rc   r<   r=   r   r   r   Útest_table_method_rolling_apply|  s8        ÿ   þ    ÿ   þ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ƒ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#   Zarrr   r   r   Úweighted_meanŒ  s    PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_meanrH   r,   g333333ã?rC   gš™™™™™Ù?rB   gš™™™™™É?r@   gffffffæ?r   r   )r   rZ   r/   Tr   )r2   r0   r`   ra   gÍÌÌÌÌÌü?g©kí}ªª
@g©kí}ªª@g“‹1°Žãø?rA   rg   )r:   r/   r¦   rc   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˜   r[   rT   r   r   r   r&   ¢  s    z<TestTableMethod.test_table_method_expanding_apply.<locals>.frC   r   ©r   rš   Tr   r¢   r   )r   r"   rP   rQ   r7   r8   rb   )
r:   rš   r(   r)   r*   r1   r&   rc   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krttjt|› d�d��  t|
|ƒf |dd	œ|—Ž W 5 Q R X nN|	jd
|d�}t|
|ƒf |dd	œ|—Ž}t||ƒf |dd	œ|—Ž}t 	||¡ d S )Nr'   rC   r   r¨   r�   rž   r   r   rŸ   r   )
r   r"   rP   rQ   rl   r…   r    rK   r8   rb   )r:   rš   r(   r)   r*   r   r   rM   r1   rc   Zexpand_tableZexpand_singler<   r=   r   r   r   Ú#test_table_method_expanding_methods®  s4    
 ÿÿ
 ÿÿ
 ÿÿ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   rb   )r:   r?   r   rš   r(   r)   r*   r1   rc   r<   r=   r   r   r   Útest_table_method_ewmÆ  s     ÿ ÿz%TestTableMethod.test_table_method_ewmN)ri   rj   rk   r›   r¡   r£   r§   r©   rª   rl   rm   rn   r"   rP   r¤   r«   r   r   r   r   r—   L  s    $r—   )#Únumpyr"   rl   Zpandas.compatr   r   r   Zpandas.errorsr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr   r   r   r	   Zpandas._testingZ_testingr8   rm   ZskipifZ
pytestmarkZfixturer   r   Z
skip_if_noÚfilterwarningsr   rr   r•   r–   Zslowr—   r   r   r   r   Ú<module>   sN   þ


÷ÿ

 /R


