a
    Pf                    @  s  U d dl mZ d dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZ d dlm  mZ d dlmZmZmZmZ d dlZd dlmZmZmZmZmZm Z  d dl!m"Z# d d	l$m%Z%m&Z& d d
l'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7 e	j8dd e(D ddd Z9e	j8e%j:ddd Z;dd Z<e	j8e=e>dg dddd Z?e?Z@e?ZAe	j8dd ZBG dd  d ZCG d!d" d"ZDd#d$ ZEG d%d& d&ZFG d'd( d(ZGG d)d* d*ZHejIJd+Kd,ZLG d-d. d.ZMeNd/d0d1 ZOeNd/e	jPQd2d3d4d5 ZReNd/d6d7 ZSeNd/d8d9 ZTe,e&jUe+d:ZVd;eWd<< e	jPQde(e	jPQdeVd=d> ZXd?d@ ZYdAdB ZZe	jPQdCg dDdEdF Z[dGdH Z\dIdJ Z]dKdL Z^dMdN Z_e	jPQdOdPe	jPQde`eafe	jPQdQe`eafdRdS Zbe	jPQdTdUdVgdWdX ZcdYdZ Zde	jPQd[d\d]gd^d_ Zed`da Zfe	jPQd[e7g dbdc Zhddde ZiG dfdg dgZjdS )h    )annotations)reduce)productN)PY312)NumExprClobberingErrorPerformanceWarningUndefinedVariableError)is_boolis_floatis_list_like	is_scalar)	DataFrameIndexSeries
date_rangeperiod_rangetimedelta_range)exprpytables)ENGINES)BaseExprVisitorPandasExprVisitorPythonExprVisitor)NUMEXPR_INSTALLEDUSE_NUMEXPR)ARITH_OPS_SYMSSPECIAL_CASE_ARITH_OPS_SYMS_binary_math_ops_binary_ops_dict_unary_math_ops)DEFAULT_GLOBALSc              	   c  sH   | ]@}t j|t jj|d kot dt dt dtd gdV  qdS )numexprznumexpr enabled->z, installed->reasonZmarksN)pytestparammarkskipifr   r   td
skip_if_no).0engine r-   [/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/computation/test_eval.py	<genexpr><   s   r/   )paramsc                 C  s   | j S Nr&   requestr-   r-   r.   r,   ;   s    r,   c                 C  s   | j S r1   r2   r3   r-   r-   r.   parserO   s    r5   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_binT   s    
r@      )r   r   Z	SeriesNaNZDataFrameNaNfloat)r0   idsc                 C  s~   t tjdd}tj||dk< t tjddttjddtddtjtjdg|tjd f}|| j S )N   )
   rA         ?rA      )r   r9   randomdefault_rngstandard_normalr:   r   r&   )r4   Znan_df1optsr-   r-   r.   r;   c   s    r;   c                   C  s*   dd dd dd dd dd dd dS )	Nc                 S  s   t t| tjdS Ndtype)r   r9   arangeint64nr-   r-   r.   <lambda>|       zidx_func_dict.<locals>.<lambda>c                 S  s   t t| tjdS rL   )r   r9   rO   float64rQ   r-   r-   r.   rS   }   rT   c                 S  s   t dd tdd|  D S )Nc                 S  s   g | ]}| d t | qS )_)chr)r+   ir-   r-   r.   
<listcomp>~   rT   z3idx_func_dict.<locals>.<lambda>.<locals>.<listcomp>a   )r   rangerQ   r-   r-   r.   rS   ~   rT   c                 S  s   t d| dS )N
2020-01-01periods)r   rQ   r-   r-   r.   rS      rT   c                 S  s   t d| dS )Nz1 dayr]   )r   rQ   r-   r-   r.   rS      rT   c                 S  s   t d| ddS )Nr\   D)r^   freq)r   rQ   r-   r-   r.   rS      rT   )rX   fsdtr)   pr-   r-   r-   r-   r.   idx_func_dicty   s    re   c                	   @  s`  e Zd Zejjdg dg ddejjdddgdd	gdejd
ejdd Zejdej	dd Z
ejdej	dd Zejdddgejdddgdd Zejdeeeedd Zdd Zdd Zejdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zejd(eej d)!d*eej d)j"d+d*d,eej d)!d*d-kgd.d/ Z#ejd(e$ej d)!d+e$ej d)j"d+d+d,e$ej d)!d+d-kgd0d1 Z%d2d3 Z&d4d5 Z'ejd6ej(ej)gejd7d8d9gd:d; Z*d<d= Z+ejd>d?d@dA Z,dBdC Z-dDdE Z.dFdG Z/dHdI Z0dJdK Z1dLdM Z2dNS )OTestEvalr<   )z!=z==z<=z>=<>)neeqlegeltgt)rC   cmp2rh   rg   rn   rm   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,   r5   )r%   raisesNotImplementedErrorpdevalr@   tmassert_equal)selfr<   ro   rp   r;   r=   r,   r5   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   rq   innot in&'(In|NotIn)' nodes are not implementedrv   lhs  rhsrz   |zvonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (`|')bool(`|')z'argument of type 'bool' is not iterabler;   r=   r,   r5   
local_dict)r%   r{   r|   r}   r~   joinr   	TypeErrorr@   r   r   )
r   r   r;   r=   r,   r5   r   r   r   r   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
}	||	 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
|rLt
|rLdd ||fD \}}t||||}t
|rl| }n| }tj|||d}t|| d S )Nrq   r   r   rv   z~(lhs ry   rz   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr"   r   r   r   zwonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (`|')float(`|')z(argument of type 'float' is not iterabler   r   c                 s  s   | ]}t |gV  qd S r1   )r9   arrayr+   xr-   r-   r.   r/      rT   z3TestEval.test_compound_invert_op.<locals>.<genexpr>)r%   r{   r|   r}   r~   r
   r'   xfailapplymarkerr   r   r   r@   r   assert_almost_equal)r   r   r;   r=   r4   r,   r5   r   r   r'   Z
