o
    ҷh                    @  sp  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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jFGd+Hd,ZIG d-d. d.ZJejKd/d0 ZLejKe	jMNd1d2d3d4 ZOejKd5d6 ZPejKd7d8 ZQe)e#jRe(d9ZSd:eTd;< e	jMNde%e	jMNdeSd<d= ZUd>d? ZVd@dA ZWe	jMNdBg dCdDdE ZXdFdG ZYdHdI ZZdJdK Z[dLdM Z\e	jMNdNdOe	jMNde]e^fe	jMNdPe]e^fdQdR Z_e	jMNdSdTdUgdVdW Z`dXdY Zae	jMNdZd[d\gd]d^ Zbd_d` Zce	jMNdZe4d dadb Zedcdd ZfG dedf dfZgdS )g    )annotations)reduce)productN)PY312)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+   U/var/www/html/venv/lib/python3.10/site-packages/pandas/tests/computation/test_eval.py	<genexpr>9   s    
r-   )paramsc                 C     | j S Nr$   requestr+   r+   r,   r*   8   s   r*   c                 C  r/   r0   r1   r2   r+   r+   r,   parserL   s   r4   c              
   C  sd   t | }t| jr-z|| |W S  ty, } zt|dr'tjW  Y d }~S  d }~ww || |S )Nz6negative number cannot be raised to a fractional power)r   r   has_neg_frac
ValueErrorstr
startswithnpnan)lhscmp1rhsr*   cer+   r+   r,   _eval_single_binQ   s   

