o
    Û­jØ  ã                   @   st  d dl Z d dlZd dlZd dlmZmZ d dlm  m	Z
 d dlZd dlmZmZmZmZmZ d dlmZ d dlmZ ejddgdd„ d	�d
d„ ƒZejdejde
 d¡d�gdd„ d	�dd„ ƒZdd„ ZG dd„ dƒZG dd„ dƒZG dd„ dƒZe
 d¡G dd„ dƒƒZ e
 d¡G dd„ de ƒƒZ!G dd„ de ƒZ"G dd „ d e!ƒZ#G d!d"„ d"ƒZ$G d#d$„ d$ƒZ%G d%d&„ d&ƒZ&dS )'é    N)ÚNumExprClobberingErrorÚUndefinedVariableError)Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ
date_range)ÚNUMEXPR_INSTALLEDÚpythonÚpandasc                 C   ó   | S ©N© ©Úxr   r   ú_/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/frame/test_query_eval.pyÚ<lambda>   ó    r   )ÚparamsÚidsc                 C   ó   | j S r   ©Úparam©Úrequestr   r   r   Úparser   s   r   Únumexpr)Úmarksc                 C   r   r   r   r   r   r   r   r      r   c                 C   r   r   r   r   r   r   r   Úengine   s   r   c                 C   s    | dkrt  d| › �¡ d S d S )Nr   zcannot evaluate with parser=)ÚpytestÚskip)r   r   r   r   Úskip_if_no_pandas_parser%   s   ÿr!   c                   @   sV   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dd„ ZdS )Ú
TestCompatc                 C   s   t dg d¢iƒS )NÚA©é   é   é   ©r   ©Úselfr   r   r   Údf+   s   zTestCompat.dfc                 C   s   ||j dk S )Nr   ©r#   ©r*   r+   r   r   r   Ú	expected1/   s   zTestCompat.expected1c                 C   s
   |j d S ©Nr%   r,   r-   r   r   r   Ú	expected23   s   
zTestCompat.expected2c                 C   s4   |  d¡}t ||¡ | d¡}tj||dd� d S )NúA>0úA+1F©Úcheck_names©ÚqueryÚtmÚassert_frame_equalÚevalÚassert_series_equal©r*   r+   r.   r0   Úresultr   r   r   Útest_query_default7   s   

zTestCompat.test_query_defaultc                 C   s<   |j dd d�}t ||¡ |jdd d�}tj||dd� d S )Nr1   ©r   r2   Fr3   r5   r;   r   r   r   Útest_query_None?   ó   zTestCompat.test_query_Nonec                 C   s<   |j ddd�}t ||¡ |jddd�}tj||dd� d S )Nr1   r
   r>   r2   Fr3   r5   r;   r   r   r   Útest_query_pythonE   r@   zTestCompat.test_query_pythonc                 C   sÂ   t r |jddd�}t ||¡ |jddd�}tj||dd� d S d}tjt|d�� |jddd� W d   ƒ n1 s;w   Y  tjt|d�� |jddd� W d   ƒ d S 1 sZw   Y  d S )	Nr1   r   r>   r2   Fr3   z~'numexpr' is not installed or an unsupported version. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installed©Úmatch)	r	   r6   r7   r8   r9   r:   r   ÚraisesÚImportError)r*   r+   r.   r0   r<   Úmsgr   r   r   Útest_query_numexprK   s   ÿÿ"ÿzTestCompat.test_query_numexprN)Ú__name__Ú
__module__Ú__qualname__r   Úfixturer+   r.   r0   r=   r?   rA   rG   r   r   r   r   r"   *   s    


r"   c                   @   sx   e Zd Zej dddg¡ej dg d¢¡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S )ÚTestDataFrameEvalÚné   i   zop_str,op,rop))ú+Ú__add__Ú__radd__)ú-Ú__sub__Ú__rsub__)Ú*Ú__mul__Ú__rmul__)ú/Ú__truediv__Ú__rtruediv__c           
      C   sÆ   t dt|ƒtdƒd�}d|jd< | ¡ }t t |j|¡ |d¡tdƒd�}t	d|› d	�ƒ}t	d
|› d	�ƒ}	t
 |	|¡ |dv rNt||ƒ|ƒ}	t
 |	|¡ d S |dv rat||ƒ|ƒ}	t
 |	|¡ d S d S )Nr%   Úabcd©ÚindexÚcolumnsr&   r   éÿÿÿÿ©r^   zbase z dfzm )rO   rU   )rR   rX   )r   ÚrangeÚlistÚilocÚmeanÚnpÚtileÚvaluesÚreshaper9   r7   r8   Úgetattr)
r*   Úop_strÚopÚroprM   r+   ÚmÚbaseÚexpectedr<   r   r   r   Útest_ops_   s    
ÿþzTestDataFrameEval.test_opsc                 C   sj   t dtj d¡ d¡iƒ}tj|jdd…< dt |jdd… ¡ }dt |¡ jdd… }t 	||¡ d S )Nr#   r&   i¨a  r   é   r%   é   )
r   re   ÚrandomÚdefault_rngÚstandard_normalÚnanrc   Úisnanr7   r8   )r*   r+   ro   r<   r   r   r   Útest_dataframe_sub_numexpr_path…   s
   z1TestDataFrameEval.test_dataframe_sub_numexpr_pathc                 C   s”   t g d¢g d¢dœƒ}d}tjt|d�� | dd„ ¡ W d   ƒ n1 s&w   Y  tjt|d�� | d¡ W d   ƒ d S 1 sCw   Y  d S )	Nr$   )ÚaÚbrz   ©r#   ÚBz%expr must be a string to be evaluatedrB   c                 S   s
   | j dkS )Nrz   )r|   r   r   r   r   r   ”   s   
 z6TestDataFrameEval.test_query_non_str.<locals>.<lambda>éo   ©r   r   rD   Ú
ValueErrorr6   ©r*   r+   rF   r   r   r   Útest_query_non_strŽ   s   ÿ"ÿz$TestDataFrameEval.test_query_non_strc                 C   sR   t dg d¢iƒ}d}tjt|d�� | d¡ W d   ƒ d S 1 s"w   Y  d S )Nr#   r$   zexpr cannot be an empty stringrB   Ú r~   r€   r   r   r   Útest_query_empty_string™   s
   "ÿz)TestDataFrameEval.test_query_empty_stringc                 C   s~   t tj d¡ d¡tdƒd�}ddi}ddi}|jd||gd	�|d |d  ks*J ‚tjd||gd	�|d |d  ks=J ‚d S )
