
    g,                         d dl mZ ddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ d	 Z G d
 de      ZddZy)   )	Interface    )Lock)
merge_withtopk
accumulatepluck)add)bisect)defaultdict)QueueEmptyc                       yNr    r       ,lib/python3.12/site-packages/partd/buffer.pyzeror   
   s    r   c                   T    e Zd ZddZd Zd ZddZddZddZddZ	d Z
d	 ZddZy
)Bufferc                     t               | _        || _        || _        || _        t        t              | _        d| _        t        j                  |        y r   )r   lockfastslowavailable_memoryr   r   lengthsmemory_usager   __init__)selfr   r   r   s       r   r   zBuffer.__init__   sC    F			 0"4(4 r   c                 v    | j                   | j                  | j                  | j                  | j                  dS )Nr   r   r   r   r   r!   r   s    r   __getstate__zBuffer.__getstate__   s3    				 $ 1 1<<$($9$9	; 	;r   c                     t        j                  | |       t               | _        | j                  j                  |       y N)r   __setstate__r   r   __dict__update)r   states     r   r&   zBuffer.__setstate__   s-    tU+F	U#r   c                 ^   |r| j                   j                          	 |j                         D ]C  \  }}| j                  |xx   t	        |      z  cc<   | xj
                  t	        |      z  c_        E  | j                  j                  |fddi| | j
                  | j                  kD  rCt        | j                  dd      }| j                  |       | j
                  | j                  kD  rC|r| j                   j                          y y # |r| j                   j                          w w xY w)Nr   F皙?   )maxcount)r   acquireitemsr   lenr   r   appendr   keys_to_flushflushrelease)r   datar   kwargskvkeyss          r   r1   zBuffer.append#   s    ""$	)

1Q3q6)!!SV+! % DIIT888##d&;&;;$T\\3D

4  ##d&;&;;
 TYY&&(ttTYY&&(ts   CD D,c           
      \   |r| j                   j                          	 t        t        t        | j
                  j                  |d      | j                  j                  |d                  }|r| j                   j                          |S # |r| j                   j                          w w xY wNFr   )	r   r.   listmapr
   r   getr   r4   )r   r9   r   r6   results        r   _getzBuffer._get2   s    ""$	)#c499==E=#B#'99==E=#BD EF TYY&&( TYY&&(ts   AB B+c                     |r| j                   j                          	 | j                  j                  ||d       |r| j                   j	                          yy# |r| j                   j	                          w w xY w)z Idempotent set Fr<   N)r   r.   r   isetr4   )r   keyvaluer   s       r   _isetzBuffer._iset;   sX    ""$	)IINN3EN2TYY&&(ttTYY&&(ts   A A9c                 0   |r| j                   j                          	 | j                  j                  |d       | j                  j                  |d       |r| j                   j                          y y # |r| j                   j                          w w xY wr;   )r   r.   r   deleter   r4   )r   r9   r   s      r   _deletezBuffer._deleteC   sp    ""$	)IIT.IIT.TYY&&(ttTYY&&(ts   :A6 6Bc                     | j                   j                          | j                  j                          | j                  j                          y r%   )
_iset_seenclearr   dropr   r"   s    r   rM   zBuffer.dropK   s.    				r   c                 $    | j                          y r%   )rM   )r   argss     r   __exit__zBuffer.__exit__P   s    		r   Nc           
      b   |t        | j                        }| j                  j                  t	        t        || j                  j                  |                         | j                  j                  |       |D ]1  }| xj                  | j                  |   z  c_	        | j                  |= 3 y)a   Flush keys to disk

        Parameters
        ----------

        keys: list or None
            list of keys to flush
        block: bool (defaults to None)
            Whether or not to block until all writing is complete

        If no keys are given then flush all keys
        N)
r=   r   r   r1   dictzipr   r?   rH   r   )r   r9   blockrD   s       r   r3   zBuffer.flushS   s     <%D		c$		d(;<=>		Cc!22S! r   )g    eA)T)NN)__name__
__module____qualname__r   r#   r&   r1   rA   rF   rI   rM   rP   r3   r   r   r   r   r      s4    !;$
)))
"r   r   c                 f   t        t        t        |       dz  d      | j                         d      }t	        | j                               }t        |t        dt        t        t        t        t        d|                  ||z                    }|d| D cg c]  \  }}|	 }}}|sJ |S c c}}w )z Which keys to remove

    >>> lengths = {'a': 20, 'b': 10, 'c': 15, 'd': 15,
    ...            'e': 10, 'f': 25, 'g': 5}
    >>> keys_to_flush(lengths, 0.5)
    ['f', 'a']
       r   )rD   N)r   maxr0   r/   sumvaluesminr   r=   r   r
   r	   )	r   fractionr-   toptotalcutoffr7   r8   r@   s	            r   r2   r2   k   s     s3w<1$a(}}C  !E3q$z#uQ}=>(*,- .F  L)LDAqaLF)M6M *s   B-N)r+   i )corer   	threadingr   toolzr   r   r   r	   operatorr
   r   collectionsr   queuer   r   r   r   r2   r   r   r   <module>rh      s6      5 5   # ["Y ["|r   