
    Ng	                         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dS )    )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 ]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_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                  S/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_qdrant/_utils.pymaximal_marginal_relevancer*      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  K    XYc                    t          |           dk    st          |          dk    rt          j        g           S t          j        |           } t          j        |          }| j        d         |j        d         k    r t	          d| j         d|j         d          	 ddl}t          j        | t          j                  } t          j        |t          j                  }dt          j        |                    | |d	                    z
  }|S # t          $ r t          j	        
                    | d
          }t          j	        
                    |d
          }t          j        dd          5  t          j        | |j                  t          j        ||          z  }ddd           n# 1 swxY w Y   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   
1vv{{c!ffkkx||
A
AwqzQWQZ*!' * * w* * *
 
 	
HQbj)))HQbj)))Aq::;;;   ****[(;;; 	C 	C13"(66*B*BBJ	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	CBE
28J''"(:*>*>>?s8    A2D A"G.51F2&G.2F6	6G.9F6	:1G.-G.)r   r   )typingr   r   numpyr   floatndarrayMatrixlistr   r*   r    r+   r)   <module>rP      s               	tDK $rz"2BJ>	? 	 Z  	
 
#Y   D F rz      r+   