§
    ÐÁ³gÊh  ã                   óÞ  — d Z ddlZddlZddlZddlZddlZddlZd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zej        dd	„¦   «         Z	 dd„Zd„ Zej        d         Z ee¦  «        D ]<Z eee¦  «        Z ej        e¦  «        reZ eeej        ¦  «        r ee¦  «         Œ=ej        dfd„Z eededd¦  «         ddej        dd
fd„Z eededd¦  «         dej        dfd„Z eededd¦  «         dS )a”  

This is a set of function wrappers that override the default numpy versions.

Interoperability functions for pytorch and Faiss: Importing this will allow
pytorch Tensors (CPU or GPU) to be used as arguments to Faiss indexes and
other functions. Torch GPU tensors can only be used with Faiss GPU indexes.
If this is imported with a package that supports Faiss GPU, the necessary
stream synchronization with the current pytorch stream will be automatically
performed.

Numpy ndarrays can continue to be used in the Faiss python interface after
importing this file. All arguments must be uniformly either numpy ndarrays
or Torch tensors; no mixing is allowed.

é    Nc                 óö   — |                       ¦   «         sJ ‚| j        t          j        k    sJ ‚t	          j        |                      ¦   «                              ¦   «         |                      ¦   «         z   ¦  «        S )úA gets a Faiss SWIG pointer from a pytorch tensor (on CPU or GPU) )	Úis_contiguousÚdtypeÚtorchÚuint8ÚfaissÚcast_integer_to_uint8_ptrÚuntyped_storageÚdata_ptrÚstorage_offset©Úxs    úW/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/torch_utils.pyÚswig_ptr_from_UInt8Tensorr   #   sn   € à�?Š?ÑÔÐÐÐØŒ7•e”kÒ!Ð!Ð!Ð!ÝÔ*Ø	×ÒÑÔ×$Ò$Ñ&Ô&¨×)9Ò)9Ñ);Ô);Ñ;ñ=ô =ð =ó    c                 óü   — |                       ¦   «         sJ ‚| j        t          j        k    sJ ‚t	          j        |                      ¦   «                              ¦   «         |                      ¦   «         dz  z   ¦  «        S ©r   é   )	r   r   r   Úfloat16r	   Úcast_integer_to_void_ptrr   r   r   r   s    r   Úswig_ptr_from_HalfTensorr   +   sv   € à�?Š?ÑÔÐÐÐØŒ7•e”mÒ#Ð#Ð#Ð#åÔ)Ø	×ÒÑÔ×$Ò$Ñ&Ô&¨×)9Ò)9Ñ);Ô);¸aÑ)?Ñ?ñAô Að Ar   c                 óü   — |                       ¦   «         sJ ‚| j        t          j        k    sJ ‚t	          j        |                      ¦   «                              ¦   «         |                      ¦   «         dz  z   ¦  «        S )r   é   )	r   r   r   Úfloat32r	   Úcast_integer_to_float_ptrr   r   r   r   s    r   Úswig_ptr_from_FloatTensorr   4   sv   € à�?Š?ÑÔÐÐÐØŒ7•e”mÒ#Ð#Ð#Ð#ÝÔ*Ø	×ÒÑÔ×$Ò$Ñ&Ô&¨×)9Ò)9Ñ);Ô);¸aÑ)?Ñ?ñAô Að Ar   c                 óü   — |                       ¦   «         sJ ‚| j        t          j        k    sJ ‚t	          j        |                      ¦   «                              ¦   «         |                      ¦   «         dz  z   ¦  «        S r   )	r   r   r   Úbfloat16r	   r   r   r   r   r   s    r   Úswig_ptr_from_BFloat16Tensorr    ;   sv   € à�?Š?ÑÔÐÐÐØŒ7•e”nÒ$Ð$Ð$Ð$ÝÔ)Ø	×ÒÑÔ×$Ò$Ñ&Ô&¨×)9Ò)9Ñ);Ô);¸aÑ)?Ñ?ñAô Að Ar   c                 ó  — |                       ¦   «         sJ ‚| j        t          j        k    sJ d| j        z  ¦   «         ‚t	          j        |                      ¦   «                              ¦   «         |                      ¦   «         dz  z   ¦  «        S )r   údtype=%sr   )	r   r   r   Úint32r	   Úcast_integer_to_int_ptrr   r   r   r   s    r   Úswig_ptr_from_IntTensorr%   C   s…   € à�?Š?ÑÔÐÐÐØŒ7•e”kÒ!Ð!Ð! :°´Ñ#7Ñ!Ô!Ð!ÝÔ(Ø	×ÒÑÔ×$Ò$Ñ&Ô&¨×)9Ò)9Ñ);Ô);¸aÑ)?Ñ?ñAô Að Ar   c                 ó  — |                       ¦   «         sJ ‚| j        t          j        k    sJ d| j        z  ¦   «         ‚t	          j        |                      ¦   «                              ¦   «         |                      ¦   «         dz  z   ¦  «        S )r   r"   é   )	r   r   r   Úint64r	   Úcast_integer_to_idx_t_ptrr   r   r   r   s    r   Úswig_ptr_from_IndicesTensorr*   K   s…   € à�?Š?ÑÔÐÐÐØŒ7•e”kÒ!Ð!Ð! :°´Ñ#7Ñ!Ô!Ð!ÝÔ*Ø	×ÒÑÔ×$Ò$Ñ&Ô&¨×)9Ò)9Ñ);Ô);¸aÑ)?Ñ?ñAô Að Ar   c              #   óê  K  — |€t           j                             ¦   «         }t          j        |j        ¦  «        }t           j                             ¦   «         }|                      t           j                             ¦   «         ¦  «        }|                      t           j                             ¦   «         |¦  «         	 dV — |                      ||¦  «         dS # |                      ||¦  «         w xY w)zú Creates a scoping object to make Faiss GPU use the same stream
        as pytorch, based on torch.cuda.current_stream().
        Or, a specific pytorch stream can be passed in as a second
        argument, in which case we will use that stream.
    N)	r   ÚcudaÚcurrent_streamr	   Úcast_integer_to_cudastream_tÚcuda_streamÚcurrent_deviceÚgetDefaultStreamÚsetDefaultStream)ÚresÚpytorch_streamÚcuda_stream_sÚ	prior_devÚprior_streams        r   Úusing_streamr8   V   sÖ   è è € ð ÐÝœ×2Ò2Ñ4Ô4ˆõ Ô6°~Ô7QÑRÔR€Mõ ”
