a
    oÝEb› ã                   @  s°  U d dl mZ d dlmZ d dlmZ d dlZd dlZd dlZ	d dl
Z
d dlmZ d dlm  mZ d dlmZmZmZmZ d dlZd dlmZmZmZ d dlmZ d dlmZ d d	l m!Z!m"Z" d dl#m$  m%  m&Z& d d
l#m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 e
j3dd„ e!D ƒd�dd„ ƒZ4e
j3e&j5d�dd„ ƒZ6dd„ Z7e
j3e7ƒ d�dd„ ƒZ8dd„ Z9dd„ Z:dd„ Z;dd„ Z<d d!„ Z=d"d#„ Z>e?e@e.ƒ Ae/¡ƒZBe
j3eCeDd$ƒƒg d%¢d&�d'd(„ ƒZEeEZFeEZGG d)d*„ d*ƒZHd+d,„ ZIG d-d.„ d.ƒZJd/d0„ ZKd1d2„ ZLG d3d4„ d4ƒZMG d5d6„ d6ƒZNG d7d8„ d8ƒZOe	jP Qd9¡ZRG d:d;„ d;ƒZSejTd<d=„ ƒZUejTe
jV Wd>d?¡d@dA„ ƒƒZXejTdBdC„ ƒZYejTdDdE„ ƒZZe)ej[e(dFœZ\dGe]dH< e
jV Wde!¡e
jV Wde\¡dIdJ„ ƒƒZ^dKdL„ Z_dMdN„ Z`e
jV WdOg dP¢¡dQdR„ ƒZadSdT„ ZbdUdV„ ZcdWdX„ ZddYdZ„ Zee
jV Wd[d\¡e
jV Wd(efegf¡e
jV Wd]efegf¡d^d_„ ƒƒƒZhe
jV Wd`dadbg¡dcdd„ ƒZidedf„ Zjdgdh„ Zke
jV Wdidjdkg¡dldm„ ƒZldndo„ ZmG dpdq„ dqƒZndS )ré    )Úannotations)Úreduce)ÚproductN)ÚPerformanceWarning)Úis_boolÚis_floatÚis_list_likeÚ	is_scalar)Ú	DataFrameÚSeriesÚ
date_range)Úpytables)ÚENGINESÚNumExprClobberingError)ÚBaseExprVisitorÚPandasExprVisitorÚPythonExprVisitor)ÚNUMEXPR_INSTALLEDÚUSE_NUMEXPR)ÚARITH_OPS_SYMSÚSPECIAL_CASE_ARITH_OPS_SYMSÚ_binary_math_opsÚ_binary_ops_dictÚ_unary_math_opsc              	   c  sD   | ]<}t j|t jj|d kot dt› dt› �d�tjgd�V  qdS )Únumexprznumexpr enabled->z, installed->©Úreason)ZmarksN)ÚpytestÚparamÚmarkZskipifr   r   ÚtdÚskip_if_no_ne©Ú.0Úengine© r%   úb/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/tests/computation/test_eval.pyÚ	<genexpr>5   s   õÿþúþr'   )Úparamsc                 C  s   | j S ©N©r   ©Úrequestr%   r%   r&   r$   4   s    r$   c                 C  s   | j S r)   r*   r+   r%   r%   r&   ÚparserH   s    r-   c                   C  s   t rttƒS g S r)   )r   Úlistr   r%   r%   r%   r&   Ú_get_unary_fns_for_neM   s    r/   c                 C  s   | j S r)   r*   r+   r%   r%   r&   Úunary_fns_for_neQ   s    r0   c                 C  s
   t |  jS r)   )r   Zhas_neg_frac©r$   r%   r%   r&   Úengine_has_neg_fracV   s    r2   c              
   C  sn   t | }t|ƒrdz|| |ƒW S  tyb } z.t|ƒ d¡rLtjW  Y d }~S ‚ W Y d }~n
d }~0 0 || |ƒS )Nz6negative number cannot be raised to a fractional power)r   r2   Ú
ValueErrorÚstrÚ
startswithÚnpÚnan)ÚlhsÚcmp1Úrhsr$   ÚcÚer%   r%   r&   Ú_eval_single_binZ   s    ÿr=   c                 C  s@   t | tƒr t |tjƒr |jdkp>t |tƒo>t | tjƒo>| jdkS )Né   )Ú
isinstancer   r6   ÚndarrayÚndim©r8   r:   r%   r%   r&   Ú_series_and_2d_ndarrayh   s    ÿþrC   c                 C  s(   t | tƒrt |tƒp&t |tƒo&t | tƒS r)   )r?   r   r
   rB   r%   r%   r&   Ú_series_and_framen   s    ÿrD   c                 C  s   t | tƒot |tjjjƒS r)   )r?   ÚboolÚpdÚcoreZgenericZNDFramerB   r%   r%   r&   Ú_bool_and_framet   s    rH   c                 C  s   t |ttjfƒot | ¡S r)   )r?   Úcomplexr6   ZcomplexfloatingÚisnan)ÚresultÚexpectedr%   r%   r&   Ú_is_py3_complex_incompatx   s    rM   é   )r
   r   Z	SeriesNaNZDataFrameNaNÚfloat)r(   Úidsc                 C  sj   t tj dd¡ƒ}tj||dk< t tj dd¡ƒttj d¡ƒtddtjtjdgƒ|tj ¡ f}|| j S )Né
   rN   ç      à?r>   é   )r
   r6   ÚrandomÚrandr7   Úrandnr   r   )r,   Znan_df1Úoptsr%   r%   r&   r8   €   s    ûr8   c                
   @  sN  e Zd Zejdd�dd„ ƒZedd„ ƒZedd„ ƒZ	ej
jd	g d
¢g d¢d�ej
jdddgddgd�ej
 dej¡dd„ ƒƒƒZej
 dej¡dd„ ƒZej
 dej¡dd„ ƒZej
 d	ddg¡ej
 dddg¡dd„ ƒƒZdd„ Zdd „ Zd!d"„ Zej
 d#e¡d$d%„ ƒZd&d'„ Zd(d)„ Zd*d+„ Zejd,d-„ ƒZd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d6d7„ Z"d8d9„ Z#ej
 d:e$e%j& 'd;d<¡ƒe$e%j&j(d;d=d>�ƒe$e%j& )d;d<¡d?kƒg¡d@dA„ ƒZ*ej
 d:e+e%j& 'd;¡ƒe+e%j&j(d;d;d>�ƒe+e%j& )d;¡d?kƒg¡dBdC„ ƒZ,dDdE„ Z-dFdG„ Z.ej
 dHe%j/e%j0g¡dIdJ„ ƒZ1dKdL„ Z2dMdN„ Z3dOdP„ Z4dQdR„ Z5dSdT„ Z6dUS )VÚTestEvalT©Zautousec                 C  s   || _ || _d S r)   ©r$   r-   ©Úselfr$   r-   r%   r%   r&   Úset_engine_parser_attrs˜   s    z TestEval.set_engine_parser_attrsc                 C  s   dd l }|| _d S )Nr   )r   Úne)Úclsr^   r%   r%   r&   Úsetup_classž   s    zTestEval.setup_classc                   s   ‡ fdd„t D ƒS )Nc                 3  s   | ]}|ˆ j kr|V  qd S r)   r1   r"   ©r\   r%   r&   r'   ¦   ó    z+TestEval.current_engines.<locals>.<genexpr>)r   ra   r%   ra   r&   Úcurrent_engines¤   s    zTestEval.current_enginesr9   )z!=z==z<=z>=ú<ú>)r^   ÚeqÚleÚgeÚltÚgt)rP   Úcmp2re   rd   rj   ri   Úbinopc                 C  sà   | j dkrt|dv rtd}tjt|d��< d|› d|› d|› d�}tj|| j| j d	�}W d   ƒ n1 sf0    Y  d S t|||| jƒ}	t|||| jƒ}
t|	||
| jƒ}d|› d|› d|› d�}tj|| j| j d	�}|  ||¡ d S )
NÚpython©ÚandÚorú"'BoolOp' nodes are not implemented©Úmatchú(lhs z rhs) z (lhs ú rhs)rZ   )	r-   r   ÚraisesÚNotImplementedErrorrF   Úevalr$   r=   Úcheck_equal)r\   r9   rk   rl   r8   r:   ÚmsgÚexrK   Úlhs_newÚrhs_newrL   r%   r%   r&   Útest_complex_cmp_ops¨   s    2zTestEval.test_complex_cmp_opsÚcmp_opc                 C  sx   |dk }|dk }| j dkrf|dv rfd}tjt|d�� |  |||¡ W d   ƒ n1 sX0    Y  d S |  |||¡ d S )Nr   rm   ©Úinúnot inú&'(In|NotIn)' nodes are not implementedrr   )r-   r   rv   rw   Úcheck_simple_cmp_op)r\   r   r8   r:   rz   r%   r%   r&   Útest_simple_cmp_ops¿   s    ,zTestEval.test_simple_cmp_opsÚopc                 C  s®   | j dkrV|dv rVd}tjt|d�� |  |||¡ W d   ƒ n1 sH0    Y  d S t|ƒrœt|ƒsœ|dv rœ| jdkrœ| j dkrœtjjdd�}|j	 
|¡ |  |||¡ d S )Nrm   r€   rƒ   rr   Úpandasz]Looks like expected is negative, unclear whether expected is incorrect or result is incorrectr   )r-   r   rv   rw   Úcheck_compound_invert_opr   r$   r   ÚxfailÚnodeZ
add_marker)r\   r†   r8   r:   r,   rz   r   r%   r%   r&   Útest_compound_invert_opÍ   s(    ,ÿþýüûÿz TestEval.test_compound_invert_opc                 C  s   |   |||||¡ d S r)   )Úcheck_chained_cmp_op)r\   r9   rk   r8   Úmidhsr:   r%   r%   r&   Útest_chained_cmp_opå   s    zTestEval.test_chained_cmp_opc                 C  sZ   t |tƒrt ||¡ n>t |tƒr0t ||¡ n&t |tjƒrJt ||¡ n||ksVJ ‚d S r)   )	r?   r
   ÚtmÚassert_frame_equalr   Úassert_series_equalr6   r@   Úassert_numpy_array_equal©r\   rK   rL   r%   r%   r&   ry   ê   s    

