o
    1Xxi                     @   s   d dl mZmZm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fddZd	ed
edefddZdede
defddZdS )    )CallableListcastNkeymembershasherreturnc                 C   sr   t |dkr
tdt |dkr|d S | dkrtdd}d}|D ]}||| }||kr1|}|}q"tt|}|S )z@Assigns a key to a member using the rendezvous hashing algorithmr   z%Cannot assign key to empty memberlist    zCannot assign empty keyN)len
ValueErrorr   Member)r   r   r   	max_score
max_membermemberscore r   ]/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/utils/rendezvous_hash.pyassign   s    

r   xyc                 C   sH   | |A }||d? N }|d d }||d? N }|d d }||d? N }|S )zmurmurhash3 mix 64-bit!   l   Z_?z l            l   Sl5gu& r   )r   r   accr   r   r   merge_hashes!   s   r   r   c                 C   s.   t j| ddd }t j|ddd }t||S )z=Hashes the key and member using the murmur3 hashing algorithmF)signedr   )mmh3hash64r   )r   r   member_hashkey_hashr   r   r   murmur3hasher.   s   
r    )typingr   r   r   r   strintHasherr   MembersKeyr   r   r    r   r   r   r   <module>   s   