
    `Vg-M                    n   d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	Z
ddlmZmZ ddlmZ ddlmZ dd	lmZ ddlmc mZ dd
lmZmZmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) erddl*m+Z+  G d dejX                        Z- G d dej\                        Z. G d de.      Z/ G d dej`                        Z0 G d de0      Z1 G d de1      Z2 G d de0      Z3 G d  d!e3      Z4 G d" d#ejj                        Z5 G d$ d%e       Z6d& Z7 G d' d(ejp                        Z9 G d) d*      Z:d,d+Z;y)-z1 manage PyTables query interface via Expressions     )annotationsN)partial)TYPE_CHECKINGAny)	Timedelta	Timestamp)npt)UndefinedVariableError)is_list_like)expropsscope)ensure_decoded)BaseExprVisitor)is_term)extract_array)Index)pprint_thingpprint_thing_encoded)DeepChainMapc                  B     e Zd ZU dZded<   	 	 	 d	 	 	 	 	 d fdZ xZS )PyTablesScope)
queryablesdict[str, Any]r   c                F    t         |   |dz   ||       |xs i | _        y )N   )global_dict
local_dict)super__init__r   )selflevelr   r   r   	__class__s        a/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/pandas/core/computation/pytables.pyr    zPyTablesScope.__init__0   s)     	
S$*    )NNN)r"   intr   dict[str, Any] | NonereturnNone)__name__
__module____qualname__	__slots____annotations__r    __classcell__r#   s   @r$   r   r   +   s?    I
 ,0++
 *+ 
+ +r%   r   c                  L     e Zd ZU ded<   ddZdd fdZd Zed        Z xZ	S )	Termr   envc                ^    t        |t              r| }nt        }t        j	                  |      S N)
isinstancestrConstantobject__new__)clsnamer3   sideencodingklasss         r$   r:   zTerm.__new__>   s%    dC EE~~e$$r%   c                ,    t         |   ||||       y N)r=   r>   )r   r    )r!   r<   r3   r=   r>   r#   s        r$   r    zTerm.__init__E   s    sAr%   c                F   | j                   dk(  rP| j                  | j                  j                  vr"t	        dt        | j                         d      | j                  S 	 | j                  j                  | j                  d      S # t        $ r | j                  cY S w xY w)Nleftzname z is not definedF)is_local)r=   r<   r3   r   	NameErrorreprresolver
   r!   s    r$   _resolve_namezTerm._resolve_nameH   s    99yy 3 33%TYY'8 HII99	88##DII#>>% 	99	s   !&B B B c                    | j                   S r5   )_valuerH   s    r$   valuez
Term.valueW   s    {{r%   NNr3   r   r(   r)   )
r*   r+   r,   r.   r:   r    rI   propertyrL   r/   r0   s   @r$   r2   r2   ;   s-    	%B  r%   r2   c                  (     e Zd Zdd fdZd Z xZS )r8   c                l    t        |t              sJ t        |             t        |   ||||       y rA   )r6   r   typer   r    )r!   rL   r3   r=   r>   r#   s        r$   r    zConstant.__init__]   s2    #}-8tCy8-$Br%   c                    | j                   S r5   )_namerH   s    r$   rI   zConstant._resolve_namea   s    zzr%   rM   rN   )r*   r+   r,   r    rI   r/   r0   s   @r$   r8   r8   \   s    Cr%   r8   c                       e Zd ZU dZded<   ded<   ded<   d fdZd	 Zd
 Zd Ze	dd       Z