×)Ò)Ñ+Ô+€IØ×'Ò'­¬
×(AÒ(AÑ(CÔ(CÑDÔD€Là×Ò�œ×2Ò2Ñ4Ô4°mÑDÔDÐDð6Øˆˆˆà×Ò˜Y¨Ñ5Ô5Ð5Ð5Ð5øˆ×Ò˜Y¨Ñ5Ô5Ð5Ð5øøøs   Â>C ÃC2Fc                 óà   — 	 t          | |¦  «        }n# t          $ r |rY d S ‚ w xY w|j        d|z   k    rd S |s|j        d|z   k    sJ ‚t          | |dz   |¦  «         t          | ||¦  «         d S )NÚtorch_replacement_Úreplacement_Ú_numpy)ÚgetattrÚAttributeErrorÚ__name__Úsetattr)Ú	the_classÚnameÚreplacementÚignore_missingÚignore_no_baseÚorig_methods         r   Útorch_replace_methodrG   p   s®   € ðÝ˜i¨Ñ.Ô.ˆˆøÝð ð ð Øð 	ØˆFˆFØðøøøð ÔÐ3°dÑ:Ò:Ð:àˆð ÐL˜kÔ2°nÀtÑ6KÒKÐKÐKÐKÝˆI�t˜h‘¨Ñ4Ô4Ð4ÝˆI�t˜[Ñ)Ô)Ð)Ð)Ð)s   ‚ “$¢$c                 ól  ‡— d„ }d„ }d#d„}d„ }d„ Šd$ˆfd„	}d%ˆfd„	}d d dœˆfd	„
}d
„ }d#d„}	d&d„}
d„ }d„ }d#d„}d#d„}t          | d|¦  «         t          | d|¦  «         t          | d|¦  «         t          | d|¦  «         t          | d|¦  «         t          | d|¦  «         t          | d|	¦  «         t          | d|
¦  «         t          | d|¦  «         t          | d|d¬¦  «         t          | d|d¬¦  «         t          | d |d¬¦  «         t          | d!|¦  «         t          | d"|¦  «         d S )'Nc                 óþ  — t          |¦  «        t          j        u r|                      |¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚t          |¦  «        }|j	        rlt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                      ||¦  «         d S ©NÚ	getDeviceú#GPU tensor on CPU index not allowed)ÚtypeÚnpÚndarrayÚ	add_numpyr   ÚTensorÚshapeÚdr   Úis_cudaÚhasattrr8   ÚgetResourcesÚadd_c©Úselfr   ÚnrS   Úx_ptrs        r   Útorch_replacement_addz1handle_torch_Index.<locals>.torch_replacement_add†   s@  € Ý�‰7Œ7•b”jÐ Ð à—>’> !Ñ$Ô$Ð$å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{Ý)¨!Ñ,Ô,ˆàŒ9ð 	!Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð %ð %Ø—
’
˜1˜eÑ$Ô$Ð$ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð %ð %ð �JŠJ�q˜%Ñ Ô Ð Ð Ð ó   Â6CÃCÃ!Cc                 óˆ  — t          |¦  «        t          j        u r|                      ||¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚t          |¦  «        }t          |¦  «        t          j        u sJ ‚|j        |fk    s
J d¦   «         ‚t          |¦  «        }|j
        rmt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      |||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                      |||¦  «         d S )Nz!not same number of vectors as idsrK   rL   )rM   rN   rO   Úadd_with_ids_numpyr   rQ   rR   rS   r   r*   rT   rU   r8   rV   Úadd_with_ids_c)rY   r   ÚidsrZ   rS   r[   Úids_ptrs          r   Útorch_replacement_add_with_idsz:handle_torch_Index.<locals>.torch_replacement_add_with_idsš   s�  € Ý�‰7Œ7•b”jÐ Ð à×*Ò*¨1¨cÑ2Ô2Ð2å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{Ý)¨!Ñ,Ô,ˆå�C‰yŒy�EœLÐ(Ð(Ð(Ð(ØŒy˜Q˜EÒ!Ð!Ð!Ð#FÑ!Ô!Ð!Ý-¨cÑ2Ô2ˆàŒ9ð 	3Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 7ð 7Ø×#Ò# A u¨gÑ6Ô6Ð6ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð 7ð 7ð ×Ò  5¨'Ñ2Ô2Ð2Ð2Ð2s   Ã9DÄD"Ä%D"c                 óÐ  — t          |¦  «        t          j        u r|                      |||¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚t          |¦  «        }|€(t	          j	        |||j
        t          j        ¬¦  «        }n,t          |¦  «        t          j        u sJ ‚|j        ||fk    sJ ‚t          |¦  «        }|j        rlt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      ||||¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      ||||¦  «         |S )N©Údevicer   rK   rL   )rM   rN   rO   Úassign_numpyr   rQ   rR   rS   r   Úemptyrf   r(   r*   rT   rU   r8   rV   Úassign_c)rY   r   ÚkÚlabelsrZ   rS   r[   ÚL_ptrs           r   Útorch_replacement_assignz4handle_torch_Index.<locals>.torch_replacement_assign²   sŸ  € Ý�‰7Œ7•b”jÐ Ð à×$Ò$ Q¨¨6Ñ2Ô2Ð2å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{Ý)¨!Ñ,Ô,ˆàˆ>Ý”[  A¨a¬h½e¼kÐJÑJÔJˆFˆFå˜‘<”<¥5¤<Ð/Ð/Ð/Ð/Ø”< A q 6Ò)Ð)Ð)Ð)Ý+¨FÑ3Ô3ˆàŒ9ð 	.Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 2ð 2Ø—’˜a ¨¨qÑ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2øð �MŠM˜!˜U E¨1Ñ-Ô-Ð-àˆs   ÄEÅEÅ	Ec                 óþ  — t          |¦  «        t          j        u r|                      |¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚t          |¦  «        }|j	        rlt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                      ||¦  «         d S rJ   )rM   rN   rO   Útrain_numpyr   rQ   rR   rS   r   rT   rU   r8   rV   Útrain_crX   s        r   Útorch_replacement_trainz3handle_torch_Index.<locals>.torch_replacement_trainÏ   sB  € Ý�‰7Œ7•b”jÐ Ð à×#Ò# AÑ&Ô&Ð&å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{Ý)¨!Ñ,Ô,ˆàŒ9ð 	#Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 'ð 'Ø—’˜Q Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð 'ð 'ð �LŠL˜˜EÑ"Ô"Ð"Ð"Ð"r]   c                 óÖ  — | j         \  }}t          | ¦  «        }|€(t          j        ||| j        t          j        ¬¦  «        }n,t          |¦  «        t          j        u sJ ‚|j         ||fk    sJ ‚t          |¦  «        }|€(t          j        ||| j        t          j        ¬¦  «        }n,t          |¦  «        t          j        u sJ ‚|j         ||fk    sJ ‚t          |¦  «        }|||||fS )Nre   )
