
    Mh'              	      b   S r SSKJr  SSKJr  SSKrSSKrSSKJr  SSK	r	SSK
r
SSKrSSKrSSKJr  SSKrSSKJr  SSKJr  \" S	5      r\" S
5      r " S S\\\4   5      r S   SS jjrSS jrSS jr\\R
                  SS\\\R:                  \R:                  S.rSS jr " S S5      r g)z
Module for scope operations
    )annotations)ChainMapN)StringIO)TypeVar)	Timestamp)UndefinedVariableError_KT_VTc                  ,    \ rS rSrSrSS jrSS jrSrg)	DeepChainMap   zr
Variant of ChainMap that allows direct updates to inner scopes.

Only works when all passed mapping are mutable.
c                b    U R                    H  nX;   d  M
  X#U'     g    X R                   S   U'   g )Nr   )maps)selfkeyvaluemappings       O/var/www/html/env/lib/python3.13/site-packages/pandas/core/computation/scope.py__setitem__DeepChainMap.__setitem__!   s1    yyG~$ ! "		!S    c                P    U R                    H  nX;   d  M
  X!	   g   [        U5      e)z4
Raises
------
KeyError
    If `key` doesn't exist.
N)r   KeyError)r   r   r   s      r   __delitem__DeepChainMap.__delitem__(   s+     yyG~L ! smr    N)r   r	   r   r
   returnNone)r   r	   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes__r   r   r   r   r      s    "r   r   Scopec                "    [        U S-   UUUUS9$ )z.Ensure that we are grabbing the correct scope.   )global_dict
local_dict	resolverstarget)r%   )levelr(   r)   r*   r+   s        r   ensure_scoper-   6   s$     	 r   c                T     [        U 5      n[        U5      $ ! [         a    U n Nf = f)zv
Replace a number with its hexadecimal representation. Used to tag
temporary variables with their calling scope's id.
)ord	TypeErrorhex)xhexins     r   	_replacerr4   C   s2    A
 u:	  s    ''c                    [         R                  " S[        U 5      5      nSR                  U Vs/ s H  n[	        U5      PM     sn5      $ s  snf )z,Return the padded hexadecimal id of ``obj``.z@P )structpackidjoinr4   )objpackedr2   s      r   _raw_hex_idr=   S   s=     [[r#w'F77&1&QIaL&1221s   ATF)r   datetimeTrueFalselisttupleinfInfc                ^    [        5       n[        R                  " XS9  UR                  5       $ )z
Return a prettier version of obj.

Parameters
----------
obj : object
    Object to pretty print

Returns
-------
str
    Pretty print object repr
)stream)r   pprintgetvalue)r;   sios     r   _get_pretty_stringrJ   f   s#     *C
MM#"<<>r   c                      \ rS rSr% Sr/ SQrS\S'   S\S'   S\S'   S	\S
'    S   SS jjrSS jr\	SS j5       r
SS jrSSS jjrSS jrSS jrSS jr\	SS j5       r\	S S j5       rSrg)!r%   y   a  
Object to hold scope, with a few bells to deal with some custom syntax
and contexts added by pandas.

Parameters
----------
level : int
global_dict : dict or None, optional, default None
local_dict : dict or Scope or None, optional, default None
resolvers : list-like or None, optional, default None
target : object

