
    Ng	                         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dS )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dS )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        b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/utils.pyr
   r
      s5          .+KGFFFr   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 ]7\  }}||v r
t          |
|                   }||z  d|z
  |z  z
  }||k    r|}|}	8|                    |	           t          j        |||	         gd          }t          |          t          |t          |                    k     |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_relevancer9      s    1c.!!""a''	q  .qAAA+O^LLQOry!45566L>Dx5677H
d))c!S0011
1
1fW

!2>8!L!L'(;<< 		 		NA{Dyy!"8";<<Ok)Q_,OO  
**+

J9Xz(B'C!LLL d))c!S0011
1
1  Kr   )allowed_types	documentsr:   .c                    g }| D ]U}i }|j                                         D ]\  }}t          ||          s|||<   ||_         |                    |           V|S )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_metadatarE   9   s      + +"+1133 	+ 	+JCe]33 %*c""-  ****r   )r   r   )r   enumr   typingr   r   r   numpyr%   langchain_core.documentsr   langchain_community.utils.mathr   strr
   ndarraylistfloatr'   r9   boolrE   r   r   r   <module>rP      sP   B B       $ $ $ $ $ $ $ $ $ $     - - - - - - < < < < < <    sD    	 Z  	
 
#Y   J (+D#u&=  H~ s# 
(^	     r   