
    Ng!                     >   d dl mZ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
j        fdZdededeej                 fdZdee         dee         de
j        fdZdedee         de
j        fdZ dedee         de
j        fdZ!dedee         de
j        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%dS )!    )CallableList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dS )
SparseRecoQueryNpositivenegativec                    ||ng }||ng }t          |          D ]&\  }}t          |           t          |          ||<   't          |          D ]&\  }}t          |           t          |          ||<   '|| _        || _        d S N)	enumerater   r   r   r   )selfr   r   ivectors        `/var/www/html/ai-engine/env/lib/python3.11/site-packages/qdrant_client/local/sparse_distances.py__init__zSparseRecoQuery.__init__   s    
  (388'388"8,, 	5 	5IAv"6***,V44HQKK"8,, 	5 	5IAv"6***,V44HQKK      foor	   returnc                 j    t          fd| j        D             fd| j        D                       S )Nc                 &    g | ]} |          S  r"   .0r   r   s     r   
<listcomp>z4SparseRecoQuery.transform_sparse.<locals>.<listcomp>(   !    >>>fcc&kk>>>r   c                 &    g | ]} |          S r"   r"   r#   s     r   r%   z4SparseRecoQuery.transform_sparse.<locals>.<listcomp>)   r&   r   r   r   )r   r   r   r   r   s    `r   transform_sparsez SparseRecoQuery.transform_sparse$   sN     >>>>>>>>>>>>>>
 
 
 	
r   )NN)	__name__
__module____qualname__r   r   r	   r   r   r*   r"   r   r   r   r      s         2615! !4-.! 4-.! ! ! !&
^,n<=
	
 
 
 
 
 
r   r   c                       e Zd ZdedefdZdS )SparseContextPairr   r   c                     t          |           t          |           t          |          | _        t          |          | _        d S r   )r   r   r   r   )r   r   r   s      r   r   zSparseContextPair.__init__.   s@    x(((x(((&8&B&B&8&B&Br   N)r+   r,   r-   r	   r   r"   r   r   r/   r/   -   s>        C C C C C C C Cr   r/   c                   L    e Zd Zdedee         fdZdedgdf         dd fdZdS )	SparseDiscoveryQuerytargetcontextc                 Z    t          |           t          |          | _        || _        d S r   )r   r   r3   r4   )r   r3   r4   s      r   r   zSparseDiscoveryQuery.__init__6   s*    v&&&$6v$>$>r   r   r	   r   c                 d    t           | j                  fd| j        D                       S )Nc                 h    g | ].}t           |j                   |j                            /S r"   r/   r   r   r$   pairr   s     r   r%   z9SparseDiscoveryQuery.transform_sparse.<locals>.<listcomp>@   sI       NR!##dm"4"4cc$-6H6HII  r   )r3   r4   )r2   r3   r4   r)   s    `r   r*   z%SparseDiscoveryQuery.transform_sparse;   sT     $3t{##   VZVb  
 
 
 	
r   N)	r+   r,   r-   r	   r   r/   r   r   r*   r"   r   r   r2   r2   5   sm        | d;L6M    

^,n<=
	
 
 
 
 
 
r   r2   c                   H    e Zd Zdee         fdZdedgdf         dd fdZdS )SparseContextQuerycontext_pairsc                     || _         d S r   r=   )r   r=   s     r   r   zSparseContextQuery.__init__G   s    *r   r   r	   r   c                 F    t          fd| j        D                       S )Nc                 h    g | ].}t           |j                   |j                            /S r"   r8   r9   s     r   r%   z7SparseContextQuery.transform_sparse.<locals>.<listcomp>N   sK        "##dm"4"4cc$-6H6HII  r   r?   )r<   r=   r)   s    `r   r*   z#SparseContextQuery.transform_sparseJ   sE     "    .  
 
 
 	
r   N)r+   r,   r-   r   r/   r   r   r*   r"   r   r   r<   r<   F   sf        +d+<&= + + + +
^,n<=
	
 
 
 
 
 
r   r<   queryvectorsr   c                     g }|D ]Q}t          | |          }||                    |           *|                    t          j        d                     Rt          j        |t          j                  S )Nz-infdtype)sparse_dot_productappendnpfloat32array)rB   rC   scoresr   scores        r   calculate_distance_sparserN   ]   sz     F . ."5&11MM%     MM"*V,,----8F"*----r   vector1vector2c                 D   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t	          j        |          S d S )N        r   r   Fz"Query sparse vector must be sortedz,Sparse vector to compare with must be sortedT   )r   lenindicesvaluesrI   rJ   )rO   rP   resultr   joverlaps         r   rG   rG   o   s>   FDAqGWCCCCCCWMMMMMM
c'/""
"
"q3w+?+?'?'??1!333GgnQ''.*;;;FFAFAA_Q'/!"444FAAFA c'/""
"
"q3w+?+?'?'?  z&!!!tr   r4   c           	      0   t          j        t          |          t           j                  }| D ]e}t	          |j        |          }t	          |j        |          }t          j        d t          ||k    ||k              D                       }||z  }f|S )NrE   c                 (    g | ]\  }}|rd n|rdndS )rT   r   r"   )r$   	is_biggeris_equals      r   r%   z4calculate_sparse_discovery_ranks.<locals>.<listcomp>   s>       'Ix 9$9AAr  r   )	rI   zerosrU   int32rN   r   r   rK   zip)r4   rC   overall_ranksr:   posneg
pair_rankss          r    calculate_sparse_discovery_ranksrg      s     HS\\:::M $ $'w??'w??X +.sSy#*+E+E  
 

 	#r   c                     t          | j        |          }t          | j        |          }t	          j        d |D             t          j                  }||z   S )Nc              3   4   K   | ]}t          |          V  d S r   r   r$   xis     r   	<genexpr>z4calculate_sparse_discovery_scores.<locals>.<genexpr>   s+      ??R	R	 	 ??????r   )rg   r4   rN   r3   rI   fromiterrJ   )rB   rC   ranksdistances_to_targetsigmoided_distancess        r   !calculate_sparse_discovery_scoresrr      s_     -U]GDDE 4EL'JJ+??+>???  &&&r   c                 d   t          j        t          |          t           j                  }| j        D ]z}t          |j        |          }t          |j        |          }||z
  t          z
  }t          j	        d t          j
        |d          D             t           j                  }||z  }{|S )NrE   c              3   4   K   | ]}t          |          V  d S r   )r   rk   s     r   rm   z2calculate_sparse_context_scores.<locals>.<genexpr>   s*      DD"\"DDDDDDr   rR   )rI   r`   rU   rJ   r=   rN   r   r   r
   rn   minimum)rB   rC   overall_scoresr:   rd   re   
differencepair_scoress           r   calculate_sparse_context_scoresry      s     Xc'll"*===N# 	& 	&'w??'w??3Y(
kDD
:s(C(CDDDbj
 
 	+%r   c                 H   dt           t                   dt          j        ffd} || j                  } || j                  }t          j        ||k    t          j        d |D             |j	                  t          j        d |D             |j	                            S )Nexamplesr   c                 r   t                    }g }| D ]'}t          |          }|                    |           (t          |          dk    r3|                    t          j        |t          j                              t          j        |t          j                                      d          }|S )Nr   rE   )axis)	rU   rN   rH   rI   fullinfrK   rJ   max)r{   vector_countrL   examplerM   best_scoresrC   s         r   get_best_scoresz?calculate_sparse_recommend_best_scores.<locals>.get_best_scores   s    7|| *, 	! 	!G-gw??EMM%     v;;!MM"',88999hvRZ888<<!<DDr   c              3   4   K   | ]}t          |          V  d S r   rj   rk   s     r   rm   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>   s+      ;;(,,;;;;;;r   c              3   6   K   | ]}t          |           V  d S r   rj   rk   s     r   rm   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>   s.      <<")"---<<<<<<r   )
r   r	   types
NumpyArrayr   r   rI   wherern   rF   )rB   rC   r   rd   re   s    `   r   &calculate_sparse_recommend_best_scoresr      s    $|"4 9I        /%.
)
)C
/%.
)
)C 8c	
;;s;;;SYGG
<<<<<ciHH  r   opc                    t                      }d\  }}|t          | j                  k     r|t          |j                  k     r| j        |         |j        |         k    rj|j                            | j        |                    |j                             || j        |         |j        |                              |dz  }|dz  }n| j        |         |j        |         k     rZ|j                            | j        |                    |j                             || j        |         d                     |dz  }nY|j                            |j        |                    |j                             |d|j        |                              |dz  }|t          | j                  k     r|t          |j                  k     |t          | j                  k     rq|j                            | j        |                    |j                             || j        |         d                     |dz  }|t          | j                  k     q|t          |j                  k     rq|j                            |j        |                    |j                             |d|j        |                              |dz  }|t          |j                  k     q|S )NrS   rT   rR   )r   rU   rV   rH   rW   )rO   rP   r   rX   r   rY   s         r   combine_aggregater      s    ""FDAq
c'/""
"
"q3w+?+?'?'??1!333N!!'/!"4555M  GN1$5w~a7H!I!IJJJFAFAA_Q'/!"444N!!'/!"4555M  GN1$5s!;!;<<<FAAN!!'/!"4555M  C):!;!;<<<FA c'/""
"
"q3w+?+?'?'? c'/""
"
"goa0111RRq 1377888	Q c'/""
"
"
 c'/""
"
"goa0111RRW^A%677888	Q c'/""
"
"
 Mr   c                     t                      }t          |           dk    r|S d}| D ]}|dz  }t          ||d           }t          j        |j        |                                          |_        |S )Nr   rT   c                     | |z   S r   r"   )v1v2s     r   <lambda>zsparse_avg.<locals>.<lambda>  s
    "r' r   )r   rU   r   rI   dividerW   tolist)rC   rX   sparse_countr   s       r   
sparse_avgr      s     ""F
7||qL K K"663I3IJJIfm\::AACCFMMr   r   r   c                 &    t          | |d           S )Nc                     | | z   |z
  S r   r"   )rd   re   s     r   r   z1merge_positive_and_negative_avg.<locals>.<lambda>  s    #)c/ r   )r   r(   s     r   merge_positive_and_negative_avgr     s     Xx1Q1QRRRr   )&typingr   r   r   r   r   numpyrI   qdrant_client.conversionsr   r   qdrant_client.http.modelsr	   qdrant_client.local.distancesr
   r   r   qdrant_client.local.sparser   r   r   r   r   r/   r2   r<   SparseQueryVectorr   rN   rJ   rG   rg   rr   ry   r   r   r   r   r"   r   r   <module>r      sV   < < < < < < < < < < < < < <     ; ; ; ; ; ; 2 2 2 2 2 2 T T T T T T T T T T           
 
 
 
 
 
 
 
:C C C C C C C C
 
 
 
 
 
 
 
"
 
 
 
 
 
 
 
  .."&|"4.
. . . .$ | QSQ[H\    2#$,    ,''*.|*<'
' ' ' '(,\(:
   $%),%7
   @| l  Ua    @. <    SS&2SS S S S S Sr   