o
    5ck                    @  s  U d dl mZ d dlmZ d dlmZ 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mZmZ d dlm  mZ d dlmZmZmZmZ d dlZd dlmZmZmZ d dlmZ  d dl!m"Z" d d	l#m$Z$ d dl%m&  m'  m(Z( d d
l%m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 ej7dd e$D ddd Z8ej7e(j9ddd Z:ej7e-re;e4ng ddd Z<dd Z=ej7e;e>dg dddd Z?e?Z@e?ZAG dd dZBd d! ZCG d"d# d#ZDd$d% ZEG d&d' d'ZFG d(d) d)ZGG d*d+ d+ZHe
jId,ZJG d-d. d.ZKejLd/d0 ZMejLejNOd1d2d3d4 ZPejLd5d6 ZQejLd7d8 ZRe+e"jSe*d9ZTd:eUd;< ejNOde$ejNOdeTd<d= ZVd>d? ZWd@dA ZXejNOdBg dCdDdE ZYdFdG ZZdHdI Z[dJdK Z\dLdM Z]ejNOdNdOejNOde^e_fejNOdPe^e_fdQdR Z`ejNOdSdTdUgdVdW ZadXdY ZbdZd[ ZcejNOd\d]d^gd_d` Zddadb ZeejNOd\e6f dcdd Zgejhdedf ZiG dgdh dhZjdS )i    )annotations)reduce)productN)NumExprClobberingErrorPerformanceWarningUndefinedVariableError)is_boolis_floatis_list_like	is_scalar)	DataFrameSeries
date_range)pytables)ENGINES)BaseExprVisitorPandasExprVisitorPythonExprVisitor)NUMEXPR_INSTALLEDUSE_NUMEXPR)ARITH_OPS_SYMSSPECIAL_CASE_ARITH_OPS_SYMS_binary_math_ops_binary_ops_dict_unary_math_ops)DEFAULT_GLOBALSc              	   c  sF    | ]}t j|t jj|d kot dt dt dtjgdV  qdS )numexprznumexpr enabled->z, installed->reasonmarksN)pytestparammarkskipifr   r   tdskip_if_no_ne).0engine r)   X/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/computation/test_eval.py	<genexpr>8   s    
r+   )paramsc                 C     | j S Nr"   requestr)   r)   r*   r(   7   s   r(   c                 C  r-   r.   r/   r0   r)   r)   r*   parserK      r2   c                 C  r-   r.   r/   r0   r)   r)   r*   unary_fns_for_neP   r3   r4   c              
   C  sd   t | }t| jr-z|| |W S  ty, } zt|dr'tjW  Y d }~S  d }~ww || |S )Nz6negative number cannot be raised to a fractional power)r   r   has_neg_frac
ValueErrorstr
startswithnpnan)lhscmp1rhsr(   cer)   r)   r*   _eval_single_binU   s   

r@      )r   r   	SeriesNaNDataFrameNaNfloat)r,   idsc                 C  sj   t tjdd}tj||dk< t tjddttjdtddtjtjdg|tj f}|| j S )N
   rA         ?      )r   r9   randomrandr:   randnr   r"   )r1   nan_df1optsr)   r)   r*   r;   d   s   
r;   c                
   @  s8  e Zd Zejjdg dg ddejjdddgdd	gdejd
ejdd Zejdej	dd Z
ejdej	dd Zejdddgejdddgdd Zejdeeeedd Zdd Zdd Zejdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zejd(eej d)d*eejj!d)d+d,eej"d)d*d-kgd.d/ Z#ejd(e$ej d)e$ejj!d)d)d,e$ej"d)d-kgd0d1 Z%d2d3 Z&d4d5 Z'ejd6ej(ej)gejd7d8d9gd:d; Z*ejd<d=d>d? Z+d@dA Z,dBdC Z-dDdE Z.dFdG Z/dHdI Z0dJdK Z1dLS )MTestEvalr<   )z!=z==z<=z>=<>)neeqlegeltgt)rE   cmp2rQ   rP   rW   rV   binopc                 C  s   |dkr8|dv r8d}t jt|d d| d| d| d}	tj|	||d	 W d    d S 1 s1w   Y  d S t||||}
t||||}t|
|||}d| d| d| d}	tj|	||d	}t|| d S )
Npythonandor"'BoolOp' nodes are not implementedmatch(lhs z rhs) z (lhs  rhs)r(   r2   )r!   raisesNotImplementedErrorpdevalr@   tmassert_equal)selfr<   rX   rY   r;   r=   r(   r2   msgexlhs_newrhs_newexpectedresultr)   r)   r*   test_complex_cmp_ops|   s   
zTestEval.test_complex_cmp_opscmp_opc           
      C  s  |dk }|dk }|dkr:|dv r:d}t jt|d d| d}tj|||d W d    d S 1 s3w   Y  d S d| d}d	d
dg}|dv rut|sut jt|d tj|||||dd W d    d S 1 snw   Y  d S t||||}tj|||d}	t	
|	| d S )Nr   rZ   innot in&'(In|NotIn)' nodes are not implementedr_   lhs  rhsrc   |zxonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')bool(\]|')z'argument of type 'bool' is not iterabler;   r=   r(   r2   
local_dict)r!   rd   re   rf   rg   joinr
   	TypeErrorr@   rh   ri   )
rj   rr   r;   r=   r(   r2   rk   rl   ro   rp   r)   r)   r*   test_simple_cmp_ops   s:   
"zTestEval.test_simple_cmp_opsopc                 C  s  |dkr2|dv r2d}t jt|d d| d}tj|||d W d    d S 1 s+w   Y  d S t|rSt|sS|dv rS|dkrS|dkrSt jjd	d
}	|j	|	 ddg}
d| d}d
ddg}t|r||
v rt jt|d tj|||||dd W d    d S 1 sw   Y  d S t|rt|rtdd ||f\}}t||||}t|r| }n| }tj|||d}t|| d S )NrZ   rs   rv   r_   z~(lhs rb   rc   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   rt   ru   ry   zyonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')float(\]|')z(argument of type 'float' is not iterablerz   r{   c                 S  s   t | gS r.   )r9   arrayxr)   r)   r*   <lambda>       z2TestEval.test_compound_invert_op.<locals>.<lambda>)r!   rd   re   rf   rg   r	   r#   xfailnode
add_markerr}   r   r~   mapr@   rh   assert_almost_equal)rj   r   r;   r=   r1   r(   r2   rk   rl   r#   
skip_thesero   rp   r)   r)   r*   test_compound_invert_op   s^   
"	z TestEval.test_compound_invert_opc                 C  s  |}|dkr3d| d| d}	d}
t jt|
d tj|	||d W d    d S 1 s,w   Y  d S t||||}t||||}|d ur|d urd| d| d}	d| d| d}d	| d
| d}t|d||}|	||fD ]}tj|||d}t|| qpd S d S d S )NrZ   rw    mid rx   r^   r_   rc    mid and mid ra    mid) & (mid rb   &)r!   rd   re   rf   rg   r@   rh   r   )rj   r<   rX   r;   midhsr=   r(   r2   midex1rk   rm   rn   ex2ex3ro   rl   rp   r)   r)   r*   test_chained_cmp_op   s,   
zTestEval.test_chained_cmp_oparith1c              
   C  s   d| d}t j|||d}t||||}t|| d| d| d}t j|||d}t||||}	z	|	|\}	}