r@      )r   r   	SeriesNaNDataFrameNaNfloat)r.   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   )
   rA         ?rA      )r   r9   randomdefault_rngstandard_normalr:   r   r$   )r3   nan_df1optsr+   r+   r,   r;   `   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 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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)rE   cmp2rQ   rP   rW   rV   binopc                 C  s   |dkr8|dv r8d}t jt|d d| d| d| d}	tj|	||d	 W d    d S 1 s1w   Y  d S t||||}
t||||}t|
|||}d| d| d| d}	tj|	||d	}t|| d S )
Npythonandor"'BoolOp' nodes are not implementedmatch(lhs z rhs) z (lhs  rhs)r*   r4   )r#   raisesNotImplementedErrorpdevalr@   tmassert_equal)selfr<   rX   rY   r;   r=   r*   r4   msgexlhs_newrhs_newexpectedresultr+   r+   r,   test_complex_cmp_opsw   s   
zTestEval.test_complex_cmp_opscmp_opc           
      C  s  |dk }|dk }|dkr:|dv r:d}t jt|d d| d}tj|||d W d    d S 1 s3w   Y  d S d| d}d	d
dg}|dv rut|sut jt|d tj|||||dd W d    d S 1 snw   Y  d S t||||}tj|||d}	t	
|	| d S )Nr   rZ   innot in&'(In|NotIn)' nodes are not implementedr_   lhs  rhsrc   |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r;   r=   r*   r4   
local_dict)r#   rd   re   rf   rg   joinr   	TypeErrorr@   rh   ri   )
rj   rr   r;   r=   r*   r4   rk   rl   ro   rp   r+   r+   r,   test_simple_cmp_ops   s:   
"zTestEval.test_simple_cmp_opsopc                 C  s  |dkr2|dv r2d}t jt|d d| d}tj|||d W d    d S 1 s+w   Y  d S t|rSt|sS|dv rS|dkrS|dkrSt jjd	d
}	|j	|	 ddg}
d| d}d
ddg}t|r||
v rt jt|d tj|||||dd W d    d S 1 sw   Y  d S t|rt|rdd ||fD \}}t||||}t|r| }n| }tj|||d}t|| d S )NrZ   rs   rv   r_   z~(lhs rb   rc   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   rt   ru   ry   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 iterablerz   r{   c                 s  s    | ]	}t |gV  qd S r0   )r9   arrayr)   xr+   r+   r,   r-          z3TestEval.test_compound_invert_op.<locals>.<genexpr>)r#   rd   re   rf   rg   r
   r%   xfailnode
add_markerr}   r   r~   r@   rh   assert_almost_equal)rj   r   r;   r=   r3   r*   r4   rk   rl   r%   
skip_thesero   rp   r+   r+   r,   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 )NrZ   rw    mid rx   r^   r_   rc    mid and mid ra    mid) & (mid rb   &)r#   rd   re   rf   rg   r@   rh   r   )rj   r<   rX   r;   midhsr=   r*   r4   midex1rk   rm   rn   ex2ex3ro   rl   rp   r+   r+   r,   test_chained_cmp_op   s,   
zTestEval.test_chained_cmp_oparith1c              
   C  s   d| d}t j|||d}t||||}t|| d| d| d}t j|||d}t||||}	z	|	|\}	}
W n tttfyI   Y d S w |dkrddd l	}|
d| d}t|j| d S td| d}t|| d S )	Nrw   rx   rc   z rhs r   r   znlhs z ghs)rf   rg   r@   rh   r   alignr6   r~   AttributeErrorr   evaluatevalues)rj   r   r;   r=   r*   r4   rl   rp   ro   nlhsghsrR   r+   r+   r,   test_binary_arith_ops   s$   zTestEval.test_binary_arith_opsc           	      C  s   d}t j|||d}|| }t|| |dkr;dd l}|d}t|ttfr1t|j	| d S t||
  d S t|d||}t|| d S )Nz	lhs % rhsrc   r   r   zexpected % rhs%)rf   rg   rh   r   r   r   
isinstancer   r   r   itemr@   )	rj   r;   r=   r*   r4   rl   rp   ro   rR   r+   r+   r,   test_modulus!  s   
zTestEval.test_modulusc           	      C  s   d}|dkrt j|||d}|| }t|| d S d}tjt|d t j|||d||d W d    d S 1 s;w   Y  d S )Nz
lhs // rhsrZ   rc   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'r_   rz   r|   r*   r4   )rf   rg   rh   ri   r#   rd   r~   )	rj   r;   r=   r*   r4   rl   resro   rk   r+   r+   r,   test_floor_division3  s   "zTestEval.test_floor_divisionc           
      C  s   d}t |d||}tj|||d}t|rHt|rHt|ttjfrHt|rHd}t	j
t|d t|| W d    d S 1 sAw   Y  d S t|| d}tj|||d}t |d||}	t |	d||}t|| d S )Nz
lhs ** rhs**rc   z-(DataFrame.columns|numpy array) are differentr_   z(lhs ** rhs) ** rhs)r@   rf   rg   r   r   complexr9   complexfloatingisnanr#   rd   AssertionErrorrh   assert_numpy_array_equalr   )
rj   r;   r=   r*   r4   rl   ro   rp   rk   middler+   r+   r,   test_powG  s*   "zTestEval.test_powc                 C  sX   z| t}W n ty   tt|g}Y nw | }tjd||d}t|| d S )Nz~elbrc   )	astypeboolr   r9   r   rf   rg   rh   r   )rj   r;   r*   r4   elbro   rp   r+   r+   r,   test_check_single_invert_opa  s   z$TestEval.test_check_single_invert_opc                 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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~lhsrF   rA   rF   r   -couldn't find matching opcode for 'invert_dd'r_   rc   0ufunc 'invert' not supported for the input typesrA   size)couldn't find matching opcode for 'invertrH   arI   g       @   )br>   unknown type object#bad operand type for unary ~: 'str')r   r9   rJ   rK   rL   r#   rd   re   rf   rg   r~   integersrh   assert_frame_equalr6   )rj   r*   r4   r   r;   rk   expectrp   r+   r+   r,   test_frame_invertk  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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 sw   Y  d S )Nr   rF   rA   r   r   r_   rc   r   r   r   rH   r   r   r   )r   r9   rJ   rK   rL   r#   rd   re   rf   rg   r~   r   rh   assert_series_equalr6   )rj   r*   r4   r   r;   rk   rp   r   r+   r+   r,   test_series_invert  sF   ""zTestEval.test_series_invertc                 C  s  d}t tjdd}| }tj|||d}t|| t tj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-lhsrF   r   rc   rA   r   rH   r   *couldn't find matching opcode for 'neg_bb'r_   )r   r9   rJ   rK   rL   rf   rg   rh   r   r   r#   rd   re   rj   r*   r4   r   r;   r   rp   rk   r+   r+   r,   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   rF   rA   rc   r   rH   r   r   r_   )r   r9   rJ   rK   rL   rf   rg   rh   r   r   r#   rd   re   r   r+   r+   r,   test_series_negate  r   zTestEval.test_series_negater;   rF   r   rA   r   rH   c                 C  (   d}|}t j|||d}t|| d S Nz+lhsrc   )rf   rg   rh   r   rj   r;   r*   r4   r   r   rp   r+   r+   r,   test_frame_pos     zTestEval.test_frame_posc                 C  r   r   )rf   rg   rh   r   r   r+   r+   r,   test_series_pos  r   zTestEval.test_series_posc                 C  sN  d}t jt|d tjd||d W d    n1 sw   Y  tjd||ddks-J tjd||dd	ks9J tjd
||ddksEJ tjd||ddksQJ tjd||ddks]J tjd||ddksiJ tjd||ddksuJ tjd||ddksJ tjd||ddksJ tjd||ddksJ tjd||ddksJ d S )Nz%bad operand type for unary ~: 'float'r_   z~1.0rc   z-1.0r4   r*   g      z+1.0g      ?z~1z-1z+1rI   z~Truez~Falsez-Truez-Falser   z+Truez+Falser#   rd   r~   rf   rg   )rj   r*   r4   rk   r+   r+   r,   test_scalar_unary  s   zTestEval.test_scalar_unaryc                 C  s:   t jtdt jd}t jg dt jd}t|| d S )Nz>[-True, True, +True, -False, False, +False, -37, 37, ~37, +37]dtype)
r   TrI   r   Fr   i%   ir   )r9   r   rf   rg   object_rh   r   )rj   rp   ro   r+   r+   r,   test_unary_in_array0  s   zTestEval.test_unary_in_arrayr   r   zx < -0.1z-5 > xc                 C  s<   t dtjdg|di}||}|jtdgksJ d S )Nr   r   r   F)r   r9   r   rg   r   )rj   r   r   dfr   r+   r+   r,   test_float_comparison_bin_opI  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   rI   zx.fillna(-1)r   check_nameszx.shift(1, fill_value=-1))
fill_value)
r   r9   r:   rg   r   fillnarh   r   r   shiftrj   r   rp   ro   r+   r+   r,   test_unary_in_functionQ  s   

zTestEval.test_unary_in_functionrl   )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 )NrF   r   rI   )r   rF   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notr_   rc   )
r9   rJ   rK   rL   r   r#   rd   re   rf   rg   )	rj   rl   r*   r4   r   r   r   r   rk   r+   r+   r,   test_disallow_scalar_bool_ops_  s   "z&TestEval.test_disallow_scalar_bool_opsc                 C  sJ  d}t jd||d}|dksJ t|sJ d}t jd||d}|dks&J t|s,J d}t jd||d}|r:J t|s@J t|sFJ tdg}t jd||d}t|tdg |jdkseJ tdg}t jd||d}t|tdg |jdksJ tdg}t jd||d}t|tdg |jdksJ d S )NrI   r   rc   g      ?F)rI   )	rf   rg   r   r	   r9   r   rh   r   shape)rj   r*   r4   r   rp   r+   r+   r,   test_identicals  s2   zTestEval.test_identicalc                 C  s$   d}t j|||d}|dksJ d S )Nz1 + 2 *         5 - 1 + 2 rc      )rf   rg   )rj   r*   r4   exprp   r+   r+   r,   test_line_continuation  s   zTestEval.test_line_continuationc           	      C  s   d}t j|||d}t|}||ksJ tdg di}d}|d|d}|js-J d}|d	|d}|jd
dgd d f }t	|| d}|d|d}|jd
gd d f }t	|| d S )Nz1000000000.006rc   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > rI   rF   r   A == )
rf   rg   r9   float64r   queryemptylocrh   r   )	rj   r*   r4   r   rp   ro   r   cutoffexactr+   r+   r,   test_float_truncation  s    

zTestEval.test_float_truncationc                 C  s   t g dgg dd}d}tjt|d |d W d    n1 s$w   Y  t  }d|j_tjt|d |d W d    d S 1 sHw   Y  d S )	N)r   r   r   )foobarclasscolumnsz4Python keyword not valid identifier in numexpr queryr_   z
class == 0lambdazlambda == 0)r   r#   rd   SyntaxErrorr   indexnamerj   r   rk   r+   r+   r,   test_disallow_python_keywords  s   "z&TestEval.test_disallow_python_keywordsc                 C  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)check_stacklevelznot Truer   z	not Falser   zTrue and not Truer   )rh   maybe_produces_warningDeprecationWarningr   rf   rg   )rj   r+   r+   r,   test_true_false_logic  s   "zTestEval.test_true_false_logicc                 C  sR   t ddi}t|jdj sJ t|jdjo"|jdj s'J d S )Nr   hello)r   rf   rg   r7   r`   r   )rj   eventr+   r+   r,   test_and_logic_string_match  s   ,z$TestEval.test_and_logic_string_matchN)3__name__
__module____qualname__r#   r%   parametrizer   BOOL_OPS_SYMSrq   CMP_OPS_SYMSr   r   r   sortedsetr   
differencer   r   r   r   r'   skip_if_windowsr   r   r   r   r   r   r   r9   rJ   rK   rL   r   r   r   r   r   r   float32r   r   r   r   r   r   r   r   r  r  r+   r+   r+   r,   rO   v   s|    
"
3
 

