U
    ÎZjk ã                   @  sº  U d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZd dl	Z
d dlZd dlmZmZmZ d dlm  mZ d dlmZmZmZmZ d dlZd dlmZmZmZ d dlmZ  d dl!m"Z" d d	l#m$Z$ d dl%m&  m'  m(Z( d d
l%m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 ej7dd„ e$D ƒd�dd„ ƒZ8ej7e(j9d�dd„ ƒZ:ej7e-�rve;e4ƒng d�dd„ ƒZ<dd„ Z=ej7e;e>dƒƒdddddgd�d d!„ ƒZ?e?Z@e?ZAG d"d#„ d#ƒZBd$d%„ ZCG d&d'„ d'ƒZDd(d)„ ZEG d*d+„ d+ƒZFG d,d-„ d-ƒZGG d.d/„ d/ƒZHe
j Id0¡ZJG d1d2„ d2ƒZKejLd3d4„ ƒZMejLejN Od5d6¡d7d8„ ƒƒZPejLd9d:„ ƒZQejLd;d<„ ƒZRe+e"jSe*d=œZTd>eUd?< ejN Ode$¡ejN OdeT¡d@dA„ ƒƒZVdBdC„ ZWdDdE„ ZXejN OdFdGdHdIg¡dJdK„ ƒZYdLdM„ ZZdNdO„ Z[dPdQ„ Z\dRdS„ Z]ejN OdTdU¡ejN Od!e^e_f¡ejN OdVe^e_f¡dWdX„ ƒƒƒZ`ejN OdYdZd[g¡d\d]„ ƒZad^d_„ Zbd`da„ ZcejN Odbdcddg¡dedf„ ƒZddgdh„ ZeejN Odbe6 f¡ ¡didj„ ƒZgejhdkdl„ ƒZiG dmdn„ dnƒZjdS )oé    )Úannotations)Úreduce)ÚproductN)ÚNumExprClobberingErrorÚPerformanceWarningÚUndefinedVariableError)Úis_boolÚis_floatÚis_list_likeÚ	is_scalar)Ú	DataFrameÚSeriesÚ
date_range)Úpytables)ÚENGINES)ÚBaseExprVisitorÚPandasExprVisitorÚPythonExprVisitor)ÚNUMEXPR_INSTALLEDÚUSE_NUMEXPR)ÚARITH_OPS_SYMSÚSPECIAL_CASE_ARITH_OPS_SYMSÚ_binary_math_opsÚ_binary_ops_dictÚ_unary_math_ops)ÚDEFAULT_GLOBALSc              	   c  sD   | ]<}t j|t jj|d kot dt› dt› �d�tjgd�V  qdS )Únumexprznumexpr enabled->z, installed->©Úreason©ZmarksN)ÚpytestÚparamÚmarkZskipifr   r   ÚtdÚskip_if_no_ne)Ú.0Úengine© r'   úe/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/pandas/tests/computation/test_eval.pyÚ	<genexpr>8   s   õþúþr)   )Úparamsc                 C  s   | j S ©N©r!   ©Úrequestr'   r'   r(   r&   7   s    r&   c                 C  s   | j S r+   r,   r-   r'   r'   r(   ÚparserK   s    r/   c                 C  s   | j S r+   r,   r-   r'   r'   r(   Úunary_fns_for_neP   s    r0   c              
   C  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_binU   s    
ÿr;   é   r   r   Z	SeriesNaNZDataFrameNaNÚfloat)r*   Úidsc                 C  sj   t tj dd¡ƒ}tj||dk< t tj dd¡ƒttj d¡ƒtddtjtjdgƒ|tj ¡ f}|| j S )Né
   r<   ç      à?é   é   )r   r4   ÚrandomÚrandr5   Úrandnr   r!   )r.   Znan_df1Úoptsr'   r'   r(   r6   d   s    ûr6   c                
   @  sH  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*ej dBdC¡dDdE„ ƒZ+dFdG„ Z,dHdI„ Z-dJdK„ Z.dLdM„ Z/dNdO„ Z0dPdQ„ Z1dRS )SÚTestEvalr7   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&   r/   )r    ÚraisesÚNotImplementedErrorÚpdÚevalr;   ÚtmÚassert_equal)Úselfr7   rP   rQ   r6   r8   r&   r/   ÚmsgÚexÚlhs_newÚrhs_newÚexpectedÚresultr'   r'   r(   Útest_complex_cmp_ops|   s    zTestEval.test_complex_cmp_opsÚcmp_opc           
   	   C  sê   |dk }|dk }|dk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   rR   ©Úinúnot inú&'(In|NotIn)' nodes are not implementedrW   úlhs ú rhsr[   ú|zxonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')bool(\]|')z'argument of type 'bool' is not iterable©r6   r8   ©r&   r/   Ú