e	dd       Ze	d        Ze	d        Ze	d        ZddZddZd Z xZS )BinOp   r7   opr   r   z
str | None	conditionc                R    t         |   |||       || _        || _        d | _        y r5   )r   r    r   r>   rY   )r!   rX   lhsrhsr   r>   r#   s         r$   r    zBinOp.__init__m   s)    S#&$ r%   c                     y r5    rH   s    r$   _disallow_scalar_only_bool_opsz$BinOp._disallow_scalar_only_bool_opss       r%   c                     fd} j                    j                  }}t        |      r*t        |      r ||j                  |j                        }|S t        |      s/t        |      r$ ||j	                        |j                        }|S t        |      r/t        |      s$ ||j                  |j	                              }|S t        |      s2t        |      s' ||j	                        |j	                              }S )Nc                   | |S || S }t        | t              r3t        |t              rt        }n_t        | |      r| S t        ||      rE|S t        | t              r3t        |t              rt        }nt        | |      r| S t        ||      r|S  |j
                  | |j                  j                        j                         S )z5create and return a new specialized BinOp from myself)r   r>   )	r6   ConditionBinOpJointConditionBinOpFilterBinOpJointFilterBinOprX   r   r>   evaluate)rC   rightkr?   r!   s      r$   przBinOp.prune.<locals>.prw   s    |A$/e^4+Aa(Kq) LD+.e[1(Aa(Kq) Lu4==hjr%   )r[   r\   r   rL   prune)r!   r?   rj   rC   rh   ress   ``    r$   rk   zBinOp.prunev   s    	8 hhe4=WU^TZZ-C 
 75>TZZ&4C 
 T]75>TZZU!34C 
 $-75>TZZ&E(:;C
r%   c                v    t        |      s|g}t        |t        j                        r|j	                         }|S )zinplace conform rhs)r   r6   npndarrayravel)r!   r\   s     r$   conformzBinOp.conform   s/    C %Cc2::&))+C
r%   c                2    | j                   | j                  v S )z$return True if this is a valid field)r[   r   rH   s    r$   is_validzBinOp.is_valid   s     xx4??**r%   c                P    | j                   j                  | j                        duS )zx
        return True if this is a valid column name for generation (e.g. an
        actual column in the table)
        N)r   getr[   rH   s    r$   is_in_tablezBinOp.is_in_table   s"     ""488,D88r%   c                b    t        | j                  j                  | j                        dd      S )zthe kind of my fieldkindNgetattrr   ru   r[   rH   s    r$   rx   z
BinOp.kind   &     t**4884fdCCr%   c                b    t        | j                  j                  | j                        dd      S )zthe meta of my fieldmetaNry   rH   s    r$   r}   z
BinOp.meta   r{   r%   c                b    t        | j                  j                  | j                        dd      S )zthe metadata of my fieldmetadataNry   rH   s    r$   r   zBinOp.metadata   s&     t**4884j$GGr%   c                x    |j                  | j                        }d| j                   d| j                   d| dS )z2create and return the op string for this TermValue( ))tostringr>   r[   rX   )r!   vvals      r$   generatezBinOp.generate   s7    jj'488*AdggYauA..r%   c           	     *     fd}t         j                        }t         j                        }|dk(  s|dk(  rht        |t        t
        f      r ||      }t        |      }t        |      }|j                  |j                  d      }t        ||j                  |      S |dk(  s|dk(  rSt        |t              rt        |      j                  }nt        |d      j                  }t        t	        |      ||      S |d	k(  r>t         j                  d
      }||vrd}n|j                  |d      }t        ||d      S |dk(  r!t	        t        |            }t        |||      S |dk(  rt        |      }t        |||      S |dk(  rIt        |t              r!|j!                         j#                         dv}nt%        |      }t        |||      S t        |t              rt        | ||      d      S t'        d| dt)        |       d| d      )zn
        convert the expression that is in the term to something that is
        accepted by pytables
        c                `    j                   t        | j                         S t        |       S )N)r>   )r>   r   r   )rL   r!   s    r$   	stringifyz&BinOp.convert_value.<locals>.stringify   s)    }}(+EDMMJJ&&r%   
datetime64datetimeUTCtimedelta64	timedeltas)unitcategoryT)extract_numpyrC   )r=   integerfloatbool)	falsefnonnone0z[]z{} stringzCannot compare z	 of type z to z column)r   rx   r}   r6   r&   r   r   tz
tz_convert	TermValuerL   r7   r   r   r   searchsortedstriplowerr   	TypeErrorrR   )r!   r   r   rx   r}   r   results   `      r$   convert_valuezBinOp.convert_value   s   	'
 dii(dii(<4:#5!c5\*aLq!A!AttLL'Q..]"dk&9!S!aL&&ac*00SVQ--Z$T]]$GH !..qv.>VVY77YE!HAQ4((W_aAQ4((V^!S!	) 
. 
 GQ4((3Q	!h77oaS	$q'$tfGTUUr%   c                     y r5   r^   rH   s    r$   convert_valueszBinOp.convert_values  r`   r%   )rX   r7   r   r   r(   r)   r(   r   r(   r7   )r(   r   )r*   r+   r,   _max_selectorsr.   r    r_   rk   rq   rO   rs   rv   rx   r}   r   r   r   r   r/   r0   s   @r$   rV   rV   e   s    NG(T + + 9 9 D D D D H H/
=V~r%   rV   c                  @    e Zd ZU dZded<   d	dZd Zd Zd Zd
ddZ	y)re   Nztuple[Any, Any, Index] | Nonefilterc                t    | j                   yt        d| j                   d    d| j                   d    d      S )NzFilter: Not Initializedz[Filter : [r   z] -> [r   ])r   r   rH   s    r$   __repr__zFilterBinOp.__repr__  s;    ;;,k$++a.)9A?OqQRRr%   c                    | j                   4| j                   d   | j                  d      | j                   d   f| _         | S )zinvert the filterr   T)invert   )r   generate_filter_oprH   s    r$   r   zFilterBinOp.invert  sC    ;;"A''t'4ADK
 r%   c                    | j                   gS )zreturn the actual filter format)r   rH   s    r$   formatzFilterBinOp.format  s    }r%   c                   | j                   st        d|  d      | j                  | j                        }t	        |      }| j
                  rV| j                  dv rGt        |      | j                  kD  r/| j                         }| j                  |t        |      f| _        | S y | j                  dv r/| j                         }| j                  |t        |      f| _        | S t        d|  d      )Nquery term is not valid [r   ==!=z7passing a filterable condition to a non-table indexer [)rs   
ValueErrorrq   r\   listrv   rX   lenr   r   r[   r   r   r   )r!   r\   values	filter_ops       r$   rg   zFilterBinOp.evaluate"  s    }}8a@AAll488$c ww,&3v;9L9L+L 335	#xxE&MB 77l"//1I88Yf>DK 	 I$qQ r%   c                R    | j                   dk(  r|r| j                   dk(  r|rd S d S )Nr   r   c                &    | j                  |       S r5   isinaxisvalss     r$   <lambda>z0FilterBinOp.generate_filter_op.<locals>.<lambda>D  s    tyy&6 r%   c                $    | j                  |      S r5   r   r   s     r$   r   z0FilterBinOp.generate_filter_op.<locals>.<lambda>F  s    diio r%   )rX   )r!   r   s     r$   r   zFilterBinOp.generate_filter_opB  s'    GGtOF4F6655r%   r   )F)r   r   )
r*   r+   r,   r   r.   r   r   r   rg   r   r^   r%   r$   re   re     s(    ,0F)0S
@6r%   re   c                      e Zd Zd Zd Zy)rf   c                    t        d      )Nz unable to collapse Joint FiltersNotImplementedErrorrH   s    r$   r   zJointFilterBinOp.formatJ  s    !"DEEr%   c                    | S r5   r^   rH   s    r$   rg   zJointFilterBinOp.evaluateM  s    r%   N)r*   r+   r,   r   rg   r^   r%   r$   rf   rf   I  s    Fr%   rf   c                  &    e Zd ZddZd Zd Zd Zy)rc   c                4    t        d| j                   d      S )Nz[Condition : [z]])r   rY   rH   s    r$   r   zConditionBinOp.__repr__R  s    nT^^,<B?@@r%   c                    t        d      )zinvert the conditionz6cannot use an invert condition when passing to numexprr   rH   s    r$   r   zConditionBinOp.invertU  s    
 "D
 	
