U
    ¼Ê¦iôe  ã                   @   st  d Z ddlmZmZ ddlZdddddd	d
ddddddddddddddddddgZdZeedƒƒZ	eee
ƒ ƒƒZeei  ¡ ƒƒZeei  ¡ ƒƒZeei  ¡ ƒƒZeeg ƒƒZeeeg ƒƒƒZeeedƒƒƒZeeedd > ƒƒƒZeeeƒ ƒƒZeed!ƒƒZeed"ƒƒZeeeƒ ƒƒZei  ¡ ƒZei  ¡ ƒZei  ¡ ƒZ eej!ƒZ"ed#d$„ ƒ ƒZ#d%d&„ Z$e$ƒ Z$ee$ƒZ%e$ &¡  [$d'd(„ Z'e'ƒ Z'ee'ƒZ(['d)d*„ Z)G d+d	„ d	ed,�Z*G d-d„ ded,�Z+G d.d„ de+ƒZ,e, -e%¡ G d/d„ ded,�Z.G d0d„ de.ƒZ/G d1d„ de/ƒZ0e0 -e(¡ G d2d
„ d
ed,�Z1G d3d„ de1ƒZ2e2 -e	¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ e2 -e¡ G d4d„ de1ƒZ3G d5d„ de2ƒZ4e4 -e#¡ G d6d„ ded,�Z5G d7d„ ded,�Z6G d8d„ de5e1e6ƒZ7G d9d„ ded,�Z8G d:d„ de7ƒZ9e9 -e:¡ G d;d„ de9ƒZ;e; -e¡ G d<d„ de7ƒZ<e< -e"¡ G d=d„ de5ƒZ=G d>d„ de=e9ƒZ>e> -e¡ G d?d„ de=e9ƒZ?e? -e ¡ G d@d„ de=e7ƒZ@e@ -e¡ G dAd„ de<ƒZAeA -eB¡ G dBd„ de3e7ƒZCeC -eD¡ eC -eE¡ eC -e¡ eC -eF¡ G dCd„ deCƒZGeG -eH¡ eG -e
¡ G dDd„ deCƒZIeI -eJ¡ eI -e
¡ dS )EzjAbstract Base Classes (ABCs) for collections, according to PEP 3119.

Unit tests are in test_collections.
é    )ÚABCMetaÚabstractmethodNÚ	AwaitableÚ	CoroutineÚAsyncIterableÚAsyncIteratorÚAsyncGeneratorÚHashableÚIterableÚIteratorÚ	GeneratorÚ
ReversibleÚSizedÚ	ContainerÚCallableÚ
CollectionÚSetÚ
MutableSetÚMappingÚMutableMappingÚMappingViewÚKeysViewÚ	ItemsViewÚ
ValuesViewÚSequenceÚMutableSequenceÚ
ByteStringzcollections.abcó    é   iè  Ú © c                   c   s   d V S ©Nr    r    r    r    ú&/usr/lib/python3.8/_collections_abc.pyÚ<lambda>8   r   r#   c                   Ã   s   d S r!   r    r    r    r    r"   Ú_coro:   r   r$   c                   C  s
   d V  d S r!   r    r    r    r    r"   Ú_ag@   r   r%   c                 G   sN   | j }|D ]>}|D ],}||jkr|j| d kr:t    S  q
qt  S q
dS )NT)Ú__mro__Ú__dict__ÚNotImplemented)ÚCÚmethodsÚmroÚmethodÚBr    r    r"   Ú_check_methodsH   s    

r.   c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r	   r    c                 C   s   dS ©Nr   r    ©Úselfr    r    r"   Ú__hash__X   s    zHashable.__hash__c                 C   s   | t krt|dƒS tS )Nr2   )r	   r.   r(   ©Úclsr)   r    r    r"   Ú__subclasshook__\   s    
zHashable.__subclasshook__N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__r   r2   Úclassmethodr5   r    r    r    r"   r	   T   s
   
)Ú	metaclassc                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r   r    c                 c   s
   d V  d S r!   r    r0   r    r    r"   Ú	__await__g   s    zAwaitable.__await__c                 C   s   | t krt|dƒS tS )Nr<   )r   r.   r(   r3   r    r    r"   r5   k   s    