local_dict)r    r\   r]   r^   r_   Újoinr
   Ú	TypeErrorr;   r`   ra   )
rb   rj   r6   r8   r&   r/   rc   rd   rg   rh   r'   r'   r(   Útest_simple_cmp_ops“   s2    üÿüzTestEval.test_simple_cmp_opsÚopc              	   C  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 )NrR   rk   rn   rW   z~(lhs rZ   r[   Úpandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   rl   rm   rq   zyonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')float(\]|')z(argument of type 'float' is not iterablerr   rs   c                 S  s   t  | g¡S r+   )r4   Úarray©Úxr'   r'   r(   Ú<lambda>â   ó    z2TestEval.test_compound_invert_op.<locals>.<lambda>)r    r\   r]   r^   r_   r	   r"   ÚxfailÚnodeÚ
add_markerru   r   rv   Úmapr;   r`   Úassert_almost_equal)rb   rx   r6   r8   r.   r&   r/   rc   rd   r"   Z
skip_theserg   rh   r'   r'   r(   Útest_compound_invert_op¶   sV    ÿþýüûÿüÿü
z TestEval.test_compound_invert_opc              	   C  sð   |}|dk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 )NrR   ro   ú mid rp   rV   rW   r[   ú mid and mid rY   ú mid) & (mid rZ   ú&)r    r\   r]   r^   r_   r;   r`   rƒ   )rb   r7   rP   r6   Úmidhsr8   r&   r/   ÚmidÚex1rc   re   rf   Úex2Úex3rg   rd   rh   r'   r'   r(   Útest_chained_cmp_opë   s"    zTestEval.test_chained_cmp_opÚarith1c              
   C  sè   d|› d�}t j|||d�}t||||ƒ}t ||¡ d|› d|› d�}t j|||d�}t||||ƒ}	z|	 |¡\}	}
W n tttfk
r”   Y d S X |dkrÈdd l	}| 
d|› d�¡}t |j|¡ ntd|› d�ƒ}t ||¡ d S )	Nro   rp   r[   z rhs r   r   znlhs z ghs)r^   r_   r;   r`   rƒ   Úalignr1   rv   ÚAttributeErrorr   ÚevaluateÚvalues)rb   r�   r6   r8   r&   r/   rd   rh   rg   ZnlhsZghsrJ   r'   r'   r(   Útest_binary_arith_ops  s"    zTestEval.test_binary_arith_opsc           	      C  s�   d}t j|||d�}|| }t ||¡ |dkrrdd l}| d¡}t|ttfƒr`t |j	|¡ qŒt || 
¡ ¡ nt|d||ƒ}t ||¡ d S )Nz	lhs % rhsr[   r   r   zexpected % rhsú%)r^   r_   r`   rƒ   r   r’   Ú
isinstancer   r   r“   Úitemr;   )	rb   r6   r8   r&   r/   rd   rh   rg   rJ   r'   r'   r(   Útest_modulus'  s    
zTestEval.test_modulusc           	   	   C  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 // rhsrR   r[   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'rW   rr   ©rt   r&   r/   )r^   r_   r`   ra   r    r\   rv   )	rb   r6   r8   r&   r/   rd   Úresrg   rc   r'   r'   r(   Útest_floor_division9  s    ÿüzTestEval.test_floor_divisionc           
   	   C  sÄ   d}t |d||ƒ}tj|||d�}t|ƒ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 differentrW   z(lhs ** rhs) ** rhs)r;   r^   r_   r   r–   Úcomplexr4   ZcomplexfloatingÚisnanr    r\   ÚAssertionErrorr`   Úassert_numpy_array_equalrƒ   )
rb   r6   r8   r&   r/   rd   rg   rh   rc   Úmiddler'   r'   r(   Útest_powM  s(    ÿþýüzTestEval.test_powc                 C  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‘   r4   rz   r^   r_   r`   rƒ   )rb   r6   r&   r/   Zelbrg   rh   r'   r'   r(   Úcheck_single_invert_opg  s    zTestEval.check_single_invert_opc              	   C  sª  d}t tj dd¡ƒ}|dk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<   rB   r   ú-couldn't find matching opcode for 'invert_dd'rW   r[   ú0ufunc 'invert' not supported for the input types©r<   rB   ©Úsizeú)couldn't find matching opcode for 'invertr@   ÚarA   ç       @é   )Úbr9   úunknown type objectú#bad operand type for unary ~: 'str')r   r4   rC   rE   r    r\   r]   r^   r_   rv   Úrandintr`   Úassert_frame_equalrD   r1   )rb   r&   r/   Úexprr6   rc   Úexpectrh   r'   r'   r(   Útest_frame_invertq  s8     
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§   rW   r[   r¨   rª   r¬   r@   r­   rA   r®   r±   r²   )r   r4   rC   rE   r    r\   r]   r^   r_   rv   r³   r`   Úassert_series_equalrD   r1   )rb   r&   r/   rµ   r6   rc   rh   r¶   r'   r'   r(   Útest_series_invertœ  s8    
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<   rB   r[   r©   rª   r@   r   ú*couldn't find matching opcode for 'neg_bb'rW   )r   r4   rC   rE   r^   r_   r`   r´   r³   rD   r    r\   r]   ©rb   r&   r/   rµ   r6   r¶   rh   rc   r'   r'   r(   Útest_frame_negateË  s"    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ª   r@   r   r»   rW   )r   r4   rC   rE   r^   r_   r`   r¸   r³   rD   r    r\   r]   r¼   r'   r'   r(   Útest_series_negateå  s"    zTestEval.test_series_negater6   r<   rB   r©   rª   r@   c                 C  s(   d}|}t j|||d�}t ||¡ d S ©Nz+lhsr[   )r^   r_   r`   r´   ©rb   r6   r&   r/   rµ   r¶   rh   r'   r'   r(   Útest_frame_posÿ  s    zTestEval.test_frame_posc                 C  s(   d}|}t j|||d�}t ||¡ d S r¿   )r^   r_   r`   r¸   rÀ   r'   r'   r(   Útest_series_pos  s    zTestEval.test_series_posc              	   C  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'rW   z~1.0r[   z-1.0©r/   r&   g      ð¿z+1.0ç      ð?z~1éþÿÿÿz-1éÿÿÿÿz+1rA   z~Truez~Falsez-Truez-Falser   z+Truez+False)r    r\   rv   r^   r_   rŸ   )rb   r&   r/   rc   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Å   rA   r   FiÛÿÿÿé%   iÚÿÿÿ)r4   rz   r^   r_   Zobject_r`   r    )rb   rh   rg   r'   r'   r(   Útest_unary_in_array4  s.    ÿúôñzTestEval.test_unary_in_arrayrÉ   rµ   zx < -0.1z-5 > xc                 C  s<   t dtjdg|d�iƒ}| |¡}|jt dg¡ks8t‚d S )Nr|   r   rÈ   F)r   r4   rz   r_   r“   rŸ   )rb   rÉ   rµ   Údfrš   r'   r'   r(   Útest_float_comparison_bin_opS  s    
z%TestEval.test_float_comparison_bin_oprd   )z1 or 2z1 and 2za and bza or bz1 or 2 and (3 + 2) > 3z2 * x > 2 or 1 and 2z2 * df > 3 and 1 or ac           	   	   C  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¯   rA   rB   ú;cannot evaluate scalar only bool ops|'BoolOp' nodes are notrW   r[   )	r4   rC   rE   r   r    r\   r]   r^   r_   )	rb   rd   r&   r/   r|   r­   r°   rÌ   rc   r'   r'   r(   Útest_disallow_scalar_bool_ops[  s
    z&TestEval.test_disallow_scalar_bool_opsc                 C  sN  d}t jd||d�}|dks 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 )NrA   r|   r[   g      ø?F)rA   )
