a
    é´«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   | S ©N© ©Úxr   r   úa/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/pandas/tests/frame/test_query_eval.pyÚ<lambda>   ó    r   )ÚparamsÚidsc                 C   s   | j S r   ©Úparam©Úrequestr   r   r   Úparser   s    r   Únumexpr)Zmarksc                 C   s   | S r   r   r   r   r   r   r      r   c                 C   s   | j S r   r   r   r   r   r   Úengine   s    r   c                 C   s   | dkrt  d| › �¡ 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©Zcheck_names©ÚqueryÚtmÚassert_frame_equalÚevalÚassert_series_equal©r'   r(   r+   r-   Ú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 )Nr.   ©r   r/   Fr0   r1   r7   r   r   r   Útest_query_None?   s    zTestCompat.test_query_Nonec                 C   s<   |j ddd�}t ||¡ |jddd�}tj||dd� d S )Nr.   r
   r:   r/   Fr0   r1   r7   r   r   r   Útest_query_pythonE   s    zTestCompat.test_query_pythonc                 C   s¾   t r>|jddd�}t ||¡ |jddd�}tj||dd� n|d}tjt|d�� |jddd� W d   ƒ n1 st0    Y  tjt|d�� |jddd� W d   ƒ n1 s°0    Y  d S )	Nr.   r   r:   r/   Fr0   z~'numexpr' is not installed or an unsupported version. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installed©Úmatch)	r	   r2   r3   r4   r5   r6   r   ÚraisesÚImportError)r'   r(   r+   r-   r8   Úmsgr   r   r   Útest_query_numexprK   s    ÿ,zTestCompat.test_query_numexprN)Ú__name__Ú
__module__Ú__qualname__r   Úfixturer(   r+   r-   r9   r;   r<   rB   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 ršt||ƒ|ƒ}	t
 |	|¡ n"|dv r¼t||ƒ|ƒ}	t
 |	|¡ d S )Nr"   Úabcd©ÚindexÚcolumnsr#   r   éÿÿÿÿ©rY   zbase z dfzm )rJ   rP   )rM   rS   )r   ÚrangeÚlistÚilocÚmeanÚnpZtileÚvaluesZreshaper5   r3   r4   Úgetattr)
r'   Zop_strÚopZroprH   r(   ÚmÚbaseÚexpectedr8   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   r`   ÚrandomÚdefault_rngÚstandard_normalÚnanr^   Úisnanr3   r4   )r'   r(   rf   r8   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 sL0    Y  tjt|d�� | d¡ W d   ƒ n1 s„0    Y  d S )	Nr!   )ÚaÚbrq   ©r    ÚBz%expr must be a string to be evaluatedr=   c                 S   s
   | j dkS )Nrq   )rs   r   r   r   r   r   ”   r   z6TestDataFrameEval.test_query_non_str.<locals>.<lambda>éo   ©r   r   r?   Ú
ValueErrorr2   ©r'   r(   rA   r   r   r   Útest_query_non_strŽ   s    ,z$TestDataFrameEval.test_query_non_strc                 C   sP   t dg d¢iƒ}d}tjt|d�� | d¡ W d   ƒ n1 sB0    Y  d S )Nr    r!   zexpr cannot be an empty stringr=   Ú ru   rw   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sTJ ‚tjd||gd	�|d |d  kszJ ‚d S )
Nr#   ©é
   r#   Úabr[   rp   r"   rq   úa + b©Ú	resolvers)r   r`   rj   rk   rl   r]   r5   Úpd)r'   r(   Údict1Z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   rp   rq   )	r   r`   rj   rk   rl   r]   r5   r3   r6   )r'   r(   r‚   r8   rf   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   r5   r3   r4   )r'   r(   Úresrf   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!   ©rI   rh   é   ©rp   rq   za / b©r   r   )g      Ð?gš™™™™™Ù?ç      à?)r   ÚmarkZxfailZapplymarkerr   r�   Úarrayr5   r   r3   r6   )r'   r   r   r   r‘   r(   r8   rf   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   r5   r   r3   r6   )r'   r   r   r(   r8   rf   r   r   r   Útest_complex_evalË   s    