r%   c                    | j                   S )zreturn the actual ne format)rY   rH   s    r$   r   zConditionBinOp.format^  s    ~~r%   c                   | j                   st        d|  d      | j                  sy | j                  | j                        }|D cg c]  }| j                  |       }}| j                  dv rSt        |      | j                  k  r:|D cg c]  }| j                  |       }}ddj                  |       d| _        | S y | j                  |d         | _        | S c c}w c c}w )Nr   r   r   r   z | r   r   )rs   r   rv   rq   r\   r   rX   r   r   r   joinrY   )r!   r\   r   r   vss        r$   rg   zConditionBinOp.evaluateb  s    }}8a@AA ll488$145A$$$Q'55 77l" 6{d1110671dmmA&77#$UZZ^$4A!6 	 !]]6!95DN! 6 8s   CC#Nr   )r*   r+   r,   r   r   r   rg   r^   r%   r$   rc   rc   Q  s    A
r%   rc   c                      e Zd Zd Zy)rd   c                    d| j                   j                   d| j                   d| j                  j                   d| _        | S )Nr   r   r   )r[   rY   rX   r\   rH   s    r$   rg   zJointConditionBinOp.evaluate  s=    TXX//0$''!DHH<N<N;OqQr%   N)r*   r+   r,   rg   r^   r%   r$   rd   rd     s    r%   rd   c                      e Zd Zd Zy)UnaryOpc                &   | j                   dk7  rt        d      | j                  }|j                  |      }|Xt	        |t
              r|j                  ,t	        |t
              s,t	        |t              r|j                  |j                         S y )N~z$UnaryOp only support invert type ops)