W n tttfyI   Y d S w |dkrddd l	}|
d| d}t|j| d S td| d}t|| d S )	Nrw   rx   rc   z rhs r   r   znlhs z ghs)rf   rg   r@   rh   r   alignr6   r~   AttributeErrorr   evaluatevalues)rj   r   r;   r=   r(   r2   rl   rp   ro   nlhsghsrR   r)   r)   r*   test_binary_arith_ops  s$   zTestEval.test_binary_arith_opsc           	      C  s   d}t j|||d}|| }t|| |dkr;dd l}|d}t|ttfr1t|j	| d S t||
  d S t|d||}t|| d S )Nz	lhs % rhsrc   r   r   zexpected % rhs%)rf   rg   rh   r   r   r   
isinstancer   r   r   itemr@   )	rj   r;   r=   r(   r2   rl   rp   ro   rR   r)   r)   r*   test_modulus'  s   
zTestEval.test_modulusc           	      C  s   d}|dkrt j|||d}|| }t|| d S d}tjt|d t j|||d||d W d    d S 1 s;w   Y  d S )Nz
lhs // rhsrZ   rc   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'r_   rz   r|   r(   r2   )rf   rg   rh   ri   r!   rd   r~   )	rj   r;   r=   r(   r2   rl   resro   rk   r)   r)   r*   test_floor_division9  s   "zTestEval.test_floor_divisionc           
      C  s   d}t |d||}tj|||d}t|rHt|rHt|ttjfrHt|rHd}t	j
t|d t|| W d    d S 1 sAw   Y  d S t|| d}tj|||d}t |d||}	t |	d||}t|| d S )Nz
lhs ** rhs**rc   z-(DataFrame.columns|numpy array) are differentr_   z(lhs ** rhs) ** rhs)r@   rf   rg   r   r   complexr9   complexfloatingisnanr!   rd   AssertionErrorrh   assert_numpy_array_equalr   )
rj   r;   r=   r(   r2   rl   ro   rp   rk   middler)   r)   r*   test_powM  s*   "zTestEval.test_powc                 C  sX   z| t}W n ty   tt|g}Y nw | }tjd||d}t|| d S )Nz~elbrc   )	astypeboolr   r9   r   rf   rg   rh   r   )rj   r;   r(   r2   elbro   rp   r)   r)   r*   check_single_invert_opg  s   zTestEval.check_single_invert_opc                 C  s  d}t tjdd}|dkr1d}tjt|d tj|||d W d    n1 s+w   Y  n!d}tjt	|d tj|||d W d    n1 sMw   Y  t tjj
dd	d
}|dkrd}tjt|d tj|||d W d    n1 s|w   Y  n| }tj|||d}t|| t tjdddk}| }tj|||d}t|| t g dtjddkd}|dkrtjtdd tj|||d W d    d S 1 sw   Y  d S d}tjt	|d tj|||d W d    d S 1 sw   Y  d S )N~lhsrA   rI   r   -couldn't find matching opcode for 'invert_dd'r_   rc   0ufunc 'invert' not supported for the input typesrA   rI   size)couldn't find matching opcode for 'invertrG   arH   g       @   )br>   unknown type object#bad operand type for unary ~: 'str')r   r9   rJ   rL   r!   rd   re   rf   rg   r~   randintrh   assert_frame_equalrK   r6   )rj   r(   r2   exprr;   rk   expectrp   r)   r)   r*   test_frame_invertq  sF   "$zTestEval.test_frame_invertc                 C  s  d}t tjd}|dkr0d}tjt|d tj|||d}W d    n1 s*w   Y  n!d}tjt	|d tj|||d W d    n1 sLw   Y  t tjj
ddd}|dkrd	}tjt|d tj|||d W d    n1 s{w   Y  n| }tj|||d}t|| t tjdd
k}| }tj|||d}t|| t g d}|dkrtjtdd tj|||d W d    d S 1 sw   Y  d S d}tjt	|d tj|||d W d    d S 1 sw   Y  d S )Nr   rA   r   r   r_   rc   r   r   r   rG   r   r   r   )r   r9   rJ   rL   r!   rd   re   rf   rg   r~   r   rh   assert_series_equalrK   r6   )rj   r(   r2   r   r;   rk   rp   r   r)   r)   r*   test_series_invert  sF   ""zTestEval.test_series_invertc                 C  s   d}t tjdd}| }tj|||d}t|| t tjjddd}| }tj|||d}t|| t tj	dddk}|dkrjd	}t
jt|d
 tj|||d W d    d S 1 scw   Y  d S | }tj|||d}t|| d S )N-lhsrA   rI   rc   r   r   rG   r   *couldn't find matching opcode for 'neg_bb'r_   )r   r9   rJ   rL   rf   rg   rh   r   r   rK   r!   rd   re   rj   r(   r2   r   r;   r   rp   rk   r)   r)   r*   test_frame_negate  s$   "zTestEval.test_frame_negatec                 C  s   d}t tjd}| }tj|||d}t|| t tjjddd}| }tj|||d}t|| t tj	ddk}|dkrhd}t