z#TestDataFrameEval.test_complex_evalN)rC   rD   rE   r   r‘   Úparametrizerg   ro   rx   rz   rƒ   r…   rŠ   r“   r”   r   r   r   r   rG   ]   s   þ		
rG   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ÚcolorZfood©Únamesr{   ©rX   ©rX   Ú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   r`   rj   rk   Úchoicer   Úfrom_arraysr   rl   r   rX   Úget_level_valuesra   r2   r3   r4   Úisin©r'   r   r   rp   rq   rX   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™   Zratingr{   r    zrating == 1r£   r¡   r"   zrating != 1r¯   r   r°   )r   r`   rj   rk   r¥   Úaranger   r¦   rŸ   r   rl   r2   r   rX   r§   ra   r3   r4   )
r'   r   r   rp   rq   rX   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 ]J\}}t|tƒr˜| || ¡s¼J ‚qrt|tƒr´t ||| ¡ qrtdƒ‚qrd S )N©r|   r$   c                 S   s   g | ]}t d ƒ‘qS )r|   )r\   )Ú.0Ú_r   r   r   Ú
<listcomp>�  r   z^TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.<listcomp>r#   Úspamr›   rž   r    c                 S   s   |   |¡}| ¡ }| |_|S r   )r§   Ú	to_seriesrX   )ÚmiÚlevelZlevel_valuesÚsr   r   r   r¹   †  s    
z]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_series)rX   rY   r¸   r›   Zclevel_0z object must be a Series or Index)r   r`   Zonesr   r¦   r\   Z_get_index_resolversrY   r¹   rX   ÚitemsÚ
isinstancer   Úis_r   r3   r6   ÚAssertionError)r'   r(   r€   r¹   Z
col_seriesrf   ÚkÚvr   r   r   Ú)test_query_multiindex_get_index_resolvers}  s*    ÿþ


û

zJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolversN)rC   rD   rE   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   s   dS ©Nr   r   r&   r   r   r   r   Ÿ  s    z&TestDataFrameQueryNumExprPandas.enginec                 C   s   dS ©Nr   r   r&   r   r   r   r   £  s    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#   ©rh   r$   ú1/1/2012rh   ©ÚperiodsÚdates1ú1/1/2013Údates2ú1/1/2014Údates3z"@df.dates1 < 20130101 < @df.dates3r�   Ú20130101)r   r   r`   rj   rk   rl   r   r2   rË   rÏ   r3   r4   ©r'   r   r   r(   r‰   Úexpecr   r   r   Ú%test_date_query_with_attribute_access§  s    ÿzETestDataFrameQueryNumExprPandas.test_date_query_with_attribute_accessc                 C   s~   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È   rh   rÉ   rË   rÌ   rÍ   rÎ   rÏ   údates1 < 20130101 < dates3r�   rÐ   ©r   r`   rj   rk   rl   r   r2   rË   rÏ   r3   r4   rÑ   r   r   r   Ú#test_date_query_no_attribute_access³  s    zCTestDataFrameQueryNumExprPandas.test_date_query_no_attribute_accessc                 C   sÊ   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   r`   rj   rk   rl   r   r�   ÚNaTÚlocr2   rË   rÏ   r3   r4   ©r'   r   r   rH   r(   r‰   rÒ   r   r   r   Útest_date_query_with_NaT¼  s    ""z8TestDataFrameQueryNumExprPandas.test_date_query_with_NaTc                 C   s’   d}t tj d¡ |df¡ƒ}td|d�|d< td|d�|d< |jdd	d	d
�}|d u sZJ ‚|jd||d�}||jdk d|j	k @  }t
 ||¡ d S )Nr|   r#   r$   rÈ   rÉ   rË   rÎ   rÏ   T©ZinplaceZdropúindex < 20130101 < dates3r�   rÐ   ©r   r`   rj   rk   rl   r   Ú	set_indexr2   rX   rÏ   r3   r4   ©r'   r   r   rH   r(   Úreturn_valuer‰   rÒ   r   r   r   Útest_date_index_queryÈ  s    z5TestDataFrameQueryNumExprPandas.test_date_index_queryc                 C   s¨   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 spJ ‚|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   r`   rj   rk   rl   ÚastypeÚobjectr   r�   rØ   r^   rß   r2   rX   rÏ   r3   r4   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 snJ ‚|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Ù   r`   rj   rk   rß   r2   rX   r¹   rÏ   r3   r4   )	r'   r   r   rH   Ú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 ]J}tj	t
