
    2iC                     r    d dl Z d dlZd dlZd dlmZmZmZ  G d de      Z G d de      Z	 G d de      Z
y)	    N)ListOptionalTuplec                   T    e Zd ZdedefdZdedededefdZdedefdZdedefd	Z	y
)Bucketcounterfingerprintc                      || _         || _        y N)r   r	   )selfr   r	   s      _/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/fakeredis/model/_topk.py__init__zBucket.__init__   s    &    incrdecayreturnc                     | j                   |k(  r!| xj                  |z  c_        | j                  S | j                  |      r(| xj                  |z  c_        || _         | j                  S yNr   )r	   r   _decay)r   r	   r   r   s       r   addz
Bucket.add   sW    {*LLD L<<[[LLD L*D<<r   c                 :    | j                   |k(  r| j                  S yr   )r	   r   )r   r	   s     r   countzBucket.count   s    {*<<r   c                     | j                   dkD  r@|| j                   z  }|dk\  st        j                         |k  r| xj                   dz  c_         | j                   dk(  S Nr      )r   random)r   r   probabilitys      r   r   zBucket._decay   sN    <<!-Ka6==?[#@!||q  r   N)
__name__
__module____qualname__intr   floatr   r   boolr    r   r   r   r      s\    ' '# 's # e    
!E !d !r   r   c                   `    e Zd ZdedefdZdedefdZdededefdZdede	fd	Z
dedefd
Zy)	HashArraywidthr   c                     || _         || _        t        |      D cg c]  }t        dd       c}| _        t        j                  d      | _        y c c}w )Nr       )r'   r   ranger   arrayr   getrandbits_seed)r   r'   r   _s       r   r   zHashArray.__init__$   sC    

,1%L9qfQl9
''+
 :s   Aitemr   c                 `    | j                  |      j                  | j                  |            S r   )
get_bucketr   _hashr   r/   s     r   r   zHashArray.count*   s%    t$**4::d+;<<r   r   c                 |    | j                  |      }|j                  | j                  |      || j                        S r   )r1   r   r2   r   )r   r/   r   buckets       r   r   zHashArray.add-   s0    &zz$**T*D$**==r   c                 X    | j                   | j                  |      | j                  z     S r   )r+   r2   r'   r3   s     r   r1   zHashArray.get_bucket1   s#    zz$**T*TZZ788r   c                 2    t        |      | j                  z  S r   )hashr-   r3   s     r   r2   zHashArray._hash4   s    DzDJJ&&r   N)r   r   r    r!   r"   r   bytesr   r   r   r1   r2   r$   r   r   r&   r&   #   sh    ,c ,% ,=% =C => >S >S >9u 9 9'% 'C 'r   r&   c                       e Zd ZdZddededededdf
dZd	edefd
Zdedede	e   fdZ
dedefdZdde	e   deeeef      fdZy)HeavyKeeperFkr'   depthr   r   Nc                    t         j                  s't        j                  t	        j                                || _        || _        || _        || _        t        |      D cg c]  }t        ||       c}| _        g | _        y c c}w r   )r;   is_topk_initializedr   seedtimer<   r'   r=   r   r*   r&   hash_arraysmin_heap)r   r<   r'   r=   r   r.   s         r   r   zHeavyKeeper.__init__;   sd    ..KK		$


=B5\JIeU3J13 Ks   !Bvalc                 V    t        | j                        D ]  \  }}|d   |k(  s|c S  y)Nr   )	enumeraterC   )r   rD   indr/   s       r   _indexzHeavyKeeper._indexE   s3    "4==1 	ICAw#~
	 r   r/   r   c                 "   d}t        | j                        D ]-  }| j                  |   j                  ||      }t	        ||      }/ t        | j                        | j                  k  r#t        j                  | j                  ||f       y | j                  |      }|dk\  r1||f| j                  |<   t        j                  | j                         y || j                  d   d   kD  r't        j                  | j                  ||f      }|d   S y r   )r*   r=   rB   r   maxlenrC   r<   heapqheappushrI   heapifyheapreplace)r   r/   r   	max_countir   rH   expelleds           r   r   zHeavyKeeper.addK   s    	tzz" 	.A$$Q'++D$7EIu-I	. t}}&NN4==9d*;<kk$!8"+T!2DMM#MM$--(t}}Q'**((D8IJHA;r   c                     | j                  |      }|dkD  r| j                  |   d   S t        | j                  D cg c]  }|j	                  |       c}      S c c}w r   )rI   rC   rK   rB   r   )r   r/   rH   has       r   r   zHeavyKeeper.count]   sR    kk$7==%a((T-=-=>rBHHTN>??>s   Ac                 F    t        | j                  d d      }||S |d | S )Nc                     | d   S r   r$   )xs    r   <lambda>z"HeavyKeeper.list.<locals>.<lambda>d   s
    !A$ r   T)keyreverse)sortedrC   )r   r<   sorted_lists      r   listzHeavyKeeper.listc   s+    T]]M92Ar   )i      g?r   )r   r   r    r?   r!   r"   r   r9   rI   r   r   r   r   r   r^   r$   r   r   r;   r;   8   s    4# 4c 4 4 4Y] 4% C  S Xe_ $@% @C @hsm tE#u*4E/F r   r;   )rM   r   rA   typingr   r   r   objectr   r&   r;   r$   r   r   <module>rb      s8       ( (!V !8' '*/& /r   