a
    j=ick                    @  s  U d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dl	Z
d dlZd dlmZmZmZ d dlm  mZ d dlmZmZmZmZ d dlZd dlmZmZmZ d dlmZ  d dl!m"Z" d d	l#m$Z$ d dl%m&  m'  m(Z( d d
l%m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 ej7dd e$D ddd Z8ej7e(j9ddd Z:ej7e-rve;e4ng ddd Z<dd Z=ej7e;e>dg dddd Z?e?Z@e?ZAG dd dZBd d! ZCG d"d# d#ZDd$d% ZEG d&d' d'ZFG d(d) d)ZGG d*d+ d+ZHe
jId,ZJG d-d. d.ZKejLd/d0 ZMejLejNOd1d2d3d4 ZPejLd5d6 ZQejLd7d8 ZRe+e"jSe*d9ZTd:eUd;< ejNOde$ejNOdeTd<d= ZVd>d? ZWd@dA ZXejNOdBg dCdDdE ZYdFdG ZZdHdI Z[dJdK Z\dLdM Z]ejNOdNdOejNOde^e_fejNOdPe^e_fdQdR Z`ejNOdSdTdUgdVdW ZadXdY ZbdZd[ ZcejNOd\d]d^gd_d` Zddadb ZeejNOd\e6f dcdd Zgejhdedf ZiG dgdh dhZjdS )i    )annotations)reduce)productN)NumExprClobberingErrorPerformanceWarningUndefinedVariableError)is_boolis_floatis_list_like	is_scalar)	DataFrameSeries
date_range)pytables)ENGINES)BaseExprVisitorPandasExprVisitorPythonExprVisitor)NUMEXPR_INSTALLEDUSE_NUMEXPR)ARITH_OPS_SYMSSPECIAL_CASE_ARITH_OPS_SYMS_binary_math_ops_binary_ops_dict_unary_math_ops)DEFAULT_GLOBALSc              	   c  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markZskipifr   r   tdskip_if_no_ne).0engine r'   s/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/tests/computation/test_eval.py	<genexpr>8   s   r)   )paramsc                 C  s   | j S Nr!   requestr'   r'   r(   r&   7   s    r&   c                 C  s   | j S r+   r,   r-   r'   r'   r(   parserK   s    r/   c                 C  s   | j S r+   r,   r-   r'   r'   r(   unary_fns_for_neP   s    r0   c              
   C  sp   t | }t| jrfz|| |W S  tyd } z.t|drNtjW  Y d }~S  W Y d }~n
d }~0 0 || |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_binU   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   r4   randomrandr5   randnr   r!   )r.   Znan_df1optsr'   r'   r(   r6   d   s    r6   c                
   @  s8  e Zd Zejjdg dg ddejjdddgdd	gdejd
ejdd Zejdej	dd Z
ejdej	dd Zejdddgejdddgdd Zejdeeeedd Zdd Zdd Zejdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zejd(eej d)d*eejj!d)d+d,eej"d)d*d-kgd.d/ Z#ejd(e$ej d)e$ejj!d)d)d,e$ej"d)d-kgd0d1 Z%d2d3 Z&d4d5 Z'ejd6ej(ej)gejd7d8d9gd:d; Z*ejd<d=d>d? Z+d@dA Z,dBdC Z-dDdE Z.dFdG Z/dHdI Z0dJdK Z1dLS )MTestEvalr7   )z!=z==z<=z>=<>)neeqlegeltgt)r>   cmp2rI   rH   rO   rN   binopc                 C  s   |dkrn|dv rnd}t jt|d8 d| d| d| d}	tj|	||d	 W d    n1 s`0    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&   r/   )r    raisesNotImplementedErrorpdevalr;   tmassert_equal)selfr7   rP   rQ   r6   r8   r&   r/   msgexlhs_newrhs_newexpectedresultr'   r'   r(   test_complex_cmp_ops|   s    .zTestEval.test_complex_cmp_opscmp_opc           
      C  s  |dk }|dk }|dkrr|dv rrd}t jt|d, d| d}tj|||d W d    n1 sd0    Y  d S d| d}d	d
dg}|dv rt|st jt|d( tj|||||dd W d    n1 s0    Y  n*t||||}tj|||d}	t	
|	| d S )Nr   rR   innot in&'(In|NotIn)' nodes are not implementedrW   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r6   r8   r&   r/   
local_dict)r    r\   r]   r^   r_   joinr
   	TypeErrorr;   r`   ra   )
rb   rj   r6   r8   r&   r/   rc   rd   rg   rh   r'   r'   r(   test_simple_cmp_ops   s2    .&zTestEval.test_simple_cmp_opsopc                 C  s  |dkrb|dv rbd}t jt|d, d| d}tj|||d W d    n1 sT0    Y  d S t|rt|s|dv r|dkr|dkrt jjd	d
}	|j	|	 ddg}
d| d}d
ddg}t|r$||
v r$t jt|d( tj|||||dd W d    n1 s0    Y  nlt|rNt|rNtdd ||f\}}t||||}t|rn| }n| }tj|||d}t|| d S )NrR   rk   rn   rW   z~(lhs rZ   r[   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   rl   rm   rq   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 iterablerr   rs   c                 S  s   t | gS r+   )r4   arrayxr'   r'   r(   <lambda>       z2TestEval.test_compound_invert_op.<locals>.<lambda>)r    r\   r]   r^   r_   r	   r"   xfailnode
add_markerru   r   rv   mapr;   r`   assert_almost_equal)rb   rx   r6   r8   r.   r&   r/   rc   rd   r"   Z
skip_theserg   rh   r'   r'   r(   test_compound_invert_op   sV    .(
z TestEval.test_compound_invert_opc                 C  s  |}|dkrdd| d| d}	d}
t jt|
d  tj|	||d W d    n1 sV0    Y  d S t||||}t||||}|d ur|d urd| d| d}	d| d| d}d	| d
| d}t|d||}|	||fD ] }tj|||d}t|| qd S )NrR   ro    mid rp   rV   rW   r[    mid and mid rY    mid) & (mid rZ   &)r    r\   r]   r^   r_   r;   r`   r   )rb   r7   rP   r6   midhsr8   r&   r/   midex1rc   re   rf   ex2ex3rg   rd   rh   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y   Y d S 0 |dkrdd l	}|
d| d}t|j| ntd| d}t|| d S )	Nro   rp   r[   z rhs r   r   znlhs z ghs)r^   r_   r;   r`   r   alignr1   rv   AttributeErrorr   evaluatevalues)rb   r   r6   r8   r&   r/   rd   rh   rg   ZnlhsZghsrJ   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_   r`   r   r   r   
isinstancer   r   r   itemr;   )	rb   r6   r8   r&   r/   rd   rh   rg   rJ   r'   r'   r(   test_modulus'  s    
zTestEval.test_modulusc           	      C  s   d}|dkr2t j|||d}|| }t|| nJd}tjt|d( t j|||d||d W d    n1 sr0    Y  d S )Nz
lhs // rhsrR   r[   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'rW   rr   rt   r&   r/   )r^   r_   r`   ra   r    r\   rv   )	rb   r6   r8   r&   r/   rd   resrg   rc   r'   r'   r(   test_floor_division9  s    zTestEval.test_floor_divisionc           
      C  s   d}t |d||}tj|||d}t|rt|rt|ttjfrt|rd}t	j