|d��( |jd|› d�||d� W d   ƒ qd1 s¤0    Y  qdd S )Nr|   rÈ   rÉ   )ÚdatesZnondatezdates == nondater£   r   zdates != nondatez=Invalid comparison between dtype=datetime64\[ns\] and ndarray)ú<ú>ú<=ú>=r=   zdates z nondate)r   r   r`   r²   r2   Úlenr3   r4   r   r?   Ú	TypeError)r'   r   r   rH   r(   r8   rA   rc   r   r   r   Útest_date_query_with_non_dateï  s    ÿz=TestDataFrameQueryNumExprPandas.test_date_query_with_non_datec                 C   sf   t tdƒtddƒtddƒdœƒ}d}tjt|d��  |jd	||d
� W d   ƒ n1 sX0    Y  d S )Nr|   r$   é   rI   é   )ÚirJ   Úrzinvalid syntaxr=   zi - +r�   )r   r\   r   r?   ÚSyntaxErrorr2   )r'   r   r   r(   rA   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¸0    Y  tjtdd
��  |jd||d� W d   ƒ n1 sö0    Y  d S )Nr#   )é   r#   r}   r[   )r"   r#   za > br�   z@a > bú!local variable 'c' is not definedr=   z@a > b > @czname 'c' is not definedz
@a > b > c)r   r   r`   rj   rk   rl   r]   r2   rp   rq   r3   r4   r   r?   r   )r'   r   r   r(   rp   rq   r‰   rf   r   r   r   Útest_query_scope  s"    ÿÿ.z0TestDataFrameQueryNumExprPandas.test_query_scopec                 C   sp   d }}t tj d¡j||dfd�tdƒd�}tjtdd��  |j	d	||d
� W d   ƒ n1 sb0    Y  d S )Nr|   r#   r$   r™   Úabcr[   zname 'sin' is not definedr=   úsin > 5r�   )
r   r`   rj   rk   Úintegersr]   r   r?   r   r2   )r'   r   r   rH   rd   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   ƒ n1 sn0    Y  d S )Nr|   r#   r$   r™   rû   r[   ÚsinzVariables in expression.+r=   rü   r�   )r   r`   rj   rk   rý   r]   rX   r¢   r   r?   r   r2   )r'   r   r   rH   rd   r(   rA   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´   ©rp   rq   r„   r[   úa < br�   za + b > b * c)r   r`   rj   rk   rl   r3   r4   r2   rp   rq   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™   Zblob©r¢   r  rW   z(blob < 5) & (a < b)r�   rh   zblob < b)r   r`   rj   rk   rý   r   r\   r2   rX   rp   rq   r3   r4   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  rW   z	index < br�   z	index < 5rh   )r   r`   rj   rk   rý   r\   r2   rX   rq   r3   r4   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   r`   rj   rk   rl   r2   r3   r4   r�   r5   )r'   r   r   r(   Údf2rf   r8   r   r   r   Útest_nested_scopeb  s     ÿ$z1TestDataFrameQueryNumExprPandas.test_nested_scopec                 C   sX   t tj d¡ d¡ƒ}tjtdd��  |jd||d� W d   ƒ n1 sJ0    Y  d S )Nr#   rÇ   úname 'df' is not definedr=   zdf > 0r�   )	r   r`   rj   rk   rl   r   r?   r   r2   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|   Z
abcdefghijr[   r"   za < @br�   r  )r   r   r`   rj   rk   rl   r]   rp   r2   r3   r4   rq   )r'   r   r   r(   rq   Úexpectr8   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   r]   r   r`   rj   rk   rl   rï   r2   rp   rq   r„   r¨   r3   r4   )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™   rp   r  r|   rq   rŽ   r"   z
b - 1 in ar�   z@b - 1 in a)r   r   r`   rj   rk   rý   r   rÙ   rq   r¨   r2   r3   r4   )r'   r   r   rp   rq   r(   rf   r8   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"   rp   )rp   rp   rq   rq   ú@cr  z	a == "@c"r�   r  ©r   r   r2   rp   r3   r4   )r'   r   r   r„   r(   r8   rf   r   r   r   Útest_at_inside_string¬  s    z5TestDataFrameQueryNumExprPandas.test_at_inside_stringc                 C   sv   | j | j }}t|ƒ ttj d¡ d¡tdƒd�}tj	t
dd��  |jd||d� W d   ƒ n1 sh0    Y  d S )	Nr#   r{   r}   r[   rù   r=   za == @cr�   )r   r   r   r   r`   rj   rk   r]   r   r?   r   r2   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#   )rX   rq   rX   z	index > 5r�   rh   zilevel_0 > 5rŽ   rp   za > 5)r`   Zr_r   rj   rk   rl   rš   rX   r¢   r2   r3   r4   rÙ   rp   )r'   r   r   rH   rp   r(   r8   rf   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   r`   rj   rk   ÚinfrÙ   rp   r2   r3   r4   )
r'   rc   Úfr   r   rH   r(   Úqrf   r8   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-01Z1dr|   Útime)ÚstartÚfreqrÊ   Útzr¢   r    z"2018-01-03 00:00:00+00" < time)r   r   r2   r3   r4   Zreset_index)r'   Ztz_aware_fixturer$  Zdf_indexrf   r(   r8   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Ž   rp   Úintr   za.astype('int') == 0r�   r�   za.notnull())r   r`   rj   rk   rå   r2   r3   r4   Úwhererm   rl   Znotnull)r'   r   r   rH   r(   rf   r8   r   r   r   Útest_method_calls_in_queryû  s*    þÿýúÿ
z:TestDataFrameQueryNumExprPandas.test_method_calls_in_queryN)%rC   rD   rE   r   rF   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•   ÚoperatorÚeqÚner   r%  r(  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   s   dS rÅ   r   r&   r   r   r   r     s    z&TestDataFrameQueryNumExprPython.enginec                 C   s   dS ©Nr
   r   r&   r   r   r   r     s    z&TestDataFrameQueryNumExprPython.parserc                 C   s~   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È   rh   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   sÊ   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×   rÚ   r   r   r   rÛ   ,  s    ""ÿz8TestDataFrameQueryNumExprPython.test_date_query_with_NaTc                 C   s’   d}t tj d¡ |df¡ƒ}td|d�|d< td|d�|d< |jdd	d	d
�}|d u sZJ ‚|jd||d�}||jdk d|j	k @  }t
 ||¡ d S )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   s¨   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 spJ ‚|jd||d�}||jdk d|jk @  }t ||¡ d S )Nr|   r#   r$   r   rÈ   rÉ   rË   rÎ   rÏ   rã   TrÜ   r/  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   ƒ n1 s´0    Y  d S )Nr|   r#   r$   rÈ   rÉ   rË   rÎ   rÏ   r�   TrÜ   ú"'BoolOp' nodes are not implementedr=   rÝ   r�   )r   r`   rj   rk   rl   r   r�   rØ   rÙ   rß   r   r?   ÚNotImplementedErrorr2   )r'   r   r   rH   r(   rá   rA   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 s„0    Y  tjtd	d��  |j
