
    gV                     d    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dS )zB
This contrib module contains Pytorch code for k-means clustering
    N)kmeansc                   8    e Zd ZdZd Zd Zd Zd Zd Zd	dZ	dS )
DatasetAssignzWrapper for a tensor that offers a function to assign the vectors
    to centroids. All other implementations offer the same interfacec                     || _         d S Nx)selfr	   s     \/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/torch/clustering.py__init__zDatasetAssign.__init__   s        c                 &    | j         j        d         S Nr   r	   shaper
   s    r   countzDatasetAssign.count       v|Ar   c                 &    | 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    vgr   c                 8    t          j        | j        |d          S r   )faissknnr	   r
   	centroidss     r   perform_searchzDatasetAssign.perform_search!   s    yA...r   Nc                    |                      |          \  }}|                                }|                                }|j        \  }}t          j        |          }||                    d|| j                   n)|                    d|| j        |d d d f         z             |                                                                ||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GGIIGGIIA +I66?''1df5555''1dfwqqq$w7G.GHHH uuww}}#333r   r   )
__name__
__module____qualname____doc__r   r   r   r   r!   r/    r   r   r   r      s        H H        / / /4 4 4 4 4 4r   r   c                       e Zd Zd Zd ZdS )DatasetAssignGPUc                 J    t                               | |           || _        d S r   )r   r   res)r
   r8   r	   s      r   r   zDatasetAssignGPU.__init__7   s#    tQ'''r   c                 D    t          j        | j        | j        |d          S r   )r   knn_gpur8   r	   r   s     r   r!   zDatasetAssignGPU.perform_search;   s    }TXtvy!<<<r   N)r0   r1   r2   r   r!   r4   r   r   r6   r6   5   s2          = = = = =r   r6   )r3   r   faiss.contrib.torch_utilsr$   faiss.contrib.clusteringr   r   r6   r4   r   r   <module>r=      s               , + + + + +!4 !4 !4 !4 !4 !4 !4 !4H= = = = =} = = = = =r   