Nr&   ©é
   r&   Úabr`   ry   r%   rz   úa + b©Ú	resolvers)r   re   rs   rt   ru   rb   r9   Úpd)r*   r+   Údict1Údict2r   r   r   Útest_eval_resolvers_as_list¡   s   ÿ&*z-TestDataFrameEval.test_eval_resolvers_as_listc                 C   s^   t tj d¡ d¡tdƒd�}ddi}|jd|gd�}|d |d	 |d   }t ||¡ d S )
Nr&   r„   r†   r`   Úcz	a + b * crˆ   ry   rz   )	r   re   rs   rt   ru   rb   r9   r7   r:   )r*   r+   r‹   r<   ro   r   r   r   Útest_eval_resolvers_combined«   s   ÿz.TestDataFrameEval.test_eval_resolvers_combinedc                 C   s@   t dddgiƒ}| d¡}t ddgddgdœƒ}t ||¡ d S )NÚa1ÚYÚNzc = ((a1 == 'Y') & True)TF)r�   rŽ   )r   r9   r7   r8   )r*   r+   Úresro   r   r   r   Útest_eval_object_dtype_binop¸   s   
z.TestDataFrameEval.test_eval_object_dtype_binopc                 C   st   |dkrt jjdd�}| |¡ tt g d¢¡t g d¢¡dœƒ}|jd||d�}tt g d	¢¡ƒ}t	 
||¡ d S )
Nr   z/numexpr does not support extension array dtypes)Úreasonr$   ©rN   rq   é   ©ry   rz   za / b©r   r   )g      Ð?gš™™™™™Ù?ç      à?)r   ÚmarkÚxfailÚapplymarkerr   rŠ   Úarrayr9   r   r7   r:   )r*   r   r   r   r›   r+   r<   ro   r   r   r   Útest_extension_array_eval¿   s   ÿ
"z+TestDataFrameEval.test_extension_array_evalc                 C   s<   t dgdgdœƒ}|jd||d�}tdgƒ}t ||¡ d S )Ny      ð?       @y      ð?      ð?r˜   za/br™   y      ø?      à?)r   r9   r   r7   r:   )r*   r   r   r+   r<   ro   r   r   r   Útest_complex_evalË   s   
z#TestDataFrameEval.test_complex_evalN)rH   rI   rJ   r   r›   Úparametrizerp   rx   r�   rƒ   r�   r�   r”   rŸ   r    r   r   r   r   rL   ]   s    þ		
rL   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú TestDataFrameQueryWithMultiIndexc                 C   s4  t |ƒ tj d¡jddgdd�}tj d¡jddgdd�}tj||gdd	gd
�}ttj d¡ d¡|d�}t	|j
 d¡j|dd�}|jd||d�}|jd||d�}	||dk }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	||dk }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡ }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡  }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡ }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡  }
t ||
¡ t |	|
¡ d S )Nr&   ÚredÚgreenr…   ©ÚsizeÚeggsÚhamÚcolorÚfood©Únamesr„   ©r]   ©r]   Únamezcolor == "red"©r   r   z"red" == colorzcolor != "red"z"red" != colorzcolor == ["red"]z["red"] == colorzcolor != ["red"]z["red"] != colorz["red"] in colorz"red" in colorz["red"] not in colorz"red" not in color©r!   re   rs   rt   Úchoicer   Úfrom_arraysr   ru   r   r]   Úget_level_valuesrg   r6   r7   r8   Úisin©r*   r   r   ry   rz   r]   r+   ÚindÚres1Úres2Úexpr   r   r   Ú test_query_with_named_multiindexÔ   sL   ÿzATestDataFrameQueryWithMultiIndex.test_query_with_named_multiindexc                 C   sì  t |ƒ tj d¡jddgdd�}tj d¡jddgdd�}t ||g¡}ttj d¡ d¡|d	�}t	|j
 d
¡j|d	�}|jd||d�}|jd||d�}	||dk }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	||dk }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡ }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡  }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡ }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡  }
t ||
¡ t |	|
¡ t	|j
 d¡j|d	�}|jd||d�}|jd||d�}	||dk }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	||dk }
t ||
¡ t |	|
¡ |jd||d�}|jd||d�}	|| dg¡ }
t ||
¡ t |	|
¡ |jd||d�}|jd ||d�}	|| dg¡  }
t ||
¡ t |	|
¡ |jd!||d�}|jd"||d�}	|| dg¡ }
t ||
¡ t |	|
¡ |jd#||d�}|jd$||d�}	|| dg¡  }
t ||
¡ t |	|
¡ d S )%Nr&   r£   r¤   r…   r¥   r§   r¨   r„   r­   r   úilevel_0 == "red"r°   z"red" == ilevel_0úilevel_0 != "red"z"red" != ilevel_0zilevel_0 == ["red"]z["red"] == ilevel_0zilevel_0 != ["red"]z["red"] != ilevel_0z["red"] in ilevel_0z"red" in ilevel_0z["red"] not in ilevel_0z"red" not in ilevel_0r%   zilevel_1 == "eggs"z"eggs" == ilevel_1zilevel_1 != "eggs"z"eggs" != ilevel_1zilevel_1 == ["eggs"]z["eggs"] == ilevel_1zilevel_1 != ["eggs"]z["eggs"] != ilevel_1z["eggs"] in ilevel_1z"eggs" in ilevel_1z["eggs"] not in ilevel_1z"eggs" not in ilevel_1r±   r¶   r   r   r   Ú"test_query_with_unnamed_multiindex  s†   zCTestDataFrameQueryWithMultiIndex.test_query_with_unnamed_multiindexc           
      C   s^  t |ƒ tj d¡jddgdd�}t d¡}t ||g¡}d dg|_t	tj d¡ 
d¡|d�}|jd	||d
�}t|j d¡j|dd�}||dk }	t ||	¡ |jd||d
�}t|j d¡j|dd�}||dk }	t ||	¡ |jd||d
�}t|j d¡j|d�}||dk }	t ||	¡ |jd||d
�}t|j d¡j|d�}||dk }	t ||	¡ d S )Nr&   r£   r¤   r…   r¥   Úratingr„   r­   zrating == 1r°   r®   r%   zrating != 1r¼   r   r½   )r!   re   rs   rt   r²   Úaranger   r³   r¬   r   ru   r6   r   r]   r´   rg   r7   r8   )
r*   r   r   ry   rz   r]   r+   r“   r·   rº   r   r   r   Ú*test_query_with_partially_named_multiindex^  s4   

ÿÿzKTestDataFrameQueryWithMultiIndex.test_query_with_partially_named_multiindexc                 C   sÀ   t t d¡tjdd„ tdƒD ƒddgd�d�}| ¡ }d	d
„ }|j ¡ }|j	|||j	dƒ||j	dƒ|dœ}| 
¡ D ]$\}}t|tƒrL| || ¡sKJ ‚q9t|tƒrZt ||| ¡ q9tdƒ‚d S )N©r…   r'   c                 S   s   g | ]}t d ƒ‘qS )r…   )ra   )Ú.0Ú_r   r   r   Ú
<listcomp>�  s    z^TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.<listcomp>r&   Úspamr§   r«   r­   c                 S   s   |   |¡}| ¡ }| |_|S r   )r´   Ú	to_seriesr]   )ÚmiÚlevelÚlevel_valuesÚsr   r   r   rÇ   †  s   
z]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_series)r]   r^   rÆ   r§   Úclevel_0z object must be a Series or Index)r   re   Úonesr   r³   ra   Ú_get_index_resolversr^   rÇ   r]   ÚitemsÚ
isinstancer   Úis_r   r7   r:   ÚAssertionError)r*   r+   r‰   rÇ   Ú
col_seriesro   ÚkÚvr   r   r   Ú)test_query_multiindex_get_index_resolvers}  s,   ÿþ


û

úzJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolversN)rH   rI   rJ   r»   r¾   rÁ   rÖ   r   r   r   r   r¢   Ó   s
    2Xr¢   c                   @   s  e Zd Zejdd„ ƒZ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d'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zej d1d2ej gd3ej!gg¡d4d5„ ƒZ"d6d7„ Z#d8d9„ Z$d:S );ÚTestDataFrameQueryNumExprPandasc                 C   ó   dS ©Nr   r   r)   r   r   r   r   Ÿ  ó   z&TestDataFrameQueryNumExprPandas.enginec                 C   rØ   ©Nr   r   r)   r   r   r   r   £  rÚ   z&TestDataFrameQueryNumExprPandas.parserc                 C   s†   t |ƒ ttj d¡ d¡ƒ}tddd�|d< tddd�|d< td	dd�|d