d
||d� W d   ƒ n1 sÂ0    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 parserr=   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�   r5   r   r`   rj   rk   rl   r   r?   rö   r2   r   r3   r4   )	r'   r   r   r   r8   r(   r	  rA   rf   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 sH0    Y  d}tjt|d�� | d¡ W d   ƒ n1 s„0    Y  d S )	Nr!   rŒ   )ÚminÚmaxzMVariables in expression \"\(min\) == \(1\)\" overlap with builtins: \('min'\)r=   zmin == 1zMVariables in expression \"\(max\) == \(1\)\" overlap with builtins: \('max'\)zmax == 1)r   r   r?   r   r2   )r'   r(   Zregex_to_matchr   r   r   Ú+test_query_numexpr_with_min_and_max_columns  s    ÿ(ÿzKTestDataFrameQueryNumExprPython.test_query_numexpr_with_min_and_max_columnsN)rC   rD   rE   r   rF   r   r   rÖ   rÛ   râ   rç   ré   r
  r4  r   r   r   r   r,    s   

r,  c                   @   s0   e Zd Zejdd„ ƒZejdd„ ƒZdd„ ZdS )ÚTestDataFrameQueryPythonPandasc                 C   s   dS r-  r   r&   r   r   r   r   ‘  s    z%TestDataFrameQueryPythonPandas.enginec                 C   s   dS rÆ   r   r&   r   r   r   r   •  s    z%TestDataFrameQueryPythonPandas.parserc                 C   sd   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ÿ   rh   rü   r�   ©r   r`   rj   rk   rý   r]   rX   r¢   r2   r3   r4   ©r'   r   r   rH   rd   r(   rf   r8   r   r   r   r   ™  s    ÿz1TestDataFrameQueryPythonPandas.test_query_builtinN©rC   rD   rE   r   rF   r   r   r   r   r   r   r   r5  �  s
   

