
    h	                         d Z ddlmZ ddlmZmZmZ ddlZddl	m
Z
 ddlmZ  G d dee      Z	 	 dd	ej                  d
edededee   f
dZeeeefddee
   deedf   dee
   fdZy)z<Utility functions for working with vectors and vectorstores.    )Enum)ListTupleTypeN)Document)cosine_similarityc                   $    e Zd ZdZdZdZdZdZdZy)DistanceStrategyzTEnumerator of the Distance strategies for calculating distances
    between vectors.EUCLIDEAN_DISTANCEMAX_INNER_PRODUCTDOT_PRODUCTJACCARDCOSINEN)	__name__
__module____qualname____doc__r   r   r   r   r        d/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain_community/vectorstores/utils.pyr
   r
      s$     .+KGFr   r
   query_embeddingembedding_listlambda_multkreturnc                    t        |t        |            dk  rg S | j                  dk(  rt        j                  | d      } t        | |      d   }t        t        j                  |            }|g}t        j                  ||   g      }t        |      t        |t        |            k  rt        j                   }d}	t        ||      }
t        |      D ]0  \  }}||v rt        |
|         }||z  d|z
  |z  z
  }||kD  s-|}|}	2 |j                  |	       t        j                  |||	   gd      }t        |      t        |t        |            k  r|S )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_relevancer7      s^    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>8!L'(;< 		NA{Dy!"8";<Ok)Q_,OO  
*+

		 	J99Xz(B'C!L d)c!S01
1  Kr   )allowed_types	documentsr8   .c                    g }| D ]P  }i }|j                   j                         D ]  \  }}t        ||      s|||<    ||_         |j                  |       R |S )zDFilter out metadata types that are not supported for a vector store.)metadataitems
isinstancer+   )r9   r8   updated_documentsdocumentfiltered_metadatakeyvalues          r   filter_complex_metadatarC   9   sy      +"++113 	+JCe]3%*c"	+
 .  *+ r   )g      ?   )r   enumr   typingr   r   r   numpyr#   langchain_core.documentsr   langchain_community.utils.mathr   strr
   ndarraylistfloatr%   r7   boolrC   r   r   r   <module>rO      s    B  $ $  - <sD  	ZZ  	
 
#YJ (+D#u&=H~ s# 
(^	r   