U
    ¾mœd� ã                   @  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)   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/computation/test_eval.pyÚ	<genexpr>:   s   õþúþr+   )Úparamsc                 C  s   | j S ©N©r"   ©Úrequestr)   r)   r*   r(   9   s    r(   c                 C  s   | j S r-   r.   r/   r)   r)   r*   ÚparserM   s    r1   c              
   C  sj   t | }t| jr`z|| |ƒW S  tk
r^ } z"t|ƒ d¡rLtj W Y ¢S ‚ W 5 d }~X Y nX || |ƒS )Nz6negative number cannot be raised to a fractional power)r   r   Zhas_neg_fracÚ
ValueErrorÚstrÚ
startswithÚnpÚnan)ÚlhsÚcmp1Úrhsr(   ÚcÚer)   r)   r*   Ú_eval_single_binR   s    
ÿr<   é   r   r   Z	SeriesNaNZDataFrameNaNÚfloat)r,   Úidsc                 C  sj   t tj dd¡ƒ}tj||dk< t tj dd¡ƒttj d¡ƒtddtjtjdgƒ|tj ¡ f}|| j S )Né
   r=   ç      à?é   é   )r   r5   ÚrandomÚrandr6   Úrandnr   r"   )r0   Znan_df1Úoptsr)   r)   r*   r7   a   s    ûr7   c                
   @  sP  e Zd Zejjdddddddgdd	d
dddgd�ejjdddgddgd�ej dej¡dd„ ƒƒƒZej dej	¡dd„ ƒZ
ej dej	¡dd„ ƒZej dddg¡ej dddg¡dd„ ƒƒZej deeeƒ e¡ƒ¡dd„ ƒZdd„ Zd d!„ Zejd"d#„ ƒZd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zej d.eej  d/d0¡ƒeejj!d/d1d2�ƒeej "d/d0¡d3kƒg¡d4d5„ ƒZ#ej d.e$ej  d/¡ƒe$ejj!d/d/d2�ƒe$ej "d/¡d3kƒg¡d6d7„ ƒZ%d8d9„ Z&d:d;„ Z'ej d<ej(ej)g¡ej d=d>d?g¡d@dA„ ƒƒZ*dBdC„ Z+ej dDdE¡dFdG„ ƒZ,dHdI„ Z-dJdK„ Z.dLdM„ Z/dNdO„ Z0dPdQ„ Z1dRdS„ Z2dTS )UÚTestEvalr8   z!=z==z<=z>=ú<ú>ÚneÚeqÚleÚgeÚltÚgt)r?   Úcmp2Úbinopc              	   C  s¼   |dkrZ|dkrZd}t jt|d��. d|› d|› d|› d�}	tj|	||d	� W 5 Q R X d S t||||ƒ}
t||||ƒ}t|
|||ƒ}d|› d|› d|› d�}	tj|	||d	�}t ||¡ d S )
NÚpython©ÚandÚorú"'BoolOp' nodes are not implemented©Úmatchú(lhs z rhs) z (lhs ú rhs)©r(   r1   )r!   ÚraisesÚNotImplementedErrorÚpdÚevalr<   ÚtmÚassert_equal)Úselfr8   rQ   rR   r7   r9   r(   r1   ÚmsgÚexÚlhs_newÚrhs_newÚexpectedÚresultr)   r)   r*   Útest_complex_cmp_opsx   s    zTestEval.test_complex_cmp_opsÚcmp_opc           
   	   C  sê   |dk }|dk }|dkr^|dkr^d}t jt|d��" d|› d�}tj|||d� W 5 Q R X d S d|› d�}d	 d
dg¡}|dk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„   Ú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   Ú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   r1  r  r  rË   rè   r
  r›   rh   r)   r)   r*   Ú!test_basic_frame_series_alignment8  s&        ÿ
z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_type)r  r  zignore::RuntimeWarningc              
   C  s(  |dkrb|dkrb|dkrb|dkrb|dkrbd|› d|› d|› d	|› d
|› �
}|j  tjj|dd�¡ tjddt||d�}t||ƒ}	t	t
j d¡|	d d… ƒ}
t|
j|jƒ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  r3  r   r5   rD   rF   r  rè   r%  r$  r_   r`   r4  rµ   )rc   r0   r(   r1   r1  r  r  r   rË   rè   r
  r›   rh   r)   r)   r*   Ú!test_basic_series_frame_alignmentR  s<    
