o
    Zh	                     @   s   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 deeZ			
ddejdedededee f
ddZeeeefddee
 deedf dee
 fddZdS )z<Utility functions for working with vectors and vectorstores.    )Enum)ListTupleTypeN)Document)cosine_similarityc                   @   s$   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    r   r   ]/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/vectorstores/utils.pyr      s    r         ?   query_embeddingembedding_listlambda_multkreturnc                 C   s  t |t|dkrg S | jdkrtj| dd} t| |d }tt|}|g}t|| g}t|t |t|k rtj	 }d}	t||}
t
|D ]!\}}||v rSqJt|
| }|| d| |  }||krk|}|}	qJ||	 tj|||	 gdd}t|t |t|k s;|S )z%Calculate maximal marginal relevance.r      )Zaxis)minlenndimnpZexpand_dimsr   intZargmaxarrayinf	enumeratemaxappend)r   r   r   r   Zsimilarity_to_queryZmost_similarZidxsselectedZ
best_scoreZ
idx_to_addZsimilarity_to_selectediZquery_scoreZredundant_scoreZequation_scorer   r   r   maximal_marginal_relevance   s4   


r)   )allowed_types	documentsr*   .c                C   sN   g }| D ] }i }|j  D ]\}}t||sq|||< q||_ || q|S )zDFilter out metadata types that are not supported for a vector store.)metadataitems
isinstancer&   )r+   r*   Zupdated_documentsZdocumentZfiltered_metadatakeyvaluer   r   r   filter_complex_metadata9   s   

r1   )r   r   )r   enumr   typingr   r   r   numpyr    Zlangchain_core.documentsr   Zlangchain_community.utils.mathr   strr   Zndarraylistfloatr!   r)   boolr1   r   r   r   r   <module>   s8    

%