< |jd||d�}||jdk d|j	k @  }t
 ||¡ d S )Nr&   ©rq   r'   ú1/1/2012rq   ©ÚperiodsÚdates1ú1/1/2013Údates2ú1/1/2014Údates3z"@df.dates1 < 20130101 < @df.dates3r™   Ú20130101)r!   r   re   rs   rt   ru   r   r6   rà   rä   r7   r8   ©r*   r   r   r+   r“   Úexpecr   r   r   Ú%test_date_query_with_attribute_access§  s   ÿzETestDataFrameQueryNumExprPandas.test_date_query_with_attribute_accessc                 C   ó~   t tj d¡ d¡ƒ}tddd�|d< tddd�|d< td	dd�|d
< |jd||d�}||jdk d|jk @  }t	 
||¡ d S )Nr&   rÜ   rÝ   rq   rÞ   rà   rá   râ   rã   rä   údates1 < 20130101 < dates3r™   rå   ©r   re   rs   rt   ru   r   r6   rà   rä   r7   r8   ræ   r   r   r   Ú#test_date_query_no_attribute_access³  s   zCTestDataFrameQueryNumExprPandas.test_date_query_no_attribute_accessc                 C   óÊ   d}t tj d¡ |df¡ƒ}td|d�|d< td|d�|d< td	|d�|d
< tj|jtj d¡ |¡dkdf< tj|jtj d¡ |¡dkd
f< |j	d||d�}||j
dk d|jk @  }t ||¡ d S )Nr…   r&   r'   rÝ   rÞ   rà   rá   râ   rã   rä   rš   rê   r™   rå   ©r   re   rs   rt   ru   r   rŠ   ÚNaTÚlocr6   rà   rä   r7   r8   ©r*   r   r   rM   r+   r“   rç   r   r   r   Útest_date_query_with_NaT¼  s   ""z8TestDataFrameQueryNumExprPandas.test_date_query_with_NaTc                 C   ó’   d}t tj d¡ |df¡ƒ}td|d�|d< td|d�|d< |jdd	d	d
�}|d u s-J ‚|jd||d�}||jdk d|j	k @  }t
 ||¡ d S )Nr…   r&   r'   rÝ   rÞ   rà   rã   rä   T©ÚinplaceÚdropúindex < 20130101 < dates3r™   rå   ©r   re   rs   rt   ru   r   Ú	set_indexr6   r]   rä   r7   r8   ©r*   r   r   rM   r+   Úreturn_valuer“   rç   r   r   r   Útest_date_index_queryÈ  s   z5TestDataFrameQueryNumExprPandas.test_date_index_queryc                 C   ó¨   d}t tj d¡ |df¡ƒ dti¡}td|d�|d< td|d�|d	< tj	|j
d
< |jdddd�}|d u s8J ‚|jd||d�}||jdk d|jk @  }t ||¡ d S )Nr…   r&   r'   r   rÝ   rÞ   rà   rã   rä   ©r   r   Trô   r÷   r™   rå   ©r   re   rs   rt   ru   ÚastypeÚobjectr   rŠ   rï   rc   rù   r6   r]   rä   r7   r8   rú   r   r   r   Útest_date_index_query_with_NaTÓ  s   ÿz>TestDataFrameQueryNumExprPandas.test_date_index_query_with_NaTc           	      C   sª   d}i }t d|d�|d< t d|d�|d< t|ƒ}tj|jtj d¡ |¡dkdf< |jdd	d	d
�}|d u s7J ‚|j	d||d�}||j
 ¡ dk d|jk @  }t ||¡ d S )Nr…   rÝ   rÞ   rà   rã   rä   r&   rš   Trô   rê   r™   rå   )r   r   rŠ   rï   rð   re   rs   rt   rù   r6   r]   rÇ   rä   r7   r8   )	r*   r   r   rM   Údr+   rû   r“   rç   r   r   r   Ú)test_date_index_query_with_NaT_duplicatesâ  s   "zITestDataFrameQueryNumExprPandas.test_date_index_query_with_NaT_duplicatesc              	   C   s´   d}t td|d�t |¡dœƒ}|jd||d�}t|ƒdks J ‚|jd||d�}t ||¡ d	}d
D ]%}tj	t
|d�� |jd|› d�||d� W d   ƒ n1 sRw   Y  q2d S )Nr…   rÝ   rÞ   )ÚdatesÚnondatezdates == nondater°   r   zdates != nondatez=Invalid comparison between dtype=datetime64\[ns\] and ndarray)ú<ú>ú<=ú>=rB   zdates z nondate)r   r   re   rÀ   r6   Úlenr7   r8   r   rD   Ú	TypeError)r*   r   r   rM   r+   r<   rF   rk   r   r   r   Útest_date_query_with_non_dateï  s   ÿÿ€ÿz=TestDataFrameQueryNumExprPandas.test_date_query_with_non_datec                 C   sh   t tdƒtddƒtddƒdœƒ}d}tjt|d�� |jd	||d
� W d   ƒ d S 1 s-w   Y  d S )Nr…   r'   é   rN   é   )ÚirO   Úrzinvalid syntaxrB   zi - +r™   )r   ra   r   rD   ÚSyntaxErrorr6   )r*   r   r   r+   rF   r   r   r   Útest_query_syntax_error   s
    "ÿz7TestDataFrameQueryNumExprPandas.test_query_syntax_errorc                 C   s  t |ƒ ttj d¡ d¡tdƒd�}d\}}|jd||d�}||j|j	k }t
 ||¡ |jd||d�}|||j	k }t
 ||¡ tjtd	d