t|d t|| W d    q1 s0    Y  nHt|| d}tj|||d}t |d||}	t |	d||}t|| d S )Nz
lhs ** rhs**r[   z-(DataFrame.columns|numpy array) are differentrW   z(lhs ** rhs) ** rhs)r;   r^   r_   r   r   complexr4   Zcomplexfloatingisnanr    r\   AssertionErrorr`   assert_numpy_array_equalr   )
rb   r6   r8   r&   r/   rd   rg   rh   rc   middler'   r'   r(   test_powM  s(    ,zTestEval.test_powc                 C  sX   z| t}W n" ty0   tt|g}Y n0 | }tjd||d}t|| d S )Nz~elbr[   )	astypeboolr   r4   rz   r^   r_   r`   r   )rb   r6   r&   r/   Zelbrg   rh   r'   r'   r(   check_single_invert_opg  s    zTestEval.check_single_invert_opc                 C  s  d}t tjdd}|dkrbd}tjt|d  tj|||d W d    q1 sV0    Y  nBd}tjt	|d  tj|||d W d    n1 s0    Y  t tjj
dd	d
}|dkrd}tjt|d  tj|||d W d    n1 s0    Y  n"| }tj|||d}t|| t tjdddk}| }tj|||d}t|| t g dtjddkd}|dkrtjtdd  tj|||d W d    n1 s0    Y  nDd}tjt	|d  tj|||d W d    n1 s0    Y  d S )N~lhsr<   rB   r   -couldn't find matching opcode for 'invert_dd'rW   r[   0ufunc 'invert' not supported for the input typesr<   rB   size)couldn't find matching opcode for 'invertr@   arA   g       @   )br9   unknown type object#bad operand type for unary ~: 'str')r   r4   rC   rE   r    r\   r]   r^   r_   rv   randintr`   assert_frame_equalrD   r1   )rb   r&   r/   exprr6   rc   expectrh   r'   r'   r(   test_frame_invertq  s8    0.
0
2zTestEval.test_frame_invertc                 C  s  d}t tjd}|dkr`d}tjt|d  tj|||d}W d    q1 sT0    Y  nBd}tjt	|d  tj|||d W d    n1 s0    Y  t tjj
ddd}|dkrd	}tjt|d  tj|||d W d    n1 s0    Y  n"| }tj|||d}t|| t tjdd
k}| }tj|||d}t|| t g d}|dkrtjtdd  tj|||d W d    n1 s0    Y  nDd}tjt	|d  tj|||d W d    n1 s0    Y  d S )Nr   r<   r   r   rW   r[   r   r   r   r@   r   r   r   )r   r4   rC   rE   r    r\   r]   r^   r_   rv   r   r`   assert_series_equalrD   r1   )rb   r&   r/   r   r6   rc   rh   r   r'   r'   r(   test_series_invert  s8    0.
0
2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 d    q1 s0    Y  n"| }tj|||d}t|| d S )N-lhsr<   rB   r[   r   r   r@   r   *couldn't find matching opcode for 'neg_bb'rW   )r   r4   rC   rE   r^   r_   r`   r   r   rD   r    r\   r]   rb   r&   r/   r   r6   r   rh   rc   r'   r'   r(   test_frame_negate  s"    0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 d    q1 s0    Y  n"| }tj|||d}t|| d S )	Nr   r<   r[   r   r@   r   r   rW   )r   r4   rC   rE   r^   r_   r`   r   r   rD   r    r\   r]   r   r'   r'   r(   test_series_negate  s"    0zTestEval.test_series_negater6   r<   rB   r   r   r@   c                 C  s(   d}|}t j|||d}t|| d S Nz+lhsr[   )r^   r_   r`   r   rb   r6   r&   r/   r   r   rh   r'   r'   r(   test_frame_pos  s    zTestEval.test_frame_posc                 C  s(   d}|}t j|||d}t|| d S r   )r^   r_   r`   r   r   r'   r'   r(   test_series_pos  s    zTestEval.test_series_posc                 C  sV  d}t jt|d  tjd||d W d    n1 s80    Y  tjd||ddksZJ tjd||dd	ksrJ 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 tjd||ddksJ tjd||ddksJ tjd||ddksJ tjd||ddks8J tjd||ddksRJ d S )Nz%bad operand type for unary ~: 'float'rW   z~1.0r[   z-1.0r/   r&   g      z+1.0      ?z~1z-1z+1rA   z~Truez~Falsez-Truez-Falser   z+Truez+Falser    r\   rv   r^   r_   )rb   r&   r/   rc   r'   r'   r(   test_scalar_unary#  s    .zTestEval.test_scalar_unaryc                 C  s:   t jtdt jd}t jg dt jd}t|| d S )NzK[-True, True, ~True, +True,-False, False, ~False, +False,-37, 37, ~37, +37]dtype)r   Tr   rA   r   Fr   r   i%   ir   )r4   rz   r^   r_   Zobject_r`   r   )rb   rh   rg   r'   r'   r(   test_unary_in_array4  s    zTestEval.test_unary_in_arrayr   r   zx < -0.1z-5 > xc                 C  s<   t dtjdg|di}||}|jtdgks8J d S )Nr|   r   r   F)r   r4   rz   r_   r   )rb   r   r   dfr   r'   r'   r(   test_float_comparison_bin_opS  s    
z%TestEval.test_float_comparison_bin_oprd   )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  sp   t jddd  }}}tt jdd}d}tjt|d  tj|||d W d    n1 sb0    Y  d S )Nr   rA   rB   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notrW   r[   )	r4   rC   rE   r   r    r\   r]   r^   r_   )	rb   rd   r&   r/   r|   r   r   r   rc   r'   r'   r(   test_disallow_scalar_bool_ops[  s
    z&TestEval.test_disallow_scalar_bool_opsc                 C  sN  d}t jd||d}|dks J t|s,J d}t jd||d}|dksLJ t|sXJ d}t jd||d}|rtJ t|sJ t|sJ 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s
J tdg}t jd||d}t|tdg |jdksJJ d S )NrA   r|   r[   g      ?F)rA   )	r^   r_   r   r   r4   rz   r`   r   shape)rb   r&   r/   r|   rh   r'   r'   r(   test_identicalo  s2    zTestEval.test_identicalc                 C  s$   d}t j|||d}|dks J d S )Nz1 + 2 *         5 - 1 + 2 r[      r^   r_   )rb   r&   r/   exprh   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sZJ d}|d	|d}|jd
dgd d f }t	|| d}|d|d}|jd
gd d f }t	|| d S )Nz1000000000.006r[   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > rA   rB   r   A == )
r^   r_   r4   float64r   queryemptylocr`   r   )	rb   r&   r/   r   rh   rg   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 sH0    Y  t  }d|j_tjt|d |d W d    n1 s0    Y  d S )	N)r   r   r   )Zfoobarclasscolumnsz4Python keyword not valid identifier in numexpr queryrW   z
class == 0lambdazlambda == 0)r   r    r\   SyntaxErrorr   indexnamerb   r   rc   r'   r'   r(   test_disallow_python_keywords  s    (z&TestEval.test_disallow_python_keywordsc                 C  s:   t ddksJ t ddks$J t ddks6J d S )Nznot Truer   z	not Falser   zTrue and not Truer   r   )rb   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oD|jdj sNJ d S )Nr   Zhello)r   r^   r_   r2   rX   r   )rb   eventr'   r'   r(   test_and_logic_string_match  s    z$TestEval.test_and_logic_string_matchN)2__name__
__module____qualname__r    r"   parametrizer   BOOL_OPS_SYMSri   CMP_OPS_SYMSrw   r   r   sortedsetr   
differencer   r   r   r   r#   skip_if_windowsr   r   r   r   r   r   r   r4   rC   rE   r   rD   r   r   r   r   r   float32r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   rG   {   sx   
"
4
 

+/


!rG   c                  O  s
   t j S r+   )r4   rC   rE   )argskwargsr'   r'   r(   r}     r~   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 )
TestTypeCastingrx   )+-*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sNJ |
jj|ks^J t |
t|	 d S )Nr<   r   )
data_gen_fr    r[   )r`   makeCustomDataframefr^   r_   r   r   r   )rb   r&   r/   rx   r   r  r   leftrightsr   r'   r'   r(   test_binop_typecasting  s    z&TestTypeCasting.test_binop_typecastingN)
r   r   r   r    r"   r   r4   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   typer4   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g dZedg Zdd Zejdeejdeejdedd	 Z	ejd
eejdedd Z
ejdeejdeejdeejdedd Zejdddgejdeejd
edd Zejdddgejdeeddgddgdg ejddd Zejdeejd
eejdddgejddd gd!d" Zejdeejdeejdeejded#d$ Zd%d& Zd'S )(TestAlignment)ir	  r   r	  c                 C  s8   d}t jddtd}tj|||d}t ||d  d S )Nzdf * ~2r<   r   )r  r[   )r`   r  r  r^   r_   r   )rb   r&   r/   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rt	t  t
jd||d}W d    q1 s0    Y  nt
jd||d}t|||  W d    n1 s0    Y  d S )	NTrecordalwaysr?   r  
r_idx_typer     zdf + df2r[   warningscatch_warningssimplefilterRuntimeWarningr`   r  r  r  r   assert_produces_warningr^   r_   r   )	rb   r&   r/   r  r  r  r   df2r   r'   r'   r(   test_basic_frame_alignment  s    

0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[   rB   )r   r   zdf < df3)r`   r  r  r^   r_   r   r   r4   rC   rE   r   r   r   )rb   r&   r/   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 d    q1 s0    Y  nt
jd	||d
}
t|
|| |	  W d    n1 s0    Y  d S )NTr  r  r   rB   r     r<   zdf + df2 + df3r[   r  )rb   r&   r/   r*  r+  r,  r-  r   r%  r(  r   r'   r'   r(   #test_medium_complex_frame_alignment  s     


0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 d    q1 s0    Y  ntjd||d}	|d	ks|d	kr|d
kr||n|| }
n|| }
t|	|
 W d    n1 s0    Y  d S )NTr  r  r?   r  r<   df + sr[   r   r   )r   r!  r"  r#  r`   r  r  getattrr   r4   rC   rE   r  r   r$  r^   r_   addr   )rb   r&   r/   r0  r  r  r   r   r	  r   rg   r'   r'   r(   !test_basic_frame_series_alignment1  s    

0z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_typer  )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 d    q1 s0    Y  ntjd||d}|dks|dkr&|dkr||
n|
| }n|
| }t|| d S )Nr   ry   r   r  r	  z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r   strictr?      r  r<   zs + dfr[   r   )r   r   r    r"   r   r`   r  r  r2  r   r4   rC   rE   r  r   r$  r#  r^   r_   r3  r   )rb   r.   r&   r/   r0  r  r  r   r   r   r	  r   rg   r'   r'   r(   !test_basic_series_frame_alignmentK  sD    


0z/TestAlignment.test_basic_series_frame_alignmentrx   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 d    n1 s0    Y  tt  tj|||d}W d    n1 s0    Y  n tj|
||d}tj|||d}|dkr:|dkr:|dkr:t|| W d    n1 sP0    Y  d S )NTr  r  r?   r  r<   zs z dfzdf z sr[   r   r   )r   r!  r"  r#  r`   r  r  r2  r   r4   rC   rE   r  r   r$  r^   r_   r   )rb   r&   r/   r0  rx   r  r  r   r   r	  r6   r8   r   r   r'   r'   r(   test_series_frame_commutativityr  s&    

.0
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r\tt  tjd||d}W d    n1 sP0    Y  ntjd||d}|j|jks~J t|| W d    n1 s0    Y  d S )Nr   r<   rB   Tr  r  r   r   r   r%  r  r   r   zdf2 + ser + dfr[   )r   r!  r"  r#  rC   choicer`   r  r  r2  localsgetr   r4   rE   r3  r  r   r$  r^   r_   r   r   )rb   r&   r/   r*  r+  r,  r-  nm1m2r0  obj_namer   r%  r   serZ	expected2rg   r   r'   r'   r(   #test_complex_series_frame_alignment  s>    



2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 d    n1 sd0    Y  ttjd}td  tj	d||d W d    n1 s0    Y  t tjdd}ttjd}td  tj	d||d W d    n1 s0    Y  t tjdd}ttjd}|dk}|sLt}nd}t|x}tj	d||d |st
|d	ksJ t|d
 j}	t|j|jd	  }