zAwaitable.__subclasshook__N)r6   r7   r8   r9   r   r<   r:   r5   r    r    r    r"   r   c   s
   
c                   @   s>   e Zd ZdZedd„ ƒZeddd„ƒZdd„ Zed	d
„ ƒZ	dS )r   r    c                 C   s   t ‚dS )zcSend a value into the coroutine.
        Return next yielded value or raise StopIteration.
        N©ÚStopIteration©r1   Úvaluer    r    r"   Úsendv   s    zCoroutine.sendNc                 C   s4   |dkr|dkr|‚|ƒ }|dk	r,|  |¡}|‚dS )zgRaise an exception in the coroutine.
        Return next yielded value or raise StopIteration.
        N©Úwith_traceback©r1   ÚtypÚvalÚtbr    r    r"   Úthrow}   s    
zCoroutine.throwc              	   C   s4   z|   t¡ W n ttfk
r&   Y n
X tdƒ‚dS )ú.Raise GeneratorExit inside coroutine.
        zcoroutine ignored GeneratorExitN©rH   ÚGeneratorExitr>   ÚRuntimeErrorr0   r    r    r"   ÚcloseŠ   s
    zCoroutine.closec                 C   s   | t krt|ddddƒS tS )Nr<   rA   rH   rM   )r   r.   r(   r3   r    r    r"   r5   ”   s    zCoroutine.__subclasshook__)NN)
r6   r7   r8   r9   r   rA   rH   rM   r:   r5   r    r    r    r"   r   r   s   

c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r   r    c                 C   s   t ƒ S r!   )r   r0   r    r    r"   Ú	__aiter__¢   s    zAsyncIterable.__aiter__c                 C   s   | t krt|dƒS tS )NrN   )r   r.   r(   r3   r    r    r"   r5   ¦   s    
zAsyncIterable.__subclasshook__N)r6   r7   r8   r9   r   rN   r:   r5   r    r    r    r"   r   ž   s
   
c                   @   s0   e Zd ZdZedd„ ƒZdd„ Zedd„ ƒZdS )	r   r    c                 Ã   s   t ‚dS )z@Return the next item or raise StopAsyncIteration when exhausted.N©ÚStopAsyncIterationr0   r    r    r"   Ú	__anext__±   s    zAsyncIterator.__anext__c                 C   s   | S r!   r    r0   r    r    r"   rN   ¶   s    zAsyncIterator.__aiter__c                 C   s   | t krt|ddƒS tS )NrQ   rN   )r   r.   r(   r3   r    r    r"   r5   ¹   s    zAsyncIterator.__subclasshook__N)	r6   r7   r8   r9   r   rQ   rN   r:   r5   r    r    r    r"   r   ­   s   
c                   @   sF   e Zd ZdZdd„ Zedd„ ƒZeddd„ƒZd	d
„ Ze	dd„ ƒZ
dS )r   r    c                 Ã   s   |   d¡I dH S )zpReturn the next item from the asynchronous generator.
        When exhausted, raise StopAsyncIteration.
        N)Úasendr0   r    r    r"   rQ   Ä   s    zAsyncGenerator.__anext__c                 Ã   s   t ‚dS )zuSend a value into the asynchronous generator.
        Return next yielded value or raise StopAsyncIteration.
        NrO   r?   r    r    r"   rR   Ê   s    zAsyncGenerator.asendNc                 Ã   s4   |dkr|dkr|‚|ƒ }|dk	r,|  |¡}|‚dS )zyRaise an exception in the asynchronous generator.
        Return next yielded value or raise StopAsyncIteration.
        NrB   rD   r    r    r"   ÚathrowÑ   s    