ÿþýüû ÿ    ÿ
z/TestAlignment.test_basic_series_frame_alignmentry   rý   rÿ   c              
   C  s   t jdd��� t  dt¡ tjddt||d�}t||ƒ}tt	j
 d¡|d d… ƒ}	d|› d�}
d	|› d
�}t|j|	jƒ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  r3  r   r5   rD   rF   r  rè   r%  r_   r`   rµ   )rc   r(   r1   r1  ry   r  r  rË   rè   r
  r7   r9   r®   r±   r)   r)   r*   Útest_series_frame_commutativityy  s.        ÿ

z-TestAlignment.test_series_frame_commutativityc              
   C  s‚  d}d}d| }	t jdd���Z t  dt¡ t ddg¡}
t d	d
g¡}tj||t||d�}tj|	|t||d�}t	t
ƒ  |¡|
ƒ}ttj |¡|d |… ƒ}|dks¬|dkrÊ|dkrÀ| |¡}qÒ|| }n|| }|dksä|dk�r|dkrø| |¡}n|| }n|| }t|j|j|jƒ�rFt t¡� tjd||d�}W 5 Q R X ntjd||d�}|j|jk�sht‚t ||¡ W 5 Q R X d S )Nr°   r=   rC   Tr  r  rè   rå   rË   r&  r  r  r   zdf2 + ser + dfr\   )r!  r"  r#  r$  rD   Úchoicera   r  r  r3  ÚlocalsÚgetr   r5   rF   r4  r  rè   r%  r_   r`   rÓ   r    rµ   )rc   r(   r1   r+  r,  r-  r.  ÚnÚm1Úm2r1  Úobj_namerË   r&  rè   ÚserZ	expected2rh   r›   r)   r)   r*   Ú#test_complex_series_frame_alignment˜  sN        ÿ    ÿ

z1TestAlignment.test_complex_series_frame_alignmentc              	   C  s”  t tj dd¡ƒ}ttj d¡ƒ}|dkr0t}nd}t |¡� tj	d||d� W 5 Q R X ttj d¡ƒ}t d¡� tj	d||d� W 5 Q R X t tj dd¡ƒ}ttj d¡ƒ}t d¡� tj	d||d� W 5 Q R X t tj dd¡ƒ}ttj d¡ƒ}|dk}|�st}nd}t |¡�n}tj	d||d� |�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   Fr2  r\   rS   rB   r   z_Alignment difference on axis 1 is larger than an order of magnitude on term 'df', by more than z.4gz; performance may suffer.)r   r5   rD   rF   r   r   ra   r%  r_   r`   Úlenr    r3   ÚmessageÚlog10r¬   rÓ   )rc   r(   r1   rË   r
  ÚseenZis_python_engineZwrnÚwrd   Zloggedrh   r)   r)   r*   Ú+test_performance_warning_for_poor_alignmentÈ  s:    ÿz9TestAlignment.test_performance_warning_for_poor_alignmentN)rï   rð   rñ   Zindex_typesZlhs_index_typesr  r!   r#   rò   r'  r*  r0  r5  Úlistr   Úfilterwarningsr8  r9  rB  rH  r)   r)   r)   r*   r  ò  sJ   

þ
!,r  c                
   @  sF  e Zd Zdd„ Zdd„ Zej dddg¡ej dddg¡ej d	ej	¡d
d„ ƒƒƒZ
ej dddg¡ej dddg¡ej d	ej	¡dd„ ƒƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zejjd0d1�d2d3„ ƒZd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%ej dBdCdDdCdEge& 'g ¡dFg¡dGdH„ ƒZ(ej dBdCdDdFg¡dIdJ„ ƒZ)ej dKdCdDdCdEge& 'g ¡dFdCdEig¡dLdM„ ƒZ*dNdO„ Z+dPdQ„ Z,dRdS„ Z-dTdU„ Z.dVdW„ Z/dXdY„ Z0ej dZd[d\d]g¡d^d_„ ƒZ1ej d`dadbg¡dcdd„ ƒZ2deS )fÚTestOperationsc                 O  s    |  dd¡d |d< tj||ŽS ©NÚlevelr   rB   ©Úpopr_   r`   ©rc   rú   rû   r)   r)   r*   r`   ú  s    zTestOperations.evalc              
     s4  g ‰ |dkrddg‰ ‡ fdd„t jt j D ƒ}dd„ |D ƒ}|D ]î}d|› d	�}d
