a
    oÝEb'½  ã                   @   s\  d dl Z d dlZd dl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 dZdejdejd�fZejedd	„ d
�dd„ ƒZeje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jG dd„ dƒƒZej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)Ú	DataFrameÚIndexÚ
MultiIndexÚSeriesÚ
date_range)ÚNUMEXPR_INSTALLED)ÚpythonÚpandasr   Únumexpr)Zmarksc                 C   s   | S ©N© ©Úxr   r   úb/home/ja/django-apps/lartica_env/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   c                 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t| ƒ› �¡ d S )Nr	   zcannot evaluate with parser )ÚpytestÚskipÚrepr)r   r   r   r   Úskip_if_no_pandas_parser!   s    r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
TestCompatc                 C   s8   t dg d¢iƒ| _| j| jjdk | _| jjd | _d S )NÚA©é   é   é   r   r!   )r   Údfr   Ú	expected1Ú	expected2©ÚselfÚmethodr   r   r   Úsetup_method'   s    zTestCompat.setup_methodc                 C   s>   | j }| d¡}t || j¡ | d¡}tj|| jdd� d S )NúA>0úA+1F©Zcheck_names©r$   ÚqueryÚtmÚassert_frame_equalr%   ÚevalÚassert_series_equalr&   ©r(   r$   Úresultr   r   r   Útest_query_default,   s
    

zTestCompat.test_query_defaultc                 C   sF   | j }|jdd d�}t || j¡ |jdd d�}tj|| jdd� d S )Nr+   ©r   r,   Fr-   r.   r4   r   r   r   Útest_query_None6   s
    zTestCompat.test_query_Nonec                 C   sF   | j }|jddd�}t || j¡ |jddd�}tj|| jdd� d S )Nr+   r   r7   r,   Fr-   r.   r4   r   r   r   Útest_query_python>   s
    zTestCompat.test_query_pythonc                 C   sÈ   | j }trH|jddd�}t || j¡ |jddd�}tj|| jdd� n|d}t	j
t|d�� |jddd� W d   ƒ n1 s~0    Y  t	j
t|d�� |jddd� W d   ƒ n1 sº0    Y  d S )	Nr+   r
   r7   r,   Fr-   z~'numexpr' is not installed or an unsupported version. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installed©Úmatch)r$   r   r/   r0   r1   r%   r2   r3   r&   r   ÚraisesÚImportError)r(   r$   r5   Úmsgr   r   r   Útest_query_numexprF   s    ÿ,zTestCompat.test_query_numexprN)Ú__name__Ú
__module__Ú__qualname__r*   r6   r8   r9   r?   r   r   r   r   r   &   s
   
r   c                   @   sh   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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   éÿÿÿÿ©rU   zbase z dfzm )rF   rL   )rI   rO   )r   ÚrangeÚlistÚilocÚmeanÚnpZtileÚvaluesZreshaper2   r0   r1   Úgetattr)
r(   Zop_strÚopZroprD   r$   ÚmÚbaseÚexpectedr5   r   r   r   Útest_ops]   s    
ÿzTestDataFrameEval.test_opsc                 C   sd   t dtj d¡iƒ}tj|jdd…< dt |jdd… ¡ }dt |¡ jdd… }t ||¡ d S )Nr   i¨a  r   é   r!   é   )	r   r\   ÚrandomÚrandnÚnanrZ   Úisnanr0   r1   )r(   r$   rb   r5   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Úbrl   )r   ÚBz%expr must be a string to be evaluatedr:   c                 S   s
   | j dkS )Nrl   )rm   r   r   r   r   r   “   r   z6TestDataFrameEval.test_query_non_str.<locals>.<lambda>éo   ©r   r   r<   Ú
ValueErrorr/   ©r(   r$   r>   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:   Ú ro   rq   r   r   r   Útest_query_empty_string˜   s    z)TestDataFrameEval.test_query_empty_stringc                 C   sz   t tj dd¡tdƒd�}ddi}ddi}|jd||gd	�|d |d  ksPJ ‚tjd||gd	�|d |d  ksvJ ‚d S )
Né
   r"   ÚabrW   rk   r!   rl   úa + b©Ú	resolvers)r   r\   rf   rg   rY   r2   Úpd)r(   r$   Údict1Zdict2r   r   r   Útest_eval_resolvers_as_list    s
    &z-TestDataFrameEval.test_eval_resolvers_as_listc                 C   sZ   t tj dd¡tdƒd�}ddi}|jd|gd�}|d |d	 |d   }t ||¡ d S )
