
    NgD                        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d
S )    )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                  n    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dS )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	manhattansimilarity_functionstr | SimilarityFunctionreturn6Callable[[Tensor | ndarray, Tensor | ndarray], Tensor]c                2   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           
                                 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r   s    f/var/www/html/ai-engine/env/lib/python3.11/site-packages/sentence_transformers/similarity_functions.pyto_similarity_fnz#SimilarityFunction.to_similarity_fn%   s    . 11DEE"4";;;N"4"@@@"4">>>  "4">>>   V%8  V  V  oA  oQ  oQ  oS  oS  V  V  V
 
 	
    c                2   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           
                                 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 11DEE"4";;;##"4"@@@%%"4">>>))"4">>>)) V%8  V  V  oA  oQ  oQ  oS  oS  V  V  V
 
 	
r(   	list[str]c                 $    d t           D             S )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']
        c                    g | ]	}|j         
S  )value).0ms     r&   
<listcomp>z6SimilarityFunction.possible_values.<locals>.<listcomp>   s    444A444r(   )r   r.   r(   r&   r$   z"SimilarityFunction.possible_valuest   s     54!34444r(   N)r   r   r   r   )r   r+   )__name__
__module____qualname____doc__r   r    DOTr"   r!   staticmethodr'   r*   r$   r.   r(   r&   r   r      s          FK
CII#
 #
 #
 \#
J &
 &
 &
 \&
P 5 5 5 \5 5 5r(   r   N)
__future__r   enumr   typingr   numpyr   torchr   utilr	   r
   r   r   r   r   r   r   r   r.   r(   r&   <module>r?      s   " " " " " "                        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	l5 l5 l5 l5 l5 l5 l5 l5 l5 l5r(   