r^   r_   rŸ   r   r   r4   rz   r`   r    Úshape)rb   r&   r/   r|   rh   r'   r'   r(   Útest_identicalo  s2    zTestEval.test_identicalc                 C  s$   d}t j|||d�}|dks t‚d S )Nz1 + 2 *         5 - 1 + 2 r[   é   ©r^   r_   rŸ   )rb   r&   r/   Úexprh   r'   r'   r(   Útest_line_continuation�  s    zTestEval.test_line_continuationc           	      C  sÎ   d}t j|||d�}t |¡}||ks*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 > rA   rB   úA == )r^   r_   r4   Úfloat64rŸ   r   ÚqueryÚemptyÚlocr`   r´   )	rb   r&   r/   rÔ   rh   rg   rÌ   ÚcutoffÚexactr'   r'   r(   Útest_float_truncation—  s     

zTestEval.test_float_truncationc              	   C  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 queryrW   z
class == 0Úlambdazlambda == 0)r   r    r\   ÚSyntaxErrorrÙ   ÚindexÚname©rb   rÌ   rc   r'   r'   r(   Útest_disallow_python_keywords­  s    z&TestEval.test_disallow_python_keywordsc                 C  s:   t  d¡dks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Ó   )rb   r'   r'   r(   Útest_true_false_logic¹  s    zTestEval.test_true_false_logicc                 C  sR   t ddiƒ}t |j d¡j› ¡s&t‚t |j d¡joD|j d¡j› ¡sNt‚d S )Nr­   Zhello)r   r^   r_   r2   rX   r­   rŸ   )rb   Úeventr'   r'   r(   Útest_and_logic_string_match¿  s    z$TestEval.test_and_logic_string_matchN)2Ú__name__Ú
__module__Ú__qualname__r    r"   Úparametrizerµ   ÚBOOL_OPS_SYMSri   ÚCMP_OPS_SYMSrw   r„   rŽ   ÚsortedÚsetr   Ú
differencer   r”   r˜   r›   r#   Úskip_if_windowsr¢   r¥   r·   r¹   r½   r¾   r   r4   rC   rE   r³   rD   rÁ   r   rÂ   rÇ   rË   Úfloat32rØ   rÍ   rÏ   rÑ   rÕ   rÞ   rè   ré   rë   r'   r'   r'   r(   rG   {   sz   ý
"
4 ÿ
 

+/úþ
úþ
þ
!rG   c                  O  s
   t j ¡ S r+   )r4   rC   rE   )Ú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 )ÚTestTypeCastingrx   ú+ú-Ú*rœ   ú/ÚdtÚ
left_right)rÌ   Ú3)r   rÌ   c                 C  sr   t jddt|d�}|\}}|› d|› d|› �}	tj|	||d�}
|jj|ksNt‚|
jj|ks^t‚t  |
t|	ƒ¡ d S )Nr<   r¯   )Ú
data_gen_frÉ   ú r[   )	r`   ÚmakeCustomDataframeÚfr^   r_   r“   rÉ   rŸ   r´   )rb   r&   r/   rx   rþ   rÿ   rÌ   ÚleftÚrightÚsrš   r'   r'   r(   Útest_binop_typecastingÎ  s    z&TestTypeCasting.test_binop_typecastingN)
rì   rí   rî   r    r"   rï   r4   rö   rØ   r  r'   r'   r'   r(   rù   Í  s   rù   c                  G  s4   t tt d¡| ƒƒ }ttjtdd„ | ƒƒ}|o2|S )NZis_monotonic_increasingc                 S  s   t | jjtjƒS r+   )Ú
issubclassrÉ   Útyper4   Z
datetime64r{   r'   r'   r(   r}   ä  r~   zshould_warn.<locals>.<lambda>)Úanyr‚   ÚoperatorÚ
attrgetterr   Úxor)r÷   Znot_monoZonly_one_dtr'   r'   r(   Úshould_warná  s     ÿr  c                	   @  sÐ  e Zd Z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[   éýÿÿÿ)r`   r  r  r^   r_   r´   )rb   r&   r/   r  rÌ   rš   r'   r'   r(   Útest_align_nested_unary_opî  s    z(TestAlignment.test_align_nested_unary_opÚlr_idx_typeÚrr_idx_typeÚ
c_idx_typec           	   
   C  s¦   t jdd��� t  dt¡ tjddt||d�}tjddt||d�}t|j|jƒ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ÚRuntimeWarningr`   r  r  r  rå   Úassert_produces_warningr^   r_   r´   )	rb   r&   r/   r  r  r  rÌ   Údf2rš   r'   r'   r(   Útest_basic_frame_alignmentô  s*        ÿ    ÿz(TestAlignment.test_basic_frame_alignmentr  c                 C  st   t jddt||d�}tjd||d�}t  ||dk ¡ ttjj	|j
Ž |j|jd�}tjd||d�}t  |||k ¡ d S )Nr?   r  údf < 2r[   rB   )rå   râ   zdf < df3)r`   r  r  r^   r_   r´   r   r4   rC   rE   rÐ   rå   râ   )rb   r&   r/   r  r  rÌ   rš   Údf3r'   r'   r(   Útest_frame_comparison  s        ÿz#TestAlignment.test_frame_comparisonÚr1Úc1Úr2Úc2c              
   C  sÂ   t jdd��¬ t  dt¡ tjddt||d�}tjddt||d�}tjddt||d�}	t|j|j|	jƒ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¯   rB   r  é   r<   zdf + df2 + df3r[   r  )rb   r&   r/   r(  r)  r*  r+  rÌ   r#  r&  rš   r'   r'   r(   Ú#test_medium_complex_frame_alignment  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!  r`   r  r  Úgetattrr   r4   rC   rE   r  rå   r"  r^   r_   Úaddr´   )rb   r&   r/   r.  r  r  rÌ   rå   r  rš   rg   r'   r'   r(   Ú!test_basic_frame_series_alignment1  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   ry   rå   r  r  z"Flaky column ordering when engine=z	, parser=z, index_name=z, r_idx_type=z, c_idx_type=F)r   Ústrictr?   é   r  r<   zs + dfr[   rþ   )r€   r�   r    r"   r   r`   r  r  r0  r   r4   rC   rE   r  rå   r"  r!  r^   r_   r1  r´   )rb   r.   r&   r/   r.  r  r  r   rÌ   rå   r  rš   rg   r'   r'   r(   Ú!test_basic_series_frame_alignmentK  s<    
