MCPcopy Create free account
hub / github.com/NGT-labs/NGT / batchSearchInTwoSteps

Method batchSearchInTwoSteps

python/src/ngtpy.cpp:877–917  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

875 }
876
877 void batchSearchInTwoSteps(
878 py::array_t<float> queries,
879 BatchResults &results,
880 size_t size
881 ) {
882 const py::buffer_info &qinfo = queries.request();
883 const std::vector<long int> &qshape = qinfo.shape;
884 auto nOfQueries = qshape[0];
885 size_t dimension = qshape[1];
886 auto pseudoDimension = QBG::Index::getQuantizer().property.dimension;
887 auto *queryPtr = static_cast<float*>(qinfo.ptr);
888
889 size = size > 0 ? size : defaultNumOfSearchObjects;
890
891 results.results.clear();
892 results.resultList.clear();
893
894 std::unique_ptr<float[]> qs(new float[queries.size() * pseudoDimension]);
895#pragma omp parallel for
896 for (int idx = 0; idx < nOfQueries; idx++) {
897 float *qptr = queryPtr + idx * dimension;
898 float *qsptr = &qs[idx * pseudoDimension];
899 memset(qsptr + dimension, 0, sizeof(float) * (pseudoDimension - dimension));
900 memcpy(qsptr, qptr, dimension * sizeof(float));
901 }
902 QBG::BatchSearchContainer sc;
903 sc.setObjectVectors(&qs[0], nOfQueries, pseudoDimension);
904 sc.setSize(size);
905 sc.setRefinementExpansion(defaultResultExpansion);
906 sc.setEpsilon(defaultEpsilon);
907 sc.setBlobEpsilon(defaultBlobEpsilon);
908 sc.setEdgeSize(defaultEdgeSize);
909 sc.setNumOfProbes(defaultNumOfProbes);
910#ifdef NGTQBG_FUNCTION_SELECTOR
911 sc.functionSelector = defaultFunctionSelector;
912#endif
913 QBG::Index::searchInTwoSteps(sc);
914 results.resultList = std::move(sc.getBatchResult());
915 results.size = results.resultList.size();
916 return;
917 }
918
919 void parallelSearchInOneStep(
920 py::array_t<float> queries,

Callers

nothing calls this directly

Calls 10

searchInTwoStepsFunction · 0.85
setObjectVectorsMethod · 0.80
setSizeMethod · 0.80
setEpsilonMethod · 0.80
setBlobEpsilonMethod · 0.80
setEdgeSizeMethod · 0.80
setNumOfProbesMethod · 0.80
clearMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected