o
    d                    @  sn  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"m#Z# d d	l$m%Z% d d
l&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 ej5dd e%D ddd Z6ej5e"j7ddd Z8dd Z9ej5e:e;dg dddd Z<e<Z=e<Z>G dd dZ?dd Z@G d d! d!ZAd"d# ZBG d$d% d%ZCG d&d' d'ZDG d(d) d)ZEe
jFd*ZGG d+d, d,ZHejId-d. ZJejIejKLd/d0d1d2 ZMejId3d4 ZNejId5d6 ZOe)e#jPe(d7ZQd8eRd9< ejKLde%ejKLdeQd:d; ZSd<d= ZTd>d? ZUejKLd@g dAdBdC ZVdDdE ZWdFdG ZXdHdI ZYdJdK ZZejKLdLdMejKLde[e\fejKLdNe[e\fdOdP Z]ejKLdQdRdSgdTdU Z^dVdW Z_ejKLdXdYdZgd[d\ Z`d]d^ ZaejKLdXe4b d_d` Zcdadb ZdG dcdd ddZedS )e    )annotations)reduce)productN)NumExprClobberingErrorPerformanceWarningUndefinedVariableError)is_boolis_floatis_list_like	is_scalar)	DataFrameSeries
date_range)expr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*   g/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/pandas/tests/computation/test_eval.py	<genexpr>:   s    
r,   )paramsc                 C     | j S Nr#   requestr*   r*   r+   r)   9   s   r)   c                 C  r.   r/   r0   r1   r*   r*   r+   parserM   s   r3   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_binR   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
   r@         ?      )r   r8   randomrandr9   randnr   r#   )r2   nan_df1optsr*   r*   r+   r:   a   s   
r:   c                
   @  s@  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*d<d= Z+ejd>d?d@dA Z,dBdC Z-dDdE Z.dFdG Z/dHdI Z0dJdK Z1dLdM Z2dNS )OTestEvalr;   )z!=z==z<=z>=<>)neeqlegeltgt)rD   cmp2rP   rO   rV   rU   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)   r3   )r"   raisesNotImplementedErrorpdevalr?   tmassert_equal)selfr;   rW   rX   r:   r<   r)   r3   msgexlhs_newrhs_newexpectedresultr*   r*   r+   test_complex_cmp_opsx   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   rY   innot in&'(In|NotIn)' nodes are not implementedr^   lhs  rhsrb   |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)   r3   
local_dict)r"   rc   rd   re   rf   joinr
   	TypeErrorr?   rg   rh   )