�� |jd||d� W d   ƒ n1 s\w   Y  tjtdd
�� |jd||d� W d   ƒ d S 1 s|w   Y  d S )Nr&   )é   r&   r†   r`   )r%   r&   za > br™   z@a > bú!local variable 'c' is not definedrB   z@a > b > @czname 'c' is not definedz
@a > b > c)r!   r   re   rs   rt   ru   rb   r6   ry   rz   r7   r8   r   rD   r   )r*   r   r   r+   ry   rz   r“   ro   r   r   r   Útest_query_scope  s&   ÿÿý"ÿz0TestDataFrameQueryNumExprPandas.test_query_scopec                 C   sr   d }}t tj d¡j||dfd�tdƒd�}tjtdd�� |j	d	||d
� W d   ƒ d S 1 s2w   Y  d S )Nr…   r&   r'   r¥   Úabcr`   zname 'sin' is not definedrB   úsin > 5r™   )
r   re   rs   rt   Úintegersrb   r   rD   r   r6   )r*   r   r   rM   rm   r+   r   r   r   Útest_query_doesnt_pickup_local   s   ÿ"ÿz>TestDataFrameQueryNumExprPandas.test_query_doesnt_pickup_localc                 C   s~   d }}t tj d¡j||dfd�tdƒd�}d|j_d}tj	t
|d	�� |jd
||d� W d   ƒ d S 1 s8w   Y  d S )Nr…   r&   r'   r¥   r  r`   ÚsinzVariables in expression.+rB   r  r™   )r   re   rs   rt   r  rb   r]   r¯   r   rD   r   r6   )r*   r   r   rM   rm   r+   rF   r   r   r   Útest_query_builtin*  s   ÿ"ÿz2TestDataFrameQueryNumExprPandas.test_query_builtinc                 C   sv   t tj d¡ d¡g d¢d�}t |jd||d�||j|j	k  ¡ t |jd||d�||j|j	 |j	|j
 k ¡ d S )Nr&   rÂ   ©ry   rz   rŽ   r`   úa < br™   za + b > b * c)r   re   rs   rt   ru   r7   r8   r6   ry   rz   rŽ   ©r*   r   r   r+   r   r   r   Ú
test_query5  s   ÿÿþz*TestDataFrameQueryNumExprPandas.test_queryc                 C   s–   t tj d¡jddd�ttdƒdd�g d¢d�}|jd	||d
�}||jdk |j	|j
k @  }t ||¡ |jd||d
�}||j|j
k  }t ||¡ d S )Nr&   r…   rÂ   r¥   Úblob©r¯   r  r\   z(blob < 5) & (a < b)r™   rq   zblob < b)r   re   rs   rt   r  r   ra   r6   r]   ry   rz   r7   r8   ræ   r   r   r   Útest_query_index_with_nameB  s   ýz:TestDataFrameQueryNumExprPandas.test_query_index_with_namec                 C   s‚   t tj d¡jddd�tdƒg d¢d�}|jd||d�}||j|jk  }t	 
||¡ |jd	||d�}||jd
k  }t	 
||¡ d S )Nr&   r…   rÂ   r¥   r  r\   z	index < br™   z	index < 5rq   )r   re   rs   rt   r  ra   r6   r]   rz   r7   r8   ræ   r   r   r   Útest_query_index_without_nameQ  s   ýz=TestDataFrameQueryNumExprPandas.test_query_index_without_namec                 C   sð   t |ƒ ttj d¡ d¡ƒ}ttj d¡ d¡ƒ}||dk|dk@  }|jd||d�}t ||¡ t	j
d||d�}t ||¡ t	j
d||d�}||dk|dk@ ||dk dk@  }t ||¡ t	j
d||d�}|jd	||d�}t ||¡ d S )
Nr&   rÜ   r   z(@df > 0) & (@df2 > 0)r™   zdf[df > 0 and df2 > 0]z)df[df > 0 and df2 > 0 and df[df > 0] > 0]zdf[(df>0) & (df2>0)]ú(@df>0) & (@df2>0))r!   r   re   rs   rt   ru   r6   r7   r8   rŠ   r9   )r*   r   r   r+   Údf2ro   r<   r   r   r   Útest_nested_scopeb  s    ÿ$z1TestDataFrameQueryNumExprPandas.test_nested_scopec                 C   sZ   t tj d¡ d¡ƒ}tjtdd�� |jd||d� W d   ƒ d S 1 s&w   Y  d S )Nr&   rÜ   úname 'df' is not definedrB   zdf > 0r™   )	r   re   rs   rt   ru   r   rD   r   r6   r  r   r   r   Ú*test_nested_raises_on_local_self_referencey  s   "ÿzJTestDataFrameQueryNumExprPandas.test_nested_raises_on_local_self_referencec                 C   s„   t |ƒ ttj d¡ d¡tdƒd�}d}||j|k  }|jd||d�}t	 
||¡ ||j|jk  }|jd||d�}t	 
||¡ d S )	Nr&   )éd   r…   Ú
abcdefghijr`   r%   za < @br™   r  )r!   r   re   rs   rt   ru   rb   ry   r6   r7   r8   rz   )r*   r   r   r+   rz   Úexpectr<   r   r   r   Útest_local_syntax€  s   þz1TestDataFrameQueryNumExprPandas.test_local_syntaxc                 C   s’   t |ƒ tdƒ}ttj d¡ dt|ƒf¡|d�}|jd||d�}|j	|j
k |j
|jk @ |j
 |j	¡ @ |j |j
¡ @ }|| }t ||¡ d S )Nr  r&   r*  r`   z!a < b < c and a not in b not in cr™   )r!   rb   r   re   rs   rt   ru   r  r6   ry   rz   rŽ   rµ   r7   r8   )r*   r   r   Úcolsr+   r“   r·   rç   r   r   r   Útest_chained_cmp_and_in�  s   ÿÿ8z7TestDataFrameQueryNumExprPandas.test_chained_cmp_and_inc                 C   sÖ   t |ƒ ttj d¡jddd�dd�}ttj d¡jddd�dd�}t||d	œƒ}|j|jd
  	|¡ }|j
d||d�}t ||¡ ttj d¡jddd�dd�}|j|d
  	|¡ }|j
d||d�}t ||¡ d S )Nr&   r'   é   r¥   ry   r"  r…   rz   r˜   r%   z
b - 1 in ar™   z@b - 1 in a)r!   r   re   rs   rt   r  r   rð   rz   rµ   r6   r7   r8   )r*   r   r   ry   rz   r+   ro   r<   r   r   r   Útest_local_variable_with_in�  s   z;TestDataFrameQueryNumExprPandas.test_local_variable_with_inc                 C   sJ   t |ƒ d}tdg d¢iƒ}|jd||d�}||jdk }t ||¡ d S )Nr%   ry   )ry   ry   rz   rz   ú@cr2  z	a == "@c"r™   r2  ©r!   r   r6   ry   r7   r8   )r*   r   r   rŽ   r+   r<   ro   r   r   r   Útest_at_inside_string¬  s   z5TestDataFrameQueryNumExprPandas.test_at_inside_stringc                 C   sx   | j | j}}t|ƒ ttj d¡ d¡tdƒd�}tj	t
dd�� |jd||d� W d   ƒ d S 1 s5w   Y  d S )	Nr&   r„   r†   r`   r  rB   za == @cr™   )r   r   r!   r   re   rs   rt   rb   r   rD   r   r6   r  r   r   r   Útest_query_undefined_local´  s   ÿ"ýz:TestDataFrameQueryNumExprPandas.test_query_undefined_localc                 C   s<  d}t jddd… }t|t j d¡ |j¡dœƒ}d|j_|j	d||d�}||d d	k }t
 ||¡ t|t j d¡ |j¡dœƒ}|j	d
||d�}|j|j|jd	k  }t
 ||¡ t|t j d¡ |j¡dœƒ}d|j_|j	d||d�}||jd	k }t
 ||¡ |j	d||d�}|j|j|jd	k  }t
 ||¡ d S )Nr%   r  ée   r&   )r]   rz   r]   z	index > 5r™   rq   zilevel_0 > 5r˜   ry   za > 5)re   Úr_r   rs   rt   ru   r¦   r]   r¯   r6   r7   r8   rð   ry   )r*   r   r   rM   ry   r+   r<   ro   r   r   r   Ú:test_index_resolvers_come_after_columns_with_the_same_name¾  s.   ÿÿzZTestDataFrameQueryNumExprPandas.test_index_resolvers_come_after_columns_with_the_same_namezop, fú==ú!=c           
      C   s‚   d}t tj d¡ |¡tj d¡ |¡dœƒ}tj|jd d d…df< d|› d�}|||jtjƒ }|j|||d�}	t 	|	|¡ d S )Nr…   r&   r˜   r   úa z infr™   )