rR   r   r   rh   rf   r   rM   rQ   r(   r*   )	r   rj   ÚDÚIrZ   rS   r[   ÚD_ptrÚI_ptrs	            r   Úsearch_methods_commonz1handle_torch_Index.<locals>.search_methods_commonã   së   € ØŒw‰ˆˆ1Ý)¨!Ñ,Ô,ˆàˆ9Ý”˜A˜q¨¬½¼ÐGÑGÔGˆAˆAå˜‘7”7�eœlÐ*Ð*Ð*Ð*Ø”7˜q !˜fÒ$Ð$Ð$Ð$Ý)¨!Ñ,Ô,ˆàˆ9Ý”˜A˜q¨¬½¼ÐEÑEÔEˆAˆAå˜‘7”7�eœlÐ*Ð*Ð*Ð*Ø”7˜q !˜fÒ$Ð$Ð$Ð$Ý+¨AÑ.Ô.ˆà�e˜U A qÐ(Ð(r   c                 ó  •— t          |¦  «        t          j        u r|                      ||||¬¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚ ‰
||||¦  «        \  }}}	}}|j        rmt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      |||||	¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      |||||	¦  «         ||fS )N©rs   rt   rK   rL   )rM   rN   rO   Úsearch_numpyr   rQ   rR   rS   rT   rU   r8   rV   Úsearch_c)rY   r   rj   rs   rt   rZ   rS   r[   ru   rv   rw   s             €r   Útorch_replacement_searchz4handle_torch_Index.<locals>.torch_replacement_search÷   sa  ø€ Ý�‰7Œ7•b”jÐ Ð à×$Ò$ Q¨¨Q°!Ð$Ñ4Ô4Ð4å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{à$9Ð$9¸!¸QÀÀ1Ñ$EÔ$EÑ!ˆˆu�e˜Q àŒ9ð 	5Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 9ð 9Ø—’˜a ¨¨5°%Ñ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9øð �MŠM˜!˜U A u¨eÑ4Ô4Ð4à�!ˆtˆs   Ã C&Ã&C*Ã-C*c           	      óô  •— t          |¦  «        t          j        u r|                      |||||¬¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚ ‰||||¦  «        \  }}	}
}}|€)t	          j        ||||j	        t          j
        ¬¦  «        }n-t          |¦  «        t          j        u sJ ‚|j        |||fk    sJ ‚t          |¦  «        }|j        rnt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      ||||	|
|¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      ||||	|
|¦  «         |||fS )N)rs   rt   ÚRre   rK   rL   )rM   rN   rO   Úsearch_and_reconstruct_numpyr   rQ   rR   rS   rh   rf   r   r   rT   rU   r8   rV   Úsearch_and_reconstruct_c)rY   r   rj   rs   rt   r~   rZ   rS   r[   ru   rv   ÚR_ptrrw   s               €r   Ú(torch_replacement_search_and_reconstructzDhandle_torch_Index.<locals>.torch_replacement_search_and_reconstruct  sã  ø€ Ý�‰7Œ7•b”jÐ Ð à×4Ò4°Q¸¸QÀ!ÀqÐ4ÑIÔIÐIå�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{à$9Ð$9¸!¸QÀÀ1Ñ$EÔ$EÑ!ˆˆu�e˜Q àˆ9Ý”˜A˜q !¨A¬H½E¼MÐJÑJÔJˆAˆAå˜‘7”7�eœlÐ*Ð*Ð*Ð*Ø”7˜q ! Q˜iÒ'Ð'Ð'Ð'Ý)¨!Ñ,Ô,ˆàŒ9ð 	LÝ˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð Pð PØ×-Ò-¨a°¸¸5À%ÈÑOÔOÐOðPð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Pøð ×)Ò)¨!¨U°A°u¸eÀUÑKÔKÐKà�!�Qˆwˆs   Ä(EÅEÅEry   c                ó  •— t          |¦  «        t          j        u r|                      ||||||¬¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚ ‰||||¦  «        \  }	}
}}}|j        || j        fk    sJ ‚| 	                    ¦   «         }t          |¦  «        }|�6| 	                    ¦   «         }|j        |j        k    sJ ‚t          |¦  «        }nd }|j        rpt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      ||	||||
|d¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      ||	||||
|d¦  «         ||fS )Nry   rK   rL   F)rM   rN   rO   Úsearch_preassigned_numpyr   rQ   rR   rS   ÚnprobeÚ
contiguousr*   r   rT   rU   r8   rV   Úsearch_preassigned_c)rY   r   rj   ÚIqÚDqrs   rt   rZ   rS   r[   ru   rv   ÚIq_ptrÚDq_ptrrw   s                 €r   Ú$torch_replacement_search_preassignedz@handle_torch_Index.<locals>.torch_replacement_search_preassigned,  sø  ø€ Ý�‰7Œ7•b”jÐ Ð à×0Ò0°°A°r¸2ÀÀaÐ0ÑHÔHÐHå�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{à$9Ð$9¸!¸QÀÀ1Ñ$EÔ$EÑ!ˆˆu�e˜Q àŒx˜A˜tœ{Ð+Ò+Ð+Ð+Ð+Ø�]Š]‰_Œ_ˆÝ,¨RÑ0Ô0ˆàˆ>Ø—’‘”ˆBØ”8˜rœxÒ'Ð'Ð'Ð'Ý.¨rÑ2Ô2ˆFˆFàˆFàŒ9ð 	XÝ˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð \ð \Ø×)Ò)¨!¨U°A°v¸vÀuÈeÐUZÑ[Ô[Ð[ð\ð \ð \ñ \ô \ð \ð \ð \ð \ð \ð \øøøð \ð \ð \ð \øð ×%Ò% a¨°°6¸6À5È%ÐQVÑWÔWÐWà�!ˆtˆs   Ä3EÅE Å#E c                 óv   — t          |¦  «        t          j        us
J d¦   «         ‚|                      |¦  «        S )Nz(remove_ids not yet implemented for torch)rM   r   rQ   Úremove_ids_numpy)rY   r   s     r   Útorch_replacement_remove_idsz8handle_torch_Index.<locals>.torch_replacement_remove_idsN  s8   € å�A‰wŒw�eœlÐ*Ð*Ð*Ð,VÑ*Ô*Ð*Ø×$Ò$ QÑ'Ô'Ð'r   c                 óà  — |�1t          |¦  «        t          j        u r|                      ||¦  «        S t	          j        d¦  «        }t          | d¦  «        r't	          j        d|                      ¦   «         ¦  «        }|€'t	          j        | j	        |t          j
        ¬¦  «        }n0t          |¦  «        t          j        u sJ ‚|j        | j	        fk    sJ ‚t          |¦  «        }|j        rjt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      ||¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      ||¦  «         |S )NÚcpurK   r,   re   rL   )rM   rN   rO   Úreconstruct_numpyr   rf   rU   rK   rh   rS   r   rQ   rR   r   rT   r8   rV   Úreconstruct_c)rY   Úkeyr   rf   r[   s        r   Útorch_replacement_reconstructz9handle_torch_Index.<locals>.torch_replacement_reconstructS  s›  € ð ˆM¥ Q¡¤­2¬:Ð 5Ð 5à×)Ò)¨#¨qÑ1Ô1Ð1õ ”˜eÑ$Ô$ˆÝ�4˜Ñ%Ô%ð 	<å”\ &¨$¯.ª.Ñ*:Ô*:Ñ;Ô;ˆFàˆ9Ý”˜DœF¨6½¼ÐGÑGÔGˆAˆAå˜‘7”7�eœlÐ*Ð*Ð*Ð*Ø”7˜tœv˜jÒ(Ð(Ð(Ð(Ý)¨!Ñ,Ô,ˆàŒ9ð 	+Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð /ð /Ø×"Ò" 3¨Ñ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /øð ×Ò˜s EÑ*Ô*Ð*àˆs   Ä)EÅEÅEr   éÿÿÿÿc                 ó  — |dk    r| j         }|�2t          |¦  «        t          j        u r|                      |||¦  «        S t          j        d¦  «        }t          | d¦  «        r't          j        d|                      ¦   «         ¦  «        }|€(t          j	        || j
        |t
          j        ¬¦  «        }n1t          |¦  «        t
          j        u sJ ‚|j        || j
        fk    sJ ‚t          |¦  «        }|j        rkt          | d¦  «        s
