
    >'hJ%                     T   d dl mZmZ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 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eeef   Zdedee   de	j6                  fdZdededeej:                     fdZdee   dee   de	j6                  fdZdedee   de	j6                  fdZ dedee   de	j6                  fdZ!dedee   de	j6                  fdZ"dedee   de	j6                  fdZ#dedededefdZ$dee   defdZ%ded edefd!Z&y)"    )CallableOptionalSequenceUnionN)common_types)SparseVector)EPSILONfast_sigmoidscaled_fast_sigmoid)empty_sparse_vector	is_sortedsort_sparse_vectorvalidate_sparse_vectorc                   v    e Zd Z	 	 	 d
deee      deee      deej                     fdZde	dgdf   dd fd	Z
y)SparseRecoQueryNpositivenegativestrategyc                    |J d       || _         ||ng }||ng }t        |      D ]  \  }}t        |       t        |      ||<     t        |      D ]  \  }}t        |       t        |      ||<     || _        || _        y )Nz#Recommend strategy must be provided)r   	enumerater   r   r   r   )selfr   r   r   ivectors         k/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/qdrant_client/local/sparse_distances.py__init__zSparseRecoQuery.__init__   s     #J%JJ# '38'38"8, 	5IAv"6*,V4HQK	5 #8, 	5IAv"6*,V4HQK	5 !     foor   returnc           	          t        | j                  D cg c]
  } ||       c}| j                  D cg c]
  } ||       c}| j                        S c c}w c c}w )N)r   r   r   )r   r   r   r   )r   r   r   s      r   transform_sparsez SparseRecoQuery.transform_sparse)   sJ     04>fc&k>04>fc&k>]]
 	
>>s
   AA
)NNN)__name__
__module____qualname__r   listr   typesRecommendStrategyr   r   r     r   r   r   r      so     26156:	!4-.! 4-.! 5223	!0
^,n<=
	
r   r   c                       e Zd ZdedefdZy)SparseContextPairr   r   c                 p    t        |       t        |       t        |      | _        t        |      | _        y N)r   r   r   r   )r   r   r   s      r   r   zSparseContextPair.__init__4   s*    x(x(&8&B&8&Br   N)r!   r"   r#   r   r   r'   r   r   r)   r)   3   s    C C Cr   r)   c                   >    e Zd Zdedee   fdZdedgdf   dd fdZy)	SparseDiscoveryQuerytargetcontextc                 H    t        |       t        |      | _        || _        y r+   )r   r   r.   r/   )r   r.   r/   s      r   r   zSparseDiscoveryQuery.__init__<   s    v&$6v$>r   r   r   r   c                     t         || j                        | j                  D cg c].  }t         ||j                         ||j
                              0 c}      S c c}w )N)r.   r/   )r-   r.   r/   r)   r   r   r   r   pairs      r   r    z%SparseDiscoveryQuery.transform_sparseA   sU     $t{{#VZVbVbNR!#dmm"4c$--6HI
 	
s   3A 
N)	r!   r"   r#   r   r$   r)   r   r   r    r'   r   r   r-   r-   ;   s=    | d;L6M 

^,n<=
	
r   r-   c                   :    e Zd Zdee   fdZdedgdf   dd fdZy)SparseContextQuerycontext_pairsc                     || _         y r+   r6   )r   r6   s     r   r   zSparseContextQuery.__init__M   s
    *r   r   r   r   c                     t        | j                  D cg c].  }t         ||j                         ||j                              0 c}      S c c}w )Nr8   )r5   r6   r)   r   r   r2   s      r   r    z#SparseContextQuery.transform_sparseP   sM     " !.. "#dmm"4c$--6HI
 	
s   3AN)r!   r"   r#   r$   r)   r   r   r    r'   r   r   r5   r5   L   s6    +d+<&= +
^,n<=
	
r   r5   queryvectorsr   c                     g }|D ]F  }t        | |      }||j                  |       #|j                  t        j                  d             H t        j                  |t        j                        S )Nz-infdtype)sparse_dot_productappendnpfloat32array)r:   r;   scoresr   scores        r   calculate_distance_sparserF   c   sd     F ."5&1MM%  MM"**V,-. 88F"**--r   vector1vector2c                 >   d}d\  }}d}t        |       sJ d       t        |      sJ d       |t        | j                        k  r|t        |j                        k  r| j                  |   |j                  |   k(  r/d}|| j                  |   |j                  |   z  z  }|dz  }|dz  }n*| j                  |   |j                  |   k  r|dz  }n|dz  }|t        | j                        k  r|t        |j                        k  r|rt	        j
                  |      S y )N        r   r   Fz"Query sparse vector must be sortedz,Sparse vector to compare with must be sortedT   )r   lenindicesvaluesrA   rB   )rG   rH   resultr   joverlaps         r   r?   r?   u   s   FDAqGWCCCWMMM
c'//"
"q3w+?'???1!33GgnnQ''..*;;;FFAFA__Q'//!"44FAFA c'//"
"q3w+?'? zz&!!r   r/   c           	      ^   t        j                  t        |      t         j                        }| D ]s  }t	        |j
                  |      }t	        |j                  |      }t        j                  t        ||kD  ||k(        D cg c]  \  }}|rdn|rdnd c}}      }||z  }u |S c c}}w )Nr=   rL   r   )	rA   zerosrM   int32rF   r   r   rC   zip)	r/   r;   overall_ranksr3   posneg	is_biggeris_equal