-/


!
rO   c                  O  s   t jd S )NrF   )r9   rJ   rK   rL   )argskwargsr+   r+   r,   <lambda>  s    r  c                   @  sN   e Zd Zejdg dejdejejgejdddgdd Z	d	S )
TestTypeCastingr   )+-*r   /dt
left_right)r   3)r  r   c                 C  sr   t jddt|d}|\}}| d| d| }	tj|	||d}
|jj|ks'J |
jj|ks/J t |
t|	 d S )NrA   r   )
data_gen_fr    rc   )rh   makeCustomDataframefrf   rg   r   r   r   )rj   r*   r4   r   r  r  r   leftrightsr   r+   r+   r,   test_binop_typecasting  s   z&TestTypeCasting.test_binop_typecastingN)
r  r  r  r#   r%   r	  r9   r  r   r#  r+   r+   r+   r,   r    s
    r  c                  G  s4   t ttd|  }ttjdd | D }|o|S )Nis_monotonic_increasingc                 s  s     | ]}t |jjtjV  qd S r0   )
issubclassr   typer9   
datetime64r   r+   r+   r,   r-     s    zshould_warn.<locals>.<genexpr>)anymap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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)ir"  r  r"  c                 C  s8   d}t jddtd}tj|||d}t ||d  d S )Nzdf * ~2rA   r   )r  rc   )rh   r  r  rf   rg   r   )rj   r*   r4   r"  r   r   r+   r+   r,   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 jddt||d}t jddt||d}t|j|jr9t t tjd||d}W d    n1 s3w   Y  ntjd||d}t 	|||  d S )NrG   r  
r_idx_typer6     zdf + df2rc   
rh   r  r  r/  r   assert_produces_warningRuntimeWarningrf   rg   r   )	rj   r*   r4   r4  r5  r6  r   df2r   r+   r+   r,   test_basic_frame_alignment  s   

