U
    adg                     @   s2   d dl mZ dgZG dd dZG dd dZdS )    refWeakSetc                   @   s$   e Zd Zdd Zdd Zdd ZdS )_IterationGuardc                 C   s   t || _d S N)r   weakcontainer)selfr    r	   !/usr/lib/python3.8/_weakrefset.py__init__   s    z_IterationGuard.__init__c                 C   s    |   }|d k	r|j|  | S r   )r   
_iteratingadd)r   wr	   r	   r
   	__enter__   s    z_IterationGuard.__enter__c                 C   s0   |   }|d k	r,|j}||  |s,|  d S r   )r   r   remove_commit_removals)r   etbr   sr	   r	   r
   __exit__   s    
z_IterationGuard.__exit__N)__name__
__module____qualname__r   r   r   r	   r	   r	   r
   r   
   s   r   c                   @   s  e Zd Zd@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d Zdd Zdd Zdd Zdd Zdd Zdd ZeZd d! Zd"d# Zd$d% ZeZd&d' Zd(d) Zd*d+ ZeZd,d- Zd.d/ ZeZd0d1 Zd2d3 Zd4d5 Z e Z!d6d7 Z"d8d9 Z#d:d; Z$e$Z%d<d= Z&d>d? Z'dS )Ar   Nc                 C   sB   t  | _t| fdd}|| _g | _t  | _|d k	r>| | d S )Nc                 S   s2   | }|d k	r.|j r"|j|  n|j|  d S r   )r   _pending_removalsappenddatadiscard)itemZselfrefr   r	   r	   r
   _remove&   s
    z!WeakSet.__init__.<locals>._remove)setr   r   r   r   r   update)r   r   r   r	   r	   r
   r   $   s    zWeakSet.__init__c                 C   s$   | j }| jj}|r ||  qd S r   )r   r   r   pop)r   lr   r	   r	   r
   r   4   s    zWeakSet._commit_removalsc              	   c   s8   t | & | jD ]}| }|d k	r|V  qW 5 Q R X d S r   )r   r   r   Zitemrefr   r	   r	   r
   __iter__:   s
    

zWeakSet.__iter__c                 C   s   t | jt | j S r   )lenr   r   r   r	   r	   r
   __len__C   s    zWeakSet.__len__c                 C   s.   zt |}W n tk
r"   Y dS X || jkS )NF)r   	TypeErrorr   )r   r   Zwrr	   r	   r
   __contains__F   s
    zWeakSet.__contains__c                 C   s   | j t| ft| dd fS )N__dict__)	__class__listgetattrr'   r	   r	   r
   
__reduce__M   s    
zWeakSet.__reduce__c                 C   s&   | j r|   | jt|| j d S r   )r   r   r   r   r   r   r   r   r	   r	   r
   r   Q   s    zWeakSet.addc                 C   s   | j r|   | j  d S r   )r   r   r   clearr'   r	   r	   r
   r1   V   s    zWeakSet.clearc                 C   s
   |  | S r   r,   r'   r	   r	   r
   copy[   s    zWeakSet.copyc                 C   sT   | j r|   z| j }W n tk
r:   tdd Y nX | }|d k	r|S qd S )Nzpop from empty WeakSet)r   r   r   r"   KeyErrorr$   r	   r	   r
   r"   ^   s    zWeakSet.popc                 C   s"   | j r|   | jt| d S r   )r   r   r   r   r   r0   r	   r	   r
   r   j   s    zWeakSet.removec                 C   s"   | j r|   | jt| d S r   )r   r   r   r   r   r0   r	   r	   r
   r   o   s    zWeakSet.discardc                 C   s&   | j r|   |D ]}| | qd S r   )r   r   r   )r   otherZelementr	   r	   r
   r!   t   s    zWeakSet.updatec                 C   s   |  | | S r   )r!   r   r5   r	   r	   r
   __ior__z   s    
zWeakSet.__ior__c                 C   s   |   }|| |S r   )r3   difference_updater   r5   Znewsetr	   r	   r
   
