Add support for Cosine Similarity by enzofrnt · Pull Request #109 · pgvector/pgvector-python
Expand Up
@@ -12,7 +12,7 @@
import numpy as np
import os
import pgvector.django
from pgvector.django import VectorExtension, VectorField, HalfVectorField, BitField, SparseVectorField, IvfflatIndex, HnswIndex, L2Distance, MaxInnerProduct, CosineDistance, L1Distance, HammingDistance, JaccardDistance, HalfVector, SparseVector
from pgvector.django import VectorExtension, VectorField, HalfVectorField, BitField, SparseVectorField, IvfflatIndex, HnswIndex, L2Distance, MaxInnerProduct, CosineDistance, CosineSimilarity, L1Distance, HammingDistance, JaccardDistance, HalfVector, SparseVector
from unittest import mock
settings.configure( Expand Down Expand Up @@ -190,6 +190,13 @@ def test_vector_cosine_distance(self): items = Item.objects.annotate(distance=distance).order_by(distance) assert [v.id for v in items] == [1, 2, 3] assert [v.distance for v in items] == [0, 0, 0.05719095841793653]
def test_vector_cosine_similarity(self): create_items() similarity = CosineSimilarity('embedding', [1, 1, 1]) items = Item.objects.annotate(similarity=similarity).order_by('-similarity') assert [v.id for v in items] == [1, 2, 3] assert [v.similarity for v in items] == [1.0, 1.0, 0.9428090415820635]
def test_vector_l1_distance(self): create_items() Expand Down Expand Up @@ -223,6 +230,13 @@ def test_halfvec_cosine_distance(self): items = Item.objects.annotate(distance=distance).order_by(distance) assert [v.id for v in items] == [1, 2, 3] assert [v.distance for v in items] == [0, 0, 0.05719095841793653]
def test_halfvec_cosine_similarity(self): create_items() similarity = CosineSimilarity('half_embedding', HalfVector([1, 1, 1])) items = Item.objects.annotate(similarity=similarity).order_by('-similarity') assert [v.id for v in items] == [1, 2, 3] assert [v.similarity for v in items] == [1.0, 1.0, 0.9428090415820635]
def test_halfvec_l1_distance(self): create_items() Expand Down Expand Up @@ -275,6 +289,13 @@ def test_sparsevec_cosine_distance(self): items = Item.objects.annotate(distance=distance).order_by(distance) assert [v.id for v in items] == [1, 2, 3] assert [v.distance for v in items] == [0, 0, 0.05719095841793653]
def test_sparsevec_cosine_similarity(self): create_items() similarity = CosineSimilarity('sparse_embedding', SparseVector([1, 1, 1])) items = Item.objects.annotate(similarity=similarity).order_by('-similarity') assert [v.id for v in items] == [1, 2, 3] assert [v.similarity for v in items] == [1.0, 1.0, 0.9428090415820635]
def test_sparsevec_l1_distance(self): create_items() Expand Down
settings.configure( Expand Down Expand Up @@ -190,6 +190,13 @@ def test_vector_cosine_distance(self): items = Item.objects.annotate(distance=distance).order_by(distance) assert [v.id for v in items] == [1, 2, 3] assert [v.distance for v in items] == [0, 0, 0.05719095841793653]
def test_vector_cosine_similarity(self): create_items() similarity = CosineSimilarity('embedding', [1, 1, 1]) items = Item.objects.annotate(similarity=similarity).order_by('-similarity') assert [v.id for v in items] == [1, 2, 3] assert [v.similarity for v in items] == [1.0, 1.0, 0.9428090415820635]
def test_vector_l1_distance(self): create_items() Expand Down Expand Up @@ -223,6 +230,13 @@ def test_halfvec_cosine_distance(self): items = Item.objects.annotate(distance=distance).order_by(distance) assert [v.id for v in items] == [1, 2, 3] assert [v.distance for v in items] == [0, 0, 0.05719095841793653]
def test_halfvec_cosine_similarity(self): create_items() similarity = CosineSimilarity('half_embedding', HalfVector([1, 1, 1])) items = Item.objects.annotate(similarity=similarity).order_by('-similarity') assert [v.id for v in items] == [1, 2, 3] assert [v.similarity for v in items] == [1.0, 1.0, 0.9428090415820635]
def test_halfvec_l1_distance(self): create_items() Expand Down Expand Up @@ -275,6 +289,13 @@ def test_sparsevec_cosine_distance(self): items = Item.objects.annotate(distance=distance).order_by(distance) assert [v.id for v in items] == [1, 2, 3] assert [v.distance for v in items] == [0, 0, 0.05719095841793653]
def test_sparsevec_cosine_similarity(self): create_items() similarity = CosineSimilarity('sparse_embedding', SparseVector([1, 1, 1])) items = Item.objects.annotate(similarity=similarity).order_by('-similarity') assert [v.id for v in items] == [1, 2, 3] assert [v.similarity for v in items] == [1.0, 1.0, 0.9428090415820635]
def test_sparsevec_l1_distance(self): create_items() Expand Down