d|
dd}|	|ksJ W d    n1 s0    Y  d S )Ni  r?   i'  r   Fr1  r[   rR   rA   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   r4   rC   rE   r   r   r`   r$  r^   r_   lenr2   messagelog10r   r   )rb   r&   r/   r   r	  seenZis_python_engineZwrnwrc   Zloggedrg   r'   r'   r(   +test_performance_warning_for_poor_alignment  s>    ..0z9TestAlignment.test_performance_warning_for_poor_alignmentN)r   r   r   Zindex_typesZlhs_index_typesr  r    r"   r   r&  r)  r/  r4  listr   filterwarningsr7  r8  rA  rG  r'   r'   r'   r(   r    sJ   

!,r  c                
   @  sV  e Zd Zdd Zdd Zejdddgejdddgejd	ej	d
d Z
ejdddgejdddgejd	ej	dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zejjd2d3d4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%dBdC Z&ejdDdEdFdEdGge'(g dHgej)dIdJdK Z*ejdDg dLdMdN Z+ejdOdEdFdEdGge'(g dHdEdGigdPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2ejd^g d_d`da Z3ejdbdcddgdedf Z4dgS )hTestOperationsc                 O  s$   | ddd |d< tj|i |S Nlevelr   rA   popr^   r_   rb   r   r   r'   r'   r(   r_     s    zTestOperations.evalc              	     sL  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 rd}	tjt|	d  tj|||d W d    n1 s0    Y  q@td|d|}
| j|||d}||
ksJ t||d|}
| j|d|i||d}||
ksJ td||d |}
| j|d|i||d}||
ks@J q@d S )NrR   rl   rm   c                   s   g | ]}| vr|qS r'   r'   r%   rx   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'   rP  r'   r'   r(   r)     r~   z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rk   z&argument of type 'int' is not iterablerW   r[   rA   r|   r   )	r   r   r   r    r\   rv   r^   r_   r;   )rb   r&   r/   Z	arith_opsopsrx   rd   r   r   rc   expecr|   yr'   rQ  r(   test_simple_arith_ops  s0    


0z$TestOperations.test_simple_arith_opsr8   TFr6   rx   c                 C  s   | d| d| }t dkrd|dv rdd}tjt|d | | W d    n1 sV0    Y  d S | |}t|}||ksJ d S Nr  rR   rS   rV   rW   r/   r    r\   r]   r_   rb   r8   r6   rx   rd   rc   r   r   r'   r'   r(   test_simple_bool_ops  s    (
z#TestOperations.test_simple_bool_opsc                 C  s   | d| d| }t dkrd|dv rdd}tjt|d | | W d    n1 sV0    Y  d S | |}t|}||ksJ d S rW  rX  rY  r'   r'   r(   test_bool_ops_with_constants+  s    (
z+TestOperations.test_bool_ops_with_constantsc                 C  sl   t jdddd}tt jd}d}tjt|d$ | jd||d	d
 W d    n1 s^0    Y  d S )Nr   r.  r<      r?   z?N-dimensional objects, where N > 2, are not supported with evalrW   x + yr|   rU  rt   )r4   rC   rE   r   r    r\   r]   r_   )rb   r|   rU  rc   r'   r'   r(   test_4d_ndarray_fails;  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1rA   )r_   )rb   r|   r'   r'   r(   test_constantB  s    
zTestOperations.test_constantc                 C  s4   t tjdd}| jdd|id}t|| d S )Nr?   rB   r   r_  r   r4   rC   rE   r_   r`   r   )rb   r   r%  r'   r'   r(   test_single_variableF  s    z#TestOperations.test_single_variablec                 C  s  t dg}d}tt | j|dd}W d    n1 s>0    Y  t|t dg tt | j|dd}W d    n1 s0    Y  t|t dg tt | jddd}W d    n1 s0    Y  d}||ksJ tt | jddd}W d    n1 s 0    Y  d}||ks<J tt | jd	dd}W d    n1 sl0    Y  d}||ksJ tt | jd	dd}W d    n1 s0    Y  d}||ksJ d S )
NrA   zs / 1F)truedivr   Tz1 / 2r@   zs / 2)r4   rz   r`   r$  FutureWarningr_   r   )rb   r	  rd   r   rT  r'   r'   r(   test_truedivK  s0    ,,,...zTestOperations.test_truedivc                 C  sN   t tjdd}tjtdd | d W d    n1 s@0    Y  d S )Nr<   r   name 'x' is not definedrW   zdf[x > 2] > 2)r   r4   rC   rE   r    r\   	NameErrorr_   rb   r   r'   r'   r(   &test_failing_subscript_with_name_errorm  s    z5TestOperations.test_failing_subscript_with_name_errorc                 C  sD   t tjdd}| jdd|id}|d |dk }t|| d S )Nr<   r   z(df + 1)[df > 2]r   r_  rA   rB   rc  rb   r   rh   rg   r'   r'   r(   test_lhs_expression_subscriptr  s    z,TestOperations.test_lhs_expression_subscriptc                 C  s   t tjddtdd}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t||	D ]"\}
}t	
|| j|
d	|id
 q~d S )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   r4   rC   rE   rH  r   r   r9   zipr`   r   r_   )rb   r   expr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3exprsZexpecsr:   rT  r'   r'   r(   test_attr_expressionx  s    

z#TestOperations.test_attr_expressionc                 C  sz   t tjddtdd}t tjdd}d}d}tjt|d$ | j|||dd	 W d    n1 sl0    Y  d S )
Nr<   r   rn  r   zdf = df2%cannot assign without a target objectrW   )r   r%  r_  )	r   r4   rC   rE   rH  r    r\   r1   r_   )rb   r   r%  rp  rc   r'   r'   r(   test_assignment_fails  s    z$TestOperations.test_assignment_failsc                 C  sV   t tjddtdd}tjtdd |d W d    n1 sH0    Y  d S )Nr<   rB   abr   invalid syntaxrW   zd c = a + b	r   r4   rC   rE   rH  r    r\   r   r_   rj  r'   r'   r(   %test_assignment_column_multiple_raise  s    z4TestOperations.test_assignment_column_multiple_raisec                 C  sZ   t tjddtdd}d}tjt|d |d W d    n1 sL0    Y  d S )Nr<   rB   ru  r   z5left hand side of an assignment must be a single namerW   zd,c = a + brw  r   r'   r'   r(   %test_assignment_column_invalid_assign  s    z4TestOperations.test_assignment_column_invalid_assignc                 C  sZ   t tjddtdd}d}tjt|d |d W d    n1 sL0    Y  d S )Nr<   rB   ru  r   zcannot assign to function callrW   zTimestamp("20131001") = a + brw  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<   rB   ru  r   r   r   	a = a + bTinplace	r   r4   rC   rE   rH  copyr_   r`   r   rb   r   rg   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<   rB   ru  r   r   r   r9   	c = a + bTr|  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<   rB   ru  r   rA   z	a = 1 + bTr|  r   r   r~  )rb   r   r   rg   r'   r'   r(   +test_assignment_single_assign_local_overlap  s    z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sd   t tjddtdd}d}|j }|jddd ||j }t	j
||jd	d
 |jd u s`J d S )Nr<   rB   ru  r   rA   r{  Tr|  FZcheck_names)r   r4   rC   rE   rH  r   r  r_   r   r`   r   r   )rb   r   r   Zold_arh   r'   r'   r(   "test_assignment_single_assign_name  s    

z1TestOperations.test_assignment_single_assign_namec                 C  sh   t tjddtdd}|jddd d}tjt|d	 |d
 W d    n1 sZ0    Y  d S )Nr<   rB   ru  r   r  Tr|  z#can only assign a single expressionrW   z	c = a = b)	r   r4   rC   rE   rH  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<   rB   ru  r   zc = df.a + df.br   T)rt   targetr}  r   r   r9   	r   r4   rC   rE   rH  r_   r  r`   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   r`   r   rl  r'   r'   r(   test_column_in  s    

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r   c                 C  s`   t tjddtdd}|jddd}|d us4J | }|d |d	  |d
< t|| d S )Nr<   rB   ru  r   r  Fr|  r   r   r9   r  )rb   r   actualrg   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 slJ |d d |d< |d d |d< |jdd	d
}t|| |d u sJ d}tjt|d |jddd
 W d    n1 s0    Y  d S )NrA   rB   r   r.  r<   r\  r  r   r   r9   d$
        c = a + b
        d = c + bTr|  rA   rB   r:   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrW   z(
            a = b + 2
            b - 2F)r   r  r_   r`   r   r    r\   r1   )rb   r   rg   answerrc   r'   r'   r(   test_multi_line_expression  s0    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   r9   r  r  Fr|  rA   rB   r:   r  r   r  r_   r`   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 shJ d S )Nr  r  r  r6  r   r9   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr|  r  )rb   r   rg   Z	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 sxJ d S )Nr  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   rA   r6  r9   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr|  r  rb   r   r  rg   r  r'   r'   r(   2test_multi_line_expression_callable_local_variable9  s    zATestOperations.test_multi_line_expression_callable_local_variablec                 C  s   t g dg dd}dd }| }|d |ddd	 |d
