
    si                         d dl mZ d dlmZmZ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 )
    )Enum)CallableListUnion)ndarray)Tensor   )cos_sim	dot_scoreeuclidean_simmanhattan_simpairwise_cos_simpairwise_dot_scorepairwise_euclidean_simpairwise_manhattan_simc            	          e Zd ZdZdZdZdZdZdZe	de
ed f         dee
eef         e
eef         gef         fd            Ze	de
ed f         dee
eef         e
eef         gef         fd	            Ze	dee         f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returnc                 L   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
                    | t                                                               )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]])
        OThe provided function {} is not supported. Use one of the supported values: {}.)r   COSINEr
   DOT_PRODUCTr   	MANHATTANr   	EUCLIDEANr   
ValueErrorformatpossible_valuesr   s    ]/var/www/icac/venv/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">>>  ]dd#%7%G%G%I%I 
 
 	
    c                 L   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
                    | t                                                               )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#   s    r$   to_similarity_pairwise_fnz,SimilarityFunction.to_similarity_pairwise_fnK   s    4 11DEE"4";;;##"4"@@@%%"4">>>))"4">>>))]dd#%7%G%G%I%I 
 
 	
r&   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_valuesv   s     54!34444r&   N)__name__
__module____qualname____doc__r   r   DOTr   r   staticmethodr   strr   r   r   r%   r(   r   r"   r+   r&   r$   r   r      s         FK
CII%
"3(<#<=%
	5)5+ABFJ	K%
 %
 %
 \%
N (
"3(<#<=(
	5)5+ABFJ	K(
 (
 (
 \(
T 5T#Y 5 5 5 \5 5 5r&   r   N)enumr   typingr   r   r   numpyr   torchr   utilr
   r   r   r   r   r   r   r   r   r+   r&   r$   <module>r<      s          ( ( ( ( ( ( ( ( ( (            	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	p5 p5 p5 p5 p5 p5 p5 p5 p5 p5r&   