
    Mhz              	       H   S SK r S SKrS SKrS SKJrJr  S SKJs  J	r
  S SKrS SKJrJrJrJrJr  S SKJr  S SKJr  \R.                  " SS/S S9S	 5       r\R.                  " S\R2                  " S
\
R4                  " S
5      S9/S S9S 5       rS r " S S5      r " S S5      r " S S5      r\
R4                  " S
5       " S S5      5       r \
R4                  " S
5       " S S\ 5      5       r! " S S\ 5      r" " S S\!5      r# " S S5      r$ " S S 5      r% " S! S"5      r&g)#    N)NumExprClobberingErrorUndefinedVariableError)	DataFrameIndex
MultiIndexSeries
date_range)NUMEXPR_INSTALLEDpythonpandasc                     U $ N xs    T/var/www/html/env/lib/python3.13/site-packages/pandas/tests/frame/test_query_eval.py<lambda>r      s    1    )paramsidsc                     U R                   $ r   paramrequests    r   parserr      s    ==r   numexpr)marksc                     U $ r   r   r   s    r   r   r      s    !r   c                     U R                   $ r   r   r   s    r   enginer!      s    
 ==r   c                 D    U S:w  a  [         R                  " SU  35        g g )Nr   zcannot evaluate with parser=)pytestskip)r   s    r   skip_if_no_pandas_parserr%   %   s#    26(;< r   c                       \ rS rSr\R
                  S 5       r\R
                  S 5       r\R
                  S 5       rS r	S r
S rS rS	rg
)
TestCompat*   c                      [        S/ SQ05      $ )NA         r   selfs    r   dfTestCompat.df+   s    #y)**r   c                 $    XR                   S:     $ )Nr   r*   r1   r2   s     r   	expected1TestCompat.expected1/   s    $$(|r   c                      UR                   S-   $ Nr,   r5   r6   s     r   	expected2TestCompat.expected23   s    ttaxr   c                     UR                  S5      n[        R                  " XB5        UR                  S5      n[        R                  " XCSS9  g )NA>0A+1Fcheck_namesquerytmassert_frame_equalevalassert_series_equalr1   r2   r7   r;   results        r   test_query_defaultTestCompat.test_query_default7   s<     %
f0
veDr   c                     UR                  SS S9n[        R                  " XB5        UR                  SS S9n[        R                  " XCSS9  g )Nr>   r!   r?   Fr@   rB   rH   s        r   test_query_NoneTestCompat.test_query_None?   sD    %-
f0t,
veDr   c                     UR                  SSS9n[        R                  " XB5        UR                  SSS9n[        R                  " XCSS9  g )Nr>   r   rM   r?   Fr@   rB   rH   s        r   test_query_pythonTestCompat.test_query_pythonE   sD    %1
f0x0
veDr   c                    [         (       aL  UR                  SSS9n[        R                  " XB5        UR	                  SSS9n[        R
                  " XCSS9  g Sn[        R                  " [        US9   UR                  SSS9  S S S 5        [        R                  " [        US9   UR	                  SSS9  S S S 5        g ! , (       d  f       NA= f! , (       d  f       g = f)	Nr>   r   rM   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
   rC   rD   rE   rF   rG   r#   raisesImportError)r1   r2   r7   r;   rI   msgs         r   test_query_numexprTestCompat.test_query_numexprK   s    XXeIX6F!!&4WWU9W5F""6%H! 
 {#6y1 7{#6i0 76 7666s   3B?%C?
C
Cr   N)__name__
__module____qualname____firstlineno__r#   fixturer2   r7   r;   rJ   rN   rQ   rY   __static_attributes__r   r   r   r'   r'   *   s_    ^^+ + ^^  ^^ EEE1r   r'   c                       \ rS rSr\R
                  R                  SSS/5      \R
                  R                  S/ SQ5      S 5       5       rS rS	 r	S
 r
S rS rS rSrg)TestDataFrameEval]   n   i  zop_str,op,rop))+__add____radd__)-__sub____rsub__)*__mul____rmul__)/__truediv____rtruediv__c                     [        S[        U5      [        S5      S9nSUR                  S'   UR	                  5       n[        [
        R                  " UR                  U5      R                  US5      [        S5      S9n[        SU S	35      n[        S
U S	35      n	[        R                  " X5        US;   a(  [        XR5      " U5      n	[        R                  " X5        g US;   a(  [        XS5      " U5      n	[        R                  " X5        g g )Nr,   abcdindexcolumnsr-   r   rv   zbase z dfzm )rf   rl   )ri   ro   )r   rangelistilocmeannptilevaluesreshaperF   rD   rE   getattr)
r1   op_stroproprd   r2   mbaseexpectedrI   s
             r   test_opsTestDataFrameEval.test_ops_   s     qa$v,?
GGIGGAHHa ((B/f
 %xs+, 6(#&'
f/ R_Q'F!!&3 :R%a(F!!&3 r   c                 t   [        S[        R                  R                  S5      R	                  S5      05      n[        R
                  UR                  SS& S[        R                  " UR                  SS 5      -
  nS[        R                  " U5      -
  R                  SS n[        R                  " X25        g )Nr*   r-   ia  r      r,      )
r   r}   randomdefault_rngstandard_normalnanr{   isnanrD   rE   )r1   r2   r   rI   s       r   test_dataframe_sub_numexpr_path1TestDataFrameEval.test_dataframe_sub_numexpr_path   s     RYY2215EEeLMNvv!rxx"..bhhrl"((2.
f/r   c                 >   [        / SQ/ SQS.5      nSn[        R                  " [        US9   UR	                  S 5        S S S 5        [        R                  " [        US9   UR	                  S5        S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f)Nr+   )abr   r*   Bz%expr must be a string to be evaluatedrT   c                      U R                   S:H  $ )Nr   )r   r   s    r   r   6TestDataFrameEval.test_query_non_str.<locals>.<lambda>   s    qssczr   o   r   r#   rV   
ValueErrorrC   r1   r2   rX   s      r   test_query_non_str$TestDataFrameEval.test_query_non_str   sk    Y_=>5]]:S1HH)* 2 ]]:S1HHSM 21 21 21s   A="B=
B
Bc                     [        S/ SQ05      nSn[        R                  " [        US9   UR	                  S5        S S S 5        g ! , (       d  f       g = f)Nr*   r+   zexpr cannot be an empty stringrT    r   r   s      r   test_query_empty_string)TestDataFrameEval.test_query_empty_string   s;    Y'(.]]:S1HHRL 211s   A
Ac                    [        [        R                  R                  S5      R	                  S5      [        S5      S9nSS0nSS0nUR                  SX#/S	9US   US   -   :X  d   e[        R                  " SX#/S	9US   US   -   :X  d   eg )
Nr-   
   r-   abrx   r   r,   r   a + b	resolvers)r   r}   r   r   r   rz   rF   pd)r1   r2   dict1dict2s       r   test_eval_resolvers_as_list-TestDataFrameEval.test_eval_resolvers_as_list   s    II!!!$44W=tDz
 aawww5.w9U3Z%PS*=TTTTwww5.9U3Z%PS*=TTTTr   c                     [        [        R                  R                  S5      R	                  S5      [        S5      S9nSS0nUR                  SU/S9nUS   US	   US   -  -   n[        R                  " X45        g )
Nr-   r   r   rx   cz	a + b * cr   r   r   )	r   r}   r   r   r   rz   rF   rD   rG   )r1   r2   r   rI   r   s        r   test_eval_resolvers_combined.TestDataFrameEval.test_eval_resolvers_combined   sy    II!!!$44W=tDz
 a 8c7RWuSz11
v0r   c                     [        SSS/05      nUR                  S5      n[        SS/SS/S.5      n[        R                  " X#5        g )Na1YNzc = ((a1 == 'Y') & True)TF)r   r   )r   rF   rD   rE   )r1   r2   resr   s       r   test_eval_object_dtype_binop.TestDataFrameEval.test_eval_object_dtype_binop   sI    sCj)*gg01S#JdE]CD
c,r   r   N)r[   r\   r]   r^   r#   markparametrizer   r   r   r   r   r   r   r`   r   r   r   rb   rb   ]   sg    [[S1d),[[	
4 -480	U1-r   rb   c                   ,    \ rS rSrS rS rS rS rSrg) TestDataFrameQueryWithMultiIndex   c                    [        U5        [        R                  R                  S5      R	                  SS/SS9n[        R                  R                  S5      R	                  SS/SS9n[
        R                  " X4/SS	/S
9n[        [        R                  R                  S5      R                  S5      US9n[        UR                  R                  S5      R                  USS9nUR                  SXS9nUR                  SXS9n	XgS:H     n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgS:g     n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5         n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5      )    n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5         n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5      )    n
[        R                  " X5        [        R                  " X5        g )Nr-   redgreenr   sizeeggshamcolorfoodnamesr   ru   ru   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}   r   r   choicer   from_arraysr   r   r   ru   get_level_valuesr   rC   rD   rE   isinr1   r   r!   r   r   ru   r2   indres1res2exps              r    test_query_with_named_multiindexATestDataFrameQueryWithMultiIndex.test_query_with_named_multiindex   s    (II!!!$++UG,<2+FII!!!$++VUO"+E&&vgv5FGryy,,Q/??HPUVHH%%g.55U

 xx(xGxx(xG
d(
d( xx(xGxx(xG
d(
d( xx*6xIxx*6xI5'"#
d(
d(xx*6xIxx*6xI((E7##$
d(
d( xx*6xIxx(xG5'"#
d(
d(xx.vxMxx,VxK((E7##$
d(
d(r   c                 
   [        U5        [        R                  R                  S5      R	                  SS/SS9n[        R                  R                  S5      R	                  SS/SS9n[
        R                  " X4/5      n[        [        R                  R                  S5      R                  S5      US	9n[        UR                  R                  S
5      R                  US	9nUR                  SXS9nUR                  SXS9n	XgS:H     n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgS:g     n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5         n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5      )    n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5         n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5      )    n
[        R                  " X5        [        R                  " X5        [        UR                  R                  S5      R                  US	9nUR                  SXS9nUR                  SXS9n	XgS:H     n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgS:g     n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  SXS9n	XgR!                  S/5         n
[        R                  " X5        [        R                  " X5        UR                  SXS9nUR                  S XS9n	XgR!                  S/5      )    n
[        R                  " X5        [        R                  " X5        UR                  S!XS9nUR                  S"XS9n	XgR!                  S/5         n
[        R                  " X5        [        R                  " X5        UR                  S#XS9nUR                  S$XS9n	XgR!                  S/5      )    n
[        R                  " X5        [        R                  " X5        g )%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   s              r   "test_query_with_unnamed_multiindexCTestDataFrameQueryWithMultiIndex.test_query_with_unnamed_multiindex   s    (II!!!$++UG,<2+FII!!!$++VUO"+E&&v.ryy,,Q/??HPUVRXX..q188Fxx+FxJxx+FxJ
d(
d( xx+FxJxx+FxJ
d(
d( xx-fxLxx-fxL5'"#
d(
d(xx-fxLxx-fxL((E7##$
d(
d( xx-fxLxx+FxJ5'"#
d(
d(xx1&xPxx/xN((E7##$
d(
d( RXX..q188Fxx,VxKxx,VxK
d(
d( xx,VxKxx,VxK
d(
d( xx.vxMxx.vxM6(#$
d(
d(xx.vxMxx.vxM((F8$$%
d(
d( xx.vxMxx,VxK6(#$
d(
d(xx26xQxx0xO((F8$$%
d(
d(r   c                 $   [        U5        [        R                  R                  S5      R	                  SS/SS9n[        R
                  " S5      n[        R                  " X4/5      nS S/Ul        [        [        R                  R                  S5      R                  S5      US9nUR                  S	XS
9n[        UR                  R                  S5      R                  USS9nXhS:H     n	[         R"                  " Xy5        UR                  SXS
9n[        UR                  R                  S5      R                  USS9nXhS:g     n	[         R"                  " Xy5        UR                  SXS
9n[        UR                  R                  S5      R                  US9nXhS:H     n	[         R"                  " Xy5        UR                  SXS
9n[        UR                  R                  S5      R                  US9nXhS:g     n	[         R"                  " Xy5        g )Nr-   r   r   r   r   ratingr   r   zrating == 1r   r   r,   zrating != 1r   r   r   )r%   r}   r   r   r   aranger   r   r   r   r   rC   r   ru   r   r   rD   rE   )
r1   r   r!   r   r   ru   r2   r   r   r   s
             r   *test_query_with_partially_named_multiindexKTestDataFrameQueryWithMultiIndex.test_query_with_partially_named_multiindexK  s    (II!!!$++UG,<2+FIIbM&&v.X&ryy,,Q/??HPUVhh}VhCHH%%h/66e(
 l
c'hh}VhCHH%%h/66e(
 l
c'hh*6hIRXX..q188F
c'hh*6hIRXX..q188F
c'r   c                    [        [        R                  " S5      [        R                  " [        S5       Vs/ s H  n[        S5      PM     snSS/S9S9nUR                  5       nS nUR                  R                  5       nUR                  UU" UR                  S5      U" UR                  S5      US	.nUR                  5        Ho  u  px[        U[        5      (       a  UR                  Xg   5      (       d   eM6  [        U[        5      (       a  [        R                   " XU   5        Mf  [#        S
5      e   g s  snf )Nr   r.   r-   r   spamr   r   r   c                 T    U R                  U5      nUR                  5       nXl        U$ r   )r   	to_seriesru   )milevellevel_valuesss       r   r   ]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_seriess  s*    ..u5L&&(AGHr   )ru   rv   r   r   clevel_0z object must be a Series or Index)r   r}   onesr   r   ry   _get_index_resolversrv   r   ru   items
isinstancer   is_r   rD   rG   AssertionError)	r1   _r2   r   r   
col_seriesr   kvs	            r   )test_query_multiindex_get_index_resolversJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolversj  s	   GGG(($)!H-HqrH-ff5E
 ++-		 ZZ))+
XX!bhh/bhh/"
 OO%DA!U##uuX[))))Av&&&&q1+6$%GHH &' .s   D<r   N)	r[   r\   r]   r^   r   r   r   r   r`   r   r   r   r   r      s    0)dV)p(>Ir   r   c                   d   \ rS rSr\R
                  S 5       r\R
                  S 5       rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\R<                  R?                  SS\ RB                  /S\ RD                  //5      S 5       r#S r$S r%S r&g!)"TestDataFrameQueryNumExprPandasi  c                     gNr   r   r0   s    r   r!   &TestDataFrameQueryNumExprPandas.engine      r   c                     gNr   r   r0   s    r   r   &TestDataFrameQueryNumExprPandas.parser      r   c                 d   [        U5        [        [        R                  R	                  S5      R                  S5      5      n[        SSS9US'   [        SSS9US'   [        S	SS9US
'   UR                  SXS9nX3R                  S:  SUR                  :  -     n[        R                  " XE5        g )Nr-   r   r.   1/1/2012r   periodsdates11/1/2013dates21/1/2014dates3z"@df.dates1 < 20130101 < @df.dates3r!   r   20130101)r%   r   r}   r   r   r   r	   rC   r  r  rD   rE   r1   r!   r   r2   r   expecs         r   %test_date_query_with_attribute_accessETestDataFrameQueryNumExprPandas.test_date_query_with_attribute_access  s     (ryy,,Q/??GH!*a88!*a88!*a88hh0  
 II
*zBII/EFG
c)r   c                 N   [        [        R                  R                  S5      R	                  S5      5      n[        SSS9US'   [        SSS9US'   [        S	SS9US
'   UR                  SXS9nX3R                  S:  SUR                  :  -     n[        R                  " XE5        g )Nr-   r  r	  r   r
  r  r  r  r  r  dates1 < 20130101 < dates3r  r  r   r}   r   r   r   r	   rC   r  r  rD   rE   r  s         r   #test_date_query_no_attribute_accessCTestDataFrameQueryNumExprPandas.test_date_query_no_attribute_access  s    ryy,,Q/??GH!*a88!*a88!*a88hh3FhRII
*zBII/EFG
c)r   c                    Sn[        [        R                  R                  S5      R	                  US45      5      n[        SUS9US'   [        SUS9US'   [        S	US9US
'   [        R                  UR                  [        R                  R                  S5      R                  U5      S:  S4'   [        R                  UR                  [        R                  R                  S5      R                  U5      S:  S
4'   UR                  SXS9nXDR                  S:  SUR                  :  -     n[        R                  " XV5        g )Nr   r-   r.   r	  r
  r  r  r  r  r        ?r  r  r  r   r}   r   r   r   r	   r   NaTlocrC   r  r  rD   rE   r1   r!   r   rd   r2   r   r  s          r   test_date_query_with_NaT8TestDataFrameQueryNumExprPandas.test_date_query_with_NaT  s   ryy,,Q/??AGH!*a88!*a88!*a88EGVVryy$$Q'..q1C7ABEGVVryy$$Q'..q1C7ABhh3FhRII
*zBII/EFG
c)r   c                 h   Sn[        [        R                  R                  S5      R	                  US45      5      n[        SUS9US'   [        SUS9US'   UR                  SS	S	S
9nUb   eUR                  SXS9nXDR                  S:  SUR                  :  -     n[        R                  " Xg5        g )Nr   r-   r.   r	  r
  r  r  r  Tinplacedropindex < 20130101 < dates3r  r  r   r}   r   r   r   r	   	set_indexrC   ru   r  rD   rE   r1   r!   r   rd   r2   return_valuer   r  s           r   test_date_index_query5TestDataFrameQueryNumExprPandas.test_date_index_query  s    ryy,,Q/??AGH!*a88!*a88||Hd|F###hh26hQHHz)j299.DEF
c)r   c                    Sn[        [        R                  R                  S5      R	                  US45      5      R                  S[        05      n[        SUS9US'   [        SUS9US	'   [        R                  UR                  S
'   UR                  SSSS9nUb   eUR                  SXS9nXDR                  S:  SUR                  :  -     n[        R                   " Xg5        g )Nr   r-   r.   r   r	  r
  r  r  r  r   r   Tr%  r(  r  r  r   r}   r   r   r   astypeobjectr	   r   r  r{   r*  rC   ru   r  rD   rE   r+  s           r   test_date_index_query_with_NaT>TestDataFrameQueryNumExprPandas.test_date_index_query_with_NaT  s    ryy,,Q/??AGHOOK
 "*a88!*a88||Hd|F###hh26hQHHz)j299.DEF
c)r   c                    Sn0 n[        SUS9US'   [        SUS9US'   [        U5      n[        R                  UR                  [
        R                  R                  S5      R                  U5      S:  S4'   UR                  SS	S	S
9nUb   eUR                  SXS9nXUR                  R                  5       S:  SUR                  :  -     n[        R                  " Xx5        g )Nr   r	  r
  r  r  r  r-   r  Tr%  r  r  r  )r	   r   r   r  r   r}   r   r   r*  rC   ru   r   r  rD   rE   )	r1   r!   r   rd   dr2   r,  r   r  s	            r   )test_date_index_query_with_NaT_duplicatesITestDataFrameQueryNumExprPandas.test_date_index_query_with_NaT_duplicates  s     Q7( Q7(q\EGVVryy$$Q'..q1C7AB||Hd|F###hh3FhRHH&&(:5*ryy:PQR
c)r   c                    Sn[        [        SUS9[        R                  " U5      S.5      nUR	                  SX!S9n[        U5      S:X  d   eUR	                  SX!S9n[        R                  " XT5        S	nS
 H9  n[        R                  " [        US9   UR	                  SU S3X!S9  S S S 5        M;     g ! , (       d  f       MM  = f)Nr   r	  r
  )datesnondatezdates == nondater   r   zdates != nondatez=Invalid comparison between dtype=datetime64\[ns\] and ndarray)<><=>=rT   zdates z nondate)r   r	   r}   r   rC   lenrD   rE   r#   rV   	TypeError)r1   r!   r   rd   r2   rI   rX   r   s           r   test_date_query_with_non_date=TestDataFrameQueryNumExprPandas.test_date_query_with_non_date  s     Q7BIIaLQ
 ,VK6{a,VK
f)N(By46"X.vM 54 )44s   B66
C	c                     [        [        S5      [        SS5      [        SS5      S.5      nSn[        R                  " [        US9   UR                  S	XS
9  S S S 5        g ! , (       d  f       g = f)Nr   r.      re      )irf   rzinvalid syntaxrT   zi - +r  )r   ry   r#   rV   SyntaxErrorrC   )r1   r!   r   r2   rX   s        r   test_query_syntax_error7TestDataFrameQueryNumExprPandas.test_query_syntax_error  sR    U2YU1b\aMN]];c2HHWVH; 322s   A""
A0c                    [        U5        [        [        R                  R	                  S5      R                  S5      [        S5      S9nSu  pEUR                  SXS9nX3R                  UR                  :     n[        R                  " Xg5        UR                  SXS9nX4UR                  :     n[        R                  " Xg5        [        R                  " [        S	S
9   UR                  SXS9  S S S 5        [        R                  " [        SS
9   UR                  SXS9  S S S 5        g ! , (       d  f       NA= f! , (       d  f       g = f)Nr-   )   r-   r   rx   )r,   r-   za > br  z@a > b!local variable 'c' is not definedrT   z@a > b > @czname 'c' is not definedz
@a > b > c)r%   r   r}   r   r   r   rz   rC   r   r   rD   rE   r#   rV   r   )r1   r!   r   r2   r   r   r   r   s           r   test_query_scope0TestDataFrameQueryNumExprPandas.test_query_scope  s    (II!!!$44W=tDz
 hhwvh=ddRTTk?
c,hhxh>"$$h<
c, ]]"*M
 HH]6HA
 ]]19RSHH\&H@ TS
 
 TSs    D,D=,
D:=
Ec                    S=p4[        [        R                  R                  S5      R	                  XCS4S9[        S5      S9n[        R                  " [        SS9   UR                  S	XS
9  S S S 5        g ! , (       d  f       g = f)Nr   r-   r.   r   abcrx   zname 'sin' is not definedrT   sin > 5r  )
r   r}   r   r   integersrz   r#   rV   r   rC   )r1   r!   r   rd   r   r2   s         r   test_query_doesnt_pickup_local>TestDataFrameQueryNumExprPandas.test_query_doesnt_pickup_local  sl    
II!!!$--a!f-=tE{

 ]]19TUHHYvH= VUUs   A66
Bc                 4   S=p4[        [        R                  R                  S5      R	                  XCS4S9[        S5      S9nSUR                  l        Sn[        R                  " [        US	9   UR                  S
XS9  S S S 5        g ! , (       d  f       g = f)Nr   r-   r.   r   rS  rx   sinzVariables in expression.+rT   rT  r  )r   r}   r   r   rU  rz   ru   r   r#   rV   r   rC   )r1   r!   r   rd   r   r2   rX   s          r   test_query_builtin2TestDataFrameQueryNumExprPandas.test_query_builtin  sz    
II!!!$--a!f-=tE{
 )]]1=HHYvH= >==s   /B		
Bc                    [        [        R                  R                  S5      R	                  S5      / SQS9n[
        R                  " UR                  SXS9X3R                  UR                  :     5        [
        R                  " UR                  SXS9X3R                  UR                  -   UR                  UR                  -  :     5        g )Nr-   r   r   r   r   rx   a < br  za + b > b * c)r   r}   r   r   r   rD   rE   rC   r   r   r   r1   r!   r   r2   s       r   
test_query*TestDataFrameQueryNumExprPandas.test_query"  s    II!!!$44W=
 	HHWVH;Rrtt_	
 	HH_VHCttbdd{RTTBDD[()	
r   c                    [        [        R                  R                  S5      R	                  SSS9[        [        S5      SS9/ SQS9nUR                  S	XS
9nX3R                  S:  UR                  UR                  :  -     n[        R                  " XE5        UR                  SXS
9nX3R                  UR                  :     n[        R                  " XE5        g )Nr-   r   r   r   blobr   r]  rt   z(blob < 5) & (a < b)r  r   zblob < b)r   r}   r   r   rU  r   ry   rC   ru   r   r   rD   rE   r  s         r   test_query_index_with_name:TestDataFrameQueryNumExprPandas.test_query_index_with_name/  s    II!!!$--bw-?b	/#

 hh-fhLHHqLRTTBDD[12
c)hhz&h@88bdd?#
c)r   c                 v   [        [        R                  R                  S5      R	                  SSS9[        S5      / SQS9nUR                  SXS9nX3R                  UR                  :     n[        R                  " XE5        UR                  S	XS9nX3R                  S
:     n[        R                  " XE5        g )Nr-   r   r   r   r]  rt   z	index < br  z	index < 5r   )r   r}   r   r   rU  ry   rC   ru   r   rD   rE   r  s         r   test_query_index_without_name=TestDataFrameQueryNumExprPandas.test_query_index_without_name>  s    II!!!$--bw-?)#
 hh{6hA88bdd?#
c) hh{6hA88a< 
c)r   c                    [        U5        [        [        R                  R	                  S5      R                  S5      5      n[        [        R                  R	                  S5      R                  S5      5      nX3S:  US:  -     nUR                  SXS9n[        R                  " Xe5        [        R                  " SXS9n[        R                  " Xe5        [        R                  " SXS9nX3S:  US:  -  X3S:     S:  -     n[        R                  " Xe5        [        R                  " SXS9nUR                  S	XS9n[        R                  " Xe5        g )
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}   r   r   r   rC   rD   rE   r   rF   )r1   r!   r   r2   df2r   rI   s          r   test_nested_scope1TestDataFrameQueryNumExprPandas.test_nested_scopeO  s     (ryy,,Q/??GH		--a0@@HIAv#'*+26Q
f/1&P
f/7
 Av#'*baj1n=>
f//N8808O
f/r   c                     [        [        R                  R                  S5      R	                  S5      5      n[
        R                  " [        SS9   UR                  SXS9  S S S 5        g ! , (       d  f       g = f)Nr-   r  name 'df' is not definedrT   zdf > 0r  )	r   r}   r   r   r   r#   rV   r   rC   r_  s       r   *test_nested_raises_on_local_self_referenceJTestDataFrameQueryNumExprPandas.test_nested_raises_on_local_self_referencef  sU    ryy,,Q/??GH ]]19STHHXfH< UTTs   A++
A9c                    [        U5        [        [        R                  R	                  S5      R                  S5      [        S5      S9nSnX3R                  U:     nUR                  SXS9n[        R                  " Xe5        X3R                  UR                  :     nUR                  SXS9n[        R                  " Xe5        g )	Nr-   )d   r   
abcdefghijrx   r,   za < @br  r^  )r%   r   r}   r   r   r   rz   r   rC   rD   rE   r   )r1   r!   r   r2   r   expectrI   s          r   test_local_syntax1TestDataFrameQueryNumExprPandas.test_local_syntaxm  s     (II!!!$44Y?&
 DD1H(6A
f-DD244K'&@
f-r   c                    [        U5        [        S5      n[        [        R                  R                  S5      R                  S[        U5      45      US9nUR                  SXS9nUR                  UR                  :  UR                  UR                  :  -  UR                  R                  UR                  5      ) -  UR                  R                  UR                  5      ) -  nXF   n[        R                  " XW5        g )NrS  r-   rt  rx   z!a < b < c and a not in b not in cr  )r%   rz   r   r}   r   r   r   rA  rC   r   r   r   r   rD   rE   )r1   r!   r   colsr2   r   r   r  s           r   test_chained_cmp_and_in7TestDataFrameQueryNumExprPandas.test_chained_cmp_and_in}  s     (E{II!!!$44c3t95EFPT
 hh/  
 ttbdd{rttbdd{+rttyy.>>"$$))BDD/AQQ
c)r   c                    [        U5        [        [        R                  R	                  S5      R                  SSS9SS9n[        [        R                  R	                  S5      R                  SSS9SS9n[        X4S	.5      nUR                  UR                  S
-
  R                  U5         nUR                  SXS9n[        R                  " Xg5        [        [        R                  R	                  S5      R                  SSS9SS9nUR                  US
-
  R                  U5         nUR                  SXS9n[        R                  " Xg5        g )Nr-   r.      r   r   rd  r   r   r   r   r,   z
b - 1 in ar  z@b - 1 in a)r%   r   r}   r   r   rU  r   r   r   r   rC   rD   rE   )r1   r!   r   r   r   r2   r   rI   s           r   test_local_variable_with_in;TestDataFrameQueryNumExprPandas.test_local_variable_with_in  s    (299((+44QR4@sK299((+44Rb4ALQ'(66244!8//!,-,vE
h/299((+44Rb4AL661q5,,q/*-F
h/r   c                     [        U5        Sn[        S/ SQ05      nUR                  SXS9nXDR                  S:H     n[        R
                  " XV5        g )Nr,   r   )r   r   r   r   @cr  z	a == "@c"r  r  r%   r   rC   r   rD   rE   )r1   r!   r   r   r2   rI   r   s          r   test_at_inside_string5TestDataFrameQueryNumExprPandas.test_at_inside_string  sO     (=>?+fDdddl#
f/r   c                 L   U R                   U R                  p![        U5        [        [        R
                  R                  S5      R                  S5      [        S5      S9n[        R                  " [        SS9   UR                  SXS9  S S S 5        g ! , (       d  f       g = f)	Nr-   r   r   rx   rO  rT   za == @cr  )r!   r   r%   r   r}   r   r   rz   r#   rV   r   rC   r_  s       r   test_query_undefined_local:TestDataFrameQueryNumExprPandas.test_query_undefined_local  sw    dkk (ryy,,Q/66w?dT]]"*M
 HHYvH=
 
 
s   ;B
B#c                    Sn[         R                  SSS2   n[        U[         R                  R	                  S5      R                  UR                  5      S.5      nSUR                  l        UR                  SXS9nXUS   S	:     n[        R                  " Xg5        [        U[         R                  R	                  S5      R                  UR                  5      S.5      nUR                  S
XS9nUR                  UR                  UR                  S	:        n[        R                  " Xg5        [        U[         R                  R	                  S5      R                  UR                  5      S.5      nSUR                  l        UR                  SXS9nXUR                  S	:     n[        R                  " Xg5        UR                  SXS9nUR                  UR                  UR                  S	:        n[        R                  " Xg5        g )Nr,   rN  e   r-   )ru   r   ru   z	index > 5r  r   zilevel_0 > 5r  r   za > 5)r}   r_r   r   r   r   r   ru   r   rC   rD   rE   r   r   )r1   r!   r   rd   r   r2   rI   r   s           r   :test_index_resolvers_come_after_columns_with_the_same_nameZTestDataFrameQueryNumExprPandas.test_index_resolvers_come_after_columns_with_the_same_name  s    EE"S)bii33A6FFqvvNO
  +fDkAo&
f/bii33A6FFqvvNO
 .G66"((288a<01
f/QRYY%:%:1%=%M%Maff%UVW'&@ddQh<
f/+fD66"((288a<01
f/r   zop, f==!=c                    Sn[        [        R                  R                  S5      R                  U5      [        R                  R                  S5      R                  U5      S.5      n[        R                  UR
                  S S S2S4'   SU S3nXb" UR                  [        R                  5         nUR                  XsUS9n	[        R                  " X5        g )Nr   r-   r  r   a z infr  )
r   r}   r   r   infr   r   rC   rD   rE   )
r1   r   fr!   r   rd   r2   qr   rI   s
             r   test_inf(TestDataFrameQueryNumExprPandas.test_inf  s    YY**1-44Q7YY**1-44Q7
 ssAvDMabffo&!6:
f/r   c                    Un[        SSSUSS9n[        US9n[        US9nUR                  S5      n[        R                  " Xd5        [        U5      nUR                  5       R                  S5      n[        R                  " Xd5        g )Nz
2019-01-011dr   time)startfreqr  tzr   r   z"2018-01-03 00:00:00+00" < time)r	   r   rC   rD   rE   reset_index)r1   tz_aware_fixturer  df_indexr   r2   rI   s          r   test_check_tz_aware_index_query?TestDataFrameQueryNumExprPandas.test_check_tz_aware_index_query  s    T2"6
 8,X&;<
f/X&!''(IJ
f/r   c           	      @   Sn[        S[        R                  R                  S5      R                  U5      -  [        R                  R                  S5      R                  U5      S.5      nXDS   R	                  S5      S:H     nUR                  SXS9n[        R                  " Xe5        [        [        R                  " [        R                  R                  S5      R                  U5      S	:  [        R                  [        R                  R                  S5      R                  U5      5      [        R                  R                  S5      R                  U5      S.5      nXDS   R                  5          nUR                  S
XS9n[        R                  " Xe5        g )Nr   r-   r  r   intr   za.astype('int') == 0r  r  za.notnull())r   r}   r   r   r2  rC   rD   rE   wherer   r   notnull)r1   r!   r   rd   r2   r   rI   s          r   test_method_calls_in_query:TestDataFrameQueryNumExprPandas.test_method_calls_in_query  sG   ..q188;;YY**1-44Q7
 gnnU+q010O
f/XXII))!,33A6<FFII))!,<<Q?
 YY**1-==a@	
 goo'(-F
f/r   r   N)'r[   r\   r]   r^   r#   r_   r!   r   r  r  r"  r-  r4  r8  rC  rK  rP  rV  rZ  r`  re  rh  rm  rq  rw  r{  r  r  r  r  r   r   operatoreqner  r  r  r`   r   r   r   r   r     s    ^^  ^^ 
**
*	***N"<A4>	>
**"0.=. *00>0> [[Whkk':T8;;<O&PQ0 R000r   r   c                       \ rS rSr\R
                  S 5       r\R
                  S 5       rS rS r	S r
S rS rS	 rS
 rSrg)TestDataFrameQueryNumExprPythoni  c                     gr   r   r0   s    r   r!   &TestDataFrameQueryNumExprPython.engine  r  r   c                     gNr   r   r0   s    r   r   &TestDataFrameQueryNumExprPython.parser
  r  r   c                 N   [        [        R                  R                  S5      R	                  S5      5      n[        SSS9US'   [        SSS9US'   [        S	SS9US
'   UR                  SXS9nX3R                  S:  SUR                  :  -     n[        R                  " XE5        g )Nr-   r  r	  r   r
  r  r  r  r  r  )(dates1 < 20130101) & (20130101 < dates3)r  r  r  r  s         r   r  CTestDataFrameQueryNumExprPython.test_date_query_no_attribute_access  s    ryy,,Q/??GH!*a88!*a88!*a88hh7  
 II
*zBII/EFG
c)r   c                    Sn[        [        R                  R                  S5      R	                  US45      5      n[        SUS9US'   [        SUS9US'   [        S	US9US
'   [        R                  UR                  [        R                  R                  S5      R                  U5      S:  S4'   [        R                  UR                  [        R                  R                  S5      R                  U5      S:  S
4'   UR                  SXS9nXDR                  S:  SUR                  :  -     n[        R                  " XV5        g )Nr   r-   r.   r	  r
  r  r  r  r  r  r  r  r  r  r  r!  s          r   r"  8TestDataFrameQueryNumExprPython.test_date_query_with_NaT  s   ryy,,Q/??AGH!*a88!*a88!*a88EGVVryy$$Q'..q1C7ABEGVVryy$$Q'..q1C7ABhh7  
 II
*zBII/EFG
c)r   c                 h   Sn[        [        R                  R                  S5      R	                  US45      5      n[        SUS9US'   [        SUS9US'   UR                  SS	S	S
9nUb   eUR                  SXS9nXDR                  S:  SUR                  :  -     n[        R                  " Xg5        g )Nr   r-   r.   r	  r
  r  r  r  Tr%  ((index < 20130101) & (20130101 < dates3)r  r  r)  r+  s           r   r-  5TestDataFrameQueryNumExprPython.test_date_index_query'  s    ryy,,Q/??AGH!*a88!*a88||Hd|F###hh6v  
 HHz)j299.DEF
c)r   c                    Sn[        [        R                  R                  S5      R	                  US45      5      R                  S[        05      n[        SUS9US'   [        SUS9US	'   [        R                  UR                  S
'   UR                  SSSS9nUb   eUR                  SXS9nXDR                  S:  SUR                  :  -     n[        R                   " Xg5        g )Nr   r-   r.   r   r	  r
  r  r  r  r0  Tr%  r  r  r  r1  r+  s           r   r4  >TestDataFrameQueryNumExprPython.test_date_index_query_with_NaT4  s    ryy,,Q/??AGHOOK
 "*a88!*a88||Hd|F###hh6v  
 HHz)j299.DEF
c)r   c                     Sn[        [        R                  R                  S5      R	                  US45      5      n[        SUS9US'   [        SUS9US'   [        R                  UR                  [        R                  R                  S5      R                  U5      S	:  S4'   UR                  SS
S
S9nUb   eSn[        R                  " [        US9   UR                  SXS9  S S S 5        g ! , (       d  f       g = f)Nr   r-   r.   r	  r
  r  r  r  r  Tr%  "'BoolOp' nodes are not implementedrT   r(  r  )r   r}   r   r   r   r	   r   r  r   r*  r#   rV   NotImplementedErrorrC   )r1   r!   r   rd   r2   r,  rX   s          r   r8  ITestDataFrameQueryNumExprPython.test_date_index_query_with_NaT_duplicatesE  s    ryy,,Q/??AGH!*a88!*a88EGVVryy$$Q'..q1C7AB||Hd|F###3]].c:HH0HO ;::s   C//
C=c                 $   Sn[         R                  " SXS9nUS:X  d   e[        [        R                  R                  S5      R                  S5      5      n[        [        R                  R                  S5      R                  S5      5      nSn[        R                  " [        US9   UR                  SXS9  S S S 5        [        R                  " [        S	S9   UR                  S
XS9  S S S 5        XUS:  US:  -     n[         R                  " SXS9n[        R                  " X5        XUS:  US:  -  XUS:     S:  -     n[         R                  " SXS9n[        R                  " X5        g ! , (       d  f       N= f! , (       d  f       N= f)Nr,   zx + 1r  r-   r  z5The '@' prefix is only supported by the pandas parserrT   rk  rp  z(df>0) & (df2>0)r   zdf[(df > 0) & (df2 > 0)]z+df[(df > 0) & (df2 > 0) & (df[df > 0] > 0)])r   rF   r   r}   r   r   r   r#   rV   rJ  rC   r   rD   rE   )	r1   r!   r   r   rI   r2   rl  rX   r   s	            r   rm  1TestDataFrameQueryNumExprPython.test_nested_scopeQ  sP   ?{{ryy,,Q/??GH		--a0@@HI G]];c2HH)&HH 3 ]]19STHH'HF U Av#'*+3FR
h/Av#'*baj1n=>9&
 	h/ 32 UTs   )E0F0
E>
Fc                 @   [        / SQ/ SQS.5      nSn[        R                  " [        US9   UR	                  S5        S S S 5        Sn[        R                  " [        US9   UR	                  S5        S S S 5        g ! , (       d  f       ND= f! , (       d  f       g = f)	Nr+   re   r      )minmaxzMVariables in expression \"\(min\) == \(1\)\" overlap with builtins: \('min'\)rT   zmin == 1zMVariables in expression \"\(max\) == \(1\)\" overlap with builtins: \('max'\)zmax == 1)r   r#   rV   r   rC   )r1   r2   regex_to_matchs      r   +test_query_numexpr_with_min_and_max_columnsKTestDataFrameQueryNumExprPython.test_query_numexpr_with_min_and_max_columnsl  s    y;<0 	 ]]1HHHZ  I0 	 ]]1HHHZ  IH IH IHs   A>#B>
B
Br   N)r[   r\   r]   r^   r#   r_   r!   r   r  r"  r-  r4  r8  rm  r  r`   r   r   r   r  r    sT    ^^  ^^ 	****"
P06!r   r  c                   b    \ rS rSr\R
                  S 5       r\R
                  S 5       rS rSr	g)TestDataFrameQueryPythonPandasi}  c                     gr  r   r0   s    r   r!   %TestDataFrameQueryPythonPandas.engine~  r  r   c                     gr  r   r0   s    r   r   %TestDataFrameQueryPythonPandas.parser  r  r   c                    S=p4[        [        R                  R                  S5      R	                  XCS4S9[        S5      S9nSUR                  l        XUR                  S:     nUR                  S	XS
9n[        R                  " Xg5        g Nr   r-   r.   r   rS  rx   rY  r   rT  r  r   r}   r   r   rU  rz   ru   r   rC   rD   rE   r1   r!   r   rd   r   r2   r   rI   s           r   rZ  1TestDataFrameQueryPythonPandas.test_query_builtin  z    
II!!!$--a!f-=tE{
 hhl#)FB
h/r   r   N
r[   r\   r]   r^   r#   r_   r!   r   rZ  r`   r   r   r   r  r  }  5    ^^  ^^ 	0r   r  c                   b    \ rS rSr\R
                  S 5       r\R
                  S 5       rS rSr	g)TestDataFrameQueryPythonPythoni  c                     gr  r   r0   s    r   r!   %TestDataFrameQueryPythonPython.engine  r  r   c                     gr  r   r0   s    r   r   %TestDataFrameQueryPythonPython.parser  r  r   c                    S=p4[        [        R                  R                  S5      R	                  XCS4S9[        S5      S9nSUR                  l        XUR                  S:     nUR                  S	XS
9n[        R                  " Xg5        g r  r  r  s           r   rZ  1TestDataFrameQueryPythonPython.test_query_builtin  r  r   r   Nr  r   r   r   r  r    r  r   r  c            
       X   \ rS rSrS rS rS rS rS rS r	\
R                  R                  SS	\R                  /S
\R                  /S\R                   /S\R"                  //5      S 5       rS rS r\
R                  R                  S/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      S 5       rSrg)TestDataFrameQueryStringsi  c           	      (   [        [        R                  R                  S5      R	                  S5      S/S9n[        [        S5      5      US'   X3R                  S:H     nUS:w  a  SnS	nU/S-  U/S-  -   nUS S S
2   nSu  pSU	/U
/-   -  nSn[        X{U5       HP  u  p}nU SU SU 3n[        R                  " [        US9   UR                  UUUSUR                  0S9  S S S 5        MR     g UR                  SX!S9n[        R                  " X5        UR                  SX!S9n[        R                  " X5        [        R                  " XUR                  R                  S/5         5        X3R                  S:g     nUR                  SX!S9n[        R                  " X5        UR                  SX!S9n[        R                  " X5        [        R                  " XUR                  R                  S/5      )    5        g ! , (       d  f       GMv  = f)Nr-   r   r,   r   rx   
aabbccddeestringsr   r   z"a"rw   r  r  $'(Not)?In' nodes are not implemented rT   )r!   r   
local_dictz"a" == stringsr  zstrings == "a"zstrings != "a"z"a" != strings)r   r}   r   r   r   r   rz   r  zipr#   rV   r  rC   rD   rE   r   r1   r   r!   r2   rv  collstlhsrhsr  r  opsrX   r   exr   s                   r   test_str_query_method/TestDataFrameQueryStrings.test_str_query_method  s   ryy,,Q/??HSVRWXtL129JJ#%&XCC%!)seai'Cdd)CFBtrd{#C9C #Cc 2uAbT3%(]]#6cBHH%%$-rzz#:	   CB !3 ((+F(JC!!#.((+F(JC!!#.!!#"**//3%*@'AB

c)*F((+F(JC!!#.((+F(JC!!#.!!#2::??C5+A*A'BC+ CBs   H
H	c                 x   [        [        R                  R                  S5      R	                  S5      S/S9n[        [        S5      5      US'   X3R                  R                  SS/5         nUS:w  a|  SnS	nU/S-  U/S-  -   nUS S S
2   nSu  pSU	/U
/-   -  nSn[        X{U5       HB  u  p}nU SU SU 3n[        R                  " [        US9   UR                  XUS9  S S S 5        MD     g UR                  SX!S9n[        R                  " X5        UR                  SX!S9n[        R                  " X5        X3R                  R                  SS/5      )    nUR                  SX!S9n[        R                  " X5        UR                  SX!S9n[        R                  " X5        g ! , (       d  f       GM  = f)Nr-   r  r   rx   r  r  r   r   z
["a", "b"]rw   r  r  r  rT   r  zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)r   r}   r   r   r   r   rz   r  r   r  r#   rV   r  rC   rD   rE   r  s                   r   test_str_list_query_method4TestDataFrameQueryStrings.test_str_list_query_method  s   ryy,,Q/??HSVRWXtL129JJOOS#J/0XCC%!)seai'Cdd)CFBtrd{#C9C #Cc 2uAbT3%(]]#6cBHHRvH> CB !3
 ((26(QC!!#.((26(QC!!#.#s445F((26(QC!!#.((26(QC!!#. CBs   F))
F9	c           
      ~   [        [        S5      [        S5      [        R                  R	                  S5      R                  SSS9[        R                  R	                  S5      R                  SSS9S.5      nUS	:X  a  UR                  S
XS9nX3R                  R                  UR                  5         n[        R                  " XE5        UR                  SXS9nX3R                  R                  UR                  5      UR                  UR                  :  -     n[        R                  " XE5        g Sn[        R                  " [         US9   UR                  S
XS9  S S S 5        Sn[        R                  " [         US9   UR                  SXS9  S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)Naaaabbbbccccaabbccddeeffr-   r      r   	   r   r   r   r7  r   za in br   za in b and c < dr  rT   r  )r   rz   r}   r   r   rU  rC   r   r   r   rD   rE   r   r7  r#   rV   r  )r1   r   r!   r2   r   r  rX   s          r   test_query_with_string_columns8TestDataFrameQueryStrings.test_query_with_string_columns  s[   .).)YY**1-66qr6BYY**1-66qr6B	
 X((8F(BCttyy'E!!#-((-f(LCttyy"$$+67E!!#-9C2#>&@ ? 8C2#>+FJ ?>	 ?> ?>s   FF.
F+.
F<c           
         [        [        S5      [        S5      [        R                  R	                  S5      R                  SSS9[        R                  R	                  S5      R                  SSS9S.5      nU(       a  US	:X  a  [        OS n[        R                  " U5         UR                  S
XS9nS S S 5        XDR                  UR                  :H     n[        R                  " WU5        [        R                  " U5         UR                  SXS9nS S S 5        XDR                  UR                  :g     n[        R                  " Xg5        g ! , (       d  f       N= f! , (       d  f       NQ= f)Nr  r  r-   r   r  r   r  r  r   za == br   za != b)r   rz   r}   r   r   rU  RuntimeWarningrD   assert_produces_warningrC   r   r   rE   )r1   r   r!   using_infer_stringr2   warningr   r   s           r   test_object_array_eq_ne1TestDataFrameQueryStrings.test_object_array_eq_ne  s   .).)YY**1-66qr6BYY**1-66qr6B	
 %76Y;N.TX''0((8F(BC 1
c3'''0((8F(BC 1
c' 10
 10s   $EE!
E!
E/c           	         [        U5        [        SS5       VVs/ s H  nS  H  nSU SU 3PM     M     snnS-  n[        SSS	S
9n[        SSS	S
9n[        [        R
                  " SS5      R                  S5      UUR                  U5      S.5      nXR                  S:H     n	UR                  SXS9n
[        R                  " X5        g s  snnf )Nr,   re   )loadexitzpage r  r-   z2014-01-01 0:00:0130sr  )r  r  z2014-02-01 1:00:01   )idevent	timestampz"page 1 load"z'"page 1 load"' in eventr   )r%   ry   r	   r   r}   r   repeatappendr  rC   rD   rE   )r1   r   r!   rd   acteventsstamps1stamps2r2   r   r   s              r   test_query_with_nested_strings8TestDataFrameQueryStrings.test_query_with_nested_strings"  s     (',Q{
'2!>NseA3au>N{
 1qI1qIii1o,,Q/$^^G4
 hh/12hh5fhT
h,
s   Cc                     [        U5        [        / SQ/ SQS.5      nUR                  SXS9nX3R                  S:H     n[        R
                  " XE5        g )N)r   r   test & testr+   r  za == "test & test"r   r  r  )r1   r   r!   r2   r   r  s         r   (test_query_with_nested_special_characterBTestDataFrameQueryStrings.test_query_with_nested_special_character5  sL     (6YGHhh+FhJ44=()
c)r   zop, funcr=  r>  r?  r@  c                    [        [        R                  R                  S5      R	                  [        S5      S5      5      n[        [        R                  " UR                  5      5      n[        XgS.5      nU(       a  US:X  a  [        OS n	[        R                  " U	5         UR                  SU S3X!S9n
S S S 5        X" UR                  S	5         n[        R                  " W
U5        g ! , (       d  f       N;= f)
Nr-   abcderN  )Xr   r   zX z "d"r  r7  )r   r}   r   r   r   rz   r   r   r   r  rD   r  rC   r  rE   )r1   r   r!   r   funcr  r   r   r2   r  r   r   s               r   test_query_lex_compare_strings8TestDataFrameQueryStrings.test_query_lex_compare_strings<  s     299((+224="EF299QVV$%Q'($66Y;N.TX''0((Rt4=(GC 1d244o&
c8, 10s   #C--
C;c                 2   Sn[         R                  R                  S5      R                  SS[	        U5      4S9R                  [        5      n[        XCS9nUR                  SX!S9nXUR                  UR                  -     n[        R                  " Xg5        g )N)bidbidsizeaskasksizer-   r,   r   rx   z	bid & askr  )r}   r   r   rU  rA  r2  boolr   rC   r"  r$  rD   rE   )r1   r   r!   rv   datar2   r   r   s           r   "test_query_single_element_booleans<TestDataFrameQueryStrings.test_query_single_element_booleansR  s~    4yy$$Q'00!S\9J0KRRSWXt-hh{6hAffrvvo&
c,r   c                     [        U5        [        / SQ/ SQS.5      nX3R                  S:H     nSnUR                  SXS9n[        R
                  " XF5        g )N)BUD USr+  IBM USr,  )gl[@gGzn[@gf@g33333f@)SymbolPricer+  zSymbol == @symbr   )r%   r   r-  rC   rD   rE   )r1   r   r!   r2   esymbrI  s          r   !test_query_string_scalar_variable;TestDataFrameQueryStrings.test_query_string_scalar_variableZ  sX     (B9
 yyH$%HH&vHE
a#r   in_list)Nasdfghjk)r4  Nr5  )r4  r5  N)NNr4  )r4  NN)NNNc                    SnSn[        U5       VVs0 s H  u  pEUS:X  d  M  XE_M     nnn[        SU0SS9nUR                  R                  S5      Ul        [        SU0SS9nUR	                  SX#S	9n	XS   S:H     n
UR	                  S
X#S	9n[
        R                  " X5        [
        R                  " X5        [
        R                  " X5        [
        R                  " X5        g s  snnf )Nr   r   r4  r   stringdtypeint64za == 'asdf'r   za <= 'asdf')	enumerater   ru   r2  rC   rD   rE   )r1   r3  r   r!   rH  valuer   df_expectedr2   r   r   res3s               r   test_query_string_null_elements9TestDataFrameQueryStrings.test_query_string_null_elementsg  s     -6w-?S-?5F?HAH-?Shx@'--44W=W~X6xxfxDS'V#$xxfxD
d0
d)
d)
d) Ts
   C'C'r   N)r[   r\   r]   r^   r  r  r  r  r  r  r#   r   r   r  ltgtleger  r(  r1  r?  r`   r   r   r   r  r    s    'DR!/FK4((-&* [[(++(++8;;8;;		
---$ [["""  	

*
*r   r  c                       \ rS rSr\R
                  S 5       rS rS r\R                  R                  S/ SQ5      S 5       rSrg	)
TestDataFrameEvalWithFramei  c                     [        [        R                  R                  S5      R	                  S5      [        S5      S9$ )Nr-   r   rS  rx   )r   r}   r   r   r   rz   r0   s    r   frame TestDataFrameEvalWithFrame.frame  s2    II!!!$44W=tE{
 	
r   c                     UR                  SX2S9nUR                  UR                  -   n[        R                  " XE5        g )Nr   r  rF   r   r   rD   rG   r1   rH  r   r!   r   rv  s         r   test_simple_expr+TestDataFrameEvalWithFrame.test_simple_expr  s4    jjj?577"
s+r   c                     UR                  SX2S9nUR                  UR                  S:     UR                  -   n[        R                  " XE5        g )Nza[a < 1] + br  r,   rK  rL  s         r   test_bool_arith_expr/TestDataFrameEvalWithFrame.test_bool_arith_expr  sA    jjjF1%/
s+r   r   )rf   ri   rl   ro   c                     [        SS/SS/S.5      nSn[        R                  " [        US9   UR	                  SU S	3X!S
9  S S S 5        g ! , (       d  f       g = f)Nr,   r-   r   r7  r  z:unsupported operand type\(s\) for .+: '.+' and '.+'|CannotrT   r  z br  )r   r#   rV   rB  rF   )r1   r   r!   r   r2   rX   s         r   %test_invalid_type_for_operator_raises@TestDataFrameEvalWithFrame.test_invalid_type_for_operator_raises  sP    aV3*56K]]9C0GGbBKG> 100s   A
Ar   N)r[   r\   r]   r^   r#   r_   rH  rM  rP  r   r   rS  r`   r   r   r   rF  rF    sH    ^^
 

,
,
 [[T#78? 9?r   rF  c                      \ rS rSr\R
                  S 5       rS rS rS r	S r
S rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r\R@                  RC                  S/ SQ5      S 5       r"\R@                  RC                  SS S!/5      \R@                  RC                  S/ SQ5      S" 5       5       r#S# r$S$r%g%)&!TestDataFrameQueryBacktickQuotingi  c           	   #      #    [        0 S/ SQ_S/ SQ_S/ SQ_S/ SQ_S	/ S
Q_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ SQ_S/ S Q_S!/ S"Q_/ S#Q/ S$Q/ S%Q/ S&Q/ S'QS(.E5      v   g)7f)*z
Yields a dataframe with strings that may or may not need escaping
by backticks. The last two columns cannot be escaped by backticks
and should raise a ValueError.
r*   r+   B B)r.   r-   r,   C Cr  C  C)r  re   r.   C_C)   r  r   D_D D)   r,   r  E.E)r  r.   r   F-F)r\  r,   r   1e1)r-   re   r\  def)r   r^  r-   A (x))re   r,   r.   zB(x))r,   r,   r   zB (x))r-   r  re        &^ :!€$?(} >    <++*''  )r-   r   r  r   )r   r^  r,    A)re   r  r    r,   r-   r,   )r  r.   r,   )r  r,   r\  )r\  r  r  )r-   re   r   )r   r  r  )zit'szthat'su   ☺zfoo#barr,   Nr/   r0   s    r   r2   $TestDataFrameQueryBacktickQuoting.df  s      Yy y 		
 z  y z y {  	  /	 K  i!" i#$ "# $-
 	
s   A6A8c                 h    UR                  S5      nUSUS   :     n[        R                  " X#5        g )Nz	1 < `B B`r,   rX  rC   rD   rE   r1   r2   r   rv  s       r   #test_single_backtick_variable_queryETestDataFrameQueryBacktickQuoting.test_single_backtick_variable_query  s0    hh{#A5	M"
c*r   c                 z    UR                  S5      nUSUS   :  SUS   :  -     n[        R                  " X#5        g )Nz1 < `B B` and 4 < `C C`r,   rX  re   rY  rj  rk  s       r   !test_two_backtick_variables_queryCTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_query  s>    hh01QE]q2e9}56
c*r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz	A + `B B`r*   rX  rF   rD   rG   rk  s       r   "test_single_backtick_variable_exprDTestDataFrameQueryBacktickQuoting.test_single_backtick_variable_expr  0    ggk"C2e9$
s+r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz`B B` + `C C`rX  rY  rr  rk  s       r    test_two_backtick_variables_exprBTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_expr  s0    ggo&ERY&
s+r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz	`C_C` + Ar[  r*   rr  rk  s       r    test_already_underscore_variableBTestDataFrameQueryBacktickQuoting.test_already_underscore_variable  s0    ggk"ERW$
s+r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )NzC_C + `C C`r[  rY  rr  rk  s       r   test_same_name_but_underscores@TestDataFrameQueryBacktickQuoting.test_same_name_but_underscores  s0    ggm$ERY&
s+r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )NzA + `D_D D`r*   r]  rr  rk  s       r   !test_mixed_underscores_and_spacesCTestDataFrameQueryBacktickQuoting.test_mixed_underscores_and_spaces  s0    ggm$C2g;&
s+r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz	A + `C_C`r*   r[  rr  rk  s       r   'test_backtick_quote_name_with_no_spacesITestDataFrameQueryBacktickQuoting.test_backtick_quote_name_with_no_spaces  ru  r   c                 t    UR                  S5      nUS   US   -   US   -
  n[        R                  " X#5        g )Nz`E.E` + `F-F` - Ar_  r`  r*   rr  rk  s       r   test_special_characters9TestDataFrameQueryBacktickQuoting.test_special_characters  s:    gg)*ERY&C0
s+r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz	A + `1e1`r*   ra  rr  rk  s       r   test_start_with_digit7TestDataFrameQueryBacktickQuoting.test_start_with_digit  ru  r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz	A + `def`r*   rb  rr  rk  s       r   test_keyword.TestDataFrameQueryBacktickQuoting.test_keyword  ru  r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nz`A` > 2r*   r-   rj  rk  s       r   test_unneeded_quoting7TestDataFrameQueryBacktickQuoting.test_unneeded_quoting  s-    hhy!sGaK
c*r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nz`A (x)` > 2rc  r-   rj  rk  s       r   test_parenthesis2TestDataFrameQueryBacktickQuoting.test_parenthesis  s.    hh}%wK!O$
c*r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nz`` > 5r   r   rj  rk  s       r   test_empty_string3TestDataFrameQueryBacktickQuoting.test_empty_string  s-    hhx rFQJ
c*r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nz
`C  C` > 5rZ  r   rj  rk  s       r   test_multiple_spaces6TestDataFrameQueryBacktickQuoting.test_multiple_spaces  s.    hh|$vJN#
c*r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz` A` + `  `re  rf  rr  rk  s       r   test_start_with_spaces8TestDataFrameQueryBacktickQuoting.test_start_with_spaces  s0    ggm$DBtH$
s+r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nu"   `  &^ :!€$?(} >    <++*''  ` > 4rd  re   rj  rk  s       r   test_lots_of_operators_string?TestDataFrameQueryBacktickQuoting.test_lots_of_operators_string  s2    hh;<56:;
c*r   c                     Sn[         R                  " [        US9   UR                  S5        S S S 5        g ! , (       d  f       g = f)Nz(module 'pandas' has no attribute 'thing'rT   z	@pd.thing)r#   rV   AttributeErrorrF   )r1   r2   messages      r   test_missing_attribute8TestDataFrameQueryBacktickQuoting.test_missing_attribute  s-    <]]>9GGK  :99	   7
Ac                     Sn[         R                  " [        US9   UR                  S5        S S S 5        g ! , (       d  f       g = f)N6(Could not convert ).*( to a valid Python identifier.)rT   z`it's` > `that's`r#   rV   rJ  rC   r   s      r   test_failing_quote4TestDataFrameQueryBacktickQuoting.test_failing_quote  s.    G]];c2HH() 322r  c                     Sn[         R                  " [        US9   UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr  rT   u	   `☺` > 4r  r   s      r   $test_failing_character_outside_rangeFTestDataFrameQueryBacktickQuoting.test_failing_character_outside_range   s-    G]];c2HH[! 322r  c                     Sn[         R                  " [        US9   UR                  S5        S S S 5        g ! , (       d  f       g = f)NzFailed to parse backticksrT   z`foo#bar` > 4r  r   s      r   test_failing_hashtag6TestDataFrameQueryBacktickQuoting.test_failing_hashtag%  s-    )]];c2HH_% 322r  c                 B   S nU/nUR                  S5        [        R                  " [        SS9   UR                  S5        SSS5        [        R                  " [        SS9   UR                  S5        SSS5        g! , (       d  f       NB= f! , (       d  f       g= f)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                      gr:   r   )r   s    r   r  NTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.func2  s    r   z@func()z"Only named functions are supportedrT   z@funcs[0]()Nz@funcs[0].__call__())rF   r#   rV   rB  )r1   r2   r  funcss       r   test_call_non_named_expression@TestDataFrameQueryBacktickQuoting.test_call_non_named_expression*  sx    	 
	]]9,PQGGM" R ]]9,PQGG*+ RQ RQ RQs   A?$B?
B
Bc                 &   [        SS/SS//SS/US9n[        (       a  [        OS n[        R                  " U5         UR                  S5      nS S S 5        [        / S	Q/ S
Q// SQUS9n[        R                  " WU5        g ! , (       d  f       N9= f)Nr,   r-   r.   re   r   r   rv   r9  z	c = b - arg  )r.   re   r,   r]  r   r
   r  rD   r  rF   rE   )r1   any_numeric_ea_and_arrow_dtyper2   r  rI   r   s         r   test_ea_dtypes0TestDataFrameQueryBacktickQuoting.test_ea_dtypes?  s    VaVsCj8V
 %6$5.4''0WW[)F 1	"#0

 	fh/ 10   B
Bc                 &   [        SS/SS//SS/SS9n[        (       a  [        OS n[        R                  " U5         UR                  S	5      nS S S 5        [        / S
Q/ SQ// SQSS9n[        R                  " WU5        g ! , (       d  f       N9= f)Nr,   r-   r.   re   r   r   Float64r  z	c = b - 1rg  )r.   re   r.   r]  r  )r1   r2   r  rI   r   s        r   test_ea_dtypes_and_scalar;TestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalarN  s    AA'#s9M$5$5.4''0WW[)F 1	"O9
 	fh/ 10r  c           	          [        SS/SS//SS/US9nUR                  S5      n[        [        SS/US	9[        SS/US	9[        SS/US
   R                  S	9S.5      n[        R
                  " X45        g )Nr,   r-   r.   re   r   r   r  z	c = 2 - 1r8  r   r]  )r   rF   r   r9  rD   rE   )r1   r  r2   rI   r   s        r   #test_ea_dtypes_and_scalar_operationETestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar_operationY  s    VaVsCj8V
 %QF*HIQF*HIQF&+*;*;<
 	f/r   r9  )r:  Int64int64[pyarrow]c           	         US:X  a  [         R                  " S5        [        S[        SS/US905      nS1nUS:X  a  [        (       a  [
        OS n[        R                  " U5         UR                  S5      nS S S 5        [        S[        S/US/S	905      n[        R                  " WU5        g ! , (       d  f       N>= f)
Nr  pyarrowr   r,   r-   r8  r  z	a in @refr9  ru   )
r#   importorskipr   r   r
   r  rD   r  rC   rE   )r1   r9  r2   refr  rI   r   s          r   test_query_ea_dtypes6TestDataFrameQueryBacktickQuoting.test_query_ea_dtypesh  s    $$	*VQF%89:c$)W$49J9J.PT''0XXk*F 1c61#U1##FGH
fh/ 10s   &B00
B>r!   r   r   c           	         US:X  a  [         OS nUS:X  a!  [        (       d  [        R                  " S5        US:X  a  [        R                  " S5        [        [        / SQSS9[        / SQUS9S	.5      n[        R                  " U5         UR                  S
US9nS S S 5        [        [        SS/SSS/S9[        SS/USS/S9S	.5      n[        R                  " WU5        g ! , (       d  f       NN= f)Nr   znumexpr not installedr  r  )r,   r,   r-   r  r8  )r,   r-   r-   r   zA == BrM   r,   r-   r   r  )r  r
   r#   r$   r  r   r   rD   r  rC   rE   )r1   r9  r!   r  r2   rI   r   s          r   !test_query_ea_equality_comparisonCTestDataFrameQueryBacktickQuoting.test_query_ea_equality_comparisonu  s     %+i$7.TY'8'8KK/0$$	*'2	QV9WX
 ''0XXhvX6F 1QF'!Q@QF%1v>
 	fh/ 10s   
C##
C1c                     [         R                  R                  S5      n[        S[         R                  " S S /SS90[
        S9nUR                  S5      n[        S/ 0[
        S9n[        R                  " X45        g )NUTCr   T)utcr8  za > @now)	r   	Timestampnowr   to_datetimer3  rC   rD   rE   )r1   r  r2   rI   r   s        r   test_all_nat_in_object8TestDataFrameQueryBacktickQuoting.test_all_nat_in_object  sb    llu%R^^T4LdCDFS*%c2Yf5
f/r   r   N)&r[   r\   r]   r^   r#   r_   r2   rl  ro  rs  rw  rz  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   rV  rV    s   ^^
 
B+
+
,
,
,
,
,
,
,
,
,
+
+
+
+
,
+
!
*
"
&
,*0	00 [[W&JK
0 L
0 [[X)'<=[[W&JK0 L >0(0r   rV  )'r  numpyr}   r#   pandas.errorsr   r   pandas.util._test_decoratorsutil_test_decoratorstdr   r   r   r   r   r   r	   pandas._testing_testingrD   pandas.core.computation.checkr
   r_   r   r   
skip_if_nor!   r%   r'   rb   r   r   r  r  r  r  rF  rV  r   r   r   <module>r     sH      * )    ; (+= > fll9BMM)4LMN	=
01 01f`- `-FGI GIT yv0 v0 v0r yu!&E u! u!p0%D 0*0%D 0*Z* Z*z? ?4s0 s0r   