skip_theser   r   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 )Nrq   r    mid r   ru   rv   rz    mid and mid rx    mid) & (mid ry   &)r%   r{   r|   r}   r~   r@   r   r   )r   r<   ro   r;   midhsr=   r,   r5   midex1r   r   r   ex2ex3r   r   r   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 )	Nr   r   rz   z rhs r!   r   znlhs z ghs)r}   r~   r@   r   r   alignr6   r   AttributeErrorr!   evaluatevalues)r   r   r;   r=   r,   r5   r   r   r   ZnlhsZghsri   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 % rhsrz   r!   r   zexpected % rhs%)r}   r~   r   r   r!   r   
isinstancer   r   r   itemr@   )	r   r;   r=   r,   r5   r   r   r   ri   r-   r-   r.   test_modulus0  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 // rhsrq   rz   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'rv   r   r   r,   r5   )r}   r~   r   r   r%   r{   r   )	r   r;   r=   r,   r5   r   resr   r   r-   r-   r.   test_floor_divisionB  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**rz   z-(DataFrame.columns|numpy array) are differentrv   z(lhs ** rhs) ** rhs)r@   r}   r~   r   r   complexr9   Zcomplexfloatingisnanr%   r{   AssertionErrorr   assert_numpy_array_equalr   )
r   r;   r=   r,   r5   r   r   r   r   middler-   r-   r.   test_powV  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~elbrz   )	astypeboolr   r9   r   r}   r~   r   r   )r   r;   r,   r5   Zelbr   r   r-   r-   r.   test_check_single_invert_opp  s    z$TestEval.test_check_single_invert_opc                 C  s(  d}t tjdd}|dkrfd}tjt|d  tj	|||d W d    q1 sZ0    Y  nBd}tjt
|d  tj	|||d W d    n1 s0    Y  t tjdjd	dd
}|dkrd}tjt|d  tj	|||d W d    n1 s0    Y  n"| }tj	|||d}t|| t tjdddk}| }tj	|||d}t|| t g dtjdddkd}|dkrtjtdd  tj	|||d W d    n1 s0    Y  nDd}tjt
|d  tj	|||d W d    n1 s0    Y  d S )N~lhsrD   rA   rD   r!   -couldn't find matching opcode for 'invert_dd'rv   rz   0ufunc 'invert' not supported for the input typesrA   size)couldn't find matching opcode for 'invertrF   arG   g       @   )br>   unknown type object#bad operand type for unary ~: 'str')r   r9   rH   rI   rJ   r%   r{   r|   r}   r~   r   integersr   assert_frame_equalr6   )r   r,   r5   r   r;   r   expectr   r-   r-   r.   test_frame_invertz  s<    0.
2
2zTestEval.test_frame_invertc                 C  s  d}t tjdd}|dkrfd}tjt|d  tj	|||d}W d    q1 sZ0    Y  nBd}tjt
|d  tj	|||d W d    n1 s0    Y  t tjdjddd	}|dkrd
}tjt|d  tj	|||d W d    n1 s0    Y  n"| }tj	|||d}t|| t tjdddk}| }tj	|||d}t|| t g d}|dkrtjtdd  tj	|||d W d    n1 s0    Y  nDd}tjt
|d  tj	|||d W d    n1 s0    Y  d S )Nr   rD   rA   r!   r   rv   rz   r   r   r   rF   r   r   r   )r   r9   rH   rI   rJ   r%   r{   r|   r}   r~   r   r   r   assert_series_equalr6   )r   r,   r5   r   r;   r   r   r   r-   r-   r.   test_series_invert  s8    0.
2
2zTestEval.test_series_invertc                 C  s  d}t tjdd}| }tj|||d}t|| t tjdj	ddd}| }tj|||d}t|| t tjdddk}|dkrd	}t
jt|d
  tj|||d W d    n1 s0    Y  n"| }tj|||d}t|| d S )N-lhsrD   r   rz   rA   r   rF   r!   *couldn't find matching opcode for 'neg_bb'rv   )r   r9   rH   rI   rJ   r}   r~   r   r   r   r%   r{   r|   r   r,   r5   r   r;   r   r   r   r-   r-   r.   test_frame_negate  s"    0zTestEval.test_frame_negatec                 C  s  d}t tjdd}| }tj|||d}t|| t tjdj	ddd}| }tj|||d}t|| t tjdddk}|dkrd}t