pair_rankss	            r    calculate_sparse_discovery_ranksr^      s     ')hhs7|288&LM $'w?'w?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+   r   .0xis     r   	<genexpr>z4calculate_sparse_discovery_scores.<locals>.<genexpr>   s     ?R	R	 ?   )r^   r/   rF   r.   rA   fromiterrB   )r:   r;   ranksdistances_to_targetsigmoided_distancess        r   !calculate_sparse_discovery_scoresrk      sS     -U]]GDE 4ELL'J++?+>? &&&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 )Nr=   c              3   2   K   | ]  }t        |        y wr+   )r
   rb   s     r   re   z2calculate_sparse_context_scores.<locals>.<genexpr>   s     D"\"Drf   rJ   )rA   rU   rM   rB   r6   rF   r   r   r	   rg   minimum)r:   r;   overall_scoresr3   rY   rZ   
differencepair_scoress           r   calculate_sparse_context_scoresrr      s     (*xxGBJJ'ON## 	&'w?'w?3Y(
kkD

:s(CDbjj
 	+%	& r   c                 Z   dt         t           dt        j                  ffd} || j                        } || j
                        }t        j                  ||kD  t        j                  d |D        |j                        t        j                  d |D        |j                              S )Nexamplesr   c                 X   t              }g }| D ]  }t        |      }|j                  |       ! t        |      dk(  r4|j                  t        j                  |t        j
                                t        j                  |t        j                        j                  d      }|S Nr   r=   )axis)	rM   rF   r@   rA   fullinfrC   rB   max)rt   vector_countrD   examplerE   best_scoresr;   s         r   get_best_scoresz?calculate_sparse_recommend_best_scores.<locals>.get_best_scores   s    7| *, 	!G-gw?EMM% 	!
 v;!MM"'',89hhvRZZ8<<!<Dr   c              3   2   K   | ]  }t        |        y wr+   ra   rb   s     r   re   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>   s     ;(,;rf   c              3   4   K   | ]  }t        |         y wr+   ra   rb   s     r   re   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>   s     <")"--<s   )
r$   r   r%   
NumpyArrayr   r   rA   whererg   r>   )r:   r;   r~   rY   rZ   s    `   r   &calculate_sparse_recommend_best_scoresr      s    $|"4 9I9I   %..
)C
%..
)C 88c	
;s;SYYG
<<ciiH r   c                     dt         t           dt        j                  ffd} || j                        } || j
                        }||z
  S )Nrt   r   c                 8   t              }g }| D ]  }t        |      }|j                  |       ! t        |      dk(  r$|j                  t        j                  |             t        j
                  |t        j                        j                  d      }|S rv   )rM   rF   r@   rA   rU   rC   rB   sum)rt   r{   rD   r|   rE   
sum_scoresr;   s         r   get_sum_scoresz=calculate_sparse_recommend_sum_scores.<locals>.get_sum_scores   s    7|)+ 	!G-gw?EMM% 	! v;!MM"((<01XXfBJJ7;;;C
r   )r$   r   r%   r   r   r   )r:   r;   r   rY   rZ   s    `   r   %calculate_sparse_recommend_sum_scoresr      sI    l!3 8H8H  
(C

(C9r   opc                    t               }d\  }}|t        | j                        k  r|t        |j                        k  r| j                  |   |j                  |   k(  ro|j                  j                  | j                  |          |j                  j                   || j                  |   |j                  |                |dz  }|dz  }n| j                  |   |j                  |   k  r]|j                  j                  | j                  |          |j                  j                   || j                  |   d             |dz  }n\|j                  j                  |j                  |          |j                  j                   |d|j                  |                |dz  }|t        | j                        k  r|t        |j                        k  r|t        | j                        k  ru|j                  j                  | j                  |          |j                  j                   || j                  |   d             |dz  }|t        | j                        k  ru|t        |j                        k  ru|j                  j                  |j                  |          |j                  j                   |d|j                  |                |dz  }|t        |j                        k  ru|S )NrK   rL   rJ   )r   rM   rN   r@   rO   )rG   rH   r   rP   r   rQ   s         r   combine_aggregater      sN    "FDAq
c'//"
"q3w+?'???1!33NN!!'//!"45MM  GNN1$5w~~a7H!IJFAFA__Q'//!"44NN!!'//!"45MM  GNN1$5s!;<FANN!!'//!"45MM  C):!;<FA c'//"
"q3w+?'? c'//"
"gooa01Rq 1378	Q c'//"
"
 c'//"
"gooa01RW^^A%678	Q c'//"
"
 Mr   c                     t               }t        |       dk(  r|S d}| D ]  }|dz  }t        ||d       } t        j                  |j
                  |      j                         |_        |S )Nr   rL   c                     | |z   S r+   r'   )v1v2s     r   <lambda>zsparse_avg.<locals>.<lambda>$  s
    "r' r   )r   rM   r   rA   dividerO   tolist)r;   rP   sparse_countr   s       r   
sparse_avgr     sp     "F
7|qL K"663IJK IIfmm\:AACFMMr   r   r   c                     t        | |d       S )Nc                     | | z   |z
  S r+   r'   )rY   rZ   s     r   r   z1merge_positive_and_negative_avg.<locals>.<lambda>.  s    #)c/ r   )r   )r   r   s     r   merge_positive_and_negative_avgr   +  s     Xx1QRRr   )'typingr   r   r   r   numpyrA   qdrant_client.conversionsr   r%   qdrant_client.http.modelsr   qdrant_client.local.distancesr	   r
   r   qdrant_client.local.sparser   r   r   r   r   r)   r-   r5   SparseQueryVectorr$   r   rF   rB   r?   r^   rk   rr   r   r   r   r   r   r'   r   r   <module>r      s   6 6  ; 2 T T  
  
FC C
 
"
 
  .."&|"4.
.$ | QSQ[Q[H\ 2#$, ,''*.|*<'
'(,\(:
$%),%7
>%),%7
0| l  Ua @. < SS&2SSr   