zTestEval.check_equalc                 C  s  | j dkrfd|› d|› d�}d}tjt|d��$ tj|| j| j d� W d   ƒ n1 sX0    Y  d S t|||| jƒ}t|||| jƒ}	|d u�r|	d u�rd|› d|› d�}d|› d|› d�}
d	|› d
|› d�}t|d|	| jƒ}||
|fD ]$}tj|| j| j d�}t 	||¡ qêd S )Nrm   úlhs ú mid ú rhsrq   rr   rZ   ú mid and mid rt   ú mid) & (mid ru   ú&)
r-   r   rv   rw   rF   rx   r$   r=   r�   Úassert_almost_equal)r\   r8   r9   Úmidrk   r:   Úex1rz   r|   r}   Úex2Úex3rL   r{   rK   r%   r%   r&   rŒ   ô   s     
2zTestEval.check_chained_cmp_opc                 C  sª   d|› d�}d  ddg¡}|dv rvt|ƒsvtjt|d��, tj|| j| j||dœd	� W d   ƒ q¦1 sj0    Y  n0t	|||| jƒ}tj|| j| jd
�}|  
||¡ d S )Nr”   r–   ú|zxonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')bool(\]|')z'argument of type 'bool' is not iterabler€   rr   rB   ©r$   r-   Ú
local_dictrZ   )Újoinr   r   rv   Ú	TypeErrorrF   rx   r$   r-   r=   ry   )r\   r8   r9   r:   r{   rz   rL   rK   r%   r%   r&   r„     s"    üÿü&zTestEval.check_simple_cmp_opÚarith1c                 C  s†   d|› d�}t j|| j| jd�}t|||| jƒ}t ||¡ d|› d|› d�}t j|| j| jd�}t|||| jƒ}|  ||||¡ d S )Nr”   r–   rZ   z rhs )rF   rx   r$   r-   r=   r�   rš   Úcheck_alignment)r\   r¤   r8   r:   r{   rK   rL   Únlhsr%   r%   r&   Útest_binary_arith_ops"  s    zTestEval.test_binary_arith_opsc              
   C  sz   z|  |¡\}}W n tttfy*   Y nL0 | jdkrZ| j d|› d�¡}t |j	|¡ nt
d|› d�ƒ}t ||¡ d S )Nr   znlhs z ghs)Úalignr3   r£   ÚAttributeErrorr$   r^   Úevaluater�   rš   Úvaluesrx   )r\   rK   r¦   Zghsr†   rL   r%   r%   r&   r¥   .  s    
zTestEval.check_alignmentc                 C  s’   d}t j|| j| jd�}|| }t ||¡ | jdkrr| j d¡}t|t	t
fƒr`t |j|¡ qŽt || ¡ ¡ nt|d|| jƒ}t ||¡ d S )Nz	lhs % rhsrZ   r   zexpected % rhsú%)rF   rx   r$   r-   r�   rš   r^   rª   r?   r
   r   r«   Úitemr=   )r\   r8   r:   r{   rK   rL   r%   r%   r&   Útest_modulusD  s    
zTestEval.test_modulusc                 C  sŠ   d}| j dkr8tj|| j | jd�}|| }|  ||¡ nNd}tjt|d��, tj|||dœ| j | jd� W d   ƒ n1 s|0    Y  d S )Nz
lhs // rhsrm   rZ   zGunsupported operand type\(s\) for //: 'VariableNode' and 'VariableNode'rr   rB   ©r¡   r$   r-   )r$   rF   rx   r-   ry   r   rv   r£   )r\   r8   r:   r{   ÚresrL   rz   r%   r%   r&   Útest_floor_divisionT  s    
ÿüzTestEval.test_floor_divisionc                 C  sÖ   d}t |d|| jƒ}tj|| j| jd�}t|ƒr‚t|ƒr‚t||ƒr‚d}tjt	|d�� t
 ||¡ W d   ƒ qÒ1 sv0    Y  nPt
 ||¡ d}tj|| j| jd�}t |d|| jƒ}t |d|| jƒ}t
 ||¡ d S )Nz
lhs ** rhsú**rZ   z-(DataFrame.columns|numpy array) are differentrr   z(lhs ** rhs) ** rhs)r=   r$   rF   rx   r-   r	   rM   r   rv   ÚAssertionErrorr�   r’   rš   )r\   r8   r:   r{   rL   rK   rz   Úmiddler%   r%   r&   Útest_powh  s$    ÿþý,zTestEval.test_powc              	   C  s‚   z|  t¡}W n" ty0   t t|ƒg¡}Y n0 | }tjd| j| jd�}t	 
||¡ | jD ]}t	 
|tjd|| jd�¡ q^d S )Nz~elbrZ   )ÚastyperE   r©   r6   ÚarrayrF   rx   r$   r-   r�   rš   rc   )r\   r8   ZelbrL   rK   r$   r%   r%   r&   Úcheck_single_invert_op�  s    
ÿzTestEval.check_single_invert_opc                 C  s  ddg}d|› d�}d  ddg¡}t|ƒr~||v r~tjt|d��, tj|| j| j||d	œd
� W d   ƒ n1 sr0    Y  n˜t|ƒr¤t|ƒr¤t	dd„ ||fƒ\}}t
|||| jƒ}t|ƒrÄ| }n| }tj|| j| jd�}t ||¡ | jD ]$}	tj|| j| jd�}
t |
|¡ qðd S )Nr�   r‚   z~(lhs ru   rŸ   zyonly list-like( or dict-like)? objects are allowed to be passed to (DataFrame\.)?isin\(\), you passed a (\[|')float(\]|')z(argument of type 'float' is not iterablerr   rB   r    c                 S  s   t  | g¡S r)   )r6   r·   ©Úxr%   r%   r&   Ú<lambda>§  rb   z3TestEval.check_compound_invert_op.<locals>.<lambda>rZ   )r¢   r	   r   rv   r£   rF   rx   r$   r-   Úmapr=   r�   rš   rc   )r\   r8   r9   r:   Z
skip_theser{   rz   rL   rK   r$   Zevr%   r%   r&   rˆ   �  s4    üÿü&
z!TestEval.check_compound_invert_opc                 C  s6  d}t tj dd¡ƒ}| jdkrhd}tjt|d��$ tj	|| j| j
d�}W d   ƒ q®1 s\0    Y  nFd}tjt|d��$ tj	|| j| j
d�}W d   ƒ n1 s¤0    Y  t tjjdd	d
�ƒ}| jdk�rd}tjt|d��$ tj	|| j| j
d�}W d   ƒ n1 �s0    Y  n&| }tj	|| j| j
d�}t ||¡ t tj dd¡dkƒ}| }tj	|| j| j
d�}t ||¡ t g d¢tj d¡dkdœƒ}| jdk�rêtjtdd��$ tj	|| j| j
d�}W d   ƒ n1 �sÞ0    Y  nHd}tjt|d��$ tj	|| j| j
d�}W d   ƒ n1 �s(0    Y  d S )Nú~lhsrN   rS   r   ú-couldn't find matching opcode for 'invert_dd'rr   rZ   ú0ufunc 'invert' not supported for the input types©rN   rS   ©Úsizeú)couldn't find matching opcode for 'invertrR   ©Úar>   g       @é   )Úbr;   úunknown type objectú#bad operand type for unary ~: 'str')r
   r6   rT   rV   r$   r   rv   rw   rF   rx   r-   r£   Úrandintr�   r�   rU   r3   ©r\   Úexprr8   rz   rK   Úexpectr%   r%   r&   Útest_frame_invertµ  s8    
4266zTestEval.test_frame_invertc                 C  s   d}t tj d¡ƒ}| jdkrfd}tjt|d��$ tj	|| j| j
d�}W d   ƒ q¬1 sZ0    Y  nFd}tjt|d��$ tj	|| j| j
d�}W d   ƒ n1 s¢0    Y  t tjjddd�ƒ}| jdk�rd	}tjt|d��$ tj	|| j| j
d�}W d   ƒ n1 �s
0    Y  n&| }tj	|| j| j
d�}t ||¡ t tj d¡d
kƒ}| }tj	|| j| j
d�}t ||¡ t g d¢ƒ}| jdk�rÔtjtdd��$ tj	|| j| j
d�}W d   ƒ n1 �sÈ0    Y  nHd}tjt|d��$ tj	|| j| j
d�}W d   ƒ n1 �s0    Y  d S )Nr½   rN   r   r¾   rr   rZ   r¿   rÁ   rÃ   rR   rÄ   rÈ   rÉ   )r   r6   rT   rV   r$   r   rv   rw   rF   rx   r-   r£   rÊ   r�   r‘   rU   r3   rË   r%   r%   r&   Útest_series_invertà  s8    
4266zTestEval.test_series_invertc                 C  s  d}t tj dd¡ƒ}| }tj|| j| jd�}t 	||¡ t tjj
ddd�ƒ}| }tj|| j| jd�}t 	||¡ t tj dd¡dkƒ}| jdkrÞd	}tjt|d
��$ tj|| j| jd�}W d   ƒ n1 sÒ0    Y  n&| }tj|| j| jd�}t 	||¡ d S )Nú-lhsrN   rS   rZ   rÀ   rÁ   rR   r   ú*couldn't find matching opcode for 'neg_bb'rr   )r
   r6   rT   rV   rF   rx   r$   r-   r�   r�   rÊ   rU   r   rv   rw   ©r\   rÌ   r8   rÍ   rK   rz   r%   r%   r&   Útest_frame_negate  s"    
4zTestEval.test_frame_negatec                 C  s  d}t tj d¡ƒ}| }tj|| j| jd�}t 	||¡ t tjj
ddd�ƒ}| }tj|| j| jd�}t 	||¡ t tj d¡dkƒ}| jdkrÚd}tjt|d��$ tj|| j| jd�}W d   ƒ n1 sÎ0    Y  n&| }tj|| j| jd�}t 	||¡ d S )	NrÐ   rN   rZ   rÁ   rR   r   rÑ   rr   )r   r6   rT   rV   rF   rx   r$   r-   r�   r‘   rÊ   rU   r   rv   rw   rÒ   r%   r%   r&   Útest_series_negate)  s"    
4zTestEval.test_series_negater8   rN   rS   rÀ   rÁ   rR   c                 C  s,   d}|}t j|| j| jd�}t ||¡ d S ©Nz+lhsrZ   )rF   rx   r$   r-   r�   r�   ©r\   r8   rÌ   rÍ   rK   r%   r%   r&   Útest_frame_posC  s    zTestEval.test_frame_posc                 C  s,   d}|}t j|| j| jd�}t ||¡ d S rÕ   )rF   rx   r$   r-   r�   r‘   rÖ   r%   r%   r&   Útest_series_posU  s    zTestEval.test_series_posc                 C  sˆ  d}t jt|d��$ tjd| j| jd� W d   ƒ n1 s<0    Y  tjd| j| jd�dksbJ ‚tjd| j| jd�d	ks~J ‚tjd
| j| jd�dksšJ ‚tjd| j| jd�dks¶J ‚tjd| j| jd�dksÒJ ‚tjd| j| jd�dksîJ ‚tjd| j| jd�dk�sJ ‚tjd| j| jd�dk�s*J ‚tjd| j| jd�dk�sHJ ‚tjd| j| jd�dk�sfJ ‚tjd| j| jd�dk�s„J ‚d S )Nz%bad operand type for unary ~: 'float'rr   z~1.0rZ   z-1.0©r-   r$   g      ð¿z+1.0ç      ð?z~1éþÿÿÿz-1éÿÿÿÿz+1r>   z~Truez~Falsez-Truez-Falser   z+Truez+False)r   rv   r£   rF   rx   r$   r-   )r\   rz   r%   r%   r&   Útest_scalar_unaryg  s    2zTestEval.test_scalar_unaryc                 C  s:   t jt d¡t jd�}t jg d¢t jd�}t ||¡ d S )NzK[-True, True, ~True, +True,-False, False, ~False, +False,-37, 37, ~37, +37]©Údtype)rÜ   TrÛ   r>   r   FrÜ   r   iÛÿÿÿé%   iÚÿÿÿrà   )r6   r·   rF   rx   Zobject_r�   r’   r“   r%   r%   r&   Útest_unary_in_arrayx  s    ÿúñzTestEval.test_unary_in_arrayrß   c                 C  s\   t dtjdg|d�iƒ}| d¡}|jt dg¡ks8J ‚| d¡}|jt dg¡ksXJ ‚d S )Nrº   r   rÞ   zx < -0.1Fz-5 > x)r
   r6   r·   rx   r«   )r\   rß   Údfr°   r%   r%   r&   Útest_float_comparison_bin_op—  s
    

z%TestEval.test_float_comparison_bin_opc              	   C  s¢   d}|d7 }|d7 }|d7 }|d7 }t j d¡dd  }}}tt j dd¡ƒ}|D ]J}d	}tjt|d
��$ tj|| j	| j
d� W d   ƒ qR1 s’0    Y  qRd S )N)z1 or 2z1 and 2)za and bza or b)z1 or 2 and (3 + 2) > 3)z2 * x > 2 or 1 and 2)z2 * df > 3 and 1 or arÆ   r>   rS   ú;cannot evaluate scalar only bool ops|'BoolOp' nodes are notrr   rZ   )r6   rT   rV   r
   r   rv   rw   rF   rx   r$   r-   )r\   Úexprsrº   rÅ   rÇ   râ   r{   rz   r%   r%   r&   Útest_disallow_scalar_bool_ops¡  s    z&TestEval.test_disallow_scalar_bool_opsc                 C  sf  d}t jd| j| jd�}|dks$J ‚t|ƒs0J ‚d}t jd| j| jd�}|dksTJ ‚t|ƒs`J ‚d}t jd| j| jd�}|r€J ‚t|ƒsŒJ ‚t|ƒs˜J ‚t dg¡}t jd| j| jd�}t 	|t dg¡¡ |j
