o
    LDi                    @  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
mZ d dlm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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/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; edddZ<e	j=dd e*D ddd Z>e	j=e'j?ddd Z@dd ZAe	j=eBeCdg ddd d! ZDeDZEeDZFe	j=d"d# ZGG d$d% d%ZHG d&d' d'ZId(d) ZJG d*d+ d+ZKG d,d- d-ZLG d.d/ d/ZMejNOd0Pd1ZQG d2d3 d3ZReSdd4d5 ZTeSde	jUVd6d7d8d9 ZWeSdd:d; ZXeSdd<d= ZYe.e(jZe-d>Z[d?e\d@< e	jUVde*e	jUVde[dAdB Z]dCdD Z^dEdF Z_e	jUVdGg dHdIdJ Z`dKdL ZadMdN ZbdOdP ZcdQdR Zde	jUVdSdTe	jUVd!eeeffe	jUVdUeeeffdVdW Zge	jUVdXdYdZgd[d\ Zhd]d^ Zie	jUVd_d`dagdbdc Zjddde Zke	jUVd_e9l dfdg Zmdhdi ZnG djdk dkZodS )l    )annotations)reduce)productN)PY312)import_optional_dependency)NumExprClobberingErrorPerformanceWarningUndefinedVariableError)is_boolis_floatis_list_like	is_scalar)	DataFrameIndexSeries
date_rangeperiod_rangetimedelta_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_GLOBALS)Versionnumexprignore)errorsc              	   c  sJ    | ] }t j|t jj|d kot dt dt dtd gdV  qdS )r#   znumexpr enabled->z, installed->reasonmarksN)pytestparammarkskipifr   r   td
skip_if_no).0engine r2   n/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/pandas/tests/computation/test_eval.py	<genexpr>@   s    
r4   )paramsc                 C     | j S Nr+   requestr2   r2   r3   r1   ?   s   r1   c                 C  r6   r7   r8   r9   r2   r2   r3   parserS   s   r;   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rhsr1   cer2   r2   r3   _eval_single_binX   s   

rG      )r   r   	SeriesNaNDataFrameNaNfloat)r5   idsc                 C  s~   t tjdd}tj||dk< t tjddttjddtddtjtjdg|tjd f}|| j S )N   )
   rH         ?rH      )r   r@   randomdefault_rngstandard_normalrA   r   r+   )r:   nan_df1optsr2   r2   r3   rB   g   s   
rB   c                   C  s*   dd dd dd dd dd dd dS )	Nc                 S     t t| tjdS Ndtype)r   r@   arangeint64nr2   r2   r3   <lambda>       zidx_func_dict.<locals>.<lambda>c                 S  rV   rW   )r   r@   rZ   float64r\   r2   r2   r3   r^      r_   c                 S  s   t dd tdd|  D S )Nc                 S  s   g | ]}| d t | qS )_)chr)r0   ir2   r2   r3   
<listcomp>   s    z3idx_func_dict.<locals>.<lambda>.<locals>.<listcomp>a   )r   ranger\   r2   r2   r3   r^      s    c                 S     t d| dS )N
2020-01-01periods)r   r\   r2   r2   r3   r^          c                 S  rg   )Nz1 dayri   )r   r\   r2   r2   r3   r^      rk   c                 S  s   t d| ddS )Nrh   D)rj   freq)r   r\   r2   r2   r3   r^      s    )rc   fsdtr.   pr2   r2   r2   r2   r3   idx_func_dict}   s   rr   c                	   @  sJ  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 d)j"d+d*d,eej d)!d*d-kgd.d/ Z#ejd(e$ej d)!d+e$ej d)j"d+d+d,e$ej d)!d+d-kgd0d1 Z%d2d3 Z&d4d5 Z'ejd6d7d8gd9d: Z(d;d< Z)ejd=d>d?d@ Z*dAdB Z+dCdD Z,dEdF Z-dGdH Z.dIdJ Z/dKdL Z0dMS )NTestEvalrC   )z!=z==z<=z>=<>)neeqlegeltgt)rL   cmp2ru   rt   r{   rz   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)r1   r;   )r*   raisesNotImplementedErrorpdevalrG   tmassert_equal)selfrC   r|   r}   rB   rD   r1   r;   msgexlhs_newrhs_newexpectedresultr2   r2   r3   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   r~   innot in&'(In|NotIn)' nodes are not implementedr   lhs  rhsr   |zvonly 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rB   rD   r1   r;   
local_dict)r*   r   r   r   r   joinr   	TypeErrorrG   r   r   )
r   r   rB   rD   r1   r;   r   r   r   r   r2   r2   r3   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|rRt|sR|dv rR|dkrR|dkrRt jjd	d
}	||	 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
|rdd ||fD \}}t||||}t
|r| }n| }tj|||d}t|| d S )Nr~   r   r   r   z~(lhs r   r   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr&   r   r   r   zwonly 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 iterabler   r   c                 s  s    | ]	}t |gV  qd S r7   )r@   arrayr0   xr2   r2   r3   r4          z3TestEval.test_compound_invert_op.<locals>.<genexpr>)r*   r   r   r   r   r   r,   xfailapplymarkerr   r   r   rG   r   assert_almost_equal)r   r   rB   rD   r:   r1   r;   r   r   r,   
skip_theser   r   r2   r2   r3   test_compound_invert_op   sX   