ÿþýüû ÿ    ÿ
z/TestAlignment.test_basic_series_frame_alignmentrx   rú   rü   c              
   C  s   t jdd��� t  dt¡ tjddt||d�}t||ƒ}tt	j
 d¡|d d… ƒ}	d|› d�}
d	|› d
�}t|j|	jƒ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!  r`   r  r  r0  r   r4   rC   rE   r  rå   r"  r^   r_   r´   )rb   r&   r/   r.  rx   r  r  rÌ   rå   r  r6   r8   r­   r°   r'   r'   r(   Útest_series_frame_commutativityr  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<   rB   Tr  r  rå   râ   rÌ   r#  r  rþ   r   zdf2 + ser + dfr[   )r  r  r   r!  rC   Úchoicer`   r  r  r0  ÚlocalsÚgetr   r4   rE   r1  r  rå   r"  r^   r_   rÐ   rŸ   r´   )rb   r&   r/   r(  r)  r*  r+  ÚnÚm1Úm2r.  Úobj_namerÌ   r#  rå   ÚserZ	expected2rg   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   Fr/  r[   rR   rA   r   z_Alignment difference on axis 1 is larger than an order of magnitude on term 'df', by more than z.4gz; performance may suffer.)r   r4   rC   rE   r   r   r`   r"  r^   r_   ÚlenrŸ   r2   ÚmessageÚlog10r«   rÐ   )rb   r&   r/   rÌ   r  ÚseenZis_python_engineZwrnÚwrc   Zloggedrg   r'   r'   r(   Ú+test_performance_warning_for_poor_alignmentÂ  s:    ÿz9TestAlignment.test_performance_warning_for_poor_alignmentN)rì   rí   rî   Zindex_typesZlhs_index_typesr  r    r"   rï   r$  r'  r-  r2  Úlistr   Úfilterwarningsr5  r6  r?  rE  r'   r'   r'   r(   r  é  sJ   

þ
!,r  c                
   @  sZ  e Zd Zdd„ Zdd„ Zej dddg¡ej dddg¡ej d	ej	¡d
