
    9i70                         S SK r S SKJr  S SKrSSKJr  SSKJrJ	r	  SSK
JrJr  \	" S5      (       a  S SKr\" S5       " S	 S
5      5       r " S S5      r\" S5       " S S5      5       rg)    N)Path   )logging)class_requires_depsis_dep_available   )
YAMLReader
YAMLWriterz	faiss-cpuc                       \ rS rSrSrSrSrSrS r\	S 5       r
\	S 5       r\	S	 5       r\	S
 5       r\	S 5       r\	S 5       r\S 5       rS rS r\S 5       rS r\S 5       rSrg)	IndexData   vectorz.indexid_mapz.yamlc                 X    Xl         X l        US   U l        US   U l        US   U l        g )Nr   metric_type
index_type)_index_index_info_id_map_metric_type_index_type)selfindex
index_infos      n/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/paddlex/inference/pipelines/components/faisser.py__init__IndexData.__init__#   s3    %!(+&}5%l3    c                     U R                   $ N)r   r   s    r   r   IndexData.index*   s    {{r   c                 B    [         R                  " U R                  5      $ r    )faissserialize_indexr   r!   s    r   index_bytesIndexData.index_bytes.   s    $$T[[11r   c                     U R                   $ r    )r   r!   s    r   r   IndexData.id_map2   s    ||r   c                     U R                   $ r    )r   r!   s    r   r   IndexData.metric_type6   s       r   c                     U R                   $ r    )r   r!   s    r   r   IndexData.index_type:   s    r   c                 h    U R                   U R                  U R                  U R                  5      S.$ )N)r   r   r   )r   r   _convert_intr   r!   s    r   r   IndexData.index_info>   s0     //++''4
 	
