
    %Gg4                        d dl mZmZ d dlZd dlmZ d dlmZ	 d dl
mZmZmZmZmZmZ  G d d      Z G d d	      Z G d
 d      Z G d d      Zeeeef   Zde	j,                  dee	j,                     dej0                  de	j,                  fdZde	j,                  dee	j,                     dej0                  de	j,                  fdZdedee	j,                     dej0                  de	j,                  fdZdee   dee	j,                     dej0                  de	j,                  fdZdedee	j,                     dej0                  de	j,                  fdZdedee	j,                     dej0                  de	j,                  fdZy)    )OptionalUnionN)models)common_types)distance_to_orderDistanceOrdercalculate_distancescaled_fast_sigmoidEPSILONfast_sigmoidc            	       R    e Zd Z	 	 ddeeeee            deeeee            fdZy)MultiRecoQueryNpositivenegativec                    ||ng }||ng }|D cg c]  }t        j                  |       c}| _        |D cg c]  }t        j                  |       c}| _        t        j                  | j                        j                         rJ d       t        j                  | j                        j                         rJ d       y c c}w c c}w )Nz%Positive vectors must not contain NaNz%Negative vectors must not contain NaNnparrayr   r   isnanany)selfr   r   vectors       /home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/qdrant_client/local/multi_distances.py__init__zMultiRecoQuery.__init__   s    
  (38'38PX0Yf&1A0YPX0Yf&1A0Y88DMM*..0Y2YY088DMM*..0Y2YY00	 1Z0Ys
   CC)NN)__name__
__module____qualname__r   listfloatr        r   r   r      sJ     7;6:Z4T%[ 123Z 4T%[ 123Zr!   r   c                   4    e Zd Zdeee      deee      fdZy)MultiContextPairr   r   c                 <   t        j                  |      | _        t        j                  |      | _        t        j                  | j                        j                         rJ d       t        j                  | j                        j                         rJ d       y )Nz$Positive vector must not contain NaNz$Negative vector must not contain NaNr   )r   r   r   s      r   r   zMultiContextPair.__init__"   so    *,((8*<*,((8*<88DMM*..0X2XX088DMM*..0X2XX00r!   N)r   r   r   r   r   r   r    r!   r   r#   r#   !   s*    Yd5k!2 Yd4;>O Yr!   r#   c                   .    e Zd Zdeee      dee   fdZy)MultiDiscoveryQuerytargetcontextc                     t        j                  |      | _        || _        t        j                  | j                        j                         rJ d       y )Nz"Target vector must not contain NaN)r   r   r'   r(   r   r   )r   r'   r(   s      r   r   zMultiDiscoveryQuery.__init__+   sA    (*(888DKK(,,.T0TT..r!   N)r   r   r   r   r   r#   r   r    r!   r   r&   r&   *   s'    UtDK0 U4@P;Q Ur!   r&   c                       e Zd Zdee   fdZy)MultiContextQuerycontext_pairsc                     || _         y N)r,   )r   r,   s     r   r   zMultiContextQuery.__init__3   s
    *r!   N)r   r   r   r   r#   r   r    r!   r   r+   r+   2   s    +d+;&< +r!   r+   query_matrixmatricesdistance_typereturnc           	         t        j                  |       j                         rJ d       t        | j                        dk(  sJ d       t        |      t        j                  k(  }g }|D ]h  }t        | ||      }|st         j                  nt         j                  }t        t        j                   ||d                  }|j                  |       j t        j                  |      S )Nz!Query matrix must not contain NaN   zQuery must be a matrixaxis)r   r   r   lenshaper   r   SMALLER_IS_BETTERr	   maxminr   sumappendr   )	r/   r0   r1   reversesimilaritiesmatrix
sim_matrixop
similaritys	            r   calculate_multi_distancerE   >   s    
 xx%))+P-PP+|!!"a'A)AA'.-2Q2QQG "L ('fmL
"RVV266"Zb"9:;
J'	(
 88L!!r!   c           	         dt         j                  dt         j                  dt         j                  fd}dt         j                  dt         j                  dt         j                  fd}t        j                  |       j	                         rJ d       |t
        j                  j                  t
        j                  j                  fv r| d d t        j                  f   } g }|t
        j                  j                  k(  r|n|}|D ]O  } |||       }t        t        j                  t        j                  |d                  }	|j                  |	       Q t        j                  |      S t        | ||      S )	Nmqr2   c                     t        j                  | |z
  t         j                        j                  dt         j                         S Ndtype   )r7   rL   )r   squarefloat32r=   rG   rH   s     r   	euclideanz0calculate_multi_distance_core.<locals>.euclideanV   s2    		!a%rzz266ARZZ6PPPr!   c                     t        j                  | |z
  t         j                        j                  dt         j                         S rJ   )r   absrO   r=   rP   s     r   	manhattanz0calculate_multi_distance_core.<locals>.manhattanY   s2    q1uBJJ/33"**3MMMr!   z!Query vector must not contain NaNr5   r6   )types