z(TestAlignment.test_basic_frame_alignmentr8  c                 C  sz   t jddt||d}tjd||d}t ||dk  ttj	d
|j|j|jd}tjd||d}t |||k  d S )NrG   r7  df < 2rc   rF   )r   r   zdf < df3)rh   r  r  rf   rg   r   r   r9   rJ   rK   rL   r   r   r   )rj   r*   r4   r8  r6  r   r   df3r+   r+   r,   test_frame_comparison  s   
z#TestAlignment.test_frame_comparisonzignore::RuntimeWarningr1c1r2c2c                 C  s   t jddt||d}t jddt||d}t jddt||d}	t|j|j|	jrEt t tjd||d}
W d    n1 s?w   Y  ntjd||d}
t 	|
|| |	  d S )Nr   rF   r7     rA   zdf + df2 + df3rc   r:  )rj   r*   r4   rB  rC  rD  rE  r   r=  r@  r   r+   r+   r,   #test_medium_complex_frame_alignment!  s   z1TestAlignment.test_medium_complex_frame_alignment
index_namer   r   c                 C  s   t jddt||d}t||}ttjdd|d d }t	|j
|j
rDt t tjd||d}	W d    n1 s>w   Y  ntjd||d}	|dksT|dkrb|dkr]||n|| }
n|| }
t |	|
 d S )	NrG   r7  rF   rA   df + src   r  r   )rh   r  r  getattrr   r9   rJ   rK   rL   r/  r   r;  r<  rf   rg   addr   )rj   r*   r4   rH  r8  r6  r   r   r"  r   ro   r+   r+   r,   !test_basic_frame_series_alignment1  s   

 z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_typer1  )r  r  c              
   C  s>  |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 d }
t|
j|jrutt tjd||d}W d    n1 sow   Y  ntjd||d}|dks|dkr|dkr||
n|
| }n|
| }t|| d S )Nr   )r   rZ   r   r1  r"  z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r    strictrG      r7  rF   rA   zs + dfrc   r  )r   r   r#   r%   r   rh   r  r  rJ  r   r9   rJ   rK   rL   r/  r   r;  r<  rf   rg   rK  r   )rj   r3   r*   r4   rH  r8  r6  r    r   r   r"  r   ro   r+   r+   r,   !test_basic_series_frame_alignmentJ  s>   


 z/TestAlignment.test_basic_series_frame_alignmentr   r  r  c                 C  s.  t jddt||d}t||}ttjdd|d d }	d| d}
d| d}t	|j
|	j
rmt t tj|
||d	}W d    n1 sJw   Y  t t tj|||d	}W d    n1 sgw   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 )NrG   r7  rF   rA   zs z dfzdf z src   r  r   )rh   r  r  rJ  r   r9   rJ   rK   rL   r/  r   r;  r<  rf   rg   r   )rj   r*   r4   rH  r   r8  r6  r   r   r"  r;   r=   r   r   r+   r+   r,   test_series_frame_commutativityq  s,   

 z-TestAlignment.test_series_frame_commutativityc                 C  s  d}d}d| }	t jdddg}
t jdddg}tj||t||d}tj|	|t||d}tt 	||
}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   rA   rF   r   r   r   r=  r7  r  r   zdf2 + ser + dfrc   )r9   rJ   rK   choicerh   r  r  rJ  localsgetr   rL   rK  r/  r   r;  r<  rf   rg   r   r   )rj   r*   r4   rB  rC  rD  rE  nm1m2rH  obj_namer   r=  r   ser	expected2ro   r   r+   r+   r,   #test_complex_series_frame_alignment  s6    

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 )NrF   )  rG   '  r   FrI  rc   r[  )rG   r\  )rG   rG   rZ   rI   r   z_Alignment difference on axis 1 is larger than an order of magnitude on term 'df', by more than z.4gz; performance may suffer.)r   r9   rJ   rK   rL   r   r   rh   r;  rf   rg   lenr7   messagelog10r   r   )rj   r*   r4   r   r"  seenis_python_enginewrnwrk   loggedro   r+   r+   r,   +test_performance_warning_for_poor_alignment  sL   $z9TestAlignment.test_performance_warning_for_poor_alignmentN)r  r  r  index_typeslhs_index_typesr3  r#   r%   filterwarningsr	  r>  rA  rG  rL  listr   rO  rP  rZ  re  r+   r+   r+   r,   r0    sV    





!
%r0  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   rI   poprf   rg   rj   r  r  r+   r+   r,   rg        zTestOperations.evalc              	     sH  g  |dkr
ddg  fddt jt j D }dd |D }|D ]}d| d	}d
| d	}d| d}|dv rZd}	tjt|	d tj|||d W d    n1 sTw   Y  q td|d|}
| j|||d}||
ksoJ t||d|}
| j|d|i||d}||
ksJ td||d |}
| j|d|i||d}||
ksJ q d S )NrZ   rt   ru   c                   s   g | ]}| vr|qS r+   r+   r)   r   exclude_arithr+   r,   
<listcomp>  s
    z8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s    | ]	}|d kr|V  qdS )z//Nr+   rr  r+   r+   r,   r-     r   z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rs   z&argument of type 'int' is not iterabler_   rc   rI   r   r   )	r   r   r  r#   rd   r~   rf   rg   r@   )rj   r*   r4   	arith_opsopsr   rl   r   r   rk   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  rZ   r[   r^   r_   r4   r#   rd   re   rg   rj   r=   r;   r   rl   rk   r   r   r+   r+   r,   test_simple_bool_ops     

