a
    <b                    @  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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!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-m.Z.m/Z/m0Z0m1Z1m2Z2 e
j3dd e!D ddd Z4e
j3e&j5ddd Z6dd Z7e
j3e7 ddd Z8dd Z9dd Z:dd Z;dd Z<d d! Z=d"d# Z>e?e@e.Ae/ZBe
j3eCeDd$g d%d&d'd( ZEeEZFeEZGG d)d* d*ZHd+d, ZIG d-d. d.ZJd/d0 ZKd1d2 ZLG d3d4 d4ZMG d5d6 d6ZNG d7d8 d8ZOe	jPQd9ZRG d:d; d;ZSejTd<d= ZUejTe
jVWd>d?d@dA ZXejTdBdC ZYejTdDdE ZZe)ej[e(dFZ\dGe]dH< e
jVWde!e
jVWde\dIdJ Z^dKdL Z_dMdN Z`e
jVWdOg dPdQdR ZadSdT ZbdUdV ZcdWdX ZddYdZ Zee
jVWd[d\e
jVWd(efegfe
jVWd]efegfd^d_ Zhe
jVWd`dadbgdcdd Zidedf Zjdgdh Zke
jVWdidjdkgdldm Zldndo ZmG dpdq dqZndS )r    )annotations)reduce)productN)PerformanceWarning)is_boolis_floatis_list_like	is_scalar)	DataFrameSeries
date_range)pytables)ENGINESNumExprClobberingError)BaseExprVisitorPandasExprVisitorPythonExprVisitor)NUMEXPR_INSTALLEDUSE_NUMEXPR)ARITH_OPS_SYMSSPECIAL_CASE_ARITH_OPS_SYMS_binary_math_ops_binary_ops_dict_unary_math_opsc              	   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%   r/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/pandas/tests/computation/test_eval.py	<genexpr>5   s   r'   )paramsc                 C  s   | j S Nr   requestr%   r%   r&   r$   4   s    r$   c                 C  s   | j S r)   r*   r+   r%   r%   r&   parserH   s    r-   c                   C  s   t rttS g S r)   )r   listr   r%   r%   r%   r&   _get_unary_fns_for_neM   s    r/   c                 C  s   | j S r)   r*   r+   r%   r%   r&   unary_fns_for_neQ   s    r0   c                 C  s
   t |  jS r)   )r   Zhas_neg_fracr$   r%   r%   r&   engine_has_neg_fracV   s    r2   c              
   C  sn   t | }t|rdz|| |W S  tyb } z.t|drLtjW  Y d }~S  W Y d }~n
d }~0 0 || |S )Nz6negative number cannot be raised to a fractional power)r   r2   
ValueErrorstr
startswithnpnan)lhscmp1rhsr$   cer%   r%   r&   _eval_single_binZ   s    r=   c                 C  s@   t | tr t |tjr |jdkp>t |to>t | tjo>| jdkS )N   )
isinstancer   r6   ndarrayndimr8   r:   r%   r%   r&   _series_and_2d_ndarrayh   s    rC   c                 C  s(   t | trt |tp&t |to&t | tS r)   )r?   r   r
   rB   r%   r%   r&   _series_and_framen   s    rD   c                 C  s   t | tot |tjjjS r)   )r?   boolpdcoreZgenericZNDFramerB   r%   r%   r&   _bool_and_framet   s    rH   c                 C  s   t |ttjfot| S r)   )r?   complexr6   Zcomplexfloatingisnan)resultexpectedr%   r%   r&   _is_py3_complex_incompatx   s    rM      )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
   rN         ?r>      )r
   r6   randomrandr7   randnr   r   )r,   Znan_df1optsr%   r%   r&   r8      s    r8   c                
   @  sN  e Zd Zejdddd Zedd Zed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dd Zdd  Zd!d" Zej
