o
    iv                     @   s   d dl mZ dd ZdadZG dd deZdd Zee_ee_	zej
 W n ey5   d	d
 Zee_
Y nw ee_ee_ee_ee_ee_ee_ee_ejfZdS )    )deepcopyc                 O      t d| jj d)zK
    Function for not implemented method since the object is immutable
    'z' object is read-only)AttributeError	__class____name__self_args_kwargs r   M/home/ubuntu/.local/lib/python3.10/site-packages/frozendict/_frozendict_py.py	immutable   s   r   N
frozendictc                       s   e Zd ZdZdZedd Zdd Zdd Zd	d
 Z	 fddZ
dd Zdd Zdd Zdd Zdd Zd)ddZdd Zdd Zd*dd Zd*d!d"Zd*d#d$Zd%d& Zd'd( Z  ZS )+r   z
    A simple immutable dictionary.

    The API is the same as `dict`, without methods that can change the
    immutability. In addition, it supports __hash__().
    )_hashc                 O   s   | t j|i |S )z/
        Identical to dict.fromkeys().
        )dictfromkeys)clsargskwargsr   r   r   r      s   zfrozendict.fromkeysc                 O   s   | }t |}d}d }t|dkr#|s#|d }|jtkr#|tkr#|}d}|rZtj|g|R i |}tj|g|R i | |jtkrQt|sQtd u rM|ant}d}|rZt	|dd |S )NT   r   Fr   )
boollenr   r   r   __new____init___empty_frozendictobject__setattr__)$e4b37cdf_d78a_4632_bade_6f0579d8efacr   r   r   
has_kwargscontinue_creationr	   itr   r   r   r   (   s(   zfrozendict.__new__c                 O   s   d S Nr   r	   r   r   r   r   r   r   P   s   zfrozendict.__init__c                 O   s:   | j dkr
| j }|S t|  }t|}t| d| |S )zg
        Calculates the hash if all values are hashable, otherwise
        raises a TypeError.
        r   r   )r   	frozensetitemshashr   r   )r	   r   r   r   fsr   r   r   __hash__S   s   
zfrozendict.__hash__c                    sH   t  j|i |}| j}|tkrt d|j }n|j}| d| dS )z/
        Identical to dict.__repr__().
        .())super__repr__r   r   _module_namer   )r	   r   r   bodyklassnamer   r   r   r.   c   s   zfrozendict.__repr__c                 C   s   | j }|tkr	| S || S )zA
        Return the object itself, as it's an immutable.
        )r   r   )r	   r1   r   r   r   copyr   s   zfrozendict.copyc                 O   s   |   S )z
        See copy().
        )r4   r$   r   r   r   __copy__~   s   zfrozendict.__copy__c                 O   sV   | j }|tk}|rzt|  W n ty   d}Y nw |r!|  S tt| }||S )zc
        As for tuples, if hashable, see copy(); otherwise, it returns a
        deepcopy.
        F)r   r   r'   	TypeErrorr4   r   r   )r	   memor   r   r1   return_copytmpr   r   r   __deepcopy__   s   zfrozendict.__deepcopy__c                 O   s   | j t| ffS )z'
        Support for `pickle`.
        )r   r   r$   r   r   r   
__reduce__   s   zfrozendict.__reduce__c                 C   s   t | }|||< | |S r#   r   r   )r	   keyvalnew_selfr   r   r   set   s   
zfrozendict.setNc                 C   s&   || v r| S t | }|||< | |S r#   r<   )r	   r=   defaultr?   r   r   r   
setdefault   s
   
zfrozendict.setdefaultc                 C   s$   t | }||= |r| |S |  S r#   r<   )r	   r=   r?   r   r   r   delete   s
   
zfrozendict.deletec              	   C   sH   z|| W S  t y#   t|d }| jj}t | d| d| d w )Nr   z index z out of range )
IndexErrorr   r   r   )r	   
collectionindexmaxindexr2   r   r   r   _get_by_index   s   
zfrozendict._get_by_indexr   c                 C      t |  }| ||S r#   )tuplekeysrH   r	   rF   rE   r   r   r   r=         zfrozendict.keyc                 C   rI   r#   )rJ   valuesrH   rL   r   r   r   value   rM   zfrozendict.valuec                 C   rI   r#   )rJ   r&   rH   rL   r   r   r   item   rM   zfrozendict.itemc                 O   r   )Nr   z(' object doesn't support item assignmentr6   r   r   )r	   r=   r>   r   r   r   r   r   __setitem__      zfrozendict.__setitem__c                 O   r   )Nr   z&' object doesn't support item deletionrQ   )r	   r=   r   r   r   r   r   __delitem__   rS   zfrozendict.__delitem__r#   )r   )r   
__module____qualname____doc__	__slots__classmethodr   r   r   r)   r.   r4   r5   r:   r;   r@   rB   rC   rH   r=   rO   rP   rR   rT   __classcell__r   r   r3   r   r      s,    
(

	



c                 O   s"   i }| |  | | | |S r#   )updater   )r	   otherr
   r   resr   r   r   frozendict_or   s   


r^   c                 O   s   t t| S r#   )reversedrJ   r   r   r   r   frozendict_reversed   s   r`   )r4   r   r   r   r/   r   r   r^   __or____ior____reversed__r   r`   clearpoppopitemr[   __delattr__r   rU   r   __all__r   r   r   r   <module>   s.    
 O

