
    <i6                     j   % S SK JrJr  S SKrS SKJr  S SKJr	  S SK
JrJrJrJr   " S S5      r " S S	5      r " S
 S5      r " S S5      r\\-  \-  r\\S'   S\	R*                  S\\	R*                     S\R.                  S\	R*                  4S jrS\	R*                  S\\	R*                     S\R.                  S\	R*                  4S jrS\S\\	R*                     S\R.                  S\	R*                  4S jrS\S\\	R*                     S\R.                  S\	R*                  4S jrS\\   S\\	R*                     S\R.                  S\	R*                  4S jrS\S\\	R*                     S\R.                  S\	R*                  4S jrS\S\\	R*                     S\R.                  S\	R*                  4S jrg)    )Any	TypeAliasN)models)common_types)calculate_distancescaled_fast_sigmoidEPSILONfast_sigmoidc                   ~    \ rS rSr   SS\\\\         S-  S\\\\         S-  S\R                  S-  4S jjrSr	g)	MultiRecoQuery   Npositivenegativestrategyc                    Uc   S5       eX0l         Ub  UO/ nUb  UO/ nU H3  n[        R                  " U5      R                  5       (       d  M.   S5       e   U H3  n[        R                  " U5      R                  5       (       d  M.   S5       e   U Vs/ s H  n[        R                  " U5      PM     snU l        U Vs/ s H  n[        R                  " U5      PM     snU l        g s  snf s  snf )Nz#Recommend strategy must be providedz%Positive vectors must not contain NaNz%Negative vectors must not contain NaN)r   npisnananyarrayr   r   )selfr   r   r   vectors        ]/home/james-whalen/.local/lib/python3.13/site-packages/qdrant_client/local/multi_distances.py__init__MultiRecoQuery.__init__   s     #J%JJ# '38'38Fxx'++--V/VV- Fxx'++--V/VV-  QY0YPXf&1APX0YPX0YPXf&1APX0Y 1Z0Ys    C* C/)r   r   r   )NNN)
__name__
__module____qualname____firstlineno__listfloatr   RecommendStrategyr   __static_attributes__     r   r   r      si     483748	ZtDK()D0Z tDK()D0Z **T1	Z Zr$   r   c                   >    \ rS rSrS\\\      S\\\      4S jrSrg)MultiContextPair&   r   r   c                 X   [         R                  " U5      U l        [         R                  " U5      U l        [         R                  " U R                  5      R                  5       (       a   S5       e[         R                  " U R                  5      R                  5       (       a   S5       eg )Nz$Positive vector must not contain NaNz$Negative vector must not contain NaN)r   r   r   r   r   r   )r   r   r   s      r   r   MultiContextPair.__init__'   su    *,((8*<*,((8*<88DMM*..00X2XX088DMM*..00X2XX00r$   )r   r   N)r   r   r   r   r   r    r   r"   r#   r$   r   r&   r&   &   s*    Yd5k!2 Yd4;>O Yr$   r&   c                   8    \ rS rSrS\\\      S\\   4S jrSrg)MultiDiscoveryQuery/   targetcontextc                     [         R                  " U5      U l        X l        [         R                  " U R                  5      R                  5       (       a   S5       eg )Nz"Target vector must not contain NaN)r   r   r-   r.   r   r   )r   r-   r.   s      r   r   MultiDiscoveryQuery.__init__0   sB    (*(888DKK(,,..T0TT..r$   )r.   r-   N)	r   r   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                   (    \ rS rSrS\\   4S jrSrg)MultiContextQuery7   context_pairsc                     Xl         g Nr4   )r   r4   s     r   r   MultiContextQuery.__init__8   s    *r$   r7   N)r   r   r   r   r   r&   r   r"   r#   r$   r   r2   r2   7   s    +d+;&< +r$   r2   MultiQueryVectorquery_matrixmatricesdistance_typereturnc                    [         R                  " U 5      R                  5       (       a   S5       e[        U R                  5      S:X  d   S5       e[        XU5      nU[        R                  R                  :X  a,  [         R                  " [         R                  " U5      5      nU$ U[        R                  R                  :X  a  [         R                  " U5      nU$ )Nz!Query matrix must not contain NaN   zQuery must be a matrix)r   r   r   lenshapecalculate_multi_distance_corer   DistanceEUCLIDsqrtabs	MANHATTAN)r:   r;   r<   	distancess       r   calculate_multi_distancerI   ?   s    
 xx%))++P-PP+|!!"a'A)AA'-lmTI...GGBFF9-.	  