jt|d	  tj|||d W d    n1 s0    Y  n"| }tj|||d}t|| d S )
Nr   rD   rA   rz   r   rF   r!   r   rv   )r   r9   rH   rI   rJ   r}   r~   r   r   r   r%   r{   r|   r   r-   r-   r.   test_series_negate  s"    0zTestEval.test_series_negater;   rD   r   rA   r   rF   c                 C  s(   d}|}t j|||d}t|| d S Nz+lhsrz   )r}   r~   r   r   r   r;   r,   r5   r   r   r   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  s  d}d }t r |dkr|dks t}tjt|d  tjd||d W d    n1 sT0    Y  tjd||dd	ksvJ 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* tjd||ddksJ W d    n1 s0    Y  tj|ddd* tjd||ddksNJ W d    n1 sd0    Y  tjd||ddksJ tjd||ddksJ tjd||ddksJ tjd||ddksJ d S )Nz%bad operand type for unary ~: 'float'r!   r   rv   z~1.0rz   z-1.0r5   r,   g      z+1.0g      ?z~1z-1z+1rG   zBitwise inversionF)rw   check_stacklevelz~Truez~Falsez-Truez-Falser   z+Truez+False)	r   DeprecationWarningr%   r{   r   r}   r~   r   assert_produces_warning)r   r,   r5   r   warnr-   r-   r.   test_scalar_unary.  s.    .::zTestEval.test_scalar_unaryc                 C  s:   t jtdt jd}t jg dt jd}t|| d S )Nz>[-True, True, +True, -False, False, +False, -37, 37, ~37, +37]rM   )
r   TrG   r   Fr   i%   ir   )r9   r   r}   r~   Zobject_r   r   )r   r   r   r-   r-   r.   test_unary_in_arrayH  s    zTestEval.test_unary_in_arrayrN   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   rM   F)r   r9   r   r~   r   )r   rN   r   dfr   r-   r-   r.   test_float_comparison_bin_opa  s    
z%TestEval.test_float_comparison_bin_opc                 C  sl   t dddtjgi}|d}|jd}tj||t d |d}|jj	ddd}tj||t d d S )	Nr   r   rG   zx.fillna(-1)r   Zcheck_nameszx.shift(1, fill_value=-1))Z
fill_value)
r   r9   r:   r~   r   Zfillnar   r   r   shiftr   r   r   r   r-   r-   r.   test_unary_in_functioni  s    

zTestEval.test_unary_in_functionr   )z1 or 2z1 and 2za and bza or bz1 or 2 and (3 + 2) > 3z2 * x > 2 or 1 and 2z2 * df > 3 and 1 or ac           	      C  sz   t jdddd  }}}tt jdd}d}tjt|d  tj	|||d W d    n1 sl0    Y  d S )NrD   r   rG   r   rD   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notrv   rz   )
r9   rH   rI   rJ   r   r%   r{   r|   r}   r~   )	r   r   r,   r5   r   r   r   r   r   r-   r-   r.   test_disallow_scalar_bool_opsw  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 )NrG   r   rz   g      ?F)rG   )	r}   r~   r   r	   r9   r   r   r   shape)r   r,   r5   r   r   r-   r-   r.   test_identical  s2    zTestEval.test_identicalc                 C  s$   d}t j|||d}|dks J d S )Nz1 + 2 *         5 - 1 + 2 rz      )r}   r~   )r   r,   r5   expr   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.006rz   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > rG   rD   r   A == )
r}   r~   r9   rU   r   queryemptylocr   r   )	r   r,   r5   r   r   r   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 queryrv   z
class == 0lambdazlambda == 0)r   r%   r{   SyntaxErrorr   indexnamer   r   r   r-   r-   r.   test_disallow_python_keywords  s    (z&TestEval.test_disallow_python_keywordsc                 C  sj   t jttddF tddks$J tddks6J tddksHJ W d    n1 s\0    Y  d S )	NF)r   znot Truer   z	not Falser   zTrue and not Truer   )r   Zmaybe_produces_warningr   r   r}   r~   )r   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~   r7   rw   r   )r   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_SYMSr   CMP_OPS_SYMSr   r   r   sortedsetr   
differencer   r   r   r   r)   skip_if_windowsr   r   r   r   r   r   r   r9   rH   rI   rJ   r   r   r   r   r   r   float32rU   r   r   r   r   r   r   r  r  r
  r-   r-   r-   r.   rf      sz   
"
3
 

-/


!
rf   c                   @  sN   e Zd Zejdg dejdejejgejdddgdd Z	d	S )
TestTypeCastingr   )+-*r   /rc   
left_right)r   3)r  r   c                 C  sz   t tjdd|d}|\}}| d| d| }	tj|	||d}
|jj|ksVJ |
jj|ksfJ t	
|
t|	 d S )NrD   rA   r   rM    rz   )r   r9   rH   rI   rJ   r}   r~   r   rN   r   r   )r   r,   r5   r   rc   r  r   leftrightrb   r   r-   r-   r.   test_binop_typecasting  s    z&TestTypeCasting.test_binop_typecastingN)
r  r  r  r%   r'   r  r9   r  rU   r!  r-   r-   r-   r.   r    s   r  c                  G  s4   t ttd|  }ttjdd | D }|o2|S )NZis_monotonic_increasingc                 s  s   | ]}t |jjtjV  qd S r1   )
issubclassrN   typer9   Z
datetime64r   r-   r-   r.   r/     rT   zshould_warn.<locals>.<genexpr>)anymapoperator
attrgetterr   xor)argsZ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j	deej	deej	ded	d
 Z
