U
    Æ½„b�  ã                   @   s&   d Z ddlmZ G dd„ deeƒZdS )zsDrop-in replacement for collections.OrderedDict by Raymond Hettinger

http://code.activestate.com/recipes/576693/

é    )Ú	DictMixinc                   @   s´   e Zd Z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ejZejZejZejZejZejZejZejZdd„ Zdd„ Zed dd„ƒZdd„ Zdd„ ZdS )!ÚOrderedDictc                 O   sT   t |ƒdkrtdt |ƒ ƒ‚z
| j W n tk
rB   |  ¡  Y nX | j||Ž d S )Né   z$expected at most 1 arguments, got %d)ÚlenÚ	TypeErrorÚ_OrderedDict__endÚAttributeErrorÚclearÚupdate)ÚselfÚargsÚkwds© r   ú;/tmp/pip-unpacked-wheel-9yxrzpkm/simplejson/ordered_dict.pyÚ__init__
   s    
zOrderedDict.__init__c                 C   s,   g  | _ }|d ||g7 }i | _t | ¡ d S ©N)r   Ú_OrderedDict__mapÚdictr	   )r   Úendr   r   r   r	      s    
zOrderedDict.clearc                 C   sH   || kr6| j }|d }|||g |d<  |d< | j|< t | ||¡ d S )Nr   é   )r   r   r   Ú__setitem__)r   ÚkeyÚvaluer   Úcurrr   r   r   r      s
     zOrderedDict.__setitem__c                 C   s2   t  | |¡ | j |¡\}}}||d< ||d< d S )Nr   r   )r   Ú__delitem__r   Úpop)r   r   ÚprevÚnextr   r   r   r       s    zOrderedDict.__delitem__c                 c   s.   | j }|d }||k	r*|d V  |d }qd S )Nr   r   ©r   ©r   r   r   r   r   r   Ú__iter__&   s
    
zOrderedDict.__iter__c                 c   s.   | j }|d }||k	r*|d V  |d }qd S )Nr   r   r   r   r   r   r   Ú__reversed__-   s
    
zOrderedDict.__reversed__Tc                 C   s:   | st dƒ‚|rt| ƒ ¡ n
t| ƒ ¡ }|  |¡}||fS )Nzdictionary is empty)ÚKeyErrorÚreversedr   Úiterr   )r   Úlastr   r   r   r   r   Úpopitem4   s
    
zOrderedDict.popitemc                    s\   ‡ fdd„ˆ D ƒ}ˆ j ˆ jf}ˆ ` ˆ `tˆ ƒ ¡ }|\ˆ _ ˆ _|rPˆ j|f|fS ˆ j|ffS )Nc                    s   g | ]}|ˆ | g‘qS r   r   )Ú.0Úk©r   r   r   Ú
<listcomp><   s     z*OrderedDict.__reduce__.<locals>.<listcomp>)r   r   ÚvarsÚcopyÚ	__class__)r   ÚitemsÚtmpÚ	inst_dictr   r)   r   Ú
__reduce__;   s    zOrderedDict.__reduce__c                 C   s   t | ƒS r   )Úlistr)   r   r   r   ÚkeysE   s    zOrderedDict.keysc                 C   s&   | sd| j jf S d| j j|  ¡ f S )Nz%s()z%s(%r))r-   Ú__name__r.   r)   r   r   r   Ú__repr__Q   s    zOrderedDict.__repr__c                 C   s
   |   | ¡S r   )r-   r)   r   r   r   r,   V   s    zOrderedDict.copyNc                 C   s   | ƒ }|D ]}|||< q
|S r   r   )ÚclsÚiterabler   Údr   r   r   r   ÚfromkeysY   s    
zOrderedDict.fromkeysc                 C   sF   t |tƒr:t| ƒt|ƒko8tdd„ t|  ¡ | ¡ ƒD ƒƒS t | |¡S )Nc                 s   s   | ]\}}||kV  qd S r   r   )r'   ÚpÚqr   r   r   Ú	<genexpr>c   s     z%OrderedDict.__eq__.<locals>.<genexpr>)Ú
isinstancer   r   ÚallÚzipr.   r   Ú__eq__©r   Úotherr   r   r   r@   `   s
    
ÿzOrderedDict.__eq__c                 C   s
   | |k S r   r   rA   r   r   r   Ú__ne__f   s    zOrderedDict.__ne__)T)N)r4   Ú
__module__Ú__qualname__r   r	   r   r   r    r!   r&   r1   r3   r   Ú
setdefaultr
   r   Úvaluesr.   ÚiterkeysÚ
itervaluesÚ	iteritemsr5   r,   Úclassmethodr9   r@   rC   r   r   r   r   r      s.   	

r   N)Ú__doc__ÚUserDictr   r   r   r   r   r   r   Ú<module>   s   