U
    _{f                    @  sv  U d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dl	Z
d dlZd dlmZmZmZ d dlm  mZ d dlmZmZmZmZ d dlZd dlmZmZmZ d dlmZ  d dl!m"Z"m#Z# d d	l$m%Z% d d
l&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 ej5dd e%D ddd Z6ej5e"j7ddd Z8dd Z9ej5e:e;ddddddgddd Z<e<Z=e<Z>G d d! d!Z?d"d# Z@G d$d% d%ZAd&d' ZBG d(d) d)ZCG d*d+ d+ZDG d,d- d-ZEe
jFd.ZGG d/d0 d0ZHejId1d2 ZJejIejKLd3d4d5d6 ZMejId7d8 ZNejId9d: ZOe)e#jPe(d;ZQd<eRd=< ejKLde%ejKLdeQd>d? ZSd@dA ZTdBdC ZUejKLdDdEdFdGgdHdI ZVdJdK ZWdLdM ZXdNdO ZYdPdQ ZZejKLdRdSejKLde[e\fejKLdTe[e\fdUdV Z]ejKLdWdXdYgdZd[ Z^d\d] Z_ejKLd^d_d`gdadb Z`dcdd ZaejKLd^e4b dedf Zcdgdh ZdG didj djZedS )k    )annotations)reduce)productN)NumExprClobberingErrorPerformanceWarningUndefinedVariableError)is_boolis_floatis_list_like	is_scalar)	DataFrameSeries
date_range)exprpytables)ENGINES)BaseExprVisitorPandasExprVisitorPythonExprVisitor)NUMEXPR_INSTALLEDUSE_NUMEXPR)ARITH_OPS_SYMSSPECIAL_CASE_ARITH_OPS_SYMS_binary_math_ops_binary_ops_dict_unary_math_ops)DEFAULT_GLOBALSc              	   c  sD   | ]<}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ZmarksN)pytestparammarkskipifr   r   tdskip_if_no_ne).0engine r)   a/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/pandas/tests/computation/test_eval.py	<genexpr>:   s   r+   )paramsc                 C  s   | j S Nr"   requestr)   r)   r*   r(   9   s    r(   c                 C  s   | j S r-   r.   r/   r)   r)   r*   parserM   s    r1   c              
   C  sj   t | }t| jr`z|| |W S  tk
r^ } z"t|drLtj W Y S  W 5 d }~X Y nX || |S )Nz6negative number cannot be raised to a fractional power)r   r   Zhas_neg_frac
ValueErrorstr
startswithnpnan)lhscmp1rhsr(   cer)   r)   r*   _eval_single_binR   s    
r<      r   r   Z	SeriesNaNZDataFrameNaNfloat)r,   idsc                 C  sj   t tjdd}tj||dk< t tjddttjdtddtjtjdg|tj f}|| j S )N
   r=         ?      )r   r5   randomrandr6   randnr   r"   )r0   Znan_df1optsr)   r)   r*   r7   a   s    r7   c                
   @  sP  e Zd Zejjdddddddgdd	d
dddg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/d0eejj!d/d1d2eej"d/d0d3kgd4d5 Z#ejd.e$ej d/e$ejj!d/d/d2e$ej"d/d3kgd6d7 Z%d8d9 Z&d:d; Z'ejd<ej(ej)gejd=d>d?gd@dA Z*dBdC Z+ejdDdEdFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dTS )UTestEvalr8   z!=z==z<=z>=<>neeqlegeltgt)r?   cmp2binopc              	   C  s   |dkrZ|dkrZd}t jt|d. d| d| d| d}	tj|	||d	 W 5 Q R X 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(   r1   )r!   raisesNotImplementedErrorpdevalr<   tmassert_equal)selfr8   rQ   rR   r7   r9   r(   r1   msgexlhs_newrhs_newexpectedresultr)   r)   r*   test_complex_cmp_opsx   s    zTestEval.test_complex_cmp_opscmp_opc           
   	   C  s   |dk }|dk }|dkr^|dkr^d}t jt|d" d| d}tj|||d W 5 Q R X d S d| d}d	d
dg}|dkrt|st jt|d tj|||||dd W 5 Q R X n*t||||}tj|||d}	t	
|	| d S )Nr   rS   innot in&'(In|NotIn)' nodes are not implementedrX   lhs  rhsr\   |zxonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')bool(\]|')z'argument of type 'bool' is not iterabler7   r9   r(   r1   
local_dict)r!   r]   r^   r_   r`   joinr
   	TypeErrorr<   ra   rb   )
rc   rk   r7   r9   r(   r1   rd   re   rh   ri   r)   r)   r*   test_simple_cmp_ops   s2    zTestEval.test_simple_cmp_opsopc              	   C  sf  |dkrN|dkrNd}t jt|d" d| d}tj|||d W 5 Q R X d S t|rt|s|dkr|dkr|dkrt jjd	d
}	|j	|	 ddg}
d| d}d
ddg}t|r||
krt jt|d tj|||||dd W 5 Q R X nlt|r t|r tdd ||f\}}t||||}t|r@| }n| }tj|||d}t|| d S )NrS   rl   ro   rX   z~(lhs r[   r\   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   rm   rn   rr   zyonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')float(\]|')z(argument of type 'float' is not iterablers   rt   c                 S  s   t | gS r-   )r5   arrayxr)   r)   r*   <lambda>       z2TestEval.test_compound_invert_op.<locals>.<lambda>)r!   r]   r^   r_   r`   r	   r#   xfailnode
add_markerrv   r   rw   mapr<   ra   assert_almost_equal)rc   ry   r7   r9   r0   r(   r1   rd   re   r#   Z
skip_theserh   ri   r)   r)   r*   test_compound_invert_op   sV    
z TestEval.test_compound_invert_opc              	   C  s   |}|dkrPd| d| d}	d}
t jt|
d tj|	||d W 5 Q R X d S t||||}t||||}|d k	r|d k	rd| d| d}	d| d| d}d	| d
| d}t|d||}|	||fD ] }tj|||d}t|| qd S )NrS   rp    mid rq   rW   rX   r\    mid and mid rZ    mid) & (mid r[   &)r!   r]   r^   r_   r`   r<   ra   r   )rc   r8   rQ   r7   midhsr9   r(   r1   midex1rd   rf   rg   ex2ex3rh   re   ri   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k
r   Y d S X |dkrdd l	}|
d| d}t|j| ntd| d}t|| d S )	Nrp   rq   r\   z rhs r   r   znlhs z ghs)r_   r`   r<   ra   r   alignr2   rw   AttributeErrorr   evaluatevalues)rc   r   r7   r9   r(   r1   re   ri   rh   ZnlhsZghsrK   r)   r)   r*   test_binary_arith_ops   s"    zTestEval.test_binary_arith_opsc           	      C  s   d}t j|||d}|| }t|| |dkrrdd l}|d}t|ttfr`t|j	| qt||
  nt|d||}t|| d S )Nz	lhs % rhsr\   r   r   zexpected % rhs%)r_   r`   ra   r   r   r   
isinstancer   r   r   itemr<   )	rc   r7   r9   r(   r1   re   ri   rh   rK   r)   r)   r*   test_modulus"  s    
zTestEval.test_modulusc           	   	   C  sl   d}|dkr2t j|||d}|| }t|| n6d}tjt|d t j|||d||d W 5 Q R X d S )Nz
lhs // rhsrS   r\   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'rX   rs   ru   r(   r1   )r_   r`   ra   rb   r!   r]   rw   )	rc   r7   r9   r(   r1   re   resrh   rd   r)   r)   r*   test_floor_division4  s    zTestEval.test_floor_divisionc           
   	   C  s   d}t |d||}tj|||d}t|rxt|rxt|ttjfrxt|rxd}t	j
