o
    iv2                     @   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ejddeddd	Zeejd
deddd	Zeed  ed ded ded ddZeed  ed ded ded ddZeejjdd
ddeddd	Zeejjdd
ddeddd	Zed j Zed j Z ed j Z!ed j Z"ej#j$ej% ddG dd dZ&dS )    N)option_context)	DataFrameIndexSeries)expressions'     ABCDfloat64)columnsdtyped   ABfloat32Cint64Dint32)r   r   r   r      )r   r   size)e   r   znot using numexpr)reasonc                   @   s  e Zd Zdd Zdd ZededefddZe	j
d	eeeejjd
deed eeeege	j
dddge	j
dg ddd Ze	j
d	eeeejjd
deed eeeege	j
dddgdd Zdd Ze	j
dg de	j
deefeefgdd Ze	j
dg de	j
deefeefgdd Ze	j
dddge	j
d	eeeeg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TestExpressionsc                 C   s   t j| _d S N)expr_MIN_ELEMENTSself r    X/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/test_expressions.pysetup_method2      zTestExpressions.setup_methodc                 C   s   | j t_ d S r   )r   r   r   r    r    r!   teardown_method5   r#   zTestExpressions.teardown_method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 r   )getattr)xyr&   r    r!   <lambda>;   s    z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__r'   operatorr   r   get_test_result)dfotherr%   r&   opexpectedresultr    r*   r!   call_op8   s   

zTestExpressions.call_opr0   r      r   TF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rQ|jjdksQJ t|| q+d S )Nr   r<   c                 s   s    | ]}|j d kV  qdS )fN)kind).0r(   r    r    r!   	<genexpr>^   s    z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>r>   )r   r   r5   alldtypesvaluestmassert_equalrangelenr   ilocr   r?   )r   r0   r%   r7   r4   r3   ir    r    r!   test_run_arithmeticH   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.
        r,   Fr   Nr   Tz Did not use numexpr as expected.)
r-   r   copyr   r   set_test_moder5   r/   rE   rF   )	r   r0   r%   comparison_opr7   r1   r4   r3   used_numexprr    r    r!   test_run_binaryg   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+)nprandomrandnr   _can_use_numexprr.   r8   )r   arrayarray2r4   r    r    r!   test_invalid   s   zTestExpressions.test_invalidzopname,op_str))r8   rR   )r9   -)r:   *)r<   /)pow**z
left,rightc                    d    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 true_divideignoreTuse_numexprFrQ   )r'   r.   warningscatch_warningsfilterwarningsRuntimeWarningr   rQ   rE   assert_numpy_array_equalrV   )r2   msgr4   r3   leftop_strr&   rightr    r!   testit   s   

z/TestExpressions.test_binary_ops.<locals>.testitr,   Fr   r   r   set_numexpr_threadsr   r&   rk   rj   rl   rm   r    ri   r!   test_binary_ops   s   

zTestExpressions.test_binary_ops))gt>)lt<)gez>=)lez<=)eqz==)nez!=c                    r_   )Nc                     sh    d } d }t t}tj| | dd}tj| | dd}t|| t||d}|r2J d S )Nr   Tra   FrQ   )r'   r.   r   rQ   rE   rg   rV   )f12f22r2   r4   r3   ri   r    r!   rm      s   
z3TestExpressions.test_comparison_ops.<locals>.testitr,   Fr   rn   rp   r    ri   r!   test_comparison_ops   s   

z#TestExpressions.test_comparison_opscondc                    s`    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   )
rS   emptyshapebool_fillr   whererD   rE   rg   )cr4   r3   r}   r0   r    r!   rm      s
   
z*TestExpressions.test_where.<locals>.testitr,   Fr   rn   )r   r}   r0   rm   r    r   r!   
test_where   s   

zTestExpressions.test_wherezop_str,opname))r\   r<   )z//r=   )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   rS   rT   randr'   r.   reescapepytestraisesNotImplementedErrorr   r   )r   rk   r&   r0   rh   r>   err_msgr    r    r!   !test_bool_ops_raise_on_arithmetic   s,   &

"z1TestExpressions.test_bool_ops_raise_on_arithmetic))rR   r8   )r[   r:   )rZ   r9   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   |&^)rR   r[   rZ   or_and_xor)r   r   r   rZ   T   )min_elementsF)r   rS   rT   r   r'   r.   rE   rb   assert_produces_warningassert_frame_equalr   r   assert_series_equal)r   rk   r&   nr0   subs	sub_funcsr>   ferer    r    r!    test_bool_ops_warn_on_arithmetic  sT   &












 $z0TestExpressions.test_bool_ops_warn_on_arithmeticztest_input,expected)r   r   r6   aa)r   r   r   r   )r   r   r   )r      r6   r   )r   r   r6   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   )locry   rE   r   )r   
test_inputr3   r4   r    r    r!   test_bool_ops_column_name_dtypeC  s   .z/TestExpressions.test_bool_ops_column_name_dtypeaxis)r   r   c                 C   s   t }|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   r,   F)r   )_framerI   r   r   r'   r   rE   r   )r   r   r7   r0   r1   op_funcr3   r4   r    r    r!   test_frame_series_axis]  s   
z&TestExpressions.test_frame_series_axisr2   )__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   r,   F)r   r   rS   aranger'   r   rE   rF   	enumerater   rI   intZeroDivisionError)r   r2   r   r   dataobjmethodr4   r3   rJ   elemscalar_resultr    r    r!   ,test_python_semantics_with_numexpr_installedt  s(   

z<TestExpressions.test_python_semantics_with_numexpr_installedN)(r-   
__module____qualname__r"   r$   staticmethodboolstrr5   r   markparametrize_integer	_integer2rS   rT   randintr   r   _frame2_mixed_mixed2rK   rP   rY   _array_array2_array_mixed_array_mixed2rq   r|   r   r   r   r   r   r   r   r   r   r    r    r    r!   r   0   s    

-
	r   )'r.   r   rc   numpyrS   r   pandasr   pandas._testing_testingrE   pandas.core.apir   r   r   pandas.core.computationr   r   rT   rU   listr   r   rL   astyper   r   r   r   r   rD   r   r   r   r   r   skipifUSE_NUMEXPRr   r    r    r    r!   <module>   sJ    

