Ë
    °Œjê  ã                   óJ   — d dl Zd dlZd dlmZ d	d„Zd	d„Zd	d„Zd„ Zd„ Z	d„ Z
y)
é    N)Úget_invlist_sizesc                 ól  — |j                   \  }}|j                   |fk(  sJ ‚t        | t        j                  «      r|dz  }|| j                  k(  sJ ‚|�'|j                   |fk(  sJ ‚t        j
                  |«      }| j                  |t        j
                  |«      |t        j
                  |«      «       y)zP
    Add elements to an IVF index, where the assignment is already computed
    é   N)ÚshapeÚ
isinstanceÚfaissÚIndexBinaryIVFÚdÚswig_ptrÚadd_core)Ú	index_ivfÚxÚaÚidsÚnr
   s         úa/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/faiss/contrib/ivf_tools.pyÚadd_preassignedr      s›   € ð �7‰7�D€A€qØ�7‰7�q�dŠ?Ðˆ?Ü�)œU×1Ñ1Ô2Ø	ˆQ‰ˆØ�	—‘ÒÐÐØ
€Ø�y‰y˜Q˜DÒ Ð Ð Ü�n‰n˜SÓ!ˆØ×Ñ�qœ%Ÿ.™.¨Ó+¨S´%·.±.ÀÓ2CÕDó    c                 óª  — t        | t        j                  «      r‚| j                  j	                  «       dk(  sJ d«       ‚t        j
                  | j                  j                  d«      «      }|j                  |«      }t        j                  | j                  «      } |j                  \  }}t        | t        j                  «      r|dz  }d}nd}|| j                  k(  sJ ‚|j                  || j                  fk(  sJ ‚|€$t        j                  || j                  f|¬«      }n|j                  || j                  fk(  sJ ‚| j!                  ||||«      S )zÙ
    Perform a search in the IVF index, with predefined lists to search into.
    Supports indexes with pretransforms (as opposed to the
    IndexIVF.search_preassigned, that cannot be applied with pretransform).
    é   z"chain must have only one componentr   r   Úint32Úfloat32©Údtype)r   r   ÚIndexPreTransformÚchainÚsizeÚdowncast_VectorTransformÚatÚapplyÚdowncast_indexÚindexr   r	   r
   ÚnprobeÚnpÚzerosÚsearch_preassigned)	r   ÚxqÚkÚlist_nosÚ
coarse_disÚ	transformr   r
   Údis_types	            r   r&   r&      s.  € ô �)œU×4Ñ4Ô5Ø�‰×#Ñ#Ó%¨Ò*ÐPÐ,PÓPÐ*Ü×2Ñ2°9·?±?×3EÑ3EÀaÓ3HÓIˆ	Ø�_‰_˜RÓ ˆÜ×(Ñ(¨¯©Ó9ˆ	Ø�8‰8�D€A€qÜ�)œU×1Ñ1Ô2Ø	ˆQ‰ˆØ‰àˆà�	—‘ÒÐÐØ�>‰>˜a ×!1Ñ!1Ð2Ò2Ð2Ð2ð ÐÜ—X‘X˜q )×"2Ñ"2Ð3¸8ÔD‰
à×Ñ A y×'7Ñ'7Ð#8Ò8Ð8Ð8à×'Ñ'¨¨A¨x¸ÓDÐDr   c           	      ó$  — |j                   \  }}t        | t        j                  «      r|dz  }d}nd}|€$t	        j
                  || j                  f|¬«      }n|j                   || j                  fk(  sJ ‚|| j                  k(  sJ ‚|j                   || j                  fk(  sJ ‚t        j                  |«      }t        j                  }	| j                  | |	|«      | |	|«       |	|«      |«       t        j                  |j                  |dz   «      j                  «       }
t        |
d   «      }t        j                  |j                  |«      j                  «       }t        j                  |j                   |«      j                  «       }|
||fS )z[
    Perform a range search in the IVF index, with predefined lists to
    search into
    r   r   r   r   r   éÿÿÿÿ)r   r   r   r	   r$   r%   r#   r
   ÚRangeSearchResultr   Úrange_search_preassigned_cÚrev_swig_ptrÚlimsÚcopyÚintÚ	distancesÚlabels)r   r   Úradiusr)   r*   r   r
   r,   ÚresÚspr2   Únum_resultsÚdistÚindicess                 r   Úrange_search_preassignedr=   :   sb  € ð
 �7‰7�D€A€qÜ�)œU×1Ñ1Ô2Ø	ˆQ‰ˆØ‰àˆð ÐÜ—X‘X˜q )×"2Ñ"2Ð3¸8ÔD‰