zAsyncGenerator.athrowc              	   Ã   s:   z|   t¡I dH  W n ttfk
r,   Y n
X tdƒ‚dS )rI   Nz,asynchronous generator ignored GeneratorExit)rS   rK   rP   rL   r0   r    r    r"   ÚacloseÞ   s
    zAsyncGenerator.aclosec                 C   s   | t krt|dddddƒS tS )NrN   rQ   rR   rS   rT   )r   r.   r(   r3   r    r    r"   r5   è   s      ÿzAsyncGenerator.__subclasshook__)NN)r6   r7   r8   r9   rQ   r   rR   rS   rT   r:   r5   r    r    r    r"   r   À   s   

c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r
   r    c                 c   s   d S r!   r    r0   r    r    r"   Ú__iter__÷   s    zIterable.__iter__c                 C   s   | t krt|dƒS tS )NrU   )r
   r.   r(   r3   r    r    r"   r5   ü   s    
zIterable.__subclasshook__N)r6   r7   r8   r9   r   rU   r:   r5   r    r    r    r"   r
   ó   s
   
c                   @   s0   e Zd ZdZedd„ ƒZdd„ Zedd„ ƒZdS )	r   r    c                 C   s   t ‚dS )zKReturn the next item from the iterator. When exhausted, raise StopIterationNr=   r0   r    r    r"   Ú__next__  s    zIterator.__next__c                 C   s   | S r!   r    r0   r    r    r"   rU     s    zIterator.__iter__c                 C   s   | t krt|ddƒS tS )NrU   rV   )r   r.   r(   r3   r    r    r"   r5     s    zIterator.__subclasshook__N)	r6   r7   r8   r9   r   rV   rU   r:   r5   r    r    r    r"   r     s   
c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r   r    c                 c   s   d S r!   r    r0   r    r    r"   Ú__reversed__)  s    zReversible.__reversed__c                 C   s   | t krt|ddƒS tS )NrW   rU   )r   r.   r(   r3   r    r    r"   r5   .  s    zReversible.__subclasshook__N)r6   r7   r8   r9   r   rW   r:   r5   r    r    r    r"   r   %  s
   
c                   @   sF   e Zd ZdZdd„ Zedd„ ƒZeddd„ƒZd	d
„ Ze	dd„ ƒZ
dS )r   r    c                 C   s
   |   d¡S )z^Return the next item from the generator.
        When exhausted, raise StopIteration.
        N)rA   r0   r    r    r"   rV   9  s    zGenerator.__next__c                 C   s   t ‚dS )zcSend a value into the generator.
        Return next yielded value or raise StopIteration.
        Nr=   r?   r    r    r"   rA   ?  s    zGenerator.sendNc                 C   s4   |dkr|dkr|‚|ƒ }|dk	r,|  |¡}|‚dS )zgRaise an exception in the generator.
        Return next yielded value or raise StopIteration.
        NrB   rD   r    r    r"   rH   F  s    
zGenerator.throwc              	   C   s4   z|   t¡ W n ttfk
r&   Y n
X tdƒ‚dS )z.Raise GeneratorExit inside generator.
        zgenerator ignored GeneratorExitNrJ   r0   r    r    r"   rM   S  s
    zGenerator.closec                 C   s   | t krt|dddddƒS tS )NrU   rV   rA   rH   rM   )r   r.   r(   r3   r    r    r"   r5   ]  s      ÿzGenerator.__subclasshook__)NN)r6   r7   r8   r9   rV   r   rA   rH   rM   r:   r5   r    r    r    r"   r   5  s   

c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r   r    c                 C   s   dS r/   r    r0   r    r    r"   Ú__len__k  s    zSized.__len__c                 C   s   | t krt|dƒS tS )NrX   )r   r.   r(   r3   r    r    r"   r5   o  s    
zSized.__subclasshook__N)r6   r7   r8   r9   r   rX   r:   r5   r    r    r    r"   r   g  s
   