dksÚJ ‚t dg¡}t jd| j| jd�}t 	|t dg¡¡ |j
dk�sJ ‚t dg¡}t jd| j| jd�}t 	|t dg¡¡ |j
dk�sbJ ‚d S )Nr>   rº   rZ   g      ø?F)r>   )rF   rx   r$   r-   r	   r   r6   r·   r�   r’   Úshape)r\   rº   rK   r%   r%   r&   Útest_identical°  s2    zTestEval.test_identicalc                 C  s(   d}t j|| j| jd�}|dks$J ‚d S )Nz1 + 2 *         5 - 1 + 2 rZ   é   )rF   rx   r$   r-   )r\   ÚexprK   r%   r%   r&   Útest_line_continuationÑ  s    zTestEval.test_line_continuationc                 C  sÐ   d}t j|| j| jd�}t |¡}||ks.J ‚tdg d¢iƒ}d}| d|d›�¡}|js^J ‚d}| d	|d›�¡}|j	d
dgd d …f }t
 ||¡ d}| d|d›�¡}|j	d
gd d …f }t
 ||¡ d S )Nz1000000000.006rZ   ÚA)g~  eÍÍAç$  eÍÍAg'1  eÍÍAg©  eÍÍAzA < z.4fgÅ   eÍÍAzA > r>   rS   rí   úA == )rF   rx   r$   r-   r6   Úfloat64r
   ÚqueryÚemptyÚlocr�   r�   )r\   rê   rK   rL   râ   ÚcutoffÚexactr%   r%   r&   Útest_float_truncationØ  s     

zTestEval.test_float_truncationc                 C  sœ   t g d¢gg d¢d�}d}tjt|d�� | d¡ W d   ƒ n1 sH0    Y  t ƒ }d|j_tjt|d�� | d¡ W d   ƒ n1 sŽ0    Y  d S )	N)r   r   r   )ZfooÚbarÚclass©Úcolumnsz4Python keyword not valid identifier in numexpr queryrr   z
class == 0Úlambdazlambda == 0)r
   r   rv   ÚSyntaxErrorrð   ÚindexÚname©r\   râ   rz   r%   r%   r&   Útest_disallow_python_keywordsî  s    (z&TestEval.test_disallow_python_keywordsN)7Ú__name__Ú