ri   rq   r:   r<   r)   r3   rj   rk   rn   ro   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 )NrY   rr   ru   r^   z~(lhs ra   rb   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   rs   rt   rx   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 iterablery   rz   c                 S  s   t | gS r/   )r8   arrayxr*   r*   r+   <lambda>       z2TestEval.test_compound_invert_op.<locals>.<lambda>)r"   rc   rd   re   rf   r	   r$   xfailnode
add_markerr|   r   r}   mapr?   rg   assert_almost_equal)ri   r   r:   r<   r2   r)   r3   rj   rk   r$   
skip_thesern   ro   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 )NrY   rv    mid rw   r]   r^   rb    mid and mid r`    mid) & (mid ra   &)r"   rc   rd   re   rf   r?   rg   r   )ri   r;   rW   r:   midhsr<   r)   r3   midex1rj   rl   rm   ex2ex3rn   rk   ro   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 )	Nrv   rw   rb   z rhs r   r   znlhs z ghs)re   rf   r?   rg   r   alignr5   r}   AttributeErrorr   evaluatevalues)ri   r   r:   r<   r)   r3   rk   ro   rn   nlhsghsrQ   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 % rhsrb   r   r   zexpected % rhs%)re   rf   rg   r   r   r   
isinstancer   r   r   itemr?   )	ri   r:   r<   r)   r3   rk   ro   rn   rQ   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 // rhsrY   rb   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'r^   ry   r{   r)   r3   )re   rf   rg   rh   r"   rc   r}   )	ri   r:   r<   r)   r3   rk   resrn   rj   r*   r*   r+   test_floor_division4  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**rb   z-(DataFrame.columns|numpy array) are differentr^   z(lhs ** rhs) ** rhs)r?   re   rf   r   r   complexr8   complexfloatingisnanr"   rc   AssertionErrorrg   assert_numpy_array_equalr   )
ri   r:   r<   r)   r3   rk   rn   ro   rj   middler*   r*   r+   test_powH  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~elbrb   )	astypeboolr   r8   r   re   rf   rg   r   )ri   r:   r)   r3   elbrn   ro   r*   r*   r+   test_check_single_invert_opb  s   z$TestEval.test_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~lhsr@   rH   r   -couldn't find matching opcode for 'invert_dd'r^   rb   0ufunc 'invert' not supported for the input typesr@   rH   size)couldn't find matching opcode for 'invertrF   arG   g       @   )br=   unknown type object#bad operand type for unary ~: 'str')r   r8   rI   rK   r"   rc   rd   re   rf   r}   randintrg   assert_frame_equalrJ   r5   )ri   r)   r3   r   r:   rj   expectro   r*   r*   r+   test_frame_invertl  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   r@   r   r   r^   rb   r   r   r   rF   r   r   r   )r   r8   rI   rK   r"   rc   rd   re   rf   r}   r   rg   assert_series_equalrJ   r5   )ri   r)   r3   r   r:   rj   ro   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-lhsr@   rH   rb   r   r   rF   r   *couldn't find matching opcode for 'neg_bb'r^   )r   r8   rI   rK   re   rf   rg   r   r   rJ   r"   rc   rd   ri   r)   r3   r   r:   r   ro   rj   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   r@   rb   r   rF   r   r   r^   )r   r8   rI   rK   re   rf   rg   r   r   rJ   r"   rc   rd   r   r*   r*   r+   test_series_negate  s$   "zTestEval.test_series_negater:   r@   rH   r   r   rF   c                 C  (   d}|}t j|||d}t|| d S Nz+lhsrb   )re   rf   rg   r   ri   r:   r)   r3   r   r   ro   r*   r*   r+   test_frame_pos     zTestEval.test_frame_posc                 C  r   r   )re   rf   rg   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.0rb   z-1.0r3   r)   g      z+1.0g      ?z~1z-1z+1rG   z~Truez~Falsez-Truez-Falser   z+Truez+Falser"   rc   r}   re   rf   )ri   r)   r3   rj   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   rG   r   Fr   r   i%   ir   )r8   r   re   rf   object_rg   r   )ri   ro   rn   r*   r*   r+   test_unary_in_array/  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   r8   r   rf   r   )ri   r   r   dfr   r*   r*   r+   test_float_comparison_bin_opN  s   
z%TestEval.test_float_comparison_bin_opc                 C  sl   t dddtjgi}|d}|jd}tj||t d |d}|jj	ddd}tj||t d d S )	Nr   r   rG   zx.fillna(-1)r   check_nameszx.shift(1, fill_value=-1))
fill_value)
r   r8   r9   rf   r   fillnarg   r   r   shiftri   r   ro   rn   r*   r*   r+   test_unary_in_functionV  s   

zTestEval.test_unary_in_functionrk   )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   rG   rH   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notr^   rb   )	r8   rI   rK   r   r"   rc   rd   re   rf   )	ri   rk   r)   r3   r   r   r   r   rj   r*   r*   r+   test_disallow_scalar_bool_opsd  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 )NrG   r   rb   g      ?F)rG   )	re   rf   r   r   r8   r   rg   r   shape)ri   r)   r3   r   ro   r*   r*   r+   test_identicalx  s2   zTestEval.test_identicalc                 C  s$   d}t j|||d}|dksJ d S )Nz1 + 2 *         5 - 1 + 2 rb      re   rf   )ri   r)   r3   expro   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.006rb   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > rG   rH   r   A == )
re   rf   r8   float64r   queryemptylocrg   r   )	ri   r)   r3   r   ro   rn   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"   rc   SyntaxErrorr   indexnameri   r   rj   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   )ri   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   re   rf   r6   r_   r   )ri   eventr*   r*   r+   test_and_logic_string_match  s   ,z$TestEval.test_and_logic_string_matchN)3__name__
__module____qualname__r"   r$   parametrizer   BOOL_OPS_SYMSrp   CMP_OPS_SYMSr~   r   r   sortedsetr   
differencer   r   r   r   r&   skip_if_windowsr   r   r   r   r   r   r   r8   rI   rK   r   rJ   r   r   r   r   r   float32r   r   r   r   r   r   r   r   r   r  r*   r*   r*   r+   rN   w   s|    
"
3
 

+/


!rN   c                  O  s
   t j S r/   )r8   rI   rK   )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 )Nr@   r   )
data_gen_fr    rb   )rg   makeCustomDataframefre   rf   r   r   r   )ri   r)   r3   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  r8   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   typer8   
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 * ~2r@   r   )r  rb   )rg   r  r  re   rf   r   )ri   r)   r3   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alwaysrE   r  
r_idx_typer2     zdf + df2rb   warningscatch_warningssimplefilterRuntimeWarningrg   r  r  r+  r   assert_produces_warningre   rf   r   )	ri   r)   r3   r0  r1  r2  r   df2r   r*   r*   r+   test_basic_frame_alignment  s    

"z(TestAlignment.test_basic_frame_alignmentr7  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 )NrE   r6  df < 2rb   rH   )r   r   zdf < df3)rg   r  r  re   rf   r   r   r8   rI   rK   r   r   r   )ri   r)   r3   r7  r2  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 )NTr3  r5  r   rH   r6     r@   zdf + df2 + df3rb   r9  )ri   r)   r3   rD  rE  rF  rG  r   r?  rB  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 )NTr3  r5  rE   r6  r@   df + srb   r  r   )r:  r;  r<  r=  rg   r  r  getattrr   r8   rI   rK   r+  r   r>  re   rf   addr   )ri   r)   r3   rJ  r7  r2  r   r   r  r   rn   r*   r*   r+   !test_basic_frame_series_alignment8  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v 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   rY   r   r-  r  z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r   strictrE      r6  r@   zs + dfrb   r  )r   r   r"   r$   r   rg   r  r  rL  r   r8   rI   rK   r+  r   r>  r=  re   rf   rM  r   )ri   r2   r)   r3   rJ  r7  r2  r   r   r   r  r   rn   r*   r*   r+   !test_basic_series_frame_alignmentR  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 )NTr3  r5  rE   r6  r@   zs z dfzdf z srb   r  r   )r:  r;  r<  r=  rg   r  r  rL  r   r8   rI   rK   r+  r   r>  re   rf   r   )ri   r)   r3   rJ  r   r7  r2  r   r   r  r:   r<   r   r   r*   r*   r+   test_series_frame_commutativityy  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   r@   rH   Tr3  r5  r   r   r   r?  r6  r  r   zdf2 + ser + dfrb   )r:  r;  r<  r=  rI   choicerg   r  r  rL  localsgetr   r8   rK   rM  r+  r   r>  re   rf   r   r   )ri   r)   r3   rD  rE  rF  rG  nm1m2rJ  obj_namer   r?  r   ser	expected2rn   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  rE   i'  r   FrK  rb   rY   rG   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   r8   rI   rK   r   r   rg   r>  re   rf   lenr6   messagelog10r   r   )ri   r)   r3   r   r  seenis_python_enginewrnwrj   loggedrn   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@  rC  rI  rN  listr   filterwarningsrQ  rR  r\  re  r*   r*   r*   r+   r,    sL    

!,r,  c                
   @  sB  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ejjd0d1d2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%ejdBdCdDdCdEge&'g dFgdGdH Z(ejdBg dIdJdK Z)ejdLdCdDdCdEge&'g dFdCdEigdMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0ejd[g d\d]d^ Z1ejd_d`dagdbdc Z2ddS )eTestOperationsc                 O  $   | ddd |d< tj|i |S Nlevelr   rG   popre   rf   ri   r  r  r*   r*   r+   rf        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 )NrY   rs   rt   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*   rr  r*   r*   r+   r,   	  s    z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rr   z&argument of type 'int' is not iterabler^   rb   rG   r   r   )	r   r   r	  r"   rc   r}   re   rf   r?   )ri   r)   r3   	arith_opsopsr   rk   r   r   rj   expecr   yr*   rs  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  rY   rZ   r]   r^   r3   r"   rc   rd   rf   ri   r<   r:   r   rk   rj   r   r   r*   r*   r+   test_simple_bool_ops!     