"	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 )Nr~   r    mid r   r   r   r    mid and mid r    mid) & (mid r   &)r*   r   r   r   r   rG   r   r   )r   rC   r|   rB   midhsrD   r1   r;   midex1r   r   r   ex2ex3r   r   r   r2   r2   r3   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 )	Nr   r   r   z rhs r#   r   znlhs z ghs)r   r   rG   r   r   alignr=   r   AttributeErrorr#   evaluatevalues)r   r   rB   rD   r1   r;   r   r   r   nlhsghsrv   r2   r2   r3   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 % rhsr   r#   r   zexpected % rhs%)r   r   r   r   r#   r   
isinstancer   r   r   itemrG   )	r   rB   rD   r1   r;   r   r   r   rv   r2   r2   r3   test_modulus4  s   
zTestEval.test_modulusc           	      C  s   d}|dks|dkr't tjt dkr'tj|||d}|| }t|| d S d}tjt	|d tj|||d||d	 W d    d S 1 sHw   Y  d S )
Nz
lhs // rhsr~   r#   2.13.0r   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'r   r   r   r1   r;   )
r"   r#   __version__r   r   r   r   r*   r   r   )	r   rB   rD   r1   r;   r   resr   r   r2   r2   r3   test_floor_divisionF  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**r   z-(DataFrame.columns|numpy array) are differentr   z(lhs ** rhs) ** rhs)rG   r   r   r   r   complexr@   complexfloatingisnanr*   r   AssertionErrorr   assert_numpy_array_equalr   )
r   rB   rD   r1   r;   r   r   r   r   middler2   r2   r3   test_pow\  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~elbr   )	astypeboolr   r@   r   r   r   r   r   )r   rB   r1   r;   elbr   r   r2   r2   r3   test_check_single_invert_opv  s   z$TestEval.test_check_single_invert_opc                 C  s8  d}t tjdd}|dkr3d}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 sOw   Y  t tjdjd	dd
}|dkrttjtdk rd}tjt|d tj	|||d W d    n1 sw   Y  n| }tj	|||d}t|| t tjdddk}| }tj	|||d}t|| t g dtjd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~lhsrM   rH   rM   r#   -couldn't find matching opcode for 'invert_dd'r   r   0ufunc 'invert' not supported for the input typesrH   sizer   )couldn't find matching opcode for 'invertrO   arP   g       @   )brE   unknown type object#bad operand type for unary ~: 'str')r   r@   rQ   rR   rS   r*   r   r   r   r   r   integersr"   r#   r   r   assert_frame_equalr=   )r   r1   r;   r   rB   r   expectr   r2   r2   r3   test_frame_invert  sJ   "$zTestEval.test_frame_invertc                 C  s   d}t tjdd}|dkr3d}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 sOw   Y  t tjdjddd	}|dkrttjtd
k rd}tjt|d tj	|||d W d    n1 sw   Y  n| }tj	|||d}t|| t tjd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 s	w   Y  d S )Nr   rM   rH   r#   r   r   r   r   r   r   r   rO   r   r   r   )r   r@   rQ   rR   rS   r*   r   r   r   r   r   r   r"   r#   r   r   assert_series_equalr=   )r   r1   r;   r   rB   r   r   r   r2   r2   r3   test_series_invert  sF   "$zTestEval.test_series_invertc                 C  s  d}t tjdd}| }tj|||d}t|| t tjdj	ddd}| }tj|||d}t|| t tjdddk}|dkrqd	}t
jt|d
 tj|||d W d    d S 1 sjw   Y  d S | }tj|||d}t|| d S )N-lhsrM   r   r   rH   r   rO   r#   *couldn't find matching opcode for 'neg_bb'r   )r   r@   rQ   rR   rS   r   r   r   r   r   r*   r   r   r   r1   r;   r   rB   r   r   r   r2   r2   r3   test_frame_negate  $   "zTestEval.test_frame_negatec                 C  s  d}t tjdd}| }tj|||d}t|| t tjdj	ddd}| }tj|||d}t|| t tjdddk}|dkrqd}t