t|d t|| W 5 Q R X nHt|| d}tj|||d}t |d||}	t |	d||}t|| d S )Nz
lhs ** rhs**r\   z-(DataFrame.columns|numpy array) are differentrX   z(lhs ** rhs) ** rhs)r<   r_   r`   r   r   complexr5   Zcomplexfloatingisnanr!   r]   AssertionErrorra   assert_numpy_array_equalr   )
rc   r7   r9   r(   r1   re   rh   ri   rd   middler)   r)   r*   test_powH  s(    zTestEval.test_powc                 C  sZ   z| t}W n$ tk
r2   tt|g}Y nX | }tjd||d}t|| d S )Nz~elbr\   )	astypeboolr   r5   r{   r_   r`   ra   r   )rc   r7   r(   r1   Zelbrh   ri   r)   r)   r*   test_check_single_invert_opb  s    z$TestEval.test_check_single_invert_opc              	   C  s  d}t tjdd}|dkrNd}tjt|d tj|||d W 5 Q R X n.d}tjt	|d tj|||d W 5 Q R X t tjj
dd	d
}|dkrd}tjt|d tj|||d W 5 Q R X n"| }tj|||d}t|| t tjdddk}| }tj|||d}t|| t dddgtjddkd}|dkrxtjtdd tj|||d W 5 Q R X n.d}tjt	|d tj|||d W 5 Q R X d S )N~lhsr=   rC   r   -couldn't find matching opcode for 'invert_dd'rX   r\   0ufunc 'invert' not supported for the input typesr=   rC   size)couldn't find matching opcode for 'invertrA   arB          @   )br:   unknown type object#bad operand type for unary ~: 'str')r   r5   rD   rF   r!   r]   r^   r_   r`   rw   randintra   assert_frame_equalrE   r2   )rc   r(   r1   r   r7   rd   expectri   r)   r)   r*   test_frame_invertl  s8     
zTestEval.test_frame_invertc              	   C  s  d}t tjd}|dkrLd}tjt|d tj|||d}W 5 Q R X n.d}tjt	|d tj|||d W 5 Q R X t tjj
ddd}|dkrd	}tjt|d tj|||d W 5 Q R X n"| }tj|||d}t|| t tjdd
k}| }tj|||d}t|| t dddg}|dkrbtjtdd tj|||d W 5 Q R X n.d}tjt	|d tj|||d W 5 Q R X d S )Nr   r=   r   r   rX   r\   r   r   r   rA   r   rB   r   r   r   )r   r5   rD   rF   r!   r]   r^   r_   r`   rw   r   ra   assert_series_equalrE   r2   )rc   r(   r1   r   r7   rd   ri   r   r)   r)   r*   test_series_invert  s8    
zTestEval.test_series_invertc              	   C  s   d}t tjdd}| }tj|||d}t|| t tjjddd}| }tj|||d}t|| t tj	dddk}|dkrd	}t
jt|d
 tj|||d W 5 Q R X n"| }tj|||d}t|| d S )N-lhsr=   rC   r\   r   r   rA   r   *couldn't find matching opcode for 'neg_bb'rX   )r   r5   rD   rF   r_   r`   ra   r   r   rE   r!   r]   r^   rc   r(   r1   r   r7   r   ri   rd   r)   r)   r*   test_frame_negate  s"    zTestEval.test_frame_negatec              	   C  s   d}t tjd}| }tj|||d}t|| t tjjddd}| }tj|||d}t|| t tj	ddk}|dkrd}t
jt|d tj|||d W 5 Q R X n"| }tj|||d}t|| d S )	Nr   r=   r\   r   rA   r   r   rX   )r   r5   rD   rF   r_   r`   ra   r   r   rE   r!   r]   r^   r   r)   r)   r*   test_series_negate  s"    zTestEval.test_series_negater7   r=   rC   r   r   rA   c                 C  s(   d}|}t j|||d}t|| d S Nz+lhsr\   )r_   r`   ra   r   rc   r7   r(   r1   r   r   ri   r)   r)   r*   test_frame_pos  s    zTestEval.test_frame_posc                 C  s(   d}|}t j|||d}t|| d S r   )r_   r`   ra   r   r   r)   r)   r*   test_series_pos  s    zTestEval.test_series_posc              	   C  s@  d}t jt|d tjd||d W 5 Q R X tjd||ddksFttjd||dd	ks^ttjd
||ddksvttjd||ddksttjd||ddksttjd||ddksttjd||ddksttjd||ddksttjd||ddksttjd||ddks"ttjd||ddks<td S )Nz%bad operand type for unary ~: 'float'rX   z~1.0r\   z-1.0r1   r(   g      z+1.0g      ?z~1z-1z+1rB   z~Truez~Falsez-Truez-Falser   z+Truez+False)r!   r]   rw   r_   r`   r   )rc   r(   r1   rd   r)   r)   r*   test_scalar_unary  s    zTestEval.test_scalar_unaryc                 C  sN   t jtdt jd}t jddddddddd	d
dd
gt jd}t|| d S )NzK[-True, True, ~True, +True,-False, False, ~False, +False,-37, 37, ~37, +37]dtyper   Tr   rB   r   Fi%   i)r5   r{   r_   r`   Zobject_ra   r   )rc   ri   rh   r)   r)   r*   test_unary_in_array/  s.    zTestEval.test_unary_in_arrayr   r   zx < -0.1z-5 > xc                 C  s<   t dtjdg|di}||}|jtdgks8td S )Nr}   r   r   F)r   r5   r{   r`   r   r   )rc   r   r   dfr   r)   r)   r*   test_float_comparison_bin_opN  s    
z%TestEval.test_float_comparison_bin_opc                 C  sl   t dddtjgi}|d}|jd}tj||t d |d}|jj	ddd}tj||t d d S )	Nr}   r   rB   zx.fillna(-1)r   Zcheck_nameszx.shift(1, fill_value=-1))Z
fill_value)
r   r5   r6   r`   r}   Zfillnara   r   r   shiftrc   r   ri   rh   r)   r)   r*   test_unary_in_functionV  s    

zTestEval.test_unary_in_functionre   )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  }}}tt jdd}d}tjt|d tj|||d W 5 Q R X d S )Nr   rB   rC   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notrX   r\   )	r5   rD   rF   r   r!   r]   r^   r_   r`   )	rc   re   r(   r1   r}   r   r   r   rd   r)   r)   r*   test_disallow_scalar_bool_opsd  s
    z&TestEval.test_disallow_scalar_bool_opsc                 C  sN  d}t jd||d}|dks tt|s,td}t jd||d}|dksLtt|sXtd}t jd||d}|rttt|stt|sttdg}t jd||d}t|tdg |j	dksttdg}t jd||d}t|tdg |j	dks
