use crate::common::types::ScoreType;
use crate::segment::data_types::primitive::PrimitiveVectorElement;
use crate::segment::data_types::vectors::DenseVector;
use crate::segment::types::Distance;
pub trait Metric<T: PrimitiveVectorElement> {
fn distance() -> Distance;
fn similarity(v1: &[T], v2: &[T]) -> ScoreType;
fn query_similarity(query: &T::QueryType, vector: &[T]) -> ScoreType;
fn preprocess(vector: DenseVector) -> DenseVector;
}
pub trait MetricPostProcessing {
fn postprocess(score: ScoreType) -> ScoreType;
}