
    i
                         S SK Jr  S SKrS SKJrJr  SSKJr   " S S\R                  5      r	SS\R                  S	\S
\4S jjr " S S5      rg)    )
ThreadPoolN)ListTuple   )rpcc                   d    \ rS rSrSrS\S\R                  4S jrS\S\4S jr	S\4S	 jr
S
 rSrg)SearchServer   z+Assign version that can be exposed via RPC sindexc                     [         R                  R                  X5        X l        [        R
                  " U5      U l        g N)r   Server__init__r   faissextract_index_ivf	index_ivf)selfr   r   s      k/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/faiss/contrib/client_server.pyr   SearchServer.__init__   s+    

D$
007    nprobereturnc                 $    XR                   l        g)zset nprobe field N)r   r   r   r   s     r   
set_nprobeSearchServer.set_nprobe   s     &r   c                 .    U R                   R                  $ r   )r   ntotalr   s    r   
get_ntotalSearchServer.get_ntotal   s    zz   r   c                 .    [        U R                  U5      $ r   )getattrr   )r   fs     r   __getattr__SearchServer.__getattr__    s    tzz1%%r   )r   r   N)__name__
__module____qualname____firstlineno____doc__intr   Indexr   r   r!   r&   __static_attributes__ r   r   r	   r	      s@    68# 8ekk 8
' ' '!C !&r   r	   r   portv6c                 8   ^  [         R                  " U 4S jXS9  g)z'serve requests for that index forerver c                    > [        U T5      $ r   )r	   )r   r   s    r   <lambda>"run_index_server.<locals>.<lambda>(   s    ,q%(r   )r2   N)r   
run_server)r   r1   r2   s   `  r   run_index_serverr8   %   s    NN(r   c                   z    \ rS rSrSrSS\\\\4      S\	4S jjr
S\SS4S	 jrS
\SS4S jrSS jrS\4S jrSrg)ClientIndex0   z}manages a set of distance sub-indexes. The sub_indexes search a
subset of the inverted lists. Searches are merged afterwards
machine_portsr2   c                 (   / U l         U H5  u  p4U R                   R                  [        R                  " X4U5      5        M7     [	        U R                   5      U l        [        U R
                  5      U l        U R                  5       U l	        SU l
        g)z*connect to a series of (host, port) pairs FN)sub_indexesappendr   Clientlennir   poolr!   r   verbose)r   r<   r2   machiner1   s        r   r   ClientIndex.__init__5   sn    *MG##CJJwb$AB + d&&'tww'	oo'r   r   r   Nc                 Z   ^ U R                   R                  U4S jU R                  5        g )Nc                 &   > U R                  T5      $ r   )r   )idxr   s    r   r5   (ClientIndex.set_nprobe.<locals>.<lambda>D   s    v.r   rC   mapr>   r   s    `r   r   ClientIndex.set_nprobeB   s    		.	
r   ntc                 Z   ^ U R                   R                  U4S jU R                  5        g )Nc                 &   > U R                  T5      $ r   )set_omp_num_threads)rI   rN   s    r   r5   1ClientIndex.set_omp_num_threads.<locals>.<lambda>J   s    //3r   rK   )r   rN   s    `r   rQ   ClientIndex.set_omp_num_threadsH   s    		3	
r   c                 b    [        U R                  R                  S U R                  5      5      $ )Nc                 "    U R                  5       $ r   )r!   )rI   s    r   r5   (ClientIndex.get_ntotal.<locals>.<lambda>P   s    (r   )sumrC   rL   r>   r    s    r   r!   ClientIndex.get_ntotalN   s*    499==(
  	r   kc                 (  ^^ [         R                  " TR                  S   T5      nU R                  R	                  UU4S jU R
                  5       H  u  pEUR                  XE5        M     UR                  5         UR                  UR                  4$ )Nr   c                 (   > U R                  TT5      $ r   )search)rI   rY   xs    r   r5   $ClientIndex.search.<locals>.<lambda>X   s    Aq1Ar   )
r   
ResultHeapshaperC   imapr>   
add_resultfinalizeDI)r   r]   rY   rhDiIis    ``   r   r\   ClientIndex.searchT   sg    aggaj!,iinn%A4CSCSTFBMM"! U
ttRTTzr   )rB   r   rC   r>   rD   F)r   N)r(   r)   r*   r+   r,   r   r   strr-   boolr   r   rQ   r!   r\   r/   r0   r   r   r:   r:   0   s^    d5c?&;  
 
 

c 
d 
3 r   r:   rj   )multiprocessing.poolr   r   typingr   r    r   r   r	   r.   r-   rl   r8   r:   r0   r   r   <module>rp      sK    ,   &3:: &(EKK s  + +r   