3 \I�@s2ddlmZdgZGdd�d�ZGdd�d�ZdS)�)�ref�WeakSetc@s$eZdZdd�Zdd�Zdd�ZdS)�_IterationGuardcCst|�|_dS)N)r� weakcontainer)�selfr�r�#/usr/lib64/python3.6/_weakrefset.py�__init__sz_IterationGuard.__init__cCs |j�}|dk r|jj|�|S)N)r� _iterating�add)r�wrrr� __enter__s z_IterationGuard.__enter__cCs0|j�}|dk r,|j}|j|�|s,|j�dS)N)rr �remove�_commit_removals)r�e�t�br �srrr�__exit__s  z_IterationGuard.__exit__N)�__name__� __module__� __qualname__r r rrrrrr src@seZdZd>dd�Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�ZeZd d!�Zd"d#�Zd$d%�ZeZd&d'�Zd(d)�Zd*d+�ZeZd,d-�Zd.d/�ZeZd0d1�Zd2d3�Zd4d5�Z e Z!d6d7�Z"d8d9�Z#d:d;�Z$e$Z%d|j|�dS)NcSs2|�}|dk r.|jr"|jj|�n |jj|�dS)N)r �_pending_removals�append�data�discard)�item�selfrefrrrr�_remove&s z!WeakSet.__init__.._remove)�setrrrrr �update)rrrrrrr $szWeakSet.__init__cCs(|j}|jj}x|r"||j��qWdS)N)rrr�pop)r�lrrrrr4szWeakSet._commit_removalsc cs<t|��*x"|jD]}|�}|dk r|VqWWdQRXdS)N)rr)r�itemrefrrrr�__iter__:s   zWeakSet.__iter__cCst|j�t|j�S)N)�lenrr)rrrr�__len__CszWeakSet.__len__c Cs,y t|�}Wntk r dSX||jkS)NF)r� TypeErrorr)rr�wrrrr� __contains__Fs  zWeakSet.__contains__cCs|jt|�ft|dd�fS)N�__dict__)� __class__�list�getattr)rrrr� __reduce__Ms zWeakSet.__reduce__cCs&|jr|j�|jjt||j��dS)N)rrrr rr)rrrrrr Qsz WeakSet.addcCs|jr|j�|jj�dS)N)rrr�clear)rrrrr/Vsz WeakSet.clearcCs |j|�S)N)r+)rrrr�copy[sz WeakSet.copyc CsV|jr|j�xBy|jj�}Wntk r:td��YnX|�}|dk r|SqWdS)Nzpop from empty WeakSet)rrrr!�KeyError)rr#rrrrr!^sz WeakSet.popcCs"|jr|j�|jjt|��dS)N)rrrrr)rrrrrrjszWeakSet.removecCs"|jr|j�|jjt|��dS)N)rrrrr)rrrrrroszWeakSet.discardcCs*|jr|j�x|D]}|j|�qWdS)N)rrr )r�other�elementrrrr ts zWeakSet.updatecCs|j|�|S)N)r )rr2rrr�__ior__zs zWeakSet.__ior__cCs|j�}|j|�|S)N)r0�difference_update)rr2�newsetrrr� difference~s zWeakSet.differencecCs|j|�dS)N)�__isub__)rr2rrrr5�szWeakSet.difference_updatecCs<|jr|j�||kr"|jj�n|jjdd�|D��|S)Ncss|]}t|�VqdS)N)r)�.0rrrr� �sz#WeakSet.__isub__..)rrrr/r5)rr2rrrr8�s  zWeakSet.__isub__cs�j�fdd�|D��S)Nc3s|]}|�kr|VqdS)Nr)r9r)rrrr:�sz'WeakSet.intersection..)r+)rr2r)rr� intersection�szWeakSet.intersectioncCs|j|�dS)N)�__iand__)rr2rrr�intersection_update�szWeakSet.intersection_updatecCs(|jr|j�|jjdd�|D��|S)Ncss|]}t|�VqdS)N)r)r9rrrrr:�sz#WeakSet.__iand__..)rrrr=)rr2rrrr<�szWeakSet.__iand__cCs|jjdd�|D��S)Ncss|]}t|�VqdS)N)r)r9rrrrr:�sz#WeakSet.issubset..)r�issubset)rr2rrrr>�szWeakSet.issubsetcCs|jtdd�|D��kS)Ncss|]}t|�VqdS)N)r)r9rrrrr:�sz!WeakSet.__lt__..)rr)rr2rrr�__lt__�szWeakSet.__lt__cCs|jjdd�|D��S)Ncss|]}t|�VqdS)N)r)r9rrrrr:�sz%WeakSet.issuperset..)r� issuperset)rr2rrrr@�szWeakSet.issupersetcCs|jtdd�|D��kS)Ncss|]}t|�VqdS)N)r)r9rrrrr:�sz!WeakSet.__gt__..)rr)rr2rrr�__gt__�szWeakSet.__gt__cCs(t||j�stS|jtdd�|D��kS)Ncss|]}t|�VqdS)N)r)r9rrrrr:�sz!WeakSet.__eq__..)� isinstancer+�NotImplementedrr)rr2rrr�__eq__�s zWeakSet.__eq__cCs|j�}|j|�|S)N)r0�symmetric_difference_update)rr2r6rrr�symmetric_difference�s zWeakSet.symmetric_differencecCs|j|�dS)N)�__ixor__)rr2rrrrE�sz#WeakSet.symmetric_difference_updatecs@�jr�j��|kr"�jj�n�jj�fdd�|D���S)Nc3s|]}t|�j�VqdS)N)rr)r9r)rrrr:�sz#WeakSet.__ixor__..)rrrr/rE)rr2r)rrrG�s  zWeakSet.__ixor__cCs|jdd�||fD��S)Ncss|]}|D] }|Vq qdS)Nr)r9rrrrrr:�sz WeakSet.union..)r+)rr2rrr�union�sz WeakSet.unioncCst|j|��dkS)Nr)r%r;)rr2rrr� isdisjoint�szWeakSet.isdisjoint)N)'rrrr rr$r&r)r.r r/r0r!rrr r4r7�__sub__r5r8r;�__and__r=r<r>�__le__r?r@�__ge__rArDrF�__xor__rErGrH�__or__rIrrrrr#sH     N)�_weakrefr�__all__rrrrrr�s