rX   r   operandrk   
issubclassrc   rY   re   r   r   )r!   r?   r   s      r$   rk   zUnaryOp.prune  sz    77c>%&LMM,,--&un-!!-e^45+.*>>##r%   N)r*   r+   r,   rk   r^   r%   r$   r   r     s    r%   r   c                  R     e Zd ZeZeZd	 fdZd Zd Z	d Z
d Zd Zd Zd Z xZS )
PyTablesExprVisitorc                    t         |   |||       | j                  D ]&  }| j                  |   }t	        | d| |ffd	       ( y )Nvisit_c                &    t        t        |fi S r5   )r   rV   )nodebin_opkwargss     r$   r   z.PyTablesExprVisitor.__init__.<locals>.<lambda>  s    GE6,LV,L r%   )r   r    
binary_opsbinary_op_nodes_mapsetattr)r!   r3   engineparserr   r   bin_noder#   s       `  r$   r    zPyTablesExprVisitor.__init__  sR    ff-oo 	F//7H
#$*L	r%   c                   t        |j                  t        j                  t        j                  f      r%t        d| j                  |j                              S t        |j                  t        j                        r@| j                  | j                  |j                        j                   | j                        S t        |j                  t        j                        rt        d      y )Nr   zUnary addition not supported)r6   rX   astNotInvertr   visitr   USub
const_typerL   r3   UAddr   r!   r   r   s      r$   visit_UnaryOpz!PyTablesExprVisitor.visit_UnaryOp  s    dgg453

4<< 899*??DJJt||$<$B$B#BDHHMM*%&DEE +r%   c                L    | j                  |j                        j                  S r5   )r   rL   r   s      r$   visit_IndexzPyTablesExprVisitor.visit_Index  s    zz$**%+++r%   c                    t        j                  t        j                         g|j                  d   |j                  g      }| j                  |      S )Nr   )r   rC   comparators)r   CompareEqtargetsrL   r   )r!   r   r   cmprs       r$   visit_Assignz PyTablesExprVisitor.visit_Assign  s>    {{
atzzl
 zz$r%   c           	        | j                  |j                        }| j                  |j                        }	 |j                  }t	        |t
              r|j                  }	 | j                  ||   | j                        S # t        $ r Y Gw xY w# t        $ r)}t        dt        |       dt        |             |d }~ww xY w)Nzcannot subscript z with )r   rL   sliceAttributeErrorr6   r2   r   r3   r   r   rF   )r!   r   r   rL   slobjerrs         r$   visit_Subscriptz#PyTablesExprVisitor.visit_Subscript  s     