jt|d tj|||d W d    d S 1 saw   Y  d S | }tj|||d}t|| d S )	Nr   rA   rc   r   rG   r   r   r_   )r   r9   rJ   rL   rf   rg   rh   r   r   rK   r!   rd   re   r   r)   r)   r*   test_series_negate  s$   "zTestEval.test_series_negater;   rA   rI   r   r   rG   c                 C  (   d}|}t j|||d}t|| d S Nz+lhsrc   )rf   rg   rh   r   rj   r;   r(   r2   r   r   rp   r)   r)   r*   test_frame_pos     zTestEval.test_frame_posc                 C  r   r   )rf   rg   rh   r   r   r)   r)   r*   test_series_pos  r   zTestEval.test_series_posc                 C  sN  d}t jt|d tjd||d W d    n1 sw   Y  tjd||ddks-J tjd||dd	ks9J tjd
||ddksEJ tjd||ddksQJ tjd||ddks]J tjd||ddksiJ tjd||ddksuJ tjd||ddksJ tjd||ddksJ tjd||ddksJ tjd||ddksJ d S )Nz%bad operand type for unary ~: 'float'r_   z~1.0rc   z-1.0r2   r(   g      z+1.0      ?z~1z-1z+1rH   z~Truez~Falsez-Truez-Falser   z+Truez+Falser!   rd   r~   rf   rg   )rj   r(   r2   rk   r)   r)   r*   test_scalar_unary#  s   zTestEval.test_scalar_unaryc                 C  s:   t jtdt jd}t jg dt jd}t|| d S )NzK[-True, True, ~True, +True,-False, False, ~False, +False,-37, 37, ~37, +37]dtype)r   Tr   rH   r   Fr   r   i%   ir   )r9   r   rf   rg   object_rh   r   )rj   rp   ro   r)   r)   r*   test_unary_in_array4  s   zTestEval.test_unary_in_arrayr   r   zx < -0.1z-5 > xc                 C  s<   t dtjdg|di}||}|jtdgksJ d S )Nr   r   r   F)r   r9   r   rg   r   )rj   r   r   dfr   r)   r)   r*   test_float_comparison_bin_opS  s   
z%TestEval.test_float_comparison_bin_oprl   )z1 or 2z1 and 2za and bza or bz1 or 2 and (3 + 2) > 3z2 * x > 2 or 1 and 2z2 * df > 3 and 1 or ac           	      C  sr   t jddd}}}tt jdd}d}tjt|d tj|||d W d    d S 1 s2w   Y  d S )Nr   rH   rI   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notr_   rc   )	r9   rJ   rL   r   r!   rd   re   rf   rg   )	rj   rl   r(   r2   r   r   r   r   rk   r)   r)   r*   test_disallow_scalar_bool_ops[  s   "z&TestEval.test_disallow_scalar_bool_opsc                 C  sJ  d}t jd||d}|dksJ t|sJ d}t jd||d}|dks&J t|s,J d}t jd||d}|r:J t|s@J t|sFJ tdg}t jd||d}t|tdg |jdkseJ tdg}t jd||d}t|tdg |jdksJ tdg}t jd||d}t|tdg |jdksJ d S )NrH   r   rc   g      ?F)rH   )	rf   rg   r   r   r9   r   rh   r   shape)rj   r(   r2   r   rp   r)   r)   r*   test_identicalo  s2   zTestEval.test_identicalc                 C  s$   d}t j|||d}|dksJ d S )Nz1 + 2 *         5 - 1 + 2 rc      rf   rg   )rj   r(   r2   exprp   r)   r)   r*   test_line_continuation  s   zTestEval.test_line_continuationc           	      C  s   d}t j|||d}t|}||ksJ tdg di}d}|d|d}|js-J d}|d	|d}|jd
dgd d f }t	|| d}|d|d}|jd
gd d f }t	|| d S )Nz1000000000.006rc   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > rH   rI   r   A == )
rf   rg   r9   float64r   queryemptylocrh   r   )	rj   r(   r2   r   rp   ro   r   cutoffexactr)   r)   r*   test_float_truncation  s    

zTestEval.test_float_truncationc                 C  s   t g dgg dd}d}tjt|d |d W d    n1 s$w   Y  t  }d|j_tjt|d |d W d    d S 1 sHw   Y  d S )	N)r   r   r   )foobarclasscolumnsz4Python keyword not valid identifier in numexpr queryr_   z
class == 0lambdazlambda == 0)r   r!   rd   SyntaxErrorr   indexnamerj   r   rk   r)   r)   r*   test_disallow_python_keywords  s   "z&TestEval.test_disallow_python_keywordsc                 C  s:   t ddks	J t ddksJ t ddksJ d S )Nznot Truer   z	not Falser   zTrue and not Truer   r   )rj   r)   r)   r*   test_true_false_logic  s   zTestEval.test_true_false_logicc                 C  sR   t ddi}t|jdj sJ t|jdjo"|jdj s'J d S )Nr   hello)r   rf   rg   r7   r`   r   )rj   eventr)   r)   r*   test_and_logic_string_match  s   ,z$TestEval.test_and_logic_string_matchN)2__name__
__module____qualname__r!   r#   parametrizer   BOOL_OPS_SYMSrq   CMP_OPS_SYMSr   r   r   sortedsetr   
differencer   r   r   r   r%   skip_if_windowsr   r   r   r   r   r   r   r9   rJ   rL   r   rK   r   r   r   r   r   float32r   r   r   r   r   r   r   r   r   r)   r)   r)   r*   rO   {   sz    
"
4
 

+/


!rO   c                  O  s
   t j S r.   )r9   rJ   rL   )argskwargsr)   r)   r*   r     s   
 r   c                   @  sN   e Zd Zejdg dejdejejgejdddgdd Z	d	S )
TestTypeCastingr   )+-*r   /dt
left_right)r   3)r  r   c                 C  sr   t jddt|d}|\}}| d| d| }	tj|	||d}
|jj|ks'J |
jj|ks/J t |
t|	 d S )NrA   r   )
data_gen_fr    rc   )rh   makeCustomDataframefrf   rg   r   r   r   )rj   r(   r2   r   r  r  r   leftrightsr   r)   r)   r*   test_binop_typecasting  s   z&TestTypeCasting.test_binop_typecastingN)
r   r  r  r!   r#   r  r9   r
  r   r  r)   r)   r)   r*   r    s
    r  c                  G  s4   t ttd|  }ttjtdd | }|o|S )Nis_monotonic_increasingc                 S  s   t | jjtjS r.   )
issubclassr   typer9   
datetime64r   r)   r)   r*   r     s    zshould_warn.<locals>.<lambda>)anyr   operator
attrgetterr   xor)r  not_monoonly_one_dtr)   r)   r*   should_warn  s
   r'  c                	   @  s  e Zd Zg dZedg Zdd Zejdeejdeejdedd	 Z	ejd
eejdedd Z
ejdeejdeejdeejdedd Zejdddgejdeejd
edd Zejdddgejdeeddgddgdg ejddd Zejdeejd
eejdddgejddd gd!d" Zejdeejdeejdeejded#d$ Zd%d& Zd'S )(TestAlignment)ir  r  r  c                 C  s8   d}t jddtd}tj|||d}t ||d  d S )Nzdf * ~2rA   r   )r  rc   )rh   r  r  rf   rg   r   )rj   r(   r2   r  r   r   r)   r)   r*   test_align_nested_unary_op  s   z(TestAlignment.test_align_nested_unary_oplr_idx_typerr_idx_type
c_idx_typec           	   	   C  s   t jddX t dt tjddt||d}tjddt||d}t|j|jrFt	t t
jd||d}W d    n1 s@w   Y  nt
jd||d}t|||  W d    d S 1 saw   Y  d S )	NTrecordalwaysrF   r  
r_idx_typer.     zdf + df2rc   warningscatch_warningssimplefilterRuntimeWarningrh   r  r  r'  r   assert_produces_warningrf   rg   r   )	rj   r(   r2   r,  r-  r.  r   df2r   r)   r)   r*   test_basic_frame_alignment  s    

"z(TestAlignment.test_basic_frame_alignmentr3  c                 C  st   t jddt||d}tjd||d}t ||dk  ttjj	|j
 |j|jd}tjd||d}t |||k  d S )NrF   r2  df < 2rc   rI   )r   r   zdf < df3)rh   r  r  rf   rg   r   r   r9   rJ   rL   r   r   r   )rj   r(   r2   r3  r.  r   r   df3r)   r)   r*   test_frame_comparison  s   