__module__Ú__qualname__r   Úfixturer]   Úclassmethodr`   Úpropertyrc   r   ÚparametrizerÌ   ÚBOOL_OPS_SYMSr~   ÚCMP_OPS_SYMSr…   r‹   rŽ   ry   rŒ   r„   Ú_good_arith_opsr§   r¥   r®   r±   r    Úskip_if_windowsrµ   r¸   rˆ   rÎ   rÏ   rÓ   rÔ   r
   r6   rT   rV   rÊ   rU   r×   r   rØ   rÝ   rá   Úfloat32rï   rã   ræ   rè   rë   rõ   rÿ   r%   r%   r%   r&   rX   —   s|   



ý




%+/úþ
úþ

	!rX   c                  O  s
   t j ¡ S r)   )r6   rT   rV   )ÚargsÚkwargsr%   r%   r&   r»   û  rb   r»   c                   @  s<   e Zd Zej dg d¢¡ej dejejg¡dd„ ƒƒZ	dS )ÚTestTypeCastingr†   )ú+ú-Ú*r²   ú/Údtc                 C  s®   t jddt|d�}d|› d�}tj|||d�}|jj|ks>J ‚|jj|ksNJ ‚t  |t|ƒ¡ d|› d�}tj|||d�}|jj|ksŠJ ‚|jj|ksšJ ‚t  |t|ƒ¡ d S )	NrN   rÆ   )Ú
data_gen_frß   údf z 3rZ   z3 ú df)r�   ÚmakeCustomDataframeÚfrF   rx   r«   rß   r�   )r\   r$   r-   r†   r  râ   Úsr°   r%   r%   r&   Útest_binop_typecasting  s    z&TestTypeCasting.test_binop_typecastingN)
r   r  r  r   r   r  r6   r  rï   r  r%   r%   r%   r&   r    s   r  c                 C  s   t | jjtjƒS r)   )Ú
issubclassrß   Útyper6   Z
datetime64r¹   r%   r%   r&   Ú_is_datetime  s    r  c                  G  s0   t tt d¡| ƒƒ }ttjtt| ƒƒ}|o.|S )NZis_monotonic)Úanyr¼   ÚoperatorÚ
attrgetterr   Úxorr  )r  Znot_monoZonly_one_dtr%   r%   r&   Úshould_warn  s    r"  c                	   @  sÎ  e Zd Zg d¢Zedg Zdd„ Zej de¡ej de¡ej de¡dd	„ ƒƒƒZ	ej d
e¡ej de¡dd„ ƒƒZ
ej de¡ej de¡ej de¡ej de¡dd„ ƒƒƒƒZej dddg¡ej de¡ej d
e¡dd„ ƒƒƒZej dddg¡ej deeg d¢g d¢ƒƒdg ¡ej d¡dd„ ƒƒƒZej de¡ej d
e¡ej dddg¡ej ddd g¡d!d"„ ƒƒƒƒZej de¡ej de¡ej de¡ej de¡d#d$„ ƒƒƒƒZd%d&„ Zd'S )(ÚTestAlignment)ÚiÚur  r  c                 C  s8   d}t jddtd�}tj|||d�}t  ||d ¡ d S )Nzdf * ~2rN   rÆ   )r  rZ   éýÿÿÿ)r�   r  r  rF   rx   r�   )r\   r$   r-   r  râ   r°   r%   r%   r&   Útest_align_nested_unary_op)  s    z(TestAlignment.test_align_nested_unary_opÚlr_idx_typeÚrr_idx_typeÚ
c_idx_typec           	   	   C  sÎ   t jdd��® t  dt¡ tjddt||d�}tjddt||d�}t|j|jƒrŒt 	t¡�  t
jd||d�}W d   ƒ qœ1 s€0    Y  nt
jd||d�}t ||| ¡ W d   ƒ n1 sÀ0    Y  d S )	NT©ÚrecordÚalwaysrQ   ©r  Ú
r_idx_typer*  é   zdf + df2rZ   ©ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr�   r  r  r"  rü   Úassert_produces_warningrF   rx   r�   )	r\   r$   r-   r(  r)  r*  râ   Údf2r°   r%   r%   r&   Útest_basic_frame_alignment/  s    
ÿ
ÿ0z(TestAlignment.test_basic_frame_alignmentr/  c                 C  st   t jddt||d�}tjd||d�}t  ||dk ¡ ttjj	|j
Ž |j|jd�}tjd||d�}t  |||k ¡ d S )NrQ   r.  údf < 2rZ   rS   )rü   rù   zdf < df3)r�   r  r  rF   rx   r�   r
   r6   rT   rV   rç   rü   rù   )r\   r$   r-   r/  r*  râ   r°   Údf3r%   r%   r&   Útest_frame_comparisonF  s    
ÿz#TestAlignment.test_frame_comparisonÚr1Úc1Úr2Úc2c              	   C  sê   t jdd��Ê t  dt¡ tjddt||d�}tjddt||d�}tjddt||d�}	t|j|j|	jƒr¤t 	t¡�  t
jd	||d
�}
W d   ƒ q´1 s˜0    Y  nt
jd	||d
�}
t |
|| |	 ¡ W d   ƒ n1 sÜ0    Y  d S )NTr+  r-  rÆ   rS   r.  é   rN   zdf + df2 + df3rZ   r1  )r\   r$   r-   r<  r=  r>  r?  râ   r7  r:  r°   r%   r%   r&   Ú#test_medium_complex_frame_alignmentS  s     
ÿ
ÿ
ÿ0z1TestAlignment.test_medium_complex_frame_alignmentÚ
index_namerü   rù   c              	   C  s  t jdd��î t  dt¡ tjddt||d�}t||ƒ}tt	j
 d¡|d d… ƒ}t|j|jƒrœt t¡�  tjd||d�}	W d   ƒ q¬1 s�0    Y  ntjd||d�}	|d	ks¼|d	krØ|d
krÎ| |¡n|| }
n|| }
t |	|
¡ W d   ƒ n1 �s0    Y  d S )NTr+  r-  rQ   r.  rN   údf + srZ   r  r   )r2  r3  r4  r5  r�   r  r  Úgetattrr   r6   rT   rV   r"  rü   r6  rF   rx   Úaddr�   ©r\   r$   r-   rB  r/  r*  râ   rü   r  r°   rL   r%   r%   r&   Ú!test_basic_frame_series_alignmentl  s    
ÿ
0z/TestAlignment.test_basic_frame_series_alignmentzr_idx_type, c_idx_type)r$  r%  r  )r  r  zignore::RuntimeWarningc                 C  sÖ   t jddt||d�}t||ƒ}ttj d¡|d d… ƒ}t|j	|j	ƒr‚t  
t¡�  tjd||d�}	W d   ƒ q’1 sv0    Y  ntjd||d�}	|dks¢|dkr¾|dkr´| |¡n|| }
n|| }
t  |	|
¡ d S )	NrQ   é   r.  rN   zs + dfrZ   r  r   )r�   r  r  rD  r   r6   rT   rV   r"  rü   r6  r5  rF   rx   rE  r�   rF  r%   r%   r&   Ú!test_basic_series_frame_alignment†  s    	
ÿ
0z/TestAlignment.test_basic_series_frame_alignmentr†   r  r  c              	   C  s^  t jdd���: t  dt¡ tjddt||d�}t||ƒ}tt	j
 d¡|d d… ƒ}	d|› d�}
d	|› d
�}t|j|	jƒrðt t¡�  tj|
||d�}W d   ƒ n1 sª0    Y  t t¡�  tj|||d�}W d   ƒ n1 sä0    Y  n tj|
||d�}tj|||d�}|dk�r:|dk�r:|dk�r:t ||¡ W d   ƒ n1 �sP0    Y  d S )NTr+  r-  rQ   r.  rN   zs r  r  z srZ   r  r   )r2  r3  r4  r5  r�   r  r  rD  r   r6   rT   rV   r"  rü   r6  rF   rx   r�   )r\   r$   r-   rB  r†   r/  r*  râ   rü   r  r8   r:   rÅ   rÇ   r%   r%   r&   Útest_series_frame_commutativity   s&    
ÿ
.0
z-TestAlignment.test_series_frame_commutativityc              	   C  s¸  dd l }d}d}	d|	 }
tjdd���| t dt¡ | dd	g¡}| d
dg¡}tj|	|t||d�}tj|
|t||d�}t	t
ƒ  |¡|ƒ}ttj  |¡|d |… ƒ}|dks´|dkrÒ|dkrÈ| |¡}qÚ|| }n|| }|dksì|dk�r|dk�r| |¡}n|| }n|| }t|j|j|jƒ�rft t¡�  tjd||d�}W d   ƒ n1 �sZ0    Y  ntjd||d�}|j|jk�sˆJ ‚t ||¡ W d   ƒ n1 �sª0    Y  d S )Nr   rÆ   rN   rS   Tr+  r-  rü   rù   râ   r7  r.  r  r   zdf2 + ser + dfrZ   )rT   r2  r3  r4  r5  Úchoicer�   r  r  rD  ÚlocalsÚgetr   r6   rV   rE  r"  rü   r6  rF   rx   rç   r�   )r\   r$   r-   r<  r=  r>  r?  rT   ÚnÚm1Úm2rB  Úobj_namerâ   r7  rü   ZserZ	expected2rL   r°   r%   r%   r&   Ú#test_complex_series_frame_alignmentÀ  s@    
ÿ
ÿ


2z1TestAlignment.test_complex_series_frame_alignmentc                 C  sè  t tj dd¡ƒ}ttj d¡ƒ}|dkr0t}nd}t |¡�  tj	d||d� W d   ƒ n1 sd0    Y  ttj d¡ƒ}t d¡�  tj	d||d� W d   ƒ n1 s®0    Y  t tj dd¡ƒ}ttj d¡ƒ}t d¡�  tj	d||d� W d   ƒ n1 �s0    Y  t tj dd¡ƒ}ttj d¡ƒ}|dk}|�sLt}nd}t |¡�x}tj	d||d� |�sÄt
|ƒd	k�s„J ‚t|d
 jƒ}	t |j|jd	  ¡}
d|
d›d�}|	|k�sÄJ ‚W d   ƒ n1 �sÚ0    Y  d S )Niè  rQ   i'  r   FrC  rZ   rm   r>   r   z_Alignment difference on axis 1 is larger than an order of magnitude on term 'df', by more than z.4gz; performance may suffer.)r
   r6   rT   rV   r   r   r�   r6  rF   rx   Úlenr4   ÚmessageÚlog10rÂ   rç   )r\   r$   r-   râ   r  ÚseenZis_python_engineZwrnÚwrz   ZloggedrL   r%   r%   r&   Ú+test_performance_warning_for_poor_alignmentò  s>    ..0þÿz9TestAlignment.test_performance_warning_for_poor_alignmentN)r   r  r  Zindex_typesZlhs_index_typesr'  r   r   r  r8  r;  rA  rG  r.   r   ÚfilterwarningsrI  rJ  rR  rX  r%   r%   r%   r&   r#  $  sJ   
þ
.r#  c                
   @  s*  e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zej 	d	dd
g¡ej 	ddd
g¡ej 	de
j¡dd„ ƒƒƒZej 	d	dd
g¡ej 	ddd
g¡ej 	de
j¡dd„ ƒƒƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zejjd%d&�d'd(„ ƒZd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z ej 	d7d8d9d8d:ge! "g ¡d;g¡ej #d<¡d=d>„ ƒƒZ$ej 	d7g d?¢¡d@dA„ ƒZ%ej 	dBd8d9d8d:ge! "g ¡d;d8d:ig¡dCdD„ ƒZ&dEdF„ Z'dGdH„ Z(dIdJ„ Z)dKdL„ Z*dMdN„ Z+dOdP„ Z,ej 	dQg dR¢¡dSdT„ ƒZ-ej 	dUdVdWg¡dXdY„ ƒZ.dZS )[ÚTestOperationsTrY   c                 C  s   || _ || _d S r)   rZ   r[   r%   r%   r&   r]   $  s    z&TestOperations.set_engine_parser_attrsc                 O  s8   | j |d< | j|d< | dd¡d |d< tj|i |¤ŽS ©Nr$   r-   Úlevelr   r>   ©r$   r-   ÚpoprF   rx   ©r\   r  r  r%   r%   r&   rx   *  s    

zTestOperations.evalc              	     sd  g ‰ | j dkrddg‰ ‡ fdd„tjtj D ƒ}dd„ |D ƒ}|D �]}d|› d	�}d
|› d	�}d|› d�}|dv r¼d}tjt|d��$ tj|| j	| j d� W d   ƒ n1 s°0    Y  qBt
d|d| j	ƒ}| j|| j	| j d�}	|	|ksìJ ‚t
|	|d| j	ƒ}| j|d|	i| j	| j d�}
|
|k�s$J ‚t
d||	d | j	ƒ}| j|d|	i| j	| j d�}
|
|ksBJ ‚qBd S )Nrm   r�   r‚   c                   s   g | ]}|ˆ vr|‘qS r%   r%   ©r#   r†   ©Zexclude_arithr%   r&   Ú
<listcomp>5  s   þz8TestOperations.test_simple_arith_ops.<locals>.<listcomp>c                 s  s   | ]}|d kr|V  qdS )z//Nr%   r`  r%   r%   r&   r'   ;  rb   z7TestOperations.test_simple_arith_ops.<locals>.<genexpr>z1 z 1zx z (x + 1)r€   z&argument of type 'int' is not iterablerr   rZ   r>   rº   r¯   )r-   rÌ   r   r  r   rv   r£   rF   rx   r$   r=   )r\   Z	arith_opsÚopsr†   r{   r�   rž   rz   Úexpecrº   Úyr%   ra  r&   Útest_simple_arith_ops0  s8    