d„ ƒƒƒZ
ej dddg¡ej dddg¡ej d	ej	¡dd„ ƒƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zejjd2d3�d4d5„ ƒZd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&ej dDdEdFdEdGge' (g ¡dHg¡ej )dI¡dJdK„ ƒƒZ*ej dDdEdFdHg¡dLdM„ ƒZ+ej dNdEdFdEdGge' (g ¡dHdEdGig¡dOdP„ ƒZ,dQdR„ Z-dSdT„ Z.dUdV„ Z/dWdX„ Z0dYdZ„ Z1d[d\„ Z2ej d]d^d_d`g¡dadb„ ƒZ3ej dcdddeg¡dfdg„ ƒZ4dhS )iÚTestOperationsc                 O  s    |  dd¡d |d< tj||ŽS ©NÚlevelr   rA   ©Úpopr^   r_   ©rb   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 )NrR   rl   rm   c                   s   g | ]}|ˆ kr|‘qS r'   r'   ©r%   rx   ©Zexclude_arithr'   r(   Ú
<listcomp>ý  s   þz8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s   | ]}|d kr|V  qdS )z//Nr'   rN  r'   r'   r(   r)     s      z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)rk   z&argument of type 'int' is not iterablerW   r[   rA   r|   r™   )
rµ   r   rñ   r    r\   rv   r^   r_   r;   rŸ   )rb   r&   r/   Z	arith_opsÚopsrx   rd   rŒ   r�   rc   Úexpecr|   Úyr'   rO  r(   Útest_simple_arith_opsø  s0    

þz$TestOperations.test_simple_arith_opsr8   TFr6   rx   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  rR   rS   rV   rW   ©r/   r    r\   r]   r_   rŸ   ©rb   r8   r6   rx   rd   rc   rš   rÔ   r'   r'   r(   Útest_simple_bool_ops  s    
z#TestOperations.test_simple_bool_opsc              	   C  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 rU  rV  rW  r'   r'   r(   Útest_bool_ops_with_constants+  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 evalrW   úx + y©r|   rS  ©rt   )r4   rC   rE   r   r    r\   r]   r_   )rb   r|   rS  rc   r'   r'   r(   Útest_4d_ndarray_fails;  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |   d¡}|dkst‚d S )NÚ1rA   )r_   rŸ   )rb   r|   r'   r'   r(   Útest_constantB  s    
zTestOperations.test_constantc                 C  s4   t tj dd¡ƒ}| jdd|id�}t ||¡ d S )Nr?   rB   rÌ   r]  ©r   r4   rC   rE   r_   r`   r´   )rb   rÌ   r#  r'   r'   r(   Útest_single_variableF  s    z#TestOperations.test_single_variablec              	   C  sX  t  dg¡}d}t t¡� | j|dd�}W 5 Q R X t |t  dg¡¡ t t¡� | j|dd�}W 5 Q R X t |t  dg¡¡ t t¡� | jddd�}W 5 Q R X d}||ks´t‚t t¡� | jddd�}W 5 Q R X d}||ksèt‚t t¡� | jd	dd�}W 5 Q R X d}||k�st‚t t¡� | jd	dd�}W 5 Q R X d}||k�sTt‚d S )
NrA   zs / 1F)ÚtruedivrÄ   Tz1 / 2r@   zs / 2)r4   rz   r`   r"  ÚFutureWarningr_   r    rŸ   )rb   r  rd   rš   rR  r'   r'   r(   Útest_truedivK  s0    zTestOperations.test_truedivc              	   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 definedrW   zdf[x > 2] > 2)r   r4   rC   rE   r    r\   Ú	NameErrorr_   ©rb   rÌ   r'   r'   r(   Ú&test_failing_subscript_with_name_errorm  s    z5TestOperations.test_failing_subscript_with_name_errorc                 C  sD   t tj dd¡ƒ}| jdd|id�}|d |dk }t ||¡ d S )Nr<   r¯   z(df + 1)[df > 2]rÌ   r]  rA   rB   ra  ©rb   rÌ   rh   rg   r'   r'   r(   Útest_lhs_expression_subscriptr  s    z,TestOperations.test_lhs_expression_subscriptc                 C  s¦   t tj dd¡tdƒd�}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t||	ƒD ]"\}
}t	 
|| j|
d	|id
�¡ q~d S )Nr<   r¯   Úabcrá   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   rÌ   r]  )r   r4   rC   rE   rF  r­   r°   r9   Úzipr`   r¸   r_   )rb   rÌ   Úexpr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3ZexprsZexpecsr:   rR  r'   r'   r(   Útest_attr_expressionx  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¯   rl  rá   zdf = df2ú%cannot assign without a target objectrW   )rÌ   r#  r]  )	r   r4   rC   rE   rF  r    r\   r1   r_   )rb   rÌ   r#  rn  rc   r'   r'   r(   Útest_assignment_fails…  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<   rB   Úabrá   úinvalid syntaxrW   zd c = a + b©	r   r4   rC   rE   rF  r    r\   rä   r_   rh  r'   r'   r(   Ú%test_assignment_column_multiple_raise�  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<   rB   rr  rá   z5left hand side of an assignment must be a single namerW   zd,c = a + brt  rç   r'   r'   r(   Ú%test_assignment_column_invalid_assign“  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<   rB   rr  rá   zcannot assign to function callrW   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<   rB   rr  rá   r­   r°   ú	a = a + bT©Úinplace©	r   r4   rC   rE   rF  Úcopyr_   r`   r´   ©rb   rÌ   rg   r'   r'   r(   Ú&test_assignment_single_assign_existing   s
    z5TestOperations.test_assignment_single_assign_existingc                 C  sT   t tj dd¡tdƒd�}| ¡ }|d |d  |d< |jdd	d
� t ||¡ d S )Nr<   rB   rr  rá   r­   r°   r9   ú	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<   rB   rr  rá   rA   z	a = 1 + bTry  r°   r­   r{  )rb   rÌ   r­   rg   r'   r'   r(   Ú+test_assignment_single_assign_local_overlap°  s    z:TestOperations.test_assignment_single_assign_local_overlapc                 C  sd   t tj dd¡tdƒd�}d}|j ¡ }|jddd� ||j }t	j
||jd	d
� |jd ks`t‚d S )Nr<   rB   rr  rá   rA   rx  Try  F©Zcheck_names)r   r4   rC   rE   rF  r­   r|  r_   r°   r`   r¸   ræ   rŸ   )rb   rÌ   r­   Zold_arh   r'   r'   r(   Ú"test_assignment_single_assign_nameº  s    

z1TestOperations.test_assignment_single_assign_namec              	   C  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<   rB   rr  rá   r  Try  z#can only assign a single expressionrW   z	c = a = b)	r   r4   rC   rE   rF  r_   r    r\   rä   rç   r'   r'   r(   Útest_assignment_multiple_raisesÄ  s
    z.TestOperations.test_assignment_multiple_raisesc                 C  s\   t tj dd¡tdƒd�}| jdd|i|dd� | ¡ }|d	 |d
  |d< t ||¡ d S )Nr<   rB   rr  rá   zc = df.a + df.brÌ   T)rt   Útargetrz  r­   r°   r9   )	r   r4   rC   rE   rF  r_   r|  r`   r´   r}  r'   r'   r(   Útest_assignment_explicitÌ  s
    z'TestOperations.test_assignment_explicitc                 C  s:   t dgdgdœƒ}| d¡}tdgƒ}tj||dd� d S )Né   iàÿÿÿ©r­   r°   za in [11, -32]TFr‚  )r   r_   r   r`   r¸   rj  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<   rB   rr  rá   r  Fry  r­   r°   r9   )
