o
    ˷e                     @   sd   d Z ddlZddlmZ ddlmZ G dd deZe Z	G dd deZ
e
 ZG d	d
 d
eZdS )zF
A context manager for managing things injected into :mod:`builtins`.
    N)Configurable)Instancec                   @      e Zd ZdS )__BuiltinUndefinedN__name__
__module____qualname__ r
   r
   P/var/www/ideatree/venv/lib/python3.10/site-packages/IPython/core/builtin_trap.pyr          r   c                   @   r   )__HideBuiltinNr   r
   r
   r
   r   r      r   r   c                       sZ   e Zd ZedddZd fdd	Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )BuiltinTrapz1IPython.core.interactiveshell.InteractiveShellABCT)
allow_noneNc                    s<   t t| j|d d i | _d| _|| _tt| jjd| _d S )N)shellconfigr   )exitquitget_ipython)	superr   __init___orig_builtins_nested_levelr   HideBuiltinr   auto_builtins)selfr   	__class__r
   r   r      s   zBuiltinTrap.__init__c                 C   s$   | j dkr	|   |  j d7  _ | S )Nr      )r   activate)r   r
   r
   r   	__enter__'      
zBuiltinTrap.__enter__c                 C   s$   | j dkr	|   |  j d8  _ dS )Nr   F)r   
deactivate)r   typevalue	tracebackr
   r
   r   __exit__.   r!   zBuiltinTrap.__exit__c                 C   sP   t j}||t}|tu r|tur|| j|< ||= dS dS || j|< |||< dS )z$Add a builtin and save the original.N)builtin_mod__dict__getBuiltinUndefinedr   r   )r   keyr$   bdictorigr
   r
   r   add_builtin5   s   


zBuiltinTrap.add_builtinc                 C   s"   |t u r
tj|= dS |tj|< dS )z0Remove an added builtin and re-set the original.N)r*   r'   r(   )r   r+   r-   r
   r
   r   remove_builtinA   s   zBuiltinTrap.remove_builtinc                 C   s(   | j }| j D ]	\}}||| qdS )z6Store ipython references in the __builtin__ namespace.N)r.   r   items)r   r.   namefuncr
   r
   r   r   H   s   zBuiltinTrap.activatec                 C   s8   | j }| j D ]	\}}||| q| j  d| _dS )z~Remove any builtins which might have been added by add_builtins, or
        restore overwritten ones to their previous values.FN)r/   r   r0   clear_builtins_added)r   r/   r+   valr
   r
   r   r"   O   s
   

zBuiltinTrap.deactivate)N)r   r   r	   r   r   r   r    r&   r.   r/   r   r"   __classcell__r
   r
   r   r   r      s    r   )__doc__builtinsr'   traitlets.config.configurabler   	traitletsr   objectr   r*   r   r   r   r
   r
   r
   r   <module>   s    