
    g
                         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dS )    )
ThreadPoolN)ListTuple   )rpcc                   N    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
d
S )SearchServerz, Assign version that can be exposed via RPC sindexc                     t           j                            | |           || _        t	          j        |          | _        d S N)r   Server__init__r   faissextract_index_ivf	index_ivf)selfr
   r   s      Y/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/client_server.pyr   zSearchServer.__init__   s7    
D!$$$
077    nprobereturnc                     || j         _        dS )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    z  r   c                 ,    t          | j        |          S r   )getattrr   )r   fs     r   __getattr__zSearchServer.__getattr__    s    tz1%%%r   N)__name__
__module____qualname____doc__intr   Indexr   r   r   r"    r   r   r	   r	      s        668# 8ek 8 8 8 8
' ' ' ' ' '!C ! ! ! !& & & & &r   r	   Fr   portv6c                 <     t          j         fd||           dS )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   %   s7    N((((     r   c                   t    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dS )ClientIndexzmanages a set of distance sub-indexes. The sub_indexes search a
    subset of the inverted lists. Searches are merged afterwards
    Fmachine_portsr+   c                 $   g | _         |D ]3\  }}| j                             t          j        |||                     4t	          | j                   | _        t          | j                  | _        |                                 | _	        d| _
        dS )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   s    * 	C 	CMGT##CJwb$A$ABBBBd&''tw''	oo''r   r   r   Nc                 N    | j                             fd| j                   d S )Nc                 .    |                                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   s7    	....	
 	
 	
 	
 	
r   ntc                 N    | j                             fd| j                   d S )Nc                 .    |                                S r   )set_omp_num_threads)r?   rB   s    r   r.   z1ClientIndex.set_omp_num_threads.<locals>.<lambda>J   s    //33 r   r@   )r   rB   s    `r   rE   zClientIndex.set_omp_num_threadsH   s7    	3333	
 	
 	
 	
 	
r   c                 ^    t          | j                            d | j                            S )Nc                 *    |                                  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   s2    49==((
 
   	r   kc                 
   t          j        j        d                   }| j                            fd| j                  D ]\  }}|                    ||           |                                 |j        |j	        fS )Nr   c                 0    |                                S r   )search)r?   rI   xs    r   r.   z$ClientIndex.search.<locals>.<lambda>X   s    Aq1A1A r   )
r   
ResultHeapshaper:   imapr5   
add_resultfinalizeDI)r   rM   rI   rhDiIis    ``   r   rL   zClientIndex.searchT   s    agaj!,,inn%A%A%A%A%A4CSTT 	" 	"FBMM"b!!!!
tRTz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^      s    , + + + + +               & & & & &3: & & &( EK s     + + + + + + + + + +r   