
    dh	                         S r SSKJr  SSKJrJrJr  SSKrSSK	J
r
  SSKJr   " S S\\5      r  SS	\R                  S
\S\S\S\\   4
S jjr\\\\4S.S\\
   S\\S4   S\\
   4S jjrg)z<Utility functions for working with vectors and vectorstores.    )Enum)ListTupleTypeN)Document)cosine_similarityc                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
DistanceStrategy   zPEnumerator of the Distance strategies for calculating distances
between vectors.EUCLIDEAN_DISTANCEMAX_INNER_PRODUCTDOT_PRODUCTJACCARDCOSINE N)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   __static_attributes__r       ^/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/utils.pyr
   r
      s$     .+KGFr   r
   query_embeddingembedding_listlambda_multkreturnc                    [        U[        U5      5      S::  a  / $ U R                  S:X  a  [        R                  " U SS9n [        X5      S   n[        [        R                  " U5      5      nU/n[        R                  " X   /5      n[        U5      [        U[        U5      5      :  a  [        R                  * nSn	[        X5      n
[        U5       H1  u  pX;   a  M  [        X   5      nX,-  SU-
  U-  -
  nX:  d  M-  UnUn	M3     UR                  U	5        [        R                  " XqU	   /SS9n[        U5      [        U[        U5      5      :  a  M  U$ )z%Calculate maximal marginal relevance.r      )axis)minlenndimnpexpand_dimsr   intargmaxarrayinf	enumeratemaxappend)r   r   r   r   similarity_to_querymost_similaridxsselected
best_score
idx_to_addsimilarity_to_selectediquery_scoreredundant_scoreequation_scores                  r   maximal_marginal_relevancer:      sG    1c.!"a'	q ..qA+OLQOryy!456L>Dxx567H
d)c!S01
1ffW

!2>!L'(;<NAy!"8";<O)Q_,OO  *+

 = 	J99Xz(B'C!L d)c!S01
1  Kr   )allowed_types	documentsr;   .c                    / nU  HU  n0 nUR                   R                  5        H  u  pV[        Xa5      (       d  M  XdU'   M     XCl         UR                  U5        MW     U$ )zDFilter out metadata types that are not supported for a vector store.)metadataitems
isinstancer.   )r<   r;   updated_documentsdocumentfiltered_metadatakeyvalues          r   filter_complex_metadatarF   9   si     "++113JCe33%*c" 4
 .  *  r   )g      ?   )r   enumr   typingr   r   r   numpyr&   langchain_core.documentsr   langchain_community.utils.mathr   strr
   ndarraylistfloatr(   r:   boolrF   r   r   r   <module>rR      s    B  $ $  - <sD  	ZZ  	
 
#YJ (+D#u&=H~ s# 
(^	r   