o
    d5                     @   s   d dl Z 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'     ABCDfloat64columnsdtyper   nprandomrandnlist r   r   b/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/tests/test_expressions.py_frame      r   c                   C   r   )Nd   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Bfloat32Cint64Dint32)r   r   r   r!   r   copyastyper   r   r   r   _mixed      
r'   c                 C   r   r   r#   r   r   r   r   _mixed2(   r(   r*   c                   C       t tjjddddtdddS )N   r   )r   r	   sizer
   r    r   r   r   r   randintr   r   r   r   r   _integer4      r1   c                 C   s   | t jjddt | d S )Nr      r-   )r   r   r0   shape)r1   r   r   r   _integer_randint;   s   r5   c                   C   r+   )Nr,   r   )e   r	   r-   r
   r    r   r/   r   r   r   r   	_integer2A   r2   r7   c                 C      | d j  S Nr   valuesr$   r&   r   r   r   _arrayH      r<   c                 C   r8   r9   r:   r)   r   r   r   _array2M   r=   r>   c                 C   r8   Nr!   r:   )r'   r   r   r   _array_mixedR   r=   r@   c                 C   r8   r?   r:   )r*   r   r   r   _array_mixed2W   r=   rA   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)autousec                 c   s    t j}d V  |t _d S N)expr_MIN_ELEMENTS)selfmin_elementsr   r   r   save_min_elements^   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 rE   )getattr)xyrL   r   r   <lambda>g   s    z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__rM   operatorr   rF   get_test_result)dfotherrK   rL   opexpectedresultr   rP   r   call_opd   s   

zTestExpressions.call_opfixture)r1   r7   r5   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   rb   c                 s   s    | ]}|j d kV  qdS )fN)kind).0rN   r   r   r   	<genexpr>   s    z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>rd   )getfixturevaluerF   rG   r[   alldtypesr;   tmassert_equalrangelenr   ilocr   re   )	rH   requestr\   rK   r]   rV   rZ   rY   ir   r   r   test_run_arithmetict   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	
|	| 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.
        rR   Fr,   Nr   Tz Did not use numexpr as expected.)rh   rS   r   r$   rF   rG   set_test_moder[   rU   rk   rl   )rH   rp   r\   rK   comparison_oprV   r]   rW   rZ   rY   used_numexprr   r   r   test_run_binary   s   

zTestExpressions.test_run_binaryc                 C   sp   t jd}t jd}ttjd ||d}|rJ ttjd||d}|r(J ttjd||d}|s6J d S )NiAB r   evaluate+)r   r   r   rF   _can_use_numexprrT   r^   )rH   arrayarray2rZ   r   r   r   test_invalid   s   zTestExpressions.test_invalidz>ignore:invalid value encountered in true_divide:RuntimeWarningzopname,op_str))r^   rx   )r_   -)r`   *)rb   /)pow**zleft_fix,right_fix)r<   r>   )r@   rA   c                    sx   | | | | fdd}tdd |  W d    n1 s&w   Y  td |  t  |  d S )Nc                     s   dkrd S t t} t # d}td|t tj|   dd}tj|   dd}W d    n1 s5w   Y  t	|| t
| d}|rMJ d S )Nr   z/invalid value encountered in divide|true_divideignoreTuse_numexprFrw   )rM   rT   warningscatch_warningsfilterwarningsRuntimeWarningrF   rw   rk   assert_numpy_array_equalry   )rX   msgrZ   rY   leftop_strrL   rightr   r   testit   s   

z/TestExpressions.test_binary_ops.<locals>.testitrR   Fr,   rh   r   rF   set_numexpr_threads)rH   rp   rL   r   left_fix	right_fixr   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   Frw   )rF   rw   rk   r   ry   )f12f22rX   rZ   rY   rt   r   r   r   r   r      s   z3TestExpressions.test_comparison_ops.<locals>.testitrR   Fr,   r   )rH   rp   rt   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   emptyr4   bool_fillrF   wherer;   rk   r   )crZ   rY   r   rV   r   r   r     s
   
z*TestExpressions.test_where.<locals>.testitrR   Fr,   r   )rH   rp   r   r\   r   r   r   r   
test_where  s   


zTestExpressions.test_wherezop_str,opname))r   rb   )z//rc   )r   r   c                 C   s  t tjddktj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 sXw   Y  tj	t
|d ||jd W d    n1 suw   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 )	N
         ?abz
operator 'z!' not implemented for bool dtypes)matchTF)r   r   r   randrM   rT   reescapepytestraisesNotImplementedErrorr   r   )rH   r   rL   rV   r   rd   err_msgr   r   r   !test_bool_ops_raise_on_arithmetic"  s,   &

"z1TestExpressions.test_bool_ops_raise_on_arithmetic))rx   r^   )r~   r`   )r}   r_   c              	   C   sr  d}t tj|dktj|dkd}dddd}dd	d
d}tt|}tt|||  }|dkr5d S tjddd t  |||}	|||}
t	|	|
 W d    n1 s\w   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 s2w   Y  d S )Nr   r   r   |&^)rx   r~   r}   or_and_xor)r   r   r   r}   T   )rI   F)r   r   r   r   rM   rT   rk   r   assert_produces_warningassert_frame_equalr   r   assert_series_equal)rH   r   rL   nrV   subs	sub_funcsrd   ferer   r   r    test_bool_ops_warn_on_arithmetic>  sT   &












 $z0TestExpressions.test_bool_ops_warn_on_arithmeticztest_input,expected)r   r,   r3   aa)r   r   r   r   )r   r   r   )r      r3   r   )r   r	   r3   r   )r   r,   r,   bbc                 C   s>   |j d d ddgf |j d d ddgf }t|| d S )Nr   r   )locnerk   r   )rH   
test_inputrY   rZ   r   r   r   test_bool_ops_column_name_dtypen  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   rR   F)r   )ro   rF   rG   rM   r   rk   r   )	rH   r   r]   r   rV   rW   op_funcrY   rZ   r   r   r   test_frame_series_axis  s   
z&TestExpressions.test_frame_series_axisrX   )__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   rR   F)rF   rG   r   arangerM   r   rk   rl   	enumerater   ro   intZeroDivisionError)rH   rX   r   r   dataobjmethodrZ   rY   rq   elemscalar_resultr   r   r   ,test_python_semantics_with_numexpr_installed  s(   

z<TestExpressions.test_python_semantics_with_numexpr_installedN)rS   
__module____qualname__r   r\   rJ   staticmethodboolstrr[   markparametrizerr   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rC   \   s    




-
	rC   )"rT   r   r   numpyr   r   pandasr   pandas._testing_testingrk   pandas.core.apir   r   r   pandas.core.computationr   rF   r\   r   r   r'   r*   r1   r5   r7   r<   r>   r@   rA   r   skipifUSE_NUMEXPRrC   r   r   r   r   <module>   sB    