jt|d	 tj|||d W d    d S 1 sjw   Y  d S | }tj|||d}t|| d S )
Nr   rM   rH   r   r   rO   r#   r   r   )r   r@   rQ   rR   rS   r   r   r   r   r   r*   r   r   r   r2   r2   r3   test_series_negate  r   zTestEval.test_series_negaterB   rM   r   rH   r   rO   c                 C  (   d}|}t j|||d}t|| d S Nz+lhsr   )r   r   r   r   r   rB   r1   r;   r   r   r   r2   r2   r3   test_frame_pos     zTestEval.test_frame_posc                 C  r   r   )r   r   r   r   r   r2   r2   r3   test_series_pos"  r   zTestEval.test_series_posc                 C  s  d}d }t r|dkr|dkst}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sGJ tjd||ddksSJ tjd||ddks_J tjd||ddkskJ tj|ddd tjd||ddksJ W d    n1 sw   Y  tj|ddd tjd||ddksJ W d    n1 sw   Y  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#   r   r   z~1.0r   z-1.0r;   r1   g      z+1.0g      ?z~1z-1z+1rP   zBitwise inversionF)r   check_stacklevelz~Truez~Falsez-Truez-Falser   z+Truez+False)	r   DeprecationWarningr*   r   r   r   r   r   assert_produces_warning)r   r1   r;   r   warnr2   r2   r3   test_scalar_unary4  s4   zTestEval.test_scalar_unaryc                 C  s:   t jtdt jd}t jg dt jd}t|| d S )Nz>[-True, True, +True, -False, False, +False, -37, 37, ~37, +37]rX   )
r   TrP   r   Fr   i%   ir   )r@   r   r   r   object_r   r   )r   r   r   r2   r2   r3   test_unary_in_arrayN  s   zTestEval.test_unary_in_arrayr   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   rX   F)r   r@   r   r   r   )r   float_numpy_dtyper   dfr   r2   r2   r3   test_float_comparison_bin_opg  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   rP   zx.fillna(-1)r   check_nameszx.shift(1, fill_value=-1))
fill_value)
r   r@   rA   r   r   fillnar   r   r   shiftr   r  r   r   r2   r2   r3   test_unary_in_functionn  s   

zTestEval.test_unary_in_functionr   )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  s|   t jdddd}}}tt jdd}d}tjt|d tj	|||d W d    d S 1 s7w   Y  d S )NrM   r   rP   r   rM   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notr   r   )
r@   rQ   rR   rS   r   r*   r   r   r   r   )	r   r   r1   r;   r   r   r   r  r   r2   r2   r3   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 )NrP   r   r   g      ?F)rP   )	r   r   r   r
   r@   r   r   r   shape)r   r1   r;   r   r   r2   r2   r3   test_identical  s2   zTestEval.test_identicalc                 C  s$   d}t j|||d}|dksJ d S )Nz1 + 2 *         5 - 1 + 2 r      )r   r   )r   r1   r;   expr   r2   r2   r3   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.006r   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > rP   rM   r  A == )
r   r   r@   r`   r   queryemptylocr   r   )	r   r1   r;   r  r   r   r  cutoffexactr2   r2   r3   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*   r   SyntaxErrorr  indexnamer   r  r   r2   r2   r3   test_disallow_python_keywords  s   "z&TestEval.test_disallow_python_keywordsc                 C  sl   t jttdd$ tddksJ tddksJ tddks$J W d    d S 1 s/w   Y  d S )	NF)r   znot Truer   z	not Falser   zTrue and not Truer   )r   maybe_produces_warningr   r   r   r   )r   r2   r2   r3   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   r   r   r>   r   r   )r   eventr2   r2   r3   test_and_logic_string_match  s   ,z$TestEval.test_and_logic_string_matchN)1__name__
__module____qualname__r*   r,   parametrizer   BOOL_OPS_SYMSr   CMP_OPS_SYMSr   r   r   sortedsetr   
differencer   r   r   r   r.   skip_if_windowsr   r   r   r   r   r   r   r@   rQ   rR   rS   r   r   r   r   r   r   r  r	  r  r  r  r  r%  r'  r*  r2   r2   r2   r3   rs      sz    
"
3
 

-/



!
rs   c                   @  s8   e Zd Zejdg dejdddgdd ZdS )	TestTypeCastingr   )+-*r   /
left_right)r  3)r;  r  c                 C  s   |}t tjdd|d}|\}	}
|	 d| d|
 }tj|||d}|dkr9|dkr9tjj	dd	}|
| |jj|ksAJ |jj|ksIJ tj|t|d
d d S )NrM   rH   r   rX    r   	complex64r#   zfnumexpr issue with complex that are upcast to complex 128 https://github.com/pydata/numexpr/issues/492r&   F)check_exact)r   r@   rQ   rR   rS   r   r   r*   r,   r   r   r   rY   r   r   )r   r1   r;   r   complex_or_float_dtyper:  r:   rY   r  leftrightro   r   r,   r2   r2   r3   test_binop_typecasting  s   
z&TestTypeCasting.test_binop_typecastingN)r+  r,  r-  r*   r,   r.  rC  r2   r2   r2   r3   r5    s    r5  c                  G  s4   t ttd|  }ttjdd | D }|o|S )Nis_monotonic_increasingc                 s  s     | ]}t |jjtjV  qd S r7   )
issubclassrY   typer@   
datetime64r   r2   r2   r3   r4     s    zshould_warn.<locals>.<genexpr>)anymapoperator
attrgetterr   xor)argsnot_monoonly_one_dtr2   r2   r3   should_warn  s
   rP  c                	   @  s
  e Zd Zg dZedg Zdd Zejd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j	deej	deej	deej	dedd Zejd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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j	deej	deej	deej	ded$d% Zd&d' Zd(S ))TestAlignment)rc   ro   rp   ro   c                 C  s>   d}t tjdd}tj|||d}t||d  d S )Nzdf * ~2rM   r<  r   )	r   r@   rQ   rR   rS   r   r   r   r   )r   r1   r;   ro   r  r   r2   r2   r3   test_align_nested_unary_op  s   z(TestAlignment.test_align_nested_unary_opzalways::RuntimeWarninglr_idx_typerr_idx_type
c_idx_typec           
      C  s   t tjdd|| d|| dd}t tjdd|| d|| dd}t|j|jrQtt	 t
jd||d}	W d    n1 sKw   Y  nt
jd||d}	t|	||  d S )	NrM   rN   rN   rN   r"  r  )   rN   rY  zdf + df2r   r   r@   rQ   rR   rS   rP  r"  r   r   RuntimeWarningr   r   r   )
r   r1   r;   rT  rU  rV  rr   r  df2r   r2   r2   r3   test_basic_frame_alignment  s"   



z(TestAlignment.test_basic_frame_alignment
r_idx_typec           	      C  s   t tjdd|| d|| dd}tjd||d}t||dk  t tjd|j	|j
|jd}tjd||d}t|||k  d S )NrM   rW  rN   rX  df < 2r   zdf < df3)r   r@   rQ   rR   rS   r   r   r   r   r  r"  r  )	r   r1   r;   r^  rV  rr   r  r   df3r2   r2   r3   test_frame_comparison8  s   

z#TestAlignment.test_frame_comparisonzignore::RuntimeWarningr1c1r2c2c                 C  s   t tjdd|| d|| dd}t tjdd|| d|| dd}	t tjdd|| d|| dd}
t|j|	j|
jritt	 t
jd	||d
}W d    n1 scw   Y  nt
jd	||d
}t|||	 |
  d S )NrM   r
  r   rX  )   rM   rf  r   rH   zdf + df2 + df3r   rZ  )r   r1   r;   rb  rc  rd  re  rr   r  r\  r`  r   r2   r2   r3   #test_medium_complex_frame_alignmentM  s,   