ej	deej	dedd Zejdej	deej	deej	deej	dedd Zejdej	dddgej	deej	dedd Zej	dddgej	deeddgddgdg ejddd Zejdej	deej	deej	dddgej	dd d!gd"d# Zejdej	deej	deej	deej	ded$d% Zd&d' Zd(S ))TestAlignment)rX   rb   rc   rb   c                 C  s>   d}t tjdd}tj|||d}t||d  d S )Nzdf * ~2rD   r  rz   )	r   r9   rH   rI   rJ   r}   r~   r   r   )r   r,   r5   rb   r   r   r-   r-   r.   test_align_nested_unary_op
  s    z(TestAlignment.test_align_nested_unary_opzalways::RuntimeWarninglr_idx_typerr_idx_type
c_idx_typec           
      C  s   t tjdd|| d|| dd}t tjdd|| d|| dd}t|j|jrtt	  t
jd||d}	W d    q1 s0    Y  nt
jd||d}	t|	||  d S )	NrD   rE   rE   rE   r  r  )   rE   r3  zdf + df2rz   r   r9   rH   rI   rJ   r*  r  r   r   RuntimeWarningr}   r~   r   )
r   r,   r5   r.  r/  r0  re   r   df2r   r-   r-   r.   test_basic_frame_alignment  s    



0z(TestAlignment.test_basic_frame_alignment
r_idx_typec           	      C  s   t tjdd|| d|| dd}tjd||d}t||dk  t tjd|j	|j
|jd}tjd||d}t|||k  d S )NrD   r1  rE   r2  df < 2rz   zdf < df3)r   r9   rH   rI   rJ   r}   r~   r   r   r   r  r  )	r   r,   r5   r8  r0  re   r   r   df3r-   r-   r.   test_frame_comparison)  s    

z#TestAlignment.test_frame_comparisonzignore::RuntimeWarningr1c1r2c2c                 C  s   t tjdd|| d|| dd}t tjdd|| d|| dd}	t tjdd|| d|| dd}
t|j|	j|
jrtt	  t
jd	||d
}W d    q1 s0    Y  nt
jd	||d
}t|||	 |
  d S )NrD   r   r   r2  )   rD   r@  r   rA   zdf + df2 + df3rz   r4  )r   r,   r5   r<  r=  r>  r?  re   r   r6  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 tjdd|| d|| dd}t||}ttjdd|d d }	t|j|	jrt	
t  tjd||d}
W d    q1 s0    Y  ntjd||d}
|dks|dkr|d	kr||	n||	 }n||	 }t	|
| d S )
NrD   r1  rE   r2  rA   df + srz   rc   r!   )r   r9   rH   rI   rJ   getattrr   r*  r  r   r   r5  r}   r~   addr   )r   r,   r5   rB  r8  r0  re   r   r  rb   r   r   r-   r-   r.   !test_basic_frame_series_alignment\  s    


 0z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_typerX   )rc   rc   c              
   C  s\  |dkr`|dv r`|dkr`|dkr`|dkr`d| d| d| d	| d
| 
}| tjj|dd ttjdd|| d|| dd}	t	|	|}
t
tjdd|
d d }t|j|	jrtt  tjd||d}W d    n1 s0    Y  ntjd||d}|dks&|dkrD|dkr:|	|n||	 }n||	 }t|| d S )Nr!   )r   rq   r  rX   rb   z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r#   strictrD   )rE      rE   rH  r2  rA   zs + dfrz   rc   )r   r%   r'   r   r   r9   rH   rI   rJ   rD  r   r*  r  r   r   r5  r}   r~   rE  r   )r   r4   r,   r5   rB  r8  r0  re   r#   r   r  rb   r   r   r-   r-   r.   !test_basic_series_frame_alignmentw  sH    



 0z/TestAlignment.test_basic_series_frame_alignmentr   r  r  c                 C  s@  t tjdd|| d|| dd}t||}	ttjd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	|| d S )NrD   r1  rE   r2  rA   zs z dfzdf z srz   rc   r!   )r   r9   rH   rI   rJ   rD  r   r*  r  r   r   r5  r}   r~   r   )r   r,   r5   rB  r   r8  r0  re   r   r  rb   r;   r=   r   r   r-   r-   r.   test_series_frame_commutativity  s&    


 .0
z-TestAlignment.test_series_frame_commutativityc                 C  s  d}d}	d|	 }
t tjd|	|f|| |	|| |d}t tjd|
|f|| |
|| |d}|j}ttjd||d | }|dks|dkr|dkr||}q|| }n|| }|dks|dkr|dkr||}n|| }n|| }t|j	|j	|j	rTt
t  tjd||d}W d    n1 sH0    Y  ntjd||d}|j|jksvJ t
|| d S )	Nr   rA   rD   r2  rc   r!   zdf2 + ser + dfrz   )r   r9   rH   rI   rJ   r  r   rE  r*  r  r   r   r5  r}   r~   r   r   )r   r,   r5   r<  r=  r>  r?  re   rR   m1m2r   r6  r  serZ	expected2r   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}|dkr:t}nd}t|  t	j
d||d W d    n1 sn0    Y  ttjdd}td  t	j
d||d W d    n1 s0    Y  t tjdd	}ttjdd}td  t	j
d||d W d    n1 s&0    Y  t tjdd
}ttjdd}|dk}|spt}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 )NrD   )  rE   '  r!   FrC  rz   rO  )rE   rP  r1  rq   rG   r   z_Alignment difference on axis 1 is larger than an order of magnitude on term 'df', by more than z.4gz; performance may suffer.)r   r9   rH   rI   rJ   r   r   r   r   r}   r~   lenr7   messagelog10r   r   )r   r,   r5   r   rb   seenZis_python_engineZwrnwr   Zloggedr   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'   filterwarningsr  r7  r;  rA  rF  listr   rI  rJ  rN  rV  r-   r-   r-   r.   r+    sT   




#

+r+  c                
   @  sB  e Zd Zdd Zdd Zejdddgejdddgejd	ej	d
d Z
ejdddgejdddgejd	ej	dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zejjd0d1d2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%ejdBdCdDdCdEge&'g dFgdGdH Z(ejdBg dIdJdK Z)ejdLdCdDdCdEge&'g dFdCdEigdMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0ejd[g d\d]d^ Z1ejd_d`dagdbdc Z2ddS )eTestOperationsc                 O  s$   | ddd |d< tj|i |S Nlevelr   rG   popr}   r~   r   r)  kwargsr-   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 )Nrq   r   r   c                   s   g | ]}| vr|qS r-   r-   r+   r   Zexclude_arithr-   r.   rY   *  s   z8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s   | ]}|d kr|V  qdS )z//Nr-   r`  r-   r-   r.   r/   0  rT   z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)r   z&argument of type 'int' is not iterablerv   rz   rG   r   r   )	r   r   r  r%   r{   r   r}   r~   r@   )r   r,   r5   Z	arith_opsopsr   r   r   r   r   expecr   yr-   ra  r.   test_simple_arith_ops%  s0    