z#TestAlignment.test_frame_comparisonr1c1r2c2c              	   C  s   t jddf t dt tjddt||d}tjddt||d}tjddt||d}	t|j|j|	jrRt	t t
jd	||d
}
W d    n1 sLw   Y  nt
jd	||d
}
t|
|| |	  W d    d S 1 sow   Y  d S )NTr/  r1  r   rI   r2     rA   zdf + df2 + df3rc   r5  )rj   r(   r2   r@  rA  rB  rC  r   r;  r>  r   r)   r)   r*   #test_medium_complex_frame_alignment  s&   


"z1TestAlignment.test_medium_complex_frame_alignment
index_namer   r   c              	   C  s  t jddx t dt tjddt||d}t||}tt	j
d|d d }t|j|jrNtt tjd||d}	W d    n1 sHw   Y  ntjd||d}	|d	ks^|d	krl|d
krg||n|| }
n|| }
t|	|
 W d    d S 1 sw   Y  d S )NTr/  r1  rF   r2  rA   df + src   r  r   )r6  r7  r8  r9  rh   r  r  getattrr   r9   rJ   rL   r'  r   r:  rf   rg   addr   )rj   r(   r2   rF  r3  r.  r   r   r  r   ro   r)   r)   r*   !test_basic_frame_series_alignment1  s$   

"z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_typer)  )r  r  zignore::RuntimeWarningc              
   C  s8  |dkr1|dkr1|dkr1|dkr1|dkr1d| d| d| d	| d
| 
}|j tjj|dd tjddt||d}t||}	t	t
jd|	d d }
t|
j|jrrtt tjd||d}W d    n1 slw   Y  ntjd||d}|dks|dkr|dkr||
n|
| }n|
| }t|| d S )Nr   r   r   r)  r  z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r   strictrF      r2  rA   zs + dfrc   r  )r   r   r!   r#   r   rh   r  r  rH  r   r9   rJ   rL   r'  r   r:  r9  rf   rg   rI  r   )rj   r1   r(   r2   rF  r3  r.  r   r   r   r  r   ro   r)   r)   r*   !test_basic_series_frame_alignmentK  sH   


z/TestAlignment.test_basic_series_frame_alignmentr   r  r  c              	   C  s  t jdd t dt tjddt||d}t||}tt	j
d|d d }	d| d}
d	| d
}t|j|	jrwtt tj|
||d}W d    n1 sTw   Y  tt tj|||d}W d    n1 sqw   Y  ntj|
||d}tj|||d}|dkr|dkr|dkrt|| W d    d S W d    d S W d    d S W d    d S 1 sw   Y  d S )NTr/  r1  rF   r2  rA   zs z dfzdf z src   r  r   )r6  r7  r8  r9  rh   r  r  rH  r   r9   rJ   rL   r'  r   r:  rf   rg   r   )rj   r(   r2   rF  r   r3  r.  r   r   r  r;   r=   r   r   r)   r)   r*   test_series_frame_commutativityr  s:   

"z-TestAlignment.test_series_frame_commutativityc              	   C  s  d}d}d| }	t jdd t dt tddg}
td	d
g}tj||t||d}tj|	|t||d}t	t
 ||
}ttj||d | }|dksU|dkrd|dkr_||}n	|| }n|| }|dksp|dkr|dkrz||}n	|| }n|| }t|j|j|jrtt tjd||d}W d    n1 sw   Y  ntjd||d}|j|jksJ t|| W d    d S 1 sw   Y  d S )Nr   rA   rI   Tr/  r1  r   r   r   r;  r2  r  r   zdf2 + ser + dfrc   )r6  r7  r8  r9  rJ   choicerh   r  r  rH  localsgetr   r9   rL   rI  r'  r   r:  rf   rg   r   r   )rj   r(   r2   r@  rA  rB  rC  nm1m2rF  obj_namer   r;  r   ser	expected2ro   r   r)   r)   r*   #test_complex_series_frame_alignment  sD   



"z1TestAlignment.test_complex_series_frame_alignmentc                 C  s  t tjdd}ttjd}|dkrt}nd}t| tj	d||d W d    n1 s2w   Y  ttjd}td tj	d||d W d    n1 sWw   Y  t tjdd}ttjd}td tj	d||d W d    n1 sw   Y  t tjdd}ttjd}|dk}|st}nd}t|B}tj	d||d |st
|d	ksJ t|d
 j}	t|j|jd	  }
d|
dd}|	|ksJ W d    d S W d    d S 1 sw   Y  d S )Ni  rF   i'  r   FrG  rc   rZ   rH   r   z_Alignment difference on axis 1 is larger than an order of magnitude on term 'df', by more than z.4gz; performance may suffer.)r   r9   rJ   rL   r   r   rh   r:  rf   rg   lenr7   messagelog10r   r   )rj   r(   r2   r   r  seenis_python_enginewrnwrk   loggedro   r)   r)   r*   +test_performance_warning_for_poor_alignment  sL   "z9TestAlignment.test_performance_warning_for_poor_alignmentN)r   r  r  index_typeslhs_index_typesr+  r!   r#   r  r<  r?  rE  rJ  listr   filterwarningsrM  rN  rX  ra  r)   r)   r)   r*   r(    sL    

