3 \O @sddlmZmZmZmZmZmZmZmZddl m Z m Z ddl Z ddl Z ddlZeefZdddddd d d d d dddg ZGdddeZGdd d e jZGdddeZGddde jZGdddZdS))getweakrefcount getweakrefsrefproxyCallableProxyType ProxyType ReferenceType_remove_dead_weakref)WeakSet_IterationGuardNrrrrWeakKeyDictionaryrrr ProxyTypesWeakValueDictionaryr WeakMethodfinalizecs@eZdZdZdddZfdd Zd d Zd d Zej Z Z S)r _func_ref _meth_type_alive __weakref__Nc s~y|j}|j}Wn(tk r8tdjt|dYnXfdd}tj|||}t|||_t||_ d|_ t||S)Nz)argument should be a bound method, not {}cs&}|jr"d|_dk r"|dS)NF)r)argself)callbackself_wr/usr/lib64/python3.6/weakref.py_cb3s zWeakMethod.__new__.._cbT) __self____func__AttributeError TypeErrorformattyper__new__rrr)clsmethrobjfuncrrr)rrrr",s   zWeakMethod.__new__cs2tj}|j}|dks"|dkr&dS|j||S)N)super__call__rr)rr%r&) __class__rrr(Bs  zWeakMethod.__call__cCs>t|tr:|j s|j r"||kStj||o8|j|jkSdS)NF) isinstancerrr__eq__r)rotherrrrr+Is  zWeakMethod.__eq__cCs>t|tr:|j s|j r"||k Stj||p8|j|jkSdS)NT)r*rrr__ne__r)rr,rrrr-Ps  zWeakMethod.__ne__)rrrr)N) __name__ __module__ __qualname__ __slots__r"r(r+r-r__hash__ __classcell__rr)r)rr$s   c@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ e Z ddZ d*ddZddZddZeZddZddZd d!Zd"d#Zd+d$d%Zd&d'Zd(d)ZdS),rcst|s td|^}}t|dkr0tdt|t|tffdd }||_g|_t|_i|_|j ||dS)NzGdescriptor '__init__' of 'WeakValueDictionary' object needs an argumentz$expected at most 1 arguments, got %dcs4|}|dk r0|jr$|jj|jn ||jdS)N) _iterating_pending_removalsappendkey)wrselfref_atomic_removalr)drrremovems z,WeakValueDictionary.__init__..remove) rlenrr _remover6setr5dataupdate)argskwrr=r)r<r__init__fs   zWeakValueDictionary.__init__cCs,|j}|j}x|r&|j}t||qWdS)N)r6rApopr )rlr<r8rrr_commit_removals}s z$WeakValueDictionary._commit_removalscCs4|jr|j|j|}|dkr,t|n|SdS)N)r6rHrAKeyError)rr8orrr __getitem__s   zWeakValueDictionary.__getitem__cCs|jr|j|j|=dS)N)r6rHrA)rr8rrr __delitem__szWeakValueDictionary.__delitem__cCs|jr|jt|jS)N)r6rHr>rA)rrrr__len__szWeakValueDictionary.__len__c Cs<|jr|jy|j|}Wntk r2dSX|dk S)NF)r6rHrArI)rr8rJrrr __contains__sz WeakValueDictionary.__contains__cCsd|jjt|fS)Nz <%s at %#x>)r)r.id)rrrr__repr__szWeakValueDictionary.__repr__cCs&|jr|jt||j||j|<dS)N)r6rHKeyedRefr?rA)rr8valuerrr __setitem__szWeakValueDictionary.__setitem__cCsF|jr|jt}x,|jjD]\}}|}|dk r |||<q W|S)N)r6rHrrAitems)rnewr8r9rJrrrcopys zWeakValueDictionary.copycCsZddlm}|jr|j|j}x2|jjD]$\}}|}|dk r.|||||<q.W|S)Nr)deepcopy)rVrWr6rHr)rArT)rmemorWrUr8r9rJrrr __deepcopy__s z WeakValueDictionary.__deepcopy__Nc CsL|jr|jy|j|}Wntk r0|SX|}|dkrD|S|SdS)N)r6rHrArI)rr8defaultr9rJrrrgetszWeakValueDictionary.getc csV|jr|jt|6x.|jjD] \}}|}|dk r$||fVq$WWdQRXdS)N)r6rHr rArT)rkr9vrrrrTs zWeakValueDictionary.itemsc csN|jr|jt|.x&|jjD]\}}|dk r$|Vq$WWdQRXdS)N)r6rHr rArT)rr\r9rrrkeyss   zWeakValueDictionary.keysc cs6|jr|jt||jjEdHWdQRXdS)N)r6rHr rAvalues)rrrr itervaluerefss  z!WeakValueDictionary.itervaluerefsc csN|jr|jt|.x&|jjD]}|}|dk r$|Vq$WWdQRXdS)N)r6rHr rAr_)rr9r%rrrr_s zWeakValueDictionary.valuescCs<|jr|jx(|jj\}}|}|dk r||fSqWdS)N)r6rHrApopitem)rr8r9rJrrrraszWeakValueDictionary.popitemc Gs`|jr|jy|jj|}Wntk r8d}YnX|dkrX|rN|dSt|n|SdS)Nr)r6rHrArFrI)rr8rCrJrrrrFs  zWeakValueDictionary.popc Cs`y|j|}Wntk r(d}YnX|dkrX|jr@|jt||j||j|<|S|SdS)N)rArIr6rHrQr?)rr8rZrJrrr setdefaults zWeakValueDictionary.setdefaultcOs|s td|^}}t|dkr0tdt||r<|dnd}|jrN|j|j}|dk rt|dsrti|}x&|jD]\}}t||j |||<q|Wt|r|j |dS)NzEdescriptor 'update' of 'WeakValueDictionary' object needs an argumentr4z$expected at most 1 arguments, got %drrT) rr>r6rHrAhasattrr!rTrQr?rB)rCkwargsrdictr<r8rJrrrrB s    zWeakValueDictionary.updatecCs|jr|jt|jjS)N)r6rHlistrAr_)rrrr valuerefs3s zWeakValueDictionary.valuerefs)N)N)r.r/r0rErHrKrLrMrNrPrSrV__copy__rYr[rTr^__iter__r`r_rarFrbrBrgrrrrrZs,          cs(eZdZdZddZfddZZS)rQr8cCstj|||}||_|S)N)rr"r8)r!obrr8rrrrr"NszKeyedRef.__new__cstj||dS)N)r'rE)rrjrr8)r)rrrESszKeyedRef.__init__)r8)r.r/r0r1r"rEr3rr)r)rrQBs rQc@seZdZd*ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ e Z ddZ d+ddZddZddZddZeZddZd d!Zd"d#Zd$d%Zd,d&d'Zd-d(d)ZdS).r NcCsFi|_t|fdd}||_g|_t|_d|_|dk rB|j|dS)NcSs.|}|dk r*|jr"|jj|n|j|=dS)N)r5r6r7rA)r\r:rrrrr=ds z*WeakKeyDictionary.__init__..removeF)rArr?r6r@r5 _dirty_lenrB)rrer=rrrrEbszWeakKeyDictionary.__init__c Cs>|j}|j}x,|r8y||j=Wqtk r4YqXqWdS)N)r6rArFrI)rrGr<rrrrHssz"WeakKeyDictionary._commit_removalscs&|jfdd|jD|_d|_dS)Ncsg|]}|kr|qSrr).0r\)r<rr sz5WeakKeyDictionary._scrub_removals..F)rAr6rk)rr)r<r_scrub_removalssz!WeakKeyDictionary._scrub_removalscCsd|_|jt|=dS)NT)rkrAr)rr8rrrrLszWeakKeyDictionary.__delitem__cCs|jt|S)N)rAr)rr8rrrrKszWeakKeyDictionary.__getitem__cCs(|jr|jr|jt|jt|jS)N)rkr6rnr>rA)rrrrrMs zWeakKeyDictionary.__len__cCsd|jjt|fS)Nz <%s at %#x>)r)r.rO)rrrrrPszWeakKeyDictionary.__repr__cCs||jt||j<dS)N)rArr?)rr8rRrrrrSszWeakKeyDictionary.__setitem__cCs8t}x,|jjD]\}}|}|dk r|||<qW|S)N)r rArT)rrUr8rRrJrrrrVs  zWeakKeyDictionary.copycCsLddlm}|j}x2|jjD]$\}}|}|dk r |||||<q W|S)Nr)rW)rVrWr)rArT)rrXrWrUr8rRrJrrrrYs zWeakKeyDictionary.__deepcopy__cCs|jjt||S)N)rAr[r)rr8rZrrrr[szWeakKeyDictionary.getc Cs,y t|}Wntk r dSX||jkS)NF)rrrA)rr8r9rrrrNs  zWeakKeyDictionary.__contains__c csHt|6x.|jjD] \}}|}|dk r||fVqWWdQRXdS)N)r rArT)rr9rRr8rrrrTs  zWeakKeyDictionary.itemsc cs<t|*x"|jD]}|}|dk r|VqWWdQRXdS)N)r rA)rr9r%rrrr^s   zWeakKeyDictionary.keysc cs@t|.x&|jjD]\}}|dk r|VqWWdQRXdS)N)r rArT)rr9rRrrrr_s  zWeakKeyDictionary.valuescCs t|jS)N)rfrA)rrrrkeyrefss zWeakKeyDictionary.keyrefscCs4d|_x(|jj\}}|}|dk r||fSqWdS)NT)rkrAra)rr8rRrJrrrras zWeakKeyDictionary.popitemcGsd|_|jjt|f|S)NT)rkrArFr)rr8rCrrrrFszWeakKeyDictionary.popcCs|jjt||j|S)N)rArbrr?)rr8rZrrrrbszWeakKeyDictionary.setdefaultcKs`|j}|dk rJt|ds$ti|}x$|jD]\}}||t||j<q.Wt|r\|j|dS)NrT)rArcr!rTrr?r>rB)rrerdr<r8rRrrrrBs  zWeakKeyDictionary.update)N)N)N)N)r.r/r0rErHrnrLrKrMrPrSrVrhrYr[rNrTr^rir_rorarFrbrBrrrrr Ws,     c@seZdZfZiZdZejZdZ dZ GdddZ ddZ dddZ d d Zd d Zed dZeddZejddZddZeddZeddZdS)rFc@seZdZdZdS) zfinalize._Infoweakrefr&rCrdatexitindexN)rpr&rCrdrqrr)r.r/r0r1rrrr_Info srscOsp|js ddl}|j|jdt_|j}t|||_||_||_ |pFd|_ d|_t |j |_ ||j|<dt_dS)NrT)_registered_with_atexitrqregister _exitfuncrrsrrpr&rCrdnext _index_iterrr _registry_dirty)rr%r&rCrdrqinforrrrEs     zfinalize.__init__NcCs2|jj|d}|r.|j r.|j|j|jp*iSdS)N)ryrF _shutdownr&rCrd)r_r{rrrr(s zfinalize.__call__cCsH|jj|}|o|j}|dk rD|jj|drD||j|j|jp@ifSdS)N)ryr[rprFr&rCrd)rr{r%rrrdetach&s  zfinalize.detachcCs:|jj|}|o|j}|dk r6||j|j|jp2ifSdS)N)ryr[rpr&rCrd)rr{r%rrrpeek.s  z finalize.peekcCs ||jkS)N)ry)rrrralive6szfinalize.alivecCs|jj|}t|o|jS)N)ryr[boolrq)rr{rrrrq;s zfinalize.atexitcCs|jj|}|rt||_dS)N)ryr[rrq)rrRr{rrrrqAs cCs^|jj|}|o|j}|dkr6dt|jt|fSdt|jt|t|jt|fSdS)Nz<%s object at %#x; dead>z!<%s object at %#x; for %r at %#x>)ryr[rpr!r.rO)rr{r%rrrrPGs   zfinalize.__repr__cCs2dd|jjD}|jddddd|DS)NcSsg|]\}}|jr||fqSr)rq)rlfirrrrmSsz-finalize._select_for_exit..cSs |djS)Nr4)rr)itemrrrTsz+finalize._select_for_exit..)r8cSsg|] \}}|qSrr)rlrrrrrrmUs)ryrTsort)r#Lrrr_select_for_exitPszfinalize._select_for_exitcCsd}z|jrddl}|jr(d}|jd}x\|dks s (  6i