Ë
    l^(hD  ã                  ó~   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZmZmZmZmZmZmZmZ  G d„ d	e«      Zy
)é    )Úannotations)ÚEnum)ÚCallable)Úndarray)ÚTensoré   )Úcos_simÚ	dot_scoreÚeuclidean_simÚmanhattan_simÚpairwise_cos_simÚpairwise_dot_scoreÚpairwise_euclidean_simÚpairwise_manhattan_simc                  ój   — e Zd ZdZdZdZdZdZdZe		 	 	 	 d
d„«       Z
e		 	 	 	 d
d„«       Ze	dd„«       Zy	)ÚSimilarityFunctionaž  
    Enum class for supported similarity functions. The following functions are supported:

    - ``SimilarityFunction.COSINE`` (``"cosine"``): Cosine similarity
    - ``SimilarityFunction.DOT_PRODUCT`` (``"dot"``, ``dot_product``): Dot product similarity
    - ``SimilarityFunction.EUCLIDEAN`` (``"euclidean"``): Euclidean distance
    - ``SimilarityFunction.MANHATTAN`` (``"manhattan"``): Manhattan distance
    ÚcosineÚdotÚ	euclideanÚ	manhattanc                ó(  — t        | «      } | t         j                  k(  rt        S | t         j                  k(  rt        S | t         j
                  k(  rt        S | t         j                  k(  rt        S t        d| › dt         j                  «       › d�«      ‚)aé  
        Converts a similarity function name or enum value to the corresponding similarity function.

        Args:
            similarity_function (Union[str, SimilarityFunction]): The name or enum value of the similarity function.

        Returns:
            Callable[[Union[Tensor, ndarray], Union[Tensor, ndarray]], Tensor]: The corresponding similarity function.

        Raises:
            ValueError: If the provided function is not supported.

        Example:
            >>> similarity_fn = SimilarityFunction.to_similarity_fn("cosine")
            >>> similarity_scores = similarity_fn(embeddings1, embeddings2)
            >>> similarity_scores
            tensor([[0.3952, 0.0554],
                    [0.0992, 0.1570]])
        úThe provided function ú4 is not supported. Use one of the supported values: ú.)r   ÚCOSINEr	   ÚDOT_PRODUCTr
   Ú	MANHATTANr   Ú	EUCLIDEANr   Ú
ValueErrorÚpossible_values©Úsimilarity_functions    úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentence_transformers/similarity_functions.pyÚto_similarity_fnz#SimilarityFunction.to_similarity_fn%   s¬   € ô. 1Ð1DÓEÐàÔ"4×";Ñ";Ò;ÜˆNØÔ"4×"@Ñ"@Ò@ÜÐØÔ"4×">Ñ">Ò>Ü Ð ØÔ"4×">Ñ">Ò>Ü Ð äØ$Ð%8Ð$9Ð9mô  oA÷  oQñ  oQó  oSð  nTð  TUð  Vó
ð 	
ó    c                ó(  — t        | «      } | t         j                  k(  rt        S | t         j                  k(  rt        S | t         j
                  k(  rt        S | t         j                  k(  rt        S t        d| › dt         j                  «       › d�«      ‚)aÈ  
        Converts a similarity function into a pairwise similarity function.

        The pairwise similarity function returns the diagonal vector from the similarity matrix, i.e. it only
        computes the similarity(a[i], b[i]) for each i in the range of the input tensors, rather than
        computing the similarity between all pairs of a and b.

        Args:
            similarity_function (Union[str, SimilarityFunction]): The name or enum value of the similarity function.

        Returns:
            Callable[[Union[Tensor, ndarray], Union[Tensor, ndarray]], Tensor]: The pairwise similarity function.

        Raises:
            ValueError: If the provided similarity function is not supported.

        Example:
            >>> pairwise_fn = SimilarityFunction.to_similarity_pairwise_fn("cosine")
            >>> similarity_scores = pairwise_fn(embeddings1, embeddings2)
            >>> similarity_scores
            tensor([0.3952, 0.1570])
        r   r   r   )r   r   r   r   r   r   r   r   r   r   r    r!   s    r#   Úto_similarity_pairwise_fnz,SimilarityFunction.to_similarity_pairwise_fnK   s­   € ô4 1Ð1DÓEÐàÔ"4×";Ñ";Ò;Ü#Ð#ØÔ"4×"@Ñ"@Ò@Ü%Ð%ØÔ"4×">Ñ">Ò>Ü)Ð)ØÔ"4×">Ñ">Ò>Ü)Ð)äØ$Ð%8Ð$9Ð9mô  oA÷  oQñ  oQó  oSð  nTð  TUð  Vó
ð 	
r%   c                 óH   — t         D � cg c]  } | j                  ‘Œ c} S c c} w )ad  
        Returns a list of possible values for the SimilarityFunction enum.

        Returns:
            list: A list of possible values for the SimilarityFunction enum.

        Example:
            >>> possible_values = SimilarityFunction.possible_values()
            >>> possible_values
            ['cosine', 'dot', 'euclidean', 'manhattan']
        )r   Úvalue)Úms    r#   r    z"SimilarityFunction.possible_valuest   s   € ô "4Ö4˜A�—“Ò4Ð4ùÒ4s   ‰N)r"   zstr | SimilarityFunctionÚreturnz6Callable[[Tensor | ndarray, Tensor | ndarray], Tensor])r+   z	list[str])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚDOTr   r   Ústaticmethodr$   r'   r    © r%   r#   r   r      s~   „ ñð €FØ€KØ
€CØ€IØ€Iàð#
Ø5ð#
à	?ò#
ó ð#
ðJ ð&
Ø5ð&
à	?ò&
ó ð&
ðP ò5ó ñ5r%   r   N)Ú
__future__r   Úenumr   Útypingr   Únumpyr   Útorchr   Úutilr	   r
   r   r   r   r   r   r   r   r2   r%   r#   ú<module>r9      s1   ðÝ "å Ý å Ý ÷	÷ 	ó 	ôl5˜õ l5r%   