
    +#h	                         d dl mZmZ d dlZeeee      eej                     ej                  f   Z	 	 ddej                  dedede	dee	   f
dZ
d	ed
edej                  fdZy)    )ListUnionN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_dimscosine_similarity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                  T/var/www/html/sandstorm/venv/lib/python3.12/site-packages/langchain_qdrant/_utils.pymaximal_marginal_relevancer(      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  K    XYc                    t        |       dk(  st        |      dk(  rt        j                  g       S t        j                  |       } t        j                  |      }| j                  d   |j                  d   k7  r&t	        d| j                   d|j                   d      	 ddl}t        j                  | t        j                        } t        j                  |t        j                        }dt        j                  |j                  | |d	            z
  }|S # t        $ r t        j                  j                  | d
      }t        j                  j                  |d
      }t        j                  dd      5  t        j                  | |j                        t        j                  ||      z  }ddd       n# 1 sw Y   nxY wdt        j                  |      t        j                   |      z  <   |cY S w xY w)z<Row-wise cosine similarity between two equal-width matrices.r   r   z;Number of columns in X and Y must be the same. X has shape z and Y has shape .N)dtypecosine)metricr   ignore)divideinvalidg        )r   r   r   shape
ValueErrorsimsimdfloat32cdistImportErrorlinalgnormerrstatedotTouterisnanisinf)r*   r+   simdZX_normY_norm
similaritys          r'   r   r   *   s   
1v{c!fkxx|
A
AwwqzQWWQZI!'' S wwiq*
 	
HHQbjj)HHQbjj)Aq:;; **[[(; 	C133"((66*BBJ	C 	C 	CBE
288J'"((:*>>?s,   "A9D A"G>>8F?6	G>?G	7G>=G>)g      ?   )typingr   r   numpyr   floatndarrayMatrixlistr   r(   r    r)   r'   <module>rO      s     	tDK $rzz"2BJJ>	? 	ZZ  	
 
#YD F rzz r)   