z1TestAlignment.test_medium_complex_frame_alignment
index_namer"  r  c                 C  s   t tjdd|| d|| dd}t||}ttjdd|d d }	t|j|	jrPt	
t tjd||d}
W d    n1 sJw   Y  ntjd||d}
|dks`|dkrn|d	kri||	n||	 }n||	 }t	|
| d S )
NrM   rW  rN   rX  rH   df + sr   rp   r#   )r   r@   rQ   rR   rS   getattrr   rP  r"  r   r   r[  r   r   addr   )r   r1   r;   rh  r^  rV  rr   r  r"  ro   r   r   r2   r2   r3   !test_basic_frame_series_alignmentk  s"   


 z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_typerc   )rp   rp   c              
   C  sT  |dkr0|dv r0|dkr0|dkr0|dkr0d| d| d| d	| d
| 
}| tjj|dd ttjdd|| d|| dd}	t	|	|}
t
tjdd|
d d }t|j|	jrtt tjd||d}W d    n1 szw   Y  ntjd||d}|dks|dkr|dkr|	|n||	 }n||	 }t|| d S )Nr#   )r   r~   r"  rc   ro   z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r'   strictrM   )rN      rN   rn  rX  rH   zs + dfr   rp   )r   r*   r,   r   r   r@   rQ   rR   rS   rj  r   rP  r"  r   r   r[  r   r   rk  r   )r   r:   r1   r;   rh  r^  rV  rr   r'   r  r"  ro   r   r   r2   r2   r3   !test_basic_series_frame_alignment  sB   



 z/TestAlignment.test_basic_series_frame_alignmentr   r6  r8  c                 C  sF  t tjdd|| d|| dd}t||}	ttjdd|	d d }
d| d}d| d	}t|j|
jryt	
t tj|||d
}W d    n1 sVw   Y  t	
t tj|||d
}W d    n1 ssw   Y  ntj|||d
}tj|||d
}|dkr|dkr|dkrt	|| d S d S d S d S )NrM   rW  rN   rX  rH   zs z dfzdf z sr   rp   r#   )r   r@   rQ   rR   rS   rj  r   rP  r"  r   r   r[  r   r   r   )r   r1   r;   rh  r   r^  rV  rr   r  r"  ro   rB   rD   r   r   r2   r2   r3   test_series_frame_commutativity  s0   


 z-TestAlignment.test_series_frame_commutativityc                 C  s  d}d}	d|	 }
t tjd|	|f|| |	|| |d}t tjd|
|f|| |
|| |d}|j}ttjd||d | }|dksS|dkrb|dkr]||}n	|| }n|| }|dksn|dkr}|dkrx||}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
|| d S )	Nr   rH   rM   rX  rp   r#   zdf2 + ser + dfr   )r   r@   rQ   rR   rS   r  r   rk  rP  r"  r   r   r[  r   r   r  r   )r   r1   r;   rb  rc  rd  re  rr   r]   m1m2r  r\  r"  ser	expected2r   r   r2   r2   r3   #test_complex_series_frame_alignment  sB   



 

z1TestAlignment.test_complex_series_frame_alignmentc                 C  s  t tjdd}ttjdd}|dkrt}nd}t| t	j
d||d W d    n1 s7w   Y  ttjdd}td t	j
d||d W d    n1 s_w   Y  t tjdd	}ttjdd}td t	j
d||d W d    n1 sw   Y  t tjdd
}ttjd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 sw   Y  d S )NrM   )  rN   '  r#   Fri  r   rv  )rN   rw  rW  r~   rP   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   r@   rQ   rR   rS   r   r   r   r   r   r   lenr>   messagelog10r   r  )r   r1   r;   r  ro   seenis_python_enginewrnwr   loggedr   r2   r2   r3   +test_performance_warning_for_poor_alignment  sL   $z9TestAlignment.test_performance_warning_for_poor_alignmentN)r+  r,  r-  index_typeslhs_index_typesrS  r*   r,   filterwarningsr.  r]  ra  rg  rl  listr   ro  rp  ru  r  r2   r2   r2   r3   rQ    sV    





#
+rQ  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   rP   popr   r   r   rM  kwargsr2   r2   r3   r   0     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 )Nr~   r   r   c                   s   g | ]}| vr|qS r2   r2   r0   r   exclude_arithr2   r3   rd   9  s
    z8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s    | ]	}|d kr|V  qdS )z//Nr2   r  r2   r2   r3   r4   ?  r   z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)r   z&argument of type 'int' is not iterabler   r   rP   r   r   )	r   r   r0  r*   r   r   r   r   rG   )r   r1   r;   	arith_opsopsr   r   r   r   r   expecr   yr2   r  r3   test_simple_arith_ops4  s6   

z$TestOperations.test_simple_arith_opsrD   TFrB   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=  r~   r   r   r   r;   r*   r   r   r   r   rD   rB   r   r   r   r   r  r2   r2   r3   test_simple_bool_opsW     

z#TestOperations.test_simple_bool_opsc                 C  r  r  r  r  r2   r2   r3   test_bool_ops_with_constantsg  r  z+TestOperations.test_bool_ops_with_constantsc                 C  st   t jdd}tt jdd}d}tjt|d | jd||dd W d    d S 1 s3w   Y  d S )	NrM   )r   rf  rH      rN   z?N-dimensional objects, where N > 2, are not supported with evalr   x + yr   r  r   )	r@   rQ   rR   rS   r   r*   r   r   r   )r   r   r  r   r2   r2   r3   test_4d_ndarray_failsw  s   "z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1rP   )r   )r   r   r2   r2   r3   test_constant~  s   
zTestOperations.test_constantc                 C  s8   t tjdd}| jdd|id}t|| d S )NrM   rN   rM   r  r  r   r@   rQ   rR   rS   r   r   r   )r   r  r\  r2   r2   r3   test_single_variable  s   z#TestOperations.test_single_variablec                 C  sT   t tjdd}tjtdd | d W d    d S 1 s#w   Y  d S )NrM   r<  name 'x' is not definedr   zdf[x > 2] > 2)	r   r@   rQ   rR   rS   r*   r   	NameErrorr   r   r  r2   r2   r3   &test_failing_subscript_with_name_error  s   "z5TestOperations.test_failing_subscript_with_name_errorc                 C  sH   t tjdd}| jdd|id}|d |dk }t|| d S )NrM   r<  z(df + 1)[df > 2]r  r  rP   r  r  r2   r2   r3   test_lhs_expression_subscript  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
 qAd S )NrM   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   r@   rQ   rR   rS   r  r   r   rE   zipr   r   r   )r   r  expr1expec1expr2expec2expr3expec3exprsexpecsrF   r  r2   r2   r3   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 s;w   Y  d S )
NrM   r<  r  r  zdf = df2%cannot assign without a target objectr   )r  r\  r  )
r   r@   rQ   rR   rS   r  r*   r   r=   r   )r   r  r\  r  r   r2   r2   r3   test_assignment_fails  s   "z$TestOperations.test_assignment_failsc                 C  s\   t tjddtdd}tjtdd |	d W d    d S 1 s'w   Y  d S )NrM   r   abr  invalid syntaxr   zd c = a + b
r   r@   rQ   rR   rS   r  r*   r   r!  r   r  r2   r2   r3   %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 )NrM   r   r  r  z5left hand side of an assignment must be a single namer   zd,c = a + br  r$  r2   r2   r3   %test_assignment_column_invalid_assign  s   "z4TestOperations.test_assignment_column_invalid_assignc                 C  r  )NrM   r   r  r  zcannot assign to function callr   zTimestamp("20131001") = a + br  r$  r2   r2   r3   3test_assignment_column_invalid_assign_function_call  s   "zBTestOperations.test_assignment_column_invalid_assign_function_callc                 C  sX   t tjddtdd}| }|d |d  |d< |jddd	 t	|| d S )
NrM   r   r  r  r   r   	a = a + bTinplace
r   r@   rQ   rR   rS   r  copyr   r   r   r   r  r   r2   r2   r3   &test_assignment_single_assign_existing     z5TestOperations.test_assignment_single_assign_existingc                 C  sX   t tjddtdd}| }|d |d  |d< |jdd	d
 t	|| d S )NrM   r   r  r  r   r   rE   	c = a + bTr  r  r  r2   r2   r3   !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 )NrM   r   r  r  rP   z	a = 1 + bTr  r   r   r  )r   r  r   r   r2   r2   r3   +test_assignment_single_assign_local_overlap  s   z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sh   t tjddtdd}d}|j }|jddd ||j	 }t
j||jd	d
 |jd u s2J d S )NrM   r   r  r  rP   r  Tr  Fr  )r   r@   rQ   rR   rS   r  r   r  r   r   r   r   r#  )r   r  r   old_ar   r2   r2   r3   "test_assignment_single_assign_name  s   

z1TestOperations.test_assignment_single_assign_namec                 C  sn   t tjddtdd}|jddd d}tjt	|d	 |d
 W d    d S 1 s0w   Y  d S )NrM   r   r  r  r  Tr  z#can only assign a single expressionr   z	c = a = b)
r   r@   rQ   rR   rS   r  r   r*   r   r!  r$  r2   r2   r3   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 )NrM   r   r  r  zc = df.a + df.br  T)r   targetr  r   r   rE   
r   r@   rQ   rR   rS   r  r   r  r   r   r  r2   r2   r3   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   r   r   r   r   r  r2   r2   r3   test_column_in  s   

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r&   c                 C  sd   t tjddtdd}|jddd}|d usJ | }|d |d	  |d
< t	|| d S )NrM   r   r  r  r  Fr  r   r   rE   r  )r   r  actualr   r2   r2   r3   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rP   rM   r   rf  rH   r  r  r   r   rE   d$
        c = a + b
        d = c + bTr  rP   rM   rF   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containr   z(
            a = b + 2
            b - 2F)r   r  r   r   r   r*   r   r=   )r   warn_copy_on_writer  r   answerr   r2   r2   r3   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   rE   r  r  Fr  rP   rM   rF   r  r   r  r   r   r   r  r2   r2   r3   &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  rn  r   rE   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr  r  )r   r  r   	local_varr  r2   r2   r3   )test_multi_line_expression_local_variableY  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 r7   r2   r  r2   r2   r3   
local_funco     zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr   rP   rn  rE   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr  r  r   r  r  r   r  r2   r2   r3   2test_multi_line_expression_callable_local_variablek  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  r7   r2   r  r2   r2   r3   r    r  zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   rn  rP   )r   r   rE   r  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Tr  r  r  r2   r2   r3   >test_multi_line_expression_callable_local_variable_with_kwargs  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*   r   r=   r  r   r   )r   r  df_origr   r2   r2   r3   test_assignment_in_query  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   rM   za == 2Tr  r   	a = 1 + 2r  r  )r   r  r  r   r   r   assert_dict_equalr  r2   r2   r3   test_query_inplace  s   z!TestOperations.test_query_inplaceinvalid_targetrP   catrM   rP   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*   r   r=   r   hasattrr   r  r   
expressionr2   r2   r3   test_cannot_item_assign  s   
"z&TestOperations.test_cannot_item_assign)rP   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*   r   r=   r   r  r2   r2   r3   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)r   r*   r   r=   )r   r  r  r   r2   r2   r3   test_inplace_no_assignment  s   "z)TestOperations.test_inplace_no_assignmentc                 C  sb   t tjddtddddd}|dk }| jdd|id	}|dk }t|| t|| d S )
NrM   rM   rM   rh   rl   rm   rj   r  r_  r  r  	r   r@   rQ   rR   rS   r   r   r   r   )r   r  rF   rr   r2   r2   r3   *test_basic_period_index_boolean_expression  s   z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sR   t tjddtddddd}| jdd|id	}||d
k  }t|| d S )NrM   r  rh   rl   r  r  zdf[df < 2 + 3]r  r  rH   r  r   r  r  rF   r2   r2   r3   ,test_basic_period_index_subscript_expression  s   z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sb   t tjddtddddd}| jdd|id	}|||dk  dk  |d  }t|| d S )
NrM   r  rh   rl   r  r  zdf[df[df < 2] < 2] + df * 2r  r  r  r  r2   r2   r3   -test_nested_period_index_subscript_expression  s   z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sZ   t tjdd}tddd|d< | jdd|i||d	}|jd
k }tj	||dd d S )NrM   r<  z1/1/2012rH   ri   dates1zdf.dates1 < 20130101r  r   20130101Fr  )
r   r@   rQ   rR   rS   r   r   r   r   r   )r   r1   r;   r  r   r  r2   r2   r3   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 )Nr~   z1 in [1, 2]r   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]]))r   r   r*   r   r   )r   r1   r;   r   r   r2   r2   r3   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 )NrP   z * !aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   )r   r   r   )r   r1   r;   r   r   r   r   r2   r2   r3   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 s5w   Y  d S tj	|d|i||d	 d S )
NrM   r<  r~   r   not'Not' nodes are not implementedr   r  )r   r;   r1   
r   r@   rQ   rR   rS   r*   r   r   r   r   )r   r   r1   r;   r  r   r2   r2   r3   test_fails_and_or_not(  s&   	"	
z$TestOperations.test_fails_and_or_notcharr   r   c                 C  s   t tjdd}d| d}|dkr9d}tjt|d tj	|||d W d    d S 1 s2w   Y  d S tj	|||d d S )	NrM   r<  z(df + 2)[df > 1] > 0 z	 (df > 0)r~   z$cannot evaluate scalar only bool opsr   r   r  )r   r
  r1   r;   r  r   r   r2   r2   r3   test_fails_ampersand_pipeG  s   "z(TestOperations.test_fails_ampersand_pipeN)3r+  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  r  r  r  r@   r   r  r  r  r  r  r  r  r  r  r	  r  r2   r2   r2   r3   r  /  sp    #
	



	
%	 

&
			/
r  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  r  r  r  r  r2   r2   r3   r   U  r  zTestMath.evalz&Unary ops only implemented for numexprr&   fnc                 C  s   t dtjddi}|j}| d}| |}tjdd tt||}W d    n1 s2w   Y  t	j
||dd d S )	Nr   rM   rN   z(a)r$   allFr  )r   r@   rQ   rR   rS   r   r   errstaterj  r   r   )r   r  r  r   r   gotr   r2   r2   r3   test_unary_functionsY  s   

zTestMath.test_unary_functionsc                 C  s   t tjddtjddd}|j}|j}| d}| |}tjdd t	t|||}W d    n1 s>w   Y  t
j||dd d S )	NrM   rN   r  z(a, b)r$   r  Fr  )r   r@   rQ   rR   rS   r   r   r   r  rj  r   r   )r   r  r  r   r   r   r  r   r2   r2   r3   test_binary_functionsg  s   

zTestMath.test_binary_functionsc                 C  sl   t tjddtjddd}|jd||dd |j}tt|j	|j
}tj||dd d S )	NrM   rN   r  ze = arctan2(sin(a), b)Tr1   r;   r  Fr  )r   r@   rQ   rR   rS   r   rF   arctan2sinr   r   r   r   r   r1   r;   r  r  r   r2   r2   r3   test_df_use_casex  s   zTestMath.test_df_use_casec                 C  sh   t tjddtjddd}|jd||dd |j}t|j|j	 }t
j||dd d S )	NrM   rN   r  ze = sin(a + b)Tr  Fr  )r   r@   rQ   rR   rS   r   rF   r  r   r   r   r   r  r2   r2   r3    test_df_arithmetic_subexpression  s   z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper(   c                 C  s   t dtjdd|i}|jj|ksJ |jd||dd |j	}t
|j}|j|jks2J ||jks9J tj||dd d S )	Nr   rM   rN   z
b = sin(a)Tr  Fr  )r   r@   rQ   rR   rS   r   r   rY   r   r   r  r   r   )r   rY   expect_dtyper1   r;   r  r  r   r2   r2   r3   test_result_types  s   zTestMath.test_result_typesc                 C  b   t dtjddi}d}tjt|d |jd||d W d    d S 1 s*w   Y  d S )Nr   rM   rN   z#"mysin" is not a supported functionr   zmysin(a)r   )	r   r@   rQ   rR   rS   r*   r   r=   r   r   r1   r;   r  r   r2   r2   r3   test_undefined_func  
   "zTestMath.test_undefined_funcc                 C  r  )Nr   rM   rN   z1Function "sin" does not support keyword argumentsr   zsin(x=a)r   )	r   r@   rQ   rR   rS   r*   r   r   r   r  r2   r2   r3   test_keyword_arg  r  zTestMath.test_keyword_argN)r+  r,  r-  r   r*   r,   r-   r   r.  r    r  r   r  r  r  r@   int32r`   r[   float32r+   
complex128r.   r4  r  r  r   r2   r2   r2   r3   r  T  s.    







r  rM   rN   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 * 2rM   r   )r   r   _var_sr   r   )r   r1   r;   rF   r2   r2   r3   test_global_scope  s   zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks J d S )NrP   x + 1r   lcls)localsr  r   r   r  )r   r1   r;   r   r)  lcls2r2   r2   r3   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 )NrP   r(  r   )globalsr  r   r   )r   r1   r;   r   gblsgbls2r2   r2   r3   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 )NrP   r  r   r(  r   r*   r   r	   r   r   )r   r1   r;   r   r   r2   r2   r3   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   )r1   r;   global_dictr1  )r   r1   r;   r   rF   r2   r2   r3   test_empty_globals  r3  zTestScope.test_empty_globalsN)r+  r,  r-  r'  r,  r0  r2  r5  r2   r2   r2   r3   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  rP   rM   r  asdf)r   r1   r*   r   KeyErrorr   r   r   r2   r2   r3   test_invalid_engine     "r;  )use_numexprr   ))Tr#   )Fr~   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>  r   option_context)r=  r   r>  r   r2   r2   r3   test_numexpr_option_respected  s
   