Nru   r"   rv   rW   Úcz	a + b * crx   rk   rl   )r   r\   rf   rg   rY   r2   r0   r3   )r(   r$   r{   r5   rb   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   r2   r0   r1   )r(   r$   Úresrb   r   r   r   Útest_eval_object_dtype_binop³   s    
z.TestDataFrameEval.test_eval_object_dtype_binopN)r@   rA   rB   r   ÚmarkÚparametrizerc   rj   rr   rt   r|   r~   rƒ   r   r   r   r   rC   Z   s   þ		rC   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú TestDataFrameQueryWithMultiIndexc                 C   s$  t |ƒ tjjddgdd�}tj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 )NÚredÚgreenru   ©ÚsizeÚeggsÚhamÚcolorZfood)Únamesr"   ©rT   ©rT   Ú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\   rf   Úchoicer   Úfrom_arraysr   rg   r   rT   Úget_level_valuesr]   r/   r0   r1   Úisin©r(   r   r   rk   rl   rT   r$   ÚindZres1Zres2Úexpr   r   r   Ú test_query_with_named_multiindex¼   sL    ÿzATestDataFrameQueryWithMultiIndex.test_query_with_named_multiindexc                 C   sÜ  t |ƒ tjjddgdd�}tj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ˆ   ru   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   sT  t |ƒ tj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ˆ   ru   r‰   Zratingr"   r�   zrating == 1r’   r�   r!   zrating != 1rœ   r   r�   )r   r\   rf   r”   Úaranger   r•   rŽ   r   rg   r/   r   rT   r–   r]   r0   r1   )
r(   r   r   rk   rl   rT   r$   r‚   r™   rš   r   r   r   Ú*test_query_with_partially_named_multiindexF  s4    

ÿÿzKTestDataFrameQueryWithMultiIndex.test_query_with_partially_named_multiindexc                 C   sª   t jdddddgd�}| ¡ }dd„ }|j ¡ }|j|||jdƒ||jdƒ|d	œ}| ¡ D ]J\}}t|tƒr€| 	|| ¡s¤J ‚qZt|t
ƒrœt  ||| ¡ qZtd
ƒ‚qZd S )Nru   r#   r"   Úspamr‹   )Zr_idx_nlevelsZr_idx_namesc                 S   s   |   |¡}| ¡ }| |_|S r   )r–   Ú	to_seriesrT   )ÚmiÚlevelZlevel_valuesÚsr   r   r   r¢   k  s    
z]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_series)rT   rU   r¡   r‹   ZC0z object must be a Series or Index)r0   ZmakeCustomDataframeZ_get_index_resolversrU   r¢   rT   ÚitemsÚ
isinstancer   Úis_r   r3   ÚAssertionError)r(   r$   ry   r¢   Z
col_seriesrb   ÚkÚvr   r   r   Ú)test_query_multiindex_get_index_resolverse  s$    ÿ


û

zJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolversN)r@   rA   rB   r›   rž   r    r¬   r   r   r   r   r†   »   s   2Xr†   c                   @   sì   e Zd Zedd„ ƒZe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d5d6„ Zd7S )8ÚTestDataFrameQueryNumExprPandasc                 C   s   d| _ d| _d S )Nr
   r	   ©r   r   ©Úclsr   r   r   Úsetup_class„  s    z+TestDataFrameQueryNumExprPandas.setup_classc                 C   s   | ` | `d S r   r®   r¯   r   r   r   Úteardown_class‰  s    z.TestDataFrameQueryNumExprPandas.teardown_classc                 C   s�   | j | j }}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 )Nrd   r#   ú1/1/2012©ÚperiodsÚdates1ú1/1/2013Údates2ú1/1/2014Údates3z"@df.dates1 < 20130101 < @df.dates3r®   Ú20130101)r   r   r   r   r\   rf   rg   r   r/   r¶   rº   r0   r1   ©r(   r   r   r$   r‚   Úexpecr   r   r   Ú%test_date_query_with_attribute_access�  s    ÿzETestDataFrameQueryNumExprPandas.test_date_query_with_attribute_accessc                 C   sˆ   | j | j }}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 )Nrd   r#   r³   r´   r¶   r·   r¸   r¹   rº   údates1 < 20130101 < dates3r®   r»   ©r   r   r   r\   rf   rg   r   r/   r¶   rº   r0   r1   r¼   r   r   r   Ú#test_date_query_no_attribute_accessš  s    zCTestDataFrameQueryNumExprPandas.test_date_query_no_attribute_accessc                 C   sÄ   | j | j }}d}ttj |d¡ƒ}td|d�|d< td|d�|d< td|d�|d	< tj|j	tj 
