
    Zik                         d dl mZmZmZ d dlZd dlZeeegef         ZeZ	ee         Z
eZdede
dededee	         f
dZd	ed
edefdZde	dedefdZdS )    )CallableListTupleNkeymembershasherreplicationreturnc                    |t          |          k    rt          d          t          |          dk    rt          d          t          |          dk    r	|d         gS | dk    rt          d          g }|D ]&} |||            }t          j        |||f           'g }t	          |          D ]1}t          j        |          }	|                    |	d                    2|S )a]  Assigns a key to a member using the rendezvous hashing algorithm
    Args:
        key: The key to assign
        members: The list of members to assign the key to
        hasher: The hashing function to use
        replication: The number of members to assign the key to
    Returns:
        A list of members that the key has been assigned to
    z?Replication factor cannot be greater than the number of membersr   z%Cannot assign key to empty memberlist    zCannot assign empty key)len
ValueErrorheapqheappushrangeheappopappend)
r   r   r   r	   member_score_heapmemberscoreoutput_members_member_and_scores
             [/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/utils/rendezvous_hash.pyassignr      s    S\\!!M
 
 	
 7||q@AAA
7||q
|
byy233324 ; ;$$$(5&/::::#%N; 3 3 =):;;.q12222    xyc                 `    | |z  }||dz	  z  }|dz  dz  }||dz	  z  }|dz  dz  }||dz	  z  }|S )zmurmurhash3 mix 64-bit!   l   Z_?z l            l   Sl5gu&  )r   r   accs      r   merge_hashesr$   3   s_    
a%C3"9C  C 3"9C##u
,C3"9CJr   r   c                     t          j        | d          d         }t          j        |d          d         }t          ||          S )z=Hashes the key and member using the murmur3 hashing algorithmF)signedr   )mmh3hash64r$   )r   r   member_hashkey_hashs       r   murmur3hasherr+   @   sD    +fU333A6K{3u---a0HX...r   )typingr   r   r   r'   r   strintHasherMemberMembersKeyr   r$   r+   r"   r   r   <module>r3      s    ( ( ( ( ( ( ( ( ( (  	3*c/	"	
s)	$	$$(.$=@$	&\$ $ $ $N
C 
C 
C 
 
 
 
/& /s /s / / / / / /r   