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

r´  r@   c                   @  s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	TestScopec                 C  s$   d}t  td tj|||d�¡ d S )Nú
_var_s * 2rC   r\   )ra   r    Ú_var_sr_   r`   )rc   r(   r1   r;   r)   r)   r*   Útest_global_scope\  s
     ÿzTestScope.test_global_scopec                 C  sD   d}t ƒ  ¡ }tjd|||d� t ƒ  ¡ }| d¡ ||ks@t‚d S )NrB   úx + 1r™   Úlcls)r9  rz  r_   r`   rM  rŸ   )rc   r(   r1   r}   rË  Zlcls2r)   r)   r*   Útest_no_new_localsb  s    


zTestScope.test_no_new_localsc                 C  s8   d}t ƒ  ¡ }tjd||d� t ƒ  ¡ }||ks4t‚d S )NrB   rÊ  r\   )Úglobalsrz  r_   r`   rŸ   )rc   r(   r1   r}   ZgblsZgbls2r)   r)   r*   Útest_no_new_globalsj  s
    

zTestScope.test_no_new_globalsc              	   C  s8   d}d}t jt|d�� tjd||i d� W 5 Q R X d S )NrB   rd  rX   rÊ  rt   ©r!   r]   r   r_   r`   )rc   r(   r1   r}   rd   r)   r)   r*   Útest_empty_localsq  s    zTestScope.test_empty_localsc              	   C  s8   d}d}t jt|d�� tj|||i d� W 5 Q R X d S )Nzname '_var_s' is not definedrÇ  rX   )r(   r1   Zglobal_dictrÏ  )rc   r(   r1   rd   r;   r)   r)   r*   Útest_empty_globalsx  s    zTestScope.test_empty_globalsN)rí   rî   rï   rÉ  rÌ  rÎ  rÐ  rÑ  r)   r)   r)   r*   rÆ  [  s
   rÆ  c               	   C  s8   d} t jt| d�� tjddddœdd� W 5 Q R X d S )	NzInvalid engine 'asdf' passedrX   r\  rB   rC   r]  Úasdf)ru   r(   ©r!   r]   ÚKeyErrorr_   r`   ©rd   r)   r)   r*   Útest_invalid_engine€  s    rÖ  )Úuse_numexprrh   ))Tr   )FrS   c              	   C  s<   ddl m} t d| ¡� |d ƒ}||ks.t‚W 5 Q R X d S )Nr   )Ú_check_engineúcompute.use_numexpr)Zpandas.core.computation.evalrØ  r_   Úoption_contextrŸ   )r×  rh   rØ  ri   r)   r)   r*   Útest_numexpr_option_respected‡  s    
rÛ  c               	   C  sv   t  dd¡�` tddddd d gdddddd	gd
œƒ} |  d¡}td d gdd	gd
œddgd�}t ||¡ W 5 Q R X d S )NrÙ  FTrB   rC   r®   r-  r=   r[  )r×   ÚBz
A.isnull())ræ   )r_   rÚ  r   rÚ   ra   r³   )rÉ   ri   rh   r)   r)   r*   Ú#test_numexpr_option_incompatible_op˜  s     ÿ
rÝ  c               	   C  s8   d} t jt| d�� tjddddœdd� W 5 Q R X d S )	NzInvalid parser 'asdf' passedrX   r\  rB   rC   r]  rÒ  )ru   r1   rÓ  rÕ  r)   r)   r*   Útest_invalid_parser¤  s    rÞ  )rS   r   rz   z dict[str, type[BaseExprVisitor]]Ú_parsersc              
   C  sN   t | }|d| |ƒ}|jD ].}d}tjt|d�� t||ƒƒ  W 5 Q R X qd S )NrÊ  znodes are not implementedrX   )rß  Zunsupported_nodesr!   r]   r^   r1  )r(   r1   ZVisitorClassÚinstrR  rd   r)   r)   r*   Útest_disallowed_nodes²  s    