J d¦   «         ‚t!          |                      ¦   «         ¦  «        5  |                      |||¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      |||¦  «         |S )Nr–   r‘   rK   r,   re   rL   )ÚntotalrM   rN   rO   Úreconstruct_n_numpyr   rf   rU   rK   rh   rS   r   rQ   rR   r   rT   r8   rV   Úreconstruct_n_c)rY   Ún0Únir   rf   r[   s         r   Útorch_replacement_reconstruct_nz;handle_torch_Index.<locals>.torch_replacement_reconstruct_nu  sµ  € Ø�Š8ˆ8Ø”ˆBð
 ˆM¥ Q¡¤­2¬:Ð 5Ð 5à×+Ò+¨B°°AÑ6Ô6Ð6õ ”˜eÑ$Ô$ˆÝ�4˜Ñ%Ô%ð 	<å”\ &¨$¯.ª.Ñ*:Ô*:Ñ;Ô;ˆFàˆ9Ý”˜B ¤¨v½U¼]ÐKÑKÔKˆAˆAå˜‘7”7�eœlÐ*Ð*Ð*Ð*Ø”7˜r 4¤6˜lÒ*Ð*Ð*Ð*Ý)¨!Ñ,Ô,ˆàŒ9ð 	0Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 4ð 4Ø×$Ò$ R¨¨UÑ3Ô3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4øð × Ò   R¨Ñ/Ô/Ð/àˆs   Ä9EÅE!Å$E!c                 óh  — t          |¦  «        t          j        u r|                      ||¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }t          |¦  «        }t          |¦  «        t          j        u sJ ‚|j        || j        fk    sJ ‚t          |¦  «        }|j
        rmt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      |||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S |                      |||¦  «         d S rJ   )rM   rN   rO   Úupdate_vectors_numpyr   rQ   rR   r*   rS   r   rT   rU   r8   rV   Úupdate_vectors_c)rY   Úkeysr   rZ   Úkeys_ptrr[   s         r   Ú torch_replacement_update_vectorsz<handle_torch_Index.<locals>.torch_replacement_update_vectorsš  sz  € Ý�‰:Œ:�œÐ#Ð#à×,Ò,¨T°1Ñ5Ô5Ð5å�D‰zŒz�Uœ\Ð)Ð)Ð)Ð)Ø”
‰ˆÝ.¨tÑ4Ô4ˆå�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw˜1˜dœf˜+Ò%Ð%Ð%Ð%Ý)¨!Ñ,Ô,ˆàŒ9ð 	6Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð :ð :Ø×%Ò% a¨°5Ñ9Ô9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð :ð :ð ×!Ò! ! X¨uÑ5Ô5Ð5Ð5Ð5s   Ã)DÄDÄDc                 ól  — t          |¦  «        t          j        u r|                      ||¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚t          |¦  «        }|j	        r
J d¦   «         ‚t          | d¦  «        r
J d¦   «         ‚t          j        |¦  «        }|                      ||||¦  «         t	          j        t          j        |j        |dz   ¦  «                             ¦   «                              d¦  «        ¦  «        }t'          |d         ¦  «        }t	          j        t          j        |j        |¦  «                             ¦   «         ¦  «        }	t	          j        t          j        |j        |¦  «                             ¦   «         ¦  «        }
||	|
fS )Nz1Range search using GPU tensor not yet implementedrK   z-Range search on GPU index not yet implementedé   r(   r–   )rM   rN   rO   Úrange_search_numpyr   rQ   rR   rS   r   rT   rU   r	   ÚRangeSearchResultÚrange_search_cÚ
from_numpyÚrev_swig_ptrÚlimsÚcopyÚastypeÚintÚ	distancesrk   )rY   r   ÚthreshrZ   rS   r[   r3   r«   Úndrs   rt   s              r   Útorch_replacement_range_searchz:handle_torch_Index.<locals>.torch_replacement_range_search³  s|  € Ý�‰7Œ7•b”jÐ Ð à×*Ò*¨1¨fÑ5Ô5Ð5å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{Ý)¨!Ñ,Ô,ˆà”9ÐQÐQÐQÑQÔQÐQÝ˜4 Ñ-Ô-Ð^Ð^Ð/^Ñ^Ô^Ð^åÔ% aÑ(Ô(ˆØ×Ò˜A˜u f¨cÑ2Ô2Ð2õ Ô¥Ô 2°3´8¸QÀ¹UÑ CÔ C× HÒ HÑ JÔ J× QÒ QÐRYÑ ZÔ ZÑ[Ô[ˆÝ��b”‰]Œ]ˆÝÔ�UÔ/°´¸rÑBÔB×GÒGÑIÔIÑJÔJˆÝÔ�UÔ/°´
¸BÑ?Ô?×DÒDÑFÔFÑGÔGˆà�Q˜ˆzÐr   c                 óÌ  — t          |¦  «        t          j        u r|                      ||¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}|| j        k    sJ ‚t          |¦  «        }|€4t	          j	        ||  
                    ¦   «         t          j        ¬¦  «        }n!|j        ||  
                    ¦   «         fk    sJ ‚t          |¦  «        }|j        rkt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      |||¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      |||¦  «         |S ©N)r   rK   rL   )rM   rN   rO   Úsa_encode_numpyr   rQ   rR   rS   r   rh   Úsa_code_sizer   r   rT   rU   r8   rV   Úsa_encode_c)rY   r   ÚcodesrZ   rS   r[   Ú	codes_ptrs          r   Útorch_replacement_sa_encodez7handle_torch_Index.<locals>.torch_replacement_sa_encodeÎ  s™  € Ý�‰7Œ7•b”jÐ Ð à×'Ò'¨¨5Ñ1Ô1Ð1å�A‰wŒw�%œ,Ð&Ð&Ð&Ð&ØŒw‰ˆˆ1Ø�D”FŠ{ˆ{ˆ{ˆ{Ý)¨!Ñ,Ô,ˆàˆ=Ý”K  4×#4Ò#4Ñ#6Ô#6½e¼kÐJÑJÔJˆEˆEà”; 1 d×&7Ò&7Ñ&9Ô&9Ð":Ò:Ð:Ð:Ð:Ý-¨eÑ4Ô4ˆ	àŒ9ð 	2Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 6ð 6Ø× Ò   E¨9Ñ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øð ×Ò˜Q  yÑ1Ô1Ð1àˆs   ÄEÅEÅEc                 óì  — t          |¦  «        t          j        u r|                      ||¦  «        S t          |¦  «        t          j        u sJ ‚|j        \  }}||                      ¦   «         k    sJ ‚t          |¦  «        }|€'t	          j	        || j
        t          j        ¬¦  «        }n1t          |¦  «        t          j        u sJ ‚|j        || j
        fk    sJ ‚t          |¦  «        }|j        rkt          | d¦  «        s
J d¦   «         ‚t          |                      ¦   «         ¦  «        5  |                      |||¦  «         d d d ¦  «         n# 1 swxY w Y   n|                      |||¦  «         |S r´   )rM   rN   rO   Úsa_decode_numpyr   rQ   rR   r¶   r   rh   rS   r   r   rT   rU   r8   rV   Úsa_decode_c)rY   r¸   r   rZ   Úcsr¹   r[   s          r   Útorch_replacement_sa_decodez7handle_torch_Index.<locals>.torch_replacement_sa_decodeê  s«  € Ý�‰;Œ;�"œ*Ð$Ð$à×'Ò'¨¨qÑ1Ô1Ð1å�E‰{Œ{�eœlÐ*Ð*Ð*Ð*Ø”‰ˆˆ2Ø�T×&Ò&Ñ(Ô(Ò(Ð(Ð(Ð(Ý-¨eÑ4Ô4ˆ	àˆ9Ý”˜A˜tœv­U¬]Ð;Ñ;Ô;ˆAˆAå˜‘7”7�eœlÐ*Ð*Ð*Ð*Ø”7˜q $¤&˜kÒ)Ð)Ð)Ð)Ý)¨!Ñ,Ô,ˆàŒ=ð 	2Ý˜4 Ñ-Ô-ÐTÐTÐ/TÑTÔTÐTõ ˜d×/Ò/Ñ1Ô1Ñ2Ô2ð 6ð 6Ø× Ò   I¨uÑ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øð ×Ò˜Q 	¨5Ñ1Ô1Ð1àˆs   Ä-EÅEÅEÚaddÚadd_with_idsÚassignÚtrainÚsearchÚ
remove_idsÚreconstructÚreconstruct_nÚrange_searchÚupdate_vectorsT)rD   Úsearch_and_reconstructÚsearch_preassignedÚ	sa_encodeÚ	sa_decode©N)NN)NNN)r   r–   N)rG   )rA   r\   rc   rm   rq   r|   r‚   rŒ   r�   r•   r�   r£   r²   rº   r¿   rw   s                  @r   Úhandle_torch_IndexrÏ   …   s�  ø€ ð!ð !ð !ð(3ð 3ð 3ð0ð ð ð ð:#ð #ð #ð()ð )ð )ð(ð ð ð ð ð ð.ð ð ð ð ð ð< GKÈdð  ð  ð  ð  ð  ð  ð  ðD(ð (ð (ð
 ð  ð  ð  ðD#ð #ð #ð #ðJ6ð 6ð 6ð2ð ð ð6ð ð ð ð8ð ð ð õ< ˜ EÐ+@ÑAÔAÐAÝ˜ NÐ4RÑSÔSÐSÝ˜ HÐ.FÑGÔGÐGÝ˜ GÐ-DÑEÔEÐEÝ˜ HÐ.FÑGÔGÐGÝ˜ LÐ2NÑOÔOÐOÝ˜ MÐ3PÑQÔQÐQÝ˜ OÐ5TÑUÔUÐUÝ˜ NÐ4RÑSÔSÐSÝ˜Ð$4Ð6VØ(,ð.ñ .ô .ð .å˜Ð$<ØAÐRVðXñ Xô Xð Xå˜Ð$8Ø<ÈTðSñ Sô Sð Så˜ KÐ1LÑMÔMÐMÝ˜ KÐ1LÑMÔMÐMÐMÐMr   r	   c                 óÔ  — t          |¦  «        t          j        u rt          j        | ||||¬¦  «        S |                     ¦   «         \  }}|                     ¦   «         sJ ‚|j        t          j	        k    sJ ‚|j
        r
J d¦   «         ‚|                      ¦   «         \  }}||k    sJ ‚|                      ¦   «         sJ ‚| j        t          j	        k    sJ ‚| j
        r
