§
    ÐÁ³g
  ã                   óL   — 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
dS )
é    N)Úget_invlist_sizesc                 óN  — |j         \  }}|j         |fk    sJ ‚t          | t          j        ¦  «        r|dz  }|| j        k    sJ ‚|�"|j         |fk    sJ ‚t          j        |¦  «        }|                      |t          j        |¦  «        |t          j        |¦  «        ¦  «         dS )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         úU/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/ivf_tools.pyÚadd_preassignedr      s½   € ð Œ7�D€A€qØŒ7�q�eÒÐÐÐÝ�)�UÔ1Ñ2Ô2ð Ø	ˆQ‰ˆØ�	”ÒÐÐÐØ
€ØŒy˜Q˜EÒ!Ð!Ð!Ð!ÝŒn˜SÑ!Ô!ˆØ×ÒØ	�5Œ>˜!ÑÔ˜c¥5¤>°!Ñ#4Ô#4ñô ð ð ð ó    c                 ón  — t          | t          j        ¦  «        r�| j                             ¦   «         dk    s
J d¦   «         ‚t          j        | j                             d¦  «        ¦  «        }|                     |¦  «        }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 ‚|                      ||||¦  «        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Úfloat32N©Ú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&      sC  € õ �)�UÔ4Ñ5Ô5ð :ØŒ×#Ò#Ñ%Ô%¨Ò*Ð*Ð*Ð,PÑ*Ô*Ð*ÝÔ2°9´?×3EÒ3EÀaÑ3HÔ3HÑIÔIˆ	Ø�_Š_˜RÑ Ô ˆÝÔ(¨¬Ñ9Ô9ˆ	ØŒ8�D€A€qÝ�)�UÔ1Ñ2Ô2ð Ø	ˆQ‰ˆØˆˆàˆà�	”ÒÐÐÐØŒ>˜a Ô!1Ð2Ò2Ð2Ð2Ð2ð ÐÝ”X˜q )Ô"2Ð3¸8ÐDÑDÔDˆ
ˆ
àÔ A yÔ'7Ð#8Ò8Ð8Ð8Ð8à×'Ò'¨¨A¨x¸ÑDÔ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	        }	|  
                    | |	|¦  «        | |	|¦  «         |	|¦  «        |¦  «         t          j        |j        |dz   ¦  «                             ¦   «         }
t          |
d         ¦  «        }t          j        |j        |¦  «                             ¦   «         }t          j        |j        |¦  «                             ¦   «         }|
||fS )z[
    Perform a range search in the IVF index, with predefined lists to
    search into
    r   r   r   Nr   r   éÿÿÿÿ)r   r   r   r	   r$   Úemptyr#   r
   ÚRangeSearchResultr   Úrange_search_preassigned_cÚrev_swig_ptrÚlimsÚcopyÚintÚ	distancesÚlabels)r   r   Úradiusr)   r*   r   r
   r,   ÚresÚspr3   Únum_resultsÚdistÚindicess                 r   Úrange_search_preassignedr>   <   s�  € ð
 Œ7�D€A€qÝ�)�UÔ1Ñ2Ô2ð Ø	ˆQ‰ˆØˆˆàˆð ÐÝ”X˜q )Ô"2Ð3¸8ÐDÑDÔDˆ
ˆ
àÔ A yÔ'7Ð#8Ò8Ð8Ð8Ð8à�	”ÒÐÐÐØŒ>˜a Ô!1Ð2Ò2Ð2Ð2Ð2å
Ô
! !Ñ
$Ô
$€CÝ	Œ€Bà×(Ò(Ø	ˆ2ˆ2ˆa‰5Œ5�&Ø
ˆˆ8‰Œ�b�b˜‘n”nØñô ð õ Ô˜cœh¨¨A©Ñ.Ô.×3Ò3Ñ5Ô5€DÝ�d˜2”h‘-”-€KÝÔ˜cœm¨[Ñ9Ô9×>Ò>Ñ@Ô@€DÝÔ  ¤¨[Ñ9Ô9×>Ò>Ñ@Ô@€GØ��wÐÐr   c                 ó¾  — |j         dk    rD| j                             ¦   «         }|                     |¦  «         |                     |¦  «         n|j         | j        k    sJ ‚| j        }d| _        t          j        | j        ¦  «        }|j	         
                    |¦  «         || _        t          | d¦  «        r| j                             |¦  «         n|g| _        |S )zQ replace 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_quantizerrP   b   sè   € ð Ô˜qÒ Ð ØÔ'×5Ò5Ñ7Ô7ˆ	Ø×Ò˜IÑ&Ô&Ð&Ø×Ò˜)Ñ$Ô$Ð$Ð$àÔ# y¤Ò6Ð6Ð6Ð6ð Ô"€GØ €IÔÝÔ(¨Ô)<Ñ=Ô=€MØÔ×Ò˜7Ñ#Ô#Ð#Ø'€IÔåˆyÐ.Ñ/Ô/ð 7ØÔ$×+Ò+¨MÑ:Ô:Ð:Ð:à(5 ˆ	Ô$ØÐ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 ‚|                     |¦  «         t          j        | j        ¦  «        }|                     t          j        |¦  «        ¦  «         dS )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   rF   r   r!   rB   rA   r$   ÚascontiguousarrayÚbincountÚallÚonesr5   Úpermute_entriesÚdowncast_InvertedListsÚinvlistsÚpermute_invlistsr   )r   ÚpermrF   rB   ÚbcrZ   s         r   r[   r[   z   sí   € ð
 ŒZ�F€EØŒ?˜eÒ#Ð#Ð#Ð#ÝÔ$ YÔ%8Ñ9Ô9€IØÔ˜yœÒ.Ð.Ð.Ð.ÝÔ ¨GÐ4Ñ4Ô4€Dõ 
Œ�T UÐ	+Ñ	+Ô	+€BÝŒ6�"�œ ­SÐ1Ñ1Ô1Ò1Ñ2Ô2Ð2Ð2Ð2ð ×Ò˜dÑ#Ô#Ð#õ Ô+¨IÔ,>Ñ?Ô?€HØ×Ò�eœn¨TÑ2Ô2Ñ3Ô3Ð3Ð3Ð3r   c                 óv   — t          | j        ¦  «        }t          j        |¦  «        }t	          | |¦  «         d S ©N)r   rZ   r$   Úargsortr[   )r   Úinvlist_sizesr\   s      r   Úsort_invlists_by_sizerb   ‘   s7   € Ý% iÔ&8Ñ9Ô9€MÝŒ:�mÑ$Ô$€DÝ�Y Ñ%Ô%Ð%Ð%Ð%r   r_   )Únumpyr$   r   Úfaiss.contrib.inspect_toolsr   r   r&   r>   rP   r[   rb   © r   r   ú<module>rf      s¦   ðð Ð Ð Ð Ø €€€à 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð"Eð Eð Eð Eð>#ð #ð #ð #ðLð ð ð04ð 4ð 4ð.&ð &ð &ð &ð &r   