rá  c              	   C  s2   d}t jtdd�� tj|| |d� W 5 Q R X d S )Nzs +rq  rX   r\   ©r!   r]   rå   r_   r`   )r(   r1   r;   r)   r)   r*   Útest_syntax_error_exprs¾  s    rã  c              	   C  s6   d}d}t jt|d�� tj|| |d� W 5 Q R X d S )Nzs + tzname 's' is not definedrX   r\   )r!   r]   re  r_   r`   )r(   r1   r;   rd   r)   r)   r*   Útest_name_error_exprsÄ  s    rä  Úexpressza + @bz@a + bz@a + @bc              	   C  sj   d\}}|dkr<t jtdd�� tj|| |d� W 5 Q R X n*t jtdd�� tj|| |d� W 5 Q R X d S )N©rB   rC   rz   zThe '@' prefix is onlyrX   r\   zThe '@' prefix is notrâ  )r(   r1   rå  r¬   r¯   r)   r)   r*   Ú%test_invalid_local_variable_referenceË  s    rç  c              	   C  sd   d\}}| dkr@d}t jt|d�� tjd| |d� W 5 Q R X n tjd| |d�}||| ks`t‚d S )Nræ  r   zVariables in expression .+rX   zsin + dotted_liner\   )r!   r]   r   r_   r`   rŸ   )r(   r1   r¾  Zdotted_linerd   rš   r)   r)   r*   Útest_numexpr_builtin_raises×  s    rè  c              	   C  s4   d}t jtdd�� tjd|| |d� W 5 Q R X d S )N)é*   g      @zResolver of type .+rX   r   )Z	resolversr(   r1   )r!   r]   rw   r_   r`   )r(   r1   Zcannot_resolver)   r)   r*   Útest_bad_resolver_raisesâ  s    rê  c              	   C  s.   t jtdd�� tjd| |d� W 5 Q R X d S )Nzexpr cannot be an empty stringrX   Ú r\   ©r!   r]   r2   r_   r`   r\   r)   r)   r*   Útest_empty_string_raisesè  s    rí  c              	   C  s.   t jtdd�� tjd| |d� W 5 Q R X d S )Nz#only a single expression is allowedrX   z1 + 1; 2 + 2r\   râ  r\   r)   r)   r*   Ú$test_more_than_one_expression_raisesî  s    rî  ÚcmprT   r9   c              
   C  sª   t dd„ ttjji}||  ƒ }||  ƒ } || ƒ }d|› d|› d�}d|› d|› d�}d|› d|› d	�}	|||	fD ]2}