4::&

4::&	KKE eT"KKE	??5<::  		  	#DK=tE{mD	s)   B  !B  	BB	C$B<<Cc                   |j                   }|j                  }t        |j                        }|t        j
                  k(  rE| j                  |      }	 |j                  }	 | j                  t        ||      | j                        S t        d|j                         # t        $ r Y Jw xY w# t        $ r0 t        |t        j                        r|j                  |k(  r|cY S Y _w xY w)NzInvalid Attribute context )attrrL   rR   ctxr   Loadr   r  	term_typerz   r3   r6   Nameidr   r*   )r!   r   r   r  rL   r	  resolveds          r$   visit_Attributez#PyTablesExprVisitor.visit_Attribute  s    yy

488n#((?zz%(H#>>$~~gh&=txxHH 5cll^DEE # 
 " $ eSXX.588t3C#O	$s$   B  %B- 	B*)B*-4C&%C&c                b    t        |t        j                        rt        j                         S |S r5   )r6   r   Inr   )r!   rX   s     r$   translate_Inz PyTablesExprVisitor.translate_In  s     %b#&&1svvx9r9r%   c                T    | j                  |j                        |j                  ||fS r5   )r   rX   )r!   r   rC   rh   s       r$   _rewrite_membership_opz*PyTablesExprVisitor._rewrite_membership_op  s"    zz$''"DGGT588r%   )r(   r)   )r*   r+   r,   r8   r   r2   r  r    r   r   r   r  r  r  r  r/   r0   s   @r$   r   r     s7    JIF, *F2:9r%   r   c                ^    t        | t        t        f      st        |       st	        d      | S )a  
    Validate that the where statement is of the right type.

    The type may either be String, Expr, or list-like of Exprs.

    Parameters
    ----------
    w : String term expression, Expr, or list-like of Exprs.

    Returns
    -------
    where : The original where clause if the check was successful.

    Raises
    ------
    TypeError : An invalid data type was passed in for w (e.g. dict).
    zLwhere must be passed as a string, PyTablesExpr, or list-like of PyTablesExpr)r6   PyTablesExprr7   r   r   )ws    r$   _validate_wherer    s2    $ q<-.,q/+
 	

 Hr%   c                  X    e Zd ZU dZded<   ded<   ded<   	 	 	 d	 	 	 	 	 dd	Zdd
Zd Zy)r  a  
    Hold a pytables-like expression, comprised of possibly multiple 'terms'.

    Parameters
    ----------
    where : string term expression, PyTablesExpr, or list-like of PyTablesExprs
    queryables : a "kinds" map (dict of column name -> kind), or None if column
        is non-indexable
    encoding : an encoding that will encode the query terms

    Returns
    -------
    a PyTablesExpr object

    Examples
    --------
    'index>=date'
    "columns=['A', 'D']"
    'columns=A'
    'columns==A'
    "~(columns=['A','B'])"
    'index>df.index[3] & string="bar"'
    '(index>df.index[3] & index<=df.index[6]) | string="bar"'
    "ts>=Timestamp('2012-02-01')"
    "major_axis>=20130101"
    zPyTablesExprVisitor | None_visitorr   r3   r7   r   Nc                ,   t        |      }|| _        d | _        d | _        d | _        d | _        d }t        |t              r#|j                  j                  }|j                  }nt        |      rt        |      }t        |      D ]<  \  }}t        |t              r|j                  j                  }-t        |      }|||<   > dj                  t        j                   |      D cg c]  }d| d
 c}      }n|}|| _
        t#        |dz   |      | _        |ut        | j                  t$              rZ| j                  j&                  j)                  |       t+        | j                  |dd|      | _        | j-                         | _        y y y c c}w )Nz & r   r   r   )r   pytables)r   r   r   r>   )r  r>   rY   r   termsr  r6   r  r3   r   r   r   r   	enumerater   comflattenr   r7   r   updater   parse)	r!   wherer   r>   scope_levelr   _whereidxr  s	            r$   r    zPyTablesExpr.__init__(  s_     & 
 59