c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r   r    c                 C   s   dS ©NFr    )r1   Úxr    r    r"   Ú__contains__z  s    zContainer.__contains__c                 C   s   | t krt|dƒS tS )Nr[   )r   r.   r(   r3   r    r    r"   r5   ~  s    
zContainer.__subclasshook__N)r6   r7   r8   r9   r   r[   r:   r5   r    r    r    r"   r   v  s
   
c                   @   s   e Zd ZdZedd„ ƒZdS )r   r    c                 C   s   | t krt|dddƒS tS )NrX   rU   r[   )r   r.   r(   r3   r    r    r"   r5   ˆ  s    zCollection.__subclasshook__N)r6   r7   r8   r9   r:   r5   r    r    r    r"   r   „  s   c                   @   s(   e Zd ZdZedd„ ƒZedd„ ƒZdS )r   r    c                 O   s   dS rY   r    )r1   ÚargsÚkwdsr    r    r"   Ú__call__’  s    zCallable.__call__c                 C   s   | t krt|dƒS tS )Nr^   )r   r.   r(   r3   r    r    r"   r5   –  s    
zCallable.__subclasshook__N)r6   r7   r8   r9   r   r^   r:   r5   r    r    r    r"   r   Ž  s
   
c                   @   sŒ   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	e
dd„ ƒZdd„ ZeZdd„ Zdd„ ZeZdd„ Zdd„ Zdd„ ZeZdd„ ZdS )r   aZ  A set is a finite, iterable container.

    This class provides concrete generic implementations of all
    methods except for __contains__, __iter__ and __len__.

    To override the comparisons (presumably for speed, as the
    semantics are fixed), redefine __le__ and __ge__,
    then the other operations will automatically follow suit.
    r    c                 C   s>   t |tƒstS t| ƒt|ƒkr"dS | D ]}||kr& dS q&dS ©NFT©Ú
isinstancer   r(   Úlen©r1   ÚotherÚelemr    r    r"   Ú__le__®  s    
z
Set.__le__c                 C   s(   t |tƒstS t| ƒt|ƒk o&|  |¡S r!   ©ra   r   r(   rb   rf   ©r1   rd   r    r    r"   Ú__lt__¸  s    
z
Set.__lt__c                 C   s(   t |tƒstS t| ƒt|ƒko&|  |¡S r!   )ra   r   r(   rb   Ú__ge__rh   r    r    r"   Ú__gt__½  s    
z
Set.__gt__c                 C   s>   t |tƒstS t| ƒt|ƒk r"dS |D ]}|| kr& dS q&dS r_   r`   rc   r    r    r"   rj   Â  s    
z
Set.__ge__c                 C   s(   t |tƒstS t| ƒt|ƒko&|  |¡S r!   rg   rh   r    r    r"   Ú__eq__Ì  s    
z
Set.__eq__c                 C   s   | |ƒS )z¼Construct an instance of the class from any iterable input.

        Must override this method if the class constructor signature
        does not accept an iterable for an input.
        r    )r4   Úitr    r    r"   Ú_from_iterableÑ  s    zSet._from_iterablec                    s&   t |tƒstS ˆ  ‡ fdd„|D ƒ¡S )Nc                 3   s   | ]}|ˆ kr|V  qd S r!   r    ©Ú.0r@   r0   r    r"   Ú	<genexpr>Ý  s      zSet.__and__.<locals>.<genexpr>©ra   r
   r(   rn   rh   r    r0   r"   Ú__and__Ú  s    
zSet.__and__c                 C   s   |D ]}|| kr dS qdS )z1Return True if two sets have a null intersection.FTr    )r1   rd   r@   r    r    r"   Ú
isdisjointá  s    zSet.isdisjointc                 C   s*   t |tƒstS dd„ | |fD ƒ}|  |¡S )Nc                 s   s   | ]}|D ]
}|V  q
qd S r!   r    )rp   ÚsÚer    r    r"   rq   ë  s       zSet.__or__.<locals>.<genexpr>rr   )r1   rd   Úchainr    r    r"   Ú__or__è  s    
z
Set.__or__c                    s:   t ˆ tƒs"t ˆ tƒstS |  ˆ ¡‰ |  ‡ fdd„| D ƒ¡S )Nc                 3   s   | ]}|ˆ kr|V  qd S r!   r    ro   ©rd   r    r"   rq   õ  s    ÿzSet.__sub__.<locals>.<genexpr>©ra   r   r
   r(   rn   rh   r    ry   r"   Ú__sub__ð  s
    


zSet.__sub__c                    s:   t |tƒs"t |tƒstS ˆ  |¡}ˆ  ‡ fdd„|D ƒ¡S )Nc                 3   s   | ]}|ˆ kr|V  qd S r!   r    ro   r0   r    r"   rq   ý  s    ÿzSet.__rsub__.<locals>.<genexpr>rz   rh   r    r0   r"   Ú__rsub__ø  s
    


zSet.__rsub__c                 C   s2   t |tƒs"t |tƒstS |  |¡}| | ||  B S r!   rz   rh   r    r    r"   Ú__xor__   s
    


zSet.__xor__c                 C   s˜   t j}d| d }t| ƒ}d|d  }||M }| D ],}t|ƒ}|||d> A dA d N }||M }q2|d d }||M }||krˆ||d 8 }|d	kr”d
}|S )a+  Compute the hash value of a set.

        Note that we don't define __hash__: not all sets are hashable.
        But if you define a hashable set type, its __hash__ should
        call this function.

        This must be compatible __eq__.

        All sets ought to compare equal if they contain the same
        elements, regardless of how they are implemented, and
        regardless of the order of the elements; so there's not much
        freedom for __eq__ or __hash__.  We match the algorithm used
        by the built-in frozenset type.
        é   r   iMïèré   i³M[l   ×4~2 iÍ iãÃ6éÿÿÿÿiÁÇ8#)ÚsysÚmaxsizerb   Úhash)r1   ÚMAXÚMASKÚnÚhrZ   Úhxr    r    r"   Ú_hash	  s     
z	Set._hashN)r6   r7   r8   Ú__doc__r9   rf   ri   rk   rj   rl   r:   rn   rs   Ú__rand__rt   rx   Ú__ror__r{   r|   r}   Ú__rxor__r‰   r    r    r    r"   r      s&   



