Ë
    BêñiY(  ã            	       óh  — U d dl 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z  ez  ez  Zeed<   	 d$de
dee
   dedej8                  fd„Zde
de
dej<                  dz  fd„Zdee   dee
   dej8                  fd„Z dedee
   dej8                  fd„Z!dedee
   dej8                  fd„Z"dedee
   dej8                  fd„Z#dedee
   dej8                  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ÚSequenceÚ	TypeAliasN)Ú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   dz  dee   dz  dej                  dz  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         úf/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/qdrant_client/local/sparse_distances.pyÚ__init__zSparseRecoQuery.__init__   s£   € ð Ð#ÐJÐ%JÓJÐ#à ˆŒà'Ð3‘8¸ˆØ'Ð3‘8¸ˆä" 8Ó,ò 	5‰IˆAˆvÜ" 6Ô*Ü,¨VÓ4ˆH�QŠKð	5ô # 8Ó,ò 	5‰IˆAˆvÜ" 6Ô*Ü,¨VÓ4ˆH�QŠKð	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·±Ö> f‘c˜&•kÒ>Ø04·±Ö> f‘c˜&•kÒ>Ø—]‘]ô
ð 	
ùÚ>ùÚ>s
   ”A³A
)NNN)
Ú__name__Ú
__module__Ú__qualname__Úlistr   ÚtypesÚRecommendStrategyr   r   r   © r   r   r   r      so   „ ð /3Ø.2Ø37ñ	!à�|Ñ$ tÑ+ð!ð �|Ñ$ tÑ+ð!ð ×)Ñ)¨DÑ0ó	!ð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Ô&Ü$6°vÓ$>ˆŒØˆ�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—{‘{Ó#àVZ×VbÑVböØNRÔ!¡# d§m¡mÓ"4±c¸$¿-¹-Ó6HÕIòô
ð 	
ùòs   ¥3A 
N)	r    r!   r"   r   r#   r(   r   r   r   r&   r   r   r,   r,   ;   s=   „ ð˜|ð °dÐ;LÑ6Mó ð

Ø˜^Ð,¨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*   ©r5   )r   r5   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 )Nr7   )r4   r5   r(   r   r   r1   s      r   r   z#SparseContextQuery.transform_sparseP   sM   € ô "ð !×.Ñ.öàô "¡# d§m¡mÓ"4±c¸$¿-¹-Ó6HÕIòô
ð 	
ùòs   ”3AN)r    r!   r"   r#   r(   r   r   r   r&   r   r   r4   r4   L   s6   „ ð+ dÐ+<Ñ&=ó +ð
Ø˜^Ð,¨nÐ<Ñ=ð
à	ô
r   r4   ÚSparseQueryVectorÚqueryÚvectorsÚempty_is_zeror   c                 ó4  — g }|D ]m  }t        | |«      }|�|j                  |«       Œ#|s%|j                  t        j                  d«      «       ŒJ|j                  t        j                  d«      «       Œo t        j                  |t        j                  ¬«      S )a&  Calculate distances between a query sparse vector and a list of sparse vectors.

    Args:
        query (SparseVector): The query sparse vector.
        vectors (list[SparseVector]): A list of sparse vectors to compare against.
        empty_is_zero (bool): If True, distance between vectors with no overlap is treated as zero.
            Otherwise, it is treated as negative infinity.
            Simple nearest search requires `empty_is_zero` to be False, while methods like
            recommend, discovery, and context search require True.
    z-infç        ©Údtype)Úsparse_dot_productÚappendÚnpÚfloat32Úarray)r:   r;   r<   Úscoresr   Úscores         r   Úcalculate_distance_sparserH   `   sy   € ð €Fàò +ˆÜ" 5¨&Ó1ˆØÐØ�M‰M˜%Õ Ùà�M‰Mœ"Ÿ*™* VÓ,Õ-à�M‰Mœ"Ÿ*™* S›/Õ*ð+ô �8‰8�F¤"§*¡*Ô-Ð-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 )Nr>   ©r   r   Fz"Query sparse vector must be sortedz,Sparse vector to compare with must be sortedTé   )r   ÚlenÚindicesÚvaluesrC   rD   )rI   rJ   Úresultr   ÚjÚoverlaps         r   rA   rA   ~   s  € Ø€FØ�D€A€qØ€Gä�WÔÐCÐCÓCÐÜ�WÔÐMÐMÓMÐà
Œc�'—/‘/Ó"Ò
" q¬3¨w¯©Ó+?Ò'?Ø�?‰?˜1Ñ §¡°Ñ!3Ò3ØˆGØ�g—n‘n QÑ'¨'¯.©.¸Ñ*;Ñ;Ñ;ˆFØ�‰FˆAØ�‰F‰AØ�_‰_˜QÑ '§/¡/°!Ñ"4Ò4Ø�‰F‰Aà�‰FˆAð Œc�'—/‘/Ó"Ò
" q¬3¨w¯©Ó+?Ó'?ñ Ü�z‰z˜&Ó!Ð!àr   r.   c           	      óf  — t        j                  t        |«      t         j                  ¬«      }| D ]w  }t	        |j
                  |d¬«      }t	        |j                  |d¬«      }t        j                  t        ||kD  ||k(  «      D ��cg c]  \  }}|rdn|rdnd‘Œ c}}«      }||z  }Œy |S c c}}w )Nr?   T©r<   rM   r   éÿÿÿÿ)	rC   ÚzerosrN   Úint32rH   r   r   rE   Úzip)	r.   r;   Úoverall_ranksr2   ÚposÚnegÚ	is_biggerÚis_equalÚ
pair_rankss	            r   Ú calculate_sparse_discovery_ranksr`   —   s¬   € ô ')§h¡h¬s°7«|Ä2Ç8Á8Ô&L€MØò $ˆä'¨¯©°wÈdÔSˆÜ'¨¯©°wÈdÔSˆä—X‘Xô ,/¨s°S©y¸#À¹*Ó+E÷á'�I˜xñ ‘©¡A°rÑ9óó
ˆ
ð 	˜Ñ#‰ð$ð Ðùós   ÂB-c                 ó¾   — t        | j                  |«      }t        | j                  |d¬«      }t	        j
                  d„ |D «       t        j                  «      }||z   S )NTrU   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr*   ©r
   ©Ú.0Úxis     r   ú	<genexpr>z4calculate_sparse_discovery_scores.<locals>.<genexpr>¶   s   è ø€ Ò? RÔ	˜R×	 Ñ?ùó   ‚)r`   r.   rH   r-   rC   ÚfromiterrD   )r:   r;   ÚranksÚdistances_to_targetÚsigmoided_distancess        r   Ú!calculate_sparse_discovery_scoresrm   ­   sV   € ô -¨U¯]©]¸GÓD€Eô 4°E·L±LÀ'ÐY]Ô^ÐäŸ+™+Ù?Ð+>Ô?ÄÇÁóÐð Ð&Ñ&Ð&r   c                 ó„  — t        j                  t        |«      t         j                  ¬«      }| j                  D ]‚  }t        |j                  |d¬«      }t        |j                  |d¬«      }||z
  t        z
  }t        j                  d„ t        j                  |d«      D «       t         j                  «      }||z  }Œ„ |S )Nr?   TrU   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr*   )r	   rd   s     r   rg   z2calculate_sparse_context_scores.<locals>.<genexpr>Ç   s   è ø€ ÒD "Œ\˜"×ÑDùrh   r>   )rC   rW   rN   rD   r5   rH   r   r   r   ri   Úminimum)r:   r;   Úoverall_scoresr2   r[   r\   Ú
differenceÚpair_scoress           r   Úcalculate_sparse_context_scoresrt   ¼   sž   € ô (*§x¡x´°G³ÄBÇJÁJÔ'O€NØ×#Ñ#ò 	&ˆä'¨¯©°wÈdÔSˆÜ'¨¯©°wÈdÔSˆà˜3‘Y¤Ñ(ˆ
Ü—k‘kÙD¬¯
©
°:¸sÓ(CÔDÄbÇjÁjó
ˆð 	˜+Ñ%‰ð	&ð Ð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                 ó\  •— t        ‰«      }g }| D ]!  }t        |‰d¬«      }|j                  |«       Œ# t        |«      dk(  r4|j                  t        j                  |t        j
                   «      «       t        j                  |t        j                  ¬«      j                  d¬«      }|S ©NTrU   r   r?   )Úaxis)	rN   rH   rB   rC   ÚfullÚinfrE   rD   Úmax)rv   Úvector_countrF   ÚexamplerG   Úbest_scoresr;   s         €r   Úget_best_scoresz?calculate_sparse_recommend_best_scores.<locals>.get_best_scoresÑ   s�   ø€ Ü˜7“|ˆð *,ˆØò 	!ˆGÜ-¨g°wÈdÔSˆEØ�M‰M˜%Õ ð	!ô
 ˆv‹;˜!ÒØ�M‰Mœ"Ÿ'™' ,´·±°Ó8Ô9Ü—h‘h˜v¬R¯Z©ZÔ8×<Ñ<À!Ð<ÓDˆàÐr   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr*   rc   rd   s     r   rg   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>è   s   è ø€ Ò;°Ô(¨×,Ñ;ùrh   c              3   ó4   K  — | ]  }t        |«       –— Œ y ­wr*   rc   rd   s     r   rg   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>é   s   è ø€ Ò<°"Ô)¨"Ó-Ô-Ñ<ùs   ‚)
r#   r   r$   Ú
NumpyArrayr   r   rC   Úwhereri   r@   )r:   r;   r€   r[   r\   s    `   r   Ú&calculate_sparse_recommend_best_scoresr…   Î   s‰   ø€ ð¤$¤|Ñ"4ð ¼×9IÑ9Iõ ñ  ˜%Ÿ.™.Ó
)€CÙ
˜%Ÿ.™.Ó
)€Cô �8‰8Øˆc‰	Ü
�‰Ñ;°sÔ;¸S¿Y¹YÓGÜ
�‰Ñ<¸Ô<¸c¿i¹iÓHóð r   c                 óœ   ‡— dt         t           dt        j                  fˆfd„} || j                  «      } || j
                  «      }||z
  S )Nrv   r   c                 ó<  •— t        ‰«      }g }| D ]!  }t        |‰d¬«      }|j                  |«       Œ# t        |«      dk(  r$|j                  t        j                  |«      «       t        j
                  |t        j                  ¬«      j                  d¬«      }|S rx   )rN   rH   rB   rC   rW   rE   rD   Úsum)rv   r}   rF   r~   rG   Ú
