|
8 | 8 | from math import sqrt |
9 | 9 | import numpy as np |
10 | 10 | import pgvector.django |
11 | | -from pgvector.django import VectorExtension, VectorField, HalfvecField, SparsevecField, IvfflatIndex, HnswIndex, L2Distance, MaxInnerProduct, CosineDistance, L1Distance, SparseVec |
| 11 | +from pgvector.django import VectorExtension, VectorField, HalfvecField, SparsevecField, IvfflatIndex, HnswIndex, L2Distance, MaxInnerProduct, CosineDistance, L1Distance, HalfVec, SparseVec |
12 | 12 | from unittest import mock |
13 | 13 |
|
14 | 14 | settings.configure( |
@@ -92,7 +92,7 @@ def create_items(): |
92 | 92 | [1, 1, 2] |
93 | 93 | ] |
94 | 94 | for i, v in enumerate(vectors): |
95 | | - item = Item(id=i + 1, embedding=v) |
| 95 | + item = Item(id=i + 1, embedding=v, half_embedding=v, sparse_embedding=SparseVec.from_dense(v)) |
96 | 96 | item.save() |
97 | 97 |
|
98 | 98 |
|
@@ -156,6 +156,20 @@ def test_l1_distance(self): |
156 | 156 | assert [v.id for v in items] == [1, 3, 2] |
157 | 157 | assert [v.distance for v in items] == [0, 1, 3] |
158 | 158 |
|
| 159 | + def test_halfvec_l2_distance(self): |
| 160 | + create_items() |
| 161 | + distance = L2Distance('half_embedding', HalfVec([1, 1, 1])) |
| 162 | + items = Item.objects.annotate(distance=distance).order_by(distance) |
| 163 | + assert [v.id for v in items] == [1, 3, 2] |
| 164 | + assert [v.distance for v in items] == [0, 1, sqrt(3)] |
| 165 | + |
| 166 | + def test_sparsevec_l2_distance(self): |
| 167 | + create_items() |
| 168 | + distance = L2Distance('sparse_embedding', SparseVec.from_dense([1, 1, 1])) |
| 169 | + items = Item.objects.annotate(distance=distance).order_by(distance) |
| 170 | + assert [v.id for v in items] == [1, 3, 2] |
| 171 | + assert [v.distance for v in items] == [0, 1, sqrt(3)] |
| 172 | + |
159 | 173 | def test_filter(self): |
160 | 174 | create_items() |
161 | 175 | distance = L2Distance('embedding', [1, 1, 1]) |
|
0 commit comments