a
    d/                     @   sh  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
j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
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)NumExprClobberingErrorUndefinedVariableError)	DataFrameIndex
MultiIndexSeries
date_range)NUMEXPR_INSTALLEDpythonpandasc                 C   s   | S N xr   r   k/var/www/html/stable-diffusion-webui/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t|   d S )Nr   zcannot evaluate with parser )pytestskiprepr)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   	expected22   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_default6   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   r0   Fr1   r2   r8   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;   r0   Fr1   r2   r8   r   r   r   test_query_pythonD   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 s0    Y  d S )	Nr/   r   r;   r0   Fr1   z~'numexpr' is not installed or an unsupported version. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installedmatch)	r	   r3   r4   r5   r6   r7   r   raisesImportError)r(   r)   r,   r.   r9   msgr   r   r   test_query_numexprJ   s    ,zTestCompat.test_query_numexprN)__name__
__module____qualname__r   fixturer)   r,   r.   r:   r<   r=   rC   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 rt|||}	t
|	| n"|dv rt|||}	t
|	| d S )Nr#   Zabcdindexcolumnsr$   r   rY   zbase z dfzm )rK   rQ   )rN   rT   )r   rangelistilocmeannpZtilevaluesZreshaper6   r4   r5   getattr)
r(   Zop_stropZroprI   r)   mbaseexpectedr9   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$   ia  r      r#      )
r   r`   randomdefault_rngstandard_normalnanr^   isnanr4   r5   )r(   r)   rf   r9   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 s0    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@   
ValueErrorr3   r(   r)   rB   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]   r6   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]   r6   r4   r7   )r(   r)   r   r9   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   r6   r4   r5   )r(   r)   resrf   r   r   r   test_eval_object_dtype_binop   s    
z.TestDataFrameEval.test_eval_object_dtype_binopN)rD   rE   rF   r   markparametrizerg   ro   rx   rz   r   r   r   r   r   r   r   rH   \   s   		
rH   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   r3   r4   r5   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   r3   r   rX   r   ra   r4   r5   )
r(   r   r   rp   rq   rX   r)   r   r   r   r   r   r   *test_query_with_partially_named_multiindexJ  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|	|| sJ qZt|t
rt |||  qZtd
qZd S )Nr|   r%   r$   spamr   )Zr_idx_nlevelsZr_idx_namesc                 S   s   |  |}| }| |_|S r   )r   	to_seriesrX   )milevelZlevel_valuessr   r   r   r   o  s    
z]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_series)rX   rY   r   r   ZC0z object must be a Series or Index)r4   ZmakeCustomDataframeZ_get_index_resolversrY   r   rX   items
isinstancer   is_r   r7   AssertionError)r(   r)   r   r   Z
col_seriesrf   kvr   r   r   )test_query_multiindex_get_index_resolversi  s$    




zJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolversN)rD   rE   rF   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.dates3r   r   20130101)r   r   r`   rj   rk   rl   r   r3   r   r   r4   r5   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   r3   r   r   r4   r5   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`   rj   rk   rl   r   r   NaTlocr3   r   r   r4   r5   r(   r   r   rI   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_indexr3   rX   r   r4   r5   r(   r   r   rI   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   r3   rX   r   r4   r5   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   r3   rX   r   r   r4   r5   )	r(   r   r   rI   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 s0    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   r3   lenr4   r5   r   r@   	TypeError)r(   r   r   rI   r)   r9   rB   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%      rJ      )irK   rzinvalid syntaxr>   zi - +r   )r   r\   r   r@   SyntaxErrorr3   )r(   r   r   r)   rB   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 s0    Y  tjtdd
  |jd||d W d    n1 s0    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]   r3   rp   rq   r4   r5   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   r3   )r(   r   r   rI   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   r3   )r(   r   r   rI   rd   r)   rB   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|   r%   rp   rq   r   r[   a < br   za + b > b * c)r   r`   rj   rk   rl   r4   r5   r3   rp   rq   r   r(   r   r   r)   r   r   r   
test_query  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\   r3   rX   rp   rq   r4   r5   r   r   r   r   test_query_index_with_name+  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\   r3   rX   rq   r4   r5   r   r   r   r   test_query_index_without_name:  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   r3   r4   r5   r   r6   )r(   r   r   r)   df2rf   r9   r   r   r   test_nested_scopeK  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   r3   r   r   r   r   *test_nested_raises_on_local_self_referenceb  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   r3   r4   r5   rq   )r(   r   r   r)   rq   expectr9   r   r   r   test_local_syntaxi  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   r3   rp   rq   r   r   r4   r5   )r(   r   r   colsr)   r   r   r   r   r   r   test_chained_cmp_and_iny  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   rp   rq   r#   z
b - 1 in ar   z@b - 1 in a)r   r   r`   rj   rk   r   r   r   rq   r   r3   r4   r5   )r(   r   r   rp   rq   r)   rf   r9   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   r3   rp   r4   r5   )r(   r   r   r   r)   r9   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   r3   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   r3   r4   r5   r   rp   )r(   r   r   rI   rp   r)   r9   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   r3   r4   r5   )
r(   rc   fr   r   rI   r)   qrf   r9   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   r3   r4   r5   Zreset_index)r(   Ztz_aware_fixturer  Zdf_indexrf   r)   r9   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   r3   r4   r5   whererm   rl   Znotnull)r(   r   r   rI   r)   rf   r9   r   r   r   test_method_calls_in_query  s*    
z:TestDataFrameQueryNumExprPandas.test_method_calls_in_queryN)%rD   rE   rF   r   rG   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   0  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 s0    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@   NotImplementedErrorr3   )r(   r   r   rI   r)   r   rB   r   r   r   r   A  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 s0    Y  tjtd	d  |j
d
||d W d    n1 s0    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   r6   r   r`   rj   rk   rl   r   r@   r   r3   r   r4   r5   )	r(   r   r   r   r9   r)   r   rB   rf   r   r   r   r   M  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 s0    Y  d S )	Nr"   rJ   rh      )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   r3   )r(   r)   Zregex_to_matchr   r   r   +test_query_numexpr_with_min_and_max_columnsh  s    (zKTestDataFrameQueryNumExprPython.test_query_numexpr_with_min_and_max_columnsN)rD   rE   rF   r   rG   r   r   r   r   r   r   r   r   r,  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   z  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   r3   r4   r5   r(   r   r   rI   rd   r)   rf   r9   r   r   r   r     s    z1TestDataFrameQueryPythonPandas.test_query_builtinNrD   rE   rF   r   rG   r   r   r   r   r   r   r   r-  y  s
   

r-  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 r.  r/  r0  r   r   r   r     s    z1TestDataFrameQueryPythonPython.test_query_builtinNr1  r   r   r   r   r2    s
   

r2  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rd}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    q1 s0    Y  qn|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]   r6  zipr   r@   r'  r3   r4   r5   r   r(   r   r   r)   r  collstlhsrhsr   r!  opsrB   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rd}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    q1 s0    Y  qn|jd||d}t|| |jd||d}t|| ||jddg  }|jd||d}t|| |jd||d}t|| d S )Nr$   r4  rq   r[   r5  r6  rp   r   z
["a", "b"]rZ   r7  r8  r9  r>   r   zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)r   r`   rj   rk   rl   r   r]   r6  r   r:  r   r@   r'  r3   r4   r5   r;  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
|| nd}tjt|d  |jd
||d W d    n1 s0    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 < dr8  r>   r&  )r   r]   r`   rj   rk   r   r3   rp   r   rq   r4   r5   r   r   r   r@   r'  )r(   r   r   r)   r   r   rB   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 )NrD  rE  r$   rh   rF  r   rG  rH  za == br   za != b)r   r]   r`   rj   rk   r   r3   rp   rq   r4   r5   )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 r9  r   ).0rI   Zactr   r   r   
<listcomp>  s   zLTestDataFrameQueryStrings.test_query_with_nested_strings.<locals>.<listcomp>r#   rJ   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appendrQ  r3   r4   r5   )	r(   r   r   eventsZstamps1Zstamps2r)   rf   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)rp   rq   test & testr"   r  za == "test & test"r   rW  r  )r(   r   r   r)   r   r   r   r   r   (test_query_with_nested_special_character.  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   r3   rY  r4   r5   )
r(   r   r   rc   funcrp   rq   r)   r   rf   r   r   r   test_query_lex_compare_strings5  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   r3   r\  r]  r4   r5   )r(   r   r   rY   datar)   r   rf   r   r   r   "test_query_single_element_booleansG  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 USra  IBM USrb  )gl[@gGzn[@gf@g33333f@)SymbolZPricera  zSymbol == @symbr   )r   r   rc  r3   r4   r5   )r(   r   r   r)   eZsymbr   r   r   r   !test_query_string_scalar_variableO  s    z;TestDataFrameQueryStrings.test_query_string_scalar_variablein_list)Nasdfghjk)rg  Nrh  )rg  rh  N)NNrg  )rg  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 )rg  r   )rM  r   valuer   r   r   
<dictcomp>k  r   zMTestDataFrameQueryStrings.test_query_string_null_elements.<locals>.<dictcomp>rp   stringdtypeint64za == 'asdf'r   rg  za <= 'asdf')	enumerater   rX   r   r3   r4   r5   )
r(   rf  r   r   rf   Zdf_expectedr)   r   r   Zres3r   r   r   test_query_string_null_elements\  s    z9TestDataFrameQueryStrings.test_query_string_null_elementsN)rD   rE   rF   rB  rC  rI  rJ  rV  rX  r   r   r   r  ltgtleger[  r`  re  rp  r   r   r   r   r3    s8   )#	
	r3  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   framez  s    z TestDataFrameEvalWithFrame.framec                 C   s,   |j d||d}|j|j }t|| d S )Nr~   r   r6   rp   rq   r4   r7   r(   rv  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#   rw  rx  r   r   r   test_bool_arith_expr  s    z/TestDataFrameEvalWithFrame.test_bool_arith_exprrc   )rK   rN   rQ   rT   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   r6   )r(   r   r   rc   r)   rB   r   r   r   %test_invalid_type_for_operator_raises  s    z@TestDataFrameEvalWithFrame.test_invalid_type_for_operator_raisesN)rD   rE   rF   r   rG   rv  ry  rz  r   r   r{  r   r   r   r   ru  y  s   
ru  c                   @   s(  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>S )?!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(  )rO  rJ   r%   )   rG  r|   )   r#   r  )r)  r%   rh   )r}  r#   r|   )r$   rJ   r}  )r|   r~  r$   )rJ   r#   r%   )r#   r#   rh   )r$   rO  rJ   )r$   rh   r)  )r|   r~  r#   )rJ   rO  rG  r#   r$   r#   )r)  r%   r#   )rG  r#   r}  )r}  rO  r)  )r$   rJ   rh   )rh   rO  rG  )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  r3   r4   r5   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  rJ   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  r6   r4   r7   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  rJ   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@   AttributeErrorr6   )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 )N6(Could not convert ).*( to a valid Python identifier.)r>   z`it's` > `that's`r   r@   r   r3   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_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 r-   r   )_r   r   r   rZ  '  s    zNTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.funcz@func()z"Only named functions are supportedr>   z@funcs[0]()Nz@funcs[0].__call__())r6   r   r@   r   )r(   r)   rZ  funcsr   r   r   test_call_non_named_expression  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%   rJ   rp   rq   rY   rm  z	c = b - ar  )r%   rJ   r#   r   r   r	   RuntimeWarningr4   assert_produces_warningr6   r5   )r(   any_numeric_ea_and_arrow_dtyper)   warningr9   rf   r   r   r   test_ea_dtypes4  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%   rJ   rp   rq   ZFloat64r  z	c = b - 1r  )r%   rJ   r%   r   r  )r(   r)   r  r9   rf   r   r   r   test_ea_dtypes_and_scalarC  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%   rJ   rp   rq   r  z	c = 2 - 1rl  r   r   )r   r6   r   rm  r4   r5   )r(   r  r)   r9   rf   r   r   r   #test_ea_dtypes_and_scalar_operationN  s    
zETestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar_operationrm  )rn  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$   rl  r  z	a in @refrm  rX   )
r   importorskipr   r   r	   r  r4   r  r3   r5   )r(   rm  r)   refr  r9   rf   r   r   r   test_query_ea_dtypes]  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 s0    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  rl  )r#   r$   r$   rr   zA == Br;   r#   r$   r   r  )r  r	   r   r   r  r   r   r4   r  r3   r5   )r(   rm  r   r  r)   r9   rf   r   r   r   !test_query_ea_equality_comparisonj  s     

 ,zCTestDataFrameQueryBacktickQuoting.test_query_ea_equality_comparisonN)#rD   rE   rF   r   rG   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|    s@   
!
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_testingr4   Zpandas.core.computation.checkr	   rG   r   r   Zskip_if_no_ner   r   r    rH   r   r   r"  r-  r2  r3  ru  r|  r   r   r   r   <module>   s>   

3c H  {x W