< |d
 |ddd	 |d< |jddd}t|| |d u s|J d S )Nr  r  r  c                 S  s   |S r+   r'   r  r'   r'   r(   r  Q  s    zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   r6  rA   )r   r   r9   r  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Tr|  r  r  r'   r'   r(   >test_multi_line_expression_callable_local_variable_with_kwargsM  s    zMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc                 C  sj   t g dg dd}| }d}tjt|d |d W d    n1 sP0    Y  t|| d S )Nr  r  r  rs  rW   za = 1)r   r  r    r\   r1   r   r`   r   )rb   r   Zdf_origrc   r'   r'   r(   test_assignment_in_querya  s    (z'TestOperations.test_assignment_in_queryc                 C  st   t g dg dd}| }||d dk }|jddd t|| i }dd	i}| jd
|dd t|| d S )Nr  r  r  r   rB   za == 2Tr|  r   	a = 1 + 2r  r}  )r   r  r   r`   r   r_   Zassert_dict_equalr  r'   r'   r(   test_query_inplacej  s    z!TestOperations.test_query_inplaceinvalid_targetrA   catrB   rA   r   zignore::FutureWarningc                 C  s   d}d}t jt|d  | j||dd W d    n1 s<0    Y  t|drt jt|d  | j||dd W d    n1 s0    Y  d S )Nz)Cannot assign expression output to targetr  rW   Tr  r  F)r    r\   r1   r_   hasattrrb   r  rc   
expressionr'   r'   r(   test_cannot_item_assignx  s    .
z&TestOperations.test_cannot_item_assign)rA   r  r  c                 C  sJ   d}d}t jt|d  | j||dd W d    n1 s<0    Y  d S )Nz"Cannot return a copy of the targetr  rW   Fr  )r    r\   r1   r_   r  r'   r'   r(   test_cannot_copy_item  s    z$TestOperations.test_cannot_copy_itemr  c                 C  sb   d}| j ||dddksJ d}tjt|d  | j ||dd W d    n1 sT0    Y  d S )N1 + 2Fr  r   z0Cannot operate inplace if there is no assignmentrW   T)r_   r    r\   r1   )rb   r  r  rc   r'   r'   r(   test_inplace_no_assignment  s
    z)TestOperations.test_inplace_no_assignmentc                 C  sR   t jddtddd}|dk }| jdd|id}|dk }t || t || d S )NrB   pr  r  r  r  r'  r   r_  r`   r  r  r_   r   )rb   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 )	NrB   r  r  r  zdf[df < 2 + 3]r   r_  r<   r  rb   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 )NrB   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   r4   rC   rE   r   r_   r  r`   r   )rb   r&   r/   r   r   rT  r'   r'   r(   test_date_boolean  s    
z TestOperations.test_date_booleanc                 C  s  |dkrt jd||d}|s J t jd||d}|s8J t jd||d}|rPJ t jd||d}|shJ t jd||d}|sJ t jd||d}|sJ t jd	||d}|sJ t jd
||d}|sJ t jd||d}|rJ t jd||d}|sJ nd}tjt|d  t jd||d W d    n1 s60    Y  tjt|d  t jd||d W d    n1 sv0    Y  tjt|d  t jd||d W d    n1 s0    Y  tjt|d  t jd||d W d    n1 s0    Y  d}tjt|d  t jd||d W d    n1 s:0    Y  tjt|d  t jd||d W d    n1 sz0    Y  d S )NrR   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 implementedrW   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))r^   r_   r    r\   r]   )rb   r&   r/   r   rc   r'   r'   r(   test_simple_in_ops  sF    00000z!TestOperations.test_simple_in_opsc                 C  s2   d}d d}d}tj|||d}||ks.J d S )NrA   z * Z!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar[   )ru   r^   r_   )rb   r&   r/   r   r   rg   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rpd}d|v r*d}tjt|d& tj|d|i||d	 W d    q1 sd0    Y  ntj|d|i||d	 d S )
Nr<   r   rR   rV   not'Not' nodes are not implementedrW   r   )rt   r/   r&   	r   r4   rC   rE   r    r\   r]   r^   r_   )rb   r   r&   r/   r   rc   r'   r'   r(   test_fails_and_or_not  s$    	&z$TestOperations.test_fails_and_or_notcharrq   r   c                 C  s~   t tjdd}d| d}|dkrjd}tjt|d  tj|||d W d    qz1 s^0    Y  ntj|||d d S )	Nr<   r   z(df + 2)[df > 1] > 0 z	 (df > 0)rR   z$cannot evaluate scalar only bool opsrW   r   r  )rb   r  r&   r/   r   rd   rc   r'   r'   r(   test_fails_ampersand_pipe  s    0z(TestOperations.test_fails_ampersand_pipeN)5r   r   r   r_   rV  r    r"   r   r   r   rZ  r[  r`  rb  rd  rg  rk  rm  rr  rt  rx  ry  rz  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r4   rz   rI  r  r  r  r  r  r  r  r  r  r  r  r'   r'   r'   r(   rJ    sr   #"

	
%	 

&
	