þ
4ÿÿz$TestOperations.test_simple_arith_opsr:   Fr8   r†   c                 C  sˆ   |› d|› d|› �}| j dkrf|dv rfd}tjt|d�� |  |¡ W d   ƒ n1 sX0    Y  d S |  |¡}t|ƒ}||ks„J ‚d S ©Nú rm   rn   rq   rr   ©r-   r   rv   rw   rx   ©r\   r:   r8   r†   r{   rz   r°   rê   r%   r%   r&   Útest_simple_bool_opsW  s    (
z#TestOperations.test_simple_bool_opsc                 C  sˆ   |› d|› d|› �}| j dkrf|dv rfd}tjt|d�� |  |¡ W d   ƒ n1 sX0    Y  d S |  |¡}t|ƒ}||ks„J ‚d S rg  ri  rj  r%   r%   r&   Útest_bool_ops_with_constantsg  s    (
z+TestOperations.test_bool_ops_with_constantsc                 C  sl   t j dddd¡}tt j d¡ƒ}d}tjt|d��$ | jd||d	œd
� W d   ƒ n1 s^0    Y  d S )NrÆ   r@  rN   é   rQ   z?N-dimensional objects, where N > 2, are not supported with evalrr   úx + y©rº   re  ©r¡   )r6   rT   rV   r   r   rv   rw   rx   )r\   rº   re  rz   r%   r%   r&   Útest_4d_ndarray_failsw  s
    z$TestOperations.test_4d_ndarray_failsc                 C  s   |   d¡}|dksJ ‚d S )NÚ1r>   )rx   )r\   rº   r%   r%   r&   Útest_constant~  s    
zTestOperations.test_constantc                 C  s4   t tj dd¡ƒ}| jdd|id�}t ||¡ d S )NrQ   rS   râ   rp  ©r
   r6   rT   rV   rx   r�   r�   )r\   râ   r7  r%   r%   r&   Útest_single_variable‚  s    z#TestOperations.test_single_variablec                 C  sØ  t  dg¡}d}t t¡� | j|dd�}W d   ƒ n1 s>0    Y  t |t  dg¡¡ t t¡� | j|dd�}W d   ƒ n1 sŠ0    Y  t |t  dg¡¡ t t¡� | jddd�}W d   ƒ n1 sÖ0    Y  d}||ksðJ ‚t t¡� | jddd�}W d   ƒ n1 �s 0    Y  d}||k�s<J ‚t t¡� | jd	dd�}W d   ƒ n1 �sl0    Y  d}||k�sˆJ ‚t t¡� | jd	dd�}W d   ƒ n1 �s¸0    Y  d}||k�sÔJ ‚d S )
Nr>   zs / 1F)ÚtruedivrÚ   Tz1 / 2rR   zs / 2)r6   r·   r�   r6  ÚFutureWarningrx   r’   )r\   r  r{   r°   rd  r%   r%   r&   Útest_truediv‡  s0    ,,,...zTestOperations.test_truedivc                 C  sN   t tj dd¡ƒ}tjtdd�� |  d¡ W d   ƒ n1 s@0    Y  d S )NrN   rÆ   zname 'x' is not definedrr   zdf[x > 2] > 2)r
   r6   rT   rV   r   rv   Ú	NameErrorrx   )r\   râ   r%   r%   r&   Ú&test_failing_subscript_with_name_error©  s    z5TestOperations.test_failing_subscript_with_name_errorc                 C  sD   t tj dd¡ƒ}| jdd|id�}|d |dk }t ||¡ d S )NrN   rÆ   z(df + 1)[df > 2]râ   rp  r>   rS   rt  ©r\   râ   rK   rL   r%   r%   r&   Útest_lhs_expression_subscript®  s    z,TestOperations.test_lhs_expression_subscriptc                 C  s¦   t tj dd¡tdƒd�}d}|j|jk }d}|j|j |j }d}|j|j |j|jdk   }|||f}|||f}	t||	ƒD ]"\}
}t	 
|| j|
d	|id
�¡ q~d S )NrN   rÆ   Úabcrø   zdf.a < df.bzdf.a + df.b + df.czdf.a + df.b + df.c[df.b < 0]r   râ   rp  )r
   r6   rT   rV   r.   rÅ   rÇ   r;   Úzipr�   r‘   rx   )r\   râ   Úexpr1Zexpec1Zexpr2Zexpec2Zexpr3Zexpec3rå   Zexpecsr<   rd  r%   r%   r&   Útest_attr_expression´  s    

z#TestOperations.test_attr_expressionc                 C  sz   t tj dd¡tdƒd�}t tj dd¡ƒ}d}d}tjt|d��$ | j|||dœd	� W d   ƒ n1 sl0    Y  d S )
NrN   rÆ   r}  rø   zdf = df2ú%cannot assign without a target objectrr   )râ   r7  rp  )	r
   r6   rT   rV   r.   r   rv   r3   rx   )r\   râ   r7  r  rz   r%   r%   r&   Útest_assignment_failsÁ  s    z$TestOperations.test_assignment_failsc                   s<  t tj dd¡tdƒd�‰ ˆ  ¡ ‰tjtdd�� ˆ  	d¡ W d   ƒ n1 sP0    Y  d}tjt|d�� ˆ  	d	¡ W d   ƒ n1 sŒ0    Y  d
}tjt|d�� ˆ  	d¡ W d   ƒ n1 sÈ0    Y  ˆ ¡ }|d |d  |d< ˆ ¡ ‰ ˆ j	ddd� t
 ˆ |¡ ˆ ¡ }|d |d  |d< ˆ ¡ ‰ ˆ j	ddd� t
 ˆ |¡ ‡fdd„}|ƒ ‰ ˆ ¡ }d|d  |d< t
 ˆ |¡ ˆ ¡ ‰ ‡ fdd„}|ƒ  ˆ ¡ ‰ ˆ j	ddd� d}tjt|d�� ˆ  	d¡ W d   ƒ n1 �sè0    Y  ˆ ¡ ‰ | j	ddˆ iˆ dd� ˆ ¡ }|d |d  |d< t
 ˆ |¡ d S )NrN   rS   Úabrø   úinvalid syntaxrr   zd c = a + bz5left hand side of an assignment must be a single namezd,c = a + bzcannot assign to function callzTimestamp("20131001") = a + brÅ   rÇ   ú	a = a + bT©Úinplacer;   ú	c = a + bc                    s   ˆ   ¡ } d}| jddd� | S )Nr>   z	a = 1 + bTr†  )Úcopyrx   )râ   rÅ   )Úorig_dfr%   r&   r  é  s    z0TestOperations.test_assignment_column.<locals>.fr>   c                    sJ   d} ˆ j  ¡ }ˆ jddd� |ˆ j }tj|ˆ j dd� |jd u sFJ ‚d S )Nr>   r…  Tr†  F©Zcheck_names)rÅ   r‰  rx   rÇ   r�   r‘   rý   )rÅ   Zold_arK   )râ   r%   r&   r  ö  s    