J d¦   «         ‚t          j        |||j        t          j	        ¬¦  «        }	t          j        |||j        t          j        ¬¦  «        }
t          |
¦  «        }t          |	¦  «        }t          |¦  «        }t          | ¦  «        }|t          j        k    rt          j        ||||||||¦  «         nI|t          j        k    rt          j        ||||||||¦  «         nt          j        ||||||||||¦
  «
         |	|
fS )N)ÚmetricÚ
metric_argzuse knn_gpu for GPU tensorsre   )rM   rN   rO   r	   Ú	knn_numpyÚsizer   r   r   r   rT   rh   rf   r(   r*   r   Ú	METRIC_L2Ú	knn_L2sqrÚMETRIC_INNER_PRODUCTÚknn_inner_productÚknn_extra_metrics)ÚxqÚxbrj   rÑ   rÒ   ÚnbrS   ÚnqÚd2rs   rt   rv   ru   Úxb_ptrÚxq_ptrs                  r   Útorch_replacement_knnrá   &  sÿ  € ÝˆB�x„x•2”:ÐÐåŒ˜r 2 q°ÀJÐOÑOÔOÐOà�GŠG‰IŒI�E€BˆØ×ÒÑÔÐÐÐØŒ8•u”}Ò$Ð$Ð$Ð$ØŒzÐ8Ð8Ð8Ñ8Ô8Ð8à�WŠW‰YŒY�F€BˆØ�Š7ˆ7ˆ7ˆ7Ø×ÒÑÔÐÐÐØŒ8•u”}Ò$Ð$Ð$Ð$ØŒzÐ8Ð8Ð8Ñ8Ô8Ð8åŒ�B˜ "¤)µ5´=ÐAÑAÔA€AÝŒ�B˜ "¤)µ5´;Ð?Ñ?Ô?€AÝ'¨Ñ*Ô*€EÝ% aÑ(Ô(€EÝ& rÑ*Ô*€FÝ& rÑ*Ô*€Fà•”Ò Ð ÝŒØ�FØˆr�2�q˜% ñ	
ô 	
ð 	
ð 	
ð 
•5Ô-Ò	-Ð	-ÝÔØ�FØˆr�2�q˜% ñ	
ô 	
ð 	
ð 	
õ
 	ÔØ�FØˆr�2�v˜z¨1¨e°Uñ	