z#TestOperations.test_simple_bool_opsc                 C  r{  r|  r}  r~  r+   r+   r,   test_bool_ops_with_constants!  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 )	NrF   )r   rF  rA      rG   z?N-dimensional objects, where N > 2, are not supported with evalr_   x + yr   ry  r|   )	r9   rJ   rK   rL   r   r#   rd   re   rg   )rj   r   ry  rk   r+   r+   r,   test_4d_ndarray_fails1  s   "z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1rI   )rg   )rj   r   r+   r+   r,   test_constant8  s   
zTestOperations.test_constantc                 C  s8   t tjdd}| jdd|id}t|| d S )NrF   rG   rF   r   r  r   r9   rJ   rK   rL   rg   rh   r   )rj   r   r=  r+   r+   r,   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 )NrF   rA   r   name 'x' is not definedr_   zdf[x > 2] > 2)	r   r9   rJ   rK   rL   r#   rd   	NameErrorrg   rj   r   r+   r+   r,   &test_failing_subscript_with_name_errorA  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 )NrF   r  z(df + 1)[df > 2]r   r  rI   r  r   r+   r+   r,   test_lhs_expression_subscriptF  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 )NrF   r  abcr   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   r   r  )r   r9   rJ   rK   rL   ri  r   r   r>   ziprh   r   rg   )rj   r   expr1expec1expr2expec2expr3expec3exprsexpecsr?   rx  r+   r+   r,   test_attr_expressionL  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 )
NrF   r  r  r   zdf = df2%cannot assign without a target objectr_   )r   r=  r  )
r   r9   rJ   rK   rL   ri  r#   rd   r6   rg   )rj   r   r=  r  rk   r+   r+   r,   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 )NrF   r   abr   invalid syntaxr_   zd c = a + b
r   r9   rJ   rK   rL   ri  r#   rd   r   rg   r  r+   r+   r,   %test_assignment_column_multiple_raisee  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 )NrF   r   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_assignm  s   "z4TestOperations.test_assignment_column_invalid_assignc                 C  r  )NrF   r   r  r   zcannot assign to function callr_   zTimestamp("20131001") = a + br  r   r+   r+   r,   3test_assignment_column_invalid_assign_function_callv  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 )
NrF   r   r  r   r   r   	a = a + bTinplace
r   r9   rJ   rK   rL   ri  copyrg   rh   r   rj   r   ro   r+   r+   r,   &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 )NrF   r   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 )NrF   r   r  r   rI   z	a = 1 + bTr  r   r   r  )rj   r   r   ro   r+   r+   r,   +test_assignment_single_assign_local_overlap  s   z:TestOperations.test_assignment_single_assign_local_overlapc                 C  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 )NrF   r   r  r   rI   r  Tr  Fr   )r   r9   rJ   rK   rL   ri  r   r  rg   r   rh   r   r   )rj   r   r   old_arp   r+   r+   r,   "test_assignment_single_assign_name  s   

z1TestOperations.test_assignment_single_assign_namec                 C  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 )NrF   r   r  r   r  Tr  z#can only assign a single expressionr_   z	c = a = b)
r   r9   rJ   rK   rL   ri  rg   r#   rd   r   r   r+   r+   r,   test_assignment_multiple_raises  s   "z.TestOperations.test_assignment_multiple_raisesc                 C  s`   t tjddtdd}| jdd|i|dd | }|d	 |d
  |d< t	|| d S )NrF   r   r  r   zc = df.a + df.br   T)r|   targetr  r   r   r>   
