§
    ÐÁ³gñ/  ã                   ó¸  — d dl Z d dlZd dlZd dlZddlmZmZmZm	Z	 ddl
mZ  G d„ d¦  «        Z G d„ de¦  «        Z ej        ¦   «         Zd	d
de› d�fD ]#ae j                             t           ¦  «        r nŒ$dad„ Z G d„ de¦  «        Zd„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Zdd„ZdS ) é    Né   )Ú
fvecs_readÚ
ivecs_readÚ
bvecs_mmapÚ
fvecs_mmap)Úknnc                   óP   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zdd	„Zdd
„Z	dd„Z
d„ Zd„ ZdS )ÚDatasetz+ Generic abstract class for a test dataset c                 óL   — d| _         d| _        d| _        d| _        d| _        dS )z2 the constructor should set the following fields: éÿÿÿÿÚL2N©ÚdÚmetricÚnqÚnbÚnt©Úselfs    úT/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/faiss/contrib/datasets.pyÚ__init__zDataset.__init__   s)   € àˆŒØˆŒØˆŒØˆŒØˆŒˆˆó    c                 ó   — t          ¦   «         ‚)z' return the queries as a (nq, d) array ©ÚNotImplementedErrorr   s    r   Úget_querieszDataset.get_queries   ó   € å!Ñ#Ô#Ð#r   Nc                 ó   — t          ¦   «         ‚)z' return the queries as a (nt, d) array r   ©r   Úmaxtrains     r   Ú	get_trainzDataset.get_train   r   r   c                 ó   — t          ¦   «         ‚)z' return the queries as a (nb, d) array r   r   s    r   Úget_databasezDataset.get_database"   r   r   é€   ©r   r   c              #   óØ   K  — |                       ¦   «         }|\  }}| j        |z  |z  | j        |dz   z  |z  }}t          |||¦  «        D ]}||t          ||z   |¦  «        …         V — Œ dS )a7  returns an iterator on database vectors.
        bs is the number of vectors per batch
        split = (nsplit, rank) means the dataset is split in nsplit
        shards and we want shard number rank
        The default implementation just iterates over the full matrix
        returned by get_dataset.
        r   N)r#   r   ÚrangeÚmin©	r   ÚbsÚsplitÚxbÚnsplitÚrankÚi0Úi1Új0s	            r   Údatabase_iteratorzDataset.database_iterator&   s’   è è € ð ×ÒÑ Ô ˆØ‰ˆ�Ø”˜4‘ 6Ñ)¨4¬7°d¸Q±hÑ+?À6Ñ+IˆBˆÝ˜˜B Ñ#Ô#ð 	+ð 	+ˆBØ�R�˜R "™W bÑ)Ô)Ð)Ô*Ð*Ð*Ð*Ð*ð	+ð 	+r   c                 ó   — t          ¦   «         ‚)z7 return the ground truth for k-nearest neighbor search r   ©r   Úks     r   Úget_groundtruthzDataset.get_groundtruth4   r   r   c                 ó   — t          ¦   «         ‚)z* return the ground truth for range search r   )r   Úthreshs     r   Úget_groundtruth_rangezDataset.get_groundtruth_range8   r   r   c           
      óV   — d| j         › d| j        › d| j        › d| j        › d| j        › �
S )Nzdataset in dimension z, with metric z
, size: Q z B z T r   r   s    r   Ú__str__zDataset.__str__<   sU   € ð=¨¬ð =ð =¸d¼kð =ð =Øœ7ð=ð =Ø'+¤wð=ð =Ø37´7ð=ð =ð 	>r   c                 óŒ  — |                       ¦   «         j        | j        | j        fk    sJ ‚| j        dk    r:|                      d¬¦  «        }|j        d| j        fk    sJ d|j        ›�¦   «         ‚|                      ¦   «         j        | j        | j        fk    sJ ‚|                      d¬¦  «        j        | j        dfk    sJ ‚dS )z8 runs the previous and checks the sizes of the matrices r   é{   )r    zshape=é   )r5   N)	r   Úshaper   r   r   r!   r#   r   r6   )r   Úxts     r   Úcheck_sizeszDataset.check_sizes@   sÎ   € à×ÒÑ!Ô!Ô'¨D¬G°T´VÐ+<Ò<Ð<Ð<Ð<ØŒ7�QŠ;ˆ;Ø—’¨�Ñ-Ô-ˆBØ”8  T¤V˜}Ò,Ð,Ð,Ð,¸B¼H¸HÐ.GÑ,Ô,Ð,Ø× Ò Ñ"Ô"Ô(¨T¬W°d´fÐ,=Ò=Ð=Ð=Ð=Ø×#Ò# bÐ#Ñ)Ô)Ô/°D´G¸R°=Ò@Ð@Ð@Ð@Ð@Ð@r   ©N©r$   r%   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r#   r2   r6   r9   r;   rA   © r   r   r
   r
      sº   € € € € € Ø5Ð5ðð ð ð$ð $ð $ð$ð $ð $ð $ð$ð $ð $ð+ð +ð +ð +ð$ð $ð $ð $ð$ð $ð $ð $ð>ð >ð >ðAð Að Að Að Ar   r
   c                   ó6   — e Zd ZdZdd„Zd„ Zdd„Zd„ Zdd
„ZdS )ÚSyntheticDatasetzOA dataset that is not completely random but still challenging to
    index
    r   é:  c                 óN  — t                                | ¦  «         ||||f\  | _        | _        | _        | _        d}||z   |z   }t          j                             |¦  «        }	|	 	                    ||f¬¦  «        }
t          j
        |
|	                     ||¦  «        ¦  «        }
|
|	                     |¦  «        dz  dz   z  }
t          j        |
¦  «        }
|
                     d¦  «        }
|| _        |
d |…         | _        |
|||z   …         | _        |
||z   d …         | _        d S )Né
   )Úsizeé   gš™™™™™¹?Úfloat32)r
   r   r   r   r   r   ÚnpÚrandomÚRandomStateÚnormalÚdotÚrandÚsinÚastyper   r@   r,   Úxq)r   r   r   r   r   r   ÚseedÚd1ÚnÚrsÚxs              r   r   zSyntheticDataset.__init__O   s  € Ý×Ò˜ÑÔÐØ,-¨r°2°r¨MÑ)ˆŒ�”˜œ $¤'ØˆØ�‰G�b‰LˆÝŒY×"Ò" 4Ñ(Ô(ˆØ�IŠI˜A˜r˜7ˆIÑ#Ô#ˆÝŒF�1�b—g’g˜b !‘n”nÑ%Ô%ˆð �—’˜‘”˜a‘ #Ñ%Ñ&ˆÝŒF�1‰IŒIˆØ�HŠH�YÑÔˆØˆŒØ�C�R�C”&ˆŒØ�B�r˜B‘w�J”-ˆŒØ�B˜‘G�H�H”+ˆŒˆˆr   c                 ó   — | j         S rB   )rY   r   s    r   r   zSyntheticDataset.get_queriesa   ó	   € ØŒwˆr   Nc                 ó6   — |�|n| j         }| j        d |…         S rB   )r   r@   r   s     r   r!   zSyntheticDataset.get_traind   s#   € Ø'Ð3�8�8¸¼ˆØŒw�y˜�yÔ!Ð!r   c                 ó   — | j         S rB   )r,   r   s    r   r#   zSyntheticDataset.get_databaseh   r`   r   éd   c                 óˆ   — t          | j        | j        || j        dk    rt          j        nt          j        ¦  «        d         S )Nr   r   )r   rY   r,   r   ÚfaissÚ	METRIC_L2ÚMETRIC_INNER_PRODUCTr4   s     r   r6   z SyntheticDataset.get_groundtruthk   sA   € ÝØŒG�T”W˜aØ#œ{¨dÒ2Ð2�EŒOˆO½Ô8Rñ