z#can only assign a single expressionz	c = a = bzc = df.a + df.brâ   )r¡   Útargetr‡  )r
   r6   rT   rV   r.   r‰  r   rv   rû   rx   r�   r�   )r\   rz   rL   r  r%   )râ   rŠ  r&   Útest_assignment_columnÉ  sL    (((*z%TestOperations.test_assignment_columnc                 C  s:   t dgdgdœƒ}| d¡}tdgƒ}tj||dd� d S )Né   iàÿÿÿ©rÅ   rÇ   za in [11, -32]TFr‹  )r
   rx   r   r�   r‘   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 us4J ‚| ¡ }|d |d	  |d
< t ||¡ d S )NrN   rS   rƒ  rø   rˆ  Fr†  rÅ   rÇ   r;   )	r
   r6   rT   rV   r.   rx   r‰  r�   r�   )r\   râ   ÚactualrL   r%   r%   r&   Útest_assignment_not_inplace  s    z*TestOperations.test_assignment_not_inplacec                 C  sö   t g d¢g d¢dœƒ}| ¡ }|d |d  |d< |d |d  |d< |jdd	d
�}t ||¡ |d u slJ ‚|d d |d< |d d |d< |jdd	d
�}t ||¡ |d u s²J ‚d}tjt|d�� |jddd
� W d   ƒ n1 sè0    Y  d S )N©r>   rS   rÆ   ©r@  rN   rm  r�  rÅ   rÇ   r;   Údú$
        c = a + b
        d = c + bTr†  r>   rS   r<   ú$
        a = a - 1
        e = a + 2z@Multi-line expressions are only valid if all expressions containrr   z(
            a = b + 2
            b - 2F)r
   r‰  rx   r�   r�   r   rv   r3   )r\   râ   rL   Úanswerrz   r%   r%   r&   Útest_multi_line_expression#  s0    üüüz)TestOperations.test_multi_line_expressionc                 C  sž   t g d¢g d¢dœƒ}| ¡ }|d |d  |d< |d |d  |d< |jdd	d
�}t ||¡ |d d |d< |d d |d< |jdd	d
�}t ||¡ d S )Nr“  r”  r�  rÅ   rÇ   r;   r•  r–  Fr†  r>   rS   r<   r—  ©r
   r‰  rx   r�   r�   ©r\   râ   rL   r%   r%   r&   Ú&test_multi_line_expression_not_inplaceH  s     üüz5TestOperations.test_multi_line_expression_not_inplacec                 C  sl   t g d¢g d¢dœƒ}| ¡ }d}|d | |d< |d | |d< |jdd	d
�}t ||¡ |d u shJ ‚d S )Nr“  r”  r�  rH  rÅ   r;   r•  z?
        c = a * @local_var
        d = c + @local_var
        Tr†  rš  )r\   râ   rL   Z	local_varr˜  r%   r%   r&   Ú)test_multi_line_expression_local_variablea  s    ûz8TestOperations.test_multi_line_expression_local_variablec                 C  s|   t g d¢g d¢dœƒ}dd„ }| ¡ }|d |ddƒ |d	< |d	 |ddƒ |d
< |jddd�}t ||¡ |d u sxJ ‚d S )Nr“  r”  r�  c                 S  s   |S r)   r%   r�  r%   r%   r&   Ú
local_funcw  s    zUTestOperations.test_multi_line_expression_callable_local_variable.<locals>.local_funcrÅ   r>   rH  r;   r•  zM
        c = a * @local_func(1, 7)
        d = c + @local_func(1, 7)
        Tr†  rš  ©r\   râ   rž  rL   r˜  r%   r%   r&   Ú2test_multi_line_expression_callable_local_variables  s    ûzATestOperations.test_multi_line_expression_callable_local_variablec                 C  s€   t g d¢g d¢dœƒ}dd„ }| ¡ }|d |ddd	� |d
< |d
 |ddd	� |d< |jddd�}t ||¡ |d u s|J ‚d S )Nr“  r”  r�  c                 S  s   |S r)   r%   r�  r%   r%   r&   rž  ‹  s    zaTestOperations.test_multi_line_expression_callable_local_variable_with_kwargs.<locals>.local_funcrÅ   rH  r>   )rÇ   rÅ   r;   r•  zU
        c = a * @local_func(b=7, a=1)
        d = c + @local_func(b=7, a=1)
        Tr†  rš  rŸ  r%   r%   r&   Ú>test_multi_line_expression_callable_local_variable_with_kwargs‡  s    ûzMTestOperations.test_multi_line_expression_callable_local_variable_with_kwargsc                 C  sj   t g d¢g d¢dœƒ}| ¡ }d}tjt|d�� | d¡ W d   ƒ n1 sP0    Y  t ||¡ d S )Nr“  r”  r�  r�  rr   za = 1)r
   r‰  r   rv   r3   rð   r�   r�   )r\   râ   Zdf_origrz   r%   r%   r&   Útest_assignment_in_query›  s    (z'TestOperations.test_assignment_in_queryc                 C  st   t g d¢g d¢dœƒ}| ¡ }||d dk }|jddd� t ||¡ i }dd	i}| jd
|dd� t ||¡ d S )Nr“  r”  r�  rÅ   rS   za == 2Tr†  rÆ   ú	a = 1 + 2©rŒ  r‡  )r
   r‰  rð   r�   r�   rx   Zassert_dict_equalr›  r%   r%   r&   Útest_query_inplace¤  s    z!TestOperations.test_query_inplaceÚinvalid_targetr>   ÚcatrS   ©r>   rÆ   zignore::FutureWarningc                 C  s’   d}d}t jt|d��  | j||dd� W d   ƒ n1 s<0    Y  t|dƒrŽt jt|d��  | j||dd� W d   ƒ n1 s„0    Y  d S )Nz)Cannot assign expression output to targetr£  rr   Tr¤  r‰  F)r   rv   r3   rx   Úhasattr©r\   r¦  rz   Ú
expressionr%   r%   r&   Útest_cannot_item_assign²  s    .
z&TestOperations.test_cannot_item_assign)r>   r§  r¨  c                 C  sJ   d}d}t jt|d��  | j||dd� W d   ƒ n1 s<0    Y  d S )Nz"Cannot return a copy of the targetr£  rr   Fr¤  )r   rv   r3   rx   rª  r%   r%   r&   Útest_cannot_copy_item¿  s    z$TestOperations.test_cannot_copy_itemrŒ  c                 C  sb   d}| j ||dd�dksJ ‚d}tjt|d��  | j ||dd� W d   ƒ n1 sT0    Y  d S )Nú1 + 2Fr¤  rÆ   z0Cannot operate inplace if there is no assignmentrr   T)rx   r   rv   r3   )r\   rŒ  r«  rz   r%   r%   r&   Útest_inplace_no_assignmentÇ  s
    z)TestOperations.test_inplace_no_assignmentc                 C  sR   t jddtddd�}|dk }| jdd|id�}|dk }t  ||¡ t  ||¡ d S )NrS   Úpr$  ©r  r*  r/  r9  râ   rp  ©r�   r  r  rx   r�   )r\   râ   r<   Úrrº   r%   r%   r&   Ú*test_basic_period_index_boolean_expressionÑ  s    z9TestOperations.test_basic_period_index_boolean_expressionc                 C  sB   t jddtddd�}| jdd|id�}||dk  }t  ||¡ d S )	NrS   r°  r$  r±  zdf[df < 2 + 3]râ   rp  rN   r²  ©r\   râ   r³  r<   r%   r%   r&   Ú,test_basic_period_index_subscript_expressionÛ  s    z;TestOperations.test_basic_period_index_subscript_expressionc                 C  sR   t jddtddd�}| jdd|id�}|||dk  dk  |d  }t  ||¡ d S )NrS   r°  r$  r±  zdf[df[df < 2] < 2] + df * 2râ   rp  r²  rµ  r%   r%   r&   Ú-test_nested_period_index_subscript_expressioná  s    z<TestOperations.test_nested_period_index_subscript_expressionc                 C  sZ   t tj dd¡ƒ}tddd�|d< | jdd|i| j| jd�}|jd	k }t	j
||d
d� d S )NrN   rÆ   z1/1/2012)ZperiodsÚdates1zdf.dates1 < 20130101râ   r¯   Z20130101Fr‹  )r
   r6   rT   rV   r   rx   r$   r-   r¸  r�   r‘   )r\   râ   r°   rd  r%   r%   r&   Útest_date_booleanç  s    ü