ttdg}t jd||d}t|tdg |j	dksJtd S )NrB   r}   r\   g      ?F)rB   )
r_   r`   r   r   r   r5   r{   ra   r   shape)rc   r(   r1   r}   ri   r)   r)   r*   test_identicalx  s2    zTestEval.test_identicalc                 C  s$   d}t j|||d}|dks td S )Nz1 + 2 *         5 - 1 + 2 r\      r_   r`   r   )rc   r(   r1   expri   r)   r)   r*   test_line_continuation  s    zTestEval.test_line_continuationc           	      C  s   d}t j|||d}t|}||ks*ttddddgi}d}|d|d	}|js\t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\   Ag~  eAg$  eAg'1  eAg  eAzA < z.4fg   eAzA > rB   rC   A == )r_   r`   r5   float64r   r   queryemptylocra   r   )	rc   r(   r1   r   ri   rh   r   cutoffexactr)   r)   r*   test_float_truncation  s     

zTestEval.test_float_truncationc              	   C  sx   t dddggdddgd}d}tjt|d |d W 5 Q R X t  }d	|j_tjt|d |d
 W 5 Q R X d S )Nr   Zfoobarclasscolumnsz4Python keyword not valid identifier in numexpr queryrX   z
class == 0lambdazlambda == 0)r   r!   r]   SyntaxErrorr   indexnamerc   r   rd   r)   r)   r*   test_disallow_python_keywords  s    z&TestEval.test_disallow_python_keywordsc                 C  s:   t ddkstt ddks$tt ddks6td S )Nznot Truer   z	not Falser   zTrue and not Truer   r   )rc   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&tt|jdjoD|jdj sNtd S )Nr   Zhello)r   r_   r`   r3   rY   r   r   )rc   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_SYMSrj   CMP_OPS_SYMSrx   r   r   sortedsetr   
differencer   r   r   r   r%   skip_if_windowsr   r   r   r   r   r   r   r5   rD   rF   r   rE   r   r   r   r   r   float32r   r   r   r   r   r   r   r   r   r   r)   r)   r)   r*   rH   w   s|   
"
3 
 

+/


!rH   c                  O  s
   t j S r-   )r5   rD   rF   )argskwargsr)   r)   r*   r~     r   r~   c                   @  sT   e Zd Zejddddddgejdejejgejdd	d
gdd Z	dS )TestTypeCastingry   +-*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sNt|
jj|ks^tt |
t|	 d S )Nr=   r   )
data_gen_fr    r\   )	ra   makeCustomDataframefr_   r`   r   r   r   r   )rc   r(   r1   ry   r  r  r   leftrightsr   r)   r)   r*   test_binop_typecasting  s    z&TestTypeCasting.test_binop_typecastingN)
r   r   r   r!   r#   r   r5   r   r   r  r)   r)   r)   r*   r     s   r   c                  G  s4   t ttd|  }ttjtdd | }|o2|S )NZis_monotonic_increasingc                 S  s   t | jjtjS r-   )
issubclassr   typer5   Z
datetime64r|   r)   r)   r*   r~     r   zshould_warn.<locals>.<lambda>)anyr   operator
attrgetterr   xor)r   Znot_monoZonly_one_dtr)   r)   r*   should_warn  s     r  c                	   @  s  e Zd ZdddgZedg Zdd Zejdeejdeejded	d
 Z	ejdeejdedd Z
ejdeejdeejdeejdedd Zejdddgejdeejdedd Zejdddgejdeeddgddgdg ejddd Zejdeejdeejdddgejddd gd!d" Zejdeejdeejdeejded#d$ Zd%d& Zd'S )(TestAlignmentir
  r  c                 C  s8   d}t jddtd}tj|||d}t ||d  d S )Nzdf * ~2r=   r   )r  r\   )ra   r  r  r_   r`   r   )rc   r(   r1   r
  r   r   r)   r)   r*   test_align_nested_unary_op  s    z(TestAlignment.test_align_nested_unary_oplr_idx_typerr_idx_type
c_idx_typec           	   
   C  s   t jdd t dt tjddt||d}tjddt||d}t|j|jrxt	t t
jd||d}W 5 Q R X nt
jd||d}t|||  W 5 Q R X d S )	NTrecordalwaysr@   r  
r_idx_typer     zdf + df2r\   warningscatch_warningssimplefilterRuntimeWarningra   r  r  r  r   assert_produces_warningr_   r`   r   )	rc   r(   r1   r  r  r  r   df2r   r)   r)   r*   test_basic_frame_alignment  s*            z(TestAlignment.test_basic_frame_alignmentr  c                 C  st   t jddt||d}tjd||d}t ||dk  ttjj	|j
 |j|jd}tjd||d}t |||k  d S )Nr@   r  df < 2r\   rC   )r   r   zdf < df3)ra   r  r  r_   r`   r   r   r5   rD   rF   r   r   r   )rc   r(   r1   r  r  r   r   df3r)   r)   r*   test_frame_comparison  s        z#TestAlignment.test_frame_comparisonr1c1r2c2c              
   C  s   t jdd t dt tjddt||d}tjddt||d}tjddt||d}	t|j|j|	jrt	t t
jd	||d
}
W 5 Q R X nt
jd	||d
}
t|
|| |	  W 5 Q R X d S )NTr  r  r   rC   r     r=   zdf + df2 + df3r\   r   )rc   r(   r1   r+  r,  r-  r.  r   r&  r)  r   r)   r)   r*   #test_medium_complex_frame_alignment   s8                z1TestAlignment.test_medium_complex_frame_alignment
index_namer   r   c              
   C  s   t jdd t dt tjddt||d}t||}tt	j
d|d d }t|j|jrtt tjd||d}	W 5 Q R X ntjd||d}	|d	ks|d	kr|d
kr||n|| }
n|| }
t|	|
 W 5 Q R X d S )NTr  r  r@   r  r=   df + sr\   r  r   )r!  r"  r#  r$  ra   r  r  getattrr   r5   rD   rF   r  r   r%  r_   r`   addr   )rc   r(   r1   r1  r  r  r   r   r
  r   rh   r)   r)   r*   !test_basic_frame_series_alignment8  s&        