|› d	�}d|› d�}|dk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)   rQ  r)   r)   r*   r+   	  s      z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rl   z&argument of type 'int' is not iterablerX   r\   rB   r}   rš   )
r   r   rô   r!   r]   rw   r_   r`   r<   r    )rc   r(   r1   Z	arith_opsÚopsry   re   r�   rŽ   rd   Úexpecr}   Úyr)   rR  r*   Útest_simple_arith_opsþ  s0    

þz$TestOperations.test_simple_arith_opsr9   TFr7   ry   c              	   C  sr   |› d|› d|› �}t dkrP|dkrPd}tjt|d�� |  |¡ W 5 Q R X d S |  |¡}t|ƒ}||ksnt‚d S ©Nr  rS   rT   rW   rX   ©r1   r!   r]   r^   r`   r    ©rc   r9   r7   ry   re   rd   r›   r×   r)   r)   r*   Útest_simple_bool_ops!  s    
z#TestOperations.test_simple_bool_opsc              	   C  sr   |› d|› d|› �}t dkrP|dkrPd}tjt|d�� |  |¡ W 5 Q R X d S |  |¡}t|ƒ}||ksnt‚d S rX  rY  rZ  r)   r)   r*   Útest_bool_ops_with_constants1  s    
z+TestOperations.test_bool_ops_with_constantsc              	   C  sX   t j dddd¡}tt j d¡ƒ}d}tjt|d�� | jd||d	œd
� W 5 Q R X d S )Nr°   r/  r=   é   r@   z?N-dimensional objects, where N > 2, are not supported with evalrX   úx + y©r}   rV  ©ru   )r5   rD   rF   r   r!   r]   r^   r`   )rc   r}   rV  rd   r)   r)   r*   Útest_4d_ndarray_failsA  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |   d¡}|dkst‚d S )NÚ1rB   )r`   r    )rc   r}   r)   r)   r*   Útest_constantH  s    
zTestOperations.test_constantc                 C  s4   t tj dd¡ƒ}| jdd|id�}t ||¡ d S )Nr@   rC   rË   r`  ©r   r5   rD   rF   r`   ra   rµ   )rc   rË   r&  r)   r)   r*   Útest_single_variableL  s    z#TestOperations.test_single_variablec              	   C  s:   t tj dd¡ƒ}tjtdd�� |  d¡ W 5 Q R X d S )Nr=   r°   úname 'x' is not definedrX   zdf[x > 2] > 2)r   r5   rD   rF   r!   r]   Ú	NameErrorr`   ©rc   rË   r)   r)   r*   Ú&test_failing_subscript_with_name_errorQ  s    z5TestOperations.test_failing_subscript_with_name_errorc                 C  sD   t tj dd¡ƒ}| jdd|id�}|d |dk }t ||¡ d S )Nr=   r°   z(df + 1)[df > 2]rË   r`  rB   rC   rd  rÏ   r)   r)   r*   Útest_lhs_expression_subscriptV  s    z,TestOperations.test_lhs_expression_subscriptc                 C  s¦   t tj dd¡tdƒd�}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t||	ƒD ]"\}
}t	 
|| j|
d	|id
�¡ q~d S )Nr=   r°   Úabcrä   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   rË   r`  )r   r5   rD   rF   rI  r®   r±   r:   Úzipra   r¸   r`   )rc   rË   Úexpr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3ÚexprsZexpecsr;   rU  r)   r)   r*   Útest_attr_expression\  s    

