a
    bg	                     @   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ejeeeee dddZeeeefdee
 eedf ee
 d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   t/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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 ]B\}}||v rqt|
| }|| d| |  }||kr|}|}	q||	 tj|||	 gdd}q`|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   s0    


r)   )allowed_types.)	documentsr*   r   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>   s*     %

