Ë
    µŒjª	  ã                   óÔ   — 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   © ó    úp/var/www/html/Fitness-lenito-AI-main/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  r¬t        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      sY  € ô ˆ1Œc�.Ó!Ó" aÒ'Øˆ	Ø×Ñ˜qÒ ÜŸ.™.¨¸qÔAˆÜ+¨O¸^ÓLÈQÑOÐÜ”r—y‘yÐ!4Ó5Ó6€LØˆ>€DÜ�x‰x˜¨Ñ5Ð6Ó7€HÜ
ˆd‹)”c˜!œS Ó0Ó1Ò
1Ü—f‘f�Wˆ
Øˆ
Ü!2°>À8Ó!LÐÜ'Ð(;Ö<‰NˆAˆ{Ø�D‰yØÜ!Ð"8¸Ñ";Ó<ˆOà˜kÑ)¨Q°©_ÀÑ,OÑOð ð  
Ó*Ø+�
Ø‘
ð =ð 	�‰�JÔÜ—9‘9˜X¨°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   so   € ð ÐÛˆØÐØ"×+Ñ+×1Ñ1Ö3‰JˆC�Ü˜e ]Ô3ØØ%*Ð˜cÒ"ð 4ð
 .ˆÔØ× Ñ  Õ*ð ð Ð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å ß $Ñ $ã Ý -å <ô�s˜Dô ð Øñ	Ø—Z‘Zðàðð ðð ð	ð
 
ˆ#�YóðJ (+¨D°#°uÐ&=òØ�H‰~ðð ˜˜s˜Ñ#ðð 
ˆ(�^ô	r   