test_scheduler.py 1.7 KB
Newer Older
X
xj.lin 已提交
1 2
from ..scheduler import *

X
xj.lin 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import unittest
import faiss
import numpy as np


class TestScheduler(unittest.TestCase):
    def test_schedule(self):
        d = 64
        nb = 10000
        nq = 100
        nt = 5000
        xt, xb, xq = get_dataset(d, nb, nt, nq)
        file_name = "/tmp/faiss/tempfile_1"


        index = faiss.IndexFlatL2(d)
        print(index.is_trained)
        index.add(xb)
        faiss.write_index(index, file_name)
        Dref, Iref = index.search(xq, 5)

        index2 = faiss.read_index(file_name)

J
jinhai 已提交
26
        scheduler_instance = Scheduler()
X
xj.lin 已提交
27 28 29 30

        # query args 1
        query_index = dict()
        query_index['index'] = [file_name]
J
jinhai 已提交
31
        vectors = scheduler_instance.Search(query_index, vectors=xq, k=5)
X
xj.lin 已提交
32 33 34 35 36
        assert np.all(vectors == Iref)

        # query args 2
        query_index = dict()
        query_index['raw'] = xt
J
jinhai 已提交
37 38
        # Xiaojun TODO: 'raw_id' part
        # query_index['raw_id'] = 
X
xj.lin 已提交
39 40
        query_index['dimension'] = d
        query_index['index'] = [file_name]
J
jinhai 已提交
41 42 43 44
        
        # Xiaojun TODO: once 'raw_id' part added, open below
        # vectors = scheduler_instance.Search(query_index, vectors=xq, k=5)
        
X
xj.lin 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
        # print("success")


def get_dataset(d, nb, nt, nq):
    """A dataset that is not completely random but still challenging to
    index
    """
    d1 = 10     # intrinsic dimension (more or less)
    n = nb + nt + nq
    rs = np.random.RandomState(1338)
    x = rs.normal(size=(n, d1))
    x = np.dot(x, rs.rand(d1, d))
    # now we have a d1-dim ellipsoid in d-dimensional space
    # higher factor (>4) -> higher frequency -> less linear
    x = x * (rs.rand(d) * 4 + 0.1)
    x = np.sin(x)
    x = x.astype('float32')
    return x[:nt], x[nt:-nq], x[-nq:]

if __name__ == "__main__":
    unittest.main()