Attributes
----------
level : int
scope : DeepChainMap
target : object
temps : dict
)r,   scoper+   r*   tempsintr,   r   rM   r*   dictrN   Nc                ~   US-   U l         [        [        R                  5       5      U l        XPl        [        U[        5      (       a^  U R                  R                  UR                  5        UR
                  b  UR
                  U l        U R                  UR                   5        [        R                  " U R                   5      n U R                  R                  Ub  UOUR                  R                  5       5      n[        U5      U l        [        U[        5      (       dH  U R                  R                  Ub  UOUR                  R                  5       5      n[        U5      U l        A[        U[        5      (       a"  U[        UR                   R"                  5      -  n[        U6 U l        0 U l        g ! Af = f)Nr'   )r,   r   DEFAULT_GLOBALScopyrM   r+   
isinstancer%   update_updatesys	_getframe	new_child	f_globalsf_localsrB   r*   r   rN   )	r   r,   r(   r)   r*   r+   framescope_globalscope_locals	            r   __init__Scope.__init__   sZ    QY
 "/"6"6"89
j%((JJj../  ,(//LL))*djj)	  ::// + 7U__RRTL &l3DJj%00"jj22#-#9Zu~~SSU *+6
 j%((z338899I%y1
 s   B%F9 9F<c                    [        [        U R                  R                  5       5      5      n[        [        U R                  R                  5       5      5      n[        U 5      R                   SU SU S3$ )Nz(scope=z, resolvers=))rJ   rA   rM   keysr*   typer   )r   
scope_keysres_keyss      r   __repr__Scope.__repr__   s\    'TZZ__->(?@
%d4>>+>+>+@&ABt*%%&gj\hZqQQr   c                >    [        [        U R                  5      5      $ )z
Return whether we have any extra scope.

For example, DataFrames pass Their columns as resolvers during calls to
``DataFrame.eval()`` and ``DataFrame.query()``.

Returns
-------
hr : bool
)boollenr*   r   s    r   has_resolversScope.has_resolvers   s     C'((r   c                >    U(       a  U R                   U   $ U R                  (       a  U R                  U   $ U(       d  U R                  (       a   eU R                   U   $ ! [         a1     U R                  U   s $ ! [         a  n[        X5      UeSnAff = ff = f)a  
Resolve a variable name in a possibly local context.

Parameters
----------
key : str
    A variable name
is_local : bool
    Flag indicating whether the variable is local or not (prefixed with
    the '@' symbol)

Returns
-------
value : object
    The value of a particular variable
N)rM   rm   r*   r   rN   r   )r   r   is_localerrs       r   resolveScope.resolve   s    "	Ezz#& !!~~c**  (:(:::::c?" 	EE zz#& E,S;DE	Es9   A! A! (A! !
B,A=:B=
BBBBc                   U R                   (       a.  U R                  R                  U R                  R                  -   nOU R                  R                  nUR	                  U R
                  5        U H  nX;   d  M
  X5U'     g   g)a  
Replace a variable name, with a potentially new value.

Parameters
----------
old_key : str
    Current variable name to replace
new_key : str
    New variable name to replace `old_key` with
new_value : object
    Value to be replaced along with the possible renaming
N)rm   r*   r   rM   appendrN   )r   old_keynew_key	new_valuer   r   s         r   swapkeyScope.swapkey   sa     >>&&8D::??DDJJG!#,  r   c                    [         R                  " X!5      nU HG  u  nu  n        n [        USU 35      n[        U R                  R                  U5      5      U l        AMI     g! Af = f)aA  
Get specifically scoped variables from a list of stack frames.

Parameters
----------
stack : list
    A list of stack frames as returned by ``inspect.stack()``
scopes : sequence of strings
    A sequence containing valid stack frame attribute names that
    evaluate to a dictionary. For example, ('locals', 'globals')
f_N)	itertoolsproductgetattrr   rM   rY   )r   stackscopes	variablesrM   r\   _ds           r   	_get_varsScope._get_vars  sn     %%f4	-6)E)E1aAqERw<0)$***>*>q*AB

  .7 s   8A%%A(c                    US-   n[         R                  " 5       n U R                  USU S/S9  USS2	 Ag! USS2	 Af = f)z[
Update the current scope by going back `level` levels.

Parameters
----------
level : int
r'   Nlocals)r   )inspectr   r   )r   r,   slr   s       r   rV   Scope._update&  sJ     QY
 	 NN5":xjN9a%a%s   7 ?c                    [        U5      R                   SU R                   S[        U 5       3nX R                  ;  d   eXR                  U'   X R                  ;   d   eU$ )z
Add a temporary variable to the scope.

Parameters
----------
value : object
    An arbitrary object to be assigned to a temporary variable.

Returns
-------
str
    The name of the temporary variable created.
r   )rd   r   ntempsr=   rN   )r   r   names      r   add_tmpScope.add_tmp:  sd     u+&&'qQ{47H6IJ ::%%% 

4zz!!! r   c                ,    [        U R                  5      $ )z/The number of temporary variables in this scope)rk   rN   rl   s    r   r   Scope.ntempsR  s     4::r   c                    U R                   /U R                  R                  -   U R                  R                  -   n[	        U6 $ )z
Return the full scope for use with passing to engines transparently
as a mapping.

Returns
-------
vars : DeepChainMap
    All variables in this scope.
)rN   r*   r   rM   r   )r   r   s     r   
full_scopeScope.full_scopeW  s6     

|dnn111DJJOOCT""r   )r,   r*   rM   r+   rN   NNr   N)r,   rO   r   r   r   str)r   rj   )r   r   rp   rj   )N)rv   r   rw   r   r   r   )r   z	list[str]r   r   )r   rO   )r   r   )r   r    r!   r"   r#   	__slots____annotations__r_   rg   propertyrm   rr   ry   r   rV   r   r   r   r$   r   r   r   r%   r%   y   s    ( CIJK SW&&	&PR
 ) )%EN2. (0   # #r   r   )r,   rO   r   r%   r   )!r#   
__future__r   collectionsr   r>   r   ior   r}   rG   r7   rW   typingr   numpynppandas._libs.tslibsr   pandas.errorsr   r	   r
   r   r-   r4   r=   rA   rB   rC   rR   rJ   r%   r   r   r   <module>r      s    #         
   ) 0enen8CH% : IM



 3 !!6666	&j# j#r   