o
    թZh7                     @   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       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   T/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/test_expressions.py_frame   
   r   c                   C   r   )Nr   )d   r
   r   r   r   r   r   r   r   r   _frame2   r   r   c                 C   8   t | d  | d d| d d| d ddS 	NABZfloat32Cint64DZint32)r   r   r    r"   r   copyZastyper   r   r   r   _mixed#      
r&   c                 C   r   r   r#   r   r   r   r   _mixed2/   r'   r)   c                   C   &   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;   
   r0   c                 C   s"   | t jdjddt | d S )Nr   r   r,   )r   r   r   r/   shape)r0   r   r   r   _integer_integersD   s   "r3   c                   C   r*   )	Nr   r+   r   )e   r
   r,   r   r!   r   r.   r   r   r   r   	_integer2J   r1   r5   c                 C      | d j  S Nr   valuesr$   r%   r   r   r   _arrayS      r:   c                 C   r6   r7   r8   r(   r   r   r   _array2X   r;   r<   c                 C   r6   Nr"   r8   )r&   r   r   r   _array_mixed]   r;   r>   c                 C   r6   r=   r8   )r)   r   r   r   _array_mixed2b   r;   r?   znot using numexpr)reasonc                
   @   s8  e Zd Zededef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 d-g d.gg d(d)eddgddgddggd*d+gd)fgd/d0 Zej	d	d
ej	d1d2d3d4 Zej	d5g d6ej	d7eeegej	d8d9d:gd;d< Zd=S )>TestExpressionsflexopnamec                    sp   |r fdd} |_ ntt }tdd || |}W d    n1 s&w   Y  t  || |}||fS )Nc                    s   t |  |S )N)getattr)xyrC   r   r   <lambda>l   s    z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__rD   operatorr   exprget_test_result)dfotherrB   rC   opexpectedresultr   rG   r   call_opi   s   

zTestExpressions.call_opfixture)r0   r5   r3   r   r   r&   r)   TFarith)addsubmulmodtruedivfloordivc                 C   s   | |}| e}|tdd | ||||\}}	|dkr,tdd |	jjD s,J t	|	| t
t|jD ],}
| |jd d |
f |jd d |
f ||\}}	|dkr_|	jjdks_J t	|	| q9W d    d S 1 sqw   Y  d S )N_MIN_ELEMENTSr   rZ   c                 s   s    | ]}|j d kV  qdS )fN)kind).0rE   r   r   r   	<genexpr>   s    z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>r]   )getfixturevaluecontextsetattrrL   rS   allZdtypesr9   tmassert_equalrangelenr   ilocr   r^   )selfrequestrT   rB   rU   monkeypatchrN   mrR   rQ   ir   r   r   test_run_arithmeticy   s    

$"z#TestExpressions.test_run_arithmeticc                 C   s  | |}|j}tdd | d }W d   n1 sw   Y  | S}	|	tdd td | ||||\}
}t	 }|sHJ dt
||
 tt|jD ]}|jdd|f d }| |jdd|f ||d	 qUW d   dS 1 s}w   Y  d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.
        rI   Fr+   Nr\   r   Tz Did not use numexpr as expected.rV   )ra   rJ   r   r$   rb   rc   rL   Zset_test_moderS   rM   re   rf   rg   rh   r   ri   )rj   rk   rT   rB   comparison_oprl   rN   rU   rO   rm   rR   rQ   Zused_numexprrn   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}|s<J d S )Nr   iAB r   evaluate+)r   r   r   r   rL   _can_use_numexprrK   rV   )rj   arrayZarray2rR   r   r   r   test_invalid   s   zTestExpressions.test_invalidz2ignore:invalid value encountered in:RuntimeWarningzopname,op_str))rV   rs   )rW   -)rX   *)rZ   /)pow**zleft_fix,right_fix)r:   r<   )r>   r?   c           	      C   s   | |}| |}dd }tdd ||||| W d    n1 s%w   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}|r3J d S )Nrz   Tuse_numexprFrr   )	r   absrD   rK   rL   rr   re   assert_numpy_array_equalrt   )leftrightrC   op_strrP   rR   rQ   r   r   r   testit   s   

