mirror of
https://github.com/facebookresearch/faiss.git
synced 2026-10-11 22:50:00 +00:00
Deflake test_io TestIVFPQRead.test_reader (#5718)
Summary: Pull Request resolved: https://github.com/facebookresearch/faiss/pull/5718 `test_reader` searches one IVFPQ index loaded twice, with and without the precomputed table, and required the neighbor ids to be identical. The two paths add the distance terms in a different order, so near-tied neighbors can swap. With unseeded data it failed in 7 of 400 random draws, and once in seven runs of the Cogwheel faiss suite on T1_BGM (2 of 10000 ids). Compare with `check_ref_knn_with_draws`, which allows swaps only among tied distances, and seed the data so a failure reproduces. `test_io` moves to `py_tests_with_contrib` for the helper. Reviewed By: mnorris11 Differential Revision: D124383290 fbshipit-source-id: ceb81262ffaba81ac23e5a592e1658741192060d
This commit is contained in:
committed by
meta-codesync[bot]
parent
db6aa06d96
commit
f46050eb56
+7
-4
@@ -15,6 +15,7 @@ from multiprocessing.pool import ThreadPool
|
||||
import faiss
|
||||
import numpy as np
|
||||
from common_faiss_tests import get_dataset_2
|
||||
from faiss.contrib.evaluation import check_ref_knn_with_draws
|
||||
|
||||
|
||||
d = 32
|
||||
@@ -502,8 +503,9 @@ class Test_IO_IndexIVFSpectralHash(unittest.TestCase):
|
||||
class TestIVFPQRead(unittest.TestCase):
|
||||
def test_reader(self):
|
||||
d, n = 32, 1000
|
||||
xq = np.random.uniform(size=(n, d)).astype("float32")
|
||||
xb = np.random.uniform(size=(n, d)).astype("float32")
|
||||
rs = np.random.RandomState(123)
|
||||
xq = rs.uniform(size=(n, d)).astype("float32")
|
||||
xb = rs.uniform(size=(n, d)).astype("float32")
|
||||
|
||||
index = faiss.index_factory(32, "IVF32,PQ16np", faiss.METRIC_L2)
|
||||
index.train(xb)
|
||||
@@ -521,8 +523,9 @@ class TestIVFPQRead(unittest.TestCase):
|
||||
|
||||
Da, Ia = index_a.search(xq, 10)
|
||||
Db, Ib = index_b.search(xq, 10)
|
||||
np.testing.assert_array_equal(Ia, Ib)
|
||||
np.testing.assert_almost_equal(Da, Db, decimal=5)
|
||||
# The precomputed table changes the order of float operations, so
|
||||
# near-tied neighbors can swap.
|
||||
check_ref_knn_with_draws(Da, Ia, Db, Ib)
|
||||
|
||||
codes_a = index_a.sa_encode(xq)
|
||||
codes_b = index_b.sa_encode(xq)
|
||||
|
||||
Reference in New Issue
Block a user