"rB  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)rP   rM   r   rf  rH   r  )r  Bz
A.isnull()rH   r  rf  )r"  )r   rA  r   r  r   r   )r  r   r   r2   r2   r3   #test_numexpr_option_incompatible_op  s   
"rD  c                  C  r6  )	NzInvalid parser 'asdf' passedr   r  rP   rM   r  r7  )r   r;   r8  r:  r2   r2   r3   test_invalid_parser  r<  rE  )r~   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   )rF  unsupported_nodesr*   r   r   rj  )r1   r;   VisitorClassinstr  r   r2   r2   r3   test_disallowed_nodes  s   
rJ  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   r   r*   r   r!  r   r   )r1   r;   rF   r2   r2   r3   test_syntax_error_exprs%  s   "rL  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   r   )r*   r   r  r   r   )r1   r;   rF   r   r2   r2   r3   test_name_error_exprs+  s
   "rM  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rP   rM   r   zThe '@' prefix is onlyr   r   zThe '@' prefix is notrK  )r1   r;   rN  r   r   r2   r2   r3   %test_invalid_local_variable_reference2  s   ""rP  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 )NrO  r#   zVariables in expression .+r   zsin + dotted_liner   )r*   r   r   r   r   )r1   r;   r  dotted_liner   r   r2   r2   r3   test_numexpr_builtin_raises>  s   "rR  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  )	resolversr1   r;   )r*   r   r   r   r   )r1   r;   cannot_resolver2   r2   r3   test_bad_resolver_raisesI  s   "rV  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    r   r*   r   r=   r   r   r   r2   r2   r3   test_empty_string_raisesO  s   "rZ  c                 C  rW  )Nz#only a single expression is allowedr   z1 + 1; 2 + 2r   rK  r   r2   r2   r3   $test_more_than_one_expression_raisesU  s   "r[  cmpr   rD   c              	   C  s   t dd ttjd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 sZw   Y  q<d S )Nc                   S  s   t jddS )NrM   rN   )r@   rQ   rR   r   r2   r2   r2   r3   r^   _  s    z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rM   r   r   r   r   r   r   r   r  r   r   )intrK   r@   rQ   rR   rS   r*   r   r   r   r   )rB   r\  rD   r1   r;   genr   r   r   r   r   r   r2   r2   r3   test_bool_ops_fails_on_scalarsZ  s    