r5  c                   @   s0   e Zd Zejdd„ ƒZejdd„ ƒZdd„ ZdS )ÚTestDataFrameQueryPythonPythonc                 C   s   dS r-  r   r&   r   r   r   r   ¦  s    z%TestDataFrameQueryPythonPython.enginec                 C   s   dS r-  r   r&   r   r   r   r   ª  s    z%TestDataFrameQueryPythonPython.parserc                 C   sd   d }}t tj d¡j||dfd�tdƒd�}d|j_||jdk }|jd	||d
�}t	 
||¡ d S r6  r7  r8  r   r   r   r   ®  s    ÿz1TestDataFrameQueryPythonPython.test_query_builtinNr9  r   r   r   r   r:  ¥  s
   

r:  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 ]d\}}}|› d|› d|› �}t	j
t|d��( |j|||d|jid� W d   ƒ q”1 sî0    Y  q”n´|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"   rq   r[   Ú
aabbccddeeÚstringsrp   r   z"a"rZ   ©r  r  ú$'(Not)?In' nodes are not implementedú r=   )r   r   Z
local_dictz"a" == stringsr�   zstrings == "a"zstrings != "a"z"a" != strings)r   r`   rj   rk   rl   r   r]   r>  Úzipr   r?   r1  r2   r3   r4   r¨   ©r'   r   r   r(   r  ÚcolÚlstÚlhsÚrhsr*  r+  ÚopsrA   rc   Úexr‰   r   r   r   Útest_str_query_method»  s>    ü(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   ƒ qš1 sì0    Y  qšn†|jd||d�}t ||¡ |jd||d�}t ||¡ ||j ddg¡  }|jd||d�}t ||¡ |jd||d�}t ||¡ d S )Nr#   r<  rq   r[   r=  r>  rp   r   z
["a", "b"]rZ   r?  r@  rA  r=   r�   zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)r   r`   rj   rk   rl   r   r]   r>  r¨   rB  r   r?   r1  r2   r3   r4   rC  r   r   r   Útest_str_list_query_methodä  s0    2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r°|jd
||d�}||j |j	¡ }t
 ||¡ |jd||d�}||j |j	¡|j|jk @  }t
 ||¡ n†d}tjt|d��  |jd