d#ed$d% Zd&d' Zd(d) Zd*d+ Zejd,d- Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!d6d7 Z"d8d9 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@dA Z*ej
d:e+e%j&'d;e+e%j&j(d;d;d>e+e%j&)d;d?kgdBdC Z,dDdE Z-dFdG Z.ej
dHe%j/e%j0gdIdJ Z1dKdL Z2dMdN Z3dOdP Z4dQdR Z5dSdT Z6dUS )VTestEvalTZautousec                 C  s   || _ || _d S r)   r$   r-   selfr$   r-   r%   r%   r&   set_engine_parser_attrs   s    z TestEval.set_engine_parser_attrsc                 C  s   dd l }|| _d S )Nr   )r   ne)clsr^   r%   r%   r&   setup_class   s    zTestEval.setup_classc                   s    fddt D S )Nc                 3  s   | ]}| j kr|V  qd S r)   r1   r"   r\   r%   r&   r'          z+TestEval.current_engines.<locals>.<genexpr>)r   ra   r%   ra   r&   current_engines   s    zTestEval.current_enginesr9   )z!=z==z<=z>=<>)r^   eqlegeltgt)rP   cmp2re   rd   rj   ri   binopc                 C  s   | j dkrt|dv rtd}tjt|d< d| d| d| d}tj|| j| j d	}W d    n1 sf0    Y  d S t|||| j}	t|||| j}
t|	||
| j}d| d| d| d}tj|| j| j d	}| || d S )
Npythonandor"'BoolOp' nodes are not implementedmatch(lhs z rhs) z (lhs  rhs)rZ   )	r-   r   raisesNotImplementedErrorrF   evalr$   r=   check_equal)r\   r9   rk   rl   r8   r:   msgexrK   lhs_newrhs_newrL   r%   r%   r&   test_complex_cmp_ops   s    2zTestEval.test_complex_cmp_opscmp_opc                 C  sx   |dk }|dk }| j dkrf|dv rfd}tjt|d | ||| W d    n1 sX0    Y  d S | ||| d S )Nr   rm   innot in&'(In|NotIn)' nodes are not implementedrr   )r-   r   rv   rw   check_simple_cmp_op)r\   r   r8   r:   rz   r%   r%   r&   test_simple_cmp_ops   s    ,zTestEval.test_simple_cmp_opsopc                 C  s   | j dkrV|dv rVd}tjt|d | ||| W d    n1 sH0    Y  d S t|rt|s|dv r| jdkr| j dkrtjjdd}|j	
| | ||| d S )Nrm   r   r   rr   pandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   )r-   r   rv   rw   check_compound_invert_opr   r$   r   xfailnodeZ
add_marker)r\   r   r8   r:   r,   rz   r   r%   r%   r&   test_compound_invert_op   s(    ,z TestEval.test_compound_invert_opc                 C  s   |  ||||| d S r)   )check_chained_cmp_op)r\   r9   rk   r8   midhsr:   r%   r%   r&   test_chained_cmp_op   s    zTestEval.test_chained_cmp_opc                 C  sZ   t |trt|| n>t |tr0t|| n&t |tjrJt|| n||ksVJ d S r)   )	r?   r
   tmassert_frame_equalr   assert_series_equalr6   r@   assert_numpy_array_equalr\   rK   rL   r%   r%   r&   ry      s    

zTestEval.check_equalc                 C  s  | j dkrfd| d| d}d}tjt|d$ tj|| j| j d W d    n1 sX0    Y  d S t|||| j}t|||| j}	|d ur|	d urd| d| d}d| d| d}
d	| d
| d}t|d|	| j}||
|fD ]$}tj|| j| j d}t	|| qd S )Nrm   lhs  mid  rhsrq   rr   rZ    mid and mid rt    mid) & (mid ru   &)
r-   r   rv   rw   rF   rx   r$   r=   r   assert_almost_equal)r\   r8   r9   midrk   r:   ex1rz   r|   r}   ex2ex3rL   r{   rK   r%   r%   r&   r      s     
2zTestEval.check_chained_cmp_opc                 C  s   d| d}d ddg}|dv rvt|svtjt|d, tj|| j| j||dd	 W d    q1 sj0    Y  n0t	|||| j}tj|| j| jd
}| 
|| d S )Nr   r   |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 iterabler   rr   rB   r$   r-   
local_dictrZ   )joinr   r   rv   	TypeErrorrF   rx   r$   r-   r=   ry   )r\   r8   r9   r:   r{   rz   rL   rK   r%   r%   r&   r     s"    &zTestEval.check_simple_cmp_oparith1c                 C  s   d| d}t j|| j| jd}t|||| j}t|| d| d| d}t j|| j| jd}t|||| j}| |||| d S )Nr   r   rZ   z rhs )rF   rx   r$   r-   r=   r   r   check_alignment)r\   r   r8   r:   r{   rK   rL   nlhsr%   r%   r&   test_binary_arith_ops"  s    zTestEval.test_binary_arith_opsc              
   C  sz   z| |\}}W n tttfy*   Y nL0 | jdkrZ| jd| d}t|j	| nt
