
    sOi6                     \   U 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  G d d      Z G d d	      Z G d
 d      Z G d d      Zeez  ez  Zeed<   de	j*                  dee	j*                     dej.                  de	j*                  fdZde	j*                  dee	j*                     dej.                  de	j*                  fdZdedee	j*                     dej.                  de	j*                  fdZdedee	j*                     dej.                  de	j*                  fdZdee   dee	j*                     dej.                  de	j*                  fdZdedee	j*                     dej.                  de	j*                  fdZdedee	j*                     dej.                  de	j*                  fdZy)    )Any	TypeAliasN)models)common_types)calculate_distancescaled_fast_sigmoidEPSILONfast_sigmoidc                   r    e Zd Z	 	 	 ddeeee         dz  deeee         dz  dej                  dz  fdZy)MultiRecoQueryNpositivenegativestrategyc                    |J d       || _         ||ng }||ng }|D ],  }t        j                  |      j                         s'J d        |D ],  }t        j                  |      j                         s'J d        |D cg c]  }t        j                  |       c}| _        |D cg c]  }t        j                  |       c}| _        y c c}w c c}w )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        j/volume1/homes/robertsu/coba/app/.venv/lib/python3.12/site-packages/qdrant_client/local/multi_distances.py__init__z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)NNN)__name__
__module____qualname__listfloatr   RecommendStrategyr        r   r   r      sc     483748	ZtDK()D0Z tDK()D0Z **T1	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 NaN)r   r   r   r   r   r   )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__0   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__8   s
    *r    N)r   r   r   r   r"   r   r   r    r   r*   r*   7   s    +d+;&< +r    r*   MultiQueryVectorquery_matrixmatricesdistance_typereturnc                    t        j                  |       j                         rJ d       t        | j                        dk(  sJ d       t        | ||      }|t        j                  j                  k(  r*t        j                  t        j                  |            }|S |t        j                  j                  k(  rt        j                  |      }|S )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/   r0   r1   	distancess       r   calculate_multi_distancer>   ?   s    
 xx%))+P-PP+|!!"a'A)AA'-lHmTI...GGBFF9-.	  
&//33	3FF9%	r    c           	          dt         j                  dt         j                  dt        dt         j                  fd}dt         j                  dt         j                  dt        dt         j                  fd}t        j                  |       j                         rJ d       g }|t        j                  j                  t        j                  j                  fv r9| d d t        j                  f   } |t        j                  j                  k(  r|n|}nt        }|D ]P  } || ||      }t        t        j                  t        j                  |d	                  }	|j                  |	       R t        j                   |      S )
Nqm_r2   c                     t        j                  || z
  t         j                        j                  dt         j                         S Ndtype)axisrF   )r   squarefloat32sumr@   rA   rB   s      r   	euclideanz0calculate_multi_distance_core.<locals>.euclideanU   s2    		!a%rzz266Bbjj6QQQr    c                     t        j                  || z
  t         j                        j                  dt         j                         S rD   )r   r;   rJ   rK   rL   s      r   	manhattanz0calculate_multi_distance_core.<locals>.manhattanX   s2    q1uBJJ/332::3NNNr    z!Query vector must not contain NaNrG   rH   )types
NumpyArrayr   r   r   r   r   r8   r9   r<   newaxisr   r   rK   maxappendr   )
r/   r0   r1   rM   rO   similarities	dist_funcmatrix
sim_matrix
similaritys
             r   r7   r7   P   sA   
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	&	|V]C
266"&&""=>?
J'  88L!!r    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   rE   rP   )	r5   r7   rU   r   fullinfr   rJ   rT   )r]   matrix_countscoresexamplescorebest_scoresr1   r0   s         r   get_best_scoresz>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   2   K   | ]  }t        |        y wr-   r   .0xis     r   	<genexpr>z8calculate_multi_recommend_best_scores.<locals>.<genexpr>   s     ;s(,s   c              3   4   K   | ]  }t        |         y wr-   ri   rj   s     r   rm   z8calculate_multi_recommend_best_scores.<locals>.<genexpr>   s     <")"--s   )	r   rQ   rR   r   r   r   wherefromiterrF   )r[   r0   r1   rg   posnegs    ``   r   %calculate_multi_recommend_best_scoresrt   m   s    $u'7'7"8 U=M=M   %..
)C
%..
)C 88c	
;s;SYYG
<<ciiH r    c                     dt         t        j                     dt        j                  ffd} || j                        } || j                        }||z
  S )Nr]   r2   c                 :   t              }g }| D ]   }t        |      }|j                  |       " t        |      dk(  r$|j                  t        j                  |             t        j
                  |t        j                        j                  d      }|S r_   )r5   r7   rU   r   zerosr   rJ   rK   )r]   rb   rc   rd   re   
sum_scoresr1   r0   s         r   get_sum_scoresz<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   rQ   rR   r   r   )r[   r0   r1   ry   rr   rs   s    ``   r   $calculate_multi_recommend_sum_scoresrz      sO    e&6&6!7 E<L<L  
(C

(C9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 )NrE      r   rG   )	r   rw   r5   int32r7   r   r   r   zip)
r'   r0   r1   overall_rankspairrr   rs   	is_biggeris_equal
pair_rankss
             r   calculate_multi_discovery_ranksr      s    
 ')hhs8}BHH&MM+DMM8]S+DMM8]SXX ,/sSy#*+E+E'Ix Ar9+E

 	#  s   B+c                     t        | j                  ||      }t        | j                  ||      }t	        j
                  d |D        t        j                        }||z   S )Nc              3   2   K   | ]  }t        |        y wr-   ri   rj   s     r   rm   z3calculate_multi_discovery_scores.<locals>.<genexpr>   s     ?+>R	R	 +>rn   )r   r'   r7   r&   r   rq   rJ   )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 )NrE   c              3   2   K   | ]  }t        |        y wr-   )r
   rj   s     r   rm   z1calculate_multi_context_scores.<locals>.<genexpr>   s     D(C"\"(Crn   g        )r   rw   r5   rJ   r+   r7   r   r   r	   rq   minimum)	r[   r0   r1   overall_scoresr   rr   rs   
differencepair_scoress	            r   calculate_multi_context_scoresr      s     (*xxHRZZ'PN##+DMM8]S+DMM8]S3Y(
kkD

:s(CDbjj
 	+% $ r    )typingr   r   numpyr   qdrant_client.httpr   qdrant_client.conversionsr   rQ   qdrant_client.local.distancesr   r   r	   r
   r   r"   r%   r*   r.   __annotations__rR   r   r8   r>   r7   rt   rz   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    