a
    Pf>                     @   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   s   | j S )z3method keyword in rolling/expanding/ewm constructorparamrequest r   W/var/www/ai-form-bot/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   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)r,   r    r.   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_apply-   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#   r?   r+   r   r,   r-   r,   r/   )r2   getattrr4   assert_equal)r6   r;   r$   r%   r&   r   r+   r   kwargsr-   rollr8   r9   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|	|f d|d|}
t|	|f ddi|}t|
| d S )Nr#   r<   r   rF   r,   r/   )r   r   eye	expandingrG   r4   rH   )r6   r;   r$   r%   r&   r   r   rI   r-   expandr8   r9   r   r   r   &test_numba_vs_cython_expanding_methodsj   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 )Nr>   r   r   r   r   r   func_1   s    z+TestEngine.test_cache_apply.<locals>.func_1c                 S   s   t | d S )Nr<   )r   r   rP   r   r   r   func_2   s    z+TestEngine.test_cache_apply.<locals>.func_2r   r#   r)   r(   rE   r   T)r,   r-   r.   r/   r,   r.   r0   )r6   r   r$   r%   r&   r+   rQ   rR   r   r-   rJ   r8   r9   r   r   r   test_cache_apply|   s.    

zTestEngine.test_cache_applyzwindow,window_kwargsr2   r   )windowmin_periodsrM   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   )rD   )r.   r,   r-   r          ?r^   r^   r'          @r`   r`   )r   rG   r3   r4   assert_frame_equal)r6   rU   Zwindow_kwargsr$   r%   r&   r   rY   r-   dfr8   r9   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   rP   r$   r&   r%   r   r   func   s    z6TestEngine.test_dont_cache_engine_kwargs.<locals>.funcrZ   r[   r\   rD   r   )r.   r,   r-   r_   r]   r   r2   r3   r4   ra   )r6   re   r-   rb   r8   r9   r   rd   r   test_dont_cache_engine_kwargs   s$    

z(TestEngine.test_dont_cache_engine_kwargsN)__name__
__module____qualname__pytestmarkparametrizer:   r   r   rL   naninfTr   r1   rK   rO   rT   rc   rg   r   r   r   r   r   )   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   rP   r   r   r   <lambda>       zTestEWM.<lambda>c                 C   s
   |  dS NAgroupbyrP   r   r   r   rs      rt   Nonerx   )Z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|   r>   rv   Bzengine must be eithermatchr^   comrA   r,   r   r1   rk   raises
