
    n%@e,                         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dS )   )	Interface    )Lock)
merge_withtopk
accumulatepluck)add)bisect)defaultdict)QueueEmptyc                      dS Nr    r       ,lib/python3.11/site-packages/partd/buffer.pyzeror   
   s    1r   c                   V    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dS )Buffer    eAc                     t                      | _        || _        || _        || _        t          t                    | _        d| _        t          j
        |            d S r   )r   lockfastslowavailable_memoryr   r   lengthsmemory_usager   __init__)selfr   r   r   s       r   r   zBuffer.__init__   sQ    FF			 0"4((4     r   c                 D    | j         | j        | j        | j        | j        dS )Nr   r   r   r   r   r"   r    s    r   __getstate__zBuffer.__getstate__   s,    		 $ 1<$($9	; ; 	;r   c                     t          j        | |           t                      | _        | j                            |           d S N)r   __setstate__r   r   __dict__update)r    states     r   r'   zBuffer.__setstate__   s<    tU+++FF	U#####r   Tc                 .   |r| j                                          	 |                                D ]D\  }}| j        |xx         t	          |          z  cc<   | xj        t	          |          z  c_        E | j        j        |fddi| | j        | j        k    r<t          | j        dd          }| 
                    |           | j        | j        k    <|r| j                                          d S d S # |r| 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   r2   zBuffer.append#   s-   $""$$$	)

 , ,1Q3q66)!!SVV+!!!DIT888888#d&;;;$T\3DDD

4    #d&;;;
 (TY&&(((((((t(TY&&(((((s   B:C6 6Dc           
      f   |r| j                                          	 t          t          t          | j                            |d          | j                            |d                              }|r| j                                          n!# |r| j                                          w w xY w|S NFr   )	r   r/   listmapr
   r   getr   r5   )r    r:   r   r7   results        r   _getzBuffer._get2   s    $""$$$	)#c49==E=#B#B#'9==E=#B#BD D E EF (TY&&(((t(TY&&(((((s   AB B.c                     |r| j                                          	 | j                            ||d           |r| j                                          dS dS # |r| j                                          w w xY w)z Idempotent set Fr=   N)r   r/   r   isetr5   )r    keyvaluer   s       r   _isetzBuffer._iset;   s    $""$$$	)INN3EN222(TY&&(((((((t(TY&&(((((s   A A7c                 *   |r| j                                          	 | j                            |d           | j                            |d           |r| j                                          d S d S # |r| j                                          w w xY wr<   )r   r/   r   deleter   r5   )r    r:   r   s      r   _deletezBuffer._deleteC   s    $""$$$	)IT...IT...(TY&&(((((((t(TY&&(((((s   8A4 4Bc                     | j                                          | j                                         | j                                         d S r&   )
_iset_seenclearr   dropr   r#   s    r   rN   zBuffer.dropK   s@    		r   c                 .    |                                   d S r&   )rN   )r    argss     r   __exit__zBuffer.__exit__P   s    		r   Nc           
      P   |t          | j                  }| j                            t	          t          || j                            |                                         | j                            |           |D ]%}| xj	        | j        |         z  c_	        | j        |= &dS )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   r2   dictzipr   r@   rI   r   )r    r:   blockrE   s       r   r4   zBuffer.flushS   s     <%%D	c$	d(;(;<<==>>>	 	" 	"Cc!22S!!	" 	"r   )r   )T)NN)__name__
__module____qualname__r   r$   r'   r2   rB   rG   rJ   rN   rQ   r4   r   r   r   r   r      s        ! ! ! !; ; ;$ $ $
) ) ) )   ) ) ) )) ) ) )  
  " " " " " "r   r   r,   順 c                    t          t          t          |           dz  d          |                                 d          }t	          |                                           }t          |t          dt          t          t          t          t          d|                              ||z                                }d |d|         D             }|sJ |S )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   )rE   c                     g | ]\  }}|S r   r   ).0r8   r9   s      r   
<listcomp>z!keys_to_flush.<locals>.<listcomp>z   s    )))DAqa)))r   N)r   maxr1   r0   sumvaluesminr   r>   r   r
   r	   )r   fractionr.   toptotalcutoffrA   s          r   r3   r3   k   s     s3w<<1$a((}}  C   !!E3q$z#uQ}}==>>(*, ,- - . .F *)CL)))FMMMMr   N)r,   rY   )corer   	threadingr   toolzr   r   r   r	   operatorr
   r   collectionsr   queuer   r   r   r   r3   r   r   r   <module>rm      s                5 5 5 5 5 5 5 5 5 5 5 5             # # # # # #          [" [" [" [" ["Y [" [" ["|     r   