[M@sdZddlmZmZddlZdddddd d d d d dddddddgZdZeedZ eee Z eeij Z eeijZeeijZeegZeeegZeeedZeeeZeedZeefZeeeZeij ZeijZeijZeej Z!GddddeZ"GddddeZ#Gddde#Z$e$j%e e$j%e e$j%e e$j%ee$j%ee$j%ee$j%ee$j%ee$j%ee$j%ee$j%ee$j%eGddddeZ&GddddeZ'Gdd d deZ(Gdd d e&e#e'Z)e)j%e*Gd d d e)Z+e+j%eGd!d d e&e#e'Z,e,j%e!Gd"dde&Z-Gd#dde-e)Z.e.j%eGd$dde-e)Z/e/j%eGd%dde-Z0e0j%eGd&d d e,Z1e1j%e2Gd'dde&e#e'Z3e3j%e4e3j%e5e3j%ee3j%e6Gd(dde3Z7e7j%e8e7j%e Gd)dde3Z9e9j%e:e9j%e dS)*zjAbstract Base Classes (ABCs) for collections, according to PEP 3119. Unit tests are in test_collections. )ABCMetaabstractmethodNHashableIterableIteratorSized ContainerCallableSet MutableSetMappingMutableMapping MappingViewKeysView ItemsView ValuesViewSequenceMutableSequence ByteStringzcollections.abcc@s:eZdZfZeddZeddZdS)rcCsdS)Nr)selfrr&/usr/lib/python3.4/_collections_abc.py__hash__=szHashable.__hash__cCsK|tkrGx8|jD]*}d|jkr|jdr<dSPqqWntS)NrT)r__mro____dict__NotImplemented)clsCBrrr__subclasshook__As   zHashable.__subclasshook__N)__name__ __module__ __qualname__ __slots__rr classmethodr!rrrrr9s  metaclassc@s:eZdZfZeddZeddZdS)rccsdS)Nr)rrrr__iter__PszIterable.__iter__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r(N)r).0r rrr Xsz,Iterable.__subclasshook__..T)ranyrr)rrrrrr!Us zIterable.__subclasshook__N)r"r#r$r%rr(r&r!rrrrrLs c@sFeZdZfZeddZddZeddZdS)rcCs tdS)zKReturn the next item from the iterator. When exhausted, raise StopIterationN) StopIteration)rrrr__next__aszIterator.__next__cCs|S)Nr)rrrrr(fszIterator.__iter__cCsO|tkrKtdd|jDrKtdd|jDrKdSntS)Ncss|]}d|jkVqdS)r-N)r)r)r rrrr*lsz,Iterator.__subclasshook__..css|]}d|jkVqdS)r(N)r)r)r rrrr*msT)rr+rr)rrrrrr!is  zIterator.__subclasshook__N) r"r#r$r%rr-r(r&r!rrrrr]s  c@s:eZdZfZeddZeddZdS)rcCsdS)Nrr)rrrr__len__sz Sized.__len__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r.N)r)r)r rrrr*sz)Sized.__subclasshook__..T)rr+rr)rrrrrr!s zSized.__subclasshook__N)r"r#r$r%rr.r&r!rrrrrs c@s:eZdZfZeddZeddZdS)rcCsdS)NFr)rxrrr __contains__szContainer.__contains__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r0N)r)r)r rrrr*sz-Container.__subclasshook__..T)rr+rr)rrrrrr!s zContainer.__subclasshook__N)r"r#r$r%rr0r&r!rrrrrs c@s:eZdZfZeddZeddZdS)r cOsdS)NFr)rargskwdsrrr__call__szCallable.__call__cCs3|tkr/tdd|jDr/dSntS)Ncss|]}d|jkVqdS)r3N)r)r)r rrrr*sz,Callable.__subclasshook__..T)r r+rr)rrrrrr!s zCallable.__subclasshook__N)r"r#r$r%rr3r&r!rrrrr s c@seZdZdZfZddZddZddZdd Zd d Z e d d Z ddZ e Z ddZddZeZddZddZddZeZddZdS)r aZA 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. cCsTt|tstSt|t|kr/dSx|D]}||kr6dSq6WdS)NFT) isinstancer rlen)rotherelemrrr__le__s  z Set.__le__cCs8t|tstSt|t|ko7|j|S)N)r4r rr5r8)rr6rrr__lt__sz Set.__lt__cCs8t|tstSt|t|ko7|j|S)N)r4r rr5__ge__)rr6rrr__gt__sz Set.__gt__cCsTt|tstSt|t|kr/dSx|D]}||kr6dSq6WdS)NFT)r4r rr5)rr6r7rrrr:s  z Set.__ge__cCs8t|tstSt|t|ko7|j|S)N)r4r rr5r8)rr6rrr__eq__sz Set.__eq__cCs ||S)zConstruct 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)ritrrr_from_iterableszSet._from_iterablecs3t|tstSjfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r)value)rrrr*szSet.__and__..)r4rrr>)rr6r)rr__and__sz Set.__and__cCs%x|D]}||krdSqWdS)z1Return True if two sets have a null intersection.FTr)rr6r?rrr isdisjoints  zSet.isdisjointcCs9t|tstSdd||fD}|j|S)Ncss"|]}|D] }|Vq qdS)Nr)r)serrrr*szSet.__or__..)r4rrr>)rr6chainrrr__or__sz Set.__or__csTtts4tts"tS|jn|jfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r)r?)r6rrr*szSet.__sub__..)r4r rrr>)rr6r)r6r__sub__s z Set.__sub__csTt|ts4t|ts"tSj|}njfdd|DS)Nc3s!|]}|kr|VqdS)Nr)r)r?)rrrr*szSet.__rsub__..)r4r rrr>)rr6r)rr__rsub__ s z Set.__rsub__cCsDt|ts4t|ts"tS|j|}n||||BS)N)r4r rrr>)rr6rrr__xor__s z Set.__xor__cCstj}d|d}t|}d|d}||M}x>|D]6}t|}|||d>AdAdN}||M}qBW|dd}||M}||kr||d8}n|d krd }n|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. iMriM[l4~2i i6i8#)sysmaxsizer5hash)rMAXMASKnhr/hxrrr_hashs          z Set._hashN)r"r#r$__doc__r%r8r9r;r:r<r&r>r@__rand__rArE__ror__rFrGrH__rxor__rUrrrrr s$          c@seZdZdZfZeddZeddZddZdd Z d d Z d d Z ddZ ddZ ddZdS)r aA 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. cCs tdS)zAdd an element.N)NotImplementedError)rr?rrraddLszMutableSet.addcCs tdS)z8Remove an element. Do not raise an exception if absent.N)rZ)rr?rrrdiscardQszMutableSet.discardcCs,||krt|n|j|dS)z5Remove an element. If not a member, raise a KeyError.N)KeyErrorr\)rr?rrrremoveVs zMutableSet.removec CsHt|}yt|}Wntk r6tYnX|j||S)z2Return the popped value. Raise KeyError if empty.)iternextr,r]r\)rr=r?rrrpop\s    zMutableSet.popc Cs.yx|jqWWntk r)YnXdS)z6This is slow (creates N new iterators!) but effective.N)rar])rrrrclearfs  zMutableSet.clearcCs"x|D]}|j|qW|S)N)r[)rr=r?rrr__ior__ns zMutableSet.__ior__cCs&x||D]}|j|q W|S)N)r\)rr=r?rrr__iand__sszMutableSet.__iand__cCsx||kr|jn[t|ts:|j|}nx7|D]/}||krc|j|qA|j|qAW|S)N)rbr4r r>r\r[)rr=r?rrr__ixor__xs    zMutableSet.__ixor__cCs;||kr|jnx|D]}|j|q W|S)N)rbr\)rr=r?rrr__isub__s    zMutableSet.__isub__N)r"r#r$rVr%rr[r\r^rarbrcrdrerfrrrrr >s      c@sseZdZfZeddZdddZddZdd Zd d Z d d Z ddZ dS)r cCs tdS)N)r])rkeyrrr __getitem__szMapping.__getitem__Nc Cs)y ||SWntk r$|SYnXdS)z D[k] if k in D, else d. d defaults to None.N)r])rrgdefaultrrrgets  z Mapping.getc Cs-y ||Wntk r$dSYnXdSdS)NFT)r])rrgrrrr0s    zMapping.__contains__cCs t|S)z:D.keys() -> a set-like object providing a view on D's keys)r)rrrrkeyssz Mapping.keyscCs t|S)z a set-like object providing a view on D's items)r)rrrritemssz Mapping.itemscCs t|S)z6D.values() -> an object providing a view on D's values)r)rrrrvaluesszMapping.valuescCs5t|tstSt|jt|jkS)N)r4r rdictrl)rr6rrrr<szMapping.__eq__) r"r#r$r%rrhrjr0rkrlrmr<rrrrr s      c@s4eZdZddZddZddZdS)rcCs ||_dS)N)_mapping)rmappingrrr__init__szMappingView.__init__cCs t|jS)N)r5ro)rrrrr.szMappingView.__len__cCs dj|S)Nz&{0.__class__.__name__}({0._mapping!r}))format)rrrr__repr__szMappingView.__repr__N)r"r#r$rqr.rsrrrrrs   c@s:eZdZeddZddZddZdS)rcCs t|S)N)set)rr=rrrr>szKeysView._from_iterablecCs ||jkS)N)ro)rrgrrrr0szKeysView.__contains__ccs|jDdHdS)N)ro)rrrrr(szKeysView.__iter__N)r"r#r$r&r>r0r(rrrrrs  c@s:eZdZeddZddZddZdS)rcCs t|S)N)rt)rr=rrrr>szItemsView._from_iterablec CsD|\}}y|j|}Wntk r5dSYn X||kSdS)NF)ror])ritemrgr?vrrrr0s    zItemsView.__contains__ccs*x#|jD]}||j|fVq WdS)N)ro)rrgrrrr(szItemsView.__iter__N)r"r#r$r&r>r0r(rrrrrs  c@s(eZdZddZddZdS)rcCs/x(|jD]}||j|kr dSq WdS)NTF)ro)rr?rgrrrr0szValuesView.__contains__ccs$x|jD]}|j|Vq WdS)N)ro)rrgrrrr(szValuesView.__iter__N)r"r#r$r0r(rrrrrs  c@seZdZfZeddZeddZeZeddZ ddZ d d Z d d Z d ddZ d S)r cCs tdS)N)r])rrgr?rrr __setitem__szMutableMapping.__setitem__cCs tdS)N)r])rrgrrr __delitem__szMutableMapping.__delitem__c CsKy||}Wn+tk r;||jkr3n|SYn X||=|SdS)zD.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)rrgrir?rrrras  zMutableMapping.popc CsLytt|}Wntk r0tYnX||}||=||fS)zD.popitem() -> (k, v), remove and return some (key, value) pair as a 2-tuple; but raise KeyError if D is empty. )r`r_r,r])rrgr?rrrpopitem+s   zMutableMapping.popitemc Cs.yx|jqWWntk r)YnXdS)z,D.clear() -> None. Remove all items from D.N)rzr])rrrrrb7s  zMutableMapping.clearcOs|stdn|^}}t|dkrLtdt|n|r|d}t|trxw|D]}|||| 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 z@descriptor 'update' of 'MutableMapping' object needs an argumentrJz+update expected at most 1 arguments, got %drrkN) TypeErrorr5r4r hasattrrkrl)r1r2rr6rgr?rrrupdate?s$   zMutableMapping.updateNc Cs/y ||SWntk r*||| D.get(k,d), also set D[k]=d if k not in D)r])rrgrirrr setdefaultZs   zMutableMapping.setdefault)r"r#r$r%rrwrxobjectryrarzrbr}r~rrrrr s     c@sjeZdZdZfZeddZddZddZdd Z d d Z d d Z dS)rzAll the operations on a read-only sequence. Concrete subclasses must override __new__ or __init__, __getitem__, and __len__. cCs tdS)N) IndexError)rindexrrrrhrszSequence.__getitem__c csGd}y$x||}|V|d7}q WWntk rBdSYnXdS)NrrJ)r)rirvrrrr(vs  zSequence.__iter__cCs%x|D]}||krdSqWdS)NTFr)rr?rvrrrr0s  zSequence.__contains__ccs0x)ttt|D]}||VqWdS)N)reversedranger5)rrrrr __reversed__szSequence.__reversed__cCs7x*t|D]\}}||kr |Sq WtdS)z|S.index(value) -> integer -- return first index of value. Raises ValueError if the value is not present. N) enumerate ValueError)rr?rrvrrrrs zSequence.indexcstfdd|DS)zBS.count(value) -> integer -- return number of occurrences of valuec3s!|]}|krdVqdS)rJNr)r)rv)r?rrr*sz!Sequence.count..)sum)rr?r)r?rcountszSequence.countN) r"r#r$rVr%rrhr(r0rrrrrrrrhs    c@seZdZdZfZdS)rzMThis unifies bytes and bytearray. XXX Should add all their methods. N)r"r#r$rVr%rrrrrs c@seZdZfZeddZeddZeddZddZd d Z d d Z d dZ dddZ ddZ ddZdS)rcCs tdS)N)r)rrr?rrrrwszMutableSequence.__setitem__cCs tdS)N)r)rrrrrrxszMutableSequence.__delitem__cCs tdS)z3S.insert(index, value) -- insert value before indexN)r)rrr?rrrinsertszMutableSequence.insertcCs|jt||dS)z:S.append(value) -- append value to the end of the sequenceN)rr5)rr?rrrappendszMutableSequence.appendc Cs.yx|jqWWntk r)YnXdS)z,S.clear() -> None -- remove all items from SN)rar)rrrrrbs  zMutableSequence.clearcCsXt|}xEt|dD]3}|||d||||<|||d item -- remove and return item at index (default last). Raise IndexError if list is empty or index is out of range. r)rrrvrrrras zMutableSequence.popcCs||j|=dS)zvS.remove(value) -- remove first occurrence of value. Raise ValueError if the value is not present. N)r)rr?rrrr^szMutableSequence.removecCs|j||S)N)r)rrmrrr__iadd__s zMutableSequence.__iadd__NrL)r"r#r$r%rrwrxrrrbrrrar^rrrrrrs       );rVabcrrrM__all__r"typer_bytes_iterator bytearraybytearray_iteratorrkdict_keyiteratorrmdict_valueiteratorrldict_itemiterator list_iteratorrlist_reverseiteratorrrange_iteratorrt set_iterator str_iteratortuple_iteratorzip zip_iterator dict_keys dict_values dict_itemsr mappingproxyrrrregisterrrr r frozensetr r rrrrr rnrtuplestr memoryviewrbytesrlistrrrrs                   O 0     \ /      A