ValueErrorrG   ewmr6   rr   r   rb   r   r   r   test_invalid_engine   s    zTestEWM.test_invalid_enginec                 C   s   | S r   r   rP   r   r   r   rs      rt   c                 C   s
   |  dS ru   rw   rP   r   r   r   rs      rt   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 )Nrz   r>   r}   zcython engine does notr   r^   r   r/   r&   TrF   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~   r>   ry   c                 S   s   | S r   r   rP   r   r   r   rs      rt   z.TestEWM.test_cython_vs_numba.<locals>.<lambda>rz   rv   c                 S   s
   |  dS ru   rw   rP   r   r   r   rs      rt   r   Tr^   )r   adjust	ignore_nar#   r   rF   r/   r   )r   r1   r   rG   r4   ra   )r6   rr   r   r$   r%   r&   r   r   rb   r   r-   r8   r9   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   rD   rD   r(   r(   ry   c                 S   s   | S r   r   rP   r   r   r   rs   	  rt   z4TestEWM.test_cython_vs_numba_times.<locals>.<lambda>c                 S   s
   |  dS ru   rw   rP   r   r   r   rs     rt   )r{   r|   r{   r|   r|   r{   rv   z23 days)
2020-01-01r   z
2020-01-02z
2020-01-10z
2020-02-23z
2020-01-03T)halflifer   r   timesr#   r   rF   r/   r   )r   r   r   r   r4   ra   )r6   rr   r$   r%   r&   r   rb   r   r   r   r-   r8   r9   r   r   r   test_cython_vs_numba_times  s     

z"TestEWM.test_cython_vs_numba_timesN)
rh   ri   rj   rk   rl   rm   r   r   r   r   r   r   r   r   rq      s   rq   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   rP   r   r   r   r"   '  s    z!test_use_global_config.<locals>.fr)   zcompute.use_numbaTr(   rS   r   )r   r1   r   r2   r3   r4   r5   )r"   r7   r8   r9   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   rD   c                 S   s   | S r   r   rP   r   r   r   rs   5  rt   z.test_invalid_kwargs_nopython.<locals>.<lambda>r{   r   T)rI   r,   r.   )rk   r   r   r   r1   r2   r3   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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   axisrD   rW   rP   r   r   r   r"   ?  s    z7TestTableMethod.test_table_series_valueerror.<locals>.fz1method='table' not applicable for Series objects.r   rD   r   )r   r   TrS   )rk   r   r   r   r1   r2   r3   )r6   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 rtjt| dd	* t||f |	d
d| W d    q1 s0    Y  nT|
jdd|d|d}t||f |	d
d|}t||f |	d
d|}t	|| d S )Nr#   r?   r(   r   r   r   r   rV   r+   r   r    not supportedr   r   r-   r,   r   )
r   r   rL   r2   rk   r   NotImplementedErrorrG   r4   ra   )r6   r   r$   r%   r&   r   r+   r   rI   r-   rb   Z
roll_tableZroll_singler8   r9   r   r   r   !test_table_method_rolling_methodsI  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   rW   rP   r   r   r   r"   l  s    z:TestTableMethod.test_table_method_rolling_apply.<locals>.fr?   r(   r   r   r   Tr   r.   r-   r,   r   )r   r   rL   r2   r3   r4   ra   )r6   r   r$   r%   r&   r+   r-   r"   rb   r8   r9   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 )NrD   r(   r   r   )r   onesshaper   )r   Zarrr   r   r   weighted_meany  s    PzNTestTableMethod.test_table_method_rolling_weighted_mean.<locals>.weighted_mean)rD   r(   g333333?)r(   r?   g?)r?   r>   g?)r>   r<   gffffff?r(   r   r   )r   rV   r+   Tr   r.   r,   )r^   r`   r^   )g?r`   r^   )gk}
@gk}@r^   )g1?r=   r^   rf   )r6   r+   r   rb   r8   r9   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   s   t j| ddd S r   rW   rP   r   r   r   r"     s    z<TestTableMethod.test_table_method_expanding_apply.<locals>.fr?   r   r   r   Tr   r   r   )r   r   rL   rM   r3   r4   ra   )
r6   r   r$   r%   r&   r-   r"   rb   r8   r9   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 rtjt| dd* t|
|f |dd	| W d    q1 s|0    Y  nN|	jd
|d}t|
|f |dd	|}t||f |dd	|}t	|| d S )Nr#   r?   r   r   r   r   r   r   r   r   )
r   r   rL   rM   rk   r   r   rG   r4   ra   )r6   r   r$   r%   r&   r   r   rI   r-   rb   Zexpand_tableZexpand_singler8   r9   r   r   r   #test_table_method_expanding_methods  s.    
&

z3TestTableMethod.test_table_method_expanding_methodsr;   r?   )r(   r?   )r?   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#   rD   r   )r   r   r   r   r   r   )r   rG   r   r4   ra   )r6   r;   r   r   r$   r%   r&   r-   rb   r8   r9   r   r   r   test_table_method_ewm  s    z%TestTableMethod.test_table_method_ewmN)rh   ri   rj   r   r   r   r   r   r   rk   rl   rm   r   rL   r   r   r   r   r   r   r   9  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)rD   r(   r?   r>   r<   Fr(   Tr   r   )r   r4   Zassert_produces_warningr   r2   r3   r   prod)rb   r   r   r   test_npfunc_no_warnings  s    r   ) numpyr   rk   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   r   r   Zpandas._testingZ_testingr4   rl   Z
single_cpuZ
pytestmarkZfixturer   r   Z
skip_if_nofilterwarningsr   rq   r   r   Zslowr   r   r   r   r   r   <module>   sL   




 -L


 