z#TestOperations.test_attr_expressionc              	   C  sf   t tj dd¡tdƒd�}t tj dd¡ƒ}d}d}tjt|d�� | j|||dœd	� W 5 Q R X d S )
Nr=   r°   rk  rä   zdf = df2ú%cannot assign without a target objectrX   )rË   r&  r`  )	r   r5   rD   rF   rI  r!   r]   r2   r`   )rc   rË   r&  rm  rd   r)   r)   r*   Útest_assignment_failsi  s    z$TestOperations.test_assignment_failsc              	   C  sB   t tj dd¡tdƒd�}tjtdd�� | d¡ W 5 Q R X d S )Nr=   rC   Úabrä   úinvalid syntaxrX   zd c = a + b©	r   r5   rD   rF   rI  r!   r]   rç   r`   rh  r)   r)   r*   Ú%test_assignment_column_multiple_raiseq  s    z4TestOperations.test_assignment_column_multiple_raisec              	   C  sF   t tj dd¡tdƒd�}d}tjt|d�� | d¡ W 5 Q R X d S )Nr=   rC   rr  rä   z5left hand side of an assignment must be a single namerX   zd,c = a + brt  rê   r)   r)   r*   Ú%test_assignment_column_invalid_assignw  s    z4TestOperations.test_assignment_column_invalid_assignc              	   C  sF   t tj dd¡tdƒd�}d}tjt|d�� | d¡ W 5 Q R X d S )Nr=   rC   rr  rä   zcannot assign to function callrX   zTimestamp("20131001") = a + brt  rê   r)   r)   r*   Ú3test_assignment_column_invalid_assign_function_call~  s    zBTestOperations.test_assignment_column_invalid_assign_function_callc                 C  sT   t tj dd¡tdƒd�}| ¡ }|d |d  |d< |jddd	� t ||¡ d S )
Nr=   rC   rr  rä   r®   r±   ú	a = a + bT©Úinplace©	r   r5   rD   rF   rI  Úcopyr`   ra   rµ   ©rc   rË   rh   r)   r)   r*   Ú&test_assignment_single_assign_existing„  s
    z5TestOperations.test_assignment_single_assign_existingc                 C  sT   t tj dd¡tdƒd�}| ¡ }|d |d  |d< |jdd	d
� t ||¡ d S )Nr=   rC   rr  rä   r®   r±   r:   ú	c = a + bTry  r{  r}  r)   r)   r*   Ú!test_assignment_single_assign_newŒ  s
    z0TestOperations.test_assignment_single_assign_newc                 C  s\   t tj dd¡tdƒd�}| ¡ }d}|jddd� | ¡ }d|d	  |d
< t ||¡ d S )Nr=   rC   rr  rä   rB   z	a = 1 + bTry  r±   r®   r{  )rc   rË   r®   rh   r)   r)   r*   Ú+test_assignment_single_assign_local_overlap”  s    z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sd   t tj dd¡tdƒd�}d}|j ¡ }|jddd� ||j }t	j
||jd	d
� |jd ks`t‚d S )Nr=   rC   rr  rä   rB   rx  Try  FrÍ   )r   r5   rD   rF   rI  r®   r|  r`   r±   ra   r¸   ré   r    )rc   rË   r®   Zold_ari   r)   r)   r*   Ú"test_assignment_single_assign_namež  s    