r   re   rs   rt   Úinfrð   ry   r6   r7   r8   )
r*   rk   Úfr   r   rM   r+   Úqro   r<   r   r   r   Útest_infÝ  s   þÿz(TestDataFrameQueryNumExprPandas.test_infc                 C   sf   |}t ddd|dd�}t|d�}t|d�}| d¡}t ||¡ t|ƒ}| ¡  d¡}t ||¡ d S )Nz
2019-01-01Ú1dr…   Útime)ÚstartÚfreqrß   Útzr¯   r­   z"2018-01-03 00:00:00+00" < time)r   r   r6   r7   r8   Úreset_index)r*   Útz_aware_fixturerD  Údf_indexro   r+   r<   r   r   r   Útest_check_tz_aware_index_queryì  s   
ÿ


z?TestDataFrameQueryNumExprPandas.test_check_tz_aware_index_queryc                 C   sÜ   d}t dtj d¡ |¡ tj d¡ |¡dœƒ}||d  d¡dk }|jd||d�}t ||¡ t t tj d¡ |¡d	k tj	tj d¡ 
|¡¡tj d¡ 
|¡dœƒ}||d  ¡  }|jd
||d�}t ||¡ d S )Nr…   r&   r˜   ry   Úintr   za.astype('int') == 0r™   rš   za.notnull())r   re   rs   rt   r   r6   r7   r8   Úwhererv   ru   Únotnull)r*   r   r   rM   r+   ro   r<   r   r   r   Útest_method_calls_in_queryû  s*   þÿýúÿ
z:TestDataFrameQueryNumExprPandas.test_method_calls_in_queryN)%rH   rI   rJ   r   rK   r   r   rè   rì   rò   rü   r  r  r  r  r  r  r  r   r#  r$  r'  r)  r-  r/  r1  r4  r5  r8  r›   r¡   ÚoperatorÚeqÚner?  rH  rL  r   r   r   r   r×   �  s>    

	


r×   c                   @   s`   e Zd Zejdd„ ƒZ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S )ÚTestDataFrameQueryNumExprPythonc                 C   rØ   rÙ   r   r)   r   r   r   r     rÚ   z&TestDataFrameQueryNumExprPython.enginec                 C   rØ   ©Nr
   r   r)   r   r   r   r     rÚ   z&TestDataFrameQueryNumExprPython.parserc                 C   ré   )Nr&   rÜ   rÝ   rq   rÞ   rà   rá   râ   rã   rä   ú)(dates1 < 20130101) & (20130101 < dates3)r™   rå   rë   ræ   r   r   r   rì   !  s   ÿzCTestDataFrameQueryNumExprPython.test_date_query_no_attribute_accessc                 C   rí   )Nr…   r&   r'   rÝ   rÞ   rà   rá   râ   rã   rä   rš   rR  r™   rå   rî   rñ   r   r   r   rò   ,  s   ""ÿz8TestDataFrameQueryNumExprPython.test_date_query_with_NaTc                 C   ró   )Nr…   r&   r'   rÝ   rÞ   rà   rã   rä   Trô   ú((index < 20130101) & (20130101 < dates3)r™   rå   rø   rú   r   r   r   rü   :  s   ÿz5TestDataFrameQueryNumExprPython.test_date_index_queryc                 C   rý   )Nr…   r&   r'   r   rÝ   rÞ   rà   rã   rä   rþ   Trô   rS  r™   rå   rÿ   rú   r   r   r   r  G  s   ÿÿz>TestDataFrameQueryNumExprPython.test_date_index_query_with_NaTc                 C   sÄ   d}t tj d¡ |df¡ƒ}td|d�|d< td|d�|d< tj|jtj d¡ |¡d	kdf< |j	dd
d
d�}|d u s>J ‚d}t
jt|d�� |jd||d� W d   ƒ d S 1 s[w   Y  d S )Nr…   r&   r'   rÝ   rÞ   rà   rã   rä   rš   Trô   ú"'BoolOp' nodes are not implementedrB   r÷   r™   )r   re   rs   rt   ru   r   rŠ   rï   rð   rù   r   rD   ÚNotImplementedErrorr6   )r*   r   r   rM   r+   rû   rF   r   r   r   r  X  s   ""ÿzITestDataFrameQueryNumExprPython.test_date_index_query_with_NaT_duplicatesc           	      C   s@  d}t jd||d�}|dksJ ‚ttj d¡ d¡ƒ}ttj d¡ d¡ƒ}d}tjt	|d�� |j
d||d� W d   ƒ n1 sBw   Y  tjtd	d�� |j
d
||d� W d   ƒ n1 saw   Y  ||dk|dk@  }t jd||d�}t ||¡ ||dk|dk@ ||dk dk@  }t jd||d�}t ||¡ d S )Nr%   zx + 1r™   r&   rÜ   z5The '@' prefix is only supported by the pandas parserrB   r%  r(  z(df>0) & (df2>0)r   zdf[(df > 0) & (df2 > 0)]z+df[(df > 0) & (df2 > 0) & (df[df > 0] > 0)])rŠ   r9   r   re   rs   rt   ru   r   rD   r  r6   r   r7   r8   )	r*   r   r   r   r<   r+   r&  rF   ro   r   r   r   r'  d  s(   ÿÿ$ÿz1TestDataFrameQueryNumExprPython.test_nested_scopec                 C   s”   t g d¢g d¢dœƒ}d}tjt|d�� | d¡ W d   ƒ n1 s$w   Y  d}tjt|d�� | d¡ W d   ƒ d S 1 sCw   Y  d S )	Nr$   r–   )ÚminÚmaxzMVariables in expression \"\(min\) == \(1\)\" overlap with builtins: \('min'\)rB   zmin == 1zMVariables in expression \"\(max\) == \(1\)\" overlap with builtins: \('max'\)zmax == 1)r   r   rD   r   r6   )r*   r+   Úregex_to_matchr   r   r   Ú+test_query_numexpr_with_min_and_max_columns  s   ÿÿÿ"ÿzKTestDataFrameQueryNumExprPython.test_query_numexpr_with_min_and_max_columnsN)rH   rI   rJ   r   rK   r   r   rì   rò   rü   r  r  r'  rY  r   r   r   r   rP    s    

rP  c                   @   ó0   e Zd Zejdd„ ƒZejdd„ ƒZdd„ ZdS )ÚTestDataFrameQueryPythonPandasc                 C   rØ   rQ  r   r)   r   r   r   r   ‘  rÚ   z%TestDataFrameQueryPythonPandas.enginec                 C   rØ   rÛ   r   r)   r   r   r   r   •  rÚ   z%TestDataFrameQueryPythonPandas.parserc                 C   ód   d }}t tj d¡j||dfd�tdƒd�}d|j_||jdk }|jd	||d
�}t	 
||¡ d S ©Nr…   r&   r'   r¥   r  r`   r  rq   r  r™   ©r   re   rs   rt   r  rb   r]   r¯   r6   r7   r8   ©r*   r   r   rM   rm   r+   ro   r<   r   r   r   r  ™  ó   ÿz1TestDataFrameQueryPythonPandas.test_query_builtinN©rH   rI   rJ   r   rK   r   r   r  r   r   r   r   r[  �  ó    

r[  c                   @   rZ  )ÚTestDataFrameQueryPythonPythonc                 C   rØ   rQ  r   r)   r   r   r   r   ¦  rÚ   z%TestDataFrameQueryPythonPython.enginec                 C   rØ   rQ  r   r)   r   r   r   r   ª  rÚ   z%TestDataFrameQueryPythonPython.parserc                 C   r\  r]  r^  r_  r   r   r   r  ®  r`  z1TestDataFrameQueryPythonPython.test_query_builtinNra  r   r   r   r   rc  ¥  rb  rc  c                
   @   s¼   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 ddejgdejgdejgdejgg¡dd„ ƒZdd„ Zdd„ Ze	j
 dg d¢g d¢g d¢g d¢g d¢g d¢g¡dd „ ƒZd!S )"ÚTestDataFrameQueryStringsc              	   C   s¶  t tj d¡ d¡dgd�}ttdƒƒ|d< ||jdk }|dkrd}d	}|gd |gd  }|d d d
… }d\}	}
d|	g|
g  }d}t|||ƒD ]2\}}}|› d|› d|› �}t	j
t|d�� |j|||d|jid� W d   ƒ n1 sww   Y  qJd S |jd||d�}t ||¡ |jd||d�}t ||¡ t |||j dg¡ ¡ ||jdk }|jd||d�}t ||¡ |jd||d�}t ||¡ t |||j dg¡  ¡ d S )Nr&   ©r…   r%   rz   r`   Ú
aabbccddeeÚstringsry   r   z"a"r_   ©r9  r:  ú$'(Not)?In' nodes are not implementedú rB   )r   r   Ú
local_dictz"a" == stringsr™   zstrings == "a"zstrings != "a"z"a" != strings)r   re   rs   rt   ru   r   rb   rg  Úzipr   rD   rU  r6   r7   r8   rµ   ©r*   r   r   r+   r,  ÚcolÚlstÚlhsÚrhsrN  rO  ÚopsrF   rk   Úexr“   r   r   r   Útest_str_query_method»  sD   üÿ€þ
 z/TestDataFrameQueryStrings.test_str_query_methodc              	   C   s†  t tj d¡ d¡dgd�}ttdƒƒ|d< ||j ddg¡ }|dkr~d}d	}|gd |gd  }|d d d