c                   @   sd   e Zd ZdZdZedd„ ƒZe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S )r   a‡  A mutable set is a finite, iterable container.

    This class provides concrete generic implementations of all
    methods except for __contains__, __iter__, __len__,
    add(), and discard().

    To override the comparisons (presumably for speed, as the
    semantics are fixed), all you have to do is redefine __le__ and
    then the other operations will automatically follow suit.
    r    c                 C   s   t ‚dS )zAdd an element.N©ÚNotImplementedErrorr?   r    r    r"   Úadd:  s    zMutableSet.addc                 C   s   t ‚dS )z8Remove an element.  Do not raise an exception if absent.NrŽ   r?   r    r    r"   Údiscard?  s    zMutableSet.discardc                 C   s   || krt |ƒ‚|  |¡ dS )z5Remove an element. If not a member, raise a KeyError.N)ÚKeyErrorr‘   r?   r    r    r"   ÚremoveD  s    zMutableSet.removec                 C   s>   t | ƒ}zt|ƒ}W n tk
r.   td‚Y nX |  |¡ |S )z2Return the popped value.  Raise KeyError if empty.N)ÚiterÚnextr>   r’   r‘   ©r1   rm   r@   r    r    r"   ÚpopJ  s    
zMutableSet.popc                 C   s(   z|   ¡  qW n tk
r"   Y nX dS )z6This is slow (creates N new iterators!) but effective.N)r—   r’   r0   r    r    r"   ÚclearT  s    zMutableSet.clearc                 C   s   |D ]}|   |¡ q| S r!   )r�   r–   r    r    r"   Ú__ior__\  s    zMutableSet.__ior__c                 C   s   | | D ]}|   |¡ q| S r!   )r‘   r–   r    r    r"   Ú__iand__a  s    zMutableSet.__iand__c                 C   sR   || kr|   ¡  n<t|tƒs&|  |¡}|D ]"}|| krB|  |¡ q*|  |¡ q*| S r!   )r˜   ra   r   rn   r‘   r�   r–   r    r    r"   Ú__ixor__f  s    


