
    rh                     &    d dl Z d dlZd Zd Zd Zy)    Nc           	         |dk(  r| dz  S |j                  d      r| dz  t        | |dt        d              z   S t        j                  d|      }|rt        | |j                  d            S t        j                  d|      }|rt        | |j                  d            S t        j                  d	|      }|rt        | |j                  d            S t        j                  d
|      }|r7t        | |j                  d            t        | |j                  d            z   S t        j                  d|      }|r;t        |j                  d            t        |j                  d            z  dz   dz  S t        j                  d|      }|r5t        |j                  d            t        |j                  d            z   S t        j                  d|      }|rt        |j                  d            S |dk(  s|dk(  r| dz  dz   S |dk(  r| S |dk(  r| dz   dz  S |dk(  r| dz  dz   dz  S |dk(  r| dz  S |dk(  r| dz  S t        j                  d|      }|r3t        t        |j                  d            |j                  d            S t        j                  d|      }|r3t        t        |j                  d            |j                  d            S t        j                  d|      }|rt        | |j                  d            S t        j                  d|      }|r3t        t        |j                  d            |j                  d            S t        d|z         )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   SQfp16SQbf16z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mos      n/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/faiss/contrib/factory_tools.pyr   r   
   s    61u"1u}Q3x=.(ABBB	+X	6B	Q,,	*H	5B	Q,,	#X	.B	Q,,	*H	5B	Q,}Q/LLL	-x	8B	BHHQK 3rxx{#33a7A==	&	1B	BHHQK 3rxx{#334	+x	(B	288A;8x=81uv~5	U	A!|	U	A	a	X	1u	X	1u	%x	0B	S!-rxx{;;	((	3B	S!-rxx{;;	/8	,B	Q,,	"H	-B	S!-rxx{;;
1
22    c                 R    | j                   j                  j                  d      dz  S )Nr   r   )hnswcum_nneighbor_per_levelat)indexs    r   
get_hnsw_Mr$   M   s"    ::--003q88r   c           
      
   t        j                  |       } t        | t         j                        ryt        | t         j                        rt        j                  | j
                        }t        |t         j                        rd| j                   }nt        |t         j                        r1d|j                  j                   d|j                  j                   }nRt        |t         j                        rd| j                   dt        |       }nd| j                   dt        |       d}t        | t         j                        r|dz   S t        | t         j                        r|d	z   S t        | t         j                         r3|d
| j                  j                   d| j                  j                   z   S t        | t         j"                        r4|d
| j                  j                   d| j                  j                   dz   S t+               t        | t         j$                        r9| j&                  j)                         dk7  r
t+               t        j,                  | j&                  j/                  d            }t        |t         j0                        rd|j                   d|j2                   }nt        |t         j4                        rd|j6                  j2                   }n_t        |t         j8                        r;|j:                  dk(  sJ d|j<                  rdndz   t?        |j2                        z   }n
t+               | dt        | j@                         S t        | t         j                        rdt        |        S t        | t         jB                        r.t        | jD                         dt        | jF                         dS t        | t         jH                        r1d| j                  j                   d| j                  j                   dS t        | t         jJ                        r0d| j                  j                   d| j                  j                   S t        | t         jL                        r&d| jN                  rdndz   | jP                  rdz   S dz   S t        | t         jR                        rt         jT                  jV                  dt         jT                  jX                  dt         jT                  jZ                  dt         jT                  j\                  dt         jT                  j^                  di}d || j`                  jb                      S t+               )!zE
    attempts to get the factory string the index was built with
    r   IVFIMIx_HNSW()z,Flatz,SQ8z,PQfsr   r   OPQ_ITQPCAR ,HNSWz,Refine(PQLSHrt846fp16bf16SQ)2faissdowncast_index
isinstance	IndexFlatIndexIVF	quantizernlistMultiIndexQuantizerpqMnbits	IndexHNSWr$   reverse_index_factoryIndexIVFFlatIndexIVFScalarQuantizer
IndexIVFPQIndexIVFPQFastScanIndexPreTransformchainsizeNotImplementedErrordowncast_VectorTransformr"   	OPQMatrixd_outITQTransformitq	PCAMatrixeigen_powerrandom_rotationstrr#   IndexRefine
base_indexrefine_indexIndexPQFastScanIndexPQIndexLSHrotate_datatrain_thresholdsIndexScalarQuantizerScalarQuantizerQT_8bitQT_4bitQT_6bitQT_fp16QT_bf16sqqtype)r#   rD   prefixvtsqtypess        r   rK   rK   Q   s+      'E%)	E5>>	*((9	i15;;-(F	5#<#<=9<<>>*!ILL,>,>+?@F	5??35;;-uZ	-B,CDF5;;-q)>y)I(J!LFeU//0G##eU::;F?"eU--.c%((**Quxx~~.>???eU556c%((**Quxx~~.>bAAAT 
Q 
E522	3;;"%''++EKKNN1,=>b%//*244&"((,FE../266<<.)FEOO,>>Q&&&R%7%7cR@3rxx=PF%''0=>??	E5??	+j'())	E5,,	-'(8(89:(CXY^YkYkClBmmnoo	E500	1EHHJJ<q 033	E5==	)EHHJJ<q 011	E5>>	*u00b9EDZDZScc`bcc	E555	6!!))3!!))3!!))3!!))6!!))6
 GEHHNN+,--

r   )r?   r   r   r$   rK    r   r   <module>rr      s     	@3F9D r   