Ë
    °Œjƒ
  ã                   óœ   — 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      úe/var/www/html/Fitness-lenito-AI-main/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 fieldN)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‰z× Ñ Ð r   c                 ó.   — t        | j                  |«      S r   )Úgetattrr   )r   Úfs     r   Ú__getattr__zSearchServer.__getattr__    s   € ä�t—z‘z 1Ó%Ð%r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úintr   ÚIndexr   r   r   r"   © r   r   r	   r	      s@   „ Ù4ð8˜#ð 8 e§k¡kó 8ð
' ð '¨ó 'ð!˜Có !ó&r   r	   r   ÚportÚv6c                 ó<   ‡ — t        j                  ˆ fd„||¬«       y)z%serve requests for that index foreverc                 ó   •— t        | ‰«      S r   )r	   )r
   r   s    €r   Ú<lambda>z"run_index_server.<locals>.<lambda>'   s   ø€ œ\¨!¨UÔ3r   )r+   N)r   Ú
run_server)r   r*   r+   s   `  r   Úrun_index_serverr0   %   s   ø€ ä‡N�NÓ3°T¸bÖAr   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)ÚClientIndexz…manages 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) pairsFN)Úsub_indexesÚappendr   ÚClientÚlenÚnir   Úpoolr   r   Úverbose)r   r3   r+   Úmachiner*   s        r   r   zClientIndex.__init__4   sr   € àˆÔÛ*‰MˆG�TØ×Ñ×#Ñ#¤C§J¡J¨w¸¸bÓ$AÕBð +ô �d×&Ñ&Ó'ˆŒä˜tŸw™wÓ'ˆŒ	à—o‘oÓ'ˆŒØˆ�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>B   s   ø€  #§.¡.°Ô"8r   ©r:   Úmapr5   r   s    `r   r   zClientIndex.set_nprobeA   s   ø€ Ø�	‰	�‰Ó8¸$×:JÑ:JÕKr   Ú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>E   s   ø€  #×"9Ñ"9¸"Ô"=r   r@   )r   rB   s    `r   rE   zClientIndex.set_omp_num_threadsD   s   ø€ Ø�	‰	�‰Ó=¸t×?OÑ?OÕPr   c                 ób   — t        | j                  j                  d„ | j                  «      «      S )Nc                 ó"   — | j                  «       S r   )r   )r?   s    r   r.   z(ClientIndex.get_ntotal.<locals>.<lambda>I   s   €  c§n¡nÔ&6r   )Úsumr:   rA   r5   r   s    r   r   zClientIndex.get_ntotalG   s(   € ÜØ�I‰I�M‰MÑ6¸×8HÑ8HÓIó
ð 	
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>Q   s   ø€ ˜Ÿ
™
 1 aÔ(r   )
r   Ú
ResultHeapÚshaper:   Úimapr5   Ú
add_resultÚfinalizeÚDÚI)r   rM   rI   ÚrhÚDiÚIis    ``   r   rL   zClientIndex.searchL   sp   ù€ ä×Ñ˜aŸg™g a™j¨!Ó,ˆà—i‘i—n‘nÜ(¨$×*:Ñ*:ö
‰FˆB�ð �M‰M˜"˜bÕ!ð
ð 	�‰ŒØ�t‰t�R—T‘TˆzÐr   ©F)r   N)r#   r$   r%   r&   r   r   Ústrr'   Úboolr   r   rE   r   rL   r)   r   r   r2   r2   /   sd   „ ññ d¨5°°c°©?Ñ&;ð Àó ðL ð L¨ó LðQ cð Q¨dó Qó
ð
	˜3ô 	r   r2   rX   )Úmultiprocessing.poolr   r   Útypingr   r   Ú r   r   r	   r(   r'   rZ   r0   r2   r)   r   r   Ú<module>r^      sO   ðõ ,Û ß å ô&�3—:‘:ô &ñ(B˜EŸK™Kð B¨sð B¸ó B÷&ò &r   