§
    ÐÁ³g¥  ã                   óT   — d dl Zd dlZd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
d
„ Zd„ ZdS )é    Nc                 óZ  — t          j        | ¦  «        } |                      |¦  «        }t          j        |d¬¦  «        }dx}}	 |                      |¦  «        }|dk    r-t          j        t          j        |¦  «        ||j        ¦  «         |  	                    |¦  «        }| j
        t           j        j        k    rt          j        || j
        fd¬¦  «        }n5| j        }| j        }||z   dz
  |z  }	t          j        |	||z  |fd¬¦  «        }|dk    r-t          j        t          j        |¦  «        ||j        ¦  «         |�|                      ||¦  «         |�|                      ||¦  «         n6# |�|                      ||¦  «         |�|                      ||¦  «         w w xY w||fS )zy returns the inverted lists content as a pair of (list_ids, list_codes).
    The codes are reshaped to a proper size
    Úint64©ÚdtypeNr   Úuint8é   )ÚfaissÚdowncast_InvertedListsÚ	list_sizeÚnpÚzerosÚget_idsÚmemcpyÚswig_ptrÚnbytesÚ	get_codesÚ	code_sizeÚInvertedListsÚINVALID_CODE_SIZEÚn_per_blockÚ
block_sizeÚrelease_idsÚrelease_codes)
ÚinvlistsÚlÚlsÚlist_idsÚidsÚcodesÚ
list_codesÚnpbÚbsÚls_rounds
             úY/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/inspect_tools.pyÚget_invlistr%   
   sÀ  € õ Ô+¨HÑ5Ô5€HØ	×	Ò	˜AÑ	Ô	€BÝŒx˜ 'Ð*Ñ*Ô*€HØÐ€Cˆ%ð-Ø×Ò˜qÑ!Ô!ˆØ�Š6ˆ6ÝŒL�œ¨Ñ1Ô1°3¸¼ÑHÔHÐHØ×"Ò" 1Ñ%Ô%ˆØÔ¥Ô!4Ô!FÒFÐFÝœ 2 xÔ'9Ð":À'ÐJÑJÔJˆJˆJð Ô&ˆCØÔ$ˆBØ˜S™ 1™¨Ñ,ˆHÝœ 8¨R°3©Y¸Ð"<ÀGÐLÑLÔLˆJØ�Š6ˆ6ÝŒL�œ¨