|¡d
kdf< tj|j	tj 
|¡d
kd	f< |jd||d�}||jdk d|jk @  }t ||¡ d S )Nru   r#   r³   r´   r¶   r·   r¸   r¹   rº   ç      à?r¿   r®   r»   ©r   r   r   r\   rf   rg   r   rz   ÚNaTÚlocÚrandr/   r¶   rº   r0   r1   ©r(   r   r   rD   r$   r‚   r½   r   r   r   Útest_date_query_with_NaT¤  s    z8TestDataFrameQueryNumExprPandas.test_date_query_with_NaTc                 C   s˜   | j | j }}d}ttj |d¡ƒ}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 )Nru   r#   r³   r´   r¶   r¹   rº   T©ZinplaceZdropúindex < 20130101 < dates3r®   r»   ©r   r   r   r\   rf   rg   r   Ú	set_indexr/   rT   rº   r0   r1   ©r(   r   r   rD   r$   Úreturn_valuer‚   r½   r   r   r   Útest_date_index_query±  s    z5TestDataFrameQueryNumExprPandas.test_date_index_queryc                 C   s¤   | j | j }}d}ttj |d¡ƒ}td|d�|d< td|d�|d< tj|j	d< |j
dd	d	d
�}|d u slJ ‚|jd||d�}||jdk d|jk @  }t ||¡ d S )Nru   r#   r³   r´   r¶   r¹   rº   ©r   r   TrÉ   rÊ   r®   r»   ©r   r   r   r\   rf   rg   r   rz   rÄ   rZ   rÌ   r/   rT   rº   r0   r1   rÍ   r   r   r   Útest_date_index_query_with_NaT½  s    z>TestDataFrameQueryNumExprPandas.test_date_index_query_with_NaTc           	      C   s²   | j | j }}d}i }td|d�|d< td|d�|d< t|ƒ}tj|jtj 	|¡dkdf< |j
dddd	�}|d u svJ ‚|jd
||d�}||j ¡ dk d|jk @  }t ||¡ d S )Nru   r³   r´   r¶   r¹   rº   rÂ   TrÉ   r¿   r®   r»   )r   r   r   r   rz   rÄ   rÅ   r\   rf   rÆ   rÌ   r/   rT   r¢   rº   r0   r1   )	r(   r   r   rD   Ú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Â   | j | j }}d}ttd|d�t |¡dœƒ}|jd||d�}t|ƒdksNJ ‚|jd||d�}t 	||¡ d	}d
D ]J}t
jt|d��( |jd|› d�||d� W d   ƒ qr1 s²0    Y  qrd S )Nru   r³   r´   )ÚdatesZnondatezdates == nondater’   r   zdates != nondatez=Invalid comparison between dtype=datetime64\[ns\] and ndarray©ú<ú>z<=z>=r:   zdates z nondate)r   r   r   r   r\   rŸ   r/   Úlenr0   r1   r   r<   Ú	TypeError)r(   r   r   rD   r$   r5   r>   r_   r   r   r   Útest_date_query_with_non_dateØ  s    ÿz=TestDataFrameQueryNumExprPandas.test_date_query_with_non_datec                 C   st   | j | j }}ttdƒtddƒtddƒdœƒ}d}tjt|d��  |jd	||d
� W d   ƒ n1 sf0    Y  d S )Nru   r#   é   rE   é   )ÚirF   Úrzinvalid syntaxr:   zi - +r®   )r   r   r   rX   r   r<   ÚSyntaxErrorr/   )r(   r   r   r$   r>   r   r   r   Útest_query_syntax_errorë  s
     z7TestDataFrameQueryNumExprPandas.test_query_syntax_errorc           	      C   s  ddl m} | j| j }}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|dd��  |j