ô 	
ð 	
ð
 ˆaˆ4€Kr   ÚknnTr–   c	           
      ó¤  — t          |¦  «        t          j        u rt          j        | |||||||¦  «        S |                     ¦   «         \  }	}
|                     ¦   «         rd}nL|                     ¦   «                              ¦   «         r|                     ¦   «         }d}nt          d¦  «        ‚|j	        t          j        k    rt          j        }t          |¦  «        }nq|j	        t          j        k    rt          j        }t!          |¦  «        }n@|j	        t          j        k    rt          j        }t'          |¦  «        }nt          d¦  «        ‚|                     ¦   «         \  }}||
k    sJ ‚|                     ¦   «         rd}nL|                     ¦   «                              ¦   «         r|                     ¦   «         }d}nt          d¦  «        ‚|j	        t          j        k    rt          j        }t          |¦  «        }nq|j	        t          j        k    rt          j        }t!          |¦  «        }n@|j	        t          j        k    rt          j        }t'          |¦  «        }nt          d¦  «        ‚|€(t          j        |||j        t          j        ¬¦  «        }n&|j        ||fk    sJ ‚|j	        t          j        k    sJ ‚|€(t          j        |||j        t          j        ¬¦  «        }n|j        ||fk    sJ ‚|j	        t          j        k    rt          j        }t3          |¦  «        }nO|j	        |j	        cxk    rt          j        k    rn nt          j        }t9          |¦  «        }nt          d¦  «        ‚t          |¦  «        }t          j        ¦   «         }||_        ||_        |
|_         ||_!        ||_"        ||_#        |	|_$        ||_%        ||_&        ||_'        ||_(        ||_)        ||_*        ||_+        ||_        ||_,        t[          | ¦  «        5  t          j.        | |¦  «         d d d ¦  «         n# 1 swxY w Y   ||fS )NTFz$matrix should be row or column-majorz'xq must be float32, float16 or bfloat16re   zI must be i64 or i32)/rM   rN   rO   r	   Úknn_gpu_numpyrÔ   r   ÚtÚ	TypeErrorr   r   r   ÚDistanceDataType_F32r   r   ÚDistanceDataType_F16r   r   ÚDistanceDataType_BF16r    rh   rf   rR   r(   ÚIndicesDataType_I64r*   r#   ÚIndicesDataType_I32r%   ÚGpuDistanceParamsrÑ   rj   ÚdimsÚvectorsÚvectorsRowMajorÚ
vectorTypeÚ
numVectorsÚqueriesÚqueriesRowMajorÚ	queryTypeÚ
numQueriesÚoutDistancesÚ
outIndicesÚoutIndicesTypeÚuse_cuvsr8   ÚbfKnn)r3   rÚ   rÛ   rj   rs   rt   rÑ   rf   rù   rÜ   rS   Úxb_row_majorÚxb_typerß   rÝ   rÞ   Úxq_row_majorÚxq_typerà   ÚI_typerv   ru   Úargss                          r   Útorch_replacement_knn_gpur  T  s)  € ÝˆB�x„x•2”:ÐÐåÔ" 3¨¨B°°1°a¸ÀÑHÔHÐHà�GŠG‰IŒI�E€BˆØ	×ÒÑÔð @ØˆˆØ	�Š‰Œ×	Ò	Ñ	Ô	ð @Ø�TŠT‰VŒVˆØˆˆåÐ>Ñ?Ô?Ð?à	„x•5”=Ò Ð ÝÔ,ˆÝ*¨2Ñ.Ô.ˆˆØ	Œ•U”]Ò	"Ð	"ÝÔ,ˆÝ)¨"Ñ-Ô-ˆˆØ	Œ•U”^Ò	#Ð	#ÝÔ-ˆÝ-¨bÑ1Ô1ˆˆåÐAÑBÔBÐBà�WŠW‰YŒY�F€BˆØ�Š7ˆ7ˆ7ˆ7Ø	×ÒÑÔð @ØˆˆØ	�Š‰Œ×	Ò	Ñ	Ô	ð @Ø�TŠT‰VŒVˆØˆˆåÐ>Ñ?Ô?Ð?à	„x•5”=Ò Ð ÝÔ,ˆÝ*¨2Ñ.Ô.ˆˆØ	Œ•U”]Ò	"Ð	"ÝÔ,ˆÝ)¨"Ñ-Ô-ˆˆØ	Œ•U”^Ò	#Ð	#ÝÔ-ˆÝ-¨bÑ1Ô1ˆˆåÐAÑBÔBÐBà€yÝŒK˜˜A b¤iµu´}ÐEÑEÔEˆˆàŒw˜2˜q˜'Ò!Ð!Ð!Ð!à”�5œ=Ò(Ð(Ð(Ð(à€yÝŒK˜˜A b¤iµu´{ÐCÑCÔCˆˆàŒw˜2˜q˜'Ò!Ð!Ð!Ð!à„w•%”+ÒÐÝÔ*ˆÝ+¨AÑ.Ô.ˆˆØ	
Œ�A”GÐ	*Ð	*Ò	*Ð	*�uœ{Ò	*Ð	*Ð	*Ð	*Ð	*ÝÔ*ˆÝ'¨Ñ*Ô*ˆˆåÐ.Ñ/Ô/Ð/å% aÑ(Ô(€EåÔ"Ñ$Ô$€DØ€D„KØ€D„FØ€D„IØ€D„LØ'€DÔØ€D„OØ€D„OØ€D„LØ'€DÔØ€D„NØ€D„OØ€DÔØ€D„OØ €DÔØ€D„KØ€D„Må	�cÑ	Ô	ð ð ÝŒ�C˜ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ˆaˆ4€Ks   Ð!QÑQÑ
QÚknn_gpuc                 ó:  — t          |¦  «        t          j        u rt          j        | ||||¦  «        S |                     ¦   «         \  }}|                     ¦   «         rd}nL|                     ¦   «                              ¦   «         r|                     ¦   «         }d}nt          d¦  «        ‚|j	        t          j        k    rt          j        }	t          |¦  «        }
n@|j	        t          j        k    rt          j        }	t!          |¦  «        }
nt          d¦  «        ‚|                     ¦   «         \  }}||k    sJ ‚|                     ¦   «         rd}nL|                     ¦   «                              ¦   «         r|                     ¦   «         }d}nt          d¦  «        ‚|j	        t          j        k    rt          j        }t          |¦  «        }n@|j	        t          j        k    rt          j        }t!          |¦  «        }nt          d¦  «        ‚|€(t          j        |||j        t          j        ¬¦  «        }n&|j        ||fk    sJ ‚|j	        t          j        k    sJ ‚t          |¦  «        }t          j        ¦   «         }||_        d|_        ||_        |
|_        ||_        |	|_        ||_        ||_        ||_        ||_        ||_        ||_         ||_        tC          | ¦  «        5  t          j"        | |¦  «         d d d ¦  «         n# 1 swxY w Y   |S )	NTFz'xb matrix should be row or column-majorzxb must be float32 or float16z'xq matrix should be row or column-majorzxq must be float32 or float16re   r–   )#rM   rN   rO   r	   Úpairwise_distance_gpu_numpyrÔ   r   rå   ræ   r   r   r   rç   r   r   rè   r   rh   rf   rR   rì   rÑ   rj   rí   rî   rï   rð   rñ   rò   ró   rô   rõ   rö   r8   rú   )r3   rÚ   rÛ   rs   rÑ   rf   rÜ   rS   rû   rü   rß   rÝ   rÞ   rý   rþ   rà   ru   r   s                     r   Ú'torch_replacement_pairwise_distance_gpur  µ  s  € ÝˆB�x„x•2”:ÐÐåÔ0°°b¸"¸aÀÑHÔHÐHà�GŠG‰IŒI�E€BˆØ	×ÒÑÔð CØˆˆØ	�Š‰Œ×	Ò	Ñ	Ô	ð CØ�TŠT‰VŒVˆØˆˆåÐAÑBÔBÐBà	„x•5”=Ò Ð ÝÔ,ˆÝ*¨2Ñ.Ô.ˆˆØ	Œ•U”]Ò	"Ð	"ÝÔ,ˆÝ)¨"Ñ-Ô-ˆˆåÐ7Ñ8Ô8Ð8à�WŠW‰YŒY�F€BˆØ�Š7ˆ7ˆ7ˆ7Ø	×ÒÑÔð CØˆˆØ	�Š‰Œ×	Ò	Ñ	Ô	ð CØ�TŠT‰VŒVˆØˆˆåÐAÑBÔBÐBà	„x•5”=Ò Ð ÝÔ,ˆÝ*¨2Ñ.Ô.ˆˆØ	Œ•U”]Ò	"Ð	"ÝÔ,ˆÝ)¨"Ñ-Ô-ˆˆåÐ7Ñ8Ô8Ð8à€yÝŒK˜˜B r¤y½¼ÐFÑFÔFˆˆàŒw˜2˜r˜(Ò"Ð"Ð"Ð"à”�5œ=Ò(Ð(Ð(Ð(å% aÑ(Ô(€EåÔ"Ñ$Ô$€DØ€D„KØ€D„FØ€D„IØ€D„LØ'€DÔØ€D„OØ€D„OØ€D„LØ'€DÔØ€D„NØ€D„OØ€DÔØ€D„Kå	�cÑ	Ô	ð ð ÝŒ�C˜ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð €Hs   Ë.LÌLÌLÚpairwise_distance_gpurÎ   )FF) Ú__doc__r	   r   Ú
contextlibÚinspectÚsysÚnumpyrN   r   r   r   r    r%   r*   Úcontextmanagerr8   rG   rÏ   ÚmodulesÚfaiss_moduleÚdirÚsymbolr=   ÚobjÚisclassrA   Ú
issubclassÚIndexrÕ   rá   r  r  © r   r   ú<module>r     sP  ððð ð$ €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø Ð Ð Ð ð=ð =ð =ðAð Að AðAð Að AðAð Að AðAð Að AðAð Að Að Ôð6ð 6ð 6ñ Ôð6ð4 ?Dð*ð *ð *ð *ð*SNð SNð SNðj Œ{˜7Ô#€ð ˆc�,ÑÔð *ð *€FØ
ˆ'�, Ñ
'Ô
'€CØ€w„�sÑÔð *Øˆ	Øˆ:�i ¤Ñ-Ô-ð 	*ØÐ˜yÑ)Ô)Ð)øð -2¬OÈð 'ð 'ð 'ð 'ðT Ð �\ 5Ð*?ÀÀtÑ LÔ LÐ Lð 15¸ÀUÄ_Ð]_Ðjoð \ð \ð \ð \ð| Ð �\ 9Ð.GÈÈtÑ TÔ TÐ Tð <@ÈÌÐ`bð Eð Eð Eð EðN Ð �\Ð#:Ð<cÐeiÐkoÑ pÔ pÐ pÐ pÐ pr   