… }d\}	}
d|	g|
g  }d}t	|||ƒD ].\}}}|› d|› d|› �}t
jt|d�� |j|||d� W d   ƒ n1 svw   Y  qMd S |jd||d�}t ||¡ |jd||d�}t ||¡ ||j ddg¡  }|jd||d�}t ||¡ |jd||d�}t ||¡ d S )Nr&   re  rz   r`   rf  rg  ry   r   z
["a", "b"]r_   rh  ri  rj  rB   r™   zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)r   re   rs   rt   ru   r   rb   rg  rµ   rl  r   rD   rU  r6   r7   r8   rm  r   r   r   Útest_str_list_query_methodä  s6   ÿ€þz4TestDataFrameQueryStrings.test_str_list_query_methodc                 C   s<  t tdƒtdƒtj d¡jddd�tj d¡jddd�dœƒ}|d	krY|jd
||d�}||j |j	¡ }t
 ||¡ |jd||d�}||j |j	¡|j|jk @  }t
 ||¡ d S d}tjt|d�� |jd
||d� W d   ƒ n1 suw   Y  d}tjt|d�� |jd||d� W d   ƒ d S 1 s—w   Y  d S )NÚaaaabbbbccccÚaabbccddeeffr&   rq   é   r¥   é	   ©ry   rz   rŽ   r  r   za in br°   za in b and c < dri  rB   rT  )r   rb   re   rs   rt   r  r6   ry   rµ   rz   r7   r8   rŽ   r  r   rD   rU  )r*   r   r   r+   r“   rç   rF   r   r   r   Útest_query_with_string_columns  s,   üÿÿ"ÿz8TestDataFrameQueryStrings.test_query_with_string_columnsc                 C   sš   t tdƒtdƒtj d¡jddd�tj d¡jddd�dœƒ}|jd	||d
�}||j|jk }t	 
||¡ |jd||d
�}||j|jk }t	 
||¡ d S )Nrv  rw  r&   rq   rx  r¥   ry  rz  za == br°   za != b)r   rb   re   rs   rt   r  r6   ry   rz   r7   r8   )r*   r   r   r+   r“   rº   r   r   r   Útest_object_array_eq_ne!  s   üÿz1TestDataFrameQueryStrings.test_object_array_eq_nec           	      C   sŽ   t |ƒ dd„ tddƒD ƒd }tdddd	�}td
ddd	�}tt dd¡ d¡|| |¡dœƒ}||jdk }|j	d||d�}t
 ||¡ d S )Nc                 S   s&   g | ]}d D ]
}d|› d|› �‘qqS ))ÚloadÚexitzpage rj  r   )rÃ   rM   Úactr   r   r   rÅ   4  s
    ÿÿzLTestDataFrameQueryStrings.test_query_with_nested_strings.<locals>.<listcomp>r%   rN   r&   z2014-01-01 0:00:01Ú30sr—   )rC  rß   z2014-02-01 1:00:01é   )ÚidÚeventÚ	timestampz"page 1 load"z'"page 1 load"' in eventr°   )r!   ra   r   r   re   rÀ   ÚrepeatÚappendrƒ  r6   r7   r8   )	r*   r   r   ÚeventsÚstamps1Ústamps2r+   ro   r“   r   r   r   Útest_query_with_nested_strings2  s"   ÿþýÿz8TestDataFrameQueryStrings.test_query_with_nested_stringsc                 C   sL   t |ƒ tg d¢g d¢dœƒ}|jd||d�}||jdk }t ||¡ d S )N)ry   rz   útest & testr$   r˜   za == "test & test"r°   r‹  r3  )r*   r   r   r+   r“   rç   r   r   r   Ú(test_query_with_nested_special_characterE  s
   zBTestDataFrameQueryStrings.test_query_with_nested_special_characterzop, funcr  r  r	  r
  c           
      C   sr   t tj d¡ tdƒd¡ƒ}t t |j¡ƒ}t||dœƒ}|j	d|› d�||d�}|||j
dƒ }	t ||	¡ d S )	Nr&   Úabcder  )ÚXr‘   zX z "d"r™   r  )r   re   rs   rt   r²   rb   rÀ   r¦   r   r6   rŽ  r7   r8   )
r*   r   r   rk   Úfuncry   rz   r+   r“   ro   r   r   r   Útest_query_lex_compare_stringsL  s   
z8TestDataFrameQueryStrings.test_query_lex_compare_stringsc                 C   sd   d}t j d¡jddt|ƒfd� t¡}t||d�}|jd||d�}||j	|j
@  }t ||¡ d S )N)ÚbidÚbidsizeÚaskÚasksizer&   r%   r¥   r`   z	bid & askr™   )re   rs   rt   r  r  r   Úboolr   r6   r‘  r“  r7   r8   )r*   r   r   r^   Údatar+   r“   ro   r   r   r   Ú"test_query_single_element_booleans^  s   $z<TestDataFrameQueryStrings.test_query_single_element_booleansc                 C   sP   t |ƒ tg d¢g d¢dœƒ}||jdk }d}|jd||d�}t ||¡ d S )N)úBUD USr˜  úIBM USr™  )gÍÌÌÌÌl[@g®Gázn[@gš™™™™éf@g33333ëf@)ÚSymbolÚPricer˜  zSymbol == @symbr°   )r!   r   rš  r6   r7   r8   )r*   r   r   r+   ÚeÚsymbr  r   r   r   Ú!test_query_string_scalar_variablef  s   þÿz;TestDataFrameQueryStrings.test_query_string_scalar_variableÚin_list)NÚasdfÚghjk)r   Nr¡  )r   r¡  N)NNr   )r   NN)NNNc           
      C   s¬   d}d}dd„ t |ƒD ƒ}td|idd�}|j d¡|_td|idd�}|jd	||d