z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_type)r  r  zignore::RuntimeWarningc              
   C  s(  |dkrb|dkrb|dkrb|dkrb|dkrbd| d| d| d	| d
| 
}|j tjj|dd tjddt||d}t||}	t	t
jd|	d d }
t|
j|jrtt tjd||d}W 5 Q R X ntjd||d}|dks|dkr|dkr||
n|
| }n|
| }t|| d S )Nr   )rz   rS   r   r  r
  z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r   strictr@      r  r=   zs + dfr\   r  )r   r   r!   r#   r   ra   r  r  r3  r   r5   rD   rF   r  r   r%  r$  r_   r`   r4  r   )rc   r0   r(   r1   r1  r  r  r   r   r   r
  r   rh   r)   r)   r*   !test_basic_series_frame_alignmentR  s<    
     
z/TestAlignment.test_basic_series_frame_alignmentry   r   r   c              
   C  s   t jdd t dt tjddt||d}t||}tt	j
d|d d }	d| d}
d	| d
}t|j|	jrtt tj|
||d}W 5 Q R X tt tj|||d}W 5 Q R X n tj|
||d}tj|||d}|dkr|dkr|dkrt|| W 5 Q R X d S )NTr  r  r@   r  r=   zs z dfzdf z sr\   r  r   )r!  r"  r#  r$  ra   r  r  r3  r   r5   rD   rF   r  r   r%  r_   r`   r   )rc   r(   r1   r1  ry   r  r  r   r   r
  r7   r9   r   r   r)   r)   r*   test_series_frame_commutativityy  s.        

z-TestAlignment.test_series_frame_commutativityc              
   C  s  d}d}d| }	t jddZ t dt tddg}
td	d
g}tj||t||d}tj|	|t||d}t	t
 ||
}ttj||d | }|dks|dkr|dkr||}q|| }n|| }|dks|dkr|dkr||}n|| }n|| }t|j|j|jrFtt tjd||d}W 5 Q R X ntjd||d}|j|jkshtt|| W 5 Q R X d S )Nr   r=   rC   Tr  r  r   r   r   r&  r  r  r   zdf2 + ser + dfr\   )r!  r"  r#  r$  rD   choicera   r  r  r3  localsgetr   r5   rF   r4  r  r   r%  r_   r`   r   r   r   )rc   r(   r1   r+  r,  r-  r.  nm1m2r1  obj_namer   r&  r   serZ	expected2rh   r   r)   r)   r*   #test_complex_series_frame_alignment  sN            

z1TestAlignment.test_complex_series_frame_alignmentc              	   C  s  t tjdd}ttjd}|dkr0t}nd}t| tj	d||d W 5 Q R X ttjd}td tj	d||d W 5 Q R X t tjdd}ttjd}td tj	d||d W 5 Q R X t tjdd}ttjd}|dk}|st}nd}t|n}tj	d||d |st
|d	ksFtt|d
 j}	t|j|jd	  }
d|
dd}|	|kstW 5 Q R X d S )Ni  r@   i'  r   Fr2  r\   rS   rB   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   r5   rD   rF   r   r   ra   r%  r_   r`   lenr   r3   messagelog10r   r   )rc   r(   r1   r   r
  seenZis_python_engineZwrnwrd   Zloggedrh   r)   r)   r*   +test_performance_warning_for_poor_alignment  s:    z9TestAlignment.test_performance_warning_for_poor_alignmentN)r   r   r   Zindex_typesZlhs_index_typesr  r!   r#   r   r'  r*  r0  r5  listr   filterwarningsr8  r9  rB  rH  r)   r)   r)   r*   r    sJ   


!,r  c                
   @  sF  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dBdCdDdFgdIdJ Z)ejdKdCdDdCdEge&'g dFdCdEigdLdM Z*dNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0ejdZd[d\d]gd^d_ Z1ejd`dadbgdcdd Z2deS )fTestOperationsc                 O  s    | ddd |d< tj||S Nlevelr   rB   popr_   r`   rc   r   r   r)   r)   r*   r`     s    zTestOperations.evalc              
     s4  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krd}	tjt|	d tj|||d W 5 Q R X q@td|d|}
| j|||d}||
kst	t||d|}
| j|d|i||d}||
kst	td||d |}
| j|d|i||d}||
ks@t	q@d S )NrS   rm   rn   c                   s   g | ]}| kr|qS r)   r)   r'   ry   Zexclude_arithr)   r*   
<listcomp>  s   z8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s   | ]}|d kr|V  qdS )z//Nr)   rQ  r)   r)   r*   r+   	  s      z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rl   z&argument of type 'int' is not iterablerX   r\   rB   r}   r   )
r   r   r   r!   r]   rw   r_   r`   r<   r   )rc   r(   r1   Z	arith_opsopsry   re   r   r   rd   expecr}   yr)   rR  r*   test_simple_arith_ops  s0    

z$TestOperations.test_simple_arith_opsr9   TFr7   ry   c              	   C  sr   | d| d| }t dkrP|dkrPd}tjt|d | | W 5 Q R X d S | |}t|}||ksntd S Nr  rS   rT   rW   rX   r1   r!   r]   r^   r`   r   rc   r9   r7   ry   re   rd   r   r   r)   r)   r*   test_simple_bool_ops!  s    
z#TestOperations.test_simple_bool_opsc              	   C  sr   | d| d| }t dkrP|dkrPd}tjt|d | | W 5 Q R X d S | |}t|}||ksntd S rX  rY  rZ  r)   r)   r*   test_bool_ops_with_constants1  s    
z+TestOperations.test_bool_ops_with_constantsc              	   C  sX   t jdddd}tt jd}d}tjt|d | jd||d	d
 W 5 Q R X d S )Nr   r/  r=      r@   z?N-dimensional objects, where N > 2, are not supported with evalrX   x + yr}   rV  ru   )r5   rD   rF   r   r!   r]   r^   r`   )rc   r}   rV  rd   r)   r)   r*   test_4d_ndarray_failsA  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dkstd S )N1rB   )r`   r   )rc   r}   r)   r)   r*   test_constantH  s    