0z$TestOperations.test_simple_arith_opsr=   TFr;   r   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  rq   rr   ru   rv   r5   r%   r{   r|   r~   r   r=   r;   r   r   r   r   r   r-   r-   r.   test_simple_bool_opsH  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 rf  rg  rh  r-   r-   r.   test_bool_ops_with_constantsX  s    (
z+TestOperations.test_bool_ops_with_constantsc                 C  sr   t jdd}tt jdd}d}tjt|d$ | jd||dd W d    n1 sd0    Y  d S )	NrD   )r   r@  rA      rE   z?N-dimensional objects, where N > 2, are not supported with evalrv   x + yr   rd  r   )	r9   rH   rI   rJ   r   r%   r{   r|   r~   )r   r   rd  r   r-   r-   r.   test_4d_ndarray_failsh  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1rG   )r~   )r   r   r-   r-   r.   test_constanto  s    
zTestOperations.test_constantc                 C  s8   t tjdd}| jdd|id}t|| d S )NrD   rE   rD   r   rn  r   r9   rH   rI   rJ   r~   r   r   )r   r   r6  r-   r-   r.   test_single_variables  s    z#TestOperations.test_single_variablec                 C  sR   t tjdd}tjtdd | d W d    n1 sD0    Y  d S )NrD   r  name 'x' is not definedrv   zdf[x > 2] > 2)	r   r9   rH   rI   rJ   r%   r{   	NameErrorr~   r   r   r-   r-   r.   &test_failing_subscript_with_name_errorx  s    z5TestOperations.test_failing_subscript_with_name_errorc                 C  sH   t tjdd}| jdd|id}|d |dk }t|| d S )NrD   r  z(df + 1)[df > 2]r   rn  rG   rs  r   r-   r-   r.   test_lhs_expression_subscript}  s    z,TestOperations.test_lhs_expression_subscriptc                 C  s   t tjddtdd}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t	||	D ]"\}
}t
|| j|
d	|id
 qd S )NrD   r  abcr   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   r   rn  )r   r9   rH   rI   rJ   rX  r   r   r>   zipr   r   r~   )r   r   expr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3ZexprsZexpecsr?   rc  r-   r-   r.   test_attr_expression  s    

z#TestOperations.test_attr_expressionc                 C  s   t tjddtdd}t tjdd}d}d}tjt|d$ | j	|||dd	 W d    n1 st0    Y  d S )
NrD   r  rz  r   zdf = df2%cannot assign without a target objectrv   )r   r6  rn  )
r   r9   rH   rI   rJ   rX  r%   r{   r6   r~   )r   r   r6  r|  r   r-   r-   r.   test_assignment_fails  s    z$TestOperations.test_assignment_failsc                 C  sZ   t tjddtdd}tjtdd |	d W d    n1 sL0    Y  d S )NrD   r   abr   invalid syntaxrv   zd c = a + b
r   r9   rH   rI   rJ   rX  r%   r{   r  r~   rw  r-   r-   r.   %test_assignment_column_multiple_raise  s
    z4TestOperations.test_assignment_column_multiple_raisec                 C  s^   t tjddtdd}d}tjt|d |	d W d    n1 sP0    Y  d S )NrD   r   r  r   z5left hand side of an assignment must be a single namerv   zd,c = a + br  r  r-   r-   r.   %test_assignment_column_invalid_assign  s    z4TestOperations.test_assignment_column_invalid_assignc                 C  s^   t tjddtdd}d}tjt|d |	d W d    n1 sP0    Y  d S )NrD   r   r  r   zcannot assign to function callrv   zTimestamp("20131001") = a + br  r  r-   r-   r.   3test_assignment_column_invalid_assign_function_call  s    zBTestOperations.test_assignment_column_invalid_assign_function_callc                 C  sX   t tjddtdd}| }|d |d  |d< |jddd	 t	|| d S )