�}||d dk }|jd||d
�}	t ||¡ t ||¡ t ||	¡ t ||	¡ d S )Nr   r
   c                 S   s   i | ]\}}|d kr||“qS )r   r   )rÃ   r  Úvaluer   r   r   Ú
<dictcomp>‚  s    zMTestDataFrameQueryStrings.test_query_string_null_elements.<locals>.<dictcomp>ry   Ústring©ÚdtypeÚint64za == 'asdf'r°   r   za <= 'asdf')Ú	enumerater   r]   r   r6   r7   r8   )
r*   rŸ  r   r   ro   Údf_expectedr+   r¸   r¹   Úres3r   r   r   Útest_query_string_null_elementss  s   z9TestDataFrameQueryStrings.test_query_string_null_elementsN)rH   rI   rJ   rt  ru  r{  r|  rŠ  rŒ  r   r›   r¡   rM  ÚltÚgtÚleÚger�  r—  rž  r«  r   r   r   r   rd  º  s:    )#üþ
		úþrd  c                   @   sD   e Zd Zejdd„ ƒZdd„ Zdd„ Zej 	dg d¢¡d	d
„ ƒZ
dS )ÚTestDataFrameEvalWithFramec                 C   s   t tj d¡ d¡tdƒd�S )Nr&   rÂ   r  r`   )r   re   rs   rt   ru   rb   r)   r   r   r   Úframe‘  s   ÿz TestDataFrameEvalWithFrame.framec                 C   s,   |j d||d�}|j|j }t ||¡ d S )Nr‡   r™   ©r9   ry   rz   r7   r:   ©r*   r±  r   r   r“   r,  r   r   r   Útest_simple_expr—  s   z+TestDataFrameEvalWithFrame.test_simple_exprc                 C   s6   |j d||d�}|j|jdk  |j }t ||¡ d S )Nza[a < 1] + br™   r%   r²  r³  r   r   r   Útest_bool_arith_exprœ  s   z/TestDataFrameEvalWithFrame.test_bool_arith_exprrk   )rO   rR   rU   rX   c                 C   sf   t ddgddgdœƒ}d}tjt|d�� |jd|› d	�||d
� W d   ƒ d S 1 s,w   Y  d S )Nr%   r&   rŽ   r  r˜   z:unsupported operand type\(s\) for .+: '.+' and '.+'|CannotrB   r;  z br™   )r   r   rD   r  r9   )r*   r   r   rk   r+   rF   r   r   r   Ú%test_invalid_type_for_operator_raises¡  s
   "ÿz@TestDataFrameEvalWithFrame.test_invalid_type_for_operator_raisesN)rH   rI   rJ   r   rK   r±  r´  rµ  r›   r¡   r¶  r   r   r   r   r°  �  s    
r°  c                   @   s0  e Zd Z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d%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zej  d5g d6¢¡d7d8„ ƒZ!ej  d9d:d;g¡ej  d5g d6¢¡d<d=„ ƒƒZ"d>d?„ Z#d@S )AÚ!TestDataFrameQueryBacktickQuotingc                 c   sÞ   � t i dg d¢“dg d¢“dg d¢“dg d¢“d	g d
¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d ¢“d!g d"¢“g d#¢g d$¢g d%¢g d&¢g d'¢d(œ¥ƒV  d)S )*zÄ
        Yields a dataframe with strings that may or may not need escaping
        by backticks. The last two columns cannot be escaped by backticks
        and should raise a ValueError.
        r#   r$   úB B)r'   r&   r%   úC Cr–   úC  C)r�  rN   r'   ÚC_C)é   ry  r…   úD_D D)é   r%   r6  úE.E)r—   r'   rq   úF-F)r¼  r%   r…   Ú1e1)r&   rN   r¼  Údef)r…   r¾  r&   úA (x))rN   r%   r'   zB(x))r%   r%   rq   zB (x))r&   r�  rN   õ     &^ :!â‚¬$?(} >    <++*''  )r&   rq   r—   r‚   )r…   r¾  r%   ú A)rN   r�  ry  ú  ©r%   r&   r%   )r—   r'   r%   )ry  r%   r¼  )r¼  r�  r—   )r&   rN   rq   )rq   r�  ry  )zit'szthat'su   â˜ºzfoo#barr%   Nr(   r)   r   r   r   r+   «  sX   €ÿþýüûúùø	÷
öõôóòñðïê
ÿz$TestDataFrameQueryBacktickQuoting.dfc                 C   s*   |  d¡}|d|d k  }t ||¡ d S )Nz	1 < `B B`r%   r¸  ©r6   r7   r8   ©r*   r+   r“   r,  r   r   r   Ú#test_single_backtick_variable_queryÍ  ó   
zETestDataFrameQueryBacktickQuoting.test_single_backtick_variable_queryc                 C   s6   |  d¡}|d|d k d|d k @  }t ||¡ d S )Nz1 < `B B` and 4 < `C C`r%   r¸  rN   r¹  rÈ  rÉ  r   r   r   Ú!test_two_backtick_variables_queryÒ  s   
zCTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_queryc                 C   ó*   |  d¡}|d |d  }t ||¡ d S )Nz	A + `B B`r#   r¸  ©r9   r7   r:   rÉ  r   r   r   Ú"test_single_backtick_variable_expr×  rË  zDTestDataFrameQueryBacktickQuoting.test_single_backtick_variable_exprc                 C   rÍ  )Nz`B B` + `C C`r¸  r¹  rÎ  rÉ  r   r   r   Ú test_two_backtick_variables_exprÜ  rË  zBTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_exprc                 C   rÍ  )Nz	`C_C` + Ar»  r#   rÎ  rÉ  r   r   r   Ú test_already_underscore_variableá  rË  zBTestDataFrameQueryBacktickQuoting.test_already_underscore_variablec                 C   rÍ  )NzC_C + `C C`r»  r¹  rÎ  rÉ  r   r   r   Útest_same_name_but_underscoresæ  rË  z@TestDataFrameQueryBacktickQuoting.test_same_name_but_underscoresc                 C   rÍ  )NzA + `D_D D`r#   r½  rÎ  rÉ  r   r   r   Ú!test_mixed_underscores_and_spacesë  rË  zCTestDataFrameQueryBacktickQuoting.test_mixed_underscores_and_spacesc                 C   rÍ  )Nz	A + `C_C`r#   r»  rÎ  rÉ  r   r   r   Ú'test_backtick_quote_name_with_no_spacesð  rË  zITestDataFrameQueryBacktickQuoting.test_backtick_quote_name_with_no_spacesc                 C   s2   |  d¡}|d |d  |d  }t ||¡ d S )Nz`E.E` + `F-F` - Ar¿  rÀ  r#   rÎ  rÉ  r   r   r   Útest_special_charactersõ  s   
z9TestDataFrameQueryBacktickQuoting.test_special_charactersc                 C   rÍ  )Nz	A + `1e1`r#   rÁ  rÎ  rÉ  r   r   r   Útest_start_with_digitú  rË  z7TestDataFrameQueryBacktickQuoting.test_start_with_digitc                 C   rÍ  )Nz	A + `def`r#   rÂ  rÎ  rÉ  r   r   r   Útest_keywordÿ  rË  z.TestDataFrameQueryBacktickQuoting.test_keywordc                 C   ó*   |  d¡}||d dk }t ||¡ d S )Nz`A` > 2r#   r&   rÈ  rÉ  r   r   r   Útest_unneeded_quoting  rË  z7TestDataFrameQueryBacktickQuoting.test_unneeded_quotingc                 C   rØ  )Nz`A (x)` > 2rÃ  r&   rÈ  rÉ  r   r   r   Útest_parenthesis	  rË  z2TestDataFrameQueryBacktickQuoting.test_parenthesisc                 C   rØ  )Nz`` > 5r‚   rq   rÈ  rÉ  r   r   r   Útest_empty_string  rË  z3TestDataFrameQueryBacktickQuoting.test_empty_stringc                 C   rØ  )Nz
`C  C` > 5rº  rq   rÈ  rÉ  r   r   r   Útest_multiple_spaces  rË  z6TestDataFrameQueryBacktickQuoting.test_multiple_spacesc                 C   rÍ  )Nz` A` + `  `rÅ  rÆ  rÎ  rÉ  r   r   r   Útest_start_with_spaces  rË  z8TestDataFrameQueryBacktickQuoting.test_start_with_spacesc                 C   rØ  )Nu"   `  &^ :!â‚¬$?(} >    <++*''  ` > 4rÄ  rN   rÈ  rÉ  r   r   r   Útest_lots_of_operators_string  rË  z?TestDataFrameQueryBacktickQuoting.test_lots_of_operators_stringc                 C   óB   d}t jt|d�� | d¡ W d   ƒ d S 1 sw   Y  d S )Nz(module 'pandas' has no attribute 'thing'rB   z	@pd.thing)r   rD   ÚAttributeErrorr9   )r*   r+   Úmessager   r   r   Útest_missing_attribute"  ó   "ÿz8TestDataFrameQueryBacktickQuoting.test_missing_attributec                 C   rß  )Nú6(Could not convert ).*( to a valid Python identifier.)rB   z`it's` > `that's`©r   rD   r  r6   r€   r   r   r   Útest_failing_quote'  rã  z4TestDataFrameQueryBacktickQuoting.test_failing_quotec                 C   rß  )Nrä  rB   u	   `â˜º` > 4rå  r€   r   r   r   Ú$test_failing_character_outside_range,  rã  zFTestDataFrameQueryBacktickQuoting.test_failing_character_outside_rangec                 C   rß  )NzFailed to parse backticksrB   z`foo#bar` > 4rå  r€   r   r   r   Útest_failing_hashtag1  rã  z6TestDataFrameQueryBacktickQuoting.test_failing_hashtagc                 C   sŽ   dd„ }|g}|  d¡ tjtdd�� |  d¡ W d  ƒ n1 s#w   Y  tjtdd�� |  d¡ W d  ƒ dS 1 s@w   Y  dS )	zí
        Only attributes and variables ('named functions') can be called.
        .__call__() is not an allowed attribute because that would allow
        calling anything.
        https://github.com/pandas-dev/pandas/pull/32460
        c                  W   rØ   r/   r   )rÄ   r   r   r   r�  >  s   zNTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.funcz@func()z"Only named functions are supportedrB   z@funcs[0]()Nz@funcs[0].__call__())r9   r   rD   r  )r*   r+   r�  Úfuncsr   r   r   Útest_call_non_named_expression6  s   
