
    0Fie                       d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZmZmZ  ede
          Z ede
          Z ed	          Z G d
 deeef                   Z G d dee                   ZddZdS )    )annotationsN)OrderedDictUserDict)CallableHashableIterableIteratorMapping
MutableSet)AnyTypeVarcastT)boundKVc                  <     e Zd ZdZd fdZd fd
Zd fdZ xZS )LRUzILimited size mapping, evicting the least recently looked-up key when fullmaxsizefloatreturnNonec                |    t                                                       t                      | _        || _        d S N)super__init__r   datar   )selfr   	__class__s     7lib/python3.11/site-packages/distributed/collections.pyr   zLRU.__init__   s/    MM	    keyr   r   c                    t                                          |          }t          t          | j                                      |           |S r   )r   __getitem__r   r   r   move_to_endr   r"   valuer   s      r    r$   zLRU.__getitem__   s?    ##C(([$)$$00555r!   r'   c                    t          |           | j        k    r.t          t          | j                                      d           t                                          ||           d S )NF)last)lenr   r   r   r   popitemr   __setitem__r&   s      r    r,   zLRU.__setitem__   sY    t99$$di((00e0<<<C'''''r!   )r   r   r   r   )r"   r   r   r   )r"   r   r'   r   r   r   )__name__
__module____qualname____doc__r   r$   r,   __classcell__)r   s   @r    r   r      s        SS     
     
( ( ( ( ( ( ( ( ( (r!   r   c                      e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   d+dZd,dZd-dZe	d.d            Z
d/dZd0dZd1dZd1dZd2d Zd3d#Zd2d$Zd2d%Zd2d&Zd4d'Zd4d(Zd5d)Zd*S )6HeapSeta  A set-like where the `pop` method returns the smallest item, as sorted by an
    arbitrary key function. Ties are broken by oldest first.

    Values must be compatible with :mod:`weakref`.

    Parameters
    ----------
    key: Callable
        A function that takes a single element of the collection as a parameter and
        returns a sorting key. The key does not need to be hashable and does not need to
        support :mod:`weakref`.

    Note
    ----
    The key returned for each element should not to change over time. If it does, the
    position in the heap won't change, even if the element is re-added, and it *may* not
    change even if it's discarded and then re-added later.
    )r"   _data_heap_inc_sortedCallable[[T], Any]r"   zset[T]r4   z%list[tuple[Any, int, weakref.ref[T]]]r5   intr6   boolr7   c               d    || _         t                      | _        d| _        g | _        d| _        d S )Nr   T)r"   setr4   r6   r5   r7   )r   r"   s     r    r   zHeapSet.__init__=   s-    UU
	
r!   r   strc                R    dt          |           j         dt          |            dS )N<z: z items>)typer-   r*   r   s    r    __repr__zHeapSet.__repr__D   s*    <4::&<<#d))<<<<r!   tuple[Callable, tuple]c                d      fd j         D             }t          j         j         j        |ffS )Nc                H    g | ]\  }}} |            xj         v ||fS  r4   ).0kivrefr   vs       r    
<listcomp>z&HeapSet.__reduce__.<locals>.<listcomp>H   s;    VVVjaD;14::U:UAq	:U:U:Ur!   )r5   r3   	_unpickler"   r6   )r   heaprL   s   ` @r    
__reduce__zHeapSet.__reduce__G   s;    VVVVVDJVVV 48TY"===r!   incrO   list[tuple[Any, int, T]]
HeapSet[T]c                    t                               t                    }| |_        d |D             |_        ||_        d |D             |_        t          j        |j                   | |_	        |S )Nc                    h | ]\  }}}|	S rF   rF   )rH   _rL   s      r    	<setcomp>z$HeapSet._unpickle.<locals>.<setcomp>Q   s    ,,,GAq!a,,,r!   c                D    g | ]\  }}}||t          j        |          fS rF   )weakrefref)rH   rI   rJ   rL   s       r    rM   z%HeapSet._unpickle.<locals>.<listcomp>S   s-    AAAAqq!W[^^,AAAr!   )
object__new__r3   r"   r4   r6   r5   heapqheapifyr7   )r"   rQ   rO   r   s       r    rN   zHeapSet._unpickleK   sm     ~~g&&,,t,,,
	AADAAA