zTestOperations.test_constantc                 C  s4   t tjdd}| jdd|id}t|| d S )Nr@   rC   r   r`  r   r5   rD   rF   r`   ra   r   )rc   r   r&  r)   r)   r*   test_single_variableL  s    z#TestOperations.test_single_variablec              	   C  s:   t tjdd}tjtdd | d W 5 Q R X d S )Nr=   r   name 'x' is not definedrX   zdf[x > 2] > 2)r   r5   rD   rF   r!   r]   	NameErrorr`   rc   r   r)   r)   r*   &test_failing_subscript_with_name_errorQ  s    z5TestOperations.test_failing_subscript_with_name_errorc                 C  sD   t tjdd}| jdd|id}|d |dk }t|| d S )Nr=   r   z(df + 1)[df > 2]r   r`  rB   rC   rd  r   r)   r)   r*   test_lhs_expression_subscriptV  s    z,TestOperations.test_lhs_expression_subscriptc                 C  s   t tjddtdd}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t||	D ]"\}
}t	
|| j|
d	|id
 q~d S )Nr=   r   abcr   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   r   r`  )r   r5   rD   rF   rI  r   r   r:   zipra   r   r`   )rc   r   expr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3exprsZexpecsr;   rU  r)   r)   r*   test_attr_expression\  s    

z#TestOperations.test_attr_expressionc              	   C  sf   t tjddtdd}t tjdd}d}d}tjt|d | j|||dd	 W 5 Q R X d S )
Nr=   r   rk  r   zdf = df2%cannot assign without a target objectrX   )r   r&  r`  )	r   r5   rD   rF   rI  r!   r]   r2   r`   )rc   r   r&  rm  rd   r)   r)   r*   test_assignment_failsi  s    z$TestOperations.test_assignment_failsc              	   C  sB   t tjddtdd}tjtdd |d W 5 Q R X d S )Nr=   rC   abr   invalid syntaxrX   zd c = a + b	r   r5   rD   rF   rI  r!   r]   r   r`   rh  r)   r)   r*   %test_assignment_column_multiple_raiseq  s    z4TestOperations.test_assignment_column_multiple_raisec              	   C  sF   t tjddtdd}d}tjt|d |d W 5 Q R X d S )Nr=   rC   rr  r   z5left hand side of an assignment must be a single namerX   zd,c = a + brt  r   r)   r)   r*   %test_assignment_column_invalid_assignw  s    z4TestOperations.test_assignment_column_invalid_assignc              	   C  sF   t tjddtdd}d}tjt|d |d W 5 Q R X d S )Nr=   rC   rr  r   zcannot assign to function callrX   zTimestamp("20131001") = a + brt  r   r)   r)   r*   3test_assignment_column_invalid_assign_function_call~  s    zBTestOperations.test_assignment_column_invalid_assign_function_callc                 C  sT   t tjddtdd}| }|d |d  |d< |jddd	 t|| d S )
Nr=   rC   rr  r   r   r   	a = a + bTinplace	r   r5   rD   rF   rI  copyr`   ra   r   rc   r   rh   r)   r)   r*   &test_assignment_single_assign_existing  s
    z5TestOperations.test_assignment_single_assign_existingc                 C  sT   t tjddtdd}| }|d |d  |d< |jdd	d
 t|| d S )Nr=   rC   rr  r   r   r   r:   	c = a + bTry  r{  r}  r)   r)   r*   !test_assignment_single_assign_new  s
    z0TestOperations.test_assignment_single_assign_newc                 C  s\   t tjddtdd}| }d}|jddd | }d|d	  |d
< t|| d S )Nr=   rC   rr  r   rB   z	a = 1 + bTry  r   r   r{  )rc   r   r   rh   r)   r)   r*   +test_assignment_single_assign_local_overlap  s    z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sd   t tjddtdd}d}|j }|jddd ||j }t	j
||jd	d
 |jd ks`td S )Nr=   rC   rr  r   rB   rx  Try  Fr   )r   r5   rD   rF   rI  r   r|  r`   r   ra   r   r   r   )rc   r   r   Zold_ari   r)   r)   r*   "test_assignment_single_assign_name  s    

z1TestOperations.test_assignment_single_assign_namec              	   C  sT   t tjddtdd}|jddd d}tjt|d	 |d
 W 5 Q R X d S )Nr=   rC   rr  r   r  Try  z#can only assign a single expressionrX   z	c = a = b)	r   r5   rD   rF   rI  r`   r!   r]   r   r   r)   r)   r*   test_assignment_multiple_raises  s
    z.TestOperations.test_assignment_multiple_raisesc                 C  s\   t tjddtdd}| jdd|i|dd | }|d	 |d
  |d< t|| d S )Nr=   rC   rr  r   zc = df.a + df.br   T)ru   targetrz  r   r   r:   )	r   r5   rD   rF   rI  r`   r|  ra   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   r`   r   ra   r   r   r)   r)   r*   test_column_in  s    

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r   c                 C  s`   t tjddtdd}|jddd}|d k	s4t| }|d |d	  |d
< t	|| d S )Nr=   rC   rr  r   r  Fry  r   r   r:   )
r   r5   rD   rF   rI  r`   r   r|  ra   r   )rc   r   actualrh   r)   r)   r*   test_assignment_not_inplace  s    z*TestOperations.test_assignment_not_inplacec              	   C  s   t dddgdddgd}| }|d |d	  |d
< |d
 |d	  |d< |jddd}t|| |d kspt|d d |d< |d d |d< |jddd}t|| |d kstd}tjt|d |jddd W 5 Q R X d S )NrB   rC   r   r/  r=   r]  r  r   r   r:   d$
        c = a + b
        d = c + bTry  r;   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrX   z(
            a = b + 2
            b - 2F)	r   r|  r`   ra   r   r   r!   r]   r2   )rc   r   rh   answerrd   r)   r)   r*   test_multi_line_expression  s0    z)TestOperations.test_multi_line_expressionc                 C  s   t dddgdddg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 )NrB   rC   r   r/  r=   r]  r  r   r   r:   r  r  Fry  r;   r  )r   r|  r`   ra   r   r}  r)   r)   r*   &test_multi_line_expression_not_inplace  s     z5TestOperations.test_multi_line_expression_not_inplacec                 C  sp   t dddgdddgd}| }d}|d	 | |d
