
    OhV                     V    S r SSKrSSKrSSKrSSKJr   " S S5      r " S S\5      rg)zB
This contrib module contains Pytorch code for k-means clustering
    N)kmeansc                   @    \ rS rSrSrS rS rS rS rS r	SS	 jr
S
rg)DatasetAssign   zWrapper for a tensor that offers a function to assign the vectors
to centroids. All other implementations offer the same interfacec                     Xl         g Nx)selfr
   s     V/var/www/html/shao/venv/lib/python3.13/site-packages/faiss/contrib/torch/clustering.py__init__DatasetAssign.__init__   s        c                 4    U R                   R                  S   $ Nr   r
   shaper   s    r   countDatasetAssign.count       vv||Ar   c                 4    U R                   R                  S   $ N   r   r   s    r   dimDatasetAssign.dim   r   r   c                      U R                   U   $ r   r	   )r   indicess     r   
get_subsetDatasetAssign.get_subset   s    vvgr   c                 F    [         R                  " U R                  US5      $ r   )faissknnr
   r   	centroidss     r   perform_searchDatasetAssign.perform_search!   s    yyA..r   Nc                 |   U R                  U5      u  p4UR                  5       nUR                  5       nUR                  u  pV[        R                  " U5      nUc  UR                  SX@R                  5        O&UR                  SX@R                  US S 2S 4   -  5        UR                  5       R                  5       X74$ r   )	r&   ravelr   torch
zeros_like
index_add_r
   cpunumpy)r   r%   weightsDIncdsum_per_centroids           r   	assign_toDatasetAssign.assign_to$   s    ""9-GGIGGI ++I6?''1ff5''1ffwq$w7G.GH uuw}}33r   r	   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   r&   r5   __static_attributes__ r   r   r   r      s&    H/4r   r   c                        \ rS rSrS rS rSrg)DatasetAssignGPU5   c                 :    [         R                  X5        Xl        g r   )r   r   res)r   rB   r
   s      r   r   DatasetAssignGPU.__init__7   s    t'r   c                 \    [         R                  " U R                  U R                  US5      $ r   )r"   knn_gpurB   r
   r$   s     r   r&   DatasetAssignGPU.perform_search;   s    }}TXXtvvy!<<r   )rB   N)r7   r8   r9   r:   r   r&   r<   r=   r   r   r?   r?   5   s    =r   r?   )r;   r"   faiss.contrib.torch_utilsr*   faiss.contrib.clusteringr   r   r?   r=   r   r   <module>rI      s1        ,!4 !4H=} =r   