
    ugk                         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y)    )CallableListTupleNkeymembershasherreplicationreturnc                 ~   |t        |      kD  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 ]+  }t        j
                  |      }	|j                  |	d          - |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
             S/var/www/openai/venv/lib/python3.12/site-packages/chromadb/utils/rendezvous_hash.pyassignr      s     S\!M
 	
 7|q@AA
7|q
|
by23324$$(5&/: 
 $&N; ==):;.q1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+   @   s9    ++fU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   