e\*JZZF% KE#E* #Qa.!"J'*A!"E#J# ZZ3;;u3E Fa1QCq FGF F	 qZH!jC&@HH&&z2/%!!!DM DJ 'A! !Gs   &Fc                n    | j                   t        | j                         S t        | j                        S r5   )r  r   r   rH   s    r$   r   zPyTablesExpr.__repr__Z  s*    ::!

++DII&&r%   c                ~   	 | j                   j                  t              | _        	 | j                   j                  t              | _        | j                  | j                  fS # t        $ r"}t        d| j                   d|  d      |d}~ww xY w# t        $ r"}t        d| j                   d|  d      |d}~ww xY w)z2create and return the numexpr condition and filterzcannot process expression [z], [z] is not a valid conditionNz] is not a valid filter)	r  rk   rc   rY   r  r   r   re   r   )r!   r  s     r$   rg   zPyTablesExpr.evaluate_  s    	!ZZ--n=DN	****;7DK ~~t{{**  	-dii[TF C+ + 	  	-dii[TF C( ( 	s.   $A# $B #	B,B		B	B<B77B<)NNr   )r   r'   r$  r&   r(   r)   r   )r*   r+   r,   __doc__r.   r    r   rg   r^   r%   r$   r  r    sS    6 )(	
I
 -10& *0&
 0& 
0&d'
+r%   r  c                       e Zd ZdZddZddZy)r   z<hold a term value the we use to construct a condition/filterc                \    t        |t              sJ |       || _        || _        || _        y r5   )r6   r7   rL   	convertedrx   )r!   rL   r,  rx   s       r$   r    zTermValue.__init__v  s,    $$*d*$
"	r%   c                    | j                   dk(  r'|t        | j                        S d| j                   dS | j                   dk(  rt        | j                        S t        | j                        S )z6quote the string if not encoded else encode and returnr   "r   )rx   r7   r,  rF   )r!   r>   s     r$   r   zTermValue.tostring|  sc    99 #4>>**t~~&a((YY'! ''4>>""r%   N)rx   r7   r(   r)   r   )r*   r+   r,   r)  r    r   r^   r%   r$   r   r   s  s    F
#r%   r   c                     t         t              syt        j                  t        j                  z   dz   }t         fd|D              S )z7loose checking if s is a pytables-acceptable expressionF)=c              3  &   K   | ]  }|v  
 y wr5   r^   ).0rX   r   s     r$   	<genexpr>z#maybe_expression.<locals>.<genexpr>  s     %2rQw%s   )r6   r7   r   r   	unary_opsany)r   r   s   ` r$   maybe_expressionr6    s?    a

(
(+>+H+H
H6
QC %%%%r%   r   )<r)  
__future__r   r   	functoolsr   typingr   r   numpyrn   pandas._libs.tslibsr   r   pandas._typingr	   pandas.errorsr
   pandas.core.dtypes.commonr   pandas.core.commoncorecommonr  pandas.core.computationr   r   r   _scopepandas.core.computation.commonr   pandas.core.computation.exprr   pandas.core.computation.opsr   pandas.core.constructionr   pandas.core.indexes.baser   pandas.io.formats.printingr   r   pandas.compat.chainmapr   Scoper   r2   r8   rV   re   rf   rc   rd   r   r   r  Exprr  r   r6  r^   r%   r$   <module>rM     s   7 " 
 
   0 2     
 : 8 / 2 *
 3+FLL + 388 Bt dCII dN:6% :6z{ +U +\. ckk (Q9/ Q9h6h+499 h+V# #,&r%   