NrD   r   r  r   r   r   	a = a + bTinplace
r   r9   rH   rI   rJ   rX  copyr~   r   r   r   r   r   r-   r-   r.   &test_assignment_single_assign_existing  s    z5TestOperations.test_assignment_single_assign_existingc                 C  sX   t tjddtdd}| }|d |d  |d< |jdd	d
 t	|| d S )NrD   r   r  r   r   r   r>   	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 )NrD   r   r  r   rG   z	a = 1 + bTr  r   r   r  )r   r   r   r   r-   r-   r.   +test_assignment_single_assign_local_overlap  s    z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sh   t tjddtdd}d}|j }|jddd ||j	 }t
j||jd	d
 |jd u sdJ d S )NrD   r   r  r   rG   r  Tr  Fr   )r   r9   rH   rI   rJ   rX  r   r  r~   r   r   r   r  )r   r   r   Zold_ar   r-   r-   r.   "test_assignment_single_assign_name  s    

z1TestOperations.test_assignment_single_assign_namec                 C  sl   t tjddtdd}|jddd d}tjt	|d	 |d
 W d    n1 s^0    Y  d S )NrD   r   r  r   r  Tr  z#can only assign a single expressionrv   z	c = a = b)
r   r9   rH   rI   rJ   rX  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 )NrD   r   r  r   zc = df.a + df.br   T)r   targetr  r   r   r>   
r   r9   rH   rI   rJ   rX  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   r   r-   r-   r.   test_column_in  s    

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r"   c                 C  sd   t tjddtdd}|jddd}|d us8J | }|d |d	  |d
< t	|| d S )NrD   r   r  r   r  Fr  r   r   r>   r  )r   r   actualr   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rG   rD   r   r@  rA   rk  r  r   r   r>   d$
        c = a + b
        d = c + bTr  rG   rD   r?   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrv   z(
            a = b + 2
            b - 2F)r   r  r~   r   r   r%   r{   r6   )r   warn_copy_on_writer   r   answerr   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   r>   r  r  Fr  rG   rD   r?   r  r   r  r~   r   r   r  r-   r-   r.   &test_multi_line_expression_not_inplace1  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  rH  r   r>   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr  r  )r   r   r   Z	local_varr  r-   r-   r.   )test_multi_line_expression_local_variableJ  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 r1   r-   r  r-   r-   r.   
local_func`  s    zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr   rG   rH  r>   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr  r  r   r   r  r   r  r-   r-   r.   2test_multi_line_expression_callable_local_variable\  s    zATestOperations.test_multi_line_expression_callable_local_variablec                 C  s   t g dg dd}dd }| }|d |ddd	 |d
< |d
 |ddd	 |d< |jddd}t|| |d u s|J d S )Nr  r  r  c                 S  s   |S r1   r-   r  r-   r-   r.   r  t  s    zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   rH  rG   )r   r   r>   r  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Tr  r  r  r-   r-   r.   >test_multi_line_expression_callable_local_variable_with_kwargsp  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  r~  rv   za = 1)r   r  r%   r{   r6   r   r   r   )r   r   Zdf_origr   r-   r-   r.   test_assignment_in_query  s    (z'TestOperations.test_assignment_in_queryc                 C  st   t g dg dd}| }||d dk }|jddd t|| i }dd	i}| jd
|dd t|| d S )Nr  r  r  r   rD   za == 2Tr  r   	a = 1 + 2r  r  )r   r  r   r   r   r~   Zassert_dict_equalr  r-   r-   r.   test_query_inplace  s    z!TestOperations.test_query_inplaceinvalid_targetrG   catrD   rG   r   c                 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  rv   Tr  r  F)r%   r{   r6   r~   hasattrr   r  r   
expressionr-   r-   r.   test_cannot_item_assign  s    .
z&TestOperations.test_cannot_item_assign)rG   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  rv   Fr  )r%   r{   r6   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 assignmentrv   T)r~   r%   r{   r6   )r   r  r  r   r-   r-   r.   test_inplace_no_assignment  s
    z)TestOperations.test_inplace_no_assignmentc                 C  sb   t tjddtddddd}|dk }| jdd|id	}|dk }t|| t|| d S )
NrD   rD   rD   r\   r_   r`   r^   r   r9  r   rn  	r   r9   rH   rI   rJ   r   r~   r   r   )r   r   r?   rr   r-   r-   r.   *test_basic_period_index_boolean_expression  s    z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sR   t tjddtddddd}| jdd|id	}||d
k  }t|| d S )NrD   r  r\   r_   r  r   zdf[df < 2 + 3]r   rn  rA   r  r   r   r  r?   r-   r-   r.   ,test_basic_period_index_subscript_expression  s    z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sb   t tjddtddddd}| jdd|id	}|||dk  dk  |d  }t|| d S )
NrD   r  r\   r_   r  r   zdf[df[df < 2] < 2] + df * 2r   rn  r  r  r-   r-   r.   -test_nested_period_index_subscript_expression  s    z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sZ   t tjdd}tddd|d< | jdd|i||d	}|jd
k }tj	||dd d S )NrD   r  z1/1/2012rA   r]   dates1zdf.dates1 < 20130101r   r   Z20130101Fr   )
r   r9   rH   rI   rJ   r   r~   r  r   r   )r   r,   r5   r   r   rc  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 )Nrq   z1 in [1, 2]rz   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 implementedrv   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))r}   r~   r%   r{   r|   )r   r,   r5   r   r   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 )NrG   z * Z!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarz   )r   r}   r~   )r   r,   r5   r   r   r   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rtd}d|v r.d}tjt|d& tj	|d|i||d	 W d    q1 sh0    Y  ntj	|d|i||d	 d S )
NrD   r  rq   ru   not'Not' nodes are not implementedrv   r   )r   r5   r,   
r   r9   rH   rI   rJ   r%   r{   r|   r}   r~   )r   r   r,   r5   r   r   r-   r-   r.   test_fails_and_or_not  s$    	&z$TestOperations.test_fails_and_or_notcharr   r   c                 C  s   t tjdd}d| d}|dkrnd}tjt|d  tj	|||d W d    q~1 sb0    Y  ntj	|||d d S )	NrD   r  z(df + 2)[df > 1] > 0 z	 (df > 0)rq   z$cannot evaluate scalar only bool opsrv   r   r  )r   r  r,   r5   r   r   r   r-   r-   r.   test_fails_ampersand_pipe8  s    0z(TestOperations.test_fails_ampersand_pipeN)3r  r  r  r~   re  r%   r'   r  r   r  ri  rj  ro  rq  rt  rx  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r9   r   r  r  r  r  r  r  r  r  r  r  r  r-   r-   r-   r.   rY     sn   #
	



	
%	 

&
			/
rY  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|i |S rZ  r\  r^  r-   r-   r.   r~   F  s    zTestMath.evalz&Unary ops only implemented for numexprr"   fnc                 C  s   t dtjddi}|j}| d}| |}tjdd tt||}W d    n1 sd0    Y  t	j
||dd d S )	Nr   rD   rE   z(a)ignoreallFr   )r   r9   rH   rI   rJ   r   r~   errstaterD  r   r   )r   r  r   r   r   gotr   r-   r-   r.   test_unary_functionsJ  s    

,zTestMath.test_unary_functionsc                 C  s   t tjddtjddd}|j}|j}| d}| |}tjdd  t	t|||}W d    n1 s|0    Y  t
j||dd d S )	NrD   rE   r  z(a, b)r  r  Fr   )r   r9   rH   rI   rJ   r   r   r~   r  rD  r   r   )r   r  r   r   r   r   r  r   r-   r-   r.   test_binary_functionsX  s    

.zTestMath.test_binary_functionsc                 C  sl   t tjddtjddd}|jd||dd |j}tt|j	|j
}tj||dd d S )	NrD   rE   r  ze = arctan2(sin(a), b)Tr,   r5   r  Fr   )r   r9   rH   rI   rJ   r~   r?   Zarctan2sinr   r   r   r   r   r,   r5   r   r  r   r-   r-   r.   test_df_use_casei  s    zTestMath.test_df_use_casec                 C  sh   t tjddtjddd}|jd||dd |j}t|j|j	 }t
j||dd d S )	NrD   rE   r  ze = sin(a + b)Tr  Fr   )r   r9   rH   rI   rJ   r~   r?   r  r   r   r   r   r  r-   r-   r.    test_df_arithmetic_subexpressionz  s    z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper$   c                 C  s   t dtjdd|i}|jj|ks0J |jd||dd |j	}t
|j}|j|jksdJ ||jksrJ tj||dd d S )	Nr   rD   rE   z
b = sin(a)Tr  Fr   )r   r9   rH   rI   rJ   r   r   rN   r~   r   r  r   r   )r   rN   Zexpect_dtyper,   r5   r   r  r   r-   r-   r.   test_result_types  s    zTestMath.test_result_typesc                 C  s`   t dtjddi}d}tjt|d  |jd||d W d    n1 sR0    Y  d S )Nr   rD   rE   z#"mysin" is not a supported functionrv   zmysin(a)rz   )	r   r9   rH   rI   rJ   r%   r{   r6   r~   r   r,   r5   r   r   r-   r-   r.   test_undefined_func  s    zTestMath.test_undefined_funcc                 C  s`   t dtjddi}d}tjt|d  |jd||d W d    n1 sR0    Y  d S )Nr   rD   rE   z1Function "sin" does not support keyword argumentsrv   zsin(x=a)rz   )	r   r9   rH   rI   rJ   r%   r{   r   r~   r  r-   r-   r.   test_keyword_arg  s    zTestMath.test_keyword_argN)r  r  r  r~   r%   r'   r(   r   r  r   r  r   r  r  r  r9   Zint32rU   rP   r  r&   Z
complex128r)   r  r  r  r  r-   r-   r-   r.   r  E  s,   