ô 
ð ôð 	r   )r   rK   rB   )rc   ©	rD   rE   rF   rG   r   r   r!   r#   r6   rH   r   r   rJ   rJ   J   sx   € € € € € ðð ðð ð ð ð$ð ð ð"ð "ð "ð "ðð ð ðð ð ð ð ð r   rJ   z/datasets01/simsearch/041218/z7/mnt/vol/gfsai-flash3-east/ai-group/datasets/simsearch/z/home/z/simsearch/data/zdata/c                 ó
   — | a d S rB   )Údataset_basedir)Úpaths    r   Úset_dataset_basedirrl   …   s   € à€O€O€Or   c                   ó4   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zdd„ZdS )	ÚDatasetSIFT1Mú_
    The original dataset is available at: http://corpus-texmex.irisa.fr/
    (ANN_SIFT1M)
    c                 óŽ   — t                                | ¦  «         d\  | _        | _        | _        | _        t          dz   | _        d S )N)r$   é † é@B é'  zsift1M/©r
   r   r   r   r   r   rj   Úbasedirr   s    r   r   zDatasetSIFT1M.__init__�   ó<   € Ý×Ò˜ÑÔÐØ,GÑ)ˆŒ�”˜œ $¤'Ý&¨Ñ2ˆŒˆˆr   c                 ó0   — t          | j        dz   ¦  «        S )Nzsift_query.fvecs©r   ru   r   s    r   r   zDatasetSIFT1M.get_queries•   ó   € Ý˜$œ,Ð);Ñ;Ñ<Ô<Ð<r   Nc                 óV   — |�|n| j         }t          | j        dz   ¦  «        d |…         S )Nzsift_learn.fvecs©r   r   ru   r   s     r   r!   zDatasetSIFT1M.get_train˜   ó1   € Ø'Ð3�8�8¸¼ˆÝ˜$œ,Ð);Ñ;Ñ<Ô<¸Y¸h¸YÔGÐGr   c                 ó0   — t          | j        dz   ¦  «        S )Nzsift_base.fvecsrx   r   s    r   r#   zDatasetSIFT1M.get_databaseœ   ó   € Ý˜$œ,Ð):Ñ:Ñ;Ô;Ð;r   c                 ód   — t          | j        dz   ¦  «        }|�|dk    sJ ‚|d d …d |…f         }|S )Nzsift_groundtruth.ivecsrc   ©r   ru   ©r   r5   Úgts      r   r6   zDatasetSIFT1M.get_groundtruthŸ   óC   € Ý˜œÐ'?Ñ?Ñ@Ô@ˆØˆ=Ø˜’8�8�8�8Ø�A�A�A�r˜�r�E”ˆBØˆ	r   rB   rh   rH   r   r   rn   rn   Š   ów   € € € € € ðð ð
3ð 3ð 3ð
=ð =ð =ðHð Hð Hð Hð<ð <ð <ðð ð ð ð ð r   rn   c                 ó.   — t          j        | d¬¦  «        S )NrP   ©Údtype)rQ   Úascontiguousarray)r^   s    r   Úsanitizer‰   §   s   € ÝÔ ¨Ð3Ñ3Ô3Ð3r   c                   ó>   — e Zd ZdZdd„Zd„ Zdd„Zdd„Zd„ Zdd„Z	dS )ÚDatasetBigANNz_
    The original dataset is available at: http://corpus-texmex.irisa.fr/
    (ANN_SIFT1B)
    éè  c                 óº   — t                                | ¦  «         |dv sJ ‚|| _        |dz  }dd|df\  | _        | _        | _        | _        t          dz   | _        d S )N)