d||d	� W d   ƒ n1 sÎ0    Y  tj|dd��  |j
d||d	� W d   ƒ n1 �s0    Y  d S )Nr   ©ÚUndefinedVariableErroré   r"   rv   rW   )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)Úpandas.core.computation.opsrã   r   r   r   r   r\   rf   rg   rY   r/   rk   rl   r0   r1   r   r<   )	r(   rã   r   r   r$   rk   rl   r‚   rb   r   r   r   Útest_query_scopeò  s"    ÿ.z0TestDataFrameQueryNumExprPandas.test_query_scopec                 C   s„   ddl m} | j| j }}d }}ttjj||dfd�tdƒd�}t	j
|dd	��  |jd
||d� W d   ƒ n1 sv0    Y  d S )Nr   râ   ru   r#   r‰   ÚabcrW   zname 'sin' is not definedr:   úsin > 5r®   )ræ   rã   r   r   r   r\   rf   ÚrandintrY   r   r<   r/   )r(   rã   r   r   rD   r`   r$   r   r   r   Útest_query_doesnt_pickup_local  s     z>TestDataFrameQueryNumExprPandas.test_query_doesnt_pickup_localc                 C   s�   ddl m} | j| j }}d }}ttjj||dfd�tdƒd�}d|j	_
d	}tj||d
��  |jd||d� W d   ƒ n1 s‚0    Y  d S )Nr   )ÚNumExprClobberingErrorru   r#   r‰   rè   rW   ÚsinzVariables in expression.+r:   ré   r®   )Zpandas.core.computation.enginesrì   r   r   r   r\   rf   rê   rY   rT   r‘   r   r<   r/   )r(   rì   r   r   rD   r`   r$   r>   r   r   r   Útest_query_builtin  s     z2TestDataFrameQueryNumExprPandas.test_query_builtinc                 C   s€   | j | j }}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 )Nru   r#   ©rk   rl   r}   rW   úa < br®   za + b > b * c)r   r   r   r\   rf   rg   r0   r1   r/   rk   rl   r}   )r(   r   r   r$   r   r   r   Ú
test_query%  s    ÿþz*TestDataFrameQueryNumExprPandas.test_queryc                 C   sž   | j | j }}ttj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 )Nru   ©ru   r#   r‰   Zblob©r‘   rï   rS   z(blob < 5) & (a < b)r®   rd   zblob < b)r   r   r   r\   rf   rê   r   rX   r/   rT   rk   rl   r0   r1   r¼   r   r   r   Útest_query_index_with_name1  s    ýz:TestDataFrameQueryNumExprPandas.test_query_index_with_namec                 C   sŠ   | j | j }}ttj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 )
Nru   rò   r‰   rï   rS   z	index < br®   z	index < 5rd   )r   r   r   r\   rf   rê   rX   r/   rT   rl   r0   r1   r¼   r   r   r   Útest_query_index_without_nameA  s    ýz=TestDataFrameQueryNumExprPandas.test_query_index_without_namec                 C   sô   | j }| j}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 )
Nrd   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   r   r\   rf   rg   r/   r0   r1   rz   r2   )r(   r   r   r$   Údf2rb   r5   r   r   r   Útest_nested_scopeS  s$    ÿ$z1TestDataFrameQueryNumExprPandas.test_nested_scopec                 C   sd   ddl m} ttj dd¡ƒ}tj|dd��$ |jd| j	| j
d� W d   ƒ n1 sV0    Y  d S )	Nr   râ   rd   r#   úname 'df' is not definedr:   zdf > 0r®   )ræ   rã   r   r\   rf   rg   r   r<   r/   r   r   )r(   rã   r$   r   r   r   Ú*test_nested_raises_on_local_self_referencem  s    zJTestDataFrameQueryNumExprPandas.test_nested_raises_on_local_self_referencec                 C   s�   t | jƒ | j| j }}ttj dd¡tdƒd�}d}||j|k  }|j	d||d�}t
 ||¡ ||j|jk  }|j	d||d�}t
 ||¡ d S )	Néd   ru   Z