!,r(  c                
   @  sV  e Zd Zdd Zdd Zejdddgejdddgejd	ej	d
d Z
ejdddgejdddgejd	ej	dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zejjd2d3d4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%dBdC Z&ejdDdEdFdEdGge'(g dHgej)dIdJdK Z*ejdDg dLdMdN Z+ejdOdEdFdEdGge'(g dHdEdGigdPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2ejd^g d_d`da Z3ejdbdcddgdedf Z4dgS )hTestOperationsc                 O  $   | ddd |d< tj|i |S Nlevelr   rH   poprf   rg   rj   r  r  r)   r)   r*   rg        zTestOperations.evalc              	     sH  g  |dkr
ddg  fddt jt j D }dd |D }|D ]}d| d	}d
| d	}d| d}|dv rZd}	tjt|	d tj|||d W d    n1 sTw   Y  q td|d|}
| j|||d}||
ksoJ t||d|}
| j|d|i||d}||
ksJ td||d |}
| j|d|i||d}||
ksJ q d S )NrZ   rt   ru   c                   s   g | ]}| vr|qS r)   r)   r'   r   exclude_arithr)   r*   
<listcomp>  s    z8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s    | ]	}|d kr|V  qdS )z//Nr)   rn  r)   r)   r*   r+     s    z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rs   z&argument of type 'int' is not iterabler_   rc   rH   r   r   )	r   r   r  r!   rd   r~   rf   rg   r@   )rj   r(   r2   	arith_opsopsr   rl   r   r   rk   expecr   yr)   ro  r*   test_simple_arith_ops  s6   

z$TestOperations.test_simple_arith_opsr=   TFr;   r   c                 C     | d| d| }t dkr3|dv r3d}tjt|d | | W d    d S 1 s,w   Y  d S | |}t|}||ksBJ d S Nr  rZ   r[   r^   r_   r2   r!   rd   re   rg   rj   r=   r;   r   rl   rk   r   r   r)   r)   r*   test_simple_bool_ops     

z#TestOperations.test_simple_bool_opsc                 C  rw  rx  ry  rz  r)   r)   r*   test_bool_ops_with_constants+  r|  z+TestOperations.test_bool_ops_with_constantsc                 C  sn   t jdddd}tt jd}d}tjt|d | jd||d	d
 W d    d S 1 s0w   Y  d S )Nr   rD  rA      rF   z?N-dimensional objects, where N > 2, are not supported with evalr_   x + yr   ru  r|   )r9   rJ   rL   r   r!   rd   re   rg   )rj   r   ru  rk   r)   r)   r*   test_4d_ndarray_fails;  s   "z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1rH   )rg   )rj   r   r)   r)   r*   test_constantB  s   
zTestOperations.test_constantc                 C  s4   t tjdd}| jdd|id}t|| d S )NrF   rI   r   r  r   r9   rJ   rL   rg   rh   r   )rj   r   r;  r)   r)   r*   test_single_variableF  s   z#TestOperations.test_single_variablec                 C  s  t dg}d}tt | j|dd}W d    n1 sw   Y  t|t dg tt | j|dd}W d    n1 sEw   Y  t|t dg tt | jddd}W d    n1 skw   Y  d}||ksxJ tt | jddd}W d    n1 sw   Y  d}||ksJ tt | jd	dd}W d    n1 sw   Y  d}||ksJ tt | jd	dd}W d    n1 sw   Y  d}||ksJ d S )
NrH   zs / 1F)truedivr   Tz1 / 2rG   zs / 2)r9   r   rh   r:  FutureWarningrg   r   )rj   r  rl   r   rt  r)   r)   r*   test_truedivK  s<   zTestOperations.test_truedivc                 C  sP   t tjdd}tjtdd | d W d    d S 1 s!w   Y  d S )NrA   r   name 'x' is not definedr_   zdf[x > 2] > 2)r   r9   rJ   rL   r!   rd   	NameErrorrg   rj   r   r)   r)   r*   &test_failing_subscript_with_name_errorm  s   "z5TestOperations.test_failing_subscript_with_name_errorc                 C  sD   t tjdd}| jdd|id}|d |dk }t|| d S )NrA   r   z(df + 1)[df > 2]r   r  rH   rI   r  rj   r   rp   ro   r)   r)   r*   test_lhs_expression_subscriptr  s   z,TestOperations.test_lhs_expression_subscriptc                 C  s   t tjddtdd}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t||	D ]\}
}t	
|| j|
d	|id
 q?d S )NrA   r   abcr   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   r   r  )r   r9   rJ   rL   rd  r   r   r>   ziprh   r   rg   )rj   r   expr1expec1expr2expec2expr3expec3exprsexpecsr?   rt  r)   r)   r*   test_attr_expressionx  s   

z#TestOperations.test_attr_expressionc                 C  s|   t tjddtdd}t tjdd}d}d}tjt|d | j|||dd	 W d    d S 1 s7w   Y  d S )
NrA   r   r  r   zdf = df2%cannot assign without a target objectr_   )r   r;  r  )	r   r9   rJ   rL   rd  r!   rd   r6   rg   )rj   r   r;  r  rk   r)   r)   r*   test_assignment_fails  s   "z$TestOperations.test_assignment_failsc                 C  sX   t tjddtdd}tjtdd |d W d    d S 1 s%w   Y  d S )NrA   rI   abr   invalid syntaxr_   zd c = a + b	r   r9   rJ   rL   rd  r!   rd   r   rg   r  r)   r)   r*   %test_assignment_column_multiple_raise  s   "z4TestOperations.test_assignment_column_multiple_raisec                 C  \   t tjddtdd}d}tjt|d |d W d    d S 1 s'w   Y  d S )NrA   rI   r  r   z5left hand side of an assignment must be a single namer_   zd,c = a + br  r   r)   r)   r*   %test_assignment_column_invalid_assign  s
   "z4TestOperations.test_assignment_column_invalid_assignc                 C  r  )NrA   rI   r  r   zcannot assign to function callr_   zTimestamp("20131001") = a + br  r   r)   r)   r*   3test_assignment_column_invalid_assign_function_call  s
   "zBTestOperations.test_assignment_column_invalid_assign_function_callc                 C  sT   t tjddtdd}| }|d |d  |d< |jddd	 t|| d S )
NrA   rI   r  r   r   r   	a = a + bTinplace	r   r9   rJ   rL   rd  copyrg   rh   r   rj   r   ro   r)   r)   r*   &test_assignment_single_assign_existing  
   z5TestOperations.test_assignment_single_assign_existingc                 C  sT   t tjddtdd}| }|d |d  |d< |jdd	d
 t|| d S )NrA   rI   r  r   r   r   r>   	c = a + bTr  r  r  r)   r)   r*   !test_assignment_single_assign_new  r  z0TestOperations.test_assignment_single_assign_newc                 C  s\   t tjddtdd}| }d}|jddd | }d|d	  |d
< t|| d S )NrA   rI   r  r   rH   z	a = 1 + bTr  r   r   r  )rj   r   r   ro   r)   r)   r*   +test_assignment_single_assign_local_overlap  s   z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sd   t tjddtdd}d}|j }|jddd ||j }t	j
||jd	d
 |jd u s0J d S )NrA   rI   r  r   rH   r  Tr  Fcheck_names)r   r9   rJ   rL   rd  r   r  rg   r   rh   r   r   )rj   r   r   old_arp   r)   r)   r*   "test_assignment_single_assign_name  s   

z1TestOperations.test_assignment_single_assign_namec                 C  sj   t tjddtdd}|jddd d}tjt|d	 |d
 W d    d S 1 s.w   Y  d S )NrA   rI   r  r   r  Tr  z#can only assign a single expressionr_   z	c = a = b)	r   r9   rJ   rL   rd  rg   r!   rd   r   r   r)   r)   r*   test_assignment_multiple_raises  s   "z.TestOperations.test_assignment_multiple_raisesc                 C  s\   t tjddtdd}| jdd|i|dd | }|d	 |d
  |d< t|| d S )NrA   rI   r  r   zc = df.a + df.br   T)r|   targetr  r   r   r>   	r   r9   rJ   rL   rd  rg   r  rh   r   r  r)   r)   r*   test_assignment_explicit  s
   z'TestOperations.test_assignment_explicitc                 C  s:   t dgdgd}|d}tdg}tj||dd d S )N   ir   r   za in [11, -32]TFr  )r   rg   r   rh   r   r  r)   r)   r*   test_column_in  s   

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r   c                 C  s`   t tjddtdd}|jddd}|d usJ | }|d |d	  |d
< t|| d S )NrA   rI   r  r   r  Fr  r   r   r>   r  )rj   r   actualro   r)   r)   r*   test_assignment_not_inplace  s   z*TestOperations.test_assignment_not_inplacec                 C  s   t g dg dd}| }|d |d  |d< |d |d  |d< |jdd	d
}t|| |d u s6J |d d |d< |d d |d< |jdd	d
}t|| |d u sYJ d}tjt|d |jddd
 W d    d S 1 suw   Y  d S )NrH   rI   r   rD  rA   r~  r  r   r   r>   d$
        c = a + b
        d = c + bTr  rH   rI   r?   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containr_   z(
            a = b + 2
            b - 2F)r   r  rg   rh   r   r!   rd   r6   )rj   r   ro   answerrk   r)   r)   r*   test_multi_line_expression  s2   "z)TestOperations.test_multi_line_expressionc                 C  s   t g dg dd}| }|d |d  |d< |d |d  |d< |jdd	d
}t|| |d d |d< |d d |d< |jdd	d
}t|| d S )Nr  r  r  r   r   r>   r  r  Fr  rH   rI   r?   r  r   r  rg   rh   r   r  r)   r)   r*   &test_multi_line_expression_not_inplace  s    z5TestOperations.test_multi_line_expression_not_inplacec                 C  sl   t g dg dd}| }d}|d | |d< |d | |d< |jdd	d
}t|| |d u s4J d S )Nr  r  r  rL  r   r>   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr  r  )rj   r   ro   	local_varr  r)   r)   r*   )test_multi_line_expression_local_variable'  s   z8TestOperations.test_multi_line_expression_local_variablec                 C  s|   t g dg dd}dd }| }|d |dd |d	< |d	 |dd |d
< |jddd}t|| |d u s<J d S )Nr  r  r  c                 S     |S r.   r)   r  r)   r)   r*   
local_func=     zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr   rH   rL  r>   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr  r  rj   r   r  ro   r  r)   r)   r*   2test_multi_line_expression_callable_local_variable9  s   zATestOperations.test_multi_line_expression_callable_local_variablec                 C  s   t g dg dd}dd }| }|d |ddd	 |d
< |d
 |ddd	 |d< |jddd}t|| |d u s>J d S )Nr  r  r  c                 S  r  r.   r)   r  r)   r)   r*   r  Q  r  zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   rL  rH   )r   r   r>   r  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Tr  r  r  r)   r)   r*   >test_multi_line_expression_callable_local_variable_with_kwargsM  s   zMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc                 C  sj   t g dg dd}| }d}tjt|d |d W d    n1 s(w   Y  t|| d S )Nr  r  r  r  r_   za = 1)r   r  r!   rd   r6   r   rh   r   )rj   r   df_origrk   r)   r)   r*   test_assignment_in_querya  s   z'TestOperations.test_assignment_in_queryc                 C  st   t g dg dd}| }||d dk }|jddd t|| i }dd	i}| jd