à×Ñ A y×'7Ñ'7Ð#8Ò8Ð8Ð8à�	—‘ÒÐÐØ�>‰>˜a ×!1Ñ!1Ð2Ò2Ð2Ð2ä
×
!Ñ
! !Ó
$€CÜ	�‰€Bà×(Ñ(Ø	‰2ˆa‹5�&™"˜X›,©¨:«¸ôô ×Ñ˜cŸh™h¨¨A©Ó.×3Ñ3Ó5€DÜ�d˜2‘h“-€KÜ×Ñ˜cŸm™m¨[Ó9×>Ñ>Ó@€DÜ× Ñ  §¡¨[Ó9×>Ñ>Ó@€GØ��wÐÐr   c                 óÞ  — |j                   dk(  r=| j                  j                  «       }|j                  |«       |j	                  |«       n|j                   | j
                  k(  sJ ‚| j                  }d| _        t        j                  | j                  «      }|j                  j                  |«       || _        t        | d«      r| j                  j                  |«       |S |g| _        |S )zPreplace the IVF quantizer with a flat quantizer and return the
    old quantizerr   FÚreferenced_objects)ÚntotalÚ	quantizerÚreconstruct_nÚtrainÚaddÚnlistÚ
own_fieldsr   r!   ÚthisÚownÚhasattrr?   Úappend)r   Únew_quantizerÚ	centroidsÚold_ownÚold_quantizers        r   Úreplace_ivf_quantizerrO   ^   sÚ   € ð ×Ñ˜qÒ Ø×'Ñ'×5Ñ5Ó7ˆ	Ø×Ñ˜IÔ&Ø×Ñ˜)Õ$à×#Ñ# y§¡Ò6Ð6Ð6ð ×"Ñ"€GØ €IÔÜ×(Ñ(¨×)<Ñ)<Ó=€MØ×Ñ×Ñ˜7Ô#Ø'€IÔäˆyÐ.Ô/Ø×$Ñ$×+Ñ+¨MÔ:ð Ðð )6 ˆ	Ô$ØÐr   c                 ó   — |j                   \  }| j                  |k(  sJ ‚t        j                  | j                  «      }|j
                  | j                  k(  sJ ‚t        j                  |d¬«      }t        j                  ||¬«      }t        j                  |t        j                  |t        ¬«      k(  «      sJ ‚|j                  |«       t        j                  | j                  «      }|j                  t        j                   |«      «       y)zªApply some permutation to the inverted lists, and modify the quantizer
    entries accordingly.
    Perm is an array of size nlist, where old_index = perm[new_index]
    Úint64r   )Ú	minlengthN)r   rE   r   r!   rA   r@   r$   ÚascontiguousarrayÚbincountÚallÚonesr4   Úpermute_entriesÚdowncast_InvertedListsÚinvlistsÚpermute_invlistsr   )r   ÚpermrE   rA   ÚbcrY   s         r   rZ   rZ   v   sÔ   € ð
 �z‰z�H€UØ�?‰?˜eÒ#Ð#Ð#Ü×$Ñ$ Y×%8Ñ%8Ó9€IØ×Ñ˜yŸ™Ò.Ð.Ð.Ü×Ñ ¨GÔ4€Dô 
�‰�T UÔ	+€BÜ�6‰6�"œŸ™ ¬SÔ1Ñ1Ô2Ð2Ð2ð ×Ñ˜dÔ#ô ×+Ñ+¨I×,>Ñ,>Ó?€HØ×ÑœeŸn™n¨TÓ2Õ3r   c                 óp   — t        | j                  «      }t        j                  |«      }t	        | |«       y ©N)r   rY   r$   ÚargsortrZ   )r   Úinvlist_sizesr[   s      r   Úsort_invlists_by_sizera   �   s*   € Ü% i×&8Ñ&8Ó9€MÜ�:‰:�mÓ$€DÜ�Y Õ%r   r^   )Únumpyr$   r   Úfaiss.contrib.inspect_toolsr   r   r&   r=   rO   rZ   ra   © r   r   Ú<module>re      s1   ðó Û å 9óEóEó>!òHò04ó.&r   