
    %Gg!                     &   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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      fdZdedgdf   dd fdZy)
SparseRecoQueryNpositivenegativec                     ||ng }||ng }t        |      D ]  \  }}t        |       t        |      ||<     t        |      D ]  \  }}t        |       t        |      ||<     || _        || _        y N)	enumerater   r   r   r   )selfr   r   ivectors        /home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/qdrant_client/local/sparse_distances.py__init__zSparseRecoQuery.__init__   s    
  (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}      S c c}w c c}w )Nr   r   )r   r   r   )r   r   r   s      r   transform_sparsez SparseRecoQuery.transform_sparse$   sC     04>fc&k>04>fc&k>
 	
>>s
   A
A
)NN)	__name__
__module____qualname__r   listr   r   r   r!    r   r   r   r      sW     2615!4-.! 4-.!&
^,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 r   )r   r   r   r   )r   r   r   s      r   r   zSparseContextPair.__init__.   s*    x(x(&8&B&8&Br   N)r"   r#   r$   r   r   r&   r   r   r(   r(   -   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__6   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_sparse;   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+   5   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   r4   )r   r4   s     r   r   zSparseContextQuery.__init__G   s
    *r   r   r   r   c                     t        | j                  D cg c].  }t         ||j                         ||j                              0 c}      S c c}w )Nr6   )r3   r4   r(   r   r   r0   s      r   r!   z#SparseContextQuery.transform_sparseJ   sM     " !.. "#dmm"4c$--6HI
 	
s   3AN)r"   r#   r$   r%   r(   r   r   r!   r&   r   r   r3   r3   F   s6    +d+<&= +
^,n<=
	
r   r3   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)r8   r9   scoresr   scores        r   calculate_distance_sparserD   ]   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valuesr?   r@   )rE   rF   resultr   joverlaps         r   r=   r=   o   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;   rJ   r   )	r?   zerosrK   int32rD   r   r   rA   zip)	r-   r9   overall_ranksr1   posneg	is_biggeris_equal
pair_rankss	            r    calculate_sparse_discovery_ranksr\      s     HHS\:M $'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-   rD   r,   r?   fromiterr@   )r8   r9   ranksdistances_to_targetsigmoided_distancess        r   !calculate_sparse_discovery_scoresri      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
   r`   s     r   rc   z2calculate_sparse_context_scores.<locals>.<genexpr>   s     D"\"Drd   rH   )r?   rS   rK   r@   r4   rD   r   r   r	   re   minimum)r8   r9   overall_scoresr1   rW   rX   
differencepair_scoress           r   calculate_sparse_context_scoresrp      s     XXc'l"**=N## 	&'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)	rK   rD   r>   r?   fullinfrA   r@   max)rr   vector_countrB   examplerC   best_scoresr9   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   r_   r`   s     r   rc   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>   s     ;(,;rd   c              3   4   K   | ]  }t        |         y wr   r_   r`   s     r   rc   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>   s     <")"--<s   )
r%   r   types
NumpyArrayr   r   r?   wherere   r<   )r8   r9   r{   rW   rX   s    `   r   &calculate_sparse_recommend_best_scoresr      s    $|"4 9I9I   %..
)C
%..
)C 88c	
;s;SYYG
<<ciiH 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 )NrI   rJ   rH   )r   rK   rL   r>   rM   )rE   rF   r   rN   r   rO   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   rJ   c                     | |z   S r   r&   )v1v2s     r   <lambda>zsparse_avg.<locals>.<lambda>  s
    "r' r   )r   rK   r   r?   dividerM   tolist)r9   rN   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&   )rW   rX   s     r   r   z1merge_positive_and_negative_avg.<locals>.<lambda>  s    #)c/ r   )r   r    s     r   merge_positive_and_negative_avgr     s     Xx1QRRr   )&typingr   r   r   r   numpyr?   qdrant_client.conversionsr   r~   qdrant_client.http.modelsr   qdrant_client.local.distancesr	   r
   r   qdrant_client.local.sparser   r   r   r   r   r(   r+   r3   SparseQueryVectorr%   r   rD   r@   r=   r\   ri   rp   r   r   r   r   r&   r   r   <module>r      s   6 6  ; 2 T T 
 
:C C
 
"
 
  .."&|"4.
.$ | QSQ[Q[H\ 2#$, ,''*.|*<'
'(,\(:
$%),%7
@| l  Ua @. < SS&2SSr   