dj!!!xr!   r'   r[   c                    || j         v S r   rG   r   r'   s     r    __contains__zHeapSet.__contains__X   s    
""r!   c                *    t          | j                  S r   )r*   r4   rA   s    r    __len__zHeapSet.__len__[   s    4:r!   r   r   c                   || j         v rd S |                     |          }t          j        |          }t	          j        | j        || j        |f           d| _        | j         	                    |           | xj        dz  c_        d S )NF   )
r4   r"   rY   rZ   r]   heappushr5   r6   r7   add)r   r'   rI   rK   s       r    rg   zHeapSet.add^   s}    DJFHHUOO{5!!tzAty$#7888
u		Q				r!   c                t    | j                             |           | j         s|                                  d S d S r   )r4   discardclearr`   s     r    ri   zHeapSet.discardh   s=    
5!!!z 	JJLLLLL	 	r!   c                    | j         st          d          	  | j        d         d                     }|| j         v r|S t          j        | j                   d| _        G)z/Return the smallest element without removing itpeek into empty setTr      F)r4   KeyErrorr5   r]   heappopr7   r`   s     r    peekzHeapSet.peekm   sh    z 	20111	!$DJqM!$&&E
""M$*%%% DL	!r!   nIterator[T]c              #     K   |dk    s| sdS |dk    r|                                  V  dS t          j        |                                 |          E d{V  dS )zzIterate over the n smallest elements without removing them.
        This is O(1) for n == 1; O(n*logn) otherwise.
        r   Nre   )rp   	itertoolsislicesorted)r   rq   s     r    peeknzHeapSet.peeknx   sr       666F66))++ !'q99999999999r!   c                   | j         st          d          	 t          j        | j                  \  }}}d| _         |            }|| j         v r7| j                             |           | j         s|                                  |S o)Npop from an empty setTF)r4   rn   r]   ro   r5   r7   ri   rj   r   rV   rK   r'   s       r    popzHeapSet.pop   s    z 	42333	tz22JAq$ DLDFFE
""
""5)))z !JJLLL	r!   c                    | j         st          d          	  | j        d         d                     }|| j         v r|S | j        d= /)zReturn one of the largest elements (not necessarily the largest!) without
        removing it. It's guaranteed that ``self.peekright() >= self.peek()``.
        rl   Trm   )r4   rn   r5   r`   s     r    	peekrightzHeapSet.peekright   sZ     z 	20111	%DJrN1%''E
""
2		r!   c                    | j         st          d          	 | j                                        \  }}} |            }|| j         v r7| j                             |           | j         s|                                  |S h)zRemove and return one of the largest elements (not necessarily the largest!)
        It's guaranteed that ``self.popright() >= self.peek()``.
        ry   )r4   rn   r5   r{   ri   rj   rz   s       r    poprightzHeapSet.popright   s     z 	42333	))JAq$DFFE
""
""5)))z !JJLLL	r!   c                *    t          | j                  S )zwIterate over all elements. This is a O(n) operation which returns the
        elements in pseudo-random order.
        )iterr4   rA   s    r    __iter__zHeapSet.__iter__   s     DJr!   c              #     K   | j         s | j                                         d| _         t                      }| j        D ]6\  }}} |            }|| j        v r||vr|V  |                    |           7dS )zIterate over all elements. This is a O(n*logn) operation which returns the
        elements in order, from smallest to largest according to the key and insertion
        order.
        TN)r7   r5   sortr<   r4   rg   )r   seenrV   rK   r'   s        r    rv   zHeapSet.sorted   s      
 | 	 JOODLuu* 	  	 JAq$DFFE
""uD'8'8		  	 r!   c                x    | j                                          | j                                         d| _        d S )NT)r4   rj   r5   r7   rA   s    r    rj   zHeapSet.clear   s5    

r!   N)r"   r8   )r   r=   )r   rC   )r"   r8   rQ   r9   rO   rR   r   rS   )r'   r[   r   r:   )r   r9   )r'   r   r   r   )r   r   )rq   r9   r   rr   )r   rr   )r   r   )r-   r.   r/   r0   	__slots____annotations__r   rB   rP   staticmethodrN   ra   rc   rg   ri   rp   rw   r{   r~   r   r   rv   rj   rF   r!   r    r3   r3   "   s         & =IMMM0000IIIMMM   = = = => > > > 
 
 
 \
# # # #         
	! 	! 	! 	!: : : :    
 
 
 
                      r!   r3   ds/Iterable[Mapping[K, V] | Iterable[tuple[K, V]]]r   
dict[K, V]c                   i }| D ]Y}t          |t                    r|                                }|D ]+\  }}	 ||xx         |z  cc<   # t          $ r |||<   Y (w xY wZ|S )z0Sum the values of the given mappings, key by key)
isinstancer
   itemsrn   )r   outdrI   rL   s        r    sum_mappingsr      s    C  a!! 			A 	 	DAqA!   A	
 Js   A		AA)r   r   r   r   )
__future__r   r]   rt   rY   collectionsr   r   collections.abcr   r   r   r	   r
   r   typingr   r   r   r   r   r   r   r3   r   rF   r!   r    <module>r      sW   " " " " " "       - - - - - - - - W W W W W W W W W W W W W W W W % % % % % % % % % %GCx   GCx   GCLL( ( ( ( ((1a4. ( ( (&f f f f fjm f f fR     r!   