
    rh
                         d dl mZ d dlZd dlmZmZ ddlmZ  G d dej                        Z	ddej                  d	ed
efdZ G d d      Zy)    )
ThreadPoolN)ListTuple   )rpcc                   V    e Zd ZdZdedej                  fdZdedefdZdefdZ	d	 Z
y
)SearchServerz, Assign version that can be exposed via RPC sindexc                     t         j                  j                  | |       || _        t	        j
                  |      | _        y N)r   Server__init__r   faissextract_index_ivf	index_ivf)selfr
   r   s      n/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/faiss/contrib/client_server.pyr   zSearchServer.__init__   s/    

D!$
007    nprobereturnc                 &    || j                   _        y)z set nprobe field N)r   r   r   r   s     r   
set_nprobezSearchServer.set_nprobe   s     &r   c                 .    | j                   j                  S r   )r   ntotalr   s    r   
get_ntotalzSearchServer.get_ntotal   s    zz   r   c                 .    t        | j                  |      S r   )getattrr   )r   fs     r   __getattr__zSearchServer.__getattr__    s    tzz1%%r   N)__name__
__module____qualname____doc__intr   Indexr   r   r   r"    r   r   r	   r	      s@    68# 8ekk 8
' ' '!C !&r   r	   r   portv6c                 <     t        j                   fd||       y)z( serve requests for that index forerver c                     t        |       S r   )r	   )r
   r   s    r   <lambda>z"run_index_server.<locals>.<lambda>(   s    ,q%( r   )r+   N)r   
run_server)r   r*   r+   s   `  r   run_index_serverr0   %   s    NN(r   c                   f    e Zd ZdZddeeeef      defdZ	deddfdZ
d	eddfd
ZddZdefdZy)ClientIndexzmanages a set of distance sub-indexes. The sub_indexes search a
    subset of the inverted lists. Searches are merged afterwards
    machine_portsr+   c                 &   g | _         |D ]5  \  }}| j                   j                  t        j                  |||             7 t	        | j                         | _        t        | j
                        | _        | j                         | _	        d| _
        y)z+ connect to a series of (host, port) pairs FN)sub_indexesappendr   Clientlennir   poolr   r   verbose)r   r3   r+   machiner*   s        r   r   zClientIndex.__init__5   sy    * 	CMGT##CJJwb$AB	C d&&'tww'	oo'r   r   r   Nc                 X    | j                   j                  fd| j                         y )Nc                 &    | j                        S r   )r   )idxr   s    r   r.   z(ClientIndex.set_nprobe.<locals>.<lambda>D   s    v. r   r:   mapr5   r   s    `r   r   zClientIndex.set_nprobeB   s    		.	
r   ntc                 X    | j                   j                  fd| j                         y )Nc                 &    | j                        S r   )set_omp_num_threads)r?   rB   s    r   r.   z1ClientIndex.set_omp_num_threads.<locals>.<lambda>J   s    //3 r   r@   )r   rB   s    `r   rE   zClientIndex.set_omp_num_threadsH   s    		3	
r   c                 b    t        | j                  j                  d | j                              S )Nc                 "    | j                         S r   )r   )r?   s    r   r.   z(ClientIndex.get_ntotal.<locals>.<lambda>P   s    ( r   )sumr:   rA   r5   r   s    r   r   zClientIndex.get_ntotalN   s*    499==(
  	r   kc                 $   t        j                  j                  d         }| j                  j	                  fd| j
                        D ]  \  }}|j                  ||        |j                          |j                  |j                  fS )Nr   c                 (    | j                        S r   )search)r?   rI   xs    r   r.   z$ClientIndex.search.<locals>.<lambda>X   s    Aq1A r   )
r   
ResultHeapshaper:   imapr5   
add_resultfinalizeDI)r   rM   rI   rhDiIis    ``   r   rL   zClientIndex.searchT   so    aggaj!,iinn%A4CSCST 	"FBMM"b!	"
ttRTTzr   F)r   N)r#   r$   r%   r&   r   r   strr'   boolr   r   rE   r   rL   r)   r   r   r2   r2   0   s^    d5c?&;  
 
 

c 
d 
3 r   r2   rX   )multiprocessing.poolr   r   typingr   r    r   r   r	   r(   r'   rZ   r0   r2   r)   r   r   <module>r^      sK    ,   &3:: &(EKK s  + +r   