sum_scoresr;   s         €r   Úget_sum_scoresz=calculate_sparse_recommend_sum_scores.<locals>.get_sum_scoresð   s…   ø€ Ü˜7“|ˆà)+ˆØò 	!ˆGÜ-¨g°wÈdÔSˆEØ�M‰M˜%Õ ð	!ô ˆv‹;˜!ÒØ�M‰Mœ"Ÿ(™( <Ó0Ô1ä—X‘X˜f¬B¯J©JÔ7×;Ñ;ÀÐ;ÓCˆ
ØÐr   )r#   r   r$   rƒ   r   r   )r:   r;   rŠ   r[   r\   s    `   r   Ú%calculate_sparse_recommend_sum_scoresr‹   í   sI   ø€ ð¤¤lÑ!3ð ¼×8HÑ8Hõ ñ ˜Ÿ™Ó
(€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 )NrL   rM   r>   )r   rN   rO   rB   rP   )rI   rJ   rŒ   rQ   r   rR   s         r   Úcombine_aggregaterŽ     sN  € Ü Ó"€FØ�D€A€qØ
Œc�'—/‘/Ó"Ó
" q¬3¨w¯©Ó+?Ó'?Ø�?‰?˜1Ñ §¡°Ñ!3Ò3Ø�N‰N×!Ñ! '§/¡/°!Ñ"4Ô5Ø�M‰M× Ñ ¡ G§N¡N°1Ñ$5°w·~±~ÀaÑ7HÓ!IÔJØ�‰FˆAØ�‰F‰AØ�_‰_˜QÑ '§/¡/°!Ñ"4Ò4Ø�N‰N×!Ñ! '§/¡/°!Ñ"4Ô5Ø�M‰M× Ñ ¡ G§N¡N°1Ñ$5°sÓ!;Ô<Ø�‰F‰Aà�N‰N×!Ñ! '§/¡/°!Ñ"4Ô5Ø�M‰M× Ñ ¡ C¨¯©¸Ñ):Ó!;Ô<Ø�‰FˆAð Œc�'—/‘/Ó"Ò
" q¬3¨w¯©Ó+?Ô'?ð Œc�'—/‘/Ó"Ò
"Ø�‰×Ñ˜gŸo™o¨aÑ0Ô1Ø�‰×Ñ™R §¡¨qÑ 1°3Ó7Ô8Ø	ˆQ‰ˆð Œc�'—/‘/Ó"Ó
"ð
 Œc�'—/‘/Ó"Ò
"Ø�‰×Ñ˜gŸo™o¨aÑ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   rM   c                 ó   — | |z   S r*   r&   )Úv1Úv2s     r   ú<lambda>zsparse_avg.<locals>.<lambda>-  s
   € À"ÀrÁ'€ r   )r   rN   rŽ   rC   ÚdividerP   Útolist)r;   rQ   Úsparse_countr   s       r   Ú
sparse_avgr—   %  sp   € Ü Ó"€FÜ
ˆ7ƒ|�qÒØˆà€LØò KˆØ˜ÑˆÜ" 6¨6Ñ3IÓJ‰ðKô —I‘I˜fŸm™m¨\Ó:×AÑAÓC€F„MØ€Mr   r   r   c                 ó   — t        | |d„ «      S )Nc                 ó   — | | z   |z
  S r*   r&   )r[   r\   s     r   r“   z1merge_positive_and_negative_avg.<locals>.<lambda>7  s   € À#ÈÁ)ÈcÁ/€ r   )rŽ   )r   r   s     r   Úmerge_positive_and_negative_avgrš   4  s   € ô ˜X xÑ1QÓRÐRr   )F)(Útypingr   r   r   ÚnumpyrC   Úqdrant_client.conversionsr   r$   Úqdrant_client.http.modelsr   Úqdrant_client.local.distancesr   r	   r
   Úqdrant_client.local.sparser   r   r   r   r   r(   r,   r4   r9   Ú__annotations__r#   Úboolrƒ   rH   rD   rA   r`   rm   rt   r…   r‹   rŽ   r—   rš   r&   r   r   ú<module>r£      sø  ðß 0Ò 0ã å ;Ý 2ß TÑ T÷ó ÷ 
ñ  
÷FCñ C÷
ñ 
÷"
ñ 
ð  Ð'Ñ'Ð*<Ñ<¸ÑNð �9ó ð MRñ.Øð.Ø"& |Ñ"4ð.ØEIð.à
×Ñó.ð< ð °|ð ÈÏ
É
ÐUYÑHYó ð2ØÐ#Ñ$ðà�,Ñðð ×Ñóð,'Øð'Ø*.¨|Ñ*<ð'à
×Ñó'ðØðØ(,¨\Ñ(:ðà
×Ñóð$ØðØ%)¨,Ñ%7ðà
×Ñóð>ØðØ%)¨,Ñ%7ðà
×Ñóð0˜|ð °lð Èð ÐUaó ð@˜ Ñ.ð °<ó ðSØðSØ&2ðSàôSr   