/
rJ  c                   @  s   e Zd Zdd Zdd Zejdedd Z	dd	 Z
d
d Zejdejejfejejfejejfejejfejejejejdgdd Zdd Zdd ZdS )TestMathc                 O  s$   | ddd |d< tj|i |S rK  rM  rO  r'   r'   r(   r_     s    zTestMath.evalc                 C  s   t dtjdi}|j}|}| d}| |}tjdd tt||}W d    n1 sb0    Y  tj	||dd d S )Nr   r?   z(a)ignoreallFr  )
r   r4   rC   rE   r   r_   errstater2  r`   r   )rb   r0   r   r   fnr   gotr   r'   r'   r(   test_unary_functions   s    

,zTestMath.test_unary_functionsr  c                 C  s   t tjdtjdd}|j}|j}| d}| |}tjdd  tt|||}W d    n1 sp0    Y  t	j
||dd d S )Nr?   r  z(a, b)r  r  Fr  )r   r4   rC   rE   r   r   r_   r  r2  r`   r   )rb   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&   r/   r}  Fr  )r   r4   rC   rE   r_   r:   Zarctan2sinr   r   r`   r   rb   r&   r/   r   r  r   r'   r'   r(   test_df_use_case8  s    zTestMath.test_df_use_casec                 C  s\   t tjdtjdd}|jd||dd |j}t|j|j }t	j
||dd d S )Nr?   r  ze = sin(a + b)Tr  Fr  )r   r4   rC   rE   r_   r:   r  r   r   r`   r   r  r'   r'   r(    test_df_arithmetic_subexpressionD  s
    z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper   c                 C  s   t dtjd|i}|jj|ks*J |jd||dd |j}t	|j}|j|jks^J ||jkslJ t
j||dd d S )Nr   r?   z
b = sin(a)Tr  Fr  )r   r4   rC   rE   r   r   r   r_   r   r  r`   r   )rb   r   Zexpect_dtyper&   r/   r   r  r   r'   r'   r(   test_result_typesK  s    zTestMath.test_result_typesc                 C  sZ   t dtjdi}d}tjt|d  |jd||d W d    n1 sL0    Y  d S )Nr   r?   z#"mysin" is not a supported functionrW   zmysin(a)r[   )r   r4   rC   rE   r    r\   r1   r_   rb   r&   r/   r   rc   r'   r'   r(   test_undefined_funcd  s    zTestMath.test_undefined_funcc                 C  sZ   t dtjdi}d}tjt|d  |jd||d W d    n1 sL0    Y  d S )Nr   r?   z1Function "sin" does not support keyword argumentsrW   zsin(x=a)r[   )r   r4   rC   rE   r    r\   rv   r_   r  r'   r'   r(   test_keyword_argk  s    zTestMath.test_keyword_argN)r   r   r   r_   r  r    r"   r   r   r  r  r  r4   int32r   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 * 2rB   r[   )r`   r   _var_sr^   r_   )rb   r&   r/   r:   r'   r'   r(   test_global_scopew  s    zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks@J d S )NrA   x + 1r   lcls)r:  r  r^   r_   rN  )rb   r&   r/   r|   r  Zlcls2r'   r'   r(   test_no_new_locals}  s    


