U
    O5[                     @   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   9/usr/lib/python3/dist-packages/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   Z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   itemsZtmpZ	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   r>   r   r   r   __ne__f   s    zOrderedDict.__ne__)T)N)r1   
__module____qualname__r   r	   r   r   r    r!   r%   r.   r0   r   
setdefaultr
   r   valuesr-   ZiterkeysZ
itervaluesZ	iteritemsr2   r+   classmethodr6   r=   r@   r   r   r   r   r      s.   	

r   N)__doc__UserDictr   r   r   r   r   r   r   <module>   s   