1- # type: ignore
2-
31import django
42from django .conf import settings
53from django .contrib .postgres .fields import ArrayField
@@ -135,7 +133,7 @@ class Migration(migrations.Migration):
135133 cursor .execute ('\n ' .join (sql_statements ))
136134
137135
138- def create_items ():
136+ def create_items () -> None :
139137 Item (id = 1 , embedding = [1 , 1 , 1 ], half_embedding = [1 , 1 , 1 ], binary_embedding = '000' , sparse_embedding = SparseVector ([1 , 1 , 1 ])).save ()
140138 Item (id = 2 , embedding = [2 , 2 , 2 ], half_embedding = [2 , 2 , 2 ], binary_embedding = '101' , sparse_embedding = SparseVector ([2 , 2 , 2 ])).save ()
141139 Item (id = 3 , embedding = [1 , 1 , 2 ], half_embedding = [1 , 1 , 2 ], binary_embedding = '111' , sparse_embedding = SparseVector ([1 , 1 , 2 ])).save ()
@@ -166,179 +164,179 @@ class Meta:
166164
167165
168166class TestDjango :
169- def setup_method (self ):
167+ def setup_method (self ) -> None :
170168 Item .objects .all ().delete ()
171169
172- def test_vector (self ):
170+ def test_vector (self ) -> None :
173171 Item (id = 1 , embedding = [1 , 2 , 3 ]).save ()
174172 item = Item .objects .get (pk = 1 )
175173 assert item .embedding == Vector ([1 , 2 , 3 ])
176174
177- def test_vector_l2_distance (self ):
175+ def test_vector_l2_distance (self ) -> None :
178176 create_items ()
179177 distance = L2Distance ('embedding' , Vector ([1 , 1 , 1 ]))
180178 items = Item .objects .annotate (distance = distance ).order_by (distance )
181179 assert [v .id for v in items ] == [1 , 3 , 2 ]
182180 assert [v .distance for v in items ] == [0 , 1 , sqrt (3 )]
183181
184- def test_vector_l2_distance_list (self ):
182+ def test_vector_l2_distance_list (self ) -> None :
185183 create_items ()
186184 distance = L2Distance ('embedding' , [1 , 1 , 1 ])
187185 items = Item .objects .annotate (distance = distance ).order_by (distance )
188186 assert [v .id for v in items ] == [1 , 3 , 2 ]
189187 assert [v .distance for v in items ] == [0 , 1 , sqrt (3 )]
190188
191- def test_vector_l2_distance_none (self ):
189+ def test_vector_l2_distance_none (self ) -> None :
192190 create_items ()
193191 distance = L2Distance ('embedding' , None )
194192 items = Item .objects .annotate (distance = distance ).order_by (distance )
195193 assert [v .distance for v in items ] == [None , None , None ]
196194
197- def test_vector_max_inner_product (self ):
195+ def test_vector_max_inner_product (self ) -> None :
198196 create_items ()
199197 distance = MaxInnerProduct ('embedding' , [1 , 1 , 1 ])
200198 items = Item .objects .annotate (distance = distance ).order_by (distance )
201199 assert [v .id for v in items ] == [2 , 3 , 1 ]
202200 assert [v .distance for v in items ] == [- 6 , - 4 , - 3 ]
203201
204- def test_vector_cosine_distance (self ):
202+ def test_vector_cosine_distance (self ) -> None :
205203 create_items ()
206204 distance = CosineDistance ('embedding' , [1 , 1 , 1 ])
207205 items = Item .objects .annotate (distance = distance ).order_by (distance )
208206 assert [v .id for v in items ] == [1 , 2 , 3 ]
209207 assert [v .distance for v in items ] == [0 , 0 , 0.05719095841793653 ]
210208
211- def test_vector_l1_distance (self ):
209+ def test_vector_l1_distance (self ) -> None :
212210 create_items ()
213211 distance = L1Distance ('embedding' , [1 , 1 , 1 ])
214212 items = Item .objects .annotate (distance = distance ).order_by (distance )
215213 assert [v .id for v in items ] == [1 , 3 , 2 ]
216214 assert [v .distance for v in items ] == [0 , 1 , 3 ]
217215
218- def test_halfvec (self ):
216+ def test_halfvec (self ) -> None :
219217 Item (id = 1 , half_embedding = [1 , 2 , 3 ]).save ()
220218 item = Item .objects .get (pk = 1 )
221219 assert item .half_embedding == HalfVector ([1 , 2 , 3 ])
222220
223- def test_halfvec_l2_distance (self ):
221+ def test_halfvec_l2_distance (self ) -> None :
224222 create_items ()
225223 distance = L2Distance ('half_embedding' , HalfVector ([1 , 1 , 1 ]))
226224 items = Item .objects .annotate (distance = distance ).order_by (distance )
227225 assert [v .id for v in items ] == [1 , 3 , 2 ]
228226 assert [v .distance for v in items ] == [0 , 1 , sqrt (3 )]
229227
230- def test_halfvec_max_inner_product (self ):
228+ def test_halfvec_max_inner_product (self ) -> None :
231229 create_items ()
232230 distance = MaxInnerProduct ('half_embedding' , HalfVector ([1 , 1 , 1 ]))
233231 items = Item .objects .annotate (distance = distance ).order_by (distance )
234232 assert [v .id for v in items ] == [2 , 3 , 1 ]
235233 assert [v .distance for v in items ] == [- 6 , - 4 , - 3 ]
236234
237- def test_halfvec_cosine_distance (self ):
235+ def test_halfvec_cosine_distance (self ) -> None :
238236 create_items ()
239237 distance = CosineDistance ('half_embedding' , HalfVector ([1 , 1 , 1 ]))
240238 items = Item .objects .annotate (distance = distance ).order_by (distance )
241239 assert [v .id for v in items ] == [1 , 2 , 3 ]
242240 assert [v .distance for v in items ] == [0 , 0 , 0.05719095841793653 ]
243241
244- def test_halfvec_l1_distance (self ):
242+ def test_halfvec_l1_distance (self ) -> None :
245243 create_items ()
246244 distance = L1Distance ('half_embedding' , HalfVector ([1 , 1 , 1 ]))
247245 items = Item .objects .annotate (distance = distance ).order_by (distance )
248246 assert [v .id for v in items ] == [1 , 3 , 2 ]
249247 assert [v .distance for v in items ] == [0 , 1 , 3 ]
250248
251- def test_bit (self ):
249+ def test_bit (self ) -> None :
252250 Item (id = 1 , binary_embedding = '101' ).save ()
253251 item = Item .objects .get (pk = 1 )
254252 assert item .binary_embedding == '101'
255253
256- def test_bit_hamming_distance (self ):
254+ def test_bit_hamming_distance (self ) -> None :
257255 create_items ()
258256 distance = HammingDistance ('binary_embedding' , '101' )
259257 items = Item .objects .annotate (distance = distance ).order_by (distance )
260258 assert [v .id for v in items ] == [2 , 3 , 1 ]
261259 assert [v .distance for v in items ] == [0 , 1 , 2 ]
262260
263- def test_bit_jaccard_distance (self ):
261+ def test_bit_jaccard_distance (self ) -> None :
264262 create_items ()
265263 distance = JaccardDistance ('binary_embedding' , '101' )
266264 items = Item .objects .annotate (distance = distance ).order_by (distance )
267265 assert [v .id for v in items ] == [2 , 3 , 1 ]
268266 # assert [v.distance for v in items] == [0, 1/3, 1]
269267
270- def test_sparsevec (self ):
268+ def test_sparsevec (self ) -> None :
271269 Item (id = 1 , sparse_embedding = SparseVector ([1 , 2 , 3 ])).save ()
272270 item = Item .objects .get (pk = 1 )
273271 assert item .sparse_embedding == SparseVector ([1 , 2 , 3 ])
274272
275- def test_sparsevec_l2_distance (self ):
273+ def test_sparsevec_l2_distance (self ) -> None :
276274 create_items ()
277275 distance = L2Distance ('sparse_embedding' , SparseVector ([1 , 1 , 1 ]))
278276 items = Item .objects .annotate (distance = distance ).order_by (distance )
279277 assert [v .id for v in items ] == [1 , 3 , 2 ]
280278 assert [v .distance for v in items ] == [0 , 1 , sqrt (3 )]
281279
282- def test_sparsevec_max_inner_product (self ):
280+ def test_sparsevec_max_inner_product (self ) -> None :
283281 create_items ()
284282 distance = MaxInnerProduct ('sparse_embedding' , SparseVector ([1 , 1 , 1 ]))
285283 items = Item .objects .annotate (distance = distance ).order_by (distance )
286284 assert [v .id for v in items ] == [2 , 3 , 1 ]
287285 assert [v .distance for v in items ] == [- 6 , - 4 , - 3 ]
288286
289- def test_sparsevec_cosine_distance (self ):
287+ def test_sparsevec_cosine_distance (self ) -> None :
290288 create_items ()
291289 distance = CosineDistance ('sparse_embedding' , SparseVector ([1 , 1 , 1 ]))
292290 items = Item .objects .annotate (distance = distance ).order_by (distance )
293291 assert [v .id for v in items ] == [1 , 2 , 3 ]
294292 assert [v .distance for v in items ] == [0 , 0 , 0.05719095841793653 ]
295293
296- def test_sparsevec_l1_distance (self ):
294+ def test_sparsevec_l1_distance (self ) -> None :
297295 create_items ()
298296 distance = L1Distance ('sparse_embedding' , SparseVector ([1 , 1 , 1 ]))
299297 items = Item .objects .annotate (distance = distance ).order_by (distance )
300298 assert [v .id for v in items ] == [1 , 3 , 2 ]
301299 assert [v .distance for v in items ] == [0 , 1 , 3 ]
302300
303- def test_filter (self ):
301+ def test_filter (self ) -> None :
304302 create_items ()
305303 distance = L2Distance ('embedding' , [1 , 1 , 1 ])
306304 items = Item .objects .alias (distance = distance ).filter (distance__lt = 1 )
307305 assert [v .id for v in items ] == [1 ]
308306
309- def test_vector_avg (self ):
307+ def test_vector_avg (self ) -> None :
310308 avg = Item .objects .aggregate (Avg ('embedding' ))['embedding__avg' ]
311309 assert avg is None
312310 Item (embedding = [1 , 2 , 3 ]).save ()
313311 Item (embedding = [4 , 5 , 6 ]).save ()
314312 avg = Item .objects .aggregate (Avg ('embedding' ))['embedding__avg' ]
315313 assert avg == Vector ([2.5 , 3.5 , 4.5 ])
316314
317- def test_vector_sum (self ):
315+ def test_vector_sum (self ) -> None :
318316 sum = Item .objects .aggregate (Sum ('embedding' ))['embedding__sum' ]
319317 assert sum is None
320318 Item (embedding = [1 , 2 , 3 ]).save ()
321319 Item (embedding = [4 , 5 , 6 ]).save ()
322320 sum = Item .objects .aggregate (Sum ('embedding' ))['embedding__sum' ]
323321 assert sum == Vector ([5 , 7 , 9 ])
324322
325- def test_halfvec_avg (self ):
323+ def test_halfvec_avg (self ) -> None :
326324 avg = Item .objects .aggregate (Avg ('half_embedding' ))['half_embedding__avg' ]
327325 assert avg is None
328326 Item (half_embedding = [1 , 2 , 3 ]).save ()
329327 Item (half_embedding = [4 , 5 , 6 ]).save ()
330328 avg = Item .objects .aggregate (Avg ('half_embedding' ))['half_embedding__avg' ]
331329 assert avg == HalfVector ([2.5 , 3.5 , 4.5 ])
332330
333- def test_halfvec_sum (self ):
331+ def test_halfvec_sum (self ) -> None :
334332 sum = Item .objects .aggregate (Sum ('half_embedding' ))['half_embedding__sum' ]
335333 assert sum is None
336334 Item (half_embedding = [1 , 2 , 3 ]).save ()
337335 Item (half_embedding = [4 , 5 , 6 ]).save ()
338336 sum = Item .objects .aggregate (Sum ('half_embedding' ))['half_embedding__sum' ]
339337 assert sum == HalfVector ([5 , 7 , 9 ])
340338
341- def test_serialization (self ):
339+ def test_serialization (self ) -> None :
342340 create_items ()
343341 items = Item .objects .all ()
344342 for format in ['json' , 'xml' ]:
@@ -348,18 +346,18 @@ def test_serialization(self):
348346 for obj in serializers .deserialize (format , data ):
349347 obj .save ()
350348
351- def test_vector_form (self ):
349+ def test_vector_form (self ) -> None :
352350 form = VectorForm (data = {'embedding' : '[1, 2, 3]' })
353351 assert form .is_valid ()
354352 assert 'value="[1, 2, 3]"' in form .as_div ()
355353
356- def test_vector_form_instance (self ):
354+ def test_vector_form_instance (self ) -> None :
357355 Item (id = 1 , embedding = [1 , 2 , 3 ]).save ()
358356 item = Item .objects .get (pk = 1 )
359357 form = VectorForm (instance = item )
360358 assert 'value="[1.0, 2.0, 3.0]"' in form .as_div ()
361359
362- def test_vector_form_save (self ):
360+ def test_vector_form_save (self ) -> None :
363361 Item (id = 1 , embedding = [1 , 2 , 3 ]).save ()
364362 item = Item .objects .get (pk = 1 )
365363 form = VectorForm (instance = item , data = {'embedding' : '[4, 5, 6]' })
@@ -368,26 +366,26 @@ def test_vector_form_save(self):
368366 assert form .save ()
369367 assert Item .objects .get (pk = 1 ).embedding == Vector ([4 , 5 , 6 ])
370368
371- def test_vector_form_save_missing (self ):
369+ def test_vector_form_save_missing (self ) -> None :
372370 Item (id = 1 ).save ()
373371 item = Item .objects .get (pk = 1 )
374372 form = VectorForm (instance = item , data = {'embedding' : '' })
375373 assert form .is_valid ()
376374 assert form .save ()
377375 assert Item .objects .get (pk = 1 ).embedding is None
378376
379- def test_halfvec_form (self ):
377+ def test_halfvec_form (self ) -> None :
380378 form = HalfVectorForm (data = {'half_embedding' : '[1, 2, 3]' })
381379 assert form .is_valid ()
382380 assert 'value="[1, 2, 3]"' in form .as_div ()
383381
384- def test_halfvec_form_instance (self ):
382+ def test_halfvec_form_instance (self ) -> None :
385383 Item (id = 1 , half_embedding = [1 , 2 , 3 ]).save ()
386384 item = Item .objects .get (pk = 1 )
387385 form = HalfVectorForm (instance = item )
388386 assert 'value="[1.0, 2.0, 3.0]"' in form .as_div ()
389387
390- def test_halfvec_form_save (self ):
388+ def test_halfvec_form_save (self ) -> None :
391389 Item (id = 1 , half_embedding = [1 , 2 , 3 ]).save ()
392390 item = Item .objects .get (pk = 1 )
393391 form = HalfVectorForm (instance = item , data = {'half_embedding' : '[4, 5, 6]' })
@@ -396,26 +394,26 @@ def test_halfvec_form_save(self):
396394 assert form .save ()
397395 assert Item .objects .get (pk = 1 ).half_embedding == HalfVector ([4 , 5 , 6 ])
398396
399- def test_halfvec_form_save_missing (self ):
397+ def test_halfvec_form_save_missing (self ) -> None :
400398 Item (id = 1 ).save ()
401399 item = Item .objects .get (pk = 1 )
402400 form = HalfVectorForm (instance = item , data = {'half_embedding' : '' })
403401 assert form .is_valid ()
404402 assert form .save ()
405403 assert Item .objects .get (pk = 1 ).half_embedding is None
406404
407- def test_bit_form (self ):
405+ def test_bit_form (self ) -> None :
408406 form = BitForm (data = {'binary_embedding' : '101' })
409407 assert form .is_valid ()
410408 assert 'value="101"' in form .as_div ()
411409
412- def test_bit_form_instance (self ):
410+ def test_bit_form_instance (self ) -> None :
413411 Item (id = 1 , binary_embedding = '101' ).save ()
414412 item = Item .objects .get (pk = 1 )
415413 form = BitForm (instance = item )
416414 assert 'value="101"' in form .as_div ()
417415
418- def test_bit_form_save (self ):
416+ def test_bit_form_save (self ) -> None :
419417 Item (id = 1 , binary_embedding = '101' ).save ()
420418 item = Item .objects .get (pk = 1 )
421419 form = BitForm (instance = item , data = {'binary_embedding' : '010' })
@@ -424,27 +422,27 @@ def test_bit_form_save(self):
424422 assert form .save ()
425423 assert '010' == Item .objects .get (pk = 1 ).binary_embedding
426424
427- def test_bit_form_save_missing (self ):
425+ def test_bit_form_save_missing (self ) -> None :
428426 Item (id = 1 ).save ()
429427 item = Item .objects .get (pk = 1 )
430428 form = BitForm (instance = item , data = {'binary_embedding' : '' })
431429 assert form .is_valid ()
432430 assert form .save ()
433431 assert Item .objects .get (pk = 1 ).binary_embedding is None
434432
435- def test_sparsevec_form (self ):
433+ def test_sparsevec_form (self ) -> None :
436434 form = SparseVectorForm (data = {'sparse_embedding' : '{1:1,2:2,3:3}/3' })
437435 assert form .is_valid ()
438436 assert 'value="{1:1,2:2,3:3}/3"' in form .as_div ()
439437
440- def test_sparsevec_form_instance (self ):
438+ def test_sparsevec_form_instance (self ) -> None :
441439 Item (id = 1 , sparse_embedding = [1 , 2 , 3 ]).save ()
442440 item = Item .objects .get (pk = 1 )
443441 form = SparseVectorForm (instance = item )
444442 # TODO improve
445443 assert 'value="{1:1.0,2:2.0,3:3.0}/3"' in form .as_div ()
446444
447- def test_sparsevec_form_save (self ):
445+ def test_sparsevec_form_save (self ) -> None :
448446 Item (id = 1 , sparse_embedding = [1 , 2 , 3 ]).save ()
449447 item = Item .objects .get (pk = 1 )
450448 form = SparseVectorForm (instance = item , data = {'sparse_embedding' : '{1:4,2:5,3:6}/3' })
@@ -453,29 +451,29 @@ def test_sparsevec_form_save(self):
453451 assert form .save ()
454452 assert Item .objects .get (pk = 1 ).sparse_embedding == SparseVector ([4 , 5 , 6 ])
455453
456- def test_sparesevec_form_save_missing (self ):
454+ def test_sparesevec_form_save_missing (self ) -> None :
457455 Item (id = 1 ).save ()
458456 item = Item .objects .get (pk = 1 )
459457 form = SparseVectorForm (instance = item , data = {'sparse_embedding' : '' })
460458 assert form .is_valid ()
461459 assert form .save ()
462460 assert Item .objects .get (pk = 1 ).sparse_embedding is None
463461
464- def test_clean (self ):
462+ def test_clean (self ) -> None :
465463 item = Item (id = 1 , embedding = [1 , 2 , 3 ], half_embedding = [1 , 2 , 3 ], binary_embedding = '101' , sparse_embedding = SparseVector ([1 , 2 , 3 ]))
466464 item .full_clean ()
467465
468- def test_get_or_create (self ):
466+ def test_get_or_create (self ) -> None :
469467 Item .objects .get_or_create (embedding = [1 , 2 , 3 ])
470468
471- def test_missing (self ):
469+ def test_missing (self ) -> None :
472470 Item ().save ()
473471 assert Item .objects .first ().embedding is None
474472 assert Item .objects .first ().half_embedding is None
475473 assert Item .objects .first ().binary_embedding is None
476474 assert Item .objects .first ().sparse_embedding is None
477475
478- def test_vector_array (self ):
476+ def test_vector_array (self ) -> None :
479477 Item (id = 1 , embeddings = [Vector ([1 , 2 , 3 ]), Vector ([4 , 5 , 6 ])]).save ()
480478
481479 with connection .cursor () as cursor :
@@ -486,7 +484,7 @@ def test_vector_array(self):
486484 item = Item .objects .get (pk = 1 )
487485 assert item .embeddings == [Vector ([1 , 2 , 3 ]), Vector ([4 , 5 , 6 ])]
488486
489- def test_double_array (self ):
487+ def test_double_array (self ) -> None :
490488 Item (id = 1 , double_embedding = [1 , 1 , 1 ]).save ()
491489 Item (id = 2 , double_embedding = [2 , 2 , 2 ]).save ()
492490 Item (id = 3 , double_embedding = [1 , 1 , 2 ]).save ()
@@ -496,7 +494,7 @@ def test_double_array(self):
496494 assert [v .distance for v in items ] == [0 , 1 , sqrt (3 )]
497495 assert items [1 ].double_embedding == [1 , 1 , 2 ]
498496
499- def test_numeric_array (self ):
497+ def test_numeric_array (self ) -> None :
500498 Item (id = 1 , numeric_embedding = [1 , 1 , 1 ]).save ()
501499 Item (id = 2 , numeric_embedding = [2 , 2 , 2 ]).save ()
502500 Item (id = 3 , numeric_embedding = [1 , 1 , 2 ]).save ()
@@ -506,7 +504,7 @@ def test_numeric_array(self):
506504 assert [v .distance for v in items ] == [0 , 1 , sqrt (3 )]
507505 assert items [1 ].numeric_embedding == [1 , 1 , 2 ]
508506
509- def test_half_precision (self ):
507+ def test_half_precision (self ) -> None :
510508 create_items ()
511509 distance = L2Distance (Cast ('embedding' , HalfVectorField (dimensions = 3 )), [1 , 1 , 1 ])
512510 items = Item .objects .annotate (distance = distance ).order_by (distance )
0 commit comments