z#TestOperations.test_simple_bool_opsc                 C  r{  r|  r}  r~  r*   r*   r+   test_bool_ops_with_constants1  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   rH  r@      rE   z?N-dimensional objects, where N > 2, are not supported with evalr^   x + yr   ry  r{   )r8   rI   rK   r   r"   rc   rd   rf   )ri   r   ry  rj   r*   r*   r+   test_4d_ndarray_failsA  s   "z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1rG   )rf   )ri   r   r*   r*   r+   test_constantH  s   
zTestOperations.test_constantc                 C  s4   t tjdd}| jdd|id}t|| d S )NrE   rH   r   r  r   r8   rI   rK   rf   rg   r   )ri   r   r?  r*   r*   r+   test_single_variableL  s   z#TestOperations.test_single_variablec                 C  sP   t tjdd}tjtdd | d W d    d S 1 s!w   Y  d S )Nr@   r   name 'x' is not definedr^   zdf[x > 2] > 2)r   r8   rI   rK   r"   rc   	NameErrorrf   ri   r   r*   r*   r+   &test_failing_subscript_with_name_errorQ  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 )Nr@   r   z(df + 1)[df > 2]r   r  rG   rH   r  r   r*   r*   r+   test_lhs_expression_subscriptV  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 )Nr@   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   r8   rI   rK   rh  r   r   r=   ziprg   r   rf   )ri   r   expr1expec1expr2expec2expr3expec3exprsexpecsr>   rx  r*   r*   r+   test_attr_expression\  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 )
Nr@   r   r  r   zdf = df2%cannot assign without a target objectr^   )r   r?  r  )	r   r8   rI   rK   rh  r"   rc   r5   rf   )ri   r   r?  r  rj   r*   r*   r+   test_assignment_failsi  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 )Nr@   rH   abr   invalid syntaxr^   zd c = a + b	r   r8   rI   rK   rh  r"   rc   r   rf   r  r*   r*   r+   %test_assignment_column_multiple_raiseq  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 )Nr@   rH   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_assignw  s
   "z4TestOperations.test_assignment_column_invalid_assignc                 C  r  )Nr@   rH   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 )
