a
    Fb                     @   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                   @   s   e Zd ZdS )__BuiltinUndefinedN__name__
__module____qualname__ r	   r	   8lib/python3.9/site-packages/IPython/core/builtin_trap.pyr          r   c                   @   s   e Zd ZdS )__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)Z
allow_noneNc                    s<   t t| j|d d i | _d| _|| _tt| jjd| _d S )N)shellZ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__'   s    
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__.   s    
zBuiltinTrap.__exit__c                 C   sJ   t j}||t}|tu r4|turF|| j|< ||= n|| j|< |||< dS )z$Add a builtin and save the original.N)builtin_mod__dict__getBuiltinUndefinedr   r   )r   keyr    Zbdictorigr	   r	   r
   add_builtin5   s    

zBuiltinTrap.add_builtinc                 C   s    |t u rtj|= n
|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   r+   clearZ_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#   Ztraitlets.config.configurabler   Z	traitletsr   objectr   r&   r   r   r   r	   r	   r	   r
   <module>   s   