z1TestOperations.test_assignment_single_assign_namec              	   C  sT   t tj dd¡tdƒd�}|jddd� d}tjt|d	�� | d
¡ W 5 Q R X d S )Nr=   rC   rr  rä   r  Try  z#can only assign a single expressionrX   z	c = a = b)	r   r5   rD   rF   rI  r`   r!   r]   rç   rê   r)   r)   r*   Útest_assignment_multiple_raises¨  s
    z.TestOperations.test_assignment_multiple_raisesc                 C  s\   t tj dd¡tdƒd�}| jdd|i|dd� | ¡ }|d	 |d
  |d< t ||¡ d S )Nr=   rC   rr  rä   zc = df.a + df.brË   T)ru   Útargetrz  r®   r±   r:   )	r   r5   rD   rF   rI  r`   r|  ra   rµ   r}  r)   r)   r*   Útest_assignment_explicit°  s
    z'TestOperations.test_assignment_explicitc                 C  s:   t dgdgdœƒ}| d¡}tdgƒ}tj||dd� d S )Né   iàÿÿÿ©r®   r±   za in [11, -32]TFrÍ   )r   r`   r   ra   r¸   rÏ   r)   r)   r*   Útest_column_in¸  s    

zTestOperations.test_column_inz%Unknown: Omitted test_ in name prior.r   c                 C  s`   t tj dd¡tdƒd�}|jddd�}|d k	s4t‚| ¡ }|d |d	  |d
< t 	||¡ d S )Nr=   rC   rr  rä   r  Fry  r®   r±   r:   )
r   r5   rD   rF   rI  r`   r    r|  ra   rµ   )rc   rË   Úactualrh   r)   r)   r*   Útest_assignment_not_inplaceÁ  s    z*TestOperations.test_assignment_not_inplacec              	   C  sæ   t dddgdddgdœƒ}| ¡ }|d |d	  |d
< |d
 |d	  |d< |jddd�}t ||¡ |d kspt‚|d d |d< |d d |d< |jddd�}t ||¡ |d k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 + bTry  r;   ú$
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrX   z(
            a = b + 2
            b - 2F)	r   r|  r`   ra   rµ   r    r!   r]   r2   )rc   rË   rh   Úanswerrd   r)   r)   r*   Útest_multi_line_expressionÍ  s0    üüüz)TestOperations.test_multi_line_expressionc                 C  s¢   t dddgdddgdœƒ}| ¡ }|d |d	  |d
< |d
 |d	  |d< |jddd�}t ||¡ |d d |d< |d d |d< |jddd�}t ||¡ d S )NrB   rC   r°   r/  r=   r]  r‡  r®   r±   r:   r‹  rŒ  Fry  r;   r�  )r   r|  r`   ra   rµ   r}  r)   r)   r*   Ú&test_multi_line_expression_not_inplaceò  s     üüz5TestOperations.test_multi_line_expression_not_inplacec                 C  sp   t dddgdddgdœƒ}| ¡ }d}|d	 | |d