r   r9   rJ   rK   rL   ri  rg   r  rh   r   r  r+   r+   r,   test_assignment_explicit  s   z'TestOperations.test_assignment_explicitc                 C  s:   t dgdgd}|d}tdg}tj||dd d S )N   ir   r   za in [11, -32]TFr   )r   rg   r   rh   r   r   r+   r+   r,   test_column_in  s   

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r   c                 C  sd   t tjddtdd}|jddd}|d usJ | }|d |d	  |d
< t	|| d S )NrF   r   r  r   r  Fr  r   r   r>   r  )rj   r   actualro   r+   r+   r,   test_assignment_not_inplace  s   z*TestOperations.test_assignment_not_inplacec                 C  s   t g dg dd}| }|d |d  |d< |d |d  |d< |jdd	d
}t|| |d u s6J |d d |d< |d d |d< |jdd	d
}t|| |d u sYJ d}tjt|d |jddd
 W d    d S 1 suw   Y  d S )NrI   rF   r   rF  rA   r  r  r   r   r>   d$
        c = a + b
        d = c + bTr  rI   rF   r?   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containr_   z(
            a = b + 2
            b - 2F)r   r  rg   rh   r   r#   rd   r6   )rj   r   ro   answerrk   r+   r+   r,   test_multi_line_expression  s2   "z)TestOperations.test_multi_line_expressionc                 C  s   t g dg dd}| }|d |d  |d< |d |d  |d< |jdd	d
}t|| |d d |d< |d d |d< |jdd	d
}t|| d S )Nr  r  r  r   r   r>   r  r  Fr  rI   rF   r?   r  r   r  rg   rh   r   r  r+   r+   r,   &test_multi_line_expression_not_inplace  s    z5TestOperations.test_multi_line_expression_not_inplacec                 C  sl   t g dg dd}| }d}|d | |d< |d | |d< |jdd	d
}t|| |d u s4J d S )Nr  r  r  rN  r   r>   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr  r  )rj   r   ro   	local_varr  r+   r+   r,   )test_multi_line_expression_local_variable  s   z8TestOperations.test_multi_line_expression_local_variablec                 C  s|   t g dg dd}dd }| }|d |dd |d	< |d	 |dd |d
< |jddd}t|| |d u s<J d S )Nr  r  r  c                 S     |S r0   r+   r  r+   r+   r,   
local_func)     zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr   rI   rN  r>   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr  r  rj   r   r  ro   r  r+   r+   r,   2test_multi_line_expression_callable_local_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  r0   r+   r  r+   r+   r,   r  =  r  zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   rN  rI   )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_kwargs9  s   zMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc                 C  sj   t g dg dd}| }d}tjt|d |d W d    n1 s(w   Y  t|| d S )Nr  r  r  r  r_   za = 1)r   r  r#   rd   r6   r   rh   r   )rj   r   df_origrk   r+   r+   r,   test_assignment_in_queryM  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   rF   za == 2Tr  r   	a = 1 + 2r  r  )r   r  r   rh   r   rg   assert_dict_equalr  r+   r+   r,   test_query_inplaceV  s   z!TestOperations.test_query_inplaceinvalid_targetrI   catrF   rI   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#   rd   r6   rg   hasattrrj   r  rk   
expressionr+   r+   r,   test_cannot_item_assignd  s   
"z&TestOperations.test_cannot_item_assign)rI   r  r  c                 C  sL   d}d}t jt|d | j||dd W d    d S 1 sw   Y  d S )Nz"Cannot return a copy of the targetr  r_   Fr  )r#   rd   r6   rg   r  r+   r+   r,   test_cannot_copy_itemp  s
   "z$TestOperations.test_cannot_copy_itemr  c                 C  sd   d}| j ||dddksJ d}tjt|d | j ||dd W d    d S 1 s+w   Y  d S )N1 + 2Fr  r   z0Cannot operate inplace if there is no assignmentr_   T)rg   r#   rd   r6   )rj   r  r  rk   r+   r+   r,   test_inplace_no_assignmentx  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 )NrF   pr1  r  r6  r8  r?  r   r  rh   r  r  rg   r   )rj   r   r?   rr   r+   r+   r,   *test_basic_period_index_boolean_expression  s   z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sB   t jddtddd}| jdd|id}||dk  }t || d S )	NrF   r  r1  r  zdf[df < 2 + 3]r   r  rA   r  rj   r   r  r?   r+   r+   r,   ,test_basic_period_index_subscript_expression  s   z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sR   t jddtddd}| jdd|id}|||dk  dk  |d  }t || d S )NrF   r  r1  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  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 )NrF   r  z1/1/2012rA   )periodsdates1zdf.dates1 < 20130101r   r   20130101Fr   )
r   r9   rJ   rK   rL   r   rg   r  rh   r   )rj   r*   r4   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 )NrZ   z1 in [1, 2]rc   z2 in (1, 2)z3 in (1, 2)z3 not in (1, 2)z[3] not in (1, 2)z[3] in ([3], 2)z[[3]] in [[[3]], 2]z(3,) in [(3,), 2]z(3,) not in [(3,), 2]z[(3,)] in [[(3,)], 2]z'In' nodes are not implementedr_   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))rf   rg   r#   rd   re   )rj   r*   r4   r   rk   r+   r+   r,   test_simple_in_ops  sR   $z!TestOperations.test_simple_in_opsc                 C  s2   d}d d}d}tj|||d}||ksJ d S )NrI   z * !aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarc   )r}   rf   rg   )rj   r*   r4   r   r   ro   r   r+   r+   r,   test_check_many_exprs  s
   