< |d
 | |d< |jddd}t|| |d ksltd S )NrB   rC   r   r/  r=   r]  r  r7  r   r:   r  z?
        c = a * @local_var
        d = c + @local_var
        Try  r   r|  r`   ra   r   r   )rc   r   rh   Z	local_varr  r)   r)   r*   )test_multi_line_expression_local_variable  s    z8TestOperations.test_multi_line_expression_local_variablec                 C  s   t dddgdddgd}dd	 }| }|d
 |dd |d< |d |dd |d< |jddd}t|| |d ks|td S )NrB   rC   r   r/  r=   r]  r  c                 S  s   |S r-   r)   r  r)   r)   r*   
local_func!  s    zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr   r7  r:   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Try  r  rc   r   r  rh   r  r)   r)   r*   2test_multi_line_expression_callable_local_variable  s    zATestOperations.test_multi_line_expression_callable_local_variablec                 C  s   t dddgdddgd}dd	 }| }|d
 |ddd |d< |d |ddd |d< |jddd}t|| |d kstd S )NrB   rC   r   r/  r=   r]  r  c                 S  s   |S r-   r)   r  r)   r)   r*   r  5  s    zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   r7  )r   r   r:   r  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Try  r  r  r)   r)   r*   >test_multi_line_expression_callable_local_variable_with_kwargs1  s    zMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc              	   C  sZ   t dddgdddgd}| }d}tjt|d	 |d
 W 5 Q R X t|| d S )NrB   rC   r   r/  r=   r]  r  rp  rX   za = 1)r   r|  r!   r]   r2   r   ra   r   )rc   r   Zdf_origrd   r)   r)   r*   test_assignment_in_queryE  s    z'TestOperations.test_assignment_in_queryc                 C  sx   t dddgdddgd}| }||d dk }|jd	d
d t|| i }ddi}| jd|d
d t|| d S )NrB   rC   r   r/  r=   r]  r  r   za == 2Try  	a = 1 + 2r  rz  )r   r|  r   ra   r   r`   Zassert_dict_equalr}  r)   r)   r*   test_query_inplaceN  s    z!TestOperations.test_query_inplaceinvalid_targetrB   catrC   )rB   r   c              	   C  sj   d}d}t jt|d | j||dd W 5 Q R X t|drft jt|d | j||dd W 5 Q R X d S )Nz)Cannot assign expression output to targetr  rX   Tr  r|  F)r!   r]   r2   r`   hasattrrc   r  rd   
expressionr)   r)   r*   test_cannot_item_assign\  s    
z&TestOperations.test_cannot_item_assignc              	   C  s6   d}d}t jt|d | j||dd W 5 Q R X d S )Nz"Cannot return a copy of the targetr  rX   Fr  )r!   r]   r2   r`   r  r)   r)   r*   test_cannot_copy_itemh  s    z$TestOperations.test_cannot_copy_itemr  c              	   C  sN   d}| j ||dddkstd}tjt|d | j ||dd W 5 Q R X d S )N1 + 2Fr  r   z0Cannot operate inplace if there is no assignmentrX   T)r`   r   r!   r]   r2   )rc   r  r  rd   r)   r)   r*   test_inplace_no_assignmentp  s
    z)TestOperations.test_inplace_no_assignmentc                 C  sR   t jddtddd}|dk }| jdd|id}|dk }t || t || d S )NrC   pr  r  r  r  r(  r   r`  ra   r  r  r`   r   )rc   r   r;   rr}   r)   r)   r*   *test_basic_period_index_boolean_expressionz  s    z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sB   t jddtddd}| jdd|id}||dk  }t || d S )	NrC   r  r  r  zdf[df < 2 + 3]r   r`  r=   r  rc   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 )NrC   r  r  r  zdf[df[df < 2] < 2] + df * 2r   r`  r  r  r)   r)   r*   -test_nested_period_index_subscript_expression  s    z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sV   t tjdd}tddd|d< | jdd|i||d}|jd	k }tj||d
d d S )Nr=   r   z1/1/2012)Zperiodsdates1zdf.dates1 < 20130101r   r   Z20130101Fr   )	r   r5   rD   rF   r   r`   r  ra   r   )rc   r(   r1   r   r   rU  r)   r)   r*   test_date_boolean  s    
z TestOperations.test_date_booleanc              	   C  s  |dkrt jd||d}|s tt jd||d}|s8tt jd||d}|rPtt jd||d}|shtt jd||d}|stt jd||d}|stt jd	||d}|stt jd
||d}|stt jd||d}|rtt jd||d}|stnd}tjt|d t jd||d W 5 Q R X tjt|d t jd||d W 5 Q R X tjt|d t jd||d W 5 Q R X tjt|d t jd||d W 5 Q R X d}tjt|d t jd||d W 5 Q R X tjt|d t jd||d W 5 Q R X d S )NrS   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 implementedrX   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))r_   r`   r   r!   r]   r^   )rc   r(   r1   r   rd   r)   r)   r*   test_simple_in_ops  sF    z!TestOperations.test_simple_in_opsc                 C  s2   d}d d}d}tj|||d}||ks.td S )NrB   z * Z!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar\   )rv   r_   r`   r   )rc   r(   r1   r   r   rh   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  sv   t tjdd}|dkr\d}d|kr*d}tjt|d tj|d|i||d	 W 5 Q R X ntj|d|i||d	 d S )
Nr=   r   rS   rW   not'Not' nodes are not implementedrX   r   )ru   r1   r(   	r   r5   rD   rF   r!   r]   r^   r_   r`   )rc   r   r(   r1   r   rd   r)   r)   r*   test_fails_and_or_not  s$    	z$TestOperations.test_fails_and_or_notcharrr   r   c              	   C  sj   t tjdd}d| d}|dkrVd}tjt|d tj|||d W 5 Q R X ntj|||d d S )	Nr=   r   z(df + 2)[df > 1] > 0 z	 (df > 0)rS   z$cannot evaluate scalar only bool opsrX   r   r  )rc   r  r(   r1   r   re   rd   r)   r)   r*   test_fails_ampersand_pipe  s    z(TestOperations.test_fails_ampersand_pipeN)3r   r   r   r`   rW  r!   r#   r   r   r   r[  r\  ra  rc  re  ri  rj  ro  rq  ru  rv  rw  r~  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r5   r{   r  r  r  r  r  r  r  r  r  r  r  r)   r)   r)   r*   rK    st   #

	
%	 

&
	
/
rK  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  s    | ddd |d< tj||S rL  rN  rP  r)   r)   r*   r`     s    zTestMath.evalz&Unary ops only implemented for numexprr   fnc              	   C  sh   t dtjdi}|j}| d}| |}tjdd tt||}W 5 Q R X tj	||dd d S )Nr   r@   z(a)ignoreallFr   )
r   r5   rD   rF   r   r`   errstater3  ra   r   )rc   r  r   r   r   gotr   r)   r)   r*   test_unary_functions  s    

zTestMath.test_unary_functionsc              	   C  sz   t tjdtjdd}|j}|j}| d}| |}tjdd tt|||}W 5 Q R X t	j
||dd d S )Nr@   r  z(a, b)r  r  Fr   )r   r5   rD   rF   r   r   r`   r  r3  ra   r   )rc   r  r   r   r   r   r  r   r)   r)   r*   test_binary_functions  s    

zTestMath.test_binary_functionsc                 C  s`   t tjdtjdd}|jd||dd |j}tt|j|j	}t
j||dd d S )Nr@   r  ze = arctan2(sin(a), b)Tr(   r1   rz  Fr   )r   r5   rD   rF   r`   r;   Zarctan2sinr   r   ra   r   rc   r(   r1   r   r  r   r)   r)   r*   test_df_use_case  s    zTestMath.test_df_use_casec                 C  s\   t tjdtjdd}|jd||dd |j}t|j|j }t	j
||dd d S )Nr@   r  ze = sin(a + b)Tr  Fr   )r   r5   rD   rF   r`   r;   r  r   r   ra   r   r  r)   r)   r*    test_df_arithmetic_subexpression)  s
    z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper    c                 C  s   t dtjd|i}|jj|ks*t|jd||dd |j	}t
|j}|j|jks^t||jkslttj||dd d S )Nr   r@   z
b = sin(a)Tr  Fr   )r   r5   rD   rF   r   r   r   r   r`   r   r  ra   r   )rc   r   Zexpect_dtyper(   r1   r   r  r   r)   r)   r*   test_result_types0  s    zTestMath.test_result_typesc              	   C  sF   t dtjdi}d}tjt|d |jd||d W 5 Q R X d S )Nr   r@   z#"mysin" is not a supported functionrX   zmysin(a)r\   )r   r5   rD   rF   r!   r]   r2   r`   rc   r(   r1   r   rd   r)   r)   r*   test_undefined_funcI  s    zTestMath.test_undefined_funcc              	   C  sF   t dtjdi}d}tjt|d |jd||d W 5 Q R X d S )Nr   r@   z1Function "sin" does not support keyword argumentsrX   zsin(x=a)r\   )r   r5   rD   rF   r!   r]   rw   r`   r  r)   r)   r*   test_keyword_argP  s    zTestMath.test_keyword_argN)r   r   r   r`   r!   r#   r$   r   r   r   r  r   r  r  r  r5   Zint32r   Zint64r   r"   Z
complex128r%   r   r  r  r  r)   r)   r)   r*   r    s.    







r  r@   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 * 2rC   r\   )ra   r   _var_sr_   r`   )rc   r(   r1   r;   r)   r)   r*   test_global_scope\  s
     zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks@td S )NrB   x + 1r   lcls)r;  r|  r_   r`   rO  r   )rc   r(   r1   r}   r  Zlcls2r)   r)   r*   test_no_new_localsb  s    


zTestScope.test_no_new_localsc                 C  s8   d}t   }tjd||d t   }||ks4td S )NrB   r  r\   )globalsr|  r_   r`   r   )rc   r(   r1   r}   ZgblsZgbls2r)   r)   r*   test_no_new_globalsj  s
    

zTestScope.test_no_new_globalsc              	   C  s8   d}d}t jt|d tjd||i d W 5 Q R X d S )NrB   rf  rX   r  rt   r!   r]   r   r_   r`   )rc   r(   r1   r}   rd   r)   r)   r*   test_empty_localsq  s    zTestScope.test_empty_localsc              	   C  s8   d}d}t jt|d tj|||i d W 5 Q R X d S )Nzname '_var_s' is not definedr  rX   )r(   r1   Zglobal_dictr  )rc   r(   r1   rd   r;   r)   r)   r*   test_empty_globalsx  s    zTestScope.test_empty_globalsN)r   r   r   r  r  r  r  r  r)   r)   r)   r*   r  [  s
   r  c               	   C  s8   d} t jt| d tjdddddd W 5 Q R X d S )	NzInvalid engine 'asdf' passedrX   r^  rB   rC   r_  asdf)ru   r(   r!   r]   KeyErrorr_   r`   rd   r)   r)   r*   test_invalid_engine  s    r  )use_numexprrh   ))Tr   )FrS   c              	   C  s<   ddl m} td|  |d }||ks.tW 5 Q R X d S )Nr   )_check_enginecompute.use_numexpr)Zpandas.core.computation.evalr  r_   option_contextr   )r  rh   r  ri   r)   r)   r*   test_numexpr_option_respected  s    
r  c               	   C  sv   t dd` tddddd d gdddddd	gd
} | d}td d gdd	gd
ddgd}t|| W 5 Q R X d S )Nr  FTrB   rC   r   r/  r=   r]  )r   Bz
A.isnull())r   )r_   r  r   r   ra   r   )r   ri   rh   r)   r)   r*   #test_numexpr_option_incompatible_op  s     
r  c               	   C  s8   d} t jt| d tjdddddd W 5 Q R X d S )	NzInvalid parser 'asdf' passedrX   r^  rB   rC   r_  r  )ru   r1   r  r  r)   r)   r*   test_invalid_parser  s    r  )rS   r   rz   z dict[str, type[BaseExprVisitor]]_parsersc              
   C  sN   t | }|d| |}|jD ].}d}tjt|d t||  W 5 Q R X qd S )Nr  znodes are not implementedrX   )r  Zunsupported_nodesr!   r]   r^   r3  )r(   r1   ZVisitorClassinstrT  rd   r)   r)   r*   test_disallowed_nodes  s    