d
}tjt|d�� tj	|
||d� W 5 Q R X qrd S )Nc                   S  s   t j d¡S )Nr@   )r5   rD   r²   r)   r)   r)   r*   r~   ÷  r   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>rp   r†   rq   r‡   rZ   rˆ   r[   rÏ   rX   r\   )
Úintr>   r5   rD   rF   r!   r]   r^   r_   r`   )r7   rï  r9   r(   r1   Úgenr‹   rŒ   r�   rŽ   re   rd   r)   r)   r*   Útest_bool_ops_fails_on_scalarsó  s    


rò  Úotherz'x'z...c                 C  sN   t ddddgiƒ}| d| › �¡}tdddgdd�}tr>d |_t ||¡ d S )Nr×   r¬   r¯   r:   rØ   F©rç   )r   r`   r   r   rç   ra   r¶   )ró  rÉ   ri   rh   r)   r)   r*   Útest_equals_various  s    rõ  c                 C  s*   d}t j}tj|| |d�}||ks&t‚d S )Nzinf + 1r\   )r5   Úinfr_   r`   rŸ   )r(   r1   r  rh   ri   r)   r)   r*   Útest_inf  s    r÷  Úcolumnu	   Temp(Â°C)u   Capacitance(Î¼F)c                 C  sT   t tj dd¡|dgd�}||| dk }d|› d�}|j|| d�}t ||¡ d S )Nr=   rC   r¯   râ   ú`z` > 5)r(   )r   r5   rD   rF   rÚ   ra   r³   )r(   rø  rÉ   rh   Zquery_stringri   r)   r)   r*   Útest_query_token  s
    rú  c              	   C  s    t ddgddggddgd�}||jdk  }|jd| |d	�}t ||¡ |d
kr€d}tjt|d�� |jd| |d	� W 5 Q R X n|jd| |d	�}t ||¡ d S )Nr   r@   rB   r  rš  Úcountrâ   z
~(cat > 0)r\   rS   r¯  rX   znot (cat > 0))r   rš  rÚ   ra   r³   r!   r]   r^   )r(   r1   rÉ   rh   ri   rd   r)   r)   r*   Útest_negate_lt_eq_le)  s    rü  c                 C  st   |dkr&| j  tjjtd|› �d�¡ ttjj	dddd�|dgd	�}||| d
k }| 
|› d�¡}t ||¡ d S )N)ÚTrueÚFalserö  ZInfz+GH 47859 DataFrame eval not supported with )r]   r   r   éd   )r@   rC   r©   Zcol1râ   r[  z>6)r�   r‚   r!   r#   r€   rÔ  r   r5   rD   r²   rÚ   ra   r³   )r0   rø  rÉ   rh   ri   r)   r)   r*   Ú test_eval_no_support_column_name9  s    þÿr   c                 C  sÎ   t dddgdddgddd	gd
œƒ}|d d … }|d }|jddd� t dddgdddgddd	gd
œƒ}t ||¡ | sœt ||d ¡ t |d |d ¡ n.tdddgdd�}t ||¡ t |d |¡ d S )NrB   rC   r®   r-  r=   r[  r5  é   é	   )r×   rÜ  ÚCr×   z	A = B + CTrw  r„  é   é   rô  )r   r`   ra   r³   r¶   r   )Zusing_copy_on_writerÉ   Zresult_viewr?  rh   r)   r)   r*   Útest_set_inplaceN  s    ""r  c                   @  s0   e Zd Zej ddddddgdg¡dd„ ƒZd	S )
ÚTestValidateÚvaluerB   rý  rC   r®   g      @c              	   C  s0   d}t jt|d�� tjd|d� W 5 Q R X d S )Nz8For argument "inplace" expected type bool, received typerX   z2+2rw  rì  )rc   r  rd   r)   r)   r*   Útest_validate_bool_argsb  s    z$TestValidate.test_validate_bool_argsN)rí   rî   rï   r!   r#   rð   r	  r)   r)   r)   r*   r  a  s   r  )fÚ
__future__r   Ú	functoolsr   Ú	itertoolsr   r  rD   r  Znumpyr5   r!   Zpandas.errorsr   r   r   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr%   Zpandas.core.dtypes.commonr   r	   r
   r   rz   r_   r   r   r   Zpandas._testingZ_testingra   Zpandas.core.computationr   r   Zpandas.core.computation.enginesr   Zpandas.core.computation.exprr   r   r   Z#pandas.core.computation.expressionsr   r   Zpandas.core.computation.opsr   r   r   r   r   Zpandas.core.computation.scoper   Zfixturer(   ZPARSERSr1   r<   rG  Úranger7   r9   rŠ   rH   r  rú   r  r  rI  r´  rF   rÈ  rÆ  r&   rÖ  r#   rð   rÛ  rÝ  rÞ  ZPyTablesExprVisitorrß  Ú__annotations__rá  rã  rä  rç  rè  rê  rí  rî  rð  r>   rò  rõ  r÷  rú  rü  Úkeysr   r  r  r)   r)   r)   r*   Ú<module>   sÐ    ôÿ


þ
    \  	    	Z%
þ	

ý

þþ

	þ
