U
    ½mœdÒ#  ã                   @   sp   zd dl mZ W n ek
r,   dd„ ZY nX zd dlmZmZmZ W n ek
rZ   Y nX G dd„ deƒZ	dS )é    )Ú	get_identc                   C   s   dS )Nz<no get_ident>© r   r   r   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/patsy/compat_ordereddict.pyÚ
_get_ident   s    r   )ÚKeysViewÚ
ValuesViewÚ	ItemsViewc                   @   s   e Zd ZdZdd„ Zejfdd„Zejfdd„Zdd	„ Zd
d„ Z	dd„ Z
d6dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeZeƒ Zefdd „Zd7d"d#„Zi fd$d%„Zd&d'„ Zd(d)„ Zed8d*d+„ƒZd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z d4d5„ Z!d!S )9ÚOrderedDictz)Dictionary that remembers insertion orderc                 O   sn   t |ƒdkrtdt |ƒ ƒ‚z
| j W n6 tk
r\   g  | _}||dg|dd…< i | _Y nX | j||Ž dS )zÅInitialize an ordered dictionary.  Signature is the same as for
        regular dictionaries, but keyword arguments are not recommended
        because their insertion order is arbitrary.

        é   z$expected at most 1 arguments, got %dN)ÚlenÚ	TypeErrorÚ_OrderedDict__rootÚAttributeErrorÚ_OrderedDict__mapÚ_OrderedDict__update)ÚselfÚargsÚkwdsÚrootr   r   r   Ú__init__#   s    

zOrderedDict.__init__c                 C   sF   || kr6| j }|d }|||g |d<  |d< | j|< || ||ƒ dS )z!od.__setitem__(i, y) <==> od[i]=yr   r
   N)r   r   )r   ÚkeyÚvalueZdict_setitemr   Úlastr   r   r   Ú__setitem__3   s
     zOrderedDict.__setitem__c                 C   s0   || |ƒ | j  |¡\}}}||d< ||d< dS )z od.__delitem__(y) <==> del od[y]r
   r   N)r   Úpop)r   r   Zdict_delitemÚ	link_prevÚ	link_nextr   r   r   Ú__delitem__=   s    
zOrderedDict.__delitem__c                 c   s.   | j }|d }||k	r*|d V  |d }qdS )zod.__iter__() <==> iter(od)r
   é   N©r   ©r   r   Úcurrr   r   r   Ú__iter__F   s
    
zOrderedDict.__iter__c                 c   s.   | j }|d }||k	r*|d V  |d }qdS )z#od.__reversed__() <==> reversed(od)r   r   Nr   r    r   r   r   Ú__reversed__N   s
    
zOrderedDict.__reversed__c                 C   sd   z@| j  ¡ D ]}|dd…= q| j}||dg|dd…< | j  ¡  W n tk
rT   Y nX t | ¡ dS )z.od.clear() -> None.  Remove all items from od.N)r   Ú
itervaluesr   Úclearr   Údict)r   Únoder   r   r   r   r%   V   s    zOrderedDict.clearTc                 C   s|   | st dƒ‚| j}|r8|d }|d }||d< ||d< n |d }|d }||d< ||d< |d }| j|= t | |¡}||fS )z™od.popitem() -> (k, v), return and remove a (key, value) pair.
        Pairs are returned in LIFO order if last is true or FIFO order if false.

        zdictionary is emptyr   r
   r   )ÚKeyErrorr   r   r&   r   )r   r   r   Úlinkr   r   r   r   r   r   r   Úpopitemb   s     
zOrderedDict.popitemc                 C   s   t | ƒS )zod.keys() -> list of keys in od)Úlist©r   r   r   r   Úkeys{   s    zOrderedDict.keysc                    s   ‡ fdd„ˆ D ƒS )z#od.values() -> list of values in odc                    s   g | ]}ˆ | ‘qS r   r   ©Ú.0r   r,   r   r   Ú
<listcomp>�   s     z&OrderedDict.values.<locals>.<listcomp>r   r,   r   r,   r   Úvalues   s    zOrderedDict.valuesc                    s   ‡ fdd„ˆ D ƒS )z.od.items() -> list of (key, value) pairs in odc                    s   g | ]}|ˆ | f‘qS r   r   r.   r,   r   r   r0   …   s     z%OrderedDict.items.<locals>.<listcomp>r   r,   r   r,   r   Úitemsƒ   s    zOrderedDict.itemsc                 C   s   t | ƒS )z0od.iterkeys() -> an iterator over the keys in od)Úiterr,   r   r   r   Úiterkeys‡   s    zOrderedDict.iterkeysc                 c   s   | D ]}| | V  qdS )z2od.itervalues -> an iterator over the values in odNr   ©r   Úkr   r   r   r$   ‹   s    zOrderedDict.itervaluesc                 c   s   | D ]}|| | fV  qdS )z=od.iteritems -> an iterator over the (key, value) items in odNr   r5   r   r   r   Ú	iteritems�   s    zOrderedDict.iteritemsc                  O   sÈ   t | ƒdkr tdt | ƒf ƒ‚n| s,tdƒ‚| d }d}t | ƒdkrL| d }t|tƒrn|D ]}|| ||< qZn<t|dƒr”| ¡ D ]}|| ||< q€n|D ]\}}|||< q˜| ¡ D ]\}}|||< q²dS )	aƒ  od.update(E, **F) -> None.  Update od from dict/iterable E and F.

        If E is a dict instance, does:           for k in E: od[k] = E[k]
        If E has a .keys() method, does:         for k in E.keys(): od[k] = E[k]
        Or if E is an iterable of items, does:   for k, v in E: od[k] = v
        In either case, this is followed by:     for k, v in F.items(): od[k] = v

        r   z8update() takes at most 2 positional arguments (%d given)z,update() takes at least 1 argument (0 given)r   r   r
   r-   N)r   r   Ú
