§
     �’jz
  ã                   ó®   — d Z ddlZddlmZ dZdZdZdZdZd	e	d
e	de	fd„Z
de	de	de	de	dee	e	e	e	f         f
d„Zddede	de	de	fd„Zdej        de	de	fd„ZdS )aJ  SipHash-2-4 over canonical point id bytes.

Used by `SliceCondition` to split the id space into deterministic slices. The hash must match
the engine byte-for-byte, otherwise local mode would assign points to different slices than the
server does. Verified against the SipHash reference vectors and against a live Qdrant instance.
é    N)Úmodelsl   ÿÿÿÿ l   ueæ`•5{ l   moÈ\…I{# l   arÊ\•Ëc l   seèr‰+# ÚxÚbÚreturnc                 ó.   — | |z  | d|z
  z	  z  t           z  S )Né@   )Ú_MASK)r   r   s     úIC:\Projects\DSCons\.venv\Lib\site-packages\qdrant_client\local\siphash.pyÚ_rotlr      s   € Ø�!‰V˜˜b 1™f™Ñ&­%Ñ/Ð/ó    Úv0Úv1Úv2Úv3c                 ó^  — | |z   t           z  } t          |d¦  «        }|| z  }t          | d¦  «        } ||z   t           z  }t          |d¦  «        }||z  }| |z   t           z  } t          |d¦  «        }|| z  }||z   t           z  }t          |d¦  «        }||z  }t          |d¦  «        }| |||fS )Né   é    é   é   é   )r	   r   )r   r   r   r   s       r
   Ú
_sip_roundr      sº   € Ø
ˆr‰'•UÑ	€BÝ	ˆr�2‰Œ€BØˆ"�H€BÝ	ˆr�2‰Œ€BØ
ˆr‰'•UÑ	€BÝ	ˆr�2‰Œ€BØˆ"�H€BØ
ˆr‰'•UÑ	€BÝ	ˆr�2‰Œ€BØˆ"�H€BØ
ˆr‰'•UÑ	€BÝ	ˆr�2‰Œ€BØˆ"�H€BÝ	ˆr�2‰Œ€BØˆr�2�rˆ>Ðr   ÚdataÚkey0Úkey1c                 óº  — |t           z  }|t          z  }|t          z  }|t          z  }t	          | ¦  «        }||dz  z
  }t          d|d¦  «        D ]`}	t                               | |	|	dz   …         d¦  «        }
||
z  }t          ||||¦  «        \  }}}}t          ||||¦  «        \  }}}}||
z  }Œa| |d…         dd||z
  z
  z  z   }t                               |d¦  «        |dz  dz  z  }
||
z  }t          ||||¦  «        \  }}}}t          ||||¦  «        \  }}}}||
z  }|dz  }t          d	¦  «        D ]}t          ||||¦  «        \  }}}}Œ||z  |z  |z  S )
zRSipHash-2-4 (2 compression rounds, 4 finalization rounds). Defaults to a zero key.é   r   ÚlittleNó    é   éÿ   é8   é   )	Ú_INIT_0Ú_INIT_1Ú_INIT_2Ú_INIT_3ÚlenÚrangeÚintÚ
from_bytesr   )r   r   r   r   r   r   r   ÚlengthÚ
tail_startÚoffsetÚblockÚtailÚ_s                r
   Ú	siphash24r1   +   s   € à	•‰€BØ	•‰€BØ	•‰€BØ	•‰€Bå�‰YŒY€FØ˜6 A™:Ñ&€Jå˜˜: qÑ)Ô)ð ð ˆÝ—’˜t F¨V°a©ZÐ$7Ô8¸(ÑCÔCˆØ
ˆe‰ˆÝ# B¨¨B°Ñ3Ô3‰ˆˆB��BÝ# B¨¨B°Ñ3Ô3‰ˆˆB��BØ
ˆe‰ˆˆð �
��Ô˜w¨!¨v¸
Ñ/BÑ*CÑDÑD€DÝ�NŠN˜4 Ñ*Ô*¨v¸©}ÀÑ.CÑD€EØˆ%�K€BÝ  B¨¨BÑ/Ô/�N€BˆˆB�Ý  B¨¨BÑ/Ô/�N€BˆˆB�Øˆ%�K€Bàˆ$�J€BÝ�1‰XŒXð 4ð 4ˆÝ# B¨¨B°Ñ3Ô3‰ˆˆB��B�Bà�‰7�R‰<˜"ÑÐr   Úpoint_idÚtotalc                 óÊ   — t          | t          ¦  «        r|                      dd¦  «        }n&t          j        t          | ¦  «        ¦  «        j        }t          |¦  «        |z  S )zIIndex of the slice `point_id` belongs to, out of `total` disjoint slices.r   r   )Ú
isinstancer)   Úto_bytesÚuuidÚUUIDÚstrÚbytesr1   )r2   r3   Úid_bytess      r
   Úpoint_id_slicer<   K   sX   € å�(�CÑ Ô ð 2à×$Ò$ Q¨Ñ1Ô1ˆˆõ ”9�S ™]œ]Ñ+Ô+Ô1ˆå�XÑÔ Ñ&Ð&r   )r   r   )Ú__doc__r7   Úqdrant_client.httpr   r	   r#   r$   r%   r&   r)   r   Útupler   r:   r1   ÚExtendedPointIdr<   © r   r
   ú<module>rB      s!  ððð ð €€€à %Ð %Ð %Ð %Ð %Ð %à€ð €Ø
€Ø
€Ø
€ð0ˆSð 0�Sð 0˜Sð 0ð 0ð 0ð 0ð�3ð ˜Cð  Sð ¨cð °e¸CÀÀcÈ3Ð<NÔ6Oð ð ð ð ð$ð �Eð  ð °ð ¸Cð ð ð ð ð@	'˜VÔ3ð 	'¸Cð 	'ÀCð 	'ð 	'ð 	'ð 	'ð 	'ð 	'r   