r   r4   rC   rE   rF  r_   rŸ   r|  r`   r´   )rb   rÌ   Úactualrg   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 )NrA   rB   r¯   r,  r<   rZ  rˆ  r­   r°   r9   Údú$
        c = a + b
        d = c + bTry  r:   ú$
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrW   z(
            a = b + 2
            b - 2F)	r   r|  r_   r`   r´   rŸ   r    r\   r1   )rb   rÌ   rg   Úanswerrc   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 )NrA   rB   r¯   r,  r<   rZ  rˆ  r­   r°   r9   rŒ  r�  Fry  r:   rŽ  )r   r|  r_   r`   r´   r}  r'   r'   r(   Ú&test_multi_line_expression_not_inplace  s     üüz5TestOperations.test_multi_line_expression_not_inplacec                 C  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 )NrA   rB   r¯   r,  r<   rZ  rˆ  r4  r­   r9   rŒ  z?
        c = a * @local_var
        d = c + @local_var
        Try  ©r   r|  r_   r`   r´   rŸ   )rb   rÌ   rg   Z	local_varr�  r'   r'   r(   Ú)test_multi_line_expression_local_variable'  s    ûz8TestOperations.test_multi_line_expression_local_variablec                 C  s€   t 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 )NrA   rB   r¯   r,  r<   rZ  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­   r4  r9   rŒ  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Try  r’  ©rb   rÌ   r”  rg   r�  r'   r'   r(   Ú2test_multi_line_expression_callable_local_variable9  s    ûzATestOperations.test_multi_line_expression_callable_local_variablec                 C  s„   t 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 )NrA   rB   r¯   r,  r<   rZ  rˆ  c                 S  s   |S r+   r'   rˆ  r'   r'   r(   r”  Q  s    zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcr­   r4  )r°   r­   r9   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_kwargsM  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 )NrA   rB   r¯   r,  r<   rZ  rˆ  rp  rW   za = 1)r   r|  r    r\   r1   rÙ   r`   r´   )rb   rÌ   Zdf_origrc   r'   r'   r(   Útest_assignment_in_querya  s    z'TestOperations.test_assignment_in_queryc                 C  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 )NrA   rB   r¯   r,  r<   rZ  rˆ  r­   za == 2Try  ú	a = 1 + 2©r…  rz  )r   r|  rÙ   r`   r´   r_   Zassert_dict_equalr}  r'   r'   r(   Útest_query_inplacej  s    z!TestOperations.test_query_inplaceÚinvalid_targetrA   ÚcatrB   )rA   r¯   zignore::FutureWarningc              	   C  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™  rW   Trš  r|  F)r    r\   r1   r_   Úhasattr©rb   rœ  rc   Ú
