a
    d^6                     @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ	 d dl
mZmZmZ d dlmZ ejdd Zejdd Zejd	d
 Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd Zejdd Zejjej ddG dd dZ dS )    N)option_context)	DataFrameIndexSeries)expressionsc                   C   s    t tjddtdddS )N   i'     ABCDfloat64columnsdtyper   nprandomdefault_rngstandard_normallist r   r   f/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pandas/tests/test_expressions.py_frame   s
    r   c                   C   s    t tjddtdddS )Nr   )d   r	   r
   r   r   r   r   r   r   r   _frame2   s
    r   c                 C   s8   t | d  | d d| d d| d ddS 	NABfloat32Cint64Dint32)r   r   r   r    r   copyZastyper   r   r   r   _mixed#   s    
r%   c                 C   s8   t | d  | d d| d d| d ddS r   r"   r   r   r   r   _mixed2/   s    
r'   c                   C   s&   t tjdjddddtdddS )	Nr      r   r   sizer
   r   r   r   r   r   r   integersr   r   r   r   r   _integer;   s
    r-   c                 C   s"   | t jdjddt | d S )Nr   r   r)   )r   r   r   r,   shape)r-   r   r   r   _integer_integersD   s    r/   c                   C   s&   t tjdjddddtdddS )	Nr   r(   r   )e   r	   r)   r
   r   r   r+   r   r   r   r   	_integer2J   s
    r1   c                 C   s   | d j  S Nr   valuesr#   r$   r   r   r   _arrayS   s    r5   c                 C   s   | d j  S r2   r3   r&   r   r   r   _array2X   s    r6   c                 C   s   | d j  S Nr    r3   )r%   r   r   r   _array_mixed]   s    r8   c                 C   s   | d j  S r7   r3   )r'   r   r   r   _array_mixed2b   s    r9   znot using numexpr)reasonc                
   @   sJ  e Zd Zejdddd ZeeedddZ	ej
dg d	ej
d
ddgej
dg ddd Zej
dg d	ej
d
ddgdd Zdd Zej
dej
dg dej
dddgdd Zej
dddgdd Zej
dddgej
dg dd d! Zej
d"g d#d$d% Zej
d"g d&d'd( Zej
d)eg d*g d*gg d+d,eddgddggd-d.gd,feg d/g d0g d1gg d+d,eddgddgddggd-d.gd,fgd2d3 Zej
ddej
d4d5d6d7 Zej
d8g d9ej
d:eeegej
d;d<d=gd>d? Zd@S )ATestExpressionsT)Zautousec                 c   s   t j}d V  |t _d S N)expr_MIN_ELEMENTS)selfmin_elementsr   r   r   save_min_elementsi   s    z!TestExpressions.save_min_elements)flexopnamec                    sp   |r fdd} |_ n
tt }tdd || |}W d    n1 sL0    Y  t  || |}||fS )Nc                    s   t |  |S r<   )getattr)xyrC   r   r   <lambda>r       z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__rD   operatorr   r=   get_test_result)dfotherrB   rC   opexpectedresultr   rG   r   call_opo   s    
(
zTestExpressions.call_opfixture)r-   r1   r/   r   r   r%   r'   rB   Farith)addsubmulmodtruedivfloordivc           	      C   s   | |}dt_| ||||\}}|dkrFtdd |jjD sFJ t|| t	t
|jD ]X}| |jd d |f |jd d |f ||\}}|dkr|jjdksJ t|| q`d S )Nr   rZ   c                 s   s   | ]}|j d kV  qdS )fN)kind).0rE   r   r   r   	<genexpr>   rI   z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>r\   )getfixturevaluer=   r>   rS   allZdtypesr4   tmassert_equalrangelenr   ilocr   r]   )	r?   requestrT   rB   rU   rN   rR   rQ   ir   r   r   test_run_arithmetic   s    
0z#TestExpressions.test_run_arithmeticc                 C   s   | |}|j}tdd | d }W d   n1 s<0    Y  dt_td | ||||\}}	t }
|
s~J dt	
|	| tt|jD ]8}|jdd|f d }| |jdd|f ||d qdS )	z
        tests solely that the result is the same whether or not numexpr is
        enabled.  Need to test whether the function does the correct thing
        elsewhere.
        rJ   Fr(   Nr   Tz Did not use numexpr as expected.rV   )r`   rK   r   r#   r=   r>   Zset_test_moderS   rM   rb   rc   rd   re   r   rf   )r?   rg   rT   rB   comparison_oprN   rU   rO   rR   rQ   Zused_numexprrh   Zbinary_compr   r   r   test_run_binary   s    
*
zTestExpressions.test_run_binaryc                 C   s|   t jdd}t jdd}ttjd ||d}|r@J ttjd||d}|r\J ttjd||d}|sxJ d S )Nr   iAB r   evaluate+)r   r   r   r   r=   _can_use_numexprrL   rV   )r?   arrayZarray2rR   r   r   r   test_invalid   s    zTestExpressions.test_invalidz2ignore:invalid value encountered in:RuntimeWarningzopname,op_str))rV   rm   )rW   -)rX   *)rZ   /)pow**zleft_fix,right_fix)r5   r6   )r8   r9   c           	      C   s   | |}| |}dd }tdd ||||| W d    n1 sJ0    Y  td ||||| t  ||||| d S )Nc                 S   sj   |dkrt | } tt|}tj|| | dd}tj|| | dd}t|| t||||d}|rfJ d S )Nrt   Tuse_numexprFrl   )	r   absrD   rL   r=   rl   rb   assert_numpy_array_equalrn   )leftrightrC   op_strrP   rR   rQ   r   r   r   testit   s    