r   é   é   rM   é   é2   rc   éÈ   iô  rŒ   rr   r$   é áõrs   zbigann/)	r
   r   Únb_Mr   r   r   r   rj   ru   )r   r”   r   s      r   r   zDatasetBigANN.__init__±   sg   € Ý×Ò˜ÑÔÐØÐAÐAÐAÐAÐAØˆŒ	Ø�E‰\ˆØ,/°¸¸EÐ,AÑ)ˆŒ�”˜œ $¤'Ý&¨Ñ2ˆŒˆˆr   c                 óZ   — t          t          | j        dz   ¦  «        d d …         ¦  «        S )Nzbigann_query.bvecs)r‰   r   ru   r   s    r   r   zDatasetBigANN.get_queries¹   s)   € Ý�
 4¤<Ð2FÑ#FÑGÔGÈÈÈÔJÑKÔKÐKr   Nc                 óp   — |�|n| j         }t          t          | j        dz   ¦  «        d |…         ¦  «        S )Nzbigann_learn.bvecs)r   r‰   r   ru   r   s     r   r!   zDatasetBigANN.get_train¼   s9   € Ø'Ð3�8�8¸¼ˆÝ�
 4¤<Ð2FÑ#FÑGÔGÈ	ÈÈ	ÔRÑSÔSÐSr   c                 ót   — t          | j        d| j        z  z   ¦  «        }|�|dk    sJ ‚|d d …d |…f         }|S )Nzgnd/idx_%dM.ivecsrc   )r   ru   r”   r�   s      r   r6   zDatasetBigANN.get_groundtruthÀ   sJ   € Ý˜œÐ':¸T¼YÑ'FÑFÑGÔGˆØˆ=Ø˜’8�8�8�8Ø�A�A�A�r˜�r�E”ˆBØˆ	r   c                 óŽ   — | j         dk     s
J d¦   «         ‚t          t          | j        dz   ¦  «        d | j        …         ¦  «        S )Nrc   údataset too large, use iteratorúbigann_base.bvecs)r”   r‰   r   ru   r   r   s    r   r#   zDatasetBigANN.get_databaseÇ   sA   € ØŒy˜3ŠˆˆÐ A‰ŒˆÝ�
 4¤<Ð2EÑ#EÑFÔFÀxÈÌÀxÔPÑQÔQÐQr   r$   r%   c           	   #   óø   K  — t          | j        dz   ¦  «        }|\  }}| j        |z  |z  | j        |dz   z  |z  }}t          |||¦  «        D ],}t	          ||t          ||z   |¦  «        …         ¦  «        V — Œ-d S )Nrš   r   )r   ru   r   r'   r‰   r(   r)   s	            r   r2   zDatasetBigANN.database_iteratorË   sœ   è è € Ý˜œÐ':Ñ:Ñ;Ô;ˆØ‰ˆ�Ø”˜4‘ 6Ñ)¨4¬7°d¸Q±hÑ+?À6Ñ+IˆBˆÝ˜˜B Ñ#Ô#ð 	5ð 	5ˆBÝ˜2˜b¥# b¨2¡g¨rÑ"2Ô"2Ð2Ô3Ñ4Ô4Ð4Ð4Ð4Ð4ð	5ð 	5r   )rŒ   rB   rC   ©
rD   rE   rF   rG   r   r   r!   r6   r#   r2   rH   r   r   r‹   r‹   «   s–   € € € € € ðð ð
3ð 3ð 3ð 3ðLð Lð LðTð Tð Tð Tðð ð ð ðRð Rð Rð5ð 5ð 5ð 5ð 5ð 5r   r‹   c                   ó>   — e Zd ZdZdd„Zd„ Zdd„Zdd„Zd„ Zdd„Z	dS )ÚDatasetDeep1Bzv
    See
    https://github.com/facebookresearch/faiss/tree/main/benchs#getting-deep1b
    on how to get the data
    é Êš;c                 óì   — t                                | ¦  «         ddddddœ}||v sJ ‚dd|d	f\  | _        | _        | _        | _        t          d
z   | _        | j        ›d|| j                 ›d�| _        d S )NÚ100kÚ1MÚ10MÚ100MÚ1B)rq   rr   i€–˜ r“   rŸ   é`   i€ø]rs   zdeep1b/Údeepz_groundtruth.ivecs)	r
   r   r   r   r   r   rj   ru   Úgt_fname)r   r   Ú
nb_to_names      r   r   zDatasetDeep1B.__init__Ú   s”   € Ý×Ò˜ÑÔÐàØØØØð
ð 
ˆ
ð �ZÐÐÐÐØ,.°	¸2¸uÐ,DÑ)ˆŒ�”˜œ $¤'Ý&¨Ñ2ˆŒàŒLˆLˆL˜* T¤WÔ-Ð-Ð-ð/ˆŒˆˆr   c                 óJ   — t          t          | j        dz   ¦  «        ¦  «        S )Nzdeep1B_queries.fvecs)r‰   r   ru   r   s    r   r   zDatasetDeep1B.get_queriesé   s    € Ý�
 4¤<Ð2HÑ#HÑIÔIÑJÔJÐJr   Nc                 óp   — |�|n| j         }t          t          | j        dz   ¦  «        d |…         ¦  «        S )Nzlearn.fvecs)r   r‰   r   ru   r   s     r   r!   zDatasetDeep1B.get_trainì   s8   € Ø'Ð3�8�8¸¼ˆÝ�
 4¤<°-Ñ#?Ñ@Ô@ÀÀ(ÀÔKÑLÔLÐLr   c                 ó^   — t          | j        ¦  «        }|�|dk    sJ ‚|d d …d |…f         }|S )Nrc   )r   r¨   r�   s      r   r6   zDatasetDeep1B.get_groundtruthð   s=   € Ý˜œÑ&Ô&ˆØˆ=Ø˜’8�8�8�8Ø�A�A�A�r˜�r�E”ˆBØˆ	r   c                 óŽ   — | j         dk    s
J d¦   «         ‚t          t          | j        dz   ¦  «        d | j         …         ¦  «        S )Nr“   r™   ú
base.fvecs)r   r‰   r   ru   r   s    r   r#   zDatasetDeep1B.get_database÷   sF   € ØŒw˜%ÒÐÐÐ!BÑÔÐÝ�
 4¤<°,Ñ#>Ñ?Ô?ÀÀÄÀÔIÑJÔJÐJr   r$   r%   c           	   #   óø   K  — t          | j        dz   ¦  «        }|\  }}| j        |z  |z  | j        |dz   z  |z  }}t          |||¦  «        D ],}t	          ||t          ||z   |¦  «        …         ¦  «        V — Œ-d S )Nr®   r   )r   ru   r   r'   r‰   r(   r)   s	            r   r2   zDatasetDeep1B.database_iteratorû   s›   è è € Ý˜œ |Ñ3Ñ4Ô4ˆØ‰ˆ�Ø”˜4‘ 6Ñ)¨4¬7°d¸Q±hÑ+?À6Ñ+IˆBˆÝ˜˜B Ñ#Ô#ð 	5ð 	5ˆBÝ˜2˜b¥# b¨2¡g¨rÑ"2Ô"2Ð2Ô3Ñ4Ô4Ð4Ð4Ð4Ð4ð	5ð 	5r   )rŸ   rB   rC   rœ   rH   r   r   rž   rž   Ó   s–   € € € € € ðð ð/ð /ð /ð /ðKð Kð KðMð Mð Mð Mðð ð ð ðKð Kð Kð5ð 5ð 5ð 5ð 5ð 5r   rž   c                   ó.   — e Zd ZdZdd„Zd„ Zd„ Zd	d„ZdS )
ÚDatasetGlovezD
    Data from http://ann-benchmarks.com/glove-100-angular.hdf5
    NFc                 ó  — dd l }|r
J d¦   «         ‚|s
t          dz   }|                     |d¦  «        | _        d| _        d\  | _        | _        | j        d         j        d         | _        | j        d         j        d         | _	        d S )	Nr   znot implementedzglove/glove-100-angular.hdf5ÚrÚIP)rc   r   ÚtrainÚtest)
Úh5pyrj   ÚFileÚ
glove_h5pyr   r   r   r?   r   r   )r   ÚlocÚdownloadr·   s       r   r   zDatasetGlove.__init__  s�   € ØˆˆˆØÐ.Ð.Ð.Ñ.Ô.Ð.Øð 	CÝ!Ð$BÑBˆCØŸ)š) C¨Ñ-Ô-ˆŒàˆŒØ ‰ˆŒ�”Ø”/ 'Ô*Ô0°Ô3ˆŒØ”/ &Ô)Ô/°Ô2ˆŒˆˆr   c                 ól   — t          j        | j        d         ¦  «        }t          j        |¦  «         |S )Nr¶   ©rQ   Úarrayr¹   re   Únormalize_L2©r   rY   s     r   r   zDatasetGlove.get_queries  s.   € ÝŒX�d”o fÔ-Ñ.Ô.ˆÝÔ˜2ÑÔÐØˆ	r   c                 ól   — t          j        | j        d         ¦  «        }t          j        |¦  «         |S )Nrµ   r½   ©r   r,   s     r   r#   zDatasetGlove.get_database  s.   € ÝŒX�d”o gÔ.Ñ/Ô/ˆÝÔ˜2ÑÔÐØˆ	r   c                 óP   — | j         d         }|�|dk    sJ ‚|d d …d |…f         }|S )NÚ	neighborsrc   )r¹   r�   s      r   r6   zDatasetGlove.get_groundtruth  s:   € ØŒ_˜[Ô)ˆØˆ=Ø˜’8�8�8�8Ø�A�A�A�r˜�r�E”ˆBØˆ	r   )NFrB   ©rD   rE   rF   rG   r   r   r#   r6   rH   r   r   r±   r±     sd   € € € € € ðð ð
3ð 
3ð 
3ð 
3ðð ð ð
ð ð ð
ð ð ð ð ð r   r±   c                   ó,   — e Zd ZdZd„ Zd„ Zd„ Zdd„ZdS )ÚDatasetMusic100zO
    get dataset from
    https://github.com/stanis-morozov/ip-nsw#dataset
    c                 óœ   — t                                | ¦  «         d\  | _        | _        | _        | _        d| _        t          dz   | _        d S )N)rc   r   rr   rs   r´   z
music-100/)	r
   r   r   r   r   r   r   rj   ru   r   s    r   r   zDatasetMusic100.__init__,  sC   € Ý×Ò˜ÑÔÐØ,@Ñ)ˆŒ�”˜œ $¤'ØˆŒÝ&¨Ñ5ˆŒˆˆr   c                 ón   — t          j        | j        dz   d¬¦  «        }|                     dd¦  «        }|S )Nzquery_music100.binrP   r†   r   rc   ©rQ   Úfromfileru   ÚreshaperÀ   s     r   r   zDatasetMusic100.get_queries2  s6   € ÝŒ[˜œÐ(<Ñ<ÀIÐNÑNÔNˆØ�ZŠZ˜˜CÑ Ô ˆØˆ	r   c                 ón   — t          j        | j        dz   d¬¦  «        }|                     dd¦  «        }|S )Nzdatabase_music100.binrP   r†   r   rc   rÊ   rÂ   s     r   r#   zDatasetMusic100.get_database7  s6   € ÝŒ[˜œÐ(?Ñ?ÀyÐQÑQÔQˆØ�ZŠZ˜˜CÑ Ô ˆØˆ	r   Nc                 ón   — t          j        | j        dz   ¦  «        }|�|dk    sJ ‚|d d …d |…f         }|S )Nzgt.npyrc   )rQ   Úloadru   r�   s      r   r6   zDatasetMusic100.get_groundtruth<  sD   € ÝŒW�T”\ HÑ,Ñ-Ô-ˆØˆ=Ø˜’8�8�8�8Ø�A�A�A�r˜�r�E”ˆBØˆ	r   rB   rÅ   rH   r   r   rÇ   rÇ   &  s_   € € € € € ðð ð
6ð 6ð 6ðð ð ð
ð ð ð
ð ð ð ð ð r   rÇ   c                   ó4   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zdd„ZdS )	ÚDatasetGIST1Mro   c                 óŽ   — t                                | ¦  «         d\  | _        | _        | _        | _        t          dz   | _        d S )N)iÀ  rq   rr   rs   zgist1M/rt   r   s    r   r   zDatasetGIST1M.__init__I  rv   r   c                 ó0   — t          | j        dz   ¦  «        S )Nzgist_query.fvecsrx   r   s    r   r   zDatasetGIST1M.get_queriesN  ry   r   Nc                 óV   — |�|n| j         }t          | j        dz   ¦  «        d |…         S )Nzgist_learn.fvecsr{   r   s     r   r!   zDatasetGIST1M.get_trainQ  r|   r   c                 ó0   — t          | j        dz   ¦  «        S )Nzgist_base.fvecsrx   r   s    r   r#   zDatasetGIST1M.get_databaseU  r~   r   c                 ód   — t          | j        dz   ¦  «        }|�|dk    sJ ‚|d d …d |…f         }|S )Nzgist_groundtruth.ivecsrc   r€   r�   s      r   r6   zDatasetGIST1M.get_groundtruthX  rƒ   r   rB   rh   rH   r   r   rÑ   rÑ   C  r„   r   rÑ   Údeep1MFc                 óx  — | dk    rt          ¦   «         S | dk    rt          ¦   «         S |                      d¦  «        r/| dk    rdnt          | dd…         ¦  «        }t	          |¬¦  «        S |                      d	¦  «        r~| d
d…         }|d         dk    rdt          |dd…         ¦  «        z  }n=|dk    rd}n4|d         dk    rdt          |dd…         ¦  «        z  }nJ d|z   ¦   «         ‚t          |¬¦  «        S | dk    rt          ¦   «         S | dk    rt          |¬¦  «        S t          d| z   ¦  «        ‚)z� converts a string describing a dataset to a Dataset object
    Supports sift1M, bigann1M..bigann1B, deep1M..deep1B, music-100 and glove
    Úsift1MÚgist1MÚbigannÚbigann1BrŒ   é   r   )r”   r§   rO   NÚMrr   r¥   rŸ   r5   Fzdid not recognize suffix )r   z	music-100Úglove)r»   zunknown dataset )	rn   rÑ   Ú
startswithÚintr‹   rž   rÇ   r±   ÚRuntimeError)Údatasetr»   ÚdbsizeÚszsufs       r   Údataset_from_nameræ   `  sk  € ð
 �(ÒÐÝ‰ŒÐà	�HÒ	Ð	Ý‰ŒÐà	×	Ò	˜HÑ	%Ô	%ð 9Ø  JÒ.Ð.��µC¸ÀÀ"À¼Ñ4FÔ4FˆÝ &Ð)Ñ)Ô)Ð)à	×	Ò	˜FÑ	#Ô	#ð 9à˜˜˜”ˆØ�Œ9˜ÒÐØ�s 5¨¨"¨¤:™œÑ.ˆFˆFØ�dŠ]ˆ]ØˆFˆFØ�2ŒY˜#ÒÐØ�C  c r c¤
™OœOÑ+ˆFˆFà=Ð5¸Ñ=Ñ=Ô=Ð=Ý Ð'Ñ'Ô'Ð'à	�KÒ	Ð	ÝÑ Ô Ð à	�GÒ	Ð	Ý XÐ.Ñ.Ô.Ð.õ Ð-°Ñ7Ñ8Ô8Ð8r   )r×   F)ÚosÚnumpyrQ   re   ÚgetpassÚvecs_ior   r   r   r   Úexhaustive_searchr   r
   rJ   ÚgetuserÚusernamerj   rk   Úexistsrl   rn   r‰   r‹   rž   r±   rÇ   rÑ   ræ   rH   r   r   ú<module>rï      s_  ðð 
€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€ð DÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ "Ð "Ð "Ð "Ð "Ð "ð8Að 8Að 8Að 8Að 8Añ 8Aô 8Að 8Aðv%ð %ð %ð %ð %�wñ %ô %ð %ð\ ˆ7Œ?ÑÔ€ð 	(ØAØ+�Ð+Ð+Ð+ð-ð ð €Oð 
„w‡~‚~•oÑ&Ô&ð Øˆðð €Oðð ð ð
ð ð ð ð �Gñ ô ð ð:4ð 4ð 4ð%5ð %5ð %5ð %5ð %5�Gñ %5ô %5ð %5ðP-5ð -5ð -5ð -5ð -5�Gñ -5ô -5ð -5ð` ð  ð  ð  ð  �7ñ  ô  ð  ðFð ð ð ð �gñ ô ð ð:ð ð ð ð �Gñ ô ð ð:#9ð #9ð #9ð #9ð #9ð #9r   