abcdefghijrW   r!   za < @br®   rð   )r   r   r   r   r\   rf   rg   rY   rk   r/   r0   r1   rl   )r(   r   r   r$   rl   Úexpectr5   r   r   r   Útest_local_syntaxv  s    
z1TestDataFrameQueryNumExprPandas.test_local_syntaxc                 C   sš   t | jƒ | j| j }}tdƒ}ttj dt|ƒ¡|d�}|j	d||d�}|j
|jk |j|jk @ |j |j
¡ @ |j |j¡ @ }|| }t ||¡ d S )Nrè   rû   rW   z!a < b < c and a not in b not in cr®   )r   r   r   rY   r   r\   rf   rg   rÙ   r/   rk   rl   r}   r—   r0   r1   )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Ò   | j | j }}t|ƒ ttjjddd�dd�}ttjjddd�dd�}t||dœƒ}|j|j	d	  
|¡ }|jd
||d�}t ||¡ ttjjddd�dd�}|j|d	  
|¡ }|jd||d�}t ||¡ d S )Nr#   é   r‰   rk   ró   ru   rl   ©rk   rl   r!   z
b - 1 in ar®   z@b - 1 in a)r   r   r   r   r\   rf   rê   r   rÅ   rl   r—   r/   r0   r1   )r(   r   r   rk   rl   r$   rb   r5   r   r   r   Útest_local_variable_with_in�  s    z;TestDataFrameQueryNumExprPandas.test_local_variable_with_inc                 C   sX   | j | j }}t|ƒ d}tdg d¢iƒ}|jd||d�}||jdk }t ||¡ d S )Nr!   rk   )rk   rk   rl   rl   ú@cr  z	a == "@c"r®   r  )r   r   r   r   r/   rk   r0   r1   )r(   r   r   r}   r$   r5   rb   r   r   r   Útest_at_inside_string   s    z5TestDataFrameQueryNumExprPandas.test_at_inside_stringc                 C   s~   ddl m} | j| j }}t|ƒ ttj dd¡t	dƒd�}t
j|dd��  |jd	||d
� W d   ƒ n1 sp0    Y  d S )Nr   râ   ru   r"   rv   rW   rå   r:   za == @cr®   )ræ   rã   r   r   r   r   r\   rf   rÆ   rY   r   r<   r/   )r(   rã   r   r   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 |j¡dœƒ}d|j_|jd| j	| j
d�}||d dk }t ||¡ t|t j |j¡dœƒ}|jd	| j	| j
d�}|j|j|jdk  }t ||¡ t|t j |j¡d
œƒ}d|j_|jd| j	| j
d�}||jdk }t ||¡ |jd| j	| j
d�}|j|j|jdk  }t ||¡ d S )Nr!   rä   ée   )rT   rl   rT   z	index > 5r®   rd   zilevel_0 > 5r  rk   za > 5)r\   Zr_r   rf   rg   rŠ   rT   r‘   r/   r   r   r0   r1   rÅ   rk   )r(   rD   rk   r$   r5   rb   r   r   r   Ú:test_index_resolvers_come_after_columns_with_the_same_nameµ  s&    zZTestDataFrameQueryNumExprPandas.test_index_resolvers_come_after_columns_with_the_same_namec           	      C   sš   d}t tj |¡tj |¡dœƒ}tj|jd d d…df< tjtjdœ}| 	¡ D ]F\}}d|› d�}|||j
tjƒ }|j|| j| jd�}t ||¡ qNd S )	Nru   r  r"   r   ©z==z!=úa z infr®   )r   r\   rf   rÆ   ÚinfrÅ   ÚoperatorÚeqÚner¦   rk   r/   r   r   r0   r1   )	r(   rD   r$   rÓ   r_   ÚfÚqrb   r5   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1dru   Útime)ÚstartÚfreqrµ   Útzr‘   r�   z"2018-01-03 00:00:00+00" < time)r   r   r/   r0   r1   Zreset_index)r(   Ztz_aware_fixturer  Zdf_indexrb   r$   r5   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 |¡ tj |¡dœƒ}||d  d¡dk }|jd| j| jd�}t 	||¡ t t 
tj |¡d	k tjtj |¡¡tj |¡dœƒ}||d  ¡  }|jd
| j| jd�}t 	||¡ d S )Nru   r"   r  rk   Úintr   za.astype('int') == 0r®   rÂ   za.notnull())r   r\   rf   rÆ   Úastyper/   r   r   r0   r1   Úwhererh   rg   Znotnull)r(   rD   r$   rb   r5   r   r   r   Útest_method_calls_in_queryè  s    "
ÿ"
þÿz:TestDataFrameQueryNumExprPandas.test_method_calls_in_queryN)r@   rA   rB   Úclassmethodr±   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­   ‚  s:   


		r­   c                       sP   e Zd Ze‡ fdd„ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