difference~   s    
zWeakSet.differencec                 C   s   |  | d S r   )__isub__r6   r	   r	   r
   r8      s    zWeakSet.difference_updatec                 C   s<   | j r|   | |kr"| j  n| jdd |D  | S )Nc                 s   s   | ]}t |V  qd S r   r   .0r   r	   r	   r
   	<genexpr>   s     z#WeakSet.__isub__.<locals>.<genexpr>)r   r   r   r1   r8   r6   r	   r	   r
   r;      s    zWeakSet.__isub__c                    s      fdd|D S )Nc                 3   s   | ]}| kr|V  qd S r   r	   r<   r'   r	   r
   r>      s      z'WeakSet.intersection.<locals>.<genexpr>r2   r6   r	   r'   r
   intersection   s    zWeakSet.intersectionc                 C   s   |  | d S r   )__iand__r6   r	   r	   r
   intersection_update   s    zWeakSet.intersection_updatec                 C   s(   | j r|   | jdd |D  | S )Nc                 s   s   | ]}t |V  qd S r   r   r<   r	   r	   r
   r>      s     z#WeakSet.__iand__.<locals>.<genexpr>)r   r   r   rA   r6   r	   r	   r
   r@      s    zWeakSet.__iand__c                 C   s   | j dd |D S )Nc                 s   s   | ]}t |V  qd S r   r   r<   r	   r	   r
   r>      s     z#WeakSet.issubset.<locals>.<genexpr>)r   issubsetr6   r	   r	   r
   rB      s    zWeakSet.issubsetc                 C   s   | j ttt|k S r   r   r    mapr   r6   r	   r	   r
   __lt__   s    zWeakSet.__lt__c                 C   s   | j dd |D S )Nc                 s   s   | ]}t |V  qd S r   r   r<   r	   r	   r
   r>      s     z%WeakSet.issuperset.<locals>.<genexpr>)r   
issupersetr6   r	   r	   r
   rF      s    zWeakSet.issupersetc                 C   s   | j ttt|kS r   rC   r6   r	   r	   r
   __gt__   s    zWeakSet.__gt__c                 C   s$   t || jstS | jttt|kS r   )
isinstancer,   NotImplementedr   r    rD   r   r6   r	   r	   r
   __eq__   s    zWeakSet.__eq__c                 C   s   |   }|| |S r   )r3   symmetric_difference_updater9   r	   r	   r
   symmetric_difference   s    
zWeakSet.symmetric_differencec                 C   s   |  | d S r   )__ixor__r6   r	   r	   r
   rK      s    z#WeakSet.symmetric_difference_updatec                    s@    j r    |kr" j  n j fdd|D   S )Nc                 3   s   | ]}t | jV  qd S r   )r   r   r<   r'   r	   r
   r>      s     z#WeakSet.__ixor__.<locals>.<genexpr>)r   r   r   r1   rK   r6   r	   r'   r
   rM      s    zWeakSet.__ixor__c                 C   s   |  dd | |fD S )Nc                 s   s   | ]}|D ]
}|V  q
qd S r   r	   )r=   r   r   r	   r	   r
   r>      s       z WeakSet.union.<locals>.<genexpr>r2   r6   r	   r	   r
   union   s    zWeakSet.unionc                 C   s   t | |dkS )Nr   )r&   r?   r6   r	   r	   r
   
isdisjoint   s    zWeakSet.isdisjointc                 C   s
   t | jS r   )reprr   r'   r	   r	   r
   __repr__   s    zWeakSet.__repr__)N)(r   r   r   r   r   r%   r(   r*   r/   r   r1   r3   r"   r   r   r!   r7   r:   __sub__r8   r;   r?   __and__rA   r@   rB   __le__rE   rF   __ge__rG   rJ   rL   __xor__rK   rM   rN   __or__rO   rQ   r	   r	   r	   r
   r   #   sJ   
			N)_weakrefr   __all__r   r   r	   r	   r	   r
   <module>   s   