
    1i	                     \    d dl Z d dlmZmZmZmZ d dlmZ  ed      Z G d dee         Z	y)    N)AnyGenericListTypeVar)NumberTc            	           e Zd ZdZd ZdededdfdZd Zd	ed
ede	e
eef      fdZdede	e
eef      fdZdefdZd Zd Zde
eef   fdZy)WeightedListz$
    Thread-safe weighted list.
    c                 D    g | _         t        j                         | _        y N)_items	threadingRLock_lockselfs    ^/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/redis/data_structure.py__init__zWeightedList.__init__   s    02__&
    itemweightreturnNc                    | j                   5  dt        | j                        }}||k  r+||z   dz  }| j                  |   d   |k  r|}n|dz   }||k  r+| j                  j                  |||f       ddd       y# 1 sw Y   yxY w)z.Add item with weight, maintaining sorted orderr         N)r   lenr   insert)r   r   r   leftrightmids         r   addzWeightedList.add   s    ZZ 
	5S-%D,e|);;s#A&/E7D , KKtdF^4
	5 
	5 
	5s   AA<A<<Bc                     | j                   5  t        | j                        D ]5  \  }\  }}||k(  s| j                  j                  |       |c cddd       S  t	        d      # 1 sw Y   yxY w)zRemove first occurrence of itemNzItem not found)r   	enumerater   pop
ValueError)r   r   istored_itemr   s        r   removezWeightedList.remove    sp    ZZ 	/,5dkk,B "((K$&KKOOA&!M		/ 	/" -..	/ 	/s   $A&A&A&&A/
min_weight
max_weightc                     | j                   5  g }| j                  D ]'  \  }}||cxk  r|k  sn |j                  ||f       ) |cddd       S # 1 sw Y   yxY w)z!Get all items within weight rangeN)r   r   append)r   r)   r*   resultr   r   s         r   get_by_weight_rangez WeightedList.get_by_weight_range)   s^     ZZ 	F $ 2f5:5MM4.12 	 	 	s    AAAnc                     | j                   5  | j                  d| D cg c]	  \  }}||f c}}cddd       S c c}}w # 1 sw Y   yxY w)z$Get top N the highest weighted itemsNr   r   )r   r/   r   r   s       r   	get_top_nzWeightedList.get_top_n4   sK    ZZ 	H7;{{2AG|tVT6NG	H 	HG	H 	Hs   A;AAA

new_weightc                     | j                   5  	 | j                  |      }| j                  ||       |cd d d        S # 1 sw Y   y xY wr   )r   r(   r!   )r   r   r3   
old_weights       r   update_weightzWeightedList.update_weight9   s@    ZZ 	*T*JHHT:&		 	 	s	   &=Ac              #      K   | j                   5  | j                  j                         }ddd       D ]  \  }}||f  y# 1 sw Y   xY ww)z"Iterate in descending weight orderN)r   r   copy)r   
items_copyr   r   s       r   __iter__zWeightedList.__iter__@   sU     ZZ 	  " 	
 ' 	LD&,		 	s   AAAAAc                 p    | j                   5  t        | j                        cd d d        S # 1 sw Y   y xY wr   )r   r   r   r   s    r   __len__zWeightedList.__len__J   s*    ZZ 	$t{{#	$ 	$ 	$s   ,5c                 r    | j                   5  | j                  |   \  }}||fcd d d        S # 1 sw Y   y xY wr   r1   )r   indexr   r   s       r   __getitem__zWeightedList.__getitem__N   s7    ZZ 	 ;;u-LD&<	  	  	 s   -6)__name__
__module____qualname____doc__r   r   floatr!   r(   r   tupler   r.   intr2   r6   r:   r<   r?    r   r   r
   r
   	   s    '5 5U 5t 5/		-2		eCK 	!	H3 H4c6k(:#; H
e $ E#v+$6  r   r
   )
r   typingr   r   r   r   redis.typingr   r   r
   rG   r   r   <module>rJ      s,     . . CLH 71: H r   