z/TestExpressions.test_binary_ops.<locals>.testitrJ   Fr(   r`   r   r=   Zset_numexpr_threads)	r?   rg   rC   r|   left_fix	right_fixrz   r{   r}   r   r   r   test_binary_ops   s    	

,
zTestExpressions.test_binary_opsc                    sv   | || | fdd}tdd |  W d    n1 sJ0    Y  td |  t  |  d S )Nc                     sb   d } d } }t j|| dd}t j|| dd}t|| t |||d}|r^J d S )Nr(   Trv   Frl   )r=   rl   rb   ry   rn   )Zf12Zf22rP   rR   rQ   rj   rz   r{   r   r   r}      s    z3TestExpressions.test_comparison_ops.<locals>.testitrJ   Fr(   r~   )r?   rg   rj   r   r   r}   r   r   r   test_comparison_ops   s    

$
z#TestExpressions.test_comparison_opscond)r   r   r%   r'   c                    sj   | | fdd}tdd |  W d    n1 s>0    Y  td |  t  |  d S )Nc                     sX   t jjt jd} |   t| jjd }t | jjd }t	|| d S )N)r   r(   )
r   emptyr.   Zbool_fillr=   wherer4   rb   ry   )crR   rQ   r   rN   r   r   r}     s
    
z*TestExpressions.test_where.<locals>.testitrJ   Fr(   r~   )r?   rg   r   rT   r}   r   r   r   
test_where  s    
$
zTestExpressions.test_wherezop_str,opname))rs   rZ   )z//r[   )ru   rt   c                 C   s  t tjdddktjdddkd}d| d}tt|}t|}tj	t
|d ||| W d    n1 s0    Y  tj	t
|d ||j|j W d    n1 s0    Y  tj	t
|d ||jd W d    n1 s0    Y  tj	t
|d |d	|j W d    n1 s20    Y  tj	t
|d |d	| W d    n1 sl0    Y  tj	t
|d ||d W d    n1 s0    Y  d S )
Nr   
         ?abz
operator 'z!' not implemented for bool dtypes)matchTF)r   r   r   r   rD   rL   reescapepytestZraisesNotImplementedErrorr   r   )r?   r|   rC   rN   msgr\   err_msgr   r   r   !test_bool_ops_raise_on_arithmetic%  s(    

(,*,*z1TestExpressions.test_bool_ops_raise_on_arithmetic))rm   rV   )rr   rX   )rq   rW   c              	   C   sv  d}t tjd|dktjd|dkd}dddd}d	d
dd}tt|}tt|||  }|dkrvd S tjddd t 0 |||}	|||}
t	|	|
 W d    n1 s0    Y  t 8 ||j
|j}	||j
|j}
t|	|
 W d    n1 s0    Y  t 4 ||j
d}	||j
d}
t|	|
 W d    n1 sf0    Y  t 4 |d|j
}	|d|j
}
t|	|
 W d    n1 s0    Y  t 0 |d|}	|d|}
t	|	|
 W d    n1 s0    Y  t 0 ||d}	||d}
t	|	|
 W d    n1 sH0    Y  W d    n1 sh0    Y  d S )Nr   r   r   r   |&^)rm   rr   rq   or_and_xor)r   r   r   rq   T   )r@   F)r   r   r   r   rD   rL   rb   rw   Zassert_produces_warningassert_frame_equalr   r   Zassert_series_equal)r?   r|   rC   nrN   subsZ	sub_funcsr\   Zferer   r   r    test_bool_ops_warn_on_arithmeticF  sJ    



*
,
,
,


,


z0TestExpressions.test_bool_ops_warn_on_arithmeticztest_input,expected)r   r(   r   aa)r   r   r   r   )r   r   r   )r      r   r   )r   r	   r   r   )r   r(   r(   Zbbc                 C   s>   |j d d ddgf |j d d ddgf }t|| d S )Nr   r   )locnerb   r   )r?   Z
test_inputrQ   rR   r   r   r   test_bool_ops_column_name_dtype{  s    .z/TestExpressions.test_bool_ops_column_name_dtypeaxis)r   r(   c           	      C   s   |}|dkr |j dd d f }n|j d d df }dt_t||}tdd |||d}W d    n1 sn0    Y  |||d}t|| d S )Nr(   r   rJ   F)r   )rf   r=   r>   rD   r   rb   r   )	r?   r   rU   r   rN   rO   Zop_funcrQ   rR   r   r   r   test_frame_series_axis  s    
*z&TestExpressions.test_frame_series_axisrP   )__mod____rmod____floordiv____rfloordiv__boxscalarr   c              	   C   s   dt _tdd}||}t||}||}tdd ||}W d    n1 sT0    Y  t|| t|D ]^\}	}
|t	kr|j
|	df }n||	 }ztt|
||}W n ty   Y qr0 ||ksrJ qrd S )Nr   i2   rJ   F)r=   r>   r   ZarangerD   r   rb   rc   	enumerater   rf   intZeroDivisionError)r?   rP   r   r   dataobjmethodrR   rQ   rh   elemZscalar_resultr   r   r   ,test_python_semantics_with_numexpr_installed  s"    
&z<TestExpressions.test_python_semantics_with_numexpr_installedN)rK   
__module____qualname__r   rT   rA   staticmethodboolstrrS   markZparametrizeri   rk   rp   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r;   g   s   





2
	r;   )!rL   r   numpyr   r   Zpandasr   Zpandas._testingZ_testingrb   Zpandas.core.apir   r   r   Zpandas.core.computationr   r=   rT   r   r   r%   r'   r-   r/   r1   r5   r6   r8   r9   r   ZskipifZUSE_NUMEXPRr;   r   r   r   r   <module>   s>   