zTestScope.test_no_new_localsc                 C  s8   d}t   }tjd||d t   }||ks4J d S )NrA   r  r[   )globalsr  r^   r_   )rb   r&   r/   r|   ZgblsZgbls2r'   r'   r(   test_no_new_globals  s
    

zTestScope.test_no_new_globalsc                 C  sL   d}d}t jt|d" tjd||i d W d    n1 s>0    Y  d S )NrA   rh  rW   r  rs   r    r\   r   r^   r_   )rb   r&   r/   r|   rc   r'   r'   r(   test_empty_locals  s    zTestScope.test_empty_localsc                 C  sL   d}d}t jt|d" tj|||i d W d    n1 s>0    Y  d S )Nzname '_var_s' is not definedr  rW   )r&   r/   Zglobal_dictr  )rb   r&   r/   rc   r:   r'   r'   r(   test_empty_globals  s    zTestScope.test_empty_globalsN)r   r   r   r  r  r  r  r  r'   r'   r'   r(   r  v  s
   r  c                  C  sL   d} t jt| d& tjdddddd W d    n1 s>0    Y  d S )	NzInvalid engine 'asdf' passedrW   r]  rA   rB   r^  asdf)rt   r&   r    r\   KeyErrorr^   r_   rc   r'   r'   r(   test_invalid_engine  s    r  )use_numexprrg   ))Tr   )FrR   c                 C  sP   ddl m} td| $ |d }||ks.J W d    n1 sB0    Y  d S )Nr   )_check_enginecompute.use_numexpr)Zpandas.core.computation.evalr  r^   option_context)r  rg   r  rh   r'   r'   r(   test_numexpr_option_respected  s    
r  c                  C  sz   t ddZ tg dg dd} | d}td d gddgdd	dgd
}t|| W d    n1 sl0    Y  d S )Nr  F)TFTFNN)rA   rB   r   r.  r<   r\  )r   Bz
A.isnull()r<   r\  r.  )r   )r^   r  r   r   r`   r   )r   rh   rg   r'   r'   r(   #test_numexpr_option_incompatible_op  s    
r  c                  C  sL   d} t jt| d& tjdddddd W d    n1 s>0    Y  d S )	NzInvalid parser 'asdf' passedrW   r]  rA   rB   r^  r  )rt   r/   r  r  r'   r'   r(   test_invalid_parser  s    r  )rR   r   ry   z dict[str, type[BaseExprVisitor]]_parsersc              	   C  sb   t | }|d| |}|jD ]B}d}tjt|d t||  W d    q1 sR0    Y  qd S )Nr  znodes are not implementedrW   )r  Zunsupported_nodesr    r\   r]   r2  )r&   r/   ZVisitorClassinstrS  rc   r'   r'   r(   test_disallowed_nodes  s    
r  c                 C  sF   d}t jtdd  tj|| |d W d    n1 s80    Y  d S )Nzs +rv  rW   r[   r    r\   r   r^   r_   )r&   r/   r:   r'   r'   r(   test_syntax_error_exprs  s    r  c                 C  sJ   d}d}t jt|d  tj|| |d W d    n1 s<0    Y  d S )Nzs + tzname 's' is not definedrW   r[   )r    r\   ri  r^   r_   )r&   r/   r:   rc   r'   r'   r(   test_name_error_exprs  s    r  express)za + @bz@a + bz@a + @bc                 C  s   d\}}|dkrPt jtdd  tj|| |d W d    q1 sD0    Y  n>t jtdd  tj|| |d W d    n1 s0    Y  d S )NrA   rB   ry   zThe '@' prefix is onlyrW   r[   zThe '@' prefix is notr  )r&   r/   r  r   r   r'   r'   r(   %test_invalid_local_variable_reference  s    0r  c                 C  sx   d\}}| dkrTd}t jt|d  tjd| |d W d    qt1 sH0    Y  n tjd| |d}||| kstJ d S )Nr  r   zVariables in expression .+rW   zsin + dotted_liner[   )r    r\   r   r^   r_   )r&   r/   r  Zdotted_linerc   r   r'   r'   r(   test_numexpr_builtin_raises  s    0r  c                 C  sH   d}t jtdd" tjd|| |d W d    n1 s:0    Y  d S )N)*   g      @zResolver of type .+rW   r  )	resolversr&   r/   r   )r&   r/   Zcannot_resolver'   r'   r(   test_bad_resolver_raises  s    r  c                 C  sB   t jtdd  tjd| |d W d    n1 s40    Y  d S )Nzexpr cannot be an empty stringrW    r[   r    r\   r1   r^   r_   r[   r'   r'   r(   test_empty_string_raises  s    r  c                 C  sB   t jtdd  tjd| |d W d    n1 s40    Y  d S )Nz#only a single expression is allowedrW   z1 + 1; 2 + 2r[   r  r[   r'   r'   r(   $test_more_than_one_expression_raises
  s    r  cmprS   r8   c              	   C  s   t dd ttjji}||   }||   } ||  }d| d| d}d| d| d}d| d| d	}	|||	fD ]F}
d
}tjt|d  tj	|
||d W d    qr1 s0    Y  qrd S )Nc                   S  s   t jdS )Nr?   )r4   rC   r   r'   r'   r'   r(   r}     r~   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>ro   r   rp   r   rY   r   rZ   r   rW   r[   )
intr=   r4   rC   rE   r    r\   r]   r^   r_   )r6   r  r8   r&   r/   genr   r   r   r   rd   rc   r'   r'   r(   test_bool_ops_fails_on_scalars  s    


r  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   r9   r   )FFFr   )r   r_   r   r   r   r`   r   )r   r   rh   rg   r'   r'   r(   test_equals_various"  s    r  c                 C  s*   d}t j}tj|| |d}||ks&J d S )Nzinf + 1r[   )r4   infr^   r_   )r&   r/   r	  rg   rh   r'   r'   r(   test_inf4  s    r  c                 C  s   d}t t"}tjd| |dd W d    n1 s60    Y  t|dksPJ |t|d jv sfJ t t"}tjd| |dd W d    n1 s0    Y  t|dksJ |t|d jv sJ d S )Nz0The `truediv` parameter in pd.eval is deprecatedz1+1T)r&   r/   re  rA   r   F)r`   r$  rf  r^   r_   rB  r2   rC  )r&   r/   rX   mr'   r'   r(   test_truediv_deprecated;  s    00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<   rB   r   r   `z` > 5)r&   )r   r4   rC   rE   r   r`   r   )r&   r  r   rg   Zquery_stringrh   r'   r'   r(   test_query_tokenL  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 d    q1 s0    Y  n|jd| |d	}t|| d S )Nr   r?   rA   r  r  countr   z
~(cat > 0)r[   rR   r  rW   znot (cat > 0))r   r  r   r`   r   r    r\   r]   )r&   r/   r   rg   rh   rc   r'   r'   r(   test_negate_lt_eq_leV  s    0r  c                 C  st   |dv r&| j tjjtd| d ttjj	dddd|dgd	}||| d
k }|
| d}t|| d S )N)TrueFalser  ZInfz+GH 47859 DataFrame eval not supported with )r\   r   r   d   )r?   rB   r   Zcol1r   r\  z>6)r   r   r    r"   r   r  r   r4   rC   r   r   r`   r   )r.   r  r   rg   rh   r'   r'   r(    test_eval_no_support_column_namef  s    r  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|| | st||d  t|d |d  n,tg ddd
}t|| t|d | d S )Nr  r  )r6     	   )r   r  Cr   z	A = B + CTr|  )r        r  )r   r_   r`   r   r   r   )Zusing_copy_on_writer   Zresult_viewr@  rg   r'   r'   r(   test_set_inplace{  s    r  c                   @  s.   e Zd Zejdddg ddgdd ZdS )	TestValidatevaluerA   r  r  g      @c                 C  sD   d}t jt|d tjd|d W d    n1 s60    Y  d S )Nz8For argument "inplace" expected type bool, received typerW   z2+2r|  r  )rb   r  rc   r'   r'   r(   test_validate_bool_args  s    z$TestValidate.test_validate_bool_argsN)r   r   r   r    r"   r   r  r'   r'   r'   r(   r    s   r  )k
__future__r   	functoolsr   	itertoolsr   r  rC   r   numpyr4   r    Zpandas.errorsr   r   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr#   Zpandas.core.dtypes.commonr   r	   r
   r   ry   r^   r   r   r   Zpandas._testingZ_testingr`   Zpandas.core.computationr   Zpandas.core.computation.enginesr   Zpandas.core.computation.exprcoreZcomputationr   r   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PARSERSr/   rH  r0   r;   ranger6   r8   r   rG   r  r   r  r  rJ  r  rE   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	  r  keysr  Z&skip_array_manager_not_yet_implementedr  r  r'   r'   r'   r(   <module>   s   




    O      ,X%
	




	