d| d}t|| d S )Nr   znlhs z ghs)Zalignr3   r   AttributeErrorr$   r^   evaluater   r   valuesrx   )r\   rK   r   Zghsr   rL   r%   r%   r&   r   .  s    
zTestEval.check_alignmentc                 C  s   d}t j|| j| jd}|| }t|| | jdkrr| jd}t|t	t
fr`t|j| qt||  nt|d|| j}t|| d S )Nz	lhs % rhsrZ   r   zexpected % rhs%)rF   rx   r$   r-   r   r   r^   r   r?   r
   r   r   itemr=   )r\   r8   r:   r{   rK   rL   r%   r%   r&   test_modulusD  s    
zTestEval.test_modulusc                 C  s   d}| j dkr8tj|| j | jd}|| }| || nNd}tjt|d, tj|||d| j | jd W d    n1 s|0    Y  d S )Nz
lhs // rhsrm   rZ   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'rr   rB   r   r$   r-   )r$   rF   rx   r-   ry   r   rv   r   )r\   r8   r:   r{   resrL   rz   r%   r%   r&   test_floor_divisionT  s    
zTestEval.test_floor_divisionc                 C  s   d}t |d|| j}tj|| j| jd}t|rt|rt||rd}tjt	|d t
|| W d    q1 sv0    Y  nPt
|| d}tj|| j| jd}t |d|| j}t |d|| j}t
|| d S )Nz
lhs ** rhs**rZ   z-(DataFrame.columns|numpy array) are differentrr   z(lhs ** rhs) ** rhs)r=   r$   rF   rx   r-   r	   rM   r   rv   AssertionErrorr   r   r   )r\   r8   r:   r{   rL   rK   rz   Zmiddler%   r%   r&   test_powh  s$    ,zTestEval.test_powc              	   C  s   z| t}W n" ty0   tt|g}Y n0 | }tjd| j| jd}t	
|| | jD ]}t	
|tjd|| jd q^d S )Nz~elbrZ   )astyperE   r   r6   arrayrF   rx   r$   r-   r   r   rc   )r\   r8   ZelbrL   rK   r$   r%   r%   r&   check_single_invert_op  s    
zTestEval.check_single_invert_opc                 C  s  ddg}d| d}d ddg}t|r~||v r~tjt|d, tj|| j| j||d	d
 W d    n1 sr0    Y  nt|rt|rt	dd ||f\}}t
|||| j}t|r| }n| }tj|| j| jd}t|| | jD ]$}	tj|| j| jd}
t|
| qd S )Nr   r   z~(lhs ru   r   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   rB   r   c                 S  s   t | gS r)   )r6   r   xr%   r%   r&   <lambda>  rb   z3TestEval.check_compound_invert_op.<locals>.<lambda>rZ   )r   r	   r   rv   r   rF   rx   r$   r-   mapr=   r   r   rc   )r\   r8   r9   r:   Z
skip_theser{   rz   rL   rK   r$   Zevr%   r%   r&   r     s4    &
z!TestEval.check_compound_invert_opc                 C  s6  d}t tjdd}| jdkrhd}tjt|d$ tj	|| j| j
d}W d    q1 s\0    Y  nFd}tjt|d$ tj	|| j| j
d}W d    n1 s0    Y  t tjjdd	d
}| jdkrd}tjt|d$ tj	|| j| j
d}W d    n1 s0    Y  n&| }tj	|| j| j
d}t|| t tjdddk}| }tj	|| j| j
d}t|| t g dtjddkd}| jdkrtjtdd$ tj	|| j| j
d}W d    n1 s0    Y  nHd}tjt|d$ tj	|| j| j
d}W d    n1 s(0    Y  d S )N~lhsrN   rS   r   -couldn't find matching opcode for 'invert_dd'rr   rZ   0ufunc 'invert' not supported for the input typesrN   rS   size)couldn't find matching opcode for 'invertrR   ar>   g       @   )br;   unknown type object#bad operand type for unary ~: 'str')r
   r6   rT   rV   r$   r   rv   rw   rF   rx   r-   r   randintr   r   rU   r3   r\   exprr8   rz   rK   expectr%   r%   r&   test_frame_invert  s8    
4266zTestEval.test_frame_invertc                 C  s   d}t tjd}| jdkrfd}tjt|d$ tj	|| j| j
d}W d    q1 sZ0    Y  nFd}tjt|d$ tj	|| j| j
d}W d    n1 s0    Y  t tjjddd}| jdkrd	}tjt|d$ tj	|| j| j
d}W d    n1 s
0    Y  n&| }tj	|| j| j
d}t|| t tjdd
k}| }tj	|| j| j
d}t|| t g d}| jdkrtjtdd$ tj	|| j| j
d}W d    n1 s0    Y  nHd}tjt|d$ tj	|| j| j
d}W d    n1 s0    Y  d S )Nr   rN   r   r   rr   rZ   r   r   r   rR   r   r   r   )r   r6   rT   rV   r$   r   rv   rw   rF   rx   r-   r   r   r   r   rU   r3   r   r%   r%   r&   test_series_invert  s8    
4266zTestEval.test_series_invertc                 C  s  d}t tjdd}| }tj|| j| jd}t	|| t tjj
ddd}| }tj|| j| jd}t	|| t tjdddk}| jdkrd	}tjt|d
$ tj|| j| jd}W d    n1 s0    Y  n&| }tj|| j| jd}t	|| d S )N-lhsrN   rS   rZ   r   r   rR   r   *couldn't find matching opcode for 'neg_bb'rr   )r
   r6   rT   rV   rF   rx   r$   r-   r   r   r   rU   r   rv   rw   r\   r   r8   r   rK   rz   r%   r%   r&   test_frame_negate  s"    
4zTestEval.test_frame_negatec                 C  s  d}t tjd}| }tj|| j| jd}t	|| t tjj
ddd}| }tj|| j| jd}t	|| t tjddk}| jdkrd}tjt|d$ tj|| j| jd}W d    n1 s0    Y  n&| }tj|| j| jd}t	|| d S )	Nr   rN   rZ   r   rR   r   r   rr   )r   r6   rT   rV   rF   rx   r$   r-   r   r   r   rU   r   rv   rw   r   r%   r%   r&   test_series_negate)  s"    
4zTestEval.test_series_negater8   rN   rS   r   r   rR   c                 C  s,   d}|}t j|| j| jd}t|| d S Nz+lhsrZ   )rF   rx   r$   r-   r   r   r\   r8   r   r   rK   r%   r%   r&   test_frame_posC  s    zTestEval.test_frame_posc                 C  s,   d}|}t j|| j| jd}t|| d S r   )rF   rx   r$   r-   r   r   r   r%   r%   r&   test_series_posU  s    zTestEval.test_series_posc                 C  s  d}t jt|d$ tjd| j| jd W d    n1 s<0    Y  tjd| j| jddksbJ tjd| j| jdd	ks~J tjd
| j| jddksJ tjd| j| jddksJ tjd| j| jddksJ tjd| j| jddksJ tjd| j| jddksJ tjd| j| jddks*J tjd| j| jddksHJ tjd| j| jddksfJ tjd| j| jddksJ d S )Nz%bad operand type for unary ~: 'float'rr   z~1.0rZ   z-1.0r-   r$   g      z+1.0      ?z~1z-1z+1r>   z~Truez~Falsez-Truez-Falser   z+Truez+False)r   rv   r   rF   rx   r$   r-   )r\   rz   r%   r%   r&   test_scalar_unaryg  s    2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   r>   r   Fr   r   i%   ir   )r6   r   rF   rx   Zobject_r   r   r   r%   r%   r&   test_unary_in_arrayx  s    zTestEval.test_unary_in_arrayr   c                 C  s\   t dtjdg|di}|d}|jtdgks8J |d}|jtdgksXJ d S )Nr   r   r   zx < -0.1Fz-5 > x)r
   r6   r   rx   r   )r\   r   dfr   r%   r%   r&   test_float_comparison_bin_op  s
    

z%TestEval.test_float_comparison_bin_opc              	   C  s   d}|d7 }|d7 }|d7 }|d7 }t jddd  }}}tt jdd}|D ]J}d	}tjt|d
$ tj|| j	| j
d W d    qR1 s0    Y  qRd S )N)z1 or 2z1 and 2)za and bza or b)z1 or 2 and (3 + 2) > 3)z2 * x > 2 or 1 and 2)z2 * df > 3 and 1 or ar   r>   rS   ;cannot evaluate scalar only bool ops|'BoolOp' nodes are notrr   rZ   )r6   rT   rV   r
   r   rv   rw   rF   rx   r$   r-   )r\   exprsr   r   r   r   r{   rz   r%   r%   r&   test_disallow_scalar_bool_ops  s    z&TestEval.test_disallow_scalar_bool_opsc                 C  sf  d}t jd| j| jd}|dks$J t|s0J d}t jd| j| jd}|dksTJ t|s`J d}t jd| j| jd}|rJ t|sJ t|sJ tdg}t jd| j| jd}t	|tdg |j
