o
    ©Ci  ã                   @   s$   d dl Z d dlZdd„ Zdd„ ZdS )é    Nc                 C   s\  |dkr| d S |  d¡r| d t| |dtdƒ … ƒ S t d|¡}|r-t| | d¡ƒS t d|¡}|r=t| | d¡ƒS t d	|¡}|rMt| | d¡ƒS t d
|¡}|ret| | d¡ƒt| | d¡ƒ S t d|¡}|rt| d¡ƒt| d¡ƒ d d S t d|¡}|r•t| d¡ƒt| d¡ƒ S t d|¡}|r¤t| d¡ƒS |dks¬|dkr²| d d S |dkr¸| S |dkrÂ| d d S |dkrÎ| d d d S |dkrÖ| d S t d|¡}|rëtt| d¡ƒ| d¡ƒS t d|¡}|rtt| d¡ƒ| d¡ƒS t d|¡}|rt| | d¡ƒS t d|¡}|r(tt| d¡ƒ| d¡ƒS td| ƒ‚)z[ size of one vector in an index in dimension d
    constructed with factory string indexkeyÚFlaté   z,RFlatNzIVF\d+(_HNSW32)?,(.*)$é   zIVF\d+\(.*\)?,(.*)$é   zIMI\d+x2,(.*)$z(.*),Refine\((.*)\)$zPQ(\d+)x(\d+)(fs|fsr)?$é   é   zPQ(\d+)\+(\d+)$zPQ(\d+)$ÚHNSW32zHNSW32,Flaté   ÚSQ8ÚSQ4ÚSQ6é   ÚSQfp16zPCAR?(\d+),(.*)$zOPQ\d+_(\d+),(.*)$zOPQ\d+,(.*)$zRR(\d+),(.*)$zcannot parse )ÚendswithÚget_code_sizeÚlenÚreÚmatchÚgroupÚintÚRuntimeError)ÚdÚindexkeyÚmo© r   ús/var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/site-packages/faiss/contrib/factory_tools.pyr   
   s`   
  $r   c                 C   sÌ   t  | ¡} t| t jƒrdS t| t jƒrct  | j¡}t|t jƒr%d| j }n*t|t jƒr6d|jj	|jj
f }nt|t jƒrFd| j|jj	f }n	d| jt|ƒf }t| t jƒrY|d S t| t jƒrc|d S tƒ ‚)zE
    attempts to get the factory string the index was built with
    r   zIVF%dzIMI%dx%dzIVF%d_HNSW%dz	IVF%d(%s)z,Flatz,SQ8)ÚfaissÚdowncast_indexÚ
isinstanceÚ	IndexFlatÚIndexIVFÚ	quantizerÚnlistÚMultiIndexQuantizerÚpqÚMÚnbitÚ	IndexHNSWÚhnswÚreverse_index_factoryÚIndexIVFFlatÚIndexIVFScalarQuantizerÚNotImplementedError)Úindexr!   Úprefixr   r   r   r)   L   s"   
r)   )r   r   r   r)   r   r   r   r   Ú<module>   s   B