‡  ZS )ÚTestDataFrameQueryNumExprPythonc                    s   t ƒ  ¡  d| _d| _d S )Nr
   r   ©Úsuperr±   r   r   r¯   ©Ú	__class__r   r   r±   ÿ  s    
z+TestDataFrameQueryNumExprPython.setup_classc                 C   sˆ   | j | j }}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 )Nrd   r#   r³   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Ä   | j | j }}d}ttj |d¡ƒ}td|d�|d< td|d�|d< td|d�|d	< tj|j	tj 
|¡d
kdf< tj|j	tj 
|¡d
kd	f< |jd||d�}||jdk d|jk @  }t ||¡ d S )Nru   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˜   | j | j }}d}ttj |d¡ƒ}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 )Nru   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¤   | j | j }}d}ttj |d¡ƒ}td|d�|d< td|d�|d< tj|j	d< |j
dd	d	d
�}|d u slJ ‚|jd||d�}||jdk d|jk @  }t ||¡ d S )Nru   r#   r³   r´   r¶   r¹   rº   rÐ   TrÉ   r!  r®   r»   rÑ   rÍ   r   r   r   rÒ   .  s    ÿz>TestDataFrameQueryNumExprPython.test_date_index_query_with_NaTc                 C   sÂ   | j | j }}d}ttj |d¡ƒ}td|d�|d< td|d�|d< tj|j	tj 
|¡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 )Nru   r#   r³   r´   r¶   r¹   rº   rÂ   TrÉ   ú"'BoolOp' nodes are not implementedr:   rÊ   r®   )r   r   r   r\   rf   rg   r   rz   rÄ   rÅ   rÆ   rÌ   r   r<   ÚNotImplementedErrorr/   )r(   r   r   rD   r$   rÎ   r>   r   r   r   rÔ   =  s    zITestDataFrameQueryNumExprPython.test_date_index_query_with_NaT_duplicatesc           
      C   sP  ddl m} | j}| j}d}tjd||d�}|dks8J ‚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|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   râ   r!   zx + 1r®   r"   rd   r#   z5The '@' prefix is only supported by the pandas parserr:   rö   rù   z(df>0) & (df2>0)zdf[(df > 0) & (df2 > 0)]z+df[(df > 0) & (df2 > 0) & (df[df > 0] > 0)])ræ   rã   r   r   rz   r2   r   r\   rf   rg   r   r<   rà   r/   r0   r1   )
r(   rã   r   r   r   r5   r$   r÷   r>   rb   r   r   r   rø   J  s*    ..$ÿz1TestDataFrameQueryNumExprPython.test_nested_scope)r@   rA   rB   r  r±   rÁ   rÈ   rÏ   rÒ   rÔ   rø   Ú__classcell__r   r   r  r   r  ý  s   r  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestDataFrameQueryPythonPandasc                    s   t ƒ  ¡  d| _d| _d S )Nr   r	   r  r¯   r  r   r   r±   k  s    
z*TestDataFrameQueryPythonPandas.setup_classc                 C   sl   | j | j }}d }}ttjj||dfd�tdƒd�}d|j_||jdk }|j	d||d	�}t
 ||¡ d S ©
Nru   r#   r‰   rè   rW   rí   rd   ré   r®   ©r   r   r   r\   rf   rê   rY   rT   r‘   r/   r0   r1   ©r(   r   r   rD   r`   r$   rb   r5   r   r   r   rî   q  s     z1TestDataFrameQueryPythonPandas.test_query_builtin©r@   rA   rB   r  r±   rî   r$  r   r   r  r   r%  j  s   r%  c                       s(   e Zd Ze‡ fdd„ƒZdd„ Z‡  ZS )ÚTestDataFrameQueryPythonPythonc                    s   t ƒ  ¡  d | _| _d S )Nr   r  r¯   r  r   r   r±   ~  s    
z*TestDataFrameQueryPythonPython.setup_classc                 C   sl   | j | j }}d }}ttjj||dfd�tdƒd�}d|j_||jdk }|j	d||d	�}t
 ||¡ d S r&  r'  r(  r   r   r   rî   ƒ  s     z1TestDataFrameQueryPythonPython.test_query_builtinr)  r   r   r  r   r*  }  s   r*  c                   @   sT   e Z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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 )Nru   r!   rl   rW   Ú