z$TestOperations.test_check_many_exprsr   )zdf > 2 and df > 3zdf > 2 or df > 3z
not df > 2c                 C  s   t tjdd}|dkr<d}d|v rd}tjt|d tj	|d|i||d	 W d    d S 1 s5w   Y  d S tj	|d|i||d	 d S )
NrF   r  rZ   r^   not'Not' nodes are not implementedr_   r   )r|   r4   r*   
r   r9   rJ   rK   rL   r#   rd   re   rf   rg   )rj   r   r*   r4   r   rk   r+   r+   r,   test_fails_and_or_not  s&   	"	
z$TestOperations.test_fails_and_or_notcharry   r   c                 C  s   t tjdd}d| d}|dkr9d}tjt|d tj	|||d W d    d S 1 s2w   Y  d S tj	|||d d S )	NrF   r  z(df + 2)[df > 1] > 0 z	 (df > 0)rZ   z$cannot evaluate scalar only bool opsr_   r   r  )rj   r  r*   r4   r   rl   rk   r+   r+   r,   test_fails_ampersand_pipe  s   "z(TestOperations.test_fails_ampersand_pipeN)3r  r  r  rg   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  r9   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,   rg     rq  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   rF   rG   z(a)ignoreallFr   )r   r9   rJ   rK   rL   r   rg   errstaterJ  rh   r   )rj   r  r   r   r   gotr   r+   r+   r,   test_unary_functions  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 )	NrF   rG   r  z(a, b)r  r  Fr   )r   r9   rJ   rK   rL   r   r   rg   r  rJ  rh   r   )rj   r  r   r   r   r   r  r   r+   r+   r,   test_binary_functions  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 )	NrF   rG   r  ze = arctan2(sin(a), b)Tr*   r4   r  Fr   )r   r9   rJ   rK   rL   rg   r?   arctan2sinr   r   rh   r   rj   r*   r4   r   r  r   r+   r+   r,   test_df_use_case*  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 )	NrF   rG   r  ze = sin(a + b)Tr  Fr   )r   r9   rJ   rK   rL   rg   r?   r  r   r   rh   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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   rF   rG   z
b = sin(a)Tr  Fr   )r   r9   rJ   rK   rL   r   r   r   rg   r   r  rh   r   )rj   r   expect_dtyper*   r4   r   r  r   r+   r+   r,   test_result_typesG  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   rF   rG   z#"mysin" is not a supported functionr_   zmysin(a)rc   )	r   r9   rJ   rK   rL   r#   rd   r6   rg   rj   r*   r4   r   rk   r+   r+   r,   test_undefined_funcb  
   "zTestMath.test_undefined_funcc                 C  r  )Nr   rF   rG   z1Function "sin" does not support keyword argumentsr_   zsin(x=a)rc   )	r   r9   rJ   rK   rL   r#   rd   r~   rg   r  r+   r+   r,   test_keyword_argi  r  zTestMath.test_keyword_argN)r  r  r  rg   r#   r%   r&   r   r	  r   r  r   r  r  r   r9   int32r   int64r  r$   
complex128r'   r  r  r  r  r+   r+   r+   r,   r    s.    

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

r  rF   rG   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 * 2rF   rc   )rh   r   _var_srf   rg   )rj   r*   r4   r?   r+   r+   r,   test_global_scopeu  s   zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks J d S )NrI   x + 1r   lcls)rR  r  rf   rg   ro  )rj   r*   r4   r   r  lcls2r+   r+   r,   test_no_new_locals{  s   


zTestScope.test_no_new_localsc                 C  s8   d}t   }tjd||d t   }||ksJ d S )NrI   r  rc   )globalsr  rf   rg   )rj   r*   r4   r   gblsgbls2r+   r+   r,   test_no_new_globals  s
   

zTestScope.test_no_new_globalsc                 C  sN   d}d}t jt|d tjd||i d W d    d S 1 s w   Y  d S )NrI   r  r_   r  r{   r#   rd   r   rf   rg   )rj   r*   r4   r   rk   r+   r+   r,   test_empty_locals  
   "zTestScope.test_empty_localsc                 C  sN   d}d}t jt|d tj|||i d W d    d S 1 s w   Y  d S )Nzname '_var_s' is not definedr  r_   )r*   r4   global_dictr  )rj   r*   r4   rk   r?   r+   r+   r,   test_empty_globals  r  zTestScope.test_empty_globalsN)r  r  r  r  r  r  r  r  r+   r+   r+   r,   r  t  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  rI   rF   r  asdf)r|   r*   r#   rd   KeyErrorrf   rg   rk   r+   r+   r,   test_invalid_engine     "r!  )use_numexprro   ))Tr   )FrZ   c                 C  sR   ddl m} td|  |d }||ksJ W d    d S 1 s"w   Y  d S )Nr   )_check_enginecompute.use_numexpr)pandas.core.computation.evalr$  rf   option_context)r#  ro   r$  rp   r+   r+   r,   test_numexpr_option_respected  s
   
