a
    Of7                     @   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   V/var/www/ai-form-bot/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BZfloat32Cint64DZ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
    r/   c                 C   s   | d j  S Nr   valuesr!   r"   r   r   r   _arrayS   s    r3   c                 C   s   | d j  S r0   r1   r$   r   r   r   _array2X   s    r4   c                 C   s   | d j  S Nr   r1   )r#   r   r   r   _array_mixed]   s    r6   c                 C   s   | d j  S r5   r1   )r%   r   r   r   _array_mixed2b   s    r7   znot using numexpr)reasonc                
   @   s6  e Z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 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 sL0    Y  t  || |}||fS )Nc                    s   t |  |S )N)getattr)xyr;   r   r   <lambda>l       z)TestExpressions.call_op.<locals>.<lambda>compute.use_numexprF)__name__r<   operatorr   exprget_test_result)dfotherr:   r;   opexpectedresultr   r?   r   call_opi   s    
(
zTestExpressions.call_opfixture)r+   r/   r-   r   r   r#   r%   r:   TFarith)addsubmulmodtruedivfloordivc                 C   s   | |}| }|tdd | ||||\}}	|dkrXtdd |	jjD sXJ t	|	| t
t|jD ]X}
| |jd d |
f |jd d |
f ||\}}	|dkr|	jjdksJ t	|	| qrW d    n1 s0    Y  d S )N_MIN_ELEMENTSr   rS   c                 s   s   | ]}|j d kV  qdS )fN)kind).0r=   r   r   r   	<genexpr>   rA   z6TestExpressions.test_run_arithmetic.<locals>.<genexpr>rV   )getfixturevaluecontextsetattrrE   rL   allZdtypesr2   tmassert_equalrangelenr   ilocr   rW   )selfrequestrM   r:   rN   monkeypatchrG   mrK   rJ   ir   r   r   test_run_arithmeticy   s    

$z#TestExpressions.test_run_arithmeticc                 C   s  | |}|j}tdd | d }W d   n1 s<0    Y  | }	|	tdd td | ||||\}
}t	 }|sJ dt
||
 tt|jD ]8}|jdd|f d }| |jdd|f ||d	 qW d   n1 s0    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.
        rB   Fr&   NrU   r   Tz Did not use numexpr as expected.rO   )rZ   rC   r   r!   r[   r\   rE   Zset_test_moderL   rF   r^   r_   r`   ra   r   rb   )rc   rd   rM   r:   comparison_opre   rG   rN   rH   rf   rK   rJ   Zused_numexprrg   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   rE   _can_use_numexprrD   rO   )rc   arrayZarray2rK   r   r   r   test_invalid   s    zTestExpressions.test_invalidz2ignore:invalid value encountered in:RuntimeWarningzopname,op_str))rO   rl   )rP   -)rQ   *)rS   /)pow**zleft_fix,right_fix)r3   r4   )r6   r7   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 )Nrs   Tuse_numexprFrk   )	r   absr<   rD   rE   rk   r^   assert_numpy_array_equalrm   )leftrightr;   op_strrI   rK   rJ   r   r   r   testit   s    

z/TestExpressions.test_binary_ops.<locals>.testitrB   Fr&   rZ   r   rE   Zset_numexpr_threads)	rc   rd   r;   r{   left_fix	right_fixry   rz   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&   Tru   Frk   )rE   rk   r^   rx   rm   )Zf12Zf22rI   rK   rJ   ri   ry   rz   r   r   r|      s    z3TestExpressions.test_comparison_ops.<locals>.testitrB   Fr&   r}   )rc   rd   ri   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_fillrE   wherer2   r^   rx   )crK   rJ   r   rG   r   r   r|     s
    
z*TestExpressions.test_where.<locals>.testitrB   Fr&   r}   )rc   rd   r   rM   r|   r   r   r   
test_where  s    
$
zTestExpressions.test_wherezop_str,opname))rr   rS   )z//rT   )rt   rs   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   r<   rD   reescapepytestZraisesNotImplementedErrorr   r   )rc   r{   r;   rG   msgrV   err_msgr   r   r   !test_bool_ops_raise_on_arithmetic#  s(    

(,*,*z1TestExpressions.test_bool_ops_raise_on_arithmetic))rl   rO   )rq   rQ   )rp   rP   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   |&^)rl   rq   rp   or_and_xor)r   r   r   rp   T   )Zmin_elementsF)r   r   r   r   r<   rD   r^   rv   Zassert_produces_warningassert_frame_equalr   r   Zassert_series_equal)rc   r{   r;   nrG   subsZ	sub_funcsrV   Zferer   r   r    test_bool_ops_warn_on_arithmeticD  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ner^   r   )rc   Z
test_inputrJ   rK   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 }| v}|tdd t||}tdd |||d}	W d    n1 s0    Y  |||d}
t|	|
 W d    n1 s0    Y  d S )Nr&   r   rU   rB   F)r   )rb   r[   r\   rE   r<   r   r^   r   )rc   r   rN   r   re   rG   rH   rf   Zop_funcrJ   rK   r   r   r   test_frame_series_axis  s    

*z&TestExpressions.test_frame_series_axisrI   )__mod____rmod____floordiv____rfloordiv__boxscalarr   c              
   C   s  |  }|tdd tdd}||}t||}||}	tdd ||}
W d    n1 sf0    Y  t|	|
 t	|D ]^\}}|t
kr|	j|df }n|	| }ztt|||}
W n ty   Y q0 ||
ksJ qW d    n1 s0    Y  d S )NrU   r   i2   rB   F)r[   r\   rE   r   Zaranger<   r   r^   r_   	enumerater   rb   intZeroDivisionError)rc   rI   r   r   re   rf   dataobjmethodrK   rJ   rg   elemZscalar_resultr   r   r   ,test_python_semantics_with_numexpr_installed  s$    

&z<TestExpressions.test_python_semantics_with_numexpr_installedN)rC   
__module____qualname__staticmethodboolstrrL   r   markZparametrizerh   rj   ro   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   g   s   



2
	r9   )!rD   r   numpyr   r   Zpandasr   Zpandas._testingZ_testingr^   Zpandas.core.apir   r   r   Zpandas.core.computationr   rE   rM   r   r   r#   r%   r+   r-   r/   r3   r4   r6   r7   r   ZskipifZUSE_NUMEXPRr9   r   r   r   r   <module>   s>   










