
    rhV                     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)
DatasetAssignzWrapper 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     q/var/www/html/ai-insurance-compliance-backend/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       vv||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    vvgr   c                 D    t        j                  | j                  |d      S r   )faissknnr	   r
   	centroidss     r   perform_searchzDatasetAssign.perform_search!   s    yy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GGIGGIA ++I6?''1dff5''1dffwq$w7G.GH uuw}}#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    tQ'r   c                 Z    t        j                  | j                  | j                  |d      S r   )r   knn_gpur8   r	   r   s     r   r!   zDatasetAssignGPU.perform_search;   s    }}TXXtvvy!<<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 !4H=} =r   