||d� W d   ƒ n1 sè0    Y  d}tjt|d��  |jd||d� W d   ƒ n1 �s,0    Y  d S )NÚaaaabbbbccccÚaabbccddeeffr#   rh   é   r™   é	   ©rp   rq   r„   rè   r   za in br£   za in b and c < dr@  r=   r0  )r   r]   r`   rj   rk   rý   r2   rp   r¨   rq   r3   r4   r„   rè   r   r?   r1  )r'   r   r   r(   r‰   rÒ   rA   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 )NrL  rM  r#   rh   rN  r™   rO  rP  za == br£   za != b)r   r]   r`   rj   rk   rý   r2   rp   rq   r3   r4   )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 rA  r   )rµ   rH   Zactr   r   r   r·   4  s   zLTestDataFrameQueryStrings.test_query_with_nested_strings.<locals>.<listcomp>r"   rI   r#   z2014-01-01 0:00:01Z30sr�   )r#  rÊ   z2014-02-01 1:00:01é   )ÚidÚeventÚ	timestampz"page 1 load"z'"page 1 load"' in eventr£   )r   r\   r   r   r`   r²   ÚrepeatÚappendrW  r2   r3   r4   )	r'   r   r   ÚeventsZstamps1Zstamps2r(   rf   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)rp   rq   útest & testr!   rŽ   za == "test & test"r£   r]  r  )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#   Zabcderø   )ÚXr‡   zX z "d"r�   rè   )r   r`   rj   rk   r¥   r]   r²   rš   r   r2   r_  r3   r4   )
r'   r   r   rc   Úfuncrp   rq   r(   r‰   rf   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)ÚbidZbidsizeÚaskZasksizer#   r"   r™   r[   z	bid & askr�   )r`   rj   rk   rý   rï   rå   Úboolr   r2   rb  rc  r3   r4   )r'   r   r   rY   Údatar(   r‰   rf   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 USrg  úIBM USrh  )gÍÌÌÌÌl[@g®Gázn[@gš™™™™éf@g33333ëf@)ÚSymbolZPricerg  zSymbol == @symbr£   )r   r   ri  r2   r3   r4   )r'   r   r   r(   ÚeZsymbrõ   r   r   r   Ú!test_query_string_scalar_variablef  s    þÿz;TestDataFrameQueryStrings.test_query_string_scalar_variableÚin_list)NÚasdfÚghjk)rm  Nrn  )rm  rn  N)NNrm  )rm  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 )rm  r   )rµ   rô   Úvaluer   r   r   Ú
<dictcomp>‚  r   zMTestDataFrameQueryStrings.test_query_string_null_elements.<locals>.<dictcomp>rp   Ústring©ÚdtypeÚint64za == 'asdf'r£   rm  za <= 'asdf')Ú	enumerater   rX   rå   r2   r3   r4   )
r'   rl  r   r   rf   Zdf_expectedr(   r«   r¬   Zres3r   r   r   Útest_query_string_null_elementss  s    z9TestDataFrameQueryStrings.test_query_string_null_elementsN)rC   rD   rE   rJ  rK  rQ  rR  r\  r^  r   r‘   r•   r)  ÚltÚgtÚleÚgera  rf  rk  rv  r   r   r   r   r;  º  s8   )#üþ	
	úþr;  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   r`   rj   rk   rl   r]   r&   r   r   r   Úframe‘  s    ÿz TestDataFrameEvalWithFrame.framec                 C   s,   |j d||d�}|j|j }t ||¡ d S )Nr~   r�   ©r5   rp   rq   r3   r6   ©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_exprrc   )rJ   rM   rP   rS   c                 C   sd   t ddgddgdœƒ}d}tjt|d��( |jd|› d	�||d
� W d   ƒ n1 sV0    Y  d S )Nr"   r#   r„   rè   rŽ   z:unsupported operand type\(s\) for .+: '.+' and '.+'|Cannotr=   r  z br�   )r   r   r?   rð   r5   )r'   r   r   rc   r(   rA   r   r   r   Ú%test_invalid_type_for_operator_raises¡  s    z@TestDataFrameEvalWithFrame.test_invalid_type_for_operator_raisesN)rC   rD   rE   r   rF   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 g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g 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$   r#   r"   rŒ   )rU  rI   r$   )é   rO  r|   )é   r"   r  )r�   r$   rh   )rƒ  r"   r|   )r#   rI   rƒ  )r|   r„  r#   )rI   r"   r$   )r"   r"   rh   )r#   rU  rI   )r#   rh   r�   )r|   r„  r"   )rI   rU  rO  ©r"   r#   r"   )r�   r$   r"   )rO  r"   rƒ  )rƒ  rU  r�   )r#   rI   rh   )rh   rU  rO  )r    úB BúC CúC  CÚC_CúD_D DúE.EúF-FÚ1e1ÚdefúA (x)zB(x)zB (x)õ     &^ :!â‚¬$?(} >    <++*''  ry   ú Aú  zit'szthat'su   â˜ºzfoo#barr"   Nr%   r&   r   r   r   r(   «  s2    êÿz$TestDataFrameQueryBacktickQuoting.dfc                 C   s*   |  d¡}|d|d k  }t ||¡ d S )Nz	1 < `B B`r"   r†  ©r2   r3   r4   ©r'   r(   r‰   r  r   r   r   Ú#test_single_backtick_variable_queryÍ  s    
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†  rI   r‡  r“  r”  r   r   r   Ú!test_two_backtick_variables_queryÒ  s    
zCTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_queryc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz	A + `B B`r    r†  ©r5   r3   r6   r”  r   r   r   Ú"test_single_backtick_variable_expr×  s    
zDTestDataFrameQueryBacktickQuoting.test_single_backtick_variable_exprc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz`B B` + `C C`r†  r‡  r—  r”  r   r   r   Ú test_two_backtick_variables_exprÜ  s    
zBTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_exprc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz	`C_C` + Ar‰  r    r—  r”  r   r   r   Ú test_already_underscore_variableá  s    
zBTestDataFrameQueryBacktickQuoting.test_already_underscore_variablec                 C   s*   |  d¡}|d |d  }t ||¡ d S )NzC_C + `C C`r‰  r‡  r—  r”  r   r   r   Útest_same_name_but_underscoresæ  s    
z@TestDataFrameQueryBacktickQuoting.test_same_name_but_underscoresc                 C   s*   |  d¡}|d |d  }t ||¡ d S )NzA + `D_D D`r    rŠ  r—  r”  r   r   r   Ú!test_mixed_underscores_and_spacesë  s    
zCTestDataFrameQueryBacktickQuoting.test_mixed_underscores_and_spacesc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz	A + `C_C`r    r‰  r—  r”  r   r   r   Ú'test_backtick_quote_name_with_no_spacesð  s    
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   s*   |  d¡}|d |d  }t ||¡ d S )Nz	A + `1e1`r    r�  r—  r”  r   r   r   Útest_start_with_digitú  s    
z7TestDataFrameQueryBacktickQuoting.test_start_with_digitc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz	A + `def`r    rŽ  r—  r”  r   r   r   Útest_keywordÿ  s    
z.TestDataFrameQueryBacktickQuoting.test_keywordc                 C   s*   |  d¡}||d dk }t ||¡ d S )Nz`A` > 2r    r#   r“  r”  r   r   r   Útest_unneeded_quoting  s    
z7TestDataFrameQueryBacktickQuoting.test_unneeded_quotingc                 C   s*   |  d¡}||d dk }t ||¡ d S )Nz`A (x)` > 2r�  r#   r“  r”  r   r   r   Útest_parenthesis	  s    
z2TestDataFrameQueryBacktickQuoting.test_parenthesisc                 C   s*   |  d¡}||d dk }t ||¡ d S )Nz`` > 5ry   rh   r“  r”  r   r   r   Útest_empty_string  s    
z3TestDataFrameQueryBacktickQuoting.test_empty_stringc                 C   s*   |  d¡}||d dk }t ||¡ d S )Nz
`C  C` > 5rˆ  rh   r“  r”  r   r   r   Útest_multiple_spaces  s    
z6TestDataFrameQueryBacktickQuoting.test_multiple_spacesc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz` A` + `  `r‘  r’  r—  r”  r   r   r   Útest_start_with_spaces  s    
z8TestDataFrameQueryBacktickQuoting.test_start_with_spacesc                 C   s*   |  d¡}||d dk }t ||¡ d S )Nu"   `  &^ :!â‚¬$?(} >    <++*''  ` > 4r�  rI   r“  r”  r   r   r   Útest_lots_of_operators_string  s    
z?TestDataFrameQueryBacktickQuoting.test_lots_of_operators_stringc                 C   s@   d}t jt|d�� | d¡ W d   ƒ n1 s20    Y  d S )Nz(module 'pandas' has no attribute 'thing'r=   z	@pd.thing)r   r?   ÚAttributeErrorr5   )r'   r(   Úmessager   r   r   Útest_missing_attribute"  s    z8TestDataFrameQueryBacktickQuoting.test_missing_attributec                 C   s@   d}t jt|d�� | d¡ W d   ƒ n1 s20    Y  d S )Nú6(Could not convert ).*( to a valid Python identifier.)r=   z`it's` > `that's`©r   r?   rö   r2   rw   r   r   r   Útest_failing_quote'  s    z4TestDataFrameQueryBacktickQuoting.test_failing_quotec                 C   s@   d}t jt|d�� | d¡ W d   ƒ n1 s20    Y  d S )Nrª  r=   u	   `â˜º` > 4r«  rw   r   r   r   Ú$test_failing_character_outside_range,  s    zFTestDataFrameQueryBacktickQuoting.test_failing_character_outside_rangec                 C   s@   d}t jt|d�� | d¡ W d   ƒ n1 s20    Y  d S )NzFailed to parse backticksr=   z`foo#bar` > 4r«  rw   r   r   r   Útest_failing_hashtag1  s    z6TestDataFrameQueryBacktickQuoting.test_failing_hashtagc                 C   sŒ   dd„ }|g}|  d¡ tjtdd�� |  d¡ W d  ƒ n1 sF0    Y  tjtdd�� |  d¡ W d  ƒ n1 s~0    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   s   dS r,   r   )r¶   r   r   r   r`  >  s    zNTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.funcz@func()z"Only named functions are supportedr=   z@funcs[0]()Nz@funcs[0].__call__())r5   r   r?   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 sT0    Y  t g d	¢g d
¢gg d¢|d�}t ||¡ d S )Nr"   r#   r$   rI   rp   rq   ©rY   rs  z	c = b - ar…  )r$   rI   r"   r  ©r   r	   ÚRuntimeWarningr3   Úassert_produces_warningr5   r4   )r'   Úany_numeric_ea_and_arrow_dtyper(   Úwarningr8   rf   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 sT0    Y  t g d
¢g d¢gg d¢dd�}t ||¡ d S )Nr"   r#   r$   rI   rp   rq   ZFloat64r±  z	c = b - 1r…  )r$   rI   r$   r  r²  )r'   r(   r¶  r8   rf   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$   rI   rp   rq   r±  z	c = 2 - 1rr  r„   r  )r   r5   r   rs  r3   r4   )r'   rµ  r(   r8   rf   r   r   r   Ú#test_ea_dtypes_and_scalar_operatione  s    ÿ
ýÿzETestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar_operationrs  )rt  Ú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 sn0    Y  tdtdg|dgd	�iƒ}t 	||¡ d S )
Nr»  Úpyarrowrp   r"   r#   rr  rº  z	a in @ref©rs  rX   )
r   Úimportorskipr   r   r	   r³  r3   r´  r2   r4   )r'   rs  r(   Úrefr¶  r8   rf   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r8t d¡ ttg d¢dd�tg d¢|d�d	œƒ}t |¡� |j	d
|d�}W d   ƒ n1 sŒ0    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º  rr  )r"   r#   r#   rr   zA == Br:   r"   r#   r   r½  )r³  r	   r   r   r¾  r   r   r3   r´  r2   r4   )r'   rs  r   r¶  r(   r8   rf   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ÚUTCrp   T)Úutcrr  za > @now)	r�   Ú	TimestampÚnowr   Úto_datetimeræ   r2   r3   r4   )r'   rÅ  r(   r8   rf   r   r   r   Útest_all_nat_in_object—  s
    
z8TestDataFrameQueryBacktickQuoting.test_all_nat_in_objectN)$rC   rD   rE   r   rF   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‚  ª  sB   
!
r‚  )'r)  Únumpyr`   r   Zpandas.errorsr   r   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdr   r�   r   r   r   r   r   Zpandas._testingZ_testingr3   Zpandas.core.computation.checkr	   rF   r   r   Z
skip_if_nor   r   r   rG   r–   rÄ   r,  r5  r:  r;  r{  r‚  r   r   r   r   Ú<module>   s@   
þ
3v K  {x W