z TestOperations.test_date_booleanc                 C  sÐ  | j dk�r,tjd| j| j d�}|s(J ‚tjd| j| j d�}|sDJ ‚tjd| j| j d�}|r`J ‚tjd| j| j d�}|s|J ‚tjd| j| j d�}|s˜J ‚tjd| j| j d�}|s´J ‚tjd	| j| j d�}|sÐJ ‚tjd
| j| j d�}|sìJ ‚tjd| j| j d�}|�r
J ‚tjd| j| j d�}|�sÌJ ‚�n d}tjt|d��$ tjd| j| j d� W d   ƒ n1 �sj0    Y  tjt|d��$ tjd| j| j d� W d   ƒ n1 �s®0    Y  tjt|d��$ tjd| j| j d� W d   ƒ n1 �sò0    Y  tjt|d��$ tjd| j| j d� W d   ƒ n1 �s60    Y  d}tjt|d��$ tjd| j| j d� W d   ƒ n1 �s~0    Y  tjt|d��$ tjd| j| j d� W d   ƒ n1 �sÂ0    Y  d S )Nrm   z1 in [1, 2]rZ   z2 in (1, 2)z3 in (1, 2)z3 not in (1, 2)z[3] not in (1, 2)z[3] in ([3], 2)z[[3]] in [[[3]], 2]z(3,) in [(3,), 2]z(3,) not in [(3,), 2]z[(3,)] in [[(3,)], 2]z'In' nodes are not implementedrr   z[(3,)] in (1, 2, [(3,)])z!'NotIn' nodes are not implementedz[3] not in (1, 2, [[3]]))r-   rF   rx   r$   r   rv   rw   )r\   r°   rz   r%   r%   r&   Útest_simple_in_opsó  sV    
ÿ

ÿ444
ÿ&4
ÿz!TestOperations.test_simple_in_opsc                 C  s6   d}d  d¡}d}tj|| j| jd�}||ks2J ‚d S )Nr>   z * Z!aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarZ   )r¢   rF   rx   r$   r-   )r\   rÅ   rÌ   rL   r°   r%   r%   r&   Útest_check_many_exprs*  s
    
z$TestOperations.test_check_many_exprsrÌ   )zdf > 2 and df > 3zdf > 2 or df > 3z
not df > 2c                 C  s”   t tj dd¡ƒ}| jdkrvd}d|v r,d}tjt|d��* tj	|d|i| j| j
d	� W d   ƒ q�1 sj0    Y  ntj	|d|i| j| j
d	� d S )
NrN   rÆ   rm   rq   Únotú'Not' nodes are not implementedrr   râ   )r¡   r-   r$   ©r
   r6   rT   rV   r-   r   rv   rw   rF   rx   r$   )r\   rÌ   râ   rz   r%   r%   r&   Útest_fails_and_or_not1  s$    	
ü&üz$TestOperations.test_fails_and_or_notÚcharrŸ   r™   c                 C  sˆ   t tj dd¡ƒ}d|› d�}| jdkrpd}tjt|d��$ tj	|| j| j
d� W d   ƒ q„1 sd0    Y  ntj	|| j| j
d� d S )	NrN   rÆ   z(df + 2)[df > 1] > 0 z	 (df > 0)rm   z$cannot evaluate scalar only bool opsrr   rÙ   r¾  )r\   rÀ  râ   r{   rz   r%   r%   r&   Útest_fails_ampersand_pipeP  s    
4z(TestOperations.test_fails_ampersand_pipeN)/r   r  r  r   r  r]   rx   rf  r   r  rÌ   r  rk  rl  rq  rs  ru  rx  rz  r|  r€  r‚  r�  r�  r‰   r’  r™  rœ  r�  r   r¡  r¢  r¥  r6   r·   rY  r¬  r­  r¯  r´  r¶  r·  r¹  rº  r»  r¿  rÁ  r%   r%   r%   r&   rZ  #  sf   

'"E	
%	 

&
	
7þ
rZ  c                   @  s„   e Zd Zejdd�dd„ ƒZdd„ Zdd„ Zej 	d	e
¡d
d„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zejdd„ ƒZdd„ Zdd„ ZdS )ÚTestMathTrY   c                 C  s   || _ || _d S r)   rZ   r[   r%   r%   r&   r]   ^  s    z TestMath.set_engine_parser_attrsc                 O  s8   | j |d< | j|d< | dd¡d |d< tj|i |¤ŽS r[  r]  r_  r%   r%   r&   rx   d  s    

zTestMath.evalc                 C  s€   t dtj d¡iƒ}|j}|}|› d�}|  |¡}tjdd�� tt|ƒ|ƒ}W d   ƒ n1 sb0    Y  tj	||dd� d S )NrÅ   rQ   z(a)Úignore©ÚallFr‹  )
r
   r6   rT   rV   rÅ   rx   ÚerrstaterD  r�   r‘   )r\   r0   râ   rÅ   ÚfnrÌ   ÚgotrÍ   r%   r%   r&   Útest_unary_functionsj  s    

,zTestMath.test_unary_functionsrÇ  c                 C  sŽ   t tj d¡tj d¡dœƒ}|j}|j}|› d�}|  |¡}tjdd��  tt|ƒ||ƒ}W d   ƒ n1 sp0    Y  t	j
||dd� d S )NrQ   r�  z(a, b)rÃ  rÄ  Fr‹  )r
   r6   rT   rV   rÅ   rÇ   rx   rÆ  rD  r�   rš   )r\   rÇ  râ   rÅ   rÇ   rÌ   rÈ  rÍ   r%   r%   r&   Útest_binary_functionsv  s    

.zTestMath.test_binary_functionsc                 C  sd   t tj d¡tj d¡dœƒ}|jd| j| jdd� |j}t t 	|j
¡|j¡}tj||dd� d S )NrQ   r�  ze = arctan2(sin(a), b)T©r$   r-   r‡  Fr‹  )r
   r6   rT   rV   rx   r$   r-   r<   Zarctan2ÚsinrÅ   rÇ   r�   r‘   ©r\   râ   rÈ  rÍ   r%   r%   r&   Útest_df_use_case‚  s    üzTestMath.test_df_use_casec                 C  s`   t tj d¡tj d¡dœƒ}|jd| j| jdd� |j}t |j	|j
 ¡}tj||dd� d S )NrQ   r�  ze = sin(a + b)TrË  Fr‹  )r
   r6   rT   rV   rx   r$   r-   r<   rÌ  rÅ   rÇ   r�   r‘   rÍ  r%   r%   r&   Ú test_df_arithmetic_subexpressionŽ  s
    z)TestMath.test_df_arithmetic_subexpressionc                 C  s„   t dtj d¡ |¡iƒ}|jj|ks*J ‚|jd| j| j	dd� |j
}t |j¡}|j|jksbJ ‚||jkspJ ‚tj||dd� d S )NrÅ   rQ   z
b = sin(a)TrË  Fr‹  )r
   r6   rT   rV   r¶   rÅ   rß   rx   r$   r-   rÇ   rÌ  r�   r‘   )r\   rß   Zexpect_dtyperâ   rÈ  rÍ   r%   r%   r&   Úcheck_result_type•  s    zTestMath.check_result_typec                 C  sD   |   tjtj¡ |   tjtj¡ |   tjtj¡ |   tjtj¡ d S r)   )rÐ  r6   Zint32rï   Zint64r  ra   r%   r%   r&   Útest_result_typesŸ  s    zTestMath.test_result_typesc                 C  s   |   tjtj¡ d S r)   )rÐ  r6   Z
complex128ra   r%   r%   r&   Útest_result_complex128¥  s    zTestMath.test_result_complex128c                 C  s^   t dtj d¡iƒ}d}tjt|d��$ |jd| j| j	d� W d   ƒ n1 sP0    Y  d S )NrÅ   rQ   z#"mysin" is not a supported functionrr   zmysin(a)rZ   )
r
   r6   rT   rV   r   rv   r3   rx   r$   r-   rþ   r%   r%   r&   Útest_undefined_func®  s    zTestMath.test_undefined_funcc                 C  s^   t dtj d¡iƒ}d}tjt|d��$ |jd| j| j	d� W d   ƒ n1 sP0    Y  d S )NrÅ   rQ   z1Function "sin" does not support keyword argumentsrr   zsin(x=a)rZ   )
r
   r6   rT   rV   r   rv   r£   rx   r$   r-   rþ   r%   r%   r&   Útest_keyword_argµ  s    zTestMath.test_keyword_argN)r   r  r  r   r  r]   rx   rÉ  r   r  r   rÊ  rÎ  rÏ  rÐ  rÑ  r    r
  rÒ  rÓ  rÔ  r%   r%   r%   r&   rÂ  ]  s   




rÂ  rQ   c                   @  s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	TestScopec                 C  s$   d}t  td tj|||d�¡ d S )Nz
_var_s * 2rS   rZ   )r�   r’   Ú_var_srF   rx   )r\   r$   r-   r<   r%   r%   r&   Útest_global_scopeÁ  s    ÿzTestScope.test_global_scopec                 C  sD   d}t ƒ  ¡ }tjd|||d� t ƒ  ¡ }| d¡ ||ks@J ‚d S )Nr>   úx + 1r¯   Úlcls)rL  r‰  rF   rx   r^  )r\   r$   r-   rº   rÙ  Zlcls2r%   r%   r&   Útest_no_new_localsÇ  s    


zTestScope.test_no_new_localsc                 C  s8   d}t ƒ  ¡ }tjd||d� t ƒ  ¡ }||ks4J ‚d S )Nr>   rØ  rZ   )Úglobalsr‰  rF   rx   )r\   r$   r-   rº   ZgblsZgbls2r%   r%   r&   Útest_no_new_globalsÏ  s
    