Nr@   rH   r  r   r   r   	a = a + bTinplace	r   r8   rI   rK   rh  copyrf   rg   r   ri   r   rn   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 )Nr@   rH   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 )Nr@   rH   r  r   rG   z	a = 1 + bTr  r   r   r  )ri   r   r   rn   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 )Nr@   rH   r  r   rG   r  Tr  Fr   )r   r8   rI   rK   rh  r   r  rf   r   rg   r   r   )ri   r   r   old_aro   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 )Nr@   rH   r  r   r  Tr  z#can only assign a single expressionr^   z	c = a = b)	r   r8   rI   rK   rh  rf   r"   rc   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 )Nr@   rH   r  r   zc = df.a + df.br   T)r{   targetr  r   r   r=   	r   r8   rI   rK   rh  rf   r  rg   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   rf   r   rg   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 )Nr@   rH   r  r   r  Fr  r   r   r=   r  )ri   r   actualrn   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rG   rH   r   rH  r@   r  r  r   r   r=   d$
        c = a + b
        d = c + bTr  rG   rH   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  rf   rg   r   r"   rc   r5   )ri   r   rn   answerrj   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  rG   rH   r>   r  r   r  rf   rg   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  rP  r   r=   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr  r  )ri   r   rn   	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   rG   rP  r=   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr  r  ri   r   r  rn   r  r*   r*   r+   2test_multi_line_expression_callable_local_variable  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  5  r  zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   rP  rG   )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_kwargs1  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"   rc   r5   r   rg   r   )ri   r   df_origrj   r*   r*   r+   test_assignment_in_queryE  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   rH   za == 2Tr  r   	a = 1 + 2r  r  )r   r  r   rg   r   rf   assert_dict_equalr  r*   r*   r+   test_query_inplaceN  s   z!TestOperations.test_query_inplaceinvalid_targetrG   catrH   rG   r   c                 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"   rc   r5   rf   hasattrri   r  rj   