dksJ tdg}t jd| j| jd}t	|tdg |j
dksJ tdg}t jd| j| jd}t	|tdg |j
dksbJ d S )Nr>   r   rZ   g      ?F)r>   )rF   rx   r$   r-   r	   r   r6   r   r   r   shape)r\   r   rK   r%   r%   r&   test_identical  s2    zTestEval.test_identicalc                 C  s(   d}t j|| j| jd}|dks$J d S )Nz1 + 2 *         5 - 1 + 2 rZ      )rF   rx   r$   r-   )r\   exprK   r%   r%   r&   test_line_continuation  s    zTestEval.test_line_continuationc                 C  s   d}t j|| j| jd}t|}||ks.J tdg di}d}|d|d}|js^J d}|d	|d}|j	d
dgd d f }t
|| d}|d|d}|j	d
gd d f }t
|| d S )Nz1000000000.006rZ   A)g~  eA$  eAg'1  eAg  eAzA < z.4fg   eAzA > r>   rS   r   A == )rF   rx   r$   r-   r6   float64r
   queryemptylocr   r   )r\   r   rK   rL   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 queryrr   z
class == 0lambdazlambda == 0)r
   r   rv   SyntaxErrorr   indexnamer\   r   rz   r%   r%   r&   test_disallow_python_keywords  s    (z&TestEval.test_disallow_python_keywordsN)7__name__
