o
    nګe                     @   s>   d Z ddlmZ ddlZddlmZ dgZG dd deZdS )z9
A subclass of MutableAttr that has defaultdict support.
    )MappingN)MutableAttrAttrDefaultc                   @   s~   e Zd ZdZddedfddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zedd ZdS )r   zC
    An implementation of MutableAttr with defaultdict support
    NFc                 C   s`   |d u ri }n	t |tst|}| d| | d| | d| | d| | dd d S )N_default_factory_mapping_sequence_type	_pass_key_allow_invalid_attributesF)
isinstancer   dict_setattr)selfdefault_factoryitemssequence_typepass_key r   g/vol/project/2023/60021/g236002117/DeepSeek-Coder/venv/lib/python3.10/site-packages/attrdict/default.py__init__   s   
zAttrDefault.__init__c                 C   s   | j | j| jfS )z>
        The configuration for a AttrDefault instance
        )r   r   r   r   r   r   r   _configuration   s   zAttrDefault._configurationc                 C   s0   || j v r
| j | S | jdur| |S t|)z
        Access a value associated with a key.

        Note: values returned will not be wrapped, even if recursive
        is True.
        N)r   r   __missing__KeyErrorr   keyr   r   r   __getitem__%   s
   



zAttrDefault.__getitem__c                 C   s   || j |< dS )z7
        Add a key-value pair to the instance.
        Nr   r   r   valuer   r   r   __setitem__3   s   zAttrDefault.__setitem__c                 C   s   | j |= dS )z)
        Delete a key-value pair
        Nr   r   r   r   r   __delitem__9   s   zAttrDefault.__delitem__c                 C   
   t | jS )z2
        Check the length of the mapping.
        )lenr   r   r   r   r   __len__?      
zAttrDefault.__len__c                 C   r!   )z,
        Iterated through the keys.
        )iterr   r   r   r   r   __iter__E   r$   zAttrDefault.__iter__c                 C   s0   | j r| | | |< }|S |   | |< }|S )z(
        Add a missing element.
        )r   r   r   r   r   r   r   K   s
   zAttrDefault.__missing__c                 C   s(   t djt| jt| jt| jdS )z?
        Return a string representation of the object.
        z5AttrDefault({default_factory}, {pass_key}, {mapping}))r   r   mapping)sixuformatreprr   r   r   r   r   r   r   __repr__V   s   zAttrDefault.__repr__c                 C   s   | j | j| j| j| jfS )z'
        Serialize the object.
        )r   r   r   r   r	   r   r   r   r   __getstate__b   s   zAttrDefault.__getstate__c                 C   sN   |\}}}}}|  d| |  d| |  d| |  d| |  d| dS )z)
        Deserialize the object.
        r   r   r   r   r	   N)r   )r   stater   r'   r   r   allow_invalid_attributesr   r   r   __setstate__n   s   
zAttrDefault.__setstate__c                 C   s   |\}}}| ||||dS )z-
        A standardized constructor.
        )r   r   r   )clsr'   configurationr   r   r   r   r   r   _constructor{   s   
zAttrDefault._constructor)__name__
__module____qualname____doc__tupler   r   r   r   r    r#   r&   r   r,   r-   r0   classmethodr3   r   r   r   r   r      s"    
)r7   collectionsr   r(   attrdict.mixinsr   __all__r   r   r   r   r   <module>   s    