expressionr*   r*   r+   test_cannot_item_assign\  s   
"z&TestOperations.test_cannot_item_assign)rG   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"   rc   r5   rf   r  r*   r*   r+   test_cannot_copy_itemh  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)rf   r"   rc   r5   )ri   r  r  rj   r*   r*   r+   test_inplace_no_assignmentp  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 )NrH   pr-  r  r2  r7  rA  r   r  rg   r  r  rf   r   )ri   r   r>   rr   r*   r*   r+   *test_basic_period_index_boolean_expressionz  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 )	NrH   r  r-  r  zdf[df < 2 + 3]r   r  r@   r  ri   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 )NrH   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 )Nr@   r   z1/1/2012)periodsdates1zdf.dates1 < 20130101r   r   20130101Fr   )	r   r8   rI   rK   r   rf   r  rg   r   )ri   r)   r3   r   r   rx  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 )NrY   z1 in [1, 2]rb   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]]))re   rf   r"   rc   rd   )ri   r)   r3   r   rj   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 )NrG   z * !aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarb   )r|   re   rf   )ri   r)   r3   r   r   rn   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 )
Nr@   r   rY   r]   not'Not' nodes are not implementedr^   r   )r{   r3   r)   	r   r8   rI   rK   r"   rc   rd   re   rf   )ri   r   r)   r3   r   rj   r*   r*   r+   test_fails_and_or_not  s&   	"	
z$TestOperations.test_fails_and_or_notcharrx   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 )	Nr@   r   z(df + 2)[df > 1] > 0 z	 (df > 0)rY   z$cannot evaluate scalar only bool opsr^   r   r  )ri   r  r)   r3   r   rk   rj   r*   r*   r+   test_fails_ampersand_pipe  s   "z(TestOperations.test_fails_ampersand_pipeN)3r  r  r  rf   rz  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  r8   r   r  r  r  r  r  r  r  r  r  r  r  r*   r*   r*   r+   rj    sp    #

	
%	 

&
	
/
rj  c                   @  s   e Zd Zdd Zejje ddejde	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  rk  rl  rn  rp  r*   r*   r+   rf     rq  zTestMath.evalz&Unary ops only implemented for numexprr   fnc                 C  s|   t dtjdi}|j}| d}| |}tjdd tt||}W d    n1 s/w   Y  tj	||dd d S )Nr   rE   z(a)ignoreallFr   )
r   r8   rI   rK   r   rf   errstaterL  rg   r   )ri   r  r   r   r   gotr   r*   r*   r+   test_unary_functions  s   