"r(  c                  C  s|   t dd. tg dg dd} | d}td d gddgdd	dgd
}t|| W d    d S 1 s7w   Y  d S )Nr%  F)TFTFNN)rI   rF   r   rF  rA   r  )r   Bz
A.isnull()rA   r  rF  )r   )rf   r'  r   r   rh   r   )r   rp   ro   r+   r+   r,   #test_numexpr_option_incompatible_op  s   
"r*  c                  C  r  )	NzInvalid parser 'asdf' passedr_   r  rI   rF   r  r  )r|   r4   r  r   r+   r+   r,   test_invalid_parser  r"  r+  )rZ   r   r   z dict[str, type[BaseExprVisitor]]_parsersc              	   C  sb   t | }|d| |}|jD ]!}d}tjt|d t||  W d    n1 s)w   Y  qd S )Nr  znodes are not implementedr_   )r,  unsupported_nodesr#   rd   re   rJ  )r*   r4   VisitorClassinstrw  rk   r+   r+   r,   test_disallowed_nodes  s   
r0  c                 C  sH   d}t jtdd tj|| |d W d    d S 1 sw   Y  d S )Nzs +r  r_   rc   r#   rd   r   rf   rg   )r*   r4   r?   r+   r+   r,   test_syntax_error_exprs  s   "r2  c                 C  sL   d}d}t jt|d tj|| |d W d    d S 1 sw   Y  d S )Nzs + tzname 's' is not definedr_   rc   )r#   rd   r  rf   rg   )r*   r4   r?   rk   r+   r+   r,   test_name_error_exprs  s
   "r3  express)za + @bz@a + bz@a + @bc                 C  s   d\}}|dkr*t jtdd tj|| |d W d    d S 1 s#w   Y  d S t jtdd tj|| |d W d    d S 1 sEw   Y  d S )NrI   rF   r   zThe '@' prefix is onlyr_   rc   zThe '@' prefix is notr1  )r*   r4   r4  r   r   r+   r+   r,   %test_invalid_local_variable_reference  s   ""r6  c                 C  s|   d\}}| dkr,d}t jt|d tjd| |d W d    d S 1 s%w   Y  d S tjd| |d}||| ks<J d S )Nr5  r   zVariables in expression .+r_   zsin + dotted_linerc   )r#   rd   r   rf   rg   )r*   r4   r  dotted_linerk   r   r+   r+   r,   test_numexpr_builtin_raises  s   "r8  c                 C  sJ   d}t jtdd tjd|| |d W d    d S 1 sw   Y  d S )N)*   g      @zResolver of type .+r_   r  )	resolversr*   r4   r   )r*   r4   cannot_resolver+   r+   r,   test_bad_resolver_raises  s   "r<  c                 C  D   t jtdd tjd| |d W d    d S 1 sw   Y  d S )Nzexpr cannot be an empty stringr_    rc   r#   rd   r6   rf   rg   rc   r+   r+   r,   test_empty_string_raises  s   "r@  c                 C  r=  )Nz#only a single expression is allowedr_   z1 + 1; 2 + 2rc   r1  rc   r+   r+   r,   $test_more_than_one_expression_raises  s   "rA  cmpr[   r=   c              	   C  s   t dd ttj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 )NrF   rG   )r9   rJ   rK   r   r+   r+   r+   r,   r    s    z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rF   rw   r   rx   r   ra   r   rb   r   r_   rc   )intrD   r9   rJ   rK   rL   r#   rd   re   rf   rg   )r;   rB  r=   r*   r4   genr   r   r   r   rl   rk   r+   r+   r,   test_bool_ops_fails_on_scalars  s    


rE  otherz'x'z...c                 C  sJ   t dg di}|d|  }tg ddd}trd |_t|| d S )Nr   )r   r   r>   r   )FFFr   )r   rg   r   r   r   rh   r   )rF  r   rp   ro   r+   r+   r,   test_equals_various"  s   rH  c                 C  s*   d}t j}tj|| |d}||ksJ d S )Nzinf + 1rc   )r9   infrf   rg   )r*   r4   r"  ro   rp   r+   r+   r,   test_inf4  s   rJ  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 )	NrF   r   r   r   rA   `z` > 5)r*   )r   r9   rJ   rK   rL   r   rh   r   )r*   rK  r   ro   query_stringrp   r+   r+   r,   test_query_token;  s   rN  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   rG   rI   r9  r  countr   z
~(cat > 0)rc   rZ   r  r_   znot (cat > 0))r   r  r   rh   r   r#   rd   re   )r*   r4   r   ro   rp   rk   r+   r+   r,   test_negate_lt_eq_leG  s   "rP  c                 C  sz   |dv r| j 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FalserI  Infz+GH 47859 DataFrame eval not supported with )rd   r    rF   r   d   r  r   col1r   r  z>6)r   r   r#   r%   r   r  r   r9   rJ   rK   r   r   rh   r   )r3   rK  r   ro   rp   r+   r+   r,    test_eval_no_support_column_nameW  s   rV  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  )rN     	   )r   r)  Cr   z	A = B + CTr  )r        rG  )r   rg   rh   r   r   r   )using_copy_on_writer   result_viewrX  ro   r+   r+   r,   test_set_inplaceo  s   r^  c                   @  s.   e Zd Zejdddg ddgdd ZdS )	TestValidatevaluerI   rQ  r  g      @c                 C  sF   d}t jt|d tjd|d W d    d S 1 sw   Y  d S )Nz8For argument "inplace" expected type bool, received typer_   z2+2r  r?  )rj   r`  rk   r+   r+   r,   test_validate_bool_args  s   "z$TestValidate.test_validate_bool_argsN)r  r  r  r#   r%   r	  ra  r+   r+   r+   r,   r_    s    r_  )h
__future__r   	functoolsr   	itertoolsr   r*  numpyr9   r#   pandas.compatr   pandas.errorsr   r   r   pandas.util._test_decoratorsutil_test_decoratorsr'   pandas.core.dtypes.commonr	   r
   r   r   r   rf   r   r   r   pandas._testing_testingrh   pandas.core.computationr   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*   PARSERSr4   r@   ri  ranger;   r=   r   rO   r  r  r/  r0  rj  r  rJ   rK   rL   r  r  r(   r!  r%   r	  r(  r*  r+  PyTablesExprVisitorr,  __annotations__r0  r2  r3  r6  r8  r<  r@  rA  rC  rD   rE  rH  rJ  rN  rP  keysrV  r^  r_  r+   r+   r+   r,   <module>   s    



    \ y    !k%
	