r  rD   rE   c                   @  s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	TestScopec                 C  s$   d}t td tj|||d d S )N
_var_s * 2rD   rz   )r   r   _var_sr}   r~   )r   r,   r5   r?   r-   r-   r.   test_global_scope  s    zTestScope.test_global_scopec                 C  sD   d}t   }tjd|||d t   }|d ||ks@J d S )NrG   x + 1r   lcls)localsr  r}   r~   r]  )r   r,   r5   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 )NrG   r  rz   )globalsr  r}   r~   )r   r,   r5   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 )NrG   ru  rv   r  r   r%   r{   r   r}   r~   )r   r,   r5   r   r   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  rv   )r,   r5   Zglobal_dictr  )r   r,   r5   r   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    s
   r  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' passedrv   rl  rG   rD   rm  asdf)r   r,   r%   r{   KeyErrorr}   r~   r   r-   r-   r.   test_invalid_engine  s    r  )use_numexprr   ))Tr!   )Frq   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  r   r  r   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)rG   rD   r   r@  rA   rk  )r   Bz
A.isnull()rA   rk  r@  )r  )r}   r  r   r   r   r   )r   r   r   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' passedrv   rl  rG   rD   rm  r  )r   r5   r  r  r-   r-   r.   test_invalid_parser  s    r  )rq   r   r   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 implementedrv   )r  Zunsupported_nodesr%   r{   r|   rD  )r,   r5   ZVisitorClassinstrb  r   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 +r  rv   rz   r%   r{   r  r}   r~   )r,   r5   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 definedrv   rz   )r%   r{   rv  r}   r~   )r,   r5   r?   r   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rG   rD   r   zThe '@' prefix is onlyrv   rz   zThe '@' prefix is notr  )r,   r5   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 .+rv   zsin + dotted_linerz   )r%   r{   r   r}   r~   )r,   r5   r  Zdotted_liner   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 .+rv   r  )	resolversr,   r5   )r%   r{   r   r}   r~   )r,   r5   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 stringrv    rz   r%   r{   r6   r}   r~   rz   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 allowedrv   z1 + 1; 2 + 2rz   r  rz   r-   r-   r.   $test_more_than_one_expression_raisesF  s    r  cmprr   r=   c              	   C  s   t dd ttjdji}||   }||   } ||  }d| d| d}d| d| d}d| d	| d
}	|||	fD ]F}
d}tjt|d  t	j
|
||d W d    qx1 s0    Y  qxd S )Nc                   S  s   t jddS )NrD   rE   )r9   rH   rI   r   r-   r-   r-   r.   rS   P  rT   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rD   r   r   r   r   rx   r   ry   r   rv   rz   )intrB   r9   rH   rI   rJ   r%   r{   r|   r}   r~   )r;   r  r=   r,   r5   genr   r   r   r   r   r   r-   r-   r.   test_bool_ops_fails_on_scalarsK  s    


r	  otherz'x'z...c                 C  sN   t dg ditd}|d|  }tg ddd}tr>d |_t|| d S )Nr   )r   r   r>   rM   r   )FFFr  )r   objectr~   r   r   r  r   r   )r
  r   r   r   r-   r-   r.   test_equals_variousa  s    r  c                 C  s*   d}t j}tj|| |d}||ks&J d S )Nzinf + 1rz   )r9   infr}   r~   )r,   r5   rb   r   r   r-   r-   r.   test_infs  s    r  columnu	   Temp(°C)u   Capacitance(μF)c                 C  sX   t tjdd|dgd}||| dk }d| d}|j|| d}t|| d S )	NrD   r   r   r   rA   `z` > 5)r,   )r   r9   rH   rI   rJ   r   r   r   )r,   r  r   r   Zquery_stringr   r-   r-   r.   test_query_tokenz  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   rE   rG   r3  r  countr   z
~(cat > 0)rz   rq   r  rv   znot (cat > 0))r   r  r   r   r   r%   r{   r|   )r,   r5   r   r   r   r   r-   r-   r.   test_negate_lt_eq_le  s    0r  c                 C  sx   |dv r$|  tjjtd| d ttjdj	dddd|d	gd
}||| dk }|
| d}t|| d S )N)TrueFalser  ZInfz+GH 47859 DataFrame eval not supported with )r{   r#   rD   r   d   rr  r   Zcol1r   rk  z>6)r   r%   r'   r   r  r   r9   rH   rI   r   r   r   r   )r4   r  r   r   r   r-   r-   r.    test_eval_no_support_column_name  s    r  c                 C  s   t g dg dg dd}|d d  }|d }t| |jddd W d    n1 s^0    Y  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  )rH     	   )r   r  Cr   z	A = B + CTr  )r        r  )r   r   Zassert_cow_warningr~   r   r   r   )Zusing_copy_on_writer  r   Zresult_viewrM  r   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valuerG   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 typerv   z2+2r  r  )r   r   r   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&  numpyr9   r%   Zpandas.compatr   Zpandas.errorsr   r   r   Zpandas.util._test_decoratorsutilZ_test_decoratorsr)   Zpandas.core.dtypes.commonr	   r
   r   r   r   r}   r   r   r   r   r   r   Zpandas._testingZ_testingr   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PARSERSr5   r@   rX  r[   r;   r=   r   re   rf   r  r*  r+  rY  r  rH   rI   rJ   r  r  r*   r  r'   r  r  r  r  ZPyTablesExprVisitorr  __annotations__r  r  r  r  r  r  r  r  r  rB   r	  r  r  r  r  keysr  r  r  r-   r-   r-   r.   <module>   s    




    i      )k%
	