zMutableSet.__ixor__c                 C   s*   || kr|   ¡  n|D ]}|  |¡ q| S r!   )r˜   r‘   r–   r    r    r"   Ú__isub__s  s
    
zMutableSet.__isub__N)r6   r7   r8   rŠ   r9   r   r�   r‘   r“   r—   r˜   r™   rš   r›   rœ   r    r    r    r"   r   ,  s   


c                   @   sR   e Zd ZdZedd„ ƒZddd„Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ ZdZdS )r   r    c                 C   s   t ‚d S r!   ©r’   ©r1   Úkeyr    r    r"   Ú__getitem__�  s    zMapping.__getitem__Nc                 C   s(   z
| | W S  t k
r"   | Y S X dS )z<D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.Nr�   ©r1   rŸ   Údefaultr    r    r"   Úget‘  s    
zMapping.getc                 C   s,   z| |  W n t k
r"   Y dS X dS d S r_   r�   rž   r    r    r"   r[   ˜  s
    zMapping.__contains__c                 C   s   t | ƒS )z:D.keys() -> a set-like object providing a view on D's keys)r   r0   r    r    r"   Úkeys   s    zMapping.keysc                 C   s   t | ƒS )z<D.items() -> a set-like object providing a view on D's items)r   r0   r    r    r"   Úitems¤  s    zMapping.itemsc                 C   s   t | ƒS )z6D.values() -> an object providing a view on D's values)r   r0   r    r    r"   Úvalues¨  s    zMapping.valuesc                 C   s&   t |tƒstS t|  ¡ ƒt| ¡ ƒkS r!   )ra   r   r(   Údictr¥   rh   r    r    r"   rl   ¬  s    
zMapping.__eq__)N)r6   r7   r8   r9   r   r    r£   r[   r¤   r¥   r¦   rl   rW   r    r    r    r"   r   �  s   


c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r   ©Ú_mappingc                 C   s
   || _ d S r!   r¨   )r1   Úmappingr    r    r"   Ú__init__º  s    zMappingView.__init__c                 C   s
   t | jƒS r!   )rb   r©   r0   r    r    r"   rX   ½  s    zMappingView.__len__c                 C   s
   d  | ¡S )Nz&{0.__class__.__name__}({0._mapping!r}))Úformatr0   r    r    r"   Ú__repr__À  s    zMappingView.__repr__N)r6   r7   r8   r9   r«   rX   r­   r    r    r    r"   r   ¶  s   c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	r   r    c                 C   s   t |ƒS r!   ©Úset©r1   rm   r    r    r"   rn   È  s    zKeysView._from_iterablec                 C   s
   || j kS r!   r¨   rž   r    r    r"   r[   Ì  s    zKeysView.__contains__c                 c   s   | j E d H  d S r!   r¨   r0   r    r    r"   rU   Ï  s    zKeysView.__iter__N©r6   r7   r8   r9   r:   rn   r[   rU   r    r    r    r"   r   Ä  s
   
c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	r   r    c                 C   s   t |ƒS r!   r®   r°   r    r    r"   rn   Ù  s    zItemsView._from_iterablec                 C   sB   |\}}z| j | }W n tk
r,   Y dS X ||kp<||kS d S rY   )r©   r’   )r1   ÚitemrŸ   r@   Úvr    r    r"   r[   Ý  s    zItemsView.__contains__c                 c   s    | j D ]}|| j | fV  qd S r!   r¨   rž   r    r    r"   rU   æ  s    
zItemsView.__iter__Nr±   r    r    r    r"   r   Õ  s
   
	c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r   r    c                 C   s0   | j D ]$}| j | }||ks$||kr dS qdS ©NTFr¨   )r1   r@   rŸ   r³   r    r    r"   r[   ñ  s
    

