Loading tests/milvus_python_test/test_delete_vectors.py +12 −12 Original line number Diff line number Diff line Loading @@ -31,11 +31,12 @@ class TestDeleteBase: params=gen_simple_index() ) def get_simple_index(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.HNSW]: pytest.skip("Only support index_type: flat/ivf_flat/ivf_sq8/hnsw/ivf_pq") else: pytest.skip("Only support CPU mode") if str(connect._cmd("mode")[1]) == "GPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.IVF_SQ8H]: pytest.skip("Only support index_type: idmap/ivf") elif str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] in [IndexType.IVF_SQ8H]: pytest.skip("CPU not support index_type: ivf_sq8h") return request.param def test_delete_vector_search(self, connect, collection, get_simple_index): Loading Loading @@ -170,8 +171,6 @@ class TestDeleteBase: assert status.OK() status = connect.flush([collection]) assert status.OK() status = connect.flush([collection]) assert status.OK() delete_ids = [ids[0], ids[-1]] query_vecs = [vectors[0], vectors[1], vectors[-1]] status = connect.delete_by_id(collection, delete_ids) Loading Loading @@ -298,11 +297,12 @@ class TestDeleteIndexedVectors: params=gen_simple_index() ) def get_simple_index(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.HNSW]: pytest.skip("Only support index_type: flat/ivf_flat/ivf_sq8") else: pytest.skip("Only support CPU mode") if str(connect._cmd("mode")[1]) == "GPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.IVF_SQ8H]: pytest.skip("Only support index_type: idmap/ivf") elif str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] in [IndexType.IVF_SQ8H]: pytest.skip("CPU not support index_type: ivf_sq8h") return request.param def test_delete_vectors_after_index_created_search(self, connect, collection, get_simple_index): Loading tests/milvus_python_test/test_flush.py +3 −5 Original line number Diff line number Diff line Loading @@ -31,11 +31,9 @@ class TestFlushBase: params=gen_simple_index() ) def get_simple_index(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.HNSW]: pytest.skip("Only support index_type: flat/ivf_flat/ivf_sq8") else: pytest.skip("Only support CPU mode") if str(connect._cmd("mode")[1]) == "GPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.IVF_SQ8H]: pytest.skip("Only support index_type: idmap/flat") return request.param def test_flush_collection_not_existed(self, connect, collection): Loading tests/milvus_python_test/test_search_vectors.py +8 −15 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ add_interval_time = 2 vectors = gen_vectors(6000, dim) vectors = sklearn.preprocessing.normalize(vectors, axis=1, norm='l2') vectors = vectors.tolist() top_k = 1 nprobe = 1 epsilon = 0.001 tag = "1970-01-01" Loading Loading @@ -1198,7 +1199,7 @@ class TestSearchParamsInvalid(object): scope="function", params=gen_invaild_search_params() ) def get_invalid_searh_param(self, request, connect): def get_invalid_search_param(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] == IndexType.IVF_SQ8H: pytest.skip("sq8h not support in CPU mode") Loading @@ -1207,25 +1208,17 @@ class TestSearchParamsInvalid(object): pytest.skip("ivfpq not support in GPU mode") return request.param def test_search_with_invalid_params(self, connect, collection, get_invalid_searh_param): def test_search_with_invalid_params(self, connect, collection, get_invalid_search_param): ''' target: test search fuction, with invalid search params method: search with params expected: search status not ok, and the connection is normal ''' index_type = get_invalid_searh_param["index_type"] search_param = get_invalid_searh_param["search_param"] if index_type in [IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H]: connect.create_index(collection, index_type, {"nlist": 16384}) if (index_type == IndexType.IVF_PQ): connect.create_index(collection, index_type, {"nlist": 16384, "m": 16}) if(index_type == IndexType.HNSW): connect.create_index(collection, index_type, {"M": 16, "efConstruction": 500}) if (index_type == IndexType.RNSG): connect.create_index(collection, index_type, {"search_length": 60, "out_degree": 50, "candidate_pool_size": 300, "knng": 100}) top_k = 1 index_type = get_invalid_search_param["index_type"] search_param = get_invalid_search_param["search_param"] for index in gen_simple_index(): if index_type == index["index_type"]: connect.create_index(collection, index_type, index["index_param"]) query_vecs = gen_vectors(1, dim) status, result = connect.search_vectors(collection, top_k, query_vecs, params=search_param) assert not status.OK() Loading tests/milvus_python_test/utils.py +33 −38 Original line number Diff line number Diff line Loading @@ -12,6 +12,17 @@ from milvus import Milvus, IndexType, MetricType port = 19530 epsilon = 0.000001 all_index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG, IndexType.ANNOY ] def get_milvus(handler=None): if handler is None: Loading Loading @@ -460,34 +471,31 @@ def gen_invalid_engine_config(): def gen_invaild_search_params(): index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG ] invalid_search_key = 100 search_params = [] for index_type in index_types: for index_type in all_index_types: if index_type == IndexType.FLAT: continue search_params.append({"index_type": index_type, "search_param": {"invalid_key": invalid_search_key}}) if index_type in [IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ]: for nprobe in gen_invalid_params(): ivf_search_params = {"index_type": index_type, "search_param": {"nprobe": nprobe}} search_params.append(ivf_search_params) search_params.append({"index_type": index_type, "search_param": {"invalid_key": 100}}) elif index_type == IndexType.HNSW: for ef in gen_invalid_params(): hnsw_search_param = {"index_type": index_type, "search_param": {"ef": ef}} search_params.append(hnsw_search_param) search_params.append({"index_type": index_type, "search_param": {"invalid_key": 100}}) elif index_type == IndexType.RNSG: for search_length in gen_invalid_params(): nsg_search_param = {"index_type": index_type, "search_param": {"search_length": search_length}} search_params.append(nsg_search_param) search_params.append({"index_type": index_type, "search_param": {"invalid_key": 100}}) elif index_type == IndexType.ANNOY: for search_k in gen_invalid_params(): if isinstance(search_k, int): continue annoy_search_param = {"index_type": index_type, "search_param": {"search_k": search_k}} search_params.append(annoy_search_param) return search_params Loading Loading @@ -525,20 +533,13 @@ def gen_invalid_index(): index_params.append({"index_type": IndexType.RNSG, "index_param": {"invalid_key": 100, "out_degree": 40, "candidate_pool_size": 300, "knng": 100}}) for invalid_n_trees in gen_invalid_params(): index_params.append({"index_type": IndexType.ANNOY, "index_param": {"n_trees": invalid_n_trees}}) return index_params def gen_index(): index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG ] nlists = [1, 1024, 16384] pq_ms = [128, 64, 32, 16, 8, 4] Ms = [5, 24, 48] Loading @@ -549,7 +550,7 @@ def gen_index(): knngs = [5, 100, 300] index_params = [] for index_type in index_types: for index_type in all_index_types: if index_type == IndexType.FLAT: index_params.append({"index_type": index_type, "index_param": {"nlist": 1024}}) elif index_type in [IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H]: Loading Loading @@ -580,15 +581,6 @@ def gen_index(): def gen_simple_index(): index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG ] params = [ {"nlist": 1024}, {"nlist": 1024}, Loading @@ -596,12 +588,12 @@ def gen_simple_index(): {"nlist": 1024}, {"nlist": 1024, "m": 16}, {"M": 16, "efConstruction": 500}, {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50} {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50}, {"n_trees": 4} ] index_params = [] for i in range(len(index_types)): index_params.append({"index_type": index_types[i], "index_param": params[i]}) for i in range(len(all_index_types)): index_params.append({"index_type": all_index_types[i], "index_param": params[i]}) return index_params Loading @@ -612,6 +604,9 @@ def get_search_param(index_type): return {"ef": 64} elif index_type == IndexType.RNSG: return {"search_length": 50} elif index_type == IndexType.ANNOY: return {"search_k": 100} else: logging.getLogger().info("Invalid index_type.") Loading tests/milvus_python_test/test_index.py +1 −1 File changed.Contains only whitespace changes. Show changes Loading
tests/milvus_python_test/test_delete_vectors.py +12 −12 Original line number Diff line number Diff line Loading @@ -31,11 +31,12 @@ class TestDeleteBase: params=gen_simple_index() ) def get_simple_index(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.HNSW]: pytest.skip("Only support index_type: flat/ivf_flat/ivf_sq8/hnsw/ivf_pq") else: pytest.skip("Only support CPU mode") if str(connect._cmd("mode")[1]) == "GPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.IVF_SQ8H]: pytest.skip("Only support index_type: idmap/ivf") elif str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] in [IndexType.IVF_SQ8H]: pytest.skip("CPU not support index_type: ivf_sq8h") return request.param def test_delete_vector_search(self, connect, collection, get_simple_index): Loading Loading @@ -170,8 +171,6 @@ class TestDeleteBase: assert status.OK() status = connect.flush([collection]) assert status.OK() status = connect.flush([collection]) assert status.OK() delete_ids = [ids[0], ids[-1]] query_vecs = [vectors[0], vectors[1], vectors[-1]] status = connect.delete_by_id(collection, delete_ids) Loading Loading @@ -298,11 +297,12 @@ class TestDeleteIndexedVectors: params=gen_simple_index() ) def get_simple_index(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.HNSW]: pytest.skip("Only support index_type: flat/ivf_flat/ivf_sq8") else: pytest.skip("Only support CPU mode") if str(connect._cmd("mode")[1]) == "GPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.IVF_SQ8H]: pytest.skip("Only support index_type: idmap/ivf") elif str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] in [IndexType.IVF_SQ8H]: pytest.skip("CPU not support index_type: ivf_sq8h") return request.param def test_delete_vectors_after_index_created_search(self, connect, collection, get_simple_index): Loading
tests/milvus_python_test/test_flush.py +3 −5 Original line number Diff line number Diff line Loading @@ -31,11 +31,9 @@ class TestFlushBase: params=gen_simple_index() ) def get_simple_index(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.HNSW]: pytest.skip("Only support index_type: flat/ivf_flat/ivf_sq8") else: pytest.skip("Only support CPU mode") if str(connect._cmd("mode")[1]) == "GPU": if request.param["index_type"] not in [IndexType.IVF_SQ8, IndexType.IVFLAT, IndexType.FLAT, IndexType.IVF_PQ, IndexType.IVF_SQ8H]: pytest.skip("Only support index_type: idmap/flat") return request.param def test_flush_collection_not_existed(self, connect, collection): Loading
tests/milvus_python_test/test_search_vectors.py +8 −15 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ add_interval_time = 2 vectors = gen_vectors(6000, dim) vectors = sklearn.preprocessing.normalize(vectors, axis=1, norm='l2') vectors = vectors.tolist() top_k = 1 nprobe = 1 epsilon = 0.001 tag = "1970-01-01" Loading Loading @@ -1198,7 +1199,7 @@ class TestSearchParamsInvalid(object): scope="function", params=gen_invaild_search_params() ) def get_invalid_searh_param(self, request, connect): def get_invalid_search_param(self, request, connect): if str(connect._cmd("mode")[1]) == "CPU": if request.param["index_type"] == IndexType.IVF_SQ8H: pytest.skip("sq8h not support in CPU mode") Loading @@ -1207,25 +1208,17 @@ class TestSearchParamsInvalid(object): pytest.skip("ivfpq not support in GPU mode") return request.param def test_search_with_invalid_params(self, connect, collection, get_invalid_searh_param): def test_search_with_invalid_params(self, connect, collection, get_invalid_search_param): ''' target: test search fuction, with invalid search params method: search with params expected: search status not ok, and the connection is normal ''' index_type = get_invalid_searh_param["index_type"] search_param = get_invalid_searh_param["search_param"] if index_type in [IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H]: connect.create_index(collection, index_type, {"nlist": 16384}) if (index_type == IndexType.IVF_PQ): connect.create_index(collection, index_type, {"nlist": 16384, "m": 16}) if(index_type == IndexType.HNSW): connect.create_index(collection, index_type, {"M": 16, "efConstruction": 500}) if (index_type == IndexType.RNSG): connect.create_index(collection, index_type, {"search_length": 60, "out_degree": 50, "candidate_pool_size": 300, "knng": 100}) top_k = 1 index_type = get_invalid_search_param["index_type"] search_param = get_invalid_search_param["search_param"] for index in gen_simple_index(): if index_type == index["index_type"]: connect.create_index(collection, index_type, index["index_param"]) query_vecs = gen_vectors(1, dim) status, result = connect.search_vectors(collection, top_k, query_vecs, params=search_param) assert not status.OK() Loading
tests/milvus_python_test/utils.py +33 −38 Original line number Diff line number Diff line Loading @@ -12,6 +12,17 @@ from milvus import Milvus, IndexType, MetricType port = 19530 epsilon = 0.000001 all_index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG, IndexType.ANNOY ] def get_milvus(handler=None): if handler is None: Loading Loading @@ -460,34 +471,31 @@ def gen_invalid_engine_config(): def gen_invaild_search_params(): index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG ] invalid_search_key = 100 search_params = [] for index_type in index_types: for index_type in all_index_types: if index_type == IndexType.FLAT: continue search_params.append({"index_type": index_type, "search_param": {"invalid_key": invalid_search_key}}) if index_type in [IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ]: for nprobe in gen_invalid_params(): ivf_search_params = {"index_type": index_type, "search_param": {"nprobe": nprobe}} search_params.append(ivf_search_params) search_params.append({"index_type": index_type, "search_param": {"invalid_key": 100}}) elif index_type == IndexType.HNSW: for ef in gen_invalid_params(): hnsw_search_param = {"index_type": index_type, "search_param": {"ef": ef}} search_params.append(hnsw_search_param) search_params.append({"index_type": index_type, "search_param": {"invalid_key": 100}}) elif index_type == IndexType.RNSG: for search_length in gen_invalid_params(): nsg_search_param = {"index_type": index_type, "search_param": {"search_length": search_length}} search_params.append(nsg_search_param) search_params.append({"index_type": index_type, "search_param": {"invalid_key": 100}}) elif index_type == IndexType.ANNOY: for search_k in gen_invalid_params(): if isinstance(search_k, int): continue annoy_search_param = {"index_type": index_type, "search_param": {"search_k": search_k}} search_params.append(annoy_search_param) return search_params Loading Loading @@ -525,20 +533,13 @@ def gen_invalid_index(): index_params.append({"index_type": IndexType.RNSG, "index_param": {"invalid_key": 100, "out_degree": 40, "candidate_pool_size": 300, "knng": 100}}) for invalid_n_trees in gen_invalid_params(): index_params.append({"index_type": IndexType.ANNOY, "index_param": {"n_trees": invalid_n_trees}}) return index_params def gen_index(): index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG ] nlists = [1, 1024, 16384] pq_ms = [128, 64, 32, 16, 8, 4] Ms = [5, 24, 48] Loading @@ -549,7 +550,7 @@ def gen_index(): knngs = [5, 100, 300] index_params = [] for index_type in index_types: for index_type in all_index_types: if index_type == IndexType.FLAT: index_params.append({"index_type": index_type, "index_param": {"nlist": 1024}}) elif index_type in [IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H]: Loading Loading @@ -580,15 +581,6 @@ def gen_index(): def gen_simple_index(): index_types = [ IndexType.FLAT, IndexType.IVFLAT, IndexType.IVF_SQ8, IndexType.IVF_SQ8H, IndexType.IVF_PQ, IndexType.HNSW, IndexType.RNSG ] params = [ {"nlist": 1024}, {"nlist": 1024}, Loading @@ -596,12 +588,12 @@ def gen_simple_index(): {"nlist": 1024}, {"nlist": 1024, "m": 16}, {"M": 16, "efConstruction": 500}, {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50} {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50}, {"n_trees": 4} ] index_params = [] for i in range(len(index_types)): index_params.append({"index_type": index_types[i], "index_param": params[i]}) for i in range(len(all_index_types)): index_params.append({"index_type": all_index_types[i], "index_param": params[i]}) return index_params Loading @@ -612,6 +604,9 @@ def get_search_param(index_type): return {"ef": 64} elif index_type == IndexType.RNSG: return {"search_length": 50} elif index_type == IndexType.ANNOY: return {"search_k": 100} else: logging.getLogger().info("Invalid index_type.") Loading
tests/milvus_python_test/test_index.py +1 −1 File changed.Contains only whitespace changes. Show changes