
    A>iK              	       T   S SK r S SKJ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  \R2                  " SS/S S	9S
 5       r\R2                  " S\R6                  " S\R8                  " S5      S9/S S	9S 5       rS r " S S5      r " S S5      r  " S S5      r!\R8                  " S5       " S S5      5       r"\R8                  " 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)
TokenError)NumExprClobberingErrorUndefinedVariableError)	DataFrameIndex
MultiIndexSeries
date_range)NUMEXPR_INSTALLEDpythonpandasc                     U $ N xs    a/var/www/html/land-tabula/venv/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+   r2   r3   s     r   	expected1TestCompat.expected10   s    $$(|r   c                      UR                   S-   $ Nr-   r6   r7   s     r   	expected2TestCompat.expected24   s    ttaxr   c                     UR                  S5      n[        R                  " XB5        UR                  S5      n[        R                  " XC5        g )NA>0A+1querytmassert_frame_equalevalassert_series_equalr2   r3   r8   r<   results        r   test_query_defaultTestCompat.test_query_default8   s:     %
f0
v1r   c                     UR                  SS S9n[        R                  " XB5        UR                  SS S9n[        R                  " XC5        g )Nr?   r"   r@   rA   rG   s        r   test_query_NoneTestCompat.test_query_None@   sB    %-
f0t,
v1r   c                     UR                  SSS9n[        R                  " XB5        UR                  SSS9n[        R                  " XC5        g )Nr?   r   rL   r@   rA   rG   s        r   test_query_pythonTestCompat.test_query_pythonF   sB    %1
f0x0
v1r   c                    [         (       aM  UR                  SSS9n[        R                  " XB5        UR	                  SSS9n[        R
                  " XC5        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   rL   r@   z~'numexpr' is not installed or an unsupported version. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installedmatch)	r   rB   rC   rD   rE   rF   r$   raisesImportError)r2   r3   r8   r<   rH   msgs         r   test_query_numexprTestCompat.test_query_numexprL   s    XXeIX6F!!&4WWU9W5F""65! 
 {#6y1 7{#6i0 76 7666s   4C &C 
C
Cr   N)__name__
__module____qualname____firstlineno__r$   fixturer3   r8   r<   rI   rM   rP   rX   __static_attributes__r   r   r   r(   r(   +   s\    ^^+ + ^^  ^^ 222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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   ru   zbase z dfzm )re   rk   )rh   rn   )r   rangelistilocmeannptilevaluesreshaperE   rC   rD   getattr)
r2   op_stroproprc   r3   mbaseexpectedrH   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nanrz   isnanrC   rD   )r2   r3   r   rH   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 evaluatedrS   c                      U R                   S:H  $ )Nr   )r   r   s    r   r   6TestDataFrameEval.test_query_non_str.<locals>.<lambda>   s    qssczr   o   r   r$   rU   
ValueErrorrB   r2   r3   rW   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 stringrS    r   r   s      r   test_query_empty_string)TestDataFrameEval.test_query_empty_string   s;    Y'(.]]:S1HHRL 211   A
Ac                     [        [        S5      [        S5      [        S5      S.5      R                  SS0S9nUR                  SXS9n[        / SQ// S	QS
/S9n[        R
                  " XE5        g )Nr/   )r+   r   Cr   r+   rw   zC == 1r"   r   )r-   r-   r-   )r+   r+   r   r-   )ru   rt   )r   rx   renamerB   rC   rD   )r2   r"   r   r3   resexpects         r    test_query_duplicate_column_name2TestDataFrameEval.test_query_duplicate_column_name   sk    U1XE!H58DELL#J M 
 hhxh>I;sK
c*r   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.   abrw   r   r-   r   a + b	resolvers)r   r|   r   r   r   ry   rE   pd)r2   r3   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   rw   cz	a + b * cr   r   r   )	r   r|   r   r   r   ry   rE   rC   rF   )r2   r3   r   rH   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   rE   rC   rD   )r2   r3   r   r   s       r   test_eval_object_dtype_binop.TestDataFrameEval.test_eval_object_dtype_binop   sI    sCj)*gg01S#JdE]CD
c,r   c                     [        U5        [        / SQSS9R                  5       nUR                  SXS9n[        R
                  " US   5      n[        R                  " XT5        g )Ng?g      ?gffffff@r   namez@np.floor(a)r   )r&   r	   to_framerE   r|   floorrC   rF   r2   r"   r   r3   r   r   s         r   test_using_numpy"TestDataFrameEval.test_using_numpy   sQ     (O#.779ggnVgC88BsG$
x-r   c                     [        / SQSS9R                  5       nUR                  SXS9nUS   n[        R                  " XT5        g )Nr   r   r   r   )r	   r   rE   rC   rF   r   s         r   test_eval_simple"TestDataFrameEval.test_eval_simple   s@    O#.779ggc&g8c7
x-r   c                 n   US:X  a.  [         R                  R                  SS9nUR                  U5        [	        [
        R                  " / SQ5      [
        R                  " / SQ5      S.5      nUR                  SXS9n[        [
        R                  " / S	Q5      5      n[        R                  " Xg5        g )
Nr   z/numexpr does not support extension array dtypes)reasonr,   rd   r      r   r   za / br   )g      ?g?      ?)r$   markxfailapplymarkerr   r   arrayrE   r	   rC   rF   )r2   r"   r   r   r   r3   rH   r   s           r   test_extension_array_eval+TestDataFrameEval.test_extension_array_eval   s    Y;;$$H % D %RXXi0rxx	7JKL?"((#567
v0r   c                     [        S/S/S.5      nUR                  SXS9n[        S/5      n[        R                  " XE5        g )Ny      ?       @y      ?      ?r   za/br   y      ?      ?)r   rE   r	   rC   rF   )r2   r"   r   r3   rH   r   s         r   test_complex_eval#TestDataFrameEval.test_complex_eval   sA    fXVH56v=:,'
v0r   r   N)rZ   r[   r\   r]   r$   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r_   r   r   r   ra   ra   ^   s    [[S1d),[[	
4 -480		+U1-..
11r   ra   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   rt   rt   r   z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	   rt   get_level_valuesr~   rB   rC   rD   isinr2   r   r"   r   r   rt   r3   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   rB   r	   rt   r   r~   rC   rD   )
r2   r   r"   r   r   rt   r3   r   r   r   s
             r   *test_query_with_partially_named_multiindexKTestDataFrameQueryWithMultiIndex.test_query_with_partially_named_multiindexx  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_seriesrt   )milevellevel_valuesss       r   r
  ]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_series  s*    ..u5L&&(AGHr   )rt   ru   r  r   clevel_0z object must be a Series or Index)r   r|   onesr   r   rx   _get_index_resolversru   r
  rt   items
isinstancer   is_r	   rC   rF   AssertionError)	r2   _r3   r   r
  
col_seriesr   kvs	            r   )test_query_multiindex_get_index_resolversJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers  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)	rZ   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   r1   s    r   r"   &TestDataFrameQueryNumExprPandas.engine      r   c                     gNr   r   r1   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.dates3r   20130101)r&   r   r|   r   r   r   r
   rB   r,  r0  rC   rD   r2   r"   r   r3   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/  r0  dates1 < 20130101 < dates3r   r1  r   r|   r   r   r   r
   rB   r,  r0  rC   rD   r2  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/  r0  r   r7  r   r1  r   r|   r   r   r   r
   r   NaTlocrB   r,  r0  rC   rD   r2   r"   r   rc   r3   r   r3  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/  r0  Tinplacedropindex < 20130101 < dates3r   r1  r   r|   r   r   r   r
   	set_indexrB   rt   r0  rC   rD   r2   r"   r   rc   r3   return_valuer   r3  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/  r0  r   r   TrC  rF  r   r1  r   r|   r   r   r   astypeobjectr
   r   r=  rz   rH  rB   rt   r0  rC   rD   rI  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/  r0  r.   r   TrC  r7  r   r1  )r
   r   r   r=  r>  r|   r   r   rH  rB   rt   r
  r0  rC   rD   )	r2   r"   r   rc   dr3   rJ  r   r3  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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)  ns)r+  unit)datesnondatezdates == nondater   r   zdates != nondatez=Invalid comparison between dtype=datetime64\[ns\] and ndarray)<><=>=rS   zdates z nondate)r   r
   r|   r  rB   lenrC   rD   r$   rU   	TypeError)r2   r"   r   rc   r3   rH   rW   r   s           r   test_date_query_with_non_date=TestDataFrameQueryNumExprPandas.test_date_query_with_non_date	  s    #JE99Q<
 ,VK6{a,VK
f)N(By46"X.vM 54 )44s   B77
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/      rd      )ire   rinvalid syntaxrS   zi - +r   )r   rx   r$   rU   SyntaxErrorrB   )r2   r"   r   r3   rW   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   rw   )r-   r.   za > br   z@a > b!local variable 'c' is not definedrS   z@a > b > @czname 'c' is not definedz
@a > b > c)r&   r   r|   r   r   r   ry   rB   r   r   rC   rD   r$   rU   r   )r2   r"   r   r3   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   abcrw   zname 'sin' is not definedrS   sin > 5r   )
r   r|   r   r   integersry   r$   rU   r   rB   )r2   r"   r   rc   r   r3   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   rt  rw   sinzVariables in expression.+rS   ru  r   )r   r|   r   r   rv  ry   rt   r   r$   rU   r   rB   )r2   r"   r   rc   r   r3   rW   s          r   test_query_builtin2TestDataFrameQueryNumExprPandas.test_query_builtinG  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   rw   a < br   za + b > b * c)r   r|   r   r   r   rC   rD   rB   r   r   r   r2   r"   r   r3   s       r   
test_query*TestDataFrameQueryNumExprPandas.test_queryR  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   blobr   r~  rs   z(blob < 5) & (a < b)r   r   zblob < b)r   r|   r   r   rv  r   rx   rB   rt   r   r   rC   rD   r2  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~  rs   z	index < br   z	index < 5r   )r   r|   r   r   rv  rx   rB   rt   r   rC   rD   r2  s         r   test_query_index_without_name=TestDataFrameQueryNumExprPandas.test_query_index_without_namen  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   rB   rC   rD   r   rE   )r2   r"   r   r3   df2r   rH   s          r   test_nested_scope1TestDataFrameQueryNumExprPandas.test_nested_scope  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 definedrS   zdf > 0r   )	r   r|   r   r   r   r$   rU   r   rB   r  s       r   *test_nested_raises_on_local_self_referenceJTestDataFrameQueryNumExprPandas.test_nested_raises_on_local_self_reference  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   
abcdefghijrw   r-   za < @br   r  )r&   r   r|   r   r   r   ry   r   rB   rC   rD   r   )r2   r"   r   r3   r   r   rH   s          r   test_local_syntax1TestDataFrameQueryNumExprPandas.test_local_syntax  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 )Nrt  r.   r  rw   z!a < b < c and a not in b not in cr   )r&   ry   r   r|   r   r   r   ra  rB   r   r   r   r   rC   rD   )r2   r"   r   colsr3   r   r   r3  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   r   r   r   r   r-   z
b - 1 in ar   z@b - 1 in a)r&   r	   r|   r   r   rv  r   r>  r   r   rB   rC   rD   )r2   r"   r   r   r   r3   r   rH   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   rB   r   rC   rD   )r2   r"   r   r   r3   rH   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   rw   rp  rS   za == @cr   )r"   r   r&   r   r|   r   r   ry   r$   rU   r   rB   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-   ro  e   r.   )rt   r   rt   z	index > 5r   r   zilevel_0 > 5r   r   za > 5)r|   r_r   r   r   r   r   rt   r   rB   rC   rD   r>  r   )r2   r"   r   rc   r   r3   rH   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   rB   rC   rD   )
r2   r   fr"   r   rc   r3   qr   rH   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   rB   rC   rD   reset_index)r2   tz_aware_fixturer  df_indexr   r3   rH   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   rP  rB   rC   rD   wherer   r   notnull)r2   r"   r   rc   r3   r   rH   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)'rZ   r[   r\   r]   r$   r^   r"   r   r4  r9  r@  rK  rR  rV  rc  rl  rq  rw  r{  r  r  r  r  r  r  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)TestDataFrameQueryNumExprPythoni4  c                     gr   r   r1   s    r   r"   &TestDataFrameQueryNumExprPython.engine6  r"  r   c                     gNr   r   r1   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/  r0  )(dates1 < 20130101) & (20130101 < dates3)r   r1  r8  r2  s         r   r9  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/  r0  r   r  r   r1  r<  r?  s          r   r@  8TestDataFrameQueryNumExprPython.test_date_query_with_NaTI  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/  r0  TrC  ((index < 20130101) & (20130101 < dates3)r   r1  rG  rI  s           r   rK  5TestDataFrameQueryNumExprPython.test_date_index_queryW  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/  r0  rN  TrC  r  r   r1  rO  rI  s           r   rR  >TestDataFrameQueryNumExprPython.test_date_index_query_with_NaTd  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/  r0  r   TrC  "'BoolOp' nodes are not implementedrS   rF  r   )r   r|   r   r   r   r
   r   r=  r>  rH  r$   rU   NotImplementedErrorrB   )r2   r"   r   rc   r3   rJ  rW   s          r   rV  ITestDataFrameQueryNumExprPython.test_date_index_query_with_NaT_duplicatesu  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 parserrS   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   rE   r   r|   r   r   r   r$   rU   rk  rB   r   rC   rD   )	r2   r"   r   r   rH   r3   r  rW   r   s	            r   r  1TestDataFrameQueryNumExprPython.test_nested_scope  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,   r   )minmaxzMVariables in expression \"\(min\) == \(1\)\" overlap with builtins: \('min'\)rS   zmin == 1zMVariables in expression \"\(max\) == \(1\)\" overlap with builtins: \('max'\)zmax == 1)r   r$   rU   r   rB   )r2   r3   regex_to_matchs      r   +test_query_numexpr_with_min_and_max_columnsKTestDataFrameQueryNumExprPython.test_query_numexpr_with_min_and_max_columns  s    y;<0 	 ]]1HHHZ  I0 	 ]]1HHHZ  IH IH IHs   A>#B>