zValuesView.__contains__c                 c   s   | j D ]}| j | V  qd S r!   r¨   rž   r    r    r"   rU   ø  s    
zValuesView.__iter__N)r6   r7   r8   r9   r[   rU   r    r    r    r"   r   í  s   c                   @   s^   e Zd ZdZedd„ ƒZedd„ ƒZeƒ Zefdd„Z	dd	„ Z
d
d„ Zddd„Zddd„ZdS )r   r    c                 C   s   t ‚d S r!   r�   ©r1   rŸ   r@   r    r    r"   Ú__setitem__  s    zMutableMapping.__setitem__c                 C   s   t ‚d S r!   r�   rž   r    r    r"   Ú__delitem__  s    zMutableMapping.__delitem__c                 C   s@   z| | }W n$ t k
r0   || jkr(‚ | Y S X | |= |S dS )z©D.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.
        N)r’   Ú_MutableMapping__marker)r1   rŸ   r¢   r@   r    r    r"   r—     s    

zMutableMapping.popc                 C   sB   zt t| ƒƒ}W n tk
r*   td‚Y nX | | }| |= ||fS )zƒD.popitem() -> (k, v), remove and return some (key, value) pair
           as a 2-tuple; but raise KeyError if D is empty.
        N)r•   r”   r>   r’   rµ   r    r    r"   Úpopitem$  s    zMutableMapping.popitemc                 C   s(   z|   ¡  qW n tk
r"   Y nX dS )z,D.clear() -> None.  Remove all items from D.N)r¹   r’   r0   r    r    r"   r˜   0  s    zMutableMapping.clearc                K   s|   t |tƒr"|D ]}|| | |< qn<t|dƒrH| ¡ D ]}|| | |< q4n|D ]\}}|| |< qL| ¡ D ]\}}|| |< qfdS )aK   D.update([E, ]**F) -> None.  Update D from mapping/iterable E and F.
            If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
            If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
            In either case, this is followed by: for k, v in F.items(): D[k] = v
        r¤   N)ra   r   Úhasattrr¤   r¥   )r1   rd   r]   rŸ   r@   r    r    r"   Úupdate8  s    


zMutableMapping.updateNc                 C   s,   z
| | W S  t k
r&   || |< Y nX |S )z@D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in Dr�   r¡   r    r    r"   Ú
setdefaultJ  s
    
zMutableMapping.setdefault)r    )N)r6   r7   r8   r9   r   r¶   r·   Úobjectr¸   r—   r¹   r˜   r»   r¼   r    r    r    r"   r   ÿ  s   


c                   @   sJ   e Zd ZdZdZedd„ ƒZdd„ Zdd„ Zd	d
„ Z	ddd„Z
dd„ ZdS )r   zŠAll the operations on a read-only sequence.

    Concrete subclasses must override __new__ or __init__,
    __getitem__, and __len__.
    r    c                 C   s   t ‚d S r!   ©Ú
IndexError©r1   Úindexr    r    r"   r    b  s    zSequence.__getitem__c                 c   s<   d}z| | }|V  |d7 }qW n t k
r6   Y d S X d S )Nr   r   r¾   )r1   Úir³   r    r    r"   rU   f  s    zSequence.__iter__c                 C   s$   | D ]}||ks||kr dS qdS r´   r    )r1   r@   r³   r    r    r"   r[   p  s    zSequence.__contains__c                 c   s$   t tt| ƒƒƒD ]}| | V  qd S r!   )ÚreversedÚrangerb   )r1   rÂ   r    r    r"   rW   v  s    zSequence.__reversed__r   Nc                 C   s    |dk	r"|dk r"t t| ƒ| dƒ}|dk	r>|dk r>|t| ƒ7 }|}|dksR||k r˜z"| | }||ksl||krr|W S W n tk
rŒ   Y q˜Y nX |d7 }qBt‚dS )zæS.index(value, [start, [stop]]) -> integer -- return first index of value.
           Raises ValueError if the value is not present.

           Supporting start and stop arguments is optional, but
           recommended.
        Nr   r   )Úmaxrb   r¿   Ú
ValueError)r1   r@   ÚstartÚstoprÂ   r³   r    r    r"   rÁ   z  s    


