from abc import ABC, abstractmethod
from typing import List
from swarmauri.core.vectors.IVector import IVector
[docs]
class IDistanceSimilarity(ABC):
"""
Interface for computing distances and similarities between high-dimensional data vectors. This interface
abstracts the method for calculating the distance and similarity, allowing for the implementation of various
distance metrics such as Euclidean, Manhattan, Cosine similarity, etc.
"""
[docs]
@abstractmethod
def distance(self, vector_a: IVector, vector_b: IVector) -> float:
"""
Computes the distance between two vectors.
Args:
vector_a (IVector): The first vector in the comparison.
vector_b (IVector): The second vector in the comparison.
Returns:
float: The computed distance between vector_a and vector_b.
"""
pass
[docs]
@abstractmethod
def distances(self, vector_a: IVector, vectors_b: List[IVector]) -> float:
pass
[docs]
@abstractmethod
def similarity(self, vector_a: IVector, vector_b: IVector) -> float:
"""
Compute the similarity between two vectors. The definition of similarity (e.g., cosine similarity)
should be implemented in concrete classes.
Args:
vector_a (IVector): The first vector.
vector_b (IVector): The second vector to compare with the first vector.
Returns:
float: A similarity score between vector_a and vector_b.
"""
pass
[docs]
@abstractmethod
def similarities(self, vector_a: IVector, vectors_b: List[IVector]) -> float:
pass