|dd t|| d S )Nr  r  r  r   rI   za == 2Tr  r   	a = 1 + 2r  r  )r   r  r   rh   r   rg   assert_dict_equalr  r)   r)   r*   test_query_inplacej  s   z!TestOperations.test_query_inplaceinvalid_targetrH   catrI   rH   r   zignore::FutureWarningc                 C  s   d}d}t jt|d | j||dd W d    n1 sw   Y  t|drJt jt|d | j||dd W d    d S 1 sCw   Y  d S d S )Nz)Cannot assign expression output to targetr  r_   Tr  r  F)r!   rd   r6   rg   hasattrrj   r  rk   
expressionr)   r)   r*   test_cannot_item_assignx  s   
"z&TestOperations.test_cannot_item_assign)rH   r  r  c                 C  sL   d}d}t jt|d | j||dd W d    d S 1 sw   Y  d S )Nz"Cannot return a copy of the targetr  r_   Fr  )r!   rd   r6   rg   r  r)   r)   r*   test_cannot_copy_item  s
   "z$TestOperations.test_cannot_copy_itemr  c                 C  sd   d}| j ||dddksJ d}tjt|d | j ||dd W d    d S 1 s+w   Y  d S )N1 + 2Fr  r   z0Cannot operate inplace if there is no assignmentr_   T)rg   r!   rd   r6   )rj   r  r  rk   r)   r)   r*   test_inplace_no_assignment  s   "z)TestOperations.test_inplace_no_assignmentc                 C  sR   t jddtddd}|dk }| jdd|id}|dk }t || t || d S )NrI   pr)  r  r.  r3  r=  r   r  rh   r  r  rg   r   )rj   r   r?   rr   r)   r)   r*   *test_basic_period_index_boolean_expression  s   z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sB   t jddtddd}| jdd|id}||dk  }t || d S )	NrI   r  r)  r  zdf[df < 2 + 3]r   r  rA   r  rj   r   r  r?   r)   r)   r*   ,test_basic_period_index_subscript_expression  s   z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sR   t jddtddd}| jdd|id}|||dk  dk  |d  }t || d S )NrI   r  r)  r  zdf[df[df < 2] < 2] + df * 2r   r  r  r  r)   r)   r*   -test_nested_period_index_subscript_expression  s   z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sV   t tjdd}tddd|d< | jdd|i||d}|jd	k }tj||d
d d S )NrA   r   z1/1/2012)periodsdates1zdf.dates1 < 20130101r   r   20130101Fr  )	r   r9   rJ   rL   r   rg   r  rh   r   )rj   r(   r2   r   r   rt  r)   r)   r*   test_date_boolean  s   
z TestOperations.test_date_booleanc                 C  s  |dkr~t jd||d}|sJ t jd||d}|sJ t jd||d}|r(J t jd||d}|s4J t jd||d}|s@J t jd||d}|sLJ t jd	||d}|sXJ t jd
||d}|sdJ t jd||d}|rpJ t jd||d}|s|J d S d}tjt|d t jd||d W d    n1 sw   Y  tjt|d t jd||d W d    n1 sw   Y  tjt|d t jd||d W d    n1 sw   Y  tjt|d t jd||d W d    n1 sw   Y  d}tjt|d t jd||d W d    n	1 sw   Y  tjt|d t jd||d W d    d S 1 s:w   Y  d S )NrZ   z1 in [1, 2]rc   z2 in (1, 2)z3 in (1, 2)z3 not in (1, 2)z[3] not in (1, 2)z[3] in ([3], 2)z[[3]] in [[[3]], 2]z(3,) in [(3,), 2]z(3,) not in [(3,), 2]z[(3,)] in [[(3,)], 2]z'In' nodes are not implementedr_   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))rf   rg   r!   rd   re   )rj   r(   r2   r   rk   r)   r)   r*   test_simple_in_ops  sR   $z!TestOperations.test_simple_in_opsc                 C  s2   d}d d}d}tj|||d}||ksJ d S )NrH   z * !aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarc   )r}   rf   rg   )rj   r(   r2   r   r   ro   r   r)   r)   r*   test_check_many_exprs  s
   
z$TestOperations.test_check_many_exprsr   )zdf > 2 and df > 3zdf > 2 or df > 3z
not df > 2c                 C  s   t tjdd}|dkr:d}d|v rd}tjt|d tj|d|i||d	 W d    d S 1 s3w   Y  d S tj|d|i||d	 d S )
NrA   r   rZ   r^   not'Not' nodes are not implementedr_   r   )r|   r2   r(   	r   r9   rJ   rL   r!   rd   re   rf   rg   )rj   r   r(   r2   r   rk   r)   r)   r*   test_fails_and_or_not  s&   	"	
z$TestOperations.test_fails_and_or_notcharry   r   c                 C  s   t tjdd}d| d}|dkr7d}tjt|d tj|||d W d    d S 1 s0w   Y  d S tj|||d d S )	NrA   r   z(df + 2)[df > 1] > 0 z	 (df > 0)rZ   z$cannot evaluate scalar only bool opsr_   r   r  )rj   r  r(   r2   r   rl   rk   r)   r)   r*   test_fails_ampersand_pipe  s   "z(TestOperations.test_fails_ampersand_pipeN)5r   r  r  rg   rv  r!   r#   r  r   r  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r9   r   re  r  r  r  r  r  r  r  r  r  r  r  r)   r)   r)   r*   rf    st    #"

	
%	 

&
	
/
rf  c                   @  s   e Zd Zdd Zdd Zejdedd Z	dd	 Z
d
d Zejdejejfejejfejejfejejfejejejejdgdd Zdd Zdd ZdS )TestMathc                 O  rg  rh  rj  rl  r)   r)   r*   rg     rm  zTestMath.evalc                 C  s   t dtjdi}|j}|}| d}| |}tjdd tt||}W d    n1 s1w   Y  tj	||dd d S )Nr   rF   z(a)ignoreallFr  )
r   r9   rJ   rL   r   rg   errstaterH  rh   r   )rj   r4   r   r   fnr   gotr   r)   r)   r*   test_unary_functions   s   

zTestMath.test_unary_functionsr  c                 C  s   t tjdtjdd}|j}|j}| d}| |}tjdd tt|||}W d    n1 s8w   Y  t	j
||dd d S )NrF   r  z(a, b)r  r  Fr  )r   r9   rJ   rL   r   r   rg   r  rH  rh   r   )rj   r  r   r   r   r   r  r   r)   r)   r*   test_binary_functions,  s   

zTestMath.test_binary_functionsc                 C  s`   t tjdtjdd}|jd||dd |j}tt|j|j	}t
j||dd d S )NrF   r  ze = arctan2(sin(a), b)Tr(   r2   r  Fr  )r   r9   rJ   rL   rg   r?   arctan2sinr   r   rh   r   rj   r(   r2   r   r  r   r)   r)   r*   test_df_use_case8  s   zTestMath.test_df_use_casec                 C  s\   t tjdtjdd}|jd||dd |j}t|j|j }t	j
||dd d S )NrF   r  ze = sin(a + b)Tr  Fr  )r   r9   rJ   rL   rg   r?   r  r   r   rh   r   r  r)   r)   r*    test_df_arithmetic_subexpressionD  s
   z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper   c                 C  s   t dtjd|i}|jj|ksJ |jd||dd |j}t	|j}|j|jks/J ||jks6J t
j||dd d S )Nr   rF   z
b = sin(a)Tr  Fr  )r   r9   rJ   rL   r   r   r   rg   r   r  rh   r   )rj   r   expect_dtyper(   r2   r   r  r   r)   r)   r*   test_result_typesK  s   zTestMath.test_result_typesc                 C  \   t dtjdi}d}tjt|d |jd||d W d    d S 1 s'w   Y  d S )Nr   rF   z#"mysin" is not a supported functionr_   zmysin(a)rc   )r   r9   rJ   rL   r!   rd   r6   rg   rj   r(   r2   r   rk   r)   r)   r*   test_undefined_funcd  
   "zTestMath.test_undefined_funcc                 C  r  )Nr   rF   z1Function "sin" does not support keyword argumentsr_   zsin(x=a)rc   )r   r9   rJ   rL   r!   rd   r~   rg   r  r)   r)   r*   test_keyword_argk  r  zTestMath.test_keyword_argN)r   r  r  rg   r  r!   r#   r  r   r  r  r   r9   int32r   int64r
  r"   
complex128r%   r	  r  r  r  r)   r)   r)   r*   r    s&    






r  rF   c                   @  s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	TestScopec                 C  s$   d}t td tj|||d d S )N
_var_s * 2rI   rc   )rh   r   _var_srf   rg   )rj   r(   r2   r?   r)   r)   r*   test_global_scopew  s   zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks J d S )NrH   x + 1r   lcls)rP  r  rf   rg   rk  )rj   r(   r2   r   r  lcls2r)   r)   r*   test_no_new_locals}  s   


zTestScope.test_no_new_localsc                 C  s8   d}t   }tjd||d t   }||ksJ d S )NrH   r  rc   )globalsr  rf   rg   )rj   r(   r2   r   gblsgbls2r)   r)   r*   test_no_new_globals  s
   

zTestScope.test_no_new_globalsc                 C  sN   d}d}t jt|d tjd||i d W d    d S 1 s w   Y  d S )NrH   r  r_   r  r{   r!   rd   r   rf   rg   )rj   r(   r2   r   rk   r)   r)   r*   test_empty_locals  
   "zTestScope.test_empty_localsc                 C  sN   d}d}t jt|d tj|||i d W d    d S 1 s w   Y  d S )Nzname '_var_s' is not definedr  r_   )r(   r2   global_dictr  )rj   r(   r2   rk   r?   r)   r)   r*   test_empty_globals  r  zTestScope.test_empty_globalsN)r   r  r  r  r  r  r  r  r)   r)   r)   r*   r  v  s    r  c                  C  N   d} t jt| d tjdddddd W d    d S 1 s w   Y  d S )	NzInvalid engine 'asdf' passedr_   r  rH   rI   r  asdf)r|   r(   r!   rd   KeyErrorrf   rg   rk   r)   r)   r*   test_invalid_engine     "r!  )use_numexprro   ))Tr   )FrZ   c                 C  sR   ddl m} td|  |d }||ksJ W d    d S 1 s"w   Y  d S )Nr   )_check_enginecompute.use_numexpr)pandas.core.computation.evalr$  rf   option_context)r#  ro   r$  rp   r)   r)   r*   test_numexpr_option_respected  s
   
"r(  c                  C  s|   t dd. tg dg dd} | d}td d gddgdd	dgd
}t|| W d    d S 1 s7w   Y  d S )Nr%  F)TFTFNN)rH   rI   r   rD  rA   r~  )r   Bz
A.isnull()rA   r~  rD  )r   )rf   r'  r   r   rh   r   )r   rp   ro   r)   r)   r*   #test_numexpr_option_incompatible_op  s   
"r*  c                  C  r  )	NzInvalid parser 'asdf' passedr_   r  rH   rI   r  r  )r|   r2   r  r   r)   r)   r*   test_invalid_parser  r"  r+  )rZ   r   r   z dict[str, type[BaseExprVisitor]]_parsersc              	   C  sb   t | }|d| |}|jD ]!}d}tjt|d t||  W d    n1 s)w   Y  qd S )Nr  znodes are not implementedr_   )r,  unsupported_nodesr!   rd   re   rH  )r(   r2   VisitorClassinstrs  rk   r)   r)   r*   test_disallowed_nodes  s   
r0  c                 C  sH   d}t jtdd tj|| |d W d    d S 1 sw   Y  d S )Nzs +r  r_   rc   r!   rd   r   rf   rg   )r(   r2   r?   r)   r)   r*   test_syntax_error_exprs  s   "r2  c                 C  sL   d}d}t jt|d tj|| |d W d    d S 1 sw   Y  d S )Nzs + tzname 's' is not definedr_   rc   )r!   rd   r  rf   rg   )r(   r2   r?   rk   r)   r)   r*   test_name_error_exprs  s
   "r3  express)za + @bz@a + bz@a + @bc                 C  s   d\}}|dkr*t jtdd tj|| |d W d    d S 1 s#w   Y  d S t jtdd tj|| |d W d    d S 1 sEw   Y  d S )NrH   rI   r   zThe '@' prefix is onlyr_   rc   zThe '@' prefix is notr1  )r(   r2   r4  r   r   r)   r)   r*   %test_invalid_local_variable_reference  s   ""r6  c                 C  s|   d\}}| dkr,d}t jt|d tjd| |d W d    d S 1 s%w   Y  d S tjd| |d}||| ks<J d S )Nr5  r   zVariables in expression .+r_   zsin + dotted_linerc   )r!   rd   r   rf   rg   )r(   r2   r  dotted_linerk   r   r)   r)   r*   test_numexpr_builtin_raises  s   "r8  c                 C  sJ   d}t jtdd tjd|| |d W d    d S 1 sw   Y  d S )N)*   g      @zResolver of type .+r_   r  )	resolversr(   r2   r   )r(   r2   cannot_resolver)   r)   r*   test_bad_resolver_raises  s   "r<  c                 C  D   t jtdd tjd| |d W d    d S 1 sw   Y  d S )Nzexpr cannot be an empty stringr_    rc   r!   rd   r6   rf   rg   rc   r)   r)   r*   test_empty_string_raises  s   "r@  c                 C  r=  )Nz#only a single expression is allowedr_   z1 + 1; 2 + 2rc   r1  rc   r)   r)   r*   $test_more_than_one_expression_raises
  s   "rA  cmpr[   r=   c              	   C  s   t dd ttjji}||   }||   } ||  }d| d| d}d| d| d}d| d| d	}	|||	fD ]#}
d
}tjt|d tj	|
||d W d    n1 sWw   Y  q9d S )Nc                   S  s   t jdS )NrF   )r9   rJ   r   r)   r)   r)   r*   r     r   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rw   r   rx   r   ra   r   rb   r   r_   rc   )
intrD   r9   rJ   rL   r!   rd   re   rf   rg   )r;   rB  r=   r(   r2   genr   r   r   r   rl   rk   r)   r)   r*   test_bool_ops_fails_on_scalars  s   


rE  otherz'x'z...c                 C  sJ   t dg di}|d|  }tg ddd}trd |_t|| d S )Nr   )r   r   r>   r   )FFFr   )r   rg   r   r   r   rh   r   )rF  r   rp   ro   r)   r)   r*   test_equals_various"  s   rH  c                 C  s*   d}t j}tj|| |d}||ksJ d S )Nzinf + 1rc   )r9   infrf   rg   )r(   r2   r  ro   rp   r)   r)   r*   test_inf4  s   rJ  c                 C  s   d}t t}tjd| |dd W d    n1 sw   Y  t|dks(J |t|d jv s3J t t}tjd| |dd W d    n1 sLw   Y  t|dksYJ |t|d jv sdJ d S )Nz0The `truediv` parameter in pd.eval is deprecatedz1+1T)r(   r2   r  rH   r   F)rh   r:  r  rf   rg   rY  r7   rZ  )r(   r2   r`   mr)   r)   r*   test_truediv_deprecated;  s   rL  columnu	   Temp(°C)u   Capacitance(μF)c                 C  sT   t tjdd|dgd}||| dk }d| d}|j|| d}t|| d S )NrA   rI   r   r   `z` > 5)r(   )r   r9   rJ   rL   r   rh   r   )r(   rM  r   ro   query_stringrp   r)   r)   r*   test_query_tokenL  s
   rP  c                 C  s   t ddgddggddgd}||jdk  }|jd| |d	}t|| |d