aabbccddeeÚstringsrk   r	   z"a"r"   rV   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\   rf   rg   r   rY   r-  Úzipr   r<   r#  r/   r0   r1   r—   ©r(   r   r   r$   rü   ÚcolÚlstÚlhsÚrhsr  r  Úopsr>   r_   Ú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 )Nru   r!   rl   rW   r,  r-  rk   r	   z
["a", "b"]r"   rV   r  r.  r/  r:   r®   zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)r   r\   rf   rg   r   rY   r-  r—   r0  r   r<   r#  r/   r0   r1   r1  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jddd�tj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Úaabbccddeeffrd   é   r‰   é	   ©rk   rl   r}   rÓ   r	   za in br’   za in b and c < dr.  r:   r"  )r   rY   r\   rf   rê   r/   rk   r—   rl   r0   r1   r}   rÓ   r   r<   r#  )r(   r   r   r$   r‚   r½   r>   r   r   r   Útest_query_with_string_columnsÜ  s(    üÿ.z8TestDataFrameQueryStrings.test_query_with_string_columnsc                 C   sŽ   t tdƒtdƒtjjddd�tjjddd�dœƒ}|jd||d	�}||j|jk }t 	||¡ |jd
||d	�}||j|jk }t 	||¡ d S )Nr:  r;  rd   r<  r‰   r=  r>  za == br’   za != b)
r   rY   r\   rf   rê   r/   rk   rl   r0   r1   )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 r/  r   )Ú.0rD   Zactr   r   r   Ú
<listcomp>	  s   zLTestDataFrameQueryStrings.test_query_with_nested_strings.<locals>.<listcomp>r!   rE   r"   z2014-01-01 0:00:01Z30sé   )r  rµ   z2014-02-01 1:00:01é   )ÚidÚeventÚ	timestampz"page 1 load"z'"page 1 load"' in eventr’   )r   rX   r   r   r\   rŸ   ÚrepeatÚappendrH  r/   r0   r1   )	r(   r   r   ÚeventsZstamps1Zstamps2r$   rb   r‚   r   r   r   Útest_query_with_nested_strings  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)rk   rl   útest & testr    r  za == "test & test"r’   rN  )r   r   r/   rk   r0   r1   )r(   r   r   r$   r‚   r½   r   r   r   Ú(test_query_with_nested_special_character  s
    zBTestDataFrameQueryStrings.test_query_with_nested_special_characterc                 C   s”   t tj tdƒd¡ƒ}t t |j¡ƒ}t||dœƒ}tj	tj