zTestMath.test_unary_functionsc                 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 )NrE   r  z(a, b)r  r  Fr   )r   r8   rI   rK   r   r   rf   r  rL  rg   r   )ri   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 )NrE   r  ze = arctan2(sin(a), b)Tr)   r3   r  Fr   )r   r8   rI   rK   rf   r>   arctan2sinr   r   rg   r   ri   r)   r3   r   r  r   r*   r*   r+   test_df_use_case  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 )NrE   r  ze = sin(a + b)Tr  Fr   )r   r8   rI   rK   rf   r>   r  r   r   rg   r   r  r*   r*   r+    test_df_arithmetic_subexpression)  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   rE   z
b = sin(a)Tr  Fr   )r   r8   rI   rK   r   r   r   rf   r   r  rg   r   )ri   r   expect_dtyper)   r3   r   r  r   r*   r*   r+   test_result_types0  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   rE   z#"mysin" is not a supported functionr^   zmysin(a)rb   )r   r8   rI   rK   r"   rc   r5   rf   ri   r)   r3   r   rj   r*   r*   r+   test_undefined_funcI  
   "zTestMath.test_undefined_funcc                 C  r  )Nr   rE   z1Function "sin" does not support keyword argumentsr^   zsin(x=a)rb   )r   r8   rI   rK   r"   rc   r}   rf   r  r*   r*   r+   test_keyword_argP  r  zTestMath.test_keyword_argN)r  r  r  rf   r"   r$   r%   r   r  r   r  r   r  r  r  r8   int32r   int64r  r#   
complex128r&   r  r   r  r  r*   r*   r*   r+   r    s.    







r  rE   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 * 2rH   rb   )rg   r   _var_sre   rf   )ri   r)   r3   r>   r*   r*   r+   test_global_scope\  s   zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks J d S )NrG   x + 1r   lcls)rT  r  re   rf   ro  )ri   r)   r3   r   r  lcls2r*   r*   r+   test_no_new_localsb  s   


zTestScope.test_no_new_localsc                 C  s8   d}t   }tjd||d t   }||ksJ d S )NrG   r  rb   )globalsr  re   rf   )ri   r)   r3   r   gblsgbls2r*   r*   r+   test_no_new_globalsj  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 )NrG   r  r^   r  rz   r"   rc   r   re   rf   )ri   r)   r3   r   rj   r*   r*   r+   test_empty_localsq  
   "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)   r3   global_dictr  )ri   r)   r3   rj   r>   r*   r*   r+   test_empty_globalsx  r  zTestScope.test_empty_globalsN)r  r  r  r  r  r  r  r  r*   r*   r*   r+   r	  [  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  rG   rH   r  asdf)r{   r)   r"   rc   KeyErrorre   rf   rj   r*   r*   r+   test_invalid_engine     "r  )use_numexprrn   ))Tr   )FrY   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"  re   option_context)r!  rn   r"  ro   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)rG   rH   r   rH  r@   r  )r   Bz
