a
    Of'                  	   @  s  d Z ddlmZ ddlmZ ddlZddlZddlmZ ddl	Z	ddl
Z
ddlZddlZddlmZ ddlZddlmZ ddlmZ ed	Zed
ZG dd deeef ZddddddZddddZddddZeejddeeejejdZddddZG dd dZ dS ) z
Module for scope operations
    )annotations)ChainMapN)StringIO)TypeVar)	Timestamp)UndefinedVariableError_KT_VTc                   @  s2   e Zd ZdZddddddZdddd	d
ZdS )DeepChainMapz~
    Variant of ChainMap that allows direct updates to inner scopes.

    Only works when all passed mapping are mutable.
    r   r	   None)keyvaluereturnc                 C  s4   | j D ]}||v r|||<  d S q|| j d |< d S )Nr   )maps)selfr   r   mapping r   V/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/core/computation/scope.py__setitem__!   s
    
zDeepChainMap.__setitem__)r   r   c                 C  s,   | j D ]}||v r||=  dS qt|dS )z\
        Raises
        ------
        KeyError
            If `key` doesn't exist.
        N)r   KeyError)r   r   r   r   r   r   __delitem__(   s
    
zDeepChainMap.__delitem__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r
      s   r
   r   intScopelevelr   c                 C  s   t | d ||||dS )z.Ensure that we are grabbing the correct scope.   )global_dict
local_dict	resolverstarget)r   )r   r    r!   r"   r#   r   r   r   ensure_scope6   s    r$   strr   c                 C  s,   zt | }W n ty"   | }Y n0 t|S )z
    Replace a number with its hexadecimal representation. Used to tag
    temporary variables with their calling scope's id.
    )ord	TypeErrorhex)xZhexinr   r   r   	_replacerC   s
    
r+   c                 C  s$   t dt| }ddd |D S )z,Return the padded hexadecimal id of ``obj``.z@P c                 S  s   g | ]}t |qS r   )r+   ).0r*   r   r   r   
<listcomp>W       z_raw_hex_id.<locals>.<listcomp>)structpackidjoin)objpackedr   r   r   _raw_hex_idS   s    r6   TF)r   datetimeTrueFalselisttupleinfZInfc                 C  s   t  }tj| |d | S )z
    Return a prettier version of obj.

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

    Returns
    -------
    str
        Pretty print object repr
    )stream)r   pprintgetvalue)r4   sior   r   r   _get_pretty_stringf   s    rA   c                   @  s   e Zd ZU dZg dZded< ded< ded< ded	< d)dddddZddddZeddddZ	dddddZ
d*ddddddZddddd Zdddd!d"Zddd#d$Zeddd%d&Zeddd'd(Zd
S )+r   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"   tempsr   r   r
   rB   r"   dictrC   Nr   r   r   c           	      C  s   |d | _ tt | _|| _t|trT| j|j |jd urH|j| _| 	|j  t
| j }z`| j|d urt|n|j }t|| _t|ts| j|d ur|n|j }t|| _W ~n~0 t|tr|t|jj7 }t| | _i | _d S )Nr   )r   r
   DEFAULT_GLOBALScopyrB   r#   
isinstancer   update_updatesys	_getframe	new_child	f_globalsf_localsr;   r"   r   rC   )	r   r   r    r!   r"   r#   frameZscope_globalZscope_localr   r   r   __init__   s0    






zScope.__init__r%   r&   c                 C  s@   t t| j }t t| j }t| j d| d| dS )Nz(scope=z, resolvers=))rA   r:   rB   keysr"   typer   )r   Z
scope_keysZres_keysr   r   r   __repr__   s    zScope.__repr__boolc                 C  s   t t| jS )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
        )rU   lenr"   r   r   r   r   has_resolvers   s    zScope.has_resolvers)r   is_localc                 C  s   z<|r| j | W S | jr$| j| W S |s.| jr2J | j | W S  ty   z| j| W  Y S  ty } zt|||W Y d}~n
d}~0 0 Y n0 dS )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)rB   rX   r"   r   rC   r   )r   r   rY   errr   r   r   resolve   s    zScope.resolve)old_keynew_keyr   c                 C  sP   | j r| jj| jj }n| jj}|| j |D ]}||v r0|||<  dS q0dS )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)rX   r"   r   rB   appendrC   )r   r\   r]   	new_valuer   r   r   r   r   swapkey   s    zScope.swapkeyz	list[str])scopesr   c                 C  sX   t ||}|D ]B\}\}}}}}}z(t|d| }t| j|| _W ~q~0 qdS )a  
        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')
        Zf_N)	itertoolsproductgetattrr
   rB   rL   )r   stackra   	variablesrB   rO   _dr   r   r   	_get_vars  s    zScope._get_varsc              	   C  sL   |d }t  }z(| j|d| dgd W |dd= ~n|dd= ~0 dS )z
        Update the current scope by going back `level` levels.

        Parameters
        ----------
        level : int
        r   Nlocals)ra   )inspectre   ri   )r   r   slre   r   r   r   rI   &  s
    zScope._updatec                 C  sJ   t |j d| j dt|  }|| jvs.J || j|< || jv sFJ |S )a#  
        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.
        rg   )rS   r   ntempsr6   rC   )r   r   namer   r   r   add_tmp:  s
     
zScope.add_tmpc                 C  s
   t | jS )z/The number of temporary variables in this scope)rV   rC   rW   r   r   r   rm   R  s    zScope.ntempsc                 C  s    | j g| jj | jj }t| S )z
        Return the full scope for use with passing to engines transparently
        as a mapping.

        Returns
        -------
        vars : DeepChainMap
            All variables in this scope.
        )rC   r"   r   rB   r
   )r   r   r   r   r   
full_scopeW  s    zScope.full_scope)NNr   N)N)r   r   r   r   	__slots____annotations__rP   rT   propertyrX   r[   r`   ri   rI   ro   rm   rp   r   r   r   r   r   y   s(   
 (')NNr   N)!r   
__future__r   collectionsr   r7   rk   ior   rb   r>   r0   rJ   typingr   numpynpZpandas._libs.tslibsr   Zpandas.errorsr   r   r	   r
   r$   r+   r6   r:   r;   r<   rE   rA   r   r   r   r   r   <module>   s>    