
    mBNj	                     \    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    e/Users/ahmed/devFolder/Ultron/claude-voice/.venv/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S-%D,e|);;s#A&/E7D , KKtdF^4 ZZs   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    s^    ZZ,5dkk,B((K$&KKOOA&!M	 Z,B -.. Zs   $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)   sN     ZZF $f5:5MM4.1 !,  ZZs    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   s?    ZZ7;{{2AG|tVT6NG ZG Zs   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   s5    ZZ*T*JHHT:&	 ZZs	   &=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__@   sH     ZZ  "  
 'LD&, ' Zs   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{{# ZZs   ,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   s,    ZZ;;u-LD&< ZZs   -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   