@@ -403,15 +403,27 @@ def test_ivf_flat_ingestion_with_updates_and_timetravel(tmp_path):
403403 index .update (vector = data [i ].astype (dtype ), external_id = i + update_ids_offset , timestamp = i )
404404 updated_ids [i ] = i + update_ids_offset
405405
406+ index = IVFFlatIndex (uri = index_uri )
407+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
408+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
409+ index = IVFFlatIndex (uri = index_uri )
410+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
411+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
406412 index = IVFFlatIndex (uri = index_uri , timestamp = 101 )
407413 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
408414 assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
409415 index = IVFFlatIndex (uri = index_uri , timestamp = (0 , 101 ))
410416 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
411417 assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
418+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , None ))
419+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
420+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
412421 index = IVFFlatIndex (uri = index_uri , timestamp = (2 , 101 ))
413422 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
414423 assert 0.05 <= accuracy (result , gt_i , updated_ids = updated_ids , only_updated_ids = True ) <= 0.15
424+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , None ))
425+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
426+ assert 0.05 <= accuracy (result , gt_i , updated_ids = updated_ids , only_updated_ids = True ) <= 0.15
415427
416428 # Timetravel with partial read from updates table
417429 updated_ids_part = {}
@@ -434,15 +446,24 @@ def test_ivf_flat_ingestion_with_updates_and_timetravel(tmp_path):
434446
435447 # Consolidate updates
436448 index = index .consolidate_updates ()
449+ index = IVFFlatIndex (uri = index_uri )
450+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
451+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
437452 index = IVFFlatIndex (uri = index_uri , timestamp = 101 )
438453 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
439454 assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
440455 index = IVFFlatIndex (uri = index_uri , timestamp = (0 , 101 ))
441456 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
442457 assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
458+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , None ))
459+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
460+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
443461 index = IVFFlatIndex (uri = index_uri , timestamp = (2 , 101 ))
444462 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
445463 assert 0.05 <= accuracy (result , gt_i , updated_ids = updated_ids , only_updated_ids = True ) <= 0.15
464+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , None ))
465+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
466+ assert 0.05 <= accuracy (result , gt_i , updated_ids = updated_ids , only_updated_ids = True ) <= 0.15
446467
447468 # Timetravel with partial read from updates table
448469 updated_ids_part = {}
@@ -466,6 +487,72 @@ def test_ivf_flat_ingestion_with_updates_and_timetravel(tmp_path):
466487 _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
467488 assert accuracy (result , gt_i ) == 1.0
468489
490+ # Clear history before the latest ingestion
491+ Index .clear_history (uri = index_uri , timestamp = index .latest_ingestion_timestamp - 1 )
492+ index = IVFFlatIndex (uri = index_uri , timestamp = 1 )
493+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
494+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
495+ index = IVFFlatIndex (uri = index_uri , timestamp = 51 )
496+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
497+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
498+ index = IVFFlatIndex (uri = index_uri , timestamp = 101 )
499+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
500+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
501+ index = IVFFlatIndex (uri = index_uri )
502+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
503+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
504+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , 51 ))
505+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
506+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
507+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , 101 ))
508+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
509+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
510+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , None ))
511+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
512+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
513+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , 51 ))
514+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
515+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
516+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , 101 ))
517+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
518+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
519+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , None ))
520+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
521+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 1.0
522+
523+ # Clear all history
524+ Index .clear_history (uri = index_uri , timestamp = index .latest_ingestion_timestamp )
525+ index = IVFFlatIndex (uri = index_uri , timestamp = 1 )
526+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
527+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
528+ index = IVFFlatIndex (uri = index_uri , timestamp = 51 )
529+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
530+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
531+ index = IVFFlatIndex (uri = index_uri , timestamp = 101 )
532+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
533+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
534+ index = IVFFlatIndex (uri = index_uri )
535+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
536+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
537+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , 51 ))
538+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
539+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
540+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , 101 ))
541+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
542+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
543+ index = IVFFlatIndex (uri = index_uri , timestamp = (0 , None ))
544+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
545+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
546+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , 51 ))
547+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
548+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
549+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , 101 ))
550+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
551+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
552+ index = IVFFlatIndex (uri = index_uri , timestamp = (2 , None ))
553+ _ , result = index .query (query_vectors , k = k , nprobe = nprobe )
554+ assert accuracy (result , gt_i , updated_ids = updated_ids ) == 0.0
555+
469556
470557def test_ivf_flat_ingestion_with_additions_and_timetravel (tmp_path ):
471558 dataset_dir = os .path .join (tmp_path , "dataset" )
0 commit comments