Ë
    Bêñi6  ã                   ó\  — 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        úe/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/qdrant_client/local/multi_distances.pyÚ__init__zMultiRecoQuery.__init__   sÜ   € ð Ð#ÐJÐ%JÓJÐ#à ˆŒà'Ð3‘8¸ˆØ'Ð3‘8¸ˆàò 	WˆFÜ—x‘x Ó'×+Ñ+Õ-ÐVÐ/VÓVÐ-ð	Wàò 	WˆFÜ—x‘x Ó'×+Ñ+Õ-ÐVÐ/VÓVÐ-ð	Wð QYÖ0YÀf´·±¸&Õ1AÒ0YˆŒØPXÖ0YÀf´·±¸&Õ1AÒ0Yˆ�ùò 1ZùÚ0Ys   ÂCÂ+C)NNN)Ú__name__Ú
__module__Ú__qualname__ÚlistÚfloatr   ÚRecommendStrategyr   © ó    r   r   r      sc   „ ð 48Ø37Ø48ñ	Zà�t˜D ™KÑ(Ñ)¨DÑ0ðZð �t˜D ™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Ó*<ˆŒä—8‘8˜DŸM™MÓ*×.Ñ.Ô0ÐXÐ2XÓXÐ0Ü—8‘8˜DŸM™MÓ*×.Ñ.Ô0ÐXÐ2XÓXÐ0Ð0r    N)r   r   r   r   r   r   r   r    r   r"   r"   &   s*   „ ðY  d¨5¡kÑ!2ð Y¸dÀ4ÈÁ;Ñ>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ˆŒØˆŒä—8‘8˜DŸK™KÓ(×,Ñ,Ô.ÐTÐ0TÓTÐ.Ð.r    N)r   r   r   r   r   r"   r   r   r    r   r%   r%   /   s'   „ ðU˜t D¨¡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«   € ô
 �x‰x˜Ó%×)Ñ)Ô+ÐPÐ-PÓPÐ+Üˆ|×!Ñ!Ó" aÒ'ÐAÐ)AÓAÐ'ä-¨l¸HÀmÓT€IàœŸ™×.Ñ.Ò.Ü—G‘GœBŸF™F 9Ó-Ó.ˆ	ð Ðð 
œ&Ÿ/™/×3Ñ3Ò	3Ü—F‘F˜9Ó%ˆ	ØÐ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™%¤r§z¡zÔ2×6Ñ6¸BÄbÇjÁjÐ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   € Ü—‘�q˜1‘u¤B§J¡JÔ/×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   sF  € ð
R”U×%Ñ%ð R¬%×*:Ñ*:ð RÄð RÌ×HXÑHXó RðO”U×%Ñ%ð O¬%×*:Ñ*:ð OÄð OÌ×HXÑHXó Oô �x‰x˜Ó%×)Ñ)Ô+ÐPÐ-PÓPÐ+Ø "€Lð œŸ™×/Ñ/´·±×1JÑ1JÐKÑKØ#¢A¤r§z¡z MÑ2ˆØ!.´&·/±/×2HÑ2HÒ!H‘IÈi‰	ä&ˆ	àò (ˆÙ˜|¨V°]ÓCˆ
Üœ2Ÿ6™6¤"§&¡&¨¸"Ô"=Ó>Ó?ˆ
Ø×Ñ˜JÕ'ð(ô �8‰8�LÓ!Ð!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À]Ó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-   ©r   ©Ú.0Úxis     r   ú	<genexpr>z8calculate_multi_recommend_best_scores.<locals>.<genexpr>‡   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ô �8‰8Øˆc‰	Ü
�‰Ñ;°sÔ;¸S¿Y¹YÓGÜ
�‰Ñ<¸Ô<¸c¿i¹iÓ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À]ÓSˆEØ�M‰M˜%Õ ð	!ô ˆv‹;˜!ÒØ�M‰Mœ"Ÿ(™( <Ó0Ô1ä—X‘X˜f¬B¯J©JÔ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¬   € ô
 ')§h¡h¬s°8«}ÄBÇHÁHÔ&M€MØò $ˆä+¨D¯M©M¸8À]ÓSˆÜ+¨D¯M©M¸8À]ÓSˆä—X‘Xô ,/¨s°S©y¸#À¹*Ó+E÷á'�I˜xñ ‘©¡A°rÑ9óó
ˆ
ð 	˜Ñ#‰ð$ð Ðùó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   € ô ,¨E¯M©M¸8À]ÓS€Eô 8¸¿¹ÀhÐP]Ó^ÐäŸ+™+Ù?Ð+>Ô?ÄÇÁóÐð Ð&Ñ&Ð&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 "Œ\˜"×ÑDùrn   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ž   € ô (*§x¡x´°H³ÄRÇZÁZÔ'P€NØ×#Ñ#ò 	&ˆä+¨D¯M©M¸8À]ÓSˆÜ+¨D¯M©M¸8À]ÓSˆà˜3‘Y¤Ñ(ˆ
Ü—k‘kÙD¬¯
©
°:¸sÓ(CÔDÄbÇjÁjó
ˆð 	˜+Ñ%‰ð	&ð Ð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÷+ñ +ð
 2Ð4EÑEÈÑVÐ �)Ó VðØ×"Ñ"ðà�5×#Ñ#Ñ$ðð —?‘?ðð ×Ñó	ð""Ø×"Ñ"ð"à�5×#Ñ#Ñ$ð"ð —?‘?ð"ð ×Ñó	"ð:ØðØ%)¨%×*:Ñ*:Ñ%;ðØLRÏOÉOðà
×Ñóð>ØðØ%)¨%×*:Ñ*:Ñ%;ðØLRÏOÉOðà
×Ñóð.ØÐ"Ñ#ðà�5×#Ñ#Ñ$ðð —?‘?ðð ×Ñó	ð.'Øð'Ø*.¨u×/?Ñ/?Ñ*@ð'ØQW×Q`ÑQ`ð'à
×Ñó'ðØðØ(,¨U×-=Ñ-=Ñ(>ðØOUÏÉðà
×Ñôr    