__module____qualname__r   fixturer]   classmethodr`   propertyrc   r   parametrizer   BOOL_OPS_SYMSr~   CMP_OPS_SYMSr   r   r   ry   r   r   _good_arith_opsr   r   r   r   r    skip_if_windowsr   r   r   r   r   r   r   r
   r6   rT   rV   r   rU   r   r   r   r   r   float32r   r   r   r   r   r   r   r%   r%   r%   r&   rX      s|   








%+/


	!rX   c                  O  s
   t j S r)   )r6   rT   rV   )argskwargsr%   r%   r&   r     rb   r   c                   @  s<   e Zd Zejdg dejdejejgdd Z	dS )TestTypeCastingr   )+-*r   /dtc                 C  s   t jddt|d}d| d}tj|||d}|jj|ks>J |jj|ksNJ t |t| d| d}tj|||d}|jj|ksJ |jj|ksJ t |t| d S )	NrN   r   )
data_gen_fr   df z 3rZ   z3  df)r   makeCustomDataframefrF   rx   r   r   r   )r\   r$   r-   r   r  r   sr   r%   r%   r&   test_binop_typecasting  s    z&TestTypeCasting.test_binop_typecastingN)
r   r   r   r   r   r  r6   r	  r   r  r%   r%   r%   r&   r    s   r  c                 C  s   t | jjtjS r)   )
issubclassr   typer6   Z
datetime64r   r%   r%   r&   _is_datetime  s    r  c                  G  s0   t ttd|  }ttjtt| }|o.|S )NZis_monotonic)anyr   operator
attrgetterr   xorr  )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g dg d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)iur  r  c                 C  s8   d}t jddtd}tj|||d}t ||d  d S )Nzdf * ~2rN   r   )r  rZ   )r   r  r  rF   rx   r   )r\   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alwaysrQ   r  
r_idx_typer(     zdf + df2rZ   warningscatch_warningssimplefilterRuntimeWarningr   r  r  r   r   assert_produces_warningrF   rx   r   )	r\   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 )NrQ   r,  df < 2rZ   rS   )r   r   zdf < df3)r   r  r  rF   rx   r   r
   r6   rT   rV   r   r   r   )r\   r$   r-   r-  r(  r   r   df3r%   r%   r&   test_frame_comparisonF  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   rS   r,     rN   zdf + df2 + df3rZ   r/  )r\   r$   r-   r:  r;  r<  r=  r   r5  r8  r   r%   r%   r&   #test_medium_complex_frame_alignmentS  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+  rQ   r,  rN   df + srZ   r  r   )r0  r1  r2  r3  r   r  r  getattrr   r6   rT   rV   r   r   r4  rF   rx   addr   r\   r$   r-   r@  r-  r(  r   r   r  r   rL   r%   r%   r&   !test_basic_frame_series_alignmentl  s    

0z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_type)r"  r#  r  )r  r  zignore::RuntimeWarningc                 C  s   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 sv0    Y  ntjd||d}	|dks|dkr|dkr||n|| }
n|| }
t |	|
 d S )	NrQ      r,  rN   zs + dfrZ   r  r   )r   r  r  rB  r   r6   rT   rV   r   r   r4  r3  rF   rx   rC  r   rD  r%   r%   r&   !test_basic_series_frame_alignment  s    	

0z/TestAlignment.test_basic_series_frame_alignmentr   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+  rQ   r,  rN   zs r  r  z srZ   r  r   )r0  r1  r2  r3  r   r  r  rB  r   r6   rT   rV   r   r   r4  rF   rx   r   )r\   r$   r-   r@  r   r-  r(  r   r   r  r8   r:   r   r   r%   r%   r&   test_series_frame_commutativity  s&    

.0
z-TestAlignment.test_series_frame_commutativityc              	   C  s  dd l }d}d}	d|	 }
tjdd| tdt |dd	g}|d
dg}tj|	|t||d}tj|
|t||d}t	t
 ||}ttj ||d | }|dks|dkr|dkr||}q|| }n|| }|dks|dkr|dkr||}n|| }n|| }t|j|j|jrftt  tjd||d}W d    n1 sZ0    Y  ntjd||d}|j|jksJ t|| W d    n1 s0    Y  d S )Nr   r   rN   rS   Tr)  r+  r   r   r   r5  r,  r  r   zdf2 + ser + dfrZ   )rT   r0  r1  r2  r3  choicer   r  r  rB  localsgetr   r6   rV   rC  r   r   r4  rF   rx   r   r   )r\   r$   r-   r:  r;  r<  r=  rT   nm1m2r@  Zobj_namer   r5  r   ZserZ	expected2rL   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  rQ   i'  r   FrA  rZ   rm   r>   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
   r6   rT   rV   r   r   r   r4  rF   rx   lenr4   messagelog10r   r   )r\   r$   r-   r   r  seenZis_python_engineZwrnwrz   ZloggedrL   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  r6  r9  r?  rE  r.   r   filterwarningsrG  rH  rO  rU  r%   r%   r%   r&   r!  $  sJ   

.r!  c                
   @  s*  e Zd Zejddd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ejjd%d&d'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z ej	d7d8d9d8d:ge!"g d;gej#d<d=d> Z$ej	d7g d?d@dA Z%ej	dBd8d9d8d:ge!"g d;d8d:igdCdD Z&dEdF Z'dGdH Z(dIdJ Z)dKdL Z*dMdN Z+dOdP Z,ej	dQg dRdSdT Z-ej	dUdVdWgdXdY Z.dZS )[TestOperationsTrY   c                 C  s   || _ || _d S r)   rZ   r[   r%   r%   r&   r]   $  s    z&TestOperations.set_engine_parser_attrsc                 O  s8   | j |d< | j|d< |ddd |d< tj|i |S Nr$   r-   levelr   r>   r$   r-   poprF   rx   r\   r
  r  r%   r%   r&   rx   *  s    

zTestOperations.evalc              	     sd  g  | j 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|| j	| j d W d    n1 s0    Y  qBt
d|d| j	}| j|| j	| j d}	|	|ksJ t
|	|d| j	}| j|d|	i| j	| j d}
|
|ks$J t
d||	d | j	}| j|d|	i| j	| j d}
|
|ksBJ qBd S )Nrm   r   r   c                   s   g | ]}| vr|qS r%   r%   r#   r   Zexclude_arithr%   r&   
<listcomp>5  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'   ;  rb   z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)r   z&argument of type 'int' is not iterablerr   rZ   r>   r   r   )r-   r   r   r  r   rv   r   rF   rx   r$   r=   )r\   Z	arith_opsopsr   r{   r   r   rz   expecr   yr%   r^  r&   test_simple_arith_ops0  s8    



4z$TestOperations.test_simple_arith_opsr:   Fr8   r   c                 C  s   | d| d| }| j dkrf|dv rfd}tjt|d | | W d    n1 sX0    Y  d S | |}t|}||ksJ d S N rm   rn   rq   rr   r-   r   rv   rw   rx   r\   r:   r8   r   r{   rz   r   r   r%   r%   r&   test_simple_bool_opsW  s    (
z#TestOperations.test_simple_bool_opsc                 C  s   | d| d| }| j dkrf|dv rfd}tjt|d | | W d    n1 sX0    Y  d S | |}t|}||ksJ d S rd  rf  rg  r%   r%   r&   test_bool_ops_with_constantsg  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>  rN      rQ   z?N-dimensional objects, where N > 2, are not supported with evalrr   x + yr   rb  r   )r6   rT   rV   r   r   rv   rw   rx   )r\   r   rb  rz   r%   r%   r&   test_4d_ndarray_failsw  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |  d}|dksJ d S )N1r>   )rx   )r\   r   r%   r%   r&   test_constant~  s    
zTestOperations.test_constantc                 C  s4   t tjdd}| jdd|id}t|| d S )NrQ   rS   r   rm  r
   r6   rT   rV   rx   r   r   )r\   r   r5  r%   r%   r&   test_single_variable  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 )
Nr>   zs / 1F)truedivr   Tz1 / 2rR   zs / 2)r6   r   r   r4  FutureWarningrx   r   )r\   r  r{   r   ra  r%   r%   r&   test_truediv  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 )NrN   r   zname 'x' is not definedrr   zdf[x > 2] > 2)r
   r6   rT   rV   r   rv   	NameErrorrx   )r\   r   r%   r%   r&   &test_failing_subscript_with_name_error  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 )NrN   r   z(df + 1)[df > 2]r   rm  r>   rS   rq  r\   r   rK   rL   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
 q~d S )NrN   r   abcr   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   r   rm  )r
   r6   rT   rV   r.   r   r   r;   zipr   r   rx   )r\   r   expr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3r   Zexpecsr<   ra  r%   r%   r&   test_attr_expression  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 )
NrN   r   rz  r   zdf = df2%cannot assign without a target objectrr   )r   r5  rm  )	r
   r6   rT   rV   r.   r   rv   r3   rx   )r\   r   r5  r|  rz   r%   r%   r&   test_assignment_fails  s    z$TestOperations.test_assignment_failsc                   s<  t tjddtdd   tjtdd  	d W d    n1 sP0    Y  d}tjt|d  	d	 W d    n1 s0    Y  d
}tjt|d  	d W d    n1 s0    Y   }|d |d  |d<    j	ddd t
 |  }|d |d  |d<    j	ddd t
 | fdd}|   }d|d  |d< t
 |    fdd}|     j	ddd d}tjt|d  	d W d    n1 s0    Y    | j	dd i dd  }|d |d  |d< t
 | d S )NrN   rS   abr   invalid syntaxrr   zd c = a + bz5left hand side of an assignment must be a single namezd,c = a + bzcannot assign to function callzTimestamp("20131001") = a + br   r   	a = a + bTinplacer;   	c = a + bc                    s      } d}| jddd | S )Nr>   z	a = 1 + bTr  )copyrx   )r   r   )orig_dfr%   r&   r    s    z0TestOperations.test_assignment_column.<locals>.fr>   c                    sJ   d}  j  } jddd | j }tj| j dd |jd u sFJ d S )Nr>   r  Tr  FZcheck_names)r   r  rx   r   r   r   r   )r   Zold_arK   )r   r%   r&   r    s    

z#can only assign a single expressionz	c = a = bzc = df.a + df.br   )r   targetr  )r
   r6   rT   rV   r.   r  r   rv   r   rx   r   r   )r\   rz   rL   r  r%   )r   r  r&   test_assignment_column  sL    (((*z%TestOperations.test_assignment_columnc                 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
   rx   r   r   r   rx  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 )NrN   rS   r  r   r  Fr  r   r   r;   )	r
   r6   rT   rV   r.   rx   r  r   r   )r\   r   actualrL   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r>   rS   r   r>  rN   rj  r  r   r   r;   d$
        c = a + b
        d = c + bTr  r>   rS   r<   $
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrr   z(
            a = b + 2
            b - 2F)r
   r  rx   r   r   r   rv   r3   )r\   r   rL   answerrz   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  r>   rS   r<   r  r
   r  rx   r   r   r\   r   rL   r%   r%   r&   &test_multi_line_expression_not_inplaceH  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  rF  r   r;   r  z?
        c = a * @local_var
        d = c + @local_var
        Tr  r  )r\   r   rL   Z	local_varr  r%   r%   r&   )test_multi_line_expression_local_variablea  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_funcw  s    zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr   r>   rF  r;   r  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr  r  r\   r   r  rL   r  r%   r%   r&   2test_multi_line_expression_callable_local_variables  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    s    zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr   rF  r>   )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_kwargs  s    zMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc                 C  sj   t g dg dd}| }d}tjt|d |d W d    n1 sP0    Y  t|| d S )Nr  r  r  r~  rr   za = 1)r
   r  r   rv   r3   r   r   r   )r\   r   Zdf_origrz   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   rS   za == 2Tr  r   	a = 1 + 2r  r  )r
   r  r   r   r   rx   Zassert_dict_equalr  r%   r%   r&   test_query_inplace  s    z!TestOperations.test_query_inplaceinvalid_targetr>   catrS   r>   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  rr   Tr  r  F)r   rv   r3   rx   hasattrr\   r  rz   
expressionr%   r%   r&   test_cannot_item_assign  s    .
z&TestOperations.test_cannot_item_assign)r>   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  rr   Fr  )r   rv   r3   rx   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 assignmentrr   T)rx   r   rv   r3   )r\   r  r  rz   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 )NrS   pr"  r  r(  r-  r7  r   rm  r   r  r  rx   r   )r\   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 )	NrS   r  r"  r  zdf[df < 2 + 3]r   rm  rN   r  r\   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 )NrS   r  r"  r  zdf[df[df < 2] < 2] + df * 2r   rm  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| j| jd}|jd	k }t	j
||d
d d S )NrN   r   z1/1/2012)Zperiodsdates1zdf.dates1 < 20130101r   r   Z20130101Fr  )r
   r6   rT   rV   r   rx   r$   r-   r  r   r   )r\   r   r   ra  r%   r%   r&   test_date_boolean  s    
z TestOperations.test_date_booleanc                 C  s  | j dkr,tjd| j| j d}|s(J tjd| j| j d}|sDJ tjd| j| j d}|r`J tjd| j| j d}|s|J tjd| j| j d}|sJ tjd| j| j d}|sJ tjd	| j| j d}|sJ tjd
| j| j d}|sJ tjd| j| j d}|r
J tjd| j| j d}|sJ nd}tjt|d$ tjd| j| j d W d    n1 sj0    Y  tjt|d$ tjd| j| j d W d    n1 s0    Y  tjt|d$ tjd| j| j d W d    n1 s0    Y  tjt|d$ tjd| j| j d W d    n1 s60    Y  d}tjt|d$ tjd| j| j d W d    n1 s~0    Y  tjt|d$ tjd| j| j d W d    n1 s0    Y  d S )Nrm   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 implementedrr   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))r-   rF   rx   r$   r   rv   rw   )r\   r   rz   r%   r%   r&   test_simple_in_ops  sV    