ÿ"ÿz@TestDataFrameQueryBacktickQuoting.test_call_non_named_expressionc                 C   sŒ   t ddgddggddg|d�}trtnd }t |¡� | d¡}W d   ƒ n1 s*w   Y  t g d	¢g d
¢gg d¢|d�}t ||¡ d S )Nr%   r&   r'   rN   ry   rz   ©r^   r¦  z	c = b - arÇ  )r'   rN   r%   r  ©r   r	   ÚRuntimeWarningr7   Úassert_produces_warningr9   r8   )r*   Úany_numeric_ea_and_arrow_dtyper+   Úwarningr<   ro   r   r   r   Útest_ea_dtypesK  s   ÿÿýz0TestDataFrameQueryBacktickQuoting.test_ea_dtypesc                 C   sŒ   t ddgddggddgdd�}trtnd }t |¡� | d	¡}W d   ƒ n1 s*w   Y  t g d
¢g d¢gg d¢dd�}t ||¡ d S )Nr%   r&   r'   rN   ry   rz   ÚFloat64rë  z	c = b - 1rÇ  )r'   rN   r'   r  rì  )r*   r+   rð  r<   ro   r   r   r   Útest_ea_dtypes_and_scalarZ  s   ÿÿz;TestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalarc                 C   sr   t ddgddggddg|d�}| d¡}t tddg|d	�tddg|d	�tddg|d
 jd	�dœƒ}t ||¡ d S )Nr%   r&   r'   rN   ry   rz   rë  z	c = 2 - 1r¥  rŽ   r  )r   r9   r   r¦  r7   r8   )r*   rï  r+   r<   ro   r   r   r   Ú#test_ea_dtypes_and_scalar_operatione  s   ÿ
ýÿzETestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar_operationr¦  )r§  ÚInt64úint64[pyarrow]c                 C   s¢   |dkr	t  d¡ tdtddg|d�iƒ}dh}|dkr tr tnd }t |¡� | d¡}W d   ƒ n1 s7w   Y  tdtdg|dgd	�iƒ}t 	||¡ d S )
Nrö  Úpyarrowry   r%   r&   r¥  rõ  z	a in @ref©r¦  r]   )
r   Úimportorskipr   r   r	   rí  r7   rî  r6   r8   )r*   r¦  r+   Úrefrð  r<   ro   r   r   r   Útest_query_ea_dtypest  s   
ÿz6TestDataFrameQueryBacktickQuoting.test_query_ea_dtypesr   r
   r   c                 C   sØ   |dkrt nd }|dkrtst d¡ |dkrt d¡ ttg d¢dd�tg d¢|d�d	œƒ}t |¡� |j	d
|d�}W d   ƒ n1 sFw   Y  ttddgdddgd�tddg|ddgd�d	œƒ}t 
||¡ d S )Nr   znumexpr not installedrö  r÷  )r%   r%   r&   rõ  r¥  )r%   r&   r&   r{   zA == Br>   r%   r&   r   rø  )rí  r	   r   r    rù  r   r   r7   rî  r6   r8   )r*   r¦  r   rð  r+   r<   ro   r   r   r   Ú!test_query_ea_equality_comparison�  s"   

 ÿÿþÿzCTestDataFrameQueryBacktickQuoting.test_query_ea_equality_comparisonc                 C   sT   t j d¡}tdt jd d gdd�itd�}| d¡}tdg itd�}t ||¡ d S )NÚUTCry   T)Úutcr¥  za > @now)	rŠ   Ú	TimestampÚnowr   Úto_datetimer  r6   r7   r8   )r*   r   r+   r<   ro   r   r   r   Útest_all_nat_in_object—  s
   
z8TestDataFrameQueryBacktickQuoting.test_all_nat_in_objectN)$rH   rI   rJ   r   rK   r+   rÊ  rÌ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  râ  ræ  rç  rè  rê  rñ  ró  rô  r›   r¡   rû  rü  r  r   r   r   r   r·  ª  sD    
!
r·  )'rM  Únumpyre   r   Úpandas.errorsr   r   Úpandas.util._test_decoratorsÚutilÚ_test_decoratorsÚtdr   rŠ   r   r   r   r   r   Úpandas._testingÚ_testingr7   Úpandas.core.computation.checkr	   rK   r   r   Ú
skip_if_nor   r!   r"   rL   r¢   r×   rP  r[  rc  rd  r°  r·  r   r   r   r   Ú<module>   sB    
þ
3v K  {x W