Ñ3Ô3°U¸JÔ<MÑNÔNÐNàˆ?Ø× Ò   CÑ(Ô(Ð(ØÐØ×"Ò" 1 eÑ,Ô,Ð,øøð ˆ?Ø× Ò   CÑ(Ô(Ð(ØÐØ×"Ò" 1 eÑ,Ô,Ð,Ð,ð øøøà�ZÐÐs   ÁC=E3 Å33F&c                 ól   ‡ — t          j        ˆ fd„t          ‰ j        ¦  «        D ¦   «         d¬¦  «        S )z1 return the array of sizes of the inverted lists c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )r   )Ú.0Úir   s     €r$   ú
<listcomp>z%get_invlist_sizes.<locals>.<listcomp>+   s7   ø€ ð ð ð àð 	×Ò˜1ÑÔðð ð ó    r   r   )r   ÚarrayÚrangeÚnlist)r   s   `r$   Úget_invlist_sizesr0   )   sQ   ø€ åŒ8ð ð ð ð å�x”~Ñ&Ô&ðñ ô ð ðñ ô ð r,   c           	      óh   — | j         j        D ]$}t          |› dt          | |¦  «        › �¦  «         Œ%dS )z3 list values all fields of an object known to SWIG z = N)Ú	__class__Ú__swig_getmethods__ÚprintÚgetattr)ÚobjÚnames     r$   Úprint_object_fieldsr8   1   sK   € ð ”Ô1ð 0ð 0ˆÝ�Ð.Ð.�' # tÑ,Ô,Ð.Ð.Ñ/Ô/Ð/Ð/ð0ð 0r,   c                 ó€   — t          j        | j        ¦  «        }|                     | j        | j        | j        ¦  «        S )z% return the PQ centroids as an array )r	   Úvector_to_arrayÚ	centroidsÚreshapeÚMÚksubÚdsub)ÚpqÚcens     r$   Úget_pq_centroidsrB   8   s0   € å
Ô
 ¤Ñ
-Ô
-€CØ�;Š;�r”t˜RœW b¤gÑ.Ô.Ð.r,   c                 óª   — t          j        | j        ¦  «        }t          j        | j        ¦  «                             | j        | j        ¦  «        }||fS )zo extract matrix + bias from the PCA object
    works for any linear transform (OPQ, random rotation, etc.)
    )r	   r:   ÚbÚAr<   Úd_outÚd_in)ÚpcarD   rE   s      r$   Úget_LinearTransform_matrixrI   >   sE   € õ 	Ô˜cœeÑ$Ô$€AÝÔ˜cœeÑ$Ô$×,Ò,¨S¬Y¸¼ÑAÔA€AØˆaˆ4€Kr,   c                 ó0  — | j         \  }}|�|j         |fk    sJ ‚t          j        |||du¦  «        }t          j        |                      ¦   «         |j        ¦  «         |�t          j        ||j        ¦  «         d|_        |                     ¦   «          |S )zA make a linear transform from a matrix and a bias term (optional)NT)	Úshaper	   ÚLinearTransformÚcopy_array_to_vectorÚravelrE   rD   Ú
is_trainedÚset_is_orthonormal)rE   rD   rF   rG   Últs        r$   Úmake_LinearTransform_matrixrR   G   s”   € à”'�K€Eˆ4Ø€}ØŒw˜5˜)Ò#Ð#Ð#Ð#Ý	Ô	˜t U¨A°T¨MÑ	:Ô	:€BÝ	Ô˜qŸwšw™yœy¨"¬$Ñ/Ô/Ð/Ø€}ÝÔ" 1 b¤dÑ+Ô+Ð+Ø€B„MØ×ÒÑÔÐØ€Ir,   c                 óÞ   ‡‡— t          j        | j        ¦  «                             d| j        ¦  «        Št          j        | j        ¦  «        Šˆˆfd„t          | j        ¦  «        D ¦   «         S )z. return to codebooks of an additive quantizer éÿÿÿÿc                 óB   •— g | ]}‰‰|         ‰|d z            …         ‘ŒS )r   r(   )r)   r*   ÚcoÚ	codebookss     €€r$   r+   z4get_additive_quantizer_codebooks.<locals>.<listcomp>Y   s>   ø€ ð ð ð àð 	�"�Q”%˜˜1˜q™5œ	�/Ô"ðð ð r,   )r	   r:   rW   r<   ÚdÚcodebook_offsetsr.   r=   )ÚaqrV   rW   s    @@r$   Ú get_additive_quantizer_codebooksr[   U   ss   øø€ åÔ% b¤lÑ3Ô3×;Ò;¸BÀÄÑEÔE€IÝ	Ô	˜rÔ2Ñ	3Ô	3€Bðð ð ð ð å�r”t‘”ðñ ô ð r,   c                 óš   — t          j        | j        ¦  «                             d¦  «        }|                     | j        | j        ¦  «        S )z1 copy and return the data matrix in an IndexFlat Úfloat32)r	   r:   r   Úviewr<   ÚntotalrX   )ÚindexÚxbs     r$   Úget_flat_datarb   _   s:   € å	Ô	˜uœ{Ñ	+Ô	+×	0Ò	0°Ñ	;Ô	;€BØ�:Š:�e”l E¤GÑ,Ô,Ð,r,   c                 óp   — t          j        | j        ¦  «                             | j        | j        ¦  «        S )z2 get the codes from an indexFlatCodes as an array )r	   r:   r   r<   r_   r   )Ú
index_flats    r$   Úget_flat_codesre   e   s3   € åÔ  Ô!1Ñ2Ô2×:Ò:ØÔ˜:Ô/ñ1ô 1ð 1r,   c                 óÖ   — |                       ¦   «         }t          j        |j        |j        fd¬¦  «        }t          j        t          j        |¦  «        |j        |j	        ¦  «         |S )zf get the neighbor list for the vectors stored in the NSG structure, as
    a N-by-K matrix of indices Úint32r   )
Úget_final_graphr   r   ÚNÚKr	   r   r   Údatar   )ÚnsgÚgraphÚ	neighborss      r$   Úget_NSG_neighborsro   k   sf   € ð ×ÒÑ!Ô!€EÝ”˜%œ' 5¤7Ð+°7Ð;Ñ;Ô;€IÝ	„LÝŒ�yÑ!Ô!ØŒ
ØÔñô ð ð
 Ðr,   )N)Únumpyr   r	   r%   r0   r8   rB   rI   rR   r[   rb   re   ro   r(   r,   r$   ú<module>rq      sÁ   ðð Ð Ð Ð Ø €€€ð ð  ð  ð>ð ð ð0ð 0ð 0ð/ð /ð /ðð ð ðð ð ð ðð ð ð-ð -ð -ð1ð 1ð 1ð
ð 
ð 
ð 
ð 
r,   