444
&4
z!TestOperations.test_simple_in_opsc                 C  s6   d}d d}d}tj|| j| jd}||ks2J d S )Nr>   z * Z!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarZ   )r   rF   rx   r$   r-   )r\   r   r   rL   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}| jdkrvd}d|v r,d}tjt|d* tj	|d|i| j| j
d	 W d    q1 sj0    Y  ntj	|d|i| j| j
d	 d S )
NrN   r   rm   rq   not'Not' nodes are not implementedrr   r   )r   r-   r$   r
   r6   rT   rV   r-   r   rv   rw   rF   rx   r$   )r\   r   r   rz   r%   r%   r&   test_fails_and_or_not1  s$    	
&z$TestOperations.test_fails_and_or_notcharr   r   c                 C  s   t tjdd}d| d}| jdkrpd}tjt|d$ tj	|| j| j
d W d    q1 sd0    Y  ntj	|| j| j
d d S )	NrN   r   z(df + 2)[df > 1] > 0 z	 (df > 0)rm   z$cannot evaluate scalar only bool opsrr   r   r  )r\   r  r   r{   rz   r%   r%   r&   test_fails_ampersand_pipeP  s    
4z(TestOperations.test_fails_ampersand_pipeN)/r   r   r   r   r  r]   rx   rc  r   r  r   r  rh  ri  rn  rp  rr  ru  rw  ry  r}  r  r  r  r   r  r  r  r  r  r  r  r  r6   r   rV  r  r  r  r  r  r  r  r  r  r  r  r%   r%   r%   r&   rW  #  sf   