A.isnull()r@   r  rH  )r   )re   r%  r   r   rg   r   )r   ro   rn   r*   r*   r+   #test_numexpr_option_incompatible_op  s   
"r(  c                  C  r  )	NzInvalid parser 'asdf' passedr^   r  rG   rH   r  r  )r{   r3   r  r  r*   r*   r+   test_invalid_parser  r   r)  )rY   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"   rc   rd   rL  )r)   r3   VisitorClassinstrw  rj   r*   r*   r+   test_disallowed_nodes  s   
r.  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^   rb   r"   rc   r   re   rf   )r)   r3   r>   r*   r*   r+   test_syntax_error_exprs  s   "r0  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^   rb   )r"   rc   r  re   rf   )r)   r3   r>   rj   r*   r*   r+   test_name_error_exprs  s
   "r1  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rG   rH   r   zThe '@' prefix is onlyr^   rb   zThe '@' prefix is notr/  )r)   r3   r2  r   r   r*   r*   r+   %test_invalid_local_variable_reference  s   ""r4  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 )Nr3  r   zVariables in expression .+r^   zsin + dotted_linerb   )r"   rc   r   re   rf   )r)   r3   r  dotted_linerj   r   r*   r*   r+   test_numexpr_builtin_raises  s   "r6  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)   r3   r   )r)   r3   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^    rb   r"   rc   r5   re   rf   rb   r*   r*   r+   test_empty_string_raises  s   "r>  c                 C  r;  )Nz#only a single expression is allowedr^   z1 + 1; 2 + 2rb   r/  rb   r*   r*   r+   $test_more_than_one_expression_raises  s   "r?  cmprZ   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 )NrE   )r8   rI   r   r*   r*   r*   r+   r     r   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rv   r   rw   r   r`   r   ra   r   r^   rb   )
intrC   r8   rI   rK   r"   rc   rd   re   rf   )r:   r@  r<   r)   r3   genr   r   r   r   rk   rj   r*   r*   r+   test_bool_ops_fails_on_scalars  s   


rC  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   rf   r   r   r   rg   r   )rD  r   ro   rn   r*   r*   r+   test_equals_various  s   rF  c                 C  s*   d}t j}tj|| |d}||ksJ d S )Nzinf + 1rb   )r8   infre   rf   )r)   r3   r  rn   ro   r*   r*   r+   test_inf  s   rH  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 )Nr@   rH   r   r   `z` > 5)r)   )r   r8   rI   rK   r   rg   r   )r)   rI  r   rn   query_stringro   r*   r*   r+   test_query_token  s
   rL  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   rE   rG   r8  r  countr   z
~(cat > 0)rb   rY   r  r^   znot (cat > 0))r   r  r   rg   r   r"   rc   rd   )r)   r3   r   rn   ro   rj   r*   r*   r+   test_negate_lt_eq_le)  s   "rN  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FalserG  Infz+GH 47859 DataFrame eval not supported with )rc   r   r   d   )rE   rH   r   col1r   r  z>6)r   r   r"   r$   r   r  r   r8   rI   r   r   rg   r   )r2   rI  r   rn   ro   r*   r*   r+    test_eval_no_support_column_name9  s   rT  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  )rP     	   )r   r'  Cr   z	A = B + CTr  )r        rE  )r   rf   rg   r   r   r   )using_copy_on_writer   result_viewrZ  rn   r*   r*   r+   test_set_inplaceN  s   r\  c                   @  s.   e Zd Zejdddg ddgdd ZdS )	TestValidatevaluerG   rO  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=  )ri   r^  rj   r*   r*   r+   test_validate_bool_argsb  s   "z$TestValidate.test_validate_bool_argsN)r  r  r  r"   r$   r  r_  r*   r*   r*   r+   r]  a  s    r]  )f
__future__r   	functoolsr   	itertoolsr   r&  rI   r:  numpyr8   r"   pandas.errorsr   r   r   pandas.util._test_decoratorsutil_test_decoratorsr&   pandas.core.dtypes.commonr   r	   r
   r   r   re   r   r   r   pandas._testing_testingrg   pandas.core.computationr   r   pandas.core.computation.enginesr   pandas.core.computation.exprr   r   r   #pandas.core.computation.expressionsr   r   pandas.core.computation.opsr   r   r   r   r   pandas.core.computation.scoper   fixturer)   PARSERSr3   r?   rh  ranger:   r<   r   rN   r  r  r+  r,  rj  r  rK   r  r	  r'   r  r$   r  r&  r(  r)  PyTablesExprVisitorr*  __annotations__r.  r0  r1  r4  r6  r:  r>  r?  rA  rC   rC  rF  rH  rL  rN  keysrT  r\  r]  r*   r*   r*   r+   <module>   s    



    \  	    	Z%
	





	