krLd}tjt|d |jd| |d	 W d    d S 1 sEw   Y  d S |jd| |d	}t|| d S )Nr   rF   rH   r4  r  countr   z
~(cat > 0)rc   rZ   r  r_   znot (cat > 0))r   r  r   rh   r   r!   rd   re   )r(   r2   r   ro   rp   rk   r)   r)   r*   test_negate_lt_eq_leV  s   "rR  c                 C  st   |dv r| j tjjtd| d ttjj	dddd|dgd	}||| d
k }|
| d}t|| d S )N)TrueFalserI  Infz+GH 47859 DataFrame eval not supported with )rd   r   r   d   )rF   rI   r   col1r   r~  z>6)r   r   r!   r#   r   r  r   r9   rJ   r   r   rh   r   )r1   rM  r   ro   rp   r)   r)   r*    test_eval_no_support_column_namef  s   rX  c                 C  s   t g dg dg dd}|d d  }|d }|jddd t g d	g dg dd}t|| | sIt||d  t|d |d  d S tg ddd
}t|| t|d | d S )Nr  r  )rL     	   )r   r)  Cr   z	A = B + CTr  )r        rG  )r   rg   rh   r   r   r   )using_copy_on_writer   result_viewrV  ro   r)   r)   r*   test_set_inplace{  s   r`  c                   @  s.   e Zd Zejdddg ddgdd ZdS )	TestValidatevaluerH   rS  r  g      @c                 C  sF   d}t jt|d tjd|d W d    d S 1 sw   Y  d S )Nz8For argument "inplace" expected type bool, received typer_   z2+2r  r?  )rj   rb  rk   r)   r)   r*   test_validate_bool_args  s   "z$TestValidate.test_validate_bool_argsN)r   r  r  r!   r#   r  rc  r)   r)   r)   r*   ra    s    ra  )k
__future__r   	functoolsr   	itertoolsr   r"  rJ   r6  numpyr9   r!   pandas.errorsr   r   r   pandas.util._test_decoratorsutil_test_decoratorsr%   pandas.core.dtypes.commonr   r	   r
   r   r   rf   r   r   r   pandas._testing_testingrh   pandas.core.computationr   pandas.core.computation.enginesr   pandas.core.computation.exprcorecomputationr   r   r   r   #pandas.core.computation.expressionsr   r   pandas.core.computation.opsr   r   r   r   r   pandas.core.computation.scoper   fixturer(   PARSERSr2   rd  r4   r@   ranger;   r=   r   rO   r  r  r'  r(  rf  r  rL   r  r  r&   r!  r#   r  r(  r*  r+  PyTablesExprVisitorr,  __annotations__r0  r2  r3  r6  r8  r<  r@  rA  rC  rD   rE  rH  rJ  rL  rP  rR  keysrX  &skip_array_manager_not_yet_implementedr`  ra  r)   r)   r)   r*   <module>   s    




    O      ,X%
	




	