r  c              	   C  s2   d}t jtdd tj|| |d W 5 Q R X d S )Nzs +rs  rX   r\   r!   r]   r   r_   r`   )r(   r1   r;   r)   r)   r*   test_syntax_error_exprs  s    r  c              	   C  s6   d}d}t jt|d tj|| |d W 5 Q R X d S )Nzs + tzname 's' is not definedrX   r\   )r!   r]   rg  r_   r`   )r(   r1   r;   rd   r)   r)   r*   test_name_error_exprs  s    r  expressza + @bz@a + bz@a + @bc              	   C  sj   d\}}|dkr<t jtdd tj|| |d W 5 Q R X n*t jtdd tj|| |d W 5 Q R X d S )NrB   rC   rz   zThe '@' prefix is onlyrX   r\   zThe '@' prefix is notr  )r(   r1   r  r   r   r)   r)   r*   %test_invalid_local_variable_reference  s    r  c              	   C  sd   d\}}| dkr@d}t jt|d tjd| |d W 5 Q R X n tjd| |d}||| ks`td S )Nr  r   zVariables in expression .+rX   zsin + dotted_liner\   )r!   r]   r   r_   r`   r   )r(   r1   r  Zdotted_linerd   r   r)   r)   r*   test_numexpr_builtin_raises  s    r  c              	   C  s4   d}t jtdd tjd|| |d W 5 Q R X d S )N)*   g      @zResolver of type .+rX   r  )	resolversr(   r1   )r!   r]   rw   r_   r`   )r(   r1   Zcannot_resolver)   r)   r*   test_bad_resolver_raises  s    r  c              	   C  s.   t jtdd tjd| |d W 5 Q R X d S )Nzexpr cannot be an empty stringrX    r\   r!   r]   r2   r_   r`   r\   r)   r)   r*   test_empty_string_raises  s    r  c              	   C  s.   t jtdd tjd| |d W 5 Q R X d S )Nz#only a single expression is allowedrX   z1 + 1; 2 + 2r\   r  r\   r)   r)   r*   $test_more_than_one_expression_raises  s    r  cmprT   r9   c              
   C  s   t dd ttjji}||   }||   } ||  }d| d| d}d| d| d}d| d| d	}	|||	fD ]2}
d
}tjt|d tj	|
||d W 5 Q R X qrd S )Nc                   S  s   t jdS )Nr@   )r5   rD   r   r)   r)   r)   r*   r~     r   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rp   r   rq   r   rZ   r   r[   r   rX   r\   )
intr>   r5   rD   rF   r!   r]   r^   r_   r`   )r7   r  r9   r(   r1   genr   r   r   r   re   rd   r)   r)   r*   test_bool_ops_fails_on_scalars  s    


r  otherz'x'z...c                 C  sN   t ddddgi}|d|  }tdddgdd}tr>d |_t|| d S )Nr   r   r   r:   r   Fr   )r   r`   r   r   r   ra   r   )r  r   ri   rh   r)   r)   r*   test_equals_various  s    r  c                 C  s*   d}t j}tj|| |d}||ks&td S )Nzinf + 1r\   )r5   infr_   r`   r   )r(   r1   r
  rh   ri   r)   r)   r*   test_inf  s    r  columnu	   Temp(°C)u   Capacitance(μF)c                 C  sT   t tjdd|dgd}||| dk }d| d}|j|| d}t|| d S )Nr=   rC   r   r   `z` > 5)r(   )r   r5   rD   rF   r   ra   r   )r(   r  r   rh   Zquery_stringri   r)   r)   r*   test_query_token  s
    r  c              	   C  s   t ddgddggddgd}||jdk  }|jd| |d	}t|| |d
krd}tjt|d |jd| |d	 W 5 Q R X n|jd| |d	}t|| d S )Nr   r@   rB   r  r  countr   z
~(cat > 0)r\   rS   r  rX   znot (cat > 0))r   r  r   ra   r   r!   r]   r^   )r(   r1   r   rh   ri   rd   r)   r)   r*   test_negate_lt_eq_le)  s    r  c                 C  st   |dkr&| j tjjtd| d ttjj	dddd|dgd	}||| d
k }|
| d}t|| d S )N)TrueFalser  ZInfz+GH 47859 DataFrame eval not supported with )r]   r   r   d   )r@   rC   r   Zcol1r   r]  z>6)r   r   r!   r#   r   r  r   r5   rD   r   r   ra   r   )r0   r  r   rh   ri   r)   r)   r*    test_eval_no_support_column_name9  s    r  c                 C  s   t dddgdddgddd	gd
}|d d  }|d }|jddd t dddgdddgddd	gd
}t|| | st||d  t|d |d  n.tdddgdd}t|| t|d | d S )NrB   rC   r   r/  r=   r]  r7     	   )r   r  Cr   z	A = B + CTry  r        r  )r   r`   ra   r   r   r   )Zusing_copy_on_writer   Zresult_viewrA  rh   r)   r)   r*   test_set_inplaceN  s    ""r	  c                   @  s0   e Zd Zejddddddgdgdd Zd	S )
TestValidatevaluerB   r   rC   r   g      @c              	   C  s0   d}t jt|d tjd|d W 5 Q R X d S )Nz8For argument "inplace" expected type bool, received typerX   z2+2ry  r  )rc   r  rd   r)   r)   r*   test_validate_bool_argsb  s    z$TestValidate.test_validate_bool_argsN)r   r   r   r!   r#   r   r  r)   r)   r)   r*   r
  a  s   r
  )f
__future__r   	functoolsr   	itertoolsr   r  rD   r!  numpyr5   r!   Zpandas.errorsr   r   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr%   Zpandas.core.dtypes.commonr   r	   r
   r   rz   r_   r   r   r   Zpandas._testingZ_testingra   Zpandas.core.computationr   r   Zpandas.core.computation.enginesr   Zpandas.core.computation.exprr   r   r   Z#pandas.core.computation.expressionsr   r   Zpandas.core.computation.opsr   r   r   r   r   Zpandas.core.computation.scoper   Zfixturer(   ZPARSERSr1   r<   rI  ranger7   r9   r   rH   r  r   r  r  rK  r  rF   r  r  r&   r  r#   r   r  r  r  ZPyTablesExprVisitorr  __annotations__r  r  r  r  r  r  r  r  r  r>   r  r  r  r  r  keysr  r	  r
  r)   r)   r)   r*   <module>   s    



    \  	    	Z%
	





	