r_  otherz'x'z...c                 C  sN   t dg ditd}|d|  }tg ddd}trd |_t|| d S )Nr  )r   r   rE   rX   r  )FFFr#  )r   objectr   r   r   r#  r   r   )r`  r  r   r   r2   r2   r3   test_equals_variousp  s   rc  c                 C  s*   d}t j}tj|| |d}||ksJ d S )Nzinf + 1r   )r@   infr   r   )r1   r;   ro   r   r   r2   r2   r3   test_inf  s   re  columnu	   Temp(°C)u   Capacitance(μF)c                 C  sX   t tjdd|dgd}||| dk }d| d}|j|| d}t|| d S )	NrM   r   r   r  rH   `z` > 5)r1   )r   r@   rQ   rR   rS   r  r   r   )r1   rf  r  r   query_stringr   r2   r2   r3   test_query_token  s   ri  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   rN   rP   rY  r  countr  z
~(cat > 0)r   r~   r  r   znot (cat > 0))r   r  r  r   r   r*   r   r   )r1   r;   r  r   r   r   r2   r2   r3   test_negate_lt_eq_le  s   "rk  c                 C  sx   |dv r|  tjjtd| d ttjdj	dddd|d	gd
}||| dk }|
| d}t|| d S )N)TrueFalserd  Infz+GH 47859 DataFrame eval not supported with )r   r'   rM   r   d   r  r   col1r  r  z>6)r   r*   r,   r   r9  r   r@   rQ   rR   r   r  r   r   )r:   rf  r  r   r   r2   r2   r3    test_eval_no_support_column_name  s   rq  c                 C  s   t g dg dg dd}|d d  }|d }t| |jddd W d    n1 s/w   Y  t g d	g dg dd}t|| | s^t||d  t|d |d  d S tg ddd
}t|| t|d | d S )Nr  r  )rn     	   )r  rC  Cr  z	A = B + CTr  )r        ra  )r   r   assert_cow_warningr   r   r   r   )using_copy_on_writer  r  result_viewrs  r   r2   r2   r3   test_set_inplace  s   rz  c                   @  s.   e Zd Zejdddg ddgdd ZdS )	TestValidatevaluerP   rl  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  rY  )r   r|  r   r2   r2   r3   test_validate_bool_args  s   "z$TestValidate.test_validate_bool_argsN)r+  r,  r-  r*   r,   r.  r}  r2   r2   r2   r3   r{    s    r{  )p
__future__r   	functoolsr   	itertoolsr   rJ  numpyr@   r*   pandas.compatr   pandas.compat._optionalr   pandas.errorsr   r   r	   pandas.util._test_decoratorsutil_test_decoratorsr.   pandas.core.dtypes.commonr
   r   r   r   r   r   r   r   r   r   r   r   pandas._testing_testingr   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!   pandas.util.versionr"   r#   fixturer1   PARSERSr;   rG   r  rf   rB   rD   r   rr   rs   r5  rP  rQ  r  r  rQ   rR   rS   r&  r$  r/   r;  r,   r.  rB  rD  rE  PyTablesExprVisitorrF  __annotations__rJ  rL  rM  rP  rR  rV  rZ  r[  r]  rK   r_  rc  re  ri  rk  keysrq  rz  r{  r2   r2   r2   r3   <module>   s     




    j      )k%
	