zSequence.indexc                    s   t ‡ fdd„| D ƒƒS )zBS.count(value) -> integer -- return number of occurrences of valuec                 3   s"   | ]}|ˆ ks|ˆ krd V  qdS )r   Nr    )rp   r³   ©r@   r    r"   rq   “  s       z!Sequence.count.<locals>.<genexpr>)Úsumr?   r    rÉ   r"   Úcount‘  s    zSequence.count)r   N)r6   r7   r8   rŠ   r9   r   r    rU   r[   rW   rÁ   rË   r    r    r    r"   r   X  s   


c                   @   s   e Zd ZdZdZdS )r   zMThis unifies bytes and bytearray.

    XXX Should add all their methods.
    r    N)r6   r7   r8   rŠ   r9   r    r    r    r"   r   ›  s   c                   @   sn   e Zd ZdZedd„ ƒZedd„ ƒZe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S )r   r    c                 C   s   t ‚d S r!   r¾   ©r1   rÁ   r@   r    r    r"   r¶   ³  s    zMutableSequence.__setitem__c                 C   s   t ‚d S r!   r¾   rÀ   r    r    r"   r·   ·  s    zMutableSequence.__delitem__c                 C   s   t ‚dS )z3S.insert(index, value) -- insert value before indexNr¾   rÌ   r    r    r"   Úinsert»  s    zMutableSequence.insertc                 C   s   |   t| ƒ|¡ dS )z:S.append(value) -- append value to the end of the sequenceN)rÍ   rb   r?   r    r    r"   ÚappendÀ  s    zMutableSequence.appendc                 C   s(   z|   ¡  qW n tk
r"   Y nX dS )z,S.clear() -> None -- remove all items from SN)r—   r¿   r0   r    r    r"   r˜   Ä  s    zMutableSequence.clearc                 C   sH   t | ƒ}t|d ƒD ].}| || d  | |  | |< | || d < qdS )z!S.reverse() -- reverse *IN PLACE*r~   r   N)rb   rÄ   )r1   r†   rÂ   r    r    r"   ÚreverseÌ  s    zMutableSequence.reversec                 C   s(   || krt |ƒ}|D ]}|  |¡ qdS )zMS.extend(iterable) -- extend sequence by appending elements from the iterableN)ÚlistrÎ   )r1   r¦   r³   r    r    r"   ÚextendÒ  s    zMutableSequence.extendr€   c                 C   s   | | }| |= |S )z™S.pop([index]) -> item -- remove and return item at index (default last).
           Raise IndexError if list is empty or index is out of range.
        r    )r1   rÁ   r³   r    r    r"   r—   Ù  s    zMutableSequence.popc                 C   s   | |   |¡= dS )zvS.remove(value) -- remove first occurrence of value.
           Raise ValueError if the value is not present.
        N)rÁ   r?   r    r    r"   r“   á  s    zMutableSequence.removec                 C   s   |   |¡ | S r!   )rÑ   )r1   r¦   r    r    r"   Ú__iadd__ç  s    
zMutableSequence.__iadd__N)r€   )r6   r7   r8   r9   r   r¶   r·   rÍ   rÎ   r˜   rÏ   rÑ   r—   r“   rÒ   r    r    r    r"   r   ¨  s   	



)KrŠ   Úabcr   r   r�   Ú__all__r6   Útyper”   Úbytes_iteratorÚ	bytearrayÚbytearray_iteratorr¤   Údict_keyiteratorr¦   Údict_valueiteratorr¥   Údict_itemiteratorÚlist_iteratorrÃ   Úlist_reverseiteratorrÄ   Úrange_iteratorÚlongrange_iteratorr¯   Úset_iteratorÚstr_iteratorÚtuple_iteratorÚzipÚzip_iteratorÚ	dict_keysÚdict_valuesÚ
dict_itemsr'   ÚmappingproxyÚ	generatorr$   Ú	coroutinerM   r%   Úasync_generatorr.   r	   r   r   Úregisterr   r   r   r
   r   r   r   r   r   r   r   r   Ú	frozensetr   r   r   r   r   r   r   r§   r   ÚtupleÚstrÚ
memoryviewr   Úbytesr   rÐ   r    r    r    r"   Ú<module>   sâ                  ø	
)
0













/

 

O
2



S
=



	

C