&//33	3FF9%	r$   c           
         S[         R                  S[         R                  S[        S[         R                  4S jnS[         R                  S[         R                  S[        S[         R                  4S jn[        R                  " U 5      R                  5       (       a   S5       e/ nU[        R                  R                  [        R                  R                  4;   a:  U S S 2[        R                  4   n U[        R                  R                  :X  a  UOUnO[        nU HO  nU" XU5      n[        [        R                  " [        R                  " USS	95      5      n	UR                  U	5        MQ     [        R                   " U5      $ )
Nqm_r=   c                     [         R                  " X-
  [         R                  S9R                  S[         R                  S9* $ Ndtype)axisrQ   )r   squarefloat32sumrK   rL   rM   s      r   	euclidean0calculate_multi_distance_core.<locals>.euclideanU   s0    		!%rzz266Bbjj6QQQr$   c                     [         R                  " X-
  [         R                  S9R                  S[         R                  S9* $ rO   )r   rF   rU   rV   rW   s      r   	manhattan0calculate_multi_distance_core.<locals>.manhattanX   s0    quBJJ/332::3NNNr$   z!Query vector must not contain NaNrR   rS   )types
NumpyArrayr   r   r   r   r   rC   rD   rG   newaxisr   r    rV   maxappendr   )
r:   r;   r<   rX   r[   similarities	dist_funcmatrix
sim_matrix
similaritys
             r   rB   rB   P   sB   
RU%% R%*:*: R RHXHX ROU%% O%*:*: O OHXHX O xx%))++P-PP+ "L //1J1JKK#ArzzM2!.&//2H2H!HIi	&	|]C
266"&&""=>?
J'  88L!!r$   queryc                 z  ^^ S[         [        R                     S[        R                  4UU4S jjnU" U R                  5      nU" U R                  5      n[
        R                  " XE:  [
        R                  " S U 5       UR                  5      [
        R                  " S U 5       UR                  5      5      $ )Nexamplesr=   c                 X  > [        T5      n/ nU  H!  n[        UTT5      nUR                  U5        M#     [        U5      S:X  a5  UR                  [        R                  " U[        R
                  * 5      5        [        R                  " U[        R                  S9R                  SS9nU$ Nr   rP   r]   )	r@   rB   rb   r   fullinfr   rU   ra   )rj   matrix_countscoresexamplescorebest_scoresr<   r;   s         r   get_best_scores>calculate_multi_recommend_best_scores.<locals>.get_best_scoresp   s    8} *,G1'8]SEMM%   
 v;!MM"'',89hhvRZZ8<<!<Dr$   c              3   8   #    U  H  n[        U5      v   M     g 7fr6   r   .0xis     r   	<genexpr>8calculate_multi_recommend_best_scores.<locals>.<genexpr>   s     ;s(,,s   c              3   :   #    U  H  n[        U5      * v   M     g 7fr6   rw   rx   s     r   r{   r|      s     <")"--s   )	r   r^   r_   r   r   r   wherefromiterrQ   )rh   r;   r<   rt   posnegs    ``   r   %calculate_multi_recommend_best_scoresr   m   s    $u'7'7"8 U=M=M    %..
)C
%..
)C 88	
;s;SYYG
<<ciiH r$   c                    ^^ S[         [        R                     S[        R                  4UU4S jjnU" U R                  5      nU" U R                  5      nXE-
  $ )Nrj   r=   c                 8  > [        T5      n/ nU  H!  n[        UTT5      nUR                  U5        M#     [        U5      S:X  a%  UR                  [        R                  " U5      5        [        R
                  " U[        R                  S9R                  SS9nU$ rl   )r@   rB   rb   r   zerosr   rU   rV   )rj   ro   rp   rq   rr   
sum_scoresr<   r;   s         r   get_sum_scores<calculate_multi_recommend_sum_scores.<locals>.get_sum_scores   s    8})+G1'8]SEMM%    v;!MM"((<01XXfBJJ7;;;C
r$   )r   r^   r_   r   r   )rh   r;   r<   r   r   r   s    ``   r   $calculate_multi_recommend_sum_scoresr      sR    e&6&6!7 E<L<L   
(C

(C9r$   r.   c           	      r   [         R                  " [        U5      [         R                  S9nU  H~  n[	        UR
                  X5      n[	        UR                  X5      n[         R                  " [        XV:  XV:H  5       VVs/ s H  u  pxU(       a  SO
U(       a  SOSPM     snn5      n	X9-  nM     U$ s  snnf )NrP      r   rR   )	r   r   r@   int32rB   r   r   r   zip)
r.   r;   r<   overall_rankspairr   r   	is_biggeris_equal
pair_rankss
             r   calculate_multi_discovery_ranksr      s    
 ')hhs8}BHH&MM+DMM8S+DMM8SXX ,/sy#*+E+E'I Ar9+E

 	#  s    B3c                     [        U R                  X5      n[        U R                  X5      n[        R
                  " S U 5       [        R                  5      nX5-   $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr6   rw   rx   s     r   r{   3calculate_multi_discovery_scores.<locals>.<genexpr>   s     ?+>R	R	 	 +>r}   )r   r.   rB   r-   r   r   rU   )rh   r;   r<   ranksdistances_to_targetsigmoided_distancess         r    calculate_multi_discovery_scoresr      sP     ,EMM8SE 8h^++?+>? &&r$   c                 |   [         R                  " [        U5      [         R                  S9nU R                   H  n[        UR                  X5      n[        UR                  X5      nXV-
  [        -
  n[         R                  " S [         R                  " US5       5       [         R                  5      nX8-  nM     U$ )NrP   c              3   8   #    U  H  n[        U5      v   M     g 7fr6   )r
   rx   s     r   r{   1calculate_multi_context_scores.<locals>.<genexpr>   s     D(C"\"(Cr}   g        )r   r   r@   rU   r4   rB   r   r   r	   r   minimum)	rh   r;   r<   overall_scoresr   r   r   
differencepair_scoress	            r   calculate_multi_context_scoresr      s     (*xxHRZZ'PN##+DMM8S+DMM8SY(
kkD

:s(CDbjj
 	% $ r$   )typingr   r   numpyr   qdrant_client.httpr   qdrant_client.conversionsr   r^   qdrant_client.local.distancesr   r   r	   r
   r   r&   r+   r2   r9   __annotations__r_   r   rC   rI   rB   r   r   r   r   r   r#   r$   r   <module>r      s   ! !  % ; Z Z.Y YU U+ +
 24EEV ) V""5##$ ?? 	"""""5##$" ??" 	":%)%*:*:%;LROO
>%)%*:*:%;LROO
."#5##$ ?? 	.''*.u/?/?*@'QWQ`Q`'
'(,U-=-=(>OU
r$   