isinstancer&   Úhasattrr-   r2   )r   r   r   Úotherr   r   r   r   r   Úupdate•   s(    	ÿ


zOrderedDict.updatec                 C   s0   || kr| | }| |= |S || j kr,t|ƒ‚|S )z©od.pop(k[,d]) -> v, remove specified key and return the corresponding value.
        If key is not found, d is returned if given, otherwise KeyError is raised.

        )Ú_OrderedDict__markerr(   )r   r   ÚdefaultÚresultr   r   r   r   ¸   s    
zOrderedDict.popNc                 C   s   || kr| | S || |< |S )zDod.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in odr   )r   r   r=   r   r   r   Ú
setdefaultÅ   s    zOrderedDict.setdefaultc                 C   s^   t | ƒtƒ f}||krdS d||< z.| s:d| jjf W ¢S d| jj|  ¡ f W ¢S ||= X dS )zod.__repr__() <==> repr(od)z...r
   z%s()z%s(%r)N)Úidr   Ú	__class__Ú__name__r2   )r   Ú_repr_runningZcall_keyr   r   r   Ú__repr__Ì   s    zOrderedDict.__repr__c                    sX   ‡ fdd„ˆ D ƒ}t ˆ ƒ ¡ }t tƒ ƒD ]}| |d¡ q(|rLˆ j|f|fS ˆ j|ffS )z%Return state information for picklingc                    s   g | ]}|ˆ | g‘qS r   r   )r/   r6   r,   r   r   r0   Û   s     z*OrderedDict.__reduce__.<locals>.<listcomp>N)ÚvarsÚcopyr	   r   rA   )r   r2   Ú	inst_dictr6   r   r,   r   Ú
__reduce__Ù   s    zOrderedDict.__reduce__c                 C   s
   |   | ¡S )z!od.copy() -> a shallow copy of od)rA   r,   r   r   r   rF   ã   s    zOrderedDict.copyc                 C   s   | ƒ }|D ]}|||< q
|S )z€OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
        and values equal to v (which defaults to None).

        r   )ÚclsÚiterabler   Údr   r   r   r   Úfromkeysç   s    
zOrderedDict.fromkeysc                 C   s6   t |tƒr*t| ƒt|ƒko(|  ¡ | ¡ kS t | |¡S )z“od.__eq__(y) <==> od==y.  Comparison to another OD is order-sensitive
        while comparison to a regular mapping is order-insensitive.

        )r8   r	   r   r2   r&   Ú__eq__©r   r:   r   r   r   rM   ò   s    
 zOrderedDict.__eq__c                 C   s
   | |k S )Nr   rN   r   r   r   Ú__ne__û   s    zOrderedDict.__ne__c                 C   s   t | ƒS )z@od.viewkeys() -> a set-like object providing a view on od's keys)r   r,   r   r   r   Úviewkeys   s    zOrderedDict.viewkeysc                 C   s   t | ƒS )z<od.viewvalues() -> an object providing a view on od's values)r   r,   r   r   r   Ú
viewvalues  s    zOrderedDict.viewvaluesc                 C   s   t | ƒS )zBod.viewitems() -> a set-like object providing a view on od's items)r   r,   r   r   r   Ú	viewitems  s    zOrderedDict.viewitems)T)N)N)"rB   Ú
__module__Ú__qualname__Ú__doc__r   r&   r   r   r"   r#   r%   r*   r-   r1   r2   r4   r$   r7   r;   r   Úobjectr<   r   r?   rD   rH   rF   ÚclassmethodrL   rM   rO   rP   rQ   rR   r   r   r   r   r	      s:   
	



	r	   N)
Úthreadr   r   ÚImportErrorÚ_abcollr   r   r   r&   r	   r   r   r   r   Ú<module>   s   