zTestScope.test_no_new_globalsN)r   r  r  r×  rÚ  rÜ  r%   r%   r%   r&   rÕ  À  s   rÕ  c                  C  sL   d} t jt| d��& tjddddœdd� W d   ƒ n1 s>0    Y  d S )	NzInvalid engine 'asdf' passedrr   rn  r>   rS   ro  Úasdf)r¡   r$   ©r   rv   ÚKeyErrorrF   rx   ©rz   r%   r%   r&   Útest_invalid_engine×  s    rá  )Úuse_numexprrL   ))Tr   )Frm   c                 C  sP   ddl m} t d| ¡�$ |d ƒ}||ks.J ‚W d   ƒ n1 sB0    Y  d S )Nr   )Ú_check_engineúcompute.use_numexpr)Zpandas.core.computation.evalrã  rF   Úoption_context)râ  rL   rã  rK   r%   r%   r&   Útest_numexpr_option_respectedÞ  s    
ræ  c                  C  sz   t  dd¡�Z tg d¢g d¢dœƒ} |  d¡}td d gddgdœd	dgd
�}t ||¡ W d   ƒ n1 sl0    Y  d S )Nrä  F)TFTFNN)r>   rS   rÆ   r@  rN   rm  )rì   ÚBz
A.isnull()rN   rm  r@  )rü   )rF   rå  r
   rð   r�   r�   )râ   rK   rL   r%   r%   r&   Ú#test_numexpr_option_incompatible_opï  s    ÿ
rè  c                  C  sL   d} t jt| d��& tjddddœdd� W d   ƒ n1 s>0    Y  d S )	NzInvalid parser 'asdf' passedrr   rn  r>   rS   ro  rÝ  )r¡   r-   rÞ  rà  r%   r%   r&   Útest_invalid_parserû  s    ré  )rm   r   r‡   z dict[str, type[BaseExprVisitor]]Ú_parsersc              	   C  sb   t | }|d| |ƒ}|jD ]B}d}tjt|d�� t||ƒƒ  W d   ƒ q1 sR0    Y  qd S )NrØ  znodes are not implementedrr   )rê  Zunsupported_nodesr   rv   rw   rD  )r$   r-   ZVisitorClassÚinstrc  rz   r%   r%   r&   Útest_disallowed_nodes	  s    
rì  c                 C  sF   d}t jtdd��  tj|| |d� W d   ƒ n1 s80    Y  d S )Nzs +r„  rr   rZ   ©r   rv   rû   rF   rx   )r$   r-   r<   r%   r%   r&   Útest_syntax_error_exprs  s    rî  c                 C  sJ   d}d}t jt|d��  tj|| |d� W d   ƒ n1 s<0    Y  d S )Nzs + tzname 's' is not definedrr   rZ   )r   rv   ry  rF   rx   )r$   r-   r<   rz   r%   r%   r&   Útest_name_error_exprs  s    rï  Úexpress)za + @bz@a + bz@a + @bc                 C  s’   d\}}|dkrPt jtdd��  tj|| |d� W d   ƒ qŽ1 sD0    Y  n>t jtdd��  tj|| |d� W d   ƒ n1 s„0    Y  d S )N©r>   rS   r‡   zThe '@' prefix is onlyrr   rZ   zThe '@' prefix is notrí  )r$   r-   rð  rÅ   rÇ   r%   r%   r&   Ú%test_invalid_local_variable_reference#  s    0rò  c                 C  sx   d\}}| dkrTd}t jt|d��  tjd| |d� W d   ƒ qt1 sH0    Y  n tjd| |d�}||| kstJ ‚d S )Nrñ  r   zVariables in expression .+rr   zsin + dotted_linerZ   )r   rv   r   rF   rx   )r$   r-   rÌ  Zdotted_linerz   r°   r%   r%   r&   Útest_numexpr_builtin_raises/  s    0ró  c                 C  sH   d}t jtdd��" tjd|| |d� W d   ƒ n1 s:0    Y  d S )N)é*   g      @zResolver of type .+rr   r®  )Ú	resolversr$   r-   )r   rv   r£   rF   rx   )r$   r-   Zcannot_resolver%   r%   r&   Útest_bad_resolver_raises:  s    rö  c                 C  sB   t jtdd��  tjd| |d� W d   ƒ n1 s40    Y  d S )Nzexpr cannot be an empty stringrr   Ú rZ   ©r   rv   r3   rF   rx   rZ   r%   r%   r&   Útest_empty_string_raises@  s    rù  c                 C  sB   t jtdd��  tjd| |d� W d   ƒ n1 s40    Y  d S )Nz#only a single expression is allowedrr   z1 + 1; 2 + 2rZ   rí  rZ   r%   r%   r&   Ú$test_more_than_one_expression_raisesF  s    rú  Úcmprn   r:   c              	   C  s¾   t dd„ ttjji}||  ƒ }||  ƒ } || ƒ }d|› d|› d�}d|› d|› d�}d|› d|› d	�}	|||	fD ]F}
d
}tjt|d��  tj	|
||d� W d   ƒ qr1 s®0    Y  qrd S )Nc                   S  s   t j d¡S )NrQ   )r6   rT   rÊ   r%   r%   r%   r&   r»   O  rb   z0test_bool_ops_fails_on_scalars.<locals>.<lambda>r”   r•   r–   r—   rt   r˜   ru   rä   rr   rZ   )
ÚintrO   r6   rT   rV   r   rv   rw   rF   rx   )r8   rû  r:   r$   r-   Úgenr›   rœ   r�   rž   r{   rz   r%   r%   r&   Útest_bool_ops_fails_on_scalarsK  s    


rþ  Úotherz'x'z...c                 C  sJ   t dg d¢iƒ}| d| › �¡}tg d¢dd�}tr:d |_t ||¡ d S )Nrì   )rÅ   rÇ   r;   rî   )FFF)rý   )r
   rx   r   r   rý   r�   r‘   )rÿ  râ   rK   rL   r%   r%   r&   Útest_equals_various^  s    r   c                 C  s*   d}t j}tj|| |d�}||ks&J ‚d S )Nzinf + 1rZ   )r6   ÚinfrF   rx   )r$   r-   r  rL   rK   r%   r%   r&   Útest_infp  s    r  c                 C  sÌ   d}t  t¡�"}tjd| |dd� W d   ƒ n1 s60    Y  t|ƒdksPJ ‚|t|d jƒv sfJ ‚t  t¡�"}tjd| |dd� W d   ƒ n1 s˜0    Y  t|ƒdks²J ‚|t|d jƒv sÈJ ‚d S )Nz0The `truediv` parameter in pd.eval is deprecatedz1+1T)r$   r-   rv  r>   r   F)r�   r6  rw  rF   rx   rS  r4   rT  )r$   r-   rs   Úmr%   r%   r&   Útest_truediv_deprecatedw  s    00r  Úcolumnu	   Temp(Â°C)u   Capacitance(Î¼F)c                 C  sT   t tj dd¡|dgd�}||| dk }d|› d�}|j|| d�}t ||¡ d S )NrN   rS   rÇ   rø   ú`z` > 5r1   )r
   r6   rT   rV   rð   r�   r�   )r$   r  râ   rL   Zquery_stringrK   r%   r%   r&   Útest_query_tokenˆ  s
    r  c                 C  s´   t ddgddggddgd�}||jdk  }|jd| |d	�}t ||¡ |d
kr”d}tjt|d��  |jd| |d	� W d   ƒ q°1 sˆ0    Y  n|jd| |d	�}t ||¡ d S )Nr   rQ   r>   r0  r§  Úcountrø   z
~(cat > 0)rZ   rm   r½  rr   znot (cat > 0))r
   r§  rð   r�   r�   r   rv   rw   )r$   r-   râ   rL   rK   rz   r%   r%   r&   Útest_negate_lt_eq_le’  s    0r	  c                   @  s.   e Zd Zej dddg d¢dg¡dd„ ƒZdS )	ÚTestValidateÚvaluer>   ÚTruer“  g      @c                 C  sD   d}t jt|d�� tjd|d� W d   ƒ n1 s60    Y  d S )Nz8For argument "inplace" expected type bool, received typerr   z2+2r†  rø  )r\   r  rz   r%   r%   r&   Útest_validate_bool_args£  s    z$TestValidate.test_validate_bool_argsN)r   r  r  r   r   r  r  r%   r%   r%   r&   r
  ¢  s   r
  )oÚ
__future__r   Ú	functoolsr   Ú	itertoolsr   r  r2  Únumpyr6   r   Zpandas.errorsr   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsr    Zpandas.core.dtypes.commonr   r   r   r	   r‡   rF   r
   r   r   Zpandas._testingZ_testingr�   Zpandas.core.computationr   Zpandas.core.computation.enginesr   r   Zpandas.core.computation.exprrG   ZcomputationrÌ   r   r   r   Z#pandas.core.computation.expressionsr   r   Zpandas.core.computation.opsr   r   r   r   r   r  r$   ZPARSERSr-   r/   r0   r2   r=   rC   rD   rH   rM   ÚsortedÚsetÚ
differencer	  r.   Úranger8   r:   r�   rX   r  r  r  r"  r#  rZ  rÂ  rT   rV   rÖ  rÕ  r!   rá  r   r  ræ  rè  ré  ZPyTablesExprVisitorrê  Ú__annotations__rì  rî  rï  rò  ró  rö  rù  rú  rü  rO   rþ  r   r  r  r  r	  r
  r%   r%   r%   r&   Ú<module>   sÖ   	ôÿ



þ
    h      >`
þ	

ý
þþ

	