'"E	
%	 

&
	
7
rW  c                   @  s   e Zd Zejdddd Zdd Zdd Zej	d	e
d
d Zdd Zdd Zdd Zdd Zejdd Zdd Zdd ZdS )TestMathTrY   c                 C  s   || _ || _d S r)   rZ   r[   r%   r%   r&   r]   ^  s    z TestMath.set_engine_parser_attrsc                 O  s8   | j |d< | j|d< |ddd |d< tj|i |S rX  rZ  r\  r%   r%   r&   rx   d  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   rQ   z(a)ignoreallFr  )
r
   r6   rT   rV   r   rx   errstaterB  r   r   )r\   r0   r   r   fnr   gotr   r%   r%   r&   test_unary_functionsj  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 )NrQ   r  z(a, b)r  r  Fr  )r
   r6   rT   rV   r   r   rx   r  rB  r   r   )r\   r  r   r   r   r   r  r   r%   r%   r&   test_binary_functionsv  s    

.zTestMath.test_binary_functionsc                 C  sd   t tjdtjdd}|jd| j| jdd |j}tt	|j
|j}tj||dd d S )NrQ   r  ze = arctan2(sin(a), b)Tr$   r-   r  Fr  )r
   r6   rT   rV   rx   r$   r-   r<   Zarctan2sinr   r   r   r   r\   r   r  r   r%   r%   r&   test_df_use_case  s    zTestMath.test_df_use_casec                 C  s`   t tjdtjdd}|jd| j| jdd |j}t|j	|j
 }tj||dd d S )NrQ   r  ze = sin(a + b)Tr  Fr  )r
   r6   rT   rV   rx   r$   r-   r<   r  r   r   r   r   r  r%   r%   r&    test_df_arithmetic_subexpression  s
    z)TestMath.test_df_arithmetic_subexpressionc                 C  s   t dtjd|i}|jj|ks*J |jd| j| j	dd |j
}t|j}|j|jksbJ ||jkspJ tj||dd d S )Nr   rQ   z
b = sin(a)Tr  Fr  )r
   r6   rT   rV   r   r   r   rx   r$   r-   r   r  r   r   )r\   r   Zexpect_dtyper   r  r   r%   r%   r&   check_result_type  s    zTestMath.check_result_typec                 C  sD   |  tjtj |  tjtj |  tjtj |  tjtj d S r)   )r  r6   Zint32r   Zint64r	  ra   r%   r%   r&   test_result_types  s    zTestMath.test_result_typesc                 C  s   |  tjtj d S r)   )r  r6   Z
complex128ra   r%   r%   r&   test_result_complex128  s    zTestMath.test_result_complex128c                 C  s^   t dtjdi}d}tjt|d$ |jd| j| j	d W d    n1 sP0    Y  d S )Nr   rQ   z#"mysin" is not a supported functionrr   zmysin(a)rZ   )
r
   r6   rT   rV   r   rv   r3   rx   r$   r-   r   r%   r%   r&   test_undefined_func  s    zTestMath.test_undefined_funcc                 C  s^   t dtjdi}d}tjt|d$ |jd| j| j	d W d    n1 sP0    Y  d S )Nr   rQ   z1Function "sin" does not support keyword argumentsrr   zsin(x=a)rZ   )
r
   r6   rT   rV   r   rv   r   rx   r$   r-   r   r%   r%   r&   test_keyword_arg  s    zTestMath.test_keyword_argN)r   r   r   r   r  r]   rx   r  r   r  r   r  r  r  r  r  r    r  r  r  r  r%   r%   r%   r&   r  ]  s   




r  rQ   c                   @  s$   e Z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 )Nz
_var_s * 2rS   rZ   )r   r   _var_srF   rx   )r\   r$   r-   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 )Nr>   x + 1r   lcls)rJ  r  rF   rx   r[  )r\   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 )Nr>   r  rZ   )globalsr  rF   rx   )r\   r$   r-   r   ZgblsZgbls2r%   r%   r&   test_no_new_globals  s
    

zTestScope.test_no_new_globalsN)r   r   r   r  r  r  r%   r%   r%   r&   r    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' passedrr   rk  r>   rS   rl  asdf)r   r$   r   rv   KeyErrorrF   rx   rz   r%   r%   r&   test_invalid_engine  s    r  )use_numexprrL   ))Tr   )Frm   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  rF   option_context)r  rL   r  rK   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)r>   rS   r   r>  rN   rj  )r   Bz
A.isnull()rN   rj  r>  )r   )rF   r  r
   r   r   r   )r   rK   rL   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' passedrr   rk  r>   rS   rl  r  )r   r-   r  r  r%   r%   r&   test_invalid_parser  s    r  )rm   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 implementedrr   )r  Zunsupported_nodesr   rv   rw   rB  )r$   r-   ZVisitorClassinstr`  rz   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  rr   rZ   r   rv   r   rF   rx   )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 definedrr   rZ   )r   rv   rv  rF   rx   )r$   r-   r<   rz   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r>   rS   r   zThe '@' prefix is onlyrr   rZ   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 .+rr   zsin + dotted_linerZ   )r   rv   r   rF   rx   )r$   r-   r  Zdotted_linerz   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 .+rr   r  )	resolversr$   r-   )r   rv   r   rF   rx   )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 stringrr    rZ   r   rv   r3   rF   rx   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 allowedrr   z1 + 1; 2 + 2rZ   r  rZ   r%   r%   r&   $test_more_than_one_expression_raisesF  s    r  cmprn   r:   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 )NrQ   )r6   rT   r   r%   r%   r%   r&   r   O  rb   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>r   r   r   r   rt   r   ru   r   rr   rZ   )