expressionr'   r'   r(   Útest_cannot_item_assignx  s    
z&TestOperations.test_cannot_item_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™  rW   Frš  )r    r\   r1   r_   rŸ  r'   r'   r(   Útest_cannot_copy_item…  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 assignmentrW   T)r_   rŸ   r    r\   r1   )rb   r…  r   rc   r'   r'   r(   Útest_inplace_no_assignment�  s
    z)TestOperations.test_inplace_no_assignmentc                 C  sR   t jddtddd�}|dk }| jdd|id�}|dk }t  ||¡ t  ||¡ d S )NrB   Úpr  ©r  r  r  r%  rÌ   r]  ©r`   r  r  r_   r´   )rb   rÌ   r:   Úrr|   r'   r'   r(   Ú*test_basic_period_index_boolean_expression—  s    z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sB   t jddtddd�}| jdd|id�}||dk  }t  ||¡ d S )	NrB   r¥  r  r¦  zdf[df < 2 + 3]rÌ   r]  r<   r§  ©rb   rÌ   r¨  r:   r'   r'   r(   Ú,test_basic_period_index_subscript_expression¡  s    z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sR   t jddtddd�}| jdd|id�}|||dk  dk  |d  }t  ||¡ d S )NrB   r¥  r  r¦  zdf[df[df < 2] < 2] + df * 2rÌ   r]  r§  rª  r'   r'   r(   Ú-test_nested_period_index_subscript_expression§  s    z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sV   t tj dd¡ƒ}tddd�|d< | jdd|i||d�}|jd	k }tj||d
d� d S )Nr<   r¯   z1/1/2012)ZperiodsÚdates1zdf.dates1 < 20130101rÌ   r™   Z20130101Fr‚  )	r   r4   rC   rE   r   r_   r­  r`   r¸   )rb   r&   r/   rÌ   rš   rR  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 )NrR   z1 in [1, 2]r[   z2 in (1, 2)z3 in (1, 2)z3 not in (1, 2)z[3] not in (1, 2)z[3] in ([3], 2)z[[3]] in [[[3]], 2]z(3,) in [(3,), 2]z(3,) not in [(3,), 2]z[(3,)] in [[(3,)], 2]z'In' nodes are not implementedrW   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))r^   r_   rŸ   r    r\   r]   )rb   r&   r/   rš   rc   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 )NrA   z * Z!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar[   )ru   r^   r_   rŸ   )rb   r&   r/   r­   rµ   rg   rš   r'   r'   r(   Útest_check_many_exprsè  s
    
z$TestOperations.test_check_many_exprsrµ   zdf > 2 and df > 3zdf > 2 or df > 3z
not df > 2c              	   C  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¯   rR   rV   Únotú'Not' nodes are not implementedrW   rÌ   )rt   r/   r&   ©	r   r4   rC   rE   r    r\   r]   r^   r_   )rb   rµ   r&   r/   rÌ   rc   r'   r'   r(   Útest_fails_and_or_notï  s$    	üüz$TestOperations.test_fails_and_or_notÚcharrq   rˆ   c              	   C  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)rR   z$cannot evaluate scalar only bool opsrW   rÃ   r³  )rb   rµ  r&   r/   rÌ   rd   rc   r'   r'   r(   Útest_fails_ampersand_pipe  s    z(TestOperations.test_fails_ampersand_pipeN)5rì   rí   rî   r_   rT  r    r"   rï   rµ   rð   rX  rY  r^  r`  rb  re  ri  rk  ro  rq  ru  rv  rw  r~  r€  r�  rƒ  r„  r†  r‰  r   r‹  r�  r‘  r“  r–  r—  r˜  r›  r4   rz   rG  r¡  r¢  r¤  r©  r«  r¬  r®  r¯  r°  r´  r¶  r'   r'   r'   r(   rH  ó  sx   #"

	
%	 

&
	
/ýþ
rH  c                   @  s¤   e Zd Zdd„ Zdd„ Zej de¡dd„ ƒZ	dd	„ Z
d
d„ Zej dejejfejejfejejfejejfejejejejd�g¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestMathc                 O  s    |  dd¡d |d< tj||ŽS rI  rK  rM  r'   r'   r(   r_     s    zTestMath.evalc              	   C  sl   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   r4   rC   rE   r­   r_   Úerrstater0  r`   r¸   )rb   r0   rÌ   r­   Úfnrµ   Úgotr¶   r'   r'   r(   Útest_unary_functions   s    

zTestMath.test_unary_functionsr¼  c              	   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   r4   rC   rE   r­   r°   r_   r»  r0  r`   rƒ   )rb   r¼  rÌ   r­   r°   rµ   r½  r¶   r'   r'   r(   Útest_binary_functions,  s    

zTestMath.test_binary_functionsc                 C  s`   t tj d¡tj d¡dœƒ}|jd||dd� |j}t t |j¡|j	¡}t
j||dd� d S )Nr?   rˆ  ze = arctan2(sin(a), b)T©r&   r/   rz  Fr‚  )r   r4   rC   rE   r_   r:   Zarctan2Úsinr­   r°   r`   r¸   ©rb   r&   r/   rÌ   r½  r¶   r'   r'   r(   Útest_df_use_case8  s    üzTestMath.test_df_use_casec                 C  s\   t tj d¡tj d¡dœƒ}|jd||dd� |j}t |j|j ¡}t	j
||dd� d S )Nr?   rˆ  ze = sin(a + b)TrÀ  Fr‚  )r   r4   rC   rE   r_   r:   rÁ  r­   r°   r`   r¸   rÂ  r'   r'   r(   Ú test_df_arithmetic_subexpressionD  s
    z)TestMath.test_df_arithmetic_subexpressionzdtype, expect_dtyper   c                 C  s€   t dtj d¡ |¡iƒ}|jj|ks*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   r4   rC   rE   r£   r­   rÉ   rŸ   r_   r°   rÁ  r`   r¸   )rb   rÉ   Zexpect_dtyper&   r/   rÌ   r½  r¶   r'   r'   r(   Útest_result_typesK  s    zTestMath.test_result_typesc              	   C  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 functionrW   zmysin(a)r[   )r   r4   rC   rE   r    r\   r1   r_   ©rb   r&   r/   rÌ   rc   r'   r'   r(   Útest_undefined_funcd  s    zTestMath.test_undefined_funcc              	   C  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 argumentsrW   zsin(x=a)r[   )r   r4   rC   rE   r    r\   rv   r_   rÆ  r'   r'   r(   Útest_keyword_argk  s    zTestMath.test_keyword_argN)rì   rí   rî   r_   r¾  r    r"   rï   r   r¿  rÃ  rÄ  r4   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 * 2rB   r[   )r`   r    Ú_var_sr^   r_   )rb   r&   r/   r:   r'   r'   r(   Útest_global_scopew  s
     ÿzTestScope.test_global_scopec                 C  sD   d}t ƒ  ¡ }tjd|||d� t ƒ  ¡ }| d¡ ||ks@t‚d S )NrA   úx + 1r™   Úlcls)r8  r|  r^   r_   rL  rŸ   )rb   r&   r/   r|   rÎ  Zlcls2r'   r'   r(   Útest_no_new_locals}  s    


zTestScope.test_no_new_localsc                 C  s8   d}t ƒ  ¡ }tjd||d� t ƒ  ¡ }||ks4t‚d S )NrA   rÍ  r[   )Úglobalsr|  r^   r_   rŸ   )rb   r&   r/   r|   ZgblsZgbls2r'   r'   r(   Útest_no_new_globals…  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 )NrA   rf  rW   rÍ  rs   ©r    r\   r   r^   r_   )rb   r&   r/   r|   rc   r'   r'   r(   Útest_empty_localsŒ  s    zTestScope.test_empty_localsc              	   C  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Ê  rW   )r&   r/   Zglobal_dictrÒ  )rb   r&   r/   rc   r:   r'   r'   r(   Útest_empty_globals“  s    zTestScope.test_empty_globalsN)rì   rí   rî   rÌ  rÏ  rÑ  rÓ  rÔ  r'   r'   r'   r(   rÉ  v  s
   rÉ  c               	   C  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' passedrW   r[  rA   rB   r\  Úasdf)rt   r&   ©r    r\   ÚKeyErrorr^   r_   ©rc   r'   r'   r(   Útest_invalid_engine›  s    rÙ  )Úuse_numexprrg   ))Tr   )FrR   c              	   C  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Ú  rg   rÛ  rh   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Ü  FTrA   rB   r¯   r,  r<   rZ  )rÖ   ÚBz
