o
    Ti^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       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   ]/var/www/html/evchargy.com/venv/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                
   @   sL  e Zd Zejddd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 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 s&w   Y  t  || |}||fS )Nc                    s   t |  |S rB   )getattr)xyrI   r   r   <lambda>r   s    z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__rJ   operatorr   rC   get_test_result)dfotherrH   rI   opexpectedresultr   rM   r   call_opo   s   

zTestExpressions.call_opfixture)r0   r5   r3   r   r   r&   r)   Farith)addsubmulmodtruedivfloordivc           	      C   s   | |}dt_| ||||\}}|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rV|jjdksVJ t|| q0d S )Nr   r_   c                 s   s    | ]}|j d kV  qdS )fN)kind).0rK   r   r   r   	<genexpr>   s    z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>ra   )getfixturevaluerC   rD   rX   allZdtypesr9   tmassert_equalrangelenr   ilocr   rb   )	rE   requestrY   rH   rZ   rS   rW   rV   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w   Y  dt_td | ||||\}}	t }
|
s?J dt	
|	| tt|jD ]}|jdd|f d }| |jdd|f ||d qLd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.
        rO   Fr+   Nr   Tz Did not use numexpr as expected.r[   )re   rP   r   r$   rC   rD   Zset_test_moderX   rR   rg   rh   ri   rj   r   rk   )rE   rl   rY   rH   comparison_oprS   rZ   rT   rW   rV   Zused_numexprrm   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   rC   _can_use_numexprrQ   r[   )rE   arrayZarray2rW   r   r   r   test_invalid   s   zTestExpressions.test_invalidz2ignore:invalid value encountered in:RuntimeWarningzopname,op_str))r[   rr   )r\   -)r]   *)r_   /)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 )Nry   Tuse_numexprFrq   )	r   absrJ   rQ   rC   rq   rg   assert_numpy_array_equalrs   )leftrightrI   op_strrU   rW   rV   r   r   r   testit   s   

z/TestExpressions.test_binary_ops.<locals>.testitrO   Fr+   re   r   rC   Zset_numexpr_threads)	rE   rl   rI   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{   Frq   )rC   rq   rg   r~   rs   )Zf12Zf22rU   rW   rV   ro   r   r   r   r   r      s   z3TestExpressions.test_comparison_ops.<locals>.testitrO   Fr+   r   )rE   rl   ro   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_fillrC   wherer9   rg   r~   )crW   rV   r   rS   r   r   r     s
   
z*TestExpressions.test_where.<locals>.testitrO   Fr+   r   )rE   rl   r   rY   r   r   r   r   
test_where  s   


zTestExpressions.test_wherezop_str,opname))rx   r_   )z//r`   )rz   ry   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   rJ   rQ   reescapepytestZraisesNotImplementedErrorr   r   )rE   r   rI   rS   msgra   err_msgr   r   r   !test_bool_ops_raise_on_arithmetic%  s4   

"z1TestExpressions.test_bool_ops_raise_on_arithmetic))rr   r[   )rw   r]   )rv   r\   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   |&^)rr   rw   rv   or_and_xor)r   r   r   rv   T   )rF   F)r   r   r   r   rJ   rQ   rg   r|   Zassert_produces_warningassert_frame_equalr   r   Zassert_series_equal)rE   r   rI   nrS   subsZ	sub_funcsra   Zferer   r   r    test_bool_ops_warn_on_arithmeticF  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nerg   r   )rE   Z
test_inputrV   rW   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 s7w   Y  |||d}t|| d S )Nr+   r   rO   F)r   )rk   rC   rD   rJ   r   rg   r   )	rE   r   rZ   r   rS   rT   Zop_funcrV   rW   r   r   r   test_frame_series_axis  s   
z&TestExpressions.test_frame_series_axisrU   )__mod____rmod____floordiv____rfloordiv__boxscalarr   c              	   C   s   dt _tdd}||}t||}||}tdd ||}W d    n1 s*w   Y  t|| t|D ]/\}	}
|t	krI|j
|	df }n||	 }ztt|
||}W n	 tya   Y q9w ||kshJ q9d S )Nr   i2   rO   F)rC   rD   r   ZarangerJ   r   rg   rh   	enumerater   rk   intZeroDivisionError)rE   rU   r   r   dataobjmethodrW   rV   rm   elemZscalar_resultr   r   r   ,test_python_semantics_with_numexpr_installed  s(   

z<TestExpressions.test_python_semantics_with_numexpr_installedN)rP   
__module____qualname__r   rY   rG   staticmethodboolstrrX   markZparametrizern   rp   ru   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   g   s    





2
	rA   )!rQ   r   numpyr   r   Zpandasr   Zpandas._testingZ_testingrg   Zpandas.core.apir   r   r   Zpandas.core.computationr   rC   rY   r   r   r&   r)   r0   r3   r5   r:   r<   r>   r?   r   ZskipifZUSE_NUMEXPRrA   r   r   r   r   <module>   s@    