< |d
 | |d< |jddd�}t ||¡ |d kslt‚d S )NrB   rC   r°   r/  r=   r]  r‡  r7  r®   r:   r‹  z?
        c = a * @local_var
        d = c + @local_var
        Try  ©r   r|  r`   ra   rµ   r    )rc   rË   rh   Z	local_varrŽ  r)   r)   r*   Ú)test_multi_line_expression_local_variable  s    ûz8TestOperations.test_multi_line_expression_local_variablec                 C  s€   t dddgdddgdœƒ}dd	„ }| ¡ }|d
 |ddƒ |d< |d |ddƒ |d< |jddd�}t ||¡ |d ks|t‚d S )NrB   rC   r°   r/  r=   r]  r‡  c                 S  s   |S r-   r)   r‡  r)   r)   r*   Ú
local_func!  s    zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcr®   r7  r:   r‹  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Try  r‘  ©rc   rË   r“  rh   rŽ  r)   r)   r*   Ú2test_multi_line_expression_callable_local_variable  s    ûzATestOperations.test_multi_line_expression_callable_local_variablec                 C  s„   t dddgdddgdœƒ}dd	„ }| ¡ }|d
 |ddd� |d< |d |ddd� |d< |jddd�}t ||¡ |d k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®   r7  )r±   r®   r:   r‹  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Try  r‘  r”  r)   r)   r*   Ú>test_multi_line_expression_callable_local_variable_with_kwargs1  s    ûzMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc              	   C  sZ   t dddgdddgdœƒ}| ¡ }d}tjt|d	�� | d
¡ W 5 Q R X t ||¡ d S )NrB   rC   r°   r/  r=   r]  r‡  rp  rX   za = 1)r   r|  r!   r]   r2   rÜ   ra   rµ   )rc   rË   Zdf_origrd   r)   r)   r*   Útest_assignment_in_queryE  s    z'TestOperations.test_assignment_in_queryc                 C  sx   t dddgdddgdœƒ}| ¡ }||d dk }|jd	d
d� t ||¡ i }ddi}| jd|d
d� t ||¡ d S )NrB   rC   r°   r/  r=   r]  r‡  r®   za == 2Try  ú	a = 1 + 2©r„  rz  )r   r|  rÜ   ra   rµ   r`   Zassert_dict_equalr}  r)   r)   r*   Útest_query_inplaceN  s    z!TestOperations.test_query_inplaceÚinvalid_targetrB   ÚcatrC   )rB   r°   c              	   C  sj   d}d}t jt|d�� | j||dd� W 5 Q R X t|dƒrft jt|d�� | j||dd� W 5 Q R X d S )Nz)Cannot assign expression output to targetr˜  rX   Tr™  r|  F)r!   r]   r2   r`   Úhasattr©rc   r›  rd   Ú
expressionr)   r)   r*   Útest_cannot_item_assign\  s    
z&TestOperations.test_cannot_item_assignc              	   C  s6   d}d}t jt|d�� | j||dd� W 5 Q R X d S )Nz"Cannot return a copy of the targetr˜  rX   Fr™  )r!   r]   r2   r`   rž  r)   r)   r*   Útest_cannot_copy_itemh  s    z$TestOperations.test_cannot_copy_itemr„  c              	   C  sN   d}| j ||dd�dkst‚d}tjt|d�� | j ||dd� W 5 Q R X d S )Nú1 + 2Fr™  r°   z0Cannot operate inplace if there is no assignmentrX   T)r`   r    r!   r]   r2   )rc   r„  rŸ  rd   r)   r)   r*   Útest_inplace_no_assignmentp  s
    z)TestOperations.test_inplace_no_assignmentc                 C  sR   t jddtddd�}|dk }| jdd|id�}|dk }t  ||¡ t  ||¡ d S )NrC   Úpr  ©r  r  r  r(  rË   r`  ©ra   r  r  r`   rµ   )rc   rË   r;   Úrr}   r)   r)   r*   Ú*test_basic_period_index_boolean_expressionz  s    z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sB   t jddtddd�}| jdd|id�}||dk  }t  ||¡ d S )	NrC   r¤  r  r¥  zdf[df < 2 + 3]rË   r`  r=   r¦  ©rc   rË   r§  r;   r)   r)   r*   Ú,test_basic_period_index_subscript_expression„  s    z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sR   t jddtddd�}| jdd|id�}|||dk  dk  |d  }t  ||¡ d S )NrC   r¤  r  r¥  zdf[df[df < 2] < 2] + df * 2rË   r`  r¦  r©  r)   r)   r*   Ú-test_nested_period_index_subscript_expressionŠ  s    z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sV   t tj dd¡ƒ}tddd�|d< | jdd|i||d�}|jd	k }tj||d
d� d S )Nr=   r°   z1/1/2012)ZperiodsÚdates1zdf.dates1 < 20130101rË   rš   Z20130101FrÍ   )	r   r5   rD   rF   r   r`   r¬  ra   r¸   )rc   r(   r1   rË   r›   rU  r)   r)   r*   Útest_date_boolean�  s    ü
z TestOperations.test_date_booleanc              	   C  s  |dk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`   rW  r!   r#   rò   r   ró   r[  r\  ra  rc  re  ri  rj  ro  rq  ru  rv  rw  r~  r€  r�  r‚  rƒ  r…  rˆ  r€   rŠ  r�  r�  r’  r•  r–  r—  rš  r5   r{   r   r¡  r£  r¨  rª  r«  r­  r®  r¯  r³  rµ  r)   r)   r)   r*   rK  ù  st   #

	
%	 

&
	
/ýþ
rK  c                   @  sÄ   e Zd Zdd„ Zejje dd�ej de	¡dd„ ƒƒZ
ej de¡dd	„ ƒZd
d„ Zdd„ Zej dejejfejejfejejfejejfejejejejd�g¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestMathc                 O  s    |  dd¡d |d< tj||ŽS rL  rN  rP  r)   r)   r*   r`   ÿ  s    zTestMath.evalz&Unary ops only implemented for numexprr   Úfnc              	   C  sh   t dtj d¡iƒ}|j}|› d�}|  |¡}tjdd�� tt|ƒ|ƒ}W 5 Q R X tj	||dd� d S )Nr®   r@   z(a)Úignore©ÚallFrÍ   )
r   r5   rD   rF   r®   r`   Úerrstater3  ra   r¸   )rc   r·  rË   r®   r   Úgotr¶   r)   r)   r*   Útest_unary_functions  s    

zTestMath.test_unary_functionsc              	   C  sz   t tj d¡tj d¡dœƒ}|j}|j}|› d�}|  |¡}tjdd�� tt|ƒ||ƒ}W 5 Q R X t	j
||dd� d S )Nr@   r‡  z(a, b)r¸  r¹  FrÍ   )r   r5   rD   rF   r®   r±   r`   r»  r3  ra   r„   )rc   r·  rË   r®   r±   r   r¼  r¶   r)   r)   r*   Útest_binary_functions  s    