z/TestExpressions.test_binary_ops.<locals>.testitrI   Fr+   ra   r   rL   Zset_numexpr_threads)	rj   rk   rC   r   left_fix	right_fixr   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 s%w   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+   Tr|   Frr   )rL   rr   re   r   rt   )Zf12Zf22rP   rR   rQ   rp   r   r   r   r   r      s   z3TestExpressions.test_comparison_ops.<locals>.testitrI   Fr+   r   )rj   rk   rp   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w   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   emptyr2   Zbool_fillrL   wherer9   re   r   )crR   rQ   r   rN   r   r   r     s
   
z*TestExpressions.test_where.<locals>.testitrI   Fr+   r   )rj   rk   r   rT   r   r   r   r   
test_where  s   


zTestExpressions.test_wherezop_str,opname))ry   rZ   )z//r[   )r{   rz   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 s@w   Y  tj	t
|d ||j|j W d    n1 s^w   Y  tj	t
|d ||jd W d    n1 s{w   Y  tj	t
|d |d	|j W d    n1 sw   Y  tj	t
|d |d	| W d    n1 sw   Y  tj	t
|d ||d W d    d S 1 sw   Y  d S )
Nr   
         ?abz
operator 'z!' not implemented for bool dtypes)matchTF)r   r   r   r   rD   rK   reescapepytestZraisesNotImplementedErrorr   r   )rj   r   rC   rN   msgr]   err_msgr   r   r   !test_bool_ops_raise_on_arithmetic#  s4   

"z1TestExpressions.test_bool_ops_raise_on_arithmetic))rs   rV   )rx   rX   )rw   rW   c              	   C   s~  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r;d S tjddd t  |||}	|||}
t	|	|
 W d    n1 sbw   Y  t  ||j
|j}	||j
|j}
t|	|
 W d    n1 sw   Y  t  ||j
d}	||j
d}
t|	|
 W d    n1 sw   Y  t  |d|j
}	|d|j
}
t|	|
 W d    n1 sw   Y  t  |d|}	|d|}
t	|	|
 W d    n1 sw   Y  t  ||d}	||d}
t	|	|
 W d    n1 sw   Y  W d    d S W d    d S 1 s8w   Y  d S )Nr   r   r   r   |&^)rs   rx   rw   or_and_xor)r   r   r   rw   T   )Zmin_elementsF)r   r   r   r   rD   rK   re   r}   Zassert_produces_warningassert_frame_equalr   r   Zassert_series_equal)rj   r   rC   nrN   subsZ	sub_funcsr]   Zferer   r   r    test_bool_ops_warn_on_arithmeticD  s\   












 $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nere   r   )rj   Z
test_inputrQ   rR   r   r   r   test_bool_ops_column_name_dtypey  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 }| <}|tdd t||}tdd |||d}	W d    n1 s@w   Y  |||d}
t|	|
 W d    d S 1 s\w   Y  d S )Nr+   r   r\   rI   F)r   )ri   rb   rc   rL   rD   r   re   r   )rj   r   rU   r   rl   rN   rO   rm   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  |  v}|tdd tdd}||}t||}||}	tdd ||}
W d    n1 s3w   Y  t|	|
 t	|D ]/\}}|t
krR|	j|df }n|	| }ztt|||}
W n	 tyj   Y qBw ||
ksqJ qBW d    d S 1 s}w   Y  d S )Nr\   r   i2   rI   F)rb   rc   rL   r   ZarangerD   r   re   rf   	enumerater   ri   intZeroDivisionError)rj   rP   r   r   rl   rm   dataobjmethodrR   rQ   rn   elemZscalar_resultr   r   r   ,test_python_semantics_with_numexpr_installed  s,   


"z<TestExpressions.test_python_semantics_with_numexpr_installedN)rJ   
__module____qualname__staticmethodboolstrrS   r   markZparametrizero   rq   rv   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   g   s    



2
	rA   )!rK   r   numpyr   r   Zpandasr   Zpandas._testingZ_testingre   Zpandas.core.apir   r   r   Zpandas.core.computationr   rL   rT   r   r   r&   r)   r0   r3   r5   r:   r<   r>   r?   r   ZskipifZUSE_NUMEXPRrA   r   r   r   r   <module>   s@    