A.isnull())rå   )r^   rÝ  r   rÙ   r`   r´   )rÌ   rh   rg   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' passedrW   r[  rA   rB   r\  rÕ  )rt   r/   rÖ  rØ  r'   r'   r(   Útest_invalid_parser¿  s    rá  )rR   r   ry   z dict[str, type[BaseExprVisitor]]Ú_parsersc              
   C  sN   t | }|d| |ƒ}|jD ].}d}tjt|d�� t||ƒƒ  W 5 Q R X qd S )NrÍ  znodes are not implementedrW   )râ  Zunsupported_nodesr    r\   r]   r0  )r&   r/   ZVisitorClassÚinstrQ  rc   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  rW   r[   ©r    r\   rä   r^   r_   )r&   r/   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 definedrW   r[   )r    r\   rg  r^   r_   )r&   r/   r:   rc   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©rA   rB   ry   zThe '@' prefix is onlyrW   r[   zThe '@' prefix is notrå  )r&   r/   rè  r­   r°   r'   r'   r(   Ú%test_invalid_local_variable_referenceç  s    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 .+rW   zsin + dotted_liner[   )r    r\   r   r^   r_   rŸ   )r&   r/   rÁ  Zdotted_linerc   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 .+rW   r£  )Ú	resolversr&   r/   )r    r\   rv   r^   r_   )r&   r/   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 stringrW   Ú r[   ©r    r\   r1   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 allowedrW   z1 + 1; 2 + 2r[   rå  r[   r'   r'   r(   Ú$test_more_than_one_expression_raises
  s    rò  ÚcmprS   r8   c              
   C  sª   t dd„ ttjji}||  ƒ }||  ƒ } || ƒ }d|› d|› d�}d|› d|› d�}d|› d|› d	�}	|||	fD ]2}
d
}tjt|d�� tj	|
||d� W 5 Q R X qrd S )Nc                   S  s   t j d¡S )Nr?   )r4   rC   r³   r'   r'   r'   r(   r}     r~   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>ro   r…   rp   r†   rY   r‡   rZ   rÎ   rW   r[   )
Úintr=   r4   rC   rE   r    r\   r]   r^   r_   )r6   ró  r8   r&   r/   ÚgenrŠ   r‹   rŒ   r�   rd   rc   r'   r'   r(   Útest_bool_ops_fails_on_scalars  s    


rö  Úotherz'x'z...c                 C  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°   r9   r×   F©ræ   )r   r_   r   r   ræ   r`   r¸   )r÷  rÌ   rh   rg   r'   r'   r(   Útest_equals_various"  s    rù  c                 C  s*   d}t j}tj|| |d�}||ks&t‚d S )Nzinf + 1r[   )r4   Úinfr^   r_   rŸ   )r&   r/   r  rg   rh   r'   r'   r(   Útest_inf4  s    rû  c              	   C  s¤   d}t  t¡�}tjd| |dd� W 5 Q R X t|ƒdks<t‚|t|d jƒksRt‚t  t¡�}tjd| |dd� W 5 Q R X t|ƒdksŠt‚|t|d jƒks t‚d S )Nz0The `truediv` parameter in pd.eval is deprecatedz1+1T)r&   r/   rc  rA   r   F)	r`   r"  rd  r^   r_   r@  rŸ   r2   rA  )r&   r/   rX   Úmr'   r'   r(   Útest_truediv_deprecated;  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<   rB   r°   rá   ú`z` > 5)r&   )r   r4   rC   rE   rÙ   r`   r´   )r&   rþ  rÌ   rg   Zquery_stringrh   r'   r'   r(   Útest_query_tokenL  s
    r   c              	   C  s    t ddgddggddgd�}||jdk  }|jd| |d	�}t ||¡ |d
kr€d}tjt|d�� |jd| |d	� W 5 Q R X n|jd| |d	�}t ||¡ d S )Nr   r?   rA   r  r�  Úcountrá   z
~(cat > 0)r[   rR   r²  rW   znot (cat > 0))r   r�  rÙ   r`   r´   r    r\   r]   )r&   r/   rÌ   rg   rh   rc   r'   r'   r(   Útest_negate_lt_eq_leV  s    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?   rB   rª   Zcol1rá   rZ  z>6)r€   r�   r    r"   r   r×  r   r4   rC   r³   rÙ   r`   r´   )r.   rþ  rÌ   rg   rh   r'   r'   r(   Ú test_eval_no_support_column_namef  s    þÿr  c                 C  sÎ   t 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 )NrA   rB   r¯   r,  r<   rZ  r4  é   é	   )rÖ   rß  ÚCrÖ   z	A = B + CTry  r‡  é   é   rø  )r   r_   r`   r´   r¸   r   )Zusing_copy_on_writerÌ   Zresult_viewr>  rg   r'   r'   r(   Útest_set_inplace{  s    ""r  c                   @  s0   e Zd Zej ddddddgdg¡dd„ ƒZd	S )
ÚTestValidateÚvaluerA   r  rB   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 typerW   z2+2ry  rð  )rb   r  rc   r'   r'   r(   Útest_validate_bool_args�  s    z$TestValidate.test_validate_bool_argsN)rì   rí   rî   r    r"   rï   r  r'   r'   r'   r(   r  �  s   r  )kÚ
__future__r   Ú	functoolsr   Ú	itertoolsr   r  rC   r  Únumpyr4   r    Zpandas.errorsr   r   r   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr#   Zpandas.core.dtypes.commonr   r	   r
   r   ry   r^   r   r   r   Zpandas._testingZ_testingr`   Zpandas.core.computationr   Zpandas.core.computation.enginesr   Zpandas.core.computation.exprÚcoreZcomputationrµ   r   r   r   Z#pandas.core.computation.expressionsr   r   Zpandas.core.computation.opsr   r   r   r   r   Zpandas.core.computation.scoper   Zfixturer&   ZPARSERSr/   rF  r0   r;   Úranger6   r8   r‰   rG   r  rù   r  r  rH  r·  rE   rË  rÉ  r$   rÙ  r"   rï   rÞ  rà  rá  ZPyTablesExprVisitorrâ  Ú__annotations__rä  ræ  rç  rê  rë  rî  rñ  rò  rô  r=   rö  rù  rû  rý  r   r  Úkeysr  Z&skip_array_manager_not_yet_implementedr  r  r'   r'   r'   r(   Ú<module>   sÚ    ôÿ



þ
    O      ,X%
þ	

ý
þþ

	þ