zTestMath.test_binary_functionsc                 C  s`   t tj d¡tj d¡dœƒ}|jd||dd� |j}t t |j¡|j	¡}t
j||dd� d S )Nr@   r‡  ze = arctan2(sin(a), b)T©r(   r1   rz  FrÍ   )r   r5   rD   rF   r`   r;   Zarctan2Úsinr®   r±   ra   r¸   ©rc   r(   r1   rË   r¼  r¶   r)   r)   r*   Útest_df_use_case  s    üzTestMath.test_df_use_casec                 C  s\   t tj d¡tj d¡dœƒ}|jd||dd� |j}t |j|j ¡}t	j
||dd� d S )Nr@   r‡  ze = sin(a + b)Tr¿  FrÍ   )r   r5   rD   rF   r`   r;   rÀ  r®   r±   ra   r¸   rÁ  r)   r)   r*   Ú test_df_arithmetic_subexpression)  s
    z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper    c                 C  s€   t dtj d¡ |¡iƒ}|jj|ks*t‚|jd||dd� |j	}t 
|j¡}|j|jks^t‚||jkslt‚tj||dd� d S )Nr®   r@   z
b = sin(a)Tr¿  FrÍ   )r   r5   rD   rF   r¤   r®   rÈ   r    r`   r±   rÀ  ra   r¸   )rc   rÈ   Zexpect_dtyper(   r1   rË   r¼  r¶   r)   r)   r*   Útest_result_types0  s    zTestMath.test_result_typesc              	   C  sF   t dtj d¡iƒ}d}tjt|d�� |jd||d� W 5 Q R X d S )Nr®   r@   z#"mysin" is not a supported functionrX   zmysin(a)r\   )r   r5   rD   rF   r!   r]   r2   r`   ©rc   r(   r1   rË   rd   r)   r)   r*   Útest_undefined_funcI  s    zTestMath.test_undefined_funcc              	   C  sF   t dtj d¡iƒ}d}tjt|d�� |jd||d� W 5 Q R X d S )Nr®   r@   z1Function "sin" does not support keyword argumentsrX   zsin(x=a)r\   )r   r5   rD   rF   r!   r]   rw   r`   rÅ  r)   r)   r*   Útest_keyword_argP  s    zTestMath.test_keyword_argN)rï   rð   rñ   r`   r!   r#   r$   r   rò   r   r½  r   r¾  rÂ  rÃ  r5   Zint32rÛ   Zint64rù   r"   Z
complex128r%   rø   rÄ  rÆ  rÇ  r)   r)   r)   r*   r¶  þ  s.    ÿ





ûþ

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