o
    Nrf,                     @   s   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	d
 ZG dd deZdddZdS )   )	Interface    )Lock)
merge_withtopk
accumulatepluck)add)bisect)defaultdict)QueueEmptyc                   C   s   dS Nr    r   r   r   U/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/partd/buffer.pyzero
   s   r   c                   @   sh   e Zd ZdddZdd Zdd Zdd	d
ZdddZdddZdddZ	dd Z
dd ZdddZdS )Buffer    eAc                 C   s8   t  | _|| _|| _|| _tt| _d| _t	
|  d S r   )r   lockfastslowavailable_memoryr   r   lengthsmemory_usager   __init__)selfr   r   r   r   r   r   r      s   
zBuffer.__init__c                 C   s   | j | j| j| j| jdS )Nr   r   r   r   r   r   r   r   r   r   __getstate__   s   zBuffer.__getstate__c                 C   s$   t | | t | _| j| d S N)r   __setstate__r   r   __dict__update)r   stater   r   r   r       s   zBuffer.__setstate__Tc                 K   s   |r| j   zN| D ]\}}| j|  t|7  < |  jt|7  _q| jj|fddi| | j| jkrJt	| jddd}| 
| | j| jks7W |rT| j   d S d S |r^| j   w w )Nr   F皙?   )maxcount)r   acquireitemsr   lenr   r   appendr   keys_to_flushflushrelease)r   datar   kwargskvkeysr   r   r   r*   #   s   
(zBuffer.appendc                 K   s^   |r| j   zttt| jj|dd| jj|dd}W |r$| j   |S |r.| j   w w NFr   )	r   r'   listmapr	   r   getr   r-   )r   r2   r   r/   resultr   r   r   _get2   s   zBuffer._getc                 C   sL   |r| j   z| jj||dd W |r| j   dS dS |r%| j   w w )z Idempotent set Fr4   N)r   r'   r   Zisetr-   )r   keyvaluer   r   r   r   _iset;   s   (zBuffer._isetc                 C   sZ   |r| j   z| jj|dd | jj|dd W |r"| j   d S d S |r,| j   w w r3   )r   r'   r   deleter   r-   )r   r2   r   r   r   r   _deleteC   s
   (zBuffer._deletec                 C   s"   | j   | j  | j  d S r   )Z
_iset_seenclearr   dropr   r   r   r   r   r@   K   s   

zBuffer.dropc                 G   s   |    d S r   )r@   )r   argsr   r   r   __exit__P   s   zBuffer.__exit__Nc                 C   sf   |du r	t | j}| jtt|| j| | j| |D ]}|  j	| j| 8  _	| j|= q 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)
r5   r   r   r*   dictzipr   r7   r=   r   )r   r2   blockr:   r   r   r   r,   S   s   

zBuffer.flush)r   )T)NN)__name__
__module____qualname__r   r   r    r*   r9   r<   r>   r@   rB   r,   r   r   r   r   r      s    
	


	
r   r$   順 c                 C   sx   t tt| d d|  dd}t|  }t|tdttt	t
td||| }d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   )r:   c                 S   s   g | ]\}}|qS r   r   ).0r0   r1   r   r   r   
<listcomp>z   s    z!keys_to_flush.<locals>.<listcomp>N)r   maxr)   r(   sumvaluesminr
   r5   r   r	   r   )r   fractionr&   toptotalcutoffr8   r   r   r   r+   k   s   r+   N)r$   rI   )corer   	threadingr   Ztoolzr   r   r   r   operatorr	   r
   collectionsr   queuer   r   r   r   r+   r   r   r   r   <module>   s    ^