tjtjdœ}| ¡ D ]<\}}|jd|› d�||d�}	|||jdƒ }
t |	|
¡ qRd S )	NZabcderä   )ÚXr€   rÖ   zX z "d"r®   rÓ   )r   r\   rf   r”   rY   rŸ   rŠ   r   r  ÚltÚgtÚleÚger¦   r/   rP  r0   r1   )r(   r   r   rk   rl   r$   r6  r_   Úfuncr‚   rb   r   r   r   Útest_query_lex_compare_strings!  s    z8TestDataFrameQueryStrings.test_query_lex_compare_stringsc                 C   s^   d}t jjddt|ƒfd� t¡}t||d�}|jd||d�}||j|j	@  }t
 ||¡ d S )N)ÚbidZbidsizeÚaskZasksizer"   r!   r‰   rW   z	bid & askr®   )r\   rf   rê   rÙ   r  Úboolr   r/   rW  rX  r0   r1   )r(   r   r   rU   Údatar$   r‚   rb   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@)ÚSymbolZPricer\  zSymbol == @symbr’   )r   r   r^  r/   r0   r1   )r(   r   r   r$   ÚeZsymbrß   r   r   r   Ú!test_query_string_scalar_variable6  s    þÿz;TestDataFrameQueryStrings.test_query_string_scalar_variableN)r@   rA   rB   r8  r9  r?  r@  rM  rO  rV  r[  r`  r   r   r   r   r+  �  s   )#r+  c                   @   sF   e Zd Zdd„ Z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�| _d S )Nru   r#   rè   rW   )r   r\   rf   rg   rY   Úframer'   r   r   r   r*   E  s    z'TestDataFrameEvalWithFrame.setup_methodc                 C   s   | ` d S r   )rb  r'   r   r   r   Úteardown_methodH  s    z*TestDataFrameEvalWithFrame.teardown_methodc                 C   s2   | j jd||d�}| j j| j j }t ||¡ d S )Nrw   r®   ©rb  r2   rk   rl   r0   r3   ©r(   r   r   r‚   rü   r   r   r   Útest_simple_exprK  s    z+TestDataFrameEvalWithFrame.test_simple_exprc                 C   s>   | j jd||d�}| j j| j jdk  | j j }t ||¡ d S )Nza[a < 1] + br®   r!   rd  re  r   r   r   Útest_bool_arith_exprP  s    z/TestDataFrameEvalWithFrame.test_bool_arith_exprr_   )rF   rI   rL   rO   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  z3unsupported operand type\(s\) for .+: '.+' and '.+'r:   r	  z br®   )r   r   r<   rÚ   r2   )r(   r   r   r_   r$   r>   r   r   r   Ú%test_invalid_type_for_operator_raisesU  s    z@TestDataFrameEvalWithFrame.test_invalid_type_for_operator_raisesN)r@   rA   rB   r*   rc  rf  rg  r   r„   r…   rh  r   r   r   r   ra  D  s   ra  c                   @   sÐ   e Zd Zejd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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d1S )2Ú!TestDataFrameQueryBacktickQuotingÚclass)Úscopec                 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!   )rE   rd   rE  )rF  rE   r#   )é   r=  ru   )é   r!   r  )rE  r#   rd   )rl  r!   ru   )r"   rE   rl  )ru   rm  r"   )rE   r!   r#   )r!   r!   rd   )r"   rF  rE   )r"   rd   rE  )ru   rm  r!   )rE   rF  r=  )r!   r"   r!   )rE  r#   r!   )r=  r!   rl  )rl  rF  rE  )r"   rE   rd   )rd   rF  r=  )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)õ     &^ :!â‚¬$?(} >    <++*''  rs   ú Aú  zit'szthat'su   â˜ºzfoo#barr!   N)r   )r(   r   r   r   r$   _  s2    êÿz$TestDataFrameQueryBacktickQuoting.dfc                 C   s*   |  d¡}|d|d k  }t ||¡ d S )Nz	1 < `B B`r!   rn  ©r/   r0   r1   ©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!   rn  rE   ro  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   rn  ©r2   r0   r3   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`rn  ro  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` + Arq  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`rq  ro  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   rr  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   rq  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` - Ars  rt  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   ru  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   rv  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)` > 2rw  r"   r{  r|  r   r   r   Útest_parenthesis½  s    
z2TestDataFrameQueryBacktickQuoting.test_parenthesisc                 C   s*   |  d¡}||d dk }t ||¡ d S )Nz`` > 5rs   rd   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` > 5rp  rd   r{  r|  r   r   r   Útest_multiple_spacesÇ  s    
z6TestDataFrameQueryBacktickQuoting.test_multiple_spacesc                 C   s*   |  d¡}|d |d  }t ||¡ d S )Nz` A` + `  `ry  rz  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"   `  &^ :!â‚¬$?(} >    <++*''  ` > 4rx  rE   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<   ÚAttributeErrorr2   )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à   r/   rq   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“  rq   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“  rq   r   r   r   Útest_failing_hashtagå  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 )Nr!   r   )Ú_r   r   r   rU  ò  s    zNTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.funcz@func()z"Only named functions are supportedr:   z@funcs[0]()Nz@funcs[0].__call__())r2   r   r<   rÚ   )r(   r$   rU  Úfuncsr   r   r   Útest_call_non_named_expressionê  s    
(z@TestDataFrameQueryBacktickQuoting.test_call_non_named_expressionN)r@   rA   rB   r   Úfixturer$   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   ri  ^  s0   

!ri  )&r  Únumpyr\   r   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdr	   rz   r   r   r   r   r   Zpandas._testingZ_testingr0   Zpandas.core.computation.checkr   ZPARSERSr   Zskip_if_no_neZENGINESrš  r   r   r   r   rC   r†   r­   r  r%  r*  r+  ra  ri  r   r   r   r   Ú<module>   s<   

4a H  |l 6