Ë
    °Œj‹  ã                   óV   — d Z ddlZddlZddlZddlmZ  G d„ d«      Z G d„ de«      Zy)zB
This contrib module contains Pytorch code for k-means clustering
é    N)Úkmeansc                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd	d„Z	y)
ÚDatasetAssignz†Wrapper for a tensor that offers a function to assign the vectors
    to centroids. All other implementations offer the same interfacec                 ó   — || _         y ©N©Úx)Úselfr	   s     úh/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/faiss/contrib/torch/clustering.pyÚ__init__zDatasetAssign.__init__   s	   € Øˆ�ó    c                 ó4   — | j                   j                  d   S ©Nr   ©r	   Úshape©r
   s    r   ÚcountzDatasetAssign.count   ó   € Ø�v‰v�|‰|˜A‰Ðr   c                 ó4   — | j                   j                  d   S ©Né   r   r   s    r   ÚdimzDatasetAssign.dim   r   r   c                 ó    — | j                   |   S r   r   )r
   Úindicess     r   Ú
get_subsetzDatasetAssign.get_subset   s   € Ø�v‰v�g‰Ðr   c                 óD   — t        j                  | j                  |d«      S r   )ÚfaissÚknnr	   ©r
   Ú	centroidss     r   Úperform_searchzDatasetAssign.perform_search!   s   € Ü�y‰y˜Ÿ™ ¨AÓ.Ð.r   Nc                 ó‚  — | j                  |«      \  }}|j                  «       }|j                  «       }|j                  \  }}t        j                  |«      }|€|j                  d|| j                  «       n'|j                  d|| j                  |d d …d f   z  «       |j                  «       j                  «       ||fS r   )	r!   Úravelr   ÚtorchÚ
zeros_likeÚ
index_add_r	   ÚcpuÚnumpy)r
   r    ÚweightsÚDÚIÚncÚdÚsum_per_centroids           r   Ú	assign_tozDatasetAssign.assign_to$   s¥   € Ø×"Ñ" 9Ó-‰ˆˆ1à�G‰G‹IˆØ�G‰G‹IˆØ—‘‰ˆˆAä ×+Ñ+¨IÓ6ÐØˆ?Ø×'Ñ'¨¨1¨d¯f©fÕ5à×'Ñ'¨¨1¨d¯f©f°wºqÀ$¸wÑ7GÑ.GÔHð �u‰u‹w�}‰}‹ Ð#3Ð3Ð3r   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r!   r/   © r   r   r   r      s&   „ ñHòòòòò/ô4r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚDatasetAssignGPUc                 ó>   — t         j                  | |«       || _        y r   )r   r   Úres)r
   r8   r	   s      r   r   zDatasetAssignGPU.__init__7   s   € Ü×Ñ˜t QÔ'Øˆ�r   c                 óZ   — t        j                  | j                  | j                  |d«      S r   )r   Úknn_gpur8   r	   r   s     r   r!   zDatasetAssignGPU.perform_search;   s   € Ü�}‰}˜TŸX™X t§v¡v¨y¸!Ó<Ð<r   N)r0   r1   r2   r   r!   r4   r   r   r6   r6   5   s   „ òó=r   r6   )r3   r   Úfaiss.contrib.torch_utilsr$   Úfaiss.contrib.clusteringr   r   r6   r4   r   r   Ú<module>r=      s1   ðñó Û  Û õ ,÷!4ñ !4ôH=�}õ =r   