NumpyArrayr   r   r   r   DistanceEUCLID	MANHATTANnewaxisr   r=   r;   r>   r   rE   )
r/   r0   r1   rQ   rT   r@   	dist_funcrA   rB   rD   s
             r   calculate_multi_distance_corer\   Q   s<   
QU%% Q%*:*: Qu?O?O QNU%% N%*:*: Nu?O?O N xx%))+P-PP+//1J1JKK#ArzzM2$&!.&//2H2H!HIi	 	,F"6<8JrvvbffZb&ABCJ
+	, xx%%#L(MJJr!   queryc                 r   dt         t        j                     dt        j                  ffd} || j                        } || j                        }t        j                  ||kD  t        j                  d |D        |j                        t        j                  d |D        |j                              S )Nexamplesr2   c                 Z   t              }g }| D ]   }t        |      }|j                  |       " t        |      dk(  r4|j                  t        j                  |t        j
                                t        j                  |t        j                        j                  d      }|S )Nr   rK   r6   )	r8   r\   r>   r   fullinfr   rO   r;   )r_   matrix_countscoresexamplescorebest_scoresr1   r0   s         r   get_best_scoresz>calculate_multi_recommend_best_scores.<locals>.get_best_scoresm   s    8} *, 	!G1'8]SEMM% 	!
 v;!MM"'',89hhvRZZ8<<!<Dr!   c              3   2   K   | ]  }t        |        y wr.   r
   .0xis     r   	<genexpr>z8calculate_multi_recommend_best_scores.<locals>.<genexpr>   s     ;(,;   c              3   4   K   | ]  }t        |         y wr.   rj   rk   s     r   rn   z8calculate_multi_recommend_best_scores.<locals>.<genexpr>   s     <")"--<s   )	r   rU   rV   r   r   r   wherefromiterrL   )r]   r0   r1   rh   posnegs    ``   r   %calculate_multi_recommend_best_scoresru   j   s    $u'7'7"8 U=M=M   %..
)C
%..
)C 88c	
;s;SYYG
<<ciiH r!   r(   c           	      b   t        j                  t        |      t         j                        }| D ]u  }t	        |j
                  ||      }t	        |j                  ||      }t        j                  t        ||kD  ||k(        D cg c]  \  }}|rdn|rdnd c}}      }	||	z  }w |S c c}}w )NrK   rM   r   r5   )	r   zerosr8   int32r\   r   r   r   zip)
r(   r0   r1   overall_rankspairrs   rt   	is_biggeris_equal
pair_rankss
             r   calculate_multi_discovery_ranksr      s    
 HHS]"((;M $+DMM8]S+DMM8]SXX ,/sSy#*+E'Ix Ar9

 	#$ s   B+c                     t        | j                  ||      }t        | j                  ||      }t	        j
                  d |D        t        j                        }||z   S )Nc              3   2   K   | ]  }t        |        y wr.   rj   rk   s     r   rn   z3calculate_multi_discovery_scores.<locals>.<genexpr>   s     ?R	R	 ?ro   )r   r(   r\   r'   r   rr   rO   )r]   r0   r1   ranksdistances_to_targetsigmoided_distancess         r    calculate_multi_discovery_scoresr      sX     ,EMM8]SE 8hP]^++?+>? &&&r!   c                    t        j                  t        |      t         j                        }| j                  D ]  }t        |j                  ||      }t        |j                  ||      }||z
  t        z
  }t        j                  d t        j                  |d      D        t         j                        }||z  } |S )NrK   c              3   2   K   | ]  }t        |        y wr.   )r   rk   s     r   rn   z1calculate_multi_context_scores.<locals>.<genexpr>   s     D"\"Dro   g        )r   rw   r8   rO   r,   r\   r   r   r   rr   minimum)	r]   r0   r1   overall_scoresr{   rs   rt   
differencepair_scoress	            r   calculate_multi_context_scoresr      s     XXc(m2::>N## 	&+DMM8]S+DMM8]S3Y(
kkD

:s(CDbjj
 	+%	& r!   )typingr   r   numpyr   qdrant_client.httpr   qdrant_client.conversionsr   rU   qdrant_client.local.distancesr   r   r	   r
   r   r   r   r#   r&   r+   MultiQueryVectorrV   r   rW   rE   r\   ru   r   r   r   r    r!   r   <module>r      s   "  % ; Z Z Y YU U+ +
  """"5##$" ??" 	"&K""K5##$K ??K 	K2%)%*:*:%;LROO
>"#5##$ ?? 	.''*.u/?/?*@'QWQ`Q`'
'(,U-=-=(>OU
r!   