intrO   r6   rT   rV   r   rv   rw   rF   rx   )r8   r  r:   r$   r-   genr   r   r   r   r{   rz   r%   r%   r&   test_bool_ops_fails_on_scalarsK  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   r;   r   )FFF)r   )r
   rx   r   r   r   r   r   )r  r   rK   rL   r%   r%   r&   test_equals_various^  s    r  c                 C  s*   d}t j}tj|| |d}||ks&J d S )Nzinf + 1rZ   )r6   infrF   rx   )r$   r-   r  rL   rK   r%   r%   r&   test_infp  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-   rs  r>   r   F)r   r4  rt  rF   rx   rP  r4   rQ  )r$   r-   rs   mr%   r%   r&   test_truediv_deprecatedw  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 )NrN   rS   r   r   `z` > 5r1   )r
   r6   rT   rV   r   r   r   )r$   r  r   rL   Zquery_stringrK   r%   r%   r&   test_query_token  s
    r  c                 C  s   t ddgddggddgd}||jdk  }|jd| |d	}t|| |d
krd}tjt|d  |jd| |d	 W d    q1 s0    Y  n|jd| |d	}t|| d S )Nr   rQ   r>   r.  r  countr   z
~(cat > 0)rZ   rm   r  rr   znot (cat > 0))r
   r  r   r   r   r   rv   rw   )r$   r-   r   rL   rK   rz   r%   r%   r&   test_negate_lt_eq_le  s    0r  c                   @  s.   e Zd Zejdddg ddgdd ZdS )	TestValidatevaluer>   Truer  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 typerr   z2+2r  r  )r\   r  rz   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  )o
__future__r   	functoolsr   	itertoolsr   r  r0  Znumpyr6   r   Zpandas.errorsr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr    Zpandas.core.dtypes.commonr   r   r   r	   r   rF   r
   r   r   Zpandas._testingZ_testingr   Zpandas.core.computationr   Zpandas.core.computation.enginesr   r   Zpandas.core.computation.exprrG   Zcomputationr   r   r   r   Z#pandas.core.computation.expressionsr   r   Zpandas.core.computation.opsr   r   r   r   r   r  r$   ZPARSERSr-   r/   r0   r2   r=   rC   rD   rH   rM   sortedset
differencer  r.   ranger8   r:   r   rX   r  r  r  r   r!  rW  r  rT   rV   r  r  r!   r  r   r  r  r  r  ZPyTablesExprVisitorr  __annotations__r  r  r  r  r  r  r  r  r  rO   r  r  r  r  r  r  r  r%   r%   r%   r&   <module>   s   	




    h      >`
	




	