B
Br   N)rZ   r[   r\   r]   r$   r^   r"   r   r9  r@  rK  rR  rV  r  r  r_   r   r   r   r  r  4  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   r1   s    r   r"   %TestDataFrameQueryPythonPandas.engine  r&  r   c                     gr$  r   r1   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   rt  rw   rz  r   ru  r   r   r|   r   r   rv  ry   rt   r   rB   rC   rD   r2   r"   r   rc   r   r3   r   rH   s           r   r{  1TestDataFrameQueryPythonPandas.test_query_builtin  z    
II!!!$--a!f-=tE{
 hhl#)FB
h/r   r   N
rZ   r[   r\   r]   r$   r^   r"   r   r{  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   r1   s    r   r"   %TestDataFrameQueryPythonPython.engine  r&  r   c                     gr  r   r1   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   r{  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X/-  nSn[        X{U5       HP  u  pn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                  " UU5        UR                  SX!S9n[        R                  " UU5        [        R                  " UX3R                  R                  S/5         5        X3R                  S:g     nUR                  SX!S9n[        R                  " UU5        UR                  SX!S9n[        R                  " UU5        [        R                  " UX3R                  R                  S/5      )    5        g ! , (       d  f       GMz  = f)Nr.   r   r-   r   rw   
aabbccddeestringsr   r   z"a"rv   r  r  $'(Not)?In' nodes are not implemented rS   )r"   r   
local_dictz"a" == stringsr   zstrings == "a"zstrings != "a"z"a" != strings)r   r|   r   r   r   r	   ry   r  zipr$   rU   r  rB   rC   rD   r   )r2   r   r"   r3   r   collstlhsrhsr  r  opsrW   lhop_rh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x.C9C"3S1t1SE2$']]#6cBHH%%$-rzz#:	   CB  2 ((+F(JC!!#v.((+F(JC!!#v.!!#r**//3%*@'AB

c)*F((+F(JC!!#v.((+F(JC!!#v.!!#r::??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  ax  SnS	nU/S-  U/S-  -   nUS S S
2   nSu  pSX/-  nSn[        X{U5       HB  u  pnU SU SU 3n[        R                  " [        US9   UR                  UX!S9  S S S 5        MD     g UR                  SX!S9n[        R                  " UU5        UR                  SX!S9n[        R                  " UU5        X3R                  R                  SS/5      )    nUR                  SX!S9n[        R                  " UU5        UR                  SX!S9n[        R                  " UU5        g ! , (       d  f       GM  = f)Nr.   r   r   rw   r  r  r   r   z
["a", "b"]rv   r  r  r  rS   r   zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)r   r|   r   r   r   r	   ry   r  r   r  r$   rU   r  rB   rC   rD   )r2   r   r"   r3   r   r  r	  r
  r  r  r  r  rW   r  ops_r  r  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x.C9C #Cc 2"t1TF!B4(]]#6cBHHRH> CB !3
 ((26(QC!!#v.((26(QC!!#v.#s445F((26(QC!!#v.((26(QC!!#v. 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   rU  r   za in br   za in b and c < dr  rS   r  )r   ry   r|   r   r   rv  rB   r   r   r   rC   rD   r   rU  r$   rU   r  )r2   r   r"   r3   r   r3  rW   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R                  S	XS
9nX3R                  UR                  :H     n[        R                  " XE5        UR                  SXS
9nX3R                  UR                  :g     n[        R                  " XE5        g )Nr  r  r.   r   r  r   r  r  za == br   za != b)r   ry   r|   r   r   rv  rB   r   r   rC   rD   )r2   r   r"   r3   r   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	
 hhxh>
c'hhxh>
c'r   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-   rd   )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&   rx   r
   r   r|   r  repeatappendr(  rB   rC   rD   )r2   r   r"   rc   acteventsstamps1stamps2r3   r   r   s              r   test_query_with_nested_strings8TestDataFrameQueryStrings.test_query_with_nested_stringsO  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   r3  r  )r2   r   r"   r3   r   r3  s         r   (test_query_with_nested_special_characterBTestDataFrameQueryStrings.test_query_with_nested_special_characterb  sL     (6YGHhh+FhJ44=()
c)r   zop, funcr]  r^  r_  r`  c                 p   [        [        R                  R                  S5      R	                  [        S5      S5      5      n[        [        R                  " UR                  5      5      n[        XVS.5      nUR                  SU S3X!S9nXt" UR                  S5         n	[        R                  " X5        g )	Nr.   abcdero  )Xr   zX z "d"r   rU  )r	   r|   r   r   r   ry   r  r   r   rB   r8  rC   rD   )
r2   r   r"   r   funcr   r   r3   r   r   s
             r   test_query_lex_compare_strings8TestDataFrameQueryStrings.test_query_lex_compare_stringsi  s     299((+224="EF299QVV$%Q'(hhB4t}VhCd244o&
c,r   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   rw   z	bid & askr   )r|   r   r   rv  ra  rP  boolr   rB   r=  r?  rC   rD   )r2   r   r"   ru   datar3   r   r   s           r   "test_query_single_element_booleans<TestDataFrameQueryStrings.test_query_single_element_booleans{  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 USrF  IBM USrG  )gl[@gGzn[@gf@g33333f@)SymbolPricerF  zSymbol == @symbr   )r&   r   rH  rB   rC   rD   )r2   r   r"   r3   esymbri  s          r   !test_query_string_scalar_variable;TestDataFrameQueryStrings.test_query_string_scalar_variable  sX     (B9
 yyH$%HH&vHE
a#r   in_list)Nasdfghjk)rO  NrP  )rO  rP  N)NNrO  )rO  NN)NNNc                 F   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                  5      UR                  R                  S9Ul        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   rO  r   stringdtypeint64za == 'asdf'r   za <= 'asdf')
	enumerater   rt   rP  r   ry   rT  rB   rC   rD   )r2   rN  r   r"   rh  valuer   df_expectedr3   r   r   res3s               r   test_query_string_null_elements9TestDataFrameQueryStrings.test_query_string_null_elements  s     -6w-?S-?5F?HAH-?Shx@'--44W=W~X6bhhrxx~~>xxfxDS'V#$xxfxD
d0
d)
d)
d) Ts
   DDr   N)rZ   r[   r\   r]   r  r  r  r   r0  r4  r$   r   r   r  ltgtleger:  rC  rL  rZ  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  rt  rw   )r   r|   r   r   r   ry   r1   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   rE   r   r   rC   rF   r2   rc  r   r"   r   r   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-   rf  rg  s         r   test_bool_arith_expr/TestDataFrameEvalWithFrame.test_bool_arith_expr  sA    jjjF1%/
s+r   r   )re   rh   rk   rn   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   rU  r   z:unsupported operand type\(s\) for .+: '.+' and '.+'|CannotrS   r  z br   )r   r$   rU   rb  rE   )r2   r   r"   r   r3   rW   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)rZ   r[   r\   r]   r$   r^   rc  rh  rk  r   r   rn  r_   r   r   r   ra  ra    sH    ^^
 

,
,
 [[T#78? 9?r   ra  c                   T   \ 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S r S r!S r"S r#S  r$\RJ                  RM                  S!/ S"Q5      S# 5       r'S$ r(S% r)S& r*S' r+S( r,S) r-S* r.S+ r/S, r0S- r1S. r2S/ r3\RJ                  RM                  S0/ S1Q5      S2 5       r4\RJ                  RM                  S3S4S5/5      \RJ                  RM                  S0/ S1Q5      S6 5       5       r5S7 r6S8r7g9):!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&Q/ S'QS(.E5      $ ))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&  rd   r/   C_C)   r  r   D_D D)   r-   r  E.E)r   r/   r   F-F)rw  r-   r   1e1)r.   rd   rw  def)r   ry  r.   A (x))rd   r-   r/   zB(x))r-   r-   r   zB (x))r.   r&  rd        &^ :!€$?(} >    <++*''  )r.   r   r   r   )r   ry  r-    A)rd   r&  r    r-   r.   r-   )r   r/   r-   )r  r-   rw  )rw  r&  r   )r.   rd   r   )r   r&  r  )it'sthat's   ☺
   xy （z）   xy （z\uff09foo#barr-   r0   r1   s    r   r3   $TestDataFrameQueryBacktickQuoting.df  s     Yy y 		
 z  y z y {  	  /	 K  i!" i#$ "# '"+$1
 	
r   c                 h    UR                  S5      nUSUS   :     n[        R                  " X#5        g )Nz	1 < `B B`r-   rs  rB   rC   rD   r2   r3   r   r   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-   rs  rd   rt  r  r  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+   rs  rE   rC   rF   r  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`rs  rt  r  r  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` + Arv  r+   r  r  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`rv  rt  r  r  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+   rx  r  r  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+   rv  r  r  s       r   'test_backtick_quote_name_with_no_spacesITestDataFrameQueryBacktickQuoting.test_backtick_quote_name_with_no_spaces  r  r   c                 t    UR                  S5      nUS   US   -   US   -
  n[        R                  " X#5        g )Nz`E.E` + `F-F` - Arz  r{  r+   r  r  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+   r|  r  r  s       r   test_start_with_digit7TestDataFrameQueryBacktickQuoting.test_start_with_digit  r  r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz	A + `def`r+   r}  r  r  s       r   test_keyword.TestDataFrameQueryBacktickQuoting.test_keyword  r  r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nz`A` > 2r+   r.   r  r  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)` > 2r~  r.   r  r  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   r  r  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` > 5ru  r   r  r  s       r   test_multiple_spaces6TestDataFrameQueryBacktickQuoting.test_multiple_spaces3  s.    hh|$vJN#
c*r   c                 h    UR                  S5      nUS   US   -   n[        R                  " X#5        g )Nz` A` + `  `r  r  r  r  s       r   test_start_with_spaces8TestDataFrameQueryBacktickQuoting.test_start_with_spaces8  s0    ggm$DBtH$
s+r   c                 f    UR                  S5      nXS   S:H     n[        R                  " X#5        g )Nz`1` == 7r-   r&  r  r  s       r   	test_ints+TestDataFrameQueryBacktickQuoting.test_ints=  s-    hhz"qEQJ
c*r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nu"   `  &^ :!€$?(} >    <++*''  ` > 4r  rd   r  r  s       r   test_lots_of_operators_string?TestDataFrameQueryBacktickQuoting.test_lots_of_operators_stringB  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'rS   z	@pd.thing)r$   rU   AttributeErrorrE   )r2   r3   messages      r   test_missing_attribute8TestDataFrameQueryBacktickQuoting.test_missing_attributeG  s-    <]]>9GGK  :99s	   7
Ac                 l    UR                  S5      nXS   US   :     n[        R                  " X#5        g )Nz`it's` > `that's`r  r  r  r  s       r   
test_quote,TestDataFrameQueryBacktickQuoting.test_quoteL  s4    hh*+vJH-.
c*r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nu	   `☺` > 4r  rd   r  r  s       r   #test_character_outside_range_smileyETestDataFrameQueryBacktickQuoting.test_character_outside_range_smileyQ  s.    hh{#uIM"
c*r   c                 f    UR                  S5      nXS   S:H     n[        R                  " X#5        g )Nu   `xy （z）` == 2r  r.   r  r  s       r   *test_character_outside_range_2_byte_parensLTestDataFrameQueryBacktickQuoting.test_character_outside_range_2_byte_parensV  s1    hh*+|$)*
c*r   c                 f    UR                  S5      nXS   S:H     n[        R                  " X#5        g )Nu   `xy （z\uff09` == 2r  r.   r  r  s       r   1test_character_outside_range_and_actual_backslashSTestDataFrameQueryBacktickQuoting.test_character_outside_range_and_actual_backslash\  s2    hh./*+q01
c*r   c                 f    UR                  S5      nXS   S:     n[        R                  " X#5        g )Nz`foo#bar` > 4r  rd   r  r  s       r   test_hashtag.TestDataFrameQueryBacktickQuoting.test_hashtagb  s/    hh'yMA%&
c*r   c                 |    [        SS/S9nUR                  S5      nXS   S:     n[        R                  " X#5        g )Nr,   a#rw   z`a#` < 2r.   r   rB   rC   rD   r2   r3   rH   r   s       r   1test_expr_with_column_name_with_hashtag_characterSTestDataFrameQueryBacktickQuoting.test_expr_with_column_name_with_hashtag_characterg  s<    y4&1*%hl#
f/r   c                 |    [        SS/S9nUR                  S5      nXS   S:     n[        R                  " X#5        g )Nr,   r  rw   z`a#` < 2  # This is a commentr.   r  r  s       r   test_expr_with_comment8TestDataFrameQueryBacktickQuoting.test_expr_with_commentn  s=    y4&19:hl#
f/r   c                 |    [        SS/S9nUR                  S5      nXS   S:     n[        R                  " X#5        g )Nr,   za`#brw   z`a``#b` < 2r.   r  r  s       r   1test_expr_with_column_name_with_backtick_and_hashSTestDataFrameQueryBacktickQuoting.test_expr_with_column_name_with_backtick_and_hashu  s<    y6(3-(j1n%
f/r   c                     [        SSS.5      nUR                  S5      nXS   S:     n[        R                  " X#5        g )Nr,   r   )a`br   z
`a``b` < 2r  r.   r  r  s       r   (test_expr_with_column_name_with_backtickJTestDataFrameQueryBacktickQuoting.test_expr_with_column_name_with_backtick|  s=    y	:;,'i!m$
f/r   c                 ~    [        SS/S9nUR                  S5      nUSUS   :     n[        R                  " X#5        g )N`z`````z
``````````
#backticksrw   z'```' < `#backticks`z```r  r  s       r   $test_expr_with_string_with_backticksFTestDataFrameQueryBacktickQuoting.test_expr_with_string_with_backticks  sB    3l^L01eb../
f/r   c                 ~    [        SS/S9nUR                  S5      nUSUS   :     n[        R                  " X#5        g )Nr  r  rw   z'`#backticks`' < `#backticks`z`#backticks`r  r  s       r   Ctest_expr_with_string_with_backticked_substring_same_as_column_nameeTestDataFrameQueryBacktickQuoting.test_expr_with_string_with_backticked_substring_same_as_column_name  sB    3l^L9:nr,'778
f/r   zcol1,col2,expr))r  r  z`it's` < `that's`)zit"szthat"sz`it"s` < `that"s`)r  zthat's "nice"z`it's` < `that's "nice"`)r  zthat's #coolz+`it's` < `that's #cool` # This is a commentc           	          [        USUS0USUS0USUS0USUS0/5      nUR                  U5      nXDU   XB   :     n[        R                  " XV5        g )	Nr-   r.   r/   rd   rv   r  )r2   col1col2exprr3   rH   r   s          r   3test_expr_with_column_names_with_special_charactersUTestDataFrameQueryBacktickQuoting.test_expr_with_column_names_with_special_characters  ss     q$"q$"r4$r4$	
 $h)*
f/r   c                 ~    [        SS/S9nUR                  S5      nUSUS   :     n[        R                  " X#5        g )Naaavvvzzzcolumn_namerw   z'value' < column_namerW  r  r  s       r   test_expr_with_no_backticks=TestDataFrameQueryBacktickQuoting.test_expr_with_no_backticks  sB    ,}oF12g= 112
f/r   c                     [        SS/S9n[        R                  " [        [        4SS9   UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr-   r   r   column-namerw   rj  rS   z5 < `column-namer   r$   rU   rk  r   rB   r7   s     r   2test_expr_with_no_quotes_and_backtick_is_unmatchedTTestDataFrameQueryBacktickQuoting.test_expr_with_no_quotes_and_backtick_is_unmatched  s>    zM?;]]K4<LMHH'( NMMr   c                 ~    [        SS/S9nUR                  S5      nUSUS   :     n[        R                  " X#5        g )Nr  r  rw   z5 < `column-name`r   r  r  s       r   0test_expr_with_no_quotes_and_backtick_is_matchedRTestDataFrameQueryBacktickQuoting.test_expr_with_no_quotes_and_backtick_is_matched  sA    zM?;-.a"]++,
f/r   c                     [        SS/S9n[        R                  " [        [        4SS9   UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr  It'srw   unterminated string literalrS   z	5 < `It'sr  r7   s     r   Etest_expr_with_backtick_opened_before_quote_and_backtick_is_unmatchedgTestDataFrameQueryBacktickQuoting.test_expr_with_backtick_opened_before_quote_and_backtick_is_unmatched  sE    zF84]]*%-J
 HH[!
 
 
r   c                 ~    [        SS/S9nUR                  S5      nUSUS   :     n[        R                  " X#5        g )Nr  r  rw   z
5 < `It's`r   r  r  s       r   Ctest_expr_with_backtick_opened_before_quote_and_backtick_is_matchedeTestDataFrameQueryBacktickQuoting.test_expr_with_backtick_opened_before_quote_and_backtick_is_matched  s>    zF84,'a"V*n%
f/r   c                     [        SS/S9n[        R                  " [        [        4SS9   UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr  r  rw   r  rS   z+`column-name` < 'It`s that\'s "quote" #hashr  r7   s     r   Btest_expr_with_quote_opened_before_backtick_and_quote_is_unmatcheddTestDataFrameQueryBacktickQuoting.test_expr_with_quote_opened_before_backtick_and_quote_is_unmatched  sG    ,}oF]]*%-J
 HHEF
 
 
r   c                 |    [        SS/S9nUR                  S5      nXS   S:     n[        R                  " X#5        g )Nr  r  rw   z,`column-name` < 'It`s that\'s "quote" #hash'It`s that's "quote" #hashr  r  s       r   Gtest_expr_with_quote_opened_before_backtick_and_quote_is_matched_at_endiTestDataFrameQueryBacktickQuoting.test_expr_with_quote_opened_before_backtick_and_quote_is_matched_at_end  sA    ,}oFKL'*FFG
f/r   c                 ~    [        SS/S9nUR                  S5      nUSUS   :     n[        R                  " X#5        g )Nr  r  rw   z,'It`s that\'s "quote" #hash' < `column-name`r  r  r  s       r   Gtest_expr_with_quote_opened_before_backtick_and_quote_is_matched_in_midiTestDataFrameQueryBacktickQuoting.test_expr_with_quote_opened_before_backtick_and_quote_is_matched_in_mid  sC    ,}oFKL2R5FFG
f/r   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   r9  NTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.func  s    r   z@func()z"Only named functions are supportedrS   z@funcs[0]()Nz@funcs[0].__call__())rE   r$   rU   rb  )r2   r3   r9  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/   rd   r   r   ru   rT  z	c = b - ar  )r/   rd   r-   r~  r   r   RuntimeWarningrC   assert_produces_warningrE   rD   )r2   any_numeric_ea_and_arrow_dtyper3   warningrH   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/   rd   r   r   Float64r$  z	c = b - 1r  )r/   rd   r/   r~  r%  )r2   r3   r)  rH   r   s        r   test_ea_dtypes_and_scalar;TestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar  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/   rd   r   r   r$  z	c = 2 - 1rS  r   r~  )r   rE   r	   rT  rC   rD   )r2   r(  r3   rH   r   s        r   #test_ea_dtypes_and_scalar_operationETestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar_operation  s    VaVsCj8V
 %QF*HIQF*HIQF&+*;*;<
 	f/r   rT  )rU  Int64int64[pyarrow]c                 p   US:X  a  [         R                  " S5        [        SSS/0US9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/0[        SS5      US	9n[
        R                  " WU5        g ! , (       d  f       N>= f)
Nr5  pyarrowr   r-   r.   rS  r4  z	a in @ref)rt   rT  )
r$   importorskipr   r   r&  rC   r'  rB   rx   rD   )r2   rT  r3   refr)  rH   r   s          r   test_query_ea_dtypes6TestDataFrameQueryBacktickQuoting.test_query_ea_dtypes   s    $$	*aV}E2c$)W$49J9J.PT''0XXk*F 1cA3ZuQ{%H
fh/ 10s   B''
B5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5      S9[        SS/U[        SSS5      S9S	.5      n[        R                  " WU5        g ! , (       d  f       N`= f)Nr   znumexpr not installedr5  r7  )r-   r-   r.   r4  rS  )r-   r.   r.   r   zA == BrL   r-   r.   r   rd   )rT  rt   )r&  r   r$   r%   r8  r   r	   rC   r'  rB   rx   rD   )r2   rT  r"   r)  r3   rH   r   s          r   !test_query_ea_equality_comparisonCTestDataFrameQueryBacktickQuoting.test_query_ea_equality_comparison-  s     %+i$7.TY'8'8KK/0$$	*'2	QV9WX
 ''0XXhvX6F 1QF'q!QHQF%uQ1~F
 	fh/ 10s   
C55
D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)utcrS  za > @now)	r   	Timestampnowr   to_datetimerQ  rB   rC   rD   )r2   rC  r3   rH   r   s        r   test_all_nat_in_object8TestDataFrameQueryBacktickQuoting.test_all_nat_in_objectC  sb    llu%R^^T4LdCDFS*%c2Yf5
f/r   r   N)8rZ   r[   r\   r]   r$   r^   r3   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  r   r  r	  r  r  r  r  r  r!  r*  r/  r2  r:  r=  rE  r_   r   r   r   rq  rq    s   ^^!
 !
F+
+
,
,
,
,
,
,
,
,
,
+
+
+
+
,
+
+
!
+
+
+++
000000 [[	
000)0"0G00,*0	00 [[W&JK
0 L
0 [[X)'<=[[W&JK0 L >0(0r   rq  ))r  tokenizer   numpyr|   r$   pandas.errorsr   r   pandas.util._test_decoratorsutil_test_decoratorstdr   r   r   r   r   r	   r
   pandas._testing_testingrC   pandas.core.computation.checkr   r^   r   r   
skip_if_nor"   r&   r(   ra   r   r  r  r  r  r  ra  rq  r   r   r   <module>rR     sK       * )    ; (+= > fll9BMM)4LMN	=
01 01fL1 L1^GI GIT yy0 y0 y0x yu!&E u! u!p0%D 0*0%D 0*T* T*n? ?4A0 A0r   