r   c                 v    [         R                  " U5      n[        R                  " US   5      nU " X2S   5      $ )Nr      )pickleloadsr$   deserialize_index)clsbytestupr   s       r   
from_bytesIndexData.from_bytesF   s3    ll5!''A/5a&!!r   c                     [         R                  " U R                  5      U R                  4n[        R
                  " U5      $ r    )r$   r%   r   r   r3   dumps)r   r8   s     r   to_bytesIndexData.to_bytesL   s.    $$T[[14??C||C  r   c                 ~    UR                  5        VVs0 s H  u  p#[        U5      [        U5      _M     snn$ s  snnf r    )itemsintstr)r   r   kvs       r   r/   IndexData._convert_intP   s.    +1<<>:>41AA>:::s   !9c                     U R                  5        VVs0 s H%  u  p[        R                  " U5      [        U5      _M'     snn$ s  snnf r    )r@   npint64rB   )r   rC   rD   s      r   _convert_int64IndexData._convert_int64S   s3    06?SV#???s   ,Ac                    [        U5      nUR                  SSS9  XR                   U R                   3-  R	                  5       nXR
                   U R                   3-  R	                  5       nU R                  [        R                  ;   a"  [        R                  " U R                  U5        O![        R                  " U R                  U5        [        5       nUR                  UU R                   SSS9  g )NT)parentsexist_okF)default_flow_styleallow_unicode)r   mkdir	VECTOR_FNVECTOR_SUFFIXas_posixIDMAP_FNIDMAP_SUFFIXr   FaissBuilderBINARY_METRIC_TYPEr$   write_index_binaryr   write_indexr
   writer   )r   save_dirvector_pathindex_info_pathyaml_writers        r   saveIndexData.saveW   s    >td3^^$4T5G5G4H"IISSU#8I8I7J&KKUUW|>>>$$TZZ=djj+6 lOO$	 	 	
r   c                    [        U[        5      (       Ga  [        U5      nX R                   U R                   3-  nX R
                   U R                   3-  nUR                  5       (       d$   SU R                   U R                   SU S35       eUR                  5       (       d$   SU R
                   U R                   SU S35       e[        5       nUR                  U5      nSU;   a  SU;   a  SU;   d   SU S35       e[        R                  US   5      nUS   [        R                  ;   a%  [        R                  " UR!                  5       5      nO$[        R"                  " UR!                  5       5      nUR$                  ['        U5      :X  d   S	5       eXUS   US   4$ [        U[        5      (       d   eUR(                  UR*                  UR,                  UR.                  4$ )
NzNot found the z	 file in !r   r   r   zThe index_info file(z]) may have been damaged, `id_map` or `metric_type` or `index_type` not found in `index_info`.z.data number in index is not equal in in id_map)
isinstancerB   r   rQ   rR   rT   rU   existsr	   readr   rI   rV   rW   r$   read_index_binaryrS   
read_indexntotallenr   r   r   r   )r6   r   
index_rootr\   r]   yaml_readerr   r   s           r   loadIndexData.loadj   s    eS!!eJ$--9J9J8K'LLK(ll^C<L<L;M+NNO ""$$Ts/@/@.A5'QRST$  &&((R~c.>.>-?yqQR( %,K$))/:JJ&!Z/ J.U &o%6  7T  U	U/ --j.BCF-(L,K,KK//0D0D0FG(()=)=)?@<<3$  @?@  *]";Z=UUUeY////;;e.?.?AQAQQQr   )r   r   r   r   r   N)__name__
__module____qualname____firstlineno__rQ   rR   rT   rU   r   propertyr   r&   r   r   r   r   classmethodr9   r=   r/   staticmethodrI   r_   rl   __static_attributes__ r   r   r   r      s    IMHL4   2 2   ! !     
 
 " "
!; @ @
& !R !Rr   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )FaissIndexer   c                 t   > [         TU ]  5         [        R                  U5      u  U l        U l        U l        ng r    )superr   r   rl   _indexerr   r   )r   r   r   	__class__s      r   r   FaissIndexer.__init__   s/     	CL>>RWCX@t{D$4jr   c                 V   U R                   R                  [        R                  " U5      U5      u  pV/ n[	        XV5       Hp  u  pUR                  / / S.5        [	        X5       HH  u  pUS:  d  M  US   S   R                  U
5        US   S   R                  U R                  U   5        MJ     Mr     U R                  [        R                  ;   a$  [        R                  " US S 2S4   U:  5      S   nO#[        R                  " US S 2S4   U:  5      S   nU H
  nS S S.X}'   M     U$ )N)scorelabelr   r   r   )r|   searchrG   arrayzipappendr   r   rV   rW   where)r   featurescore_threshamming_radiustopkscores_listids_listpredsscoresidsr   ididxsidxs                 r   __call__FaissIndexer.__call__   s    $ 4 4RXXg5F M{5KFLL234 -	7"Ig&--e4"Ig&--dkk"o> . 6 |>>>88K1->?BD88K1-;<Q?DC#'$7EJ r   )r|   r   r   )rn   ro   rp   rq   r   r   ru   __classcell__)r}   s   @r   rx   rx      s    Y r   rx   c                       \ rS rSrSrSrSrSr\SS j5       r	\S 5       r
\  SS	 j5       r\S
 5       r\S 5       r\S 5       r\SS j5       rSrg)rV      )hammingIPL2)FlatIVFHNSW32)r   )r   r   
BinaryHashNc           	      P   US:X  a>  U[        [        [        US-  5      S5      5      -   nXR                  ;   a  US-  nOUS-  nXR                  ;   a,  X R                  ;   d   SU SU R                   S35       eS	U-   nUS
:X  a  [
        R                  " S5        S
nUS:X  a  SnU$ )Nr      i   z,BFlatz,FlatzThe metric type(z) only support z index types!Br   z5The HNSW32 method dose not support 'remove' operationr   )rB   minrA   rW   BINARY_SUPPORT_INDEX_TYPEr   warning)r6   r   r   nums       r   _get_index_typeFaissBuilder._get_index_type   s     #c#c#(mU*C&DDJ444h&
g%
 000;;;k!+oc>[>[=\\ijk;z)J!OOST!JJr   c                     US:X  a  [         R                  $ US:X  a  [         R                  $ US:X  a  [         R                  $ US:X  a  [         R                  $ g )Nr   jaccardr   r   )r$   METRIC_HammingMETRIC_JaccardMETRIC_INNER_PRODUCT	METRIC_L2)r6   r   s     r   _get_metric_typeFaissBuilder._get_metric_type   sU    )#'''I%'''D ---D ??" !r   c           	      Z   XPR                   ;   d   SU R                    S35       eX@R                  ;   d   SU R                   S35       e[        U[        5      (       a  U R	                  X!5      u  pgOX!pvU" U5       Vs/ s H  oS   PM	     n	nX@R
                  ;   a  [        R                  O[        R                  n
[        R                  " U	5      R                  U
5      n	U	R                  u  pX@R
                  ;   a8  [        R                  " UU R                  XEU5      U R                  U5      5      nOM[        R                   " UU R                  XEU5      U R                  U5      5      n[        R"                  " U5      n0 nU R%                  XMXUSS9u  p['        XXES.5      $ s  snf )NzSupported index types only: rb   Supported metric types only: r   newmoder   r   r   )SUPPORT_INDEX_TYPESUPPORT_METRIC_TYPErc   rB   load_galleryrW   rG   uint8float32r   astypeshaper$   index_binary_factoryr   r   index_factoryIndexIDMap2_add_galleryr   )r6   gallery_imgsgallery_labelpredict_funcr   r   gallery_docsgallery_listresfeaturesdtype
vector_num
vector_dimr   r   s                  r   buildFaissBuilder.build   s    000	D)#*@*@)AC	D0 222	F*3+B+B*C1E	F2 mS))),)9)9-)V&L,)6,.:<.HI.Hs	N.HI'+A+AArzz88H%,,U3!)
000..##KZH$$[1E ''##KZH$$[1E
 %%e,E %%|% & 

 +X
 	
1 Js   >F(c                 t   [         R                  U5      u  p#pEUS:X  a  [        S5      e[        U[        5      (       a  / n[        U5       nUR                  5       nS S S 5        / nU H?  n[        UR                  5       R                  S5      S   5      n	UR                  U	5        MA     [        R                  " U5      nO[        R                  " U5      nUR                  U5        UR                  5        V
Vs0 s H  u  pX;  d  M  X_M     nn
n[        X#XES.5      $ ! , (       d  f       N= fs  snn
f )Nr   z:The index_type: HNSW32 dose not support 'remove' operation r   r   )r   rl   RuntimeErrorrc   rB   open	readlinesrA   stripsplitr   rG   asarray
remove_idsr@   )r6   r   r   r   r   r   linesflineid_rC   rD   s               r   removeFaissBuilder.remove
  s    /8nnU.C+K!L  j#&&Ej!Q "J$**,,,S1!45!!#&  J/JJ/J 	$ #		Cq/BtqtC+X
 	
 "! Ds   D#=D4D4#
D1c           	         [         R                  U5      u  pEpgX`R                  ;   d   SU R                   S35       e[        U[        5      (       a  U R                  X!5      u  pOX!pU" U	5       V
s/ s H  oS   PM	     nn
X`R                  ;   a  [        R                  O[        R                  n[        R                  " U5      R                  U5      nU R                  XdX[USS9u  pE[        XEXgS.5      $ s  sn
f )Nr   rb   r   r   r   r   )r   rl   r   rc   rB   r   rW   rG   r   r   r   r   r   )r6   r   r   r   r   r   r   r   r   r   r   r   r   s                r   r   FaissBuilder.append(  s    .7nnU.C+K222	F*3+B+B*C1E	F2 mS))),)9)9-)V&L,)6,.:<.HI.Hs	N.HI'+A+AArzz88H%,,U3 %%|( & 

 +X
 	
 Js   2C8c                    U(       a  [        UR                  5       5      S-   OSn[        R                  " S[	        U5      5      U-   R                  [        R                  5      nUS:X  a2  XR                  ;   a  UR                  U5        OUR                  U5        XR                  ;  a  UR                  XH5        [        [        U5      U5       H	  u  pXU	'   M     X#4$ )Nr2   r   r   )maxkeysrG   arangeri   r   rH   rW   addtrainadd_with_idsr   list)r6   r   r   r   gallery_featuresr   r   start_idids_nowids              r   r   FaissBuilder._add_gallery@  s     +.3sxxz?Q&199QL 12X=EEbhhO 5=444		*+,-444/9
 W|4DAF 5zr   c                 P   / n/ n/ n[        U5      n[        USSS9 nUR                  5       nS S S 5        U HX  n	U	R                  5       R	                  U5      u  pXz-  nUR                  UR                  5       5        UR                  U5        MZ     Xe4$ ! , (       d  f       No= f)Nrzutf-8)encoding)r   r   r   r   r   r   rS   )r6   gallery_label_pathgallery_imgs_root	delimiterr   fileslabelsrootr   r   pathr   	file_paths                r   r   FaissBuilder.load_galleryX  s    %&$cG<KKME =D**,,,Y7KDILL++-.MM% 	 
 } =<s   B
B%rv   r    )r   r   ) r   )rn   ro   rp   rq   r   r   rW   r   rs   r   r   r   r   r   r   r   ru   rv   r   r   rV   rV      s     22% = 2 # #  /
 /
b 
 
: 
 
.  .  r   rV   )r3   pathlibr   numpyrG   utilsr   
utils.depsr   r   utils.ior	   r
   r$   r   rx   rV   rv   r   r   <module>r      sw        @ .K   [!oR oR "oRd 8 [!y y "yr   