|
11 | 11 | from math import sqrt |
12 | 12 | import os |
13 | 13 | import pgvector.django |
14 | | -from pgvector import HalfVector, SparseVector, Vector |
| 14 | +from pgvector import SparseVector |
15 | 15 | from pgvector.django import VectorExtension, VectorField, HalfVectorField, BitField, SparseVectorField, IvfflatIndex, HnswIndex, L2Distance, MaxInnerProduct, CosineDistance, L1Distance, HammingDistance, JaccardDistance |
16 | 16 | from unittest import mock |
17 | 17 |
|
@@ -164,11 +164,11 @@ def setup_method(self) -> None: |
164 | 164 | def test_vector(self) -> None: |
165 | 165 | Item(id=1, embedding=[1, 2, 3]).save() |
166 | 166 | item = Item.objects.get(pk=1) # type: ignore |
167 | | - assert item.embedding == Vector([1, 2, 3]) |
| 167 | + assert item.embedding == [1, 2, 3] |
168 | 168 |
|
169 | 169 | def test_vector_l2_distance(self) -> None: |
170 | 170 | create_items() |
171 | | - distance = L2Distance('embedding', Vector([1, 1, 1])) |
| 171 | + distance = L2Distance('embedding', [1, 1, 1]) |
172 | 172 | items = Item.objects.annotate(distance=distance).order_by(distance) # type: ignore |
173 | 173 | assert [v.id for v in items] == [1, 3, 2] |
174 | 174 | assert [v.distance for v in items] == [0, 1, sqrt(3)] |
@@ -210,32 +210,32 @@ def test_vector_l1_distance(self) -> None: |
210 | 210 | def test_halfvec(self) -> None: |
211 | 211 | Item(id=1, half_embedding=[1, 2, 3]).save() |
212 | 212 | item = Item.objects.get(pk=1) # type: ignore |
213 | | - assert item.half_embedding == HalfVector([1, 2, 3]) |
| 213 | + assert item.half_embedding == [1, 2, 3] |
214 | 214 |
|
215 | 215 | def test_halfvec_l2_distance(self) -> None: |
216 | 216 | create_items() |
217 | | - distance = L2Distance('half_embedding', HalfVector([1, 1, 1])) |
| 217 | + distance = L2Distance('half_embedding', [1, 1, 1]) |
218 | 218 | items = Item.objects.annotate(distance=distance).order_by(distance) # type: ignore |
219 | 219 | assert [v.id for v in items] == [1, 3, 2] |
220 | 220 | assert [v.distance for v in items] == [0, 1, sqrt(3)] |
221 | 221 |
|
222 | 222 | def test_halfvec_max_inner_product(self) -> None: |
223 | 223 | create_items() |
224 | | - distance = MaxInnerProduct('half_embedding', HalfVector([1, 1, 1])) |
| 224 | + distance = MaxInnerProduct('half_embedding', [1, 1, 1]) |
225 | 225 | items = Item.objects.annotate(distance=distance).order_by(distance) # type: ignore |
226 | 226 | assert [v.id for v in items] == [2, 3, 1] |
227 | 227 | assert [v.distance for v in items] == [-6, -4, -3] |
228 | 228 |
|
229 | 229 | def test_halfvec_cosine_distance(self) -> None: |
230 | 230 | create_items() |
231 | | - distance = CosineDistance('half_embedding', HalfVector([1, 1, 1])) |
| 231 | + distance = CosineDistance('half_embedding', [1, 1, 1]) |
232 | 232 | items = Item.objects.annotate(distance=distance).order_by(distance) # type: ignore |
233 | 233 | assert [v.id for v in items] == [1, 2, 3] |
234 | 234 | assert [v.distance for v in items] == [0, 0, 0.05719095841793653] |
235 | 235 |
|
236 | 236 | def test_halfvec_l1_distance(self) -> None: |
237 | 237 | create_items() |
238 | | - distance = L1Distance('half_embedding', HalfVector([1, 1, 1])) |
| 238 | + distance = L1Distance('half_embedding', [1, 1, 1]) |
239 | 239 | items = Item.objects.annotate(distance=distance).order_by(distance) # type: ignore |
240 | 240 | assert [v.id for v in items] == [1, 3, 2] |
241 | 241 | assert [v.distance for v in items] == [0, 1, 3] |
@@ -304,31 +304,31 @@ def test_vector_avg(self) -> None: |
304 | 304 | Item(embedding=[1, 2, 3]).save() |
305 | 305 | Item(embedding=[4, 5, 6]).save() |
306 | 306 | avg = Item.objects.aggregate(Avg('embedding'))['embedding__avg'] # type: ignore |
307 | | - assert avg == Vector([2.5, 3.5, 4.5]) |
| 307 | + assert avg == [2.5, 3.5, 4.5] |
308 | 308 |
|
309 | 309 | def test_vector_sum(self) -> None: |
310 | 310 | sum = Item.objects.aggregate(Sum('embedding'))['embedding__sum'] # type: ignore |
311 | 311 | assert sum is None |
312 | 312 | Item(embedding=[1, 2, 3]).save() |
313 | 313 | Item(embedding=[4, 5, 6]).save() |
314 | 314 | sum = Item.objects.aggregate(Sum('embedding'))['embedding__sum'] # type: ignore |
315 | | - assert sum == Vector([5, 7, 9]) |
| 315 | + assert sum == [5, 7, 9] |
316 | 316 |
|
317 | 317 | def test_halfvec_avg(self) -> None: |
318 | 318 | avg = Item.objects.aggregate(Avg('half_embedding'))['half_embedding__avg'] # type: ignore |
319 | 319 | assert avg is None |
320 | 320 | Item(half_embedding=[1, 2, 3]).save() |
321 | 321 | Item(half_embedding=[4, 5, 6]).save() |
322 | 322 | avg = Item.objects.aggregate(Avg('half_embedding'))['half_embedding__avg'] # type: ignore |
323 | | - assert avg == HalfVector([2.5, 3.5, 4.5]) |
| 323 | + assert avg == [2.5, 3.5, 4.5] |
324 | 324 |
|
325 | 325 | def test_halfvec_sum(self) -> None: |
326 | 326 | sum = Item.objects.aggregate(Sum('half_embedding'))['half_embedding__sum'] # type: ignore |
327 | 327 | assert sum is None |
328 | 328 | Item(half_embedding=[1, 2, 3]).save() |
329 | 329 | Item(half_embedding=[4, 5, 6]).save() |
330 | 330 | sum = Item.objects.aggregate(Sum('half_embedding'))['half_embedding__sum'] # type: ignore |
331 | | - assert sum == HalfVector([5, 7, 9]) |
| 331 | + assert sum == [5, 7, 9] |
332 | 332 |
|
333 | 333 | def test_serialization(self) -> None: |
334 | 334 | create_items() |
@@ -358,7 +358,7 @@ def test_vector_form_save(self) -> None: |
358 | 358 | assert form.has_changed() |
359 | 359 | assert form.is_valid() |
360 | 360 | assert form.save() |
361 | | - assert Item.objects.get(pk=1).embedding == Vector([4, 5, 6]) # type: ignore |
| 361 | + assert Item.objects.get(pk=1).embedding == [4, 5, 6] # type: ignore |
362 | 362 |
|
363 | 363 | def test_vector_form_save_missing(self) -> None: |
364 | 364 | Item(id=1).save() |
@@ -386,7 +386,7 @@ def test_halfvec_form_save(self) -> None: |
386 | 386 | assert form.has_changed() |
387 | 387 | assert form.is_valid() |
388 | 388 | assert form.save() |
389 | | - assert Item.objects.get(pk=1).half_embedding == HalfVector([4, 5, 6]) # type: ignore |
| 389 | + assert Item.objects.get(pk=1).half_embedding == [4, 5, 6] # type: ignore |
390 | 390 |
|
391 | 391 | def test_halfvec_form_save_missing(self) -> None: |
392 | 392 | Item(id=1).save() |
@@ -468,15 +468,15 @@ def test_missing(self) -> None: |
468 | 468 | assert Item.objects.first().sparse_embedding is None # type: ignore |
469 | 469 |
|
470 | 470 | def test_vector_array(self) -> None: |
471 | | - Item(id=1, embeddings=[Vector([1, 2, 3]), Vector([4, 5, 6])]).save() |
| 471 | + Item(id=1, embeddings=[[1, 2, 3], [4, 5, 6]]).save() |
472 | 472 |
|
473 | 473 | with connection.cursor() as cursor: |
474 | 474 | from pgvector.psycopg import register_vector |
475 | 475 | register_vector(cursor.connection) |
476 | 476 |
|
477 | 477 | # this fails if the driver does not cast arrays |
478 | 478 | item = Item.objects.get(pk=1) # type: ignore |
479 | | - assert item.embeddings == [Vector([1, 2, 3]), Vector([4, 5, 6])] |
| 479 | + assert item.embeddings == [[1, 2, 3], [4, 5, 6]] |
480 | 480 |
|
481 | 481 | def test_double_array(self) -> None: |
482 | 482 | Item(id=1, double_embedding=[1, 1, 1]).save() |
|
0 commit comments