faiss 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/faiss/extconf.rb +2 -1
- data/ext/faiss/{index_rb.cpp → index.cpp} +1 -1
- data/ext/faiss/index_binary.cpp +1 -1
- data/ext/faiss/kmeans.cpp +1 -1
- data/ext/faiss/pca_matrix.cpp +1 -1
- data/ext/faiss/product_quantizer.cpp +1 -1
- data/ext/faiss/{utils_rb.cpp → utils.cpp} +1 -1
- data/lib/faiss/version.rb +1 -1
- data/vendor/faiss/faiss/AutoTune.cpp +93 -80
- data/vendor/faiss/faiss/Clustering.cpp +39 -240
- data/vendor/faiss/faiss/Clustering.h +6 -0
- data/vendor/faiss/faiss/IVFlib.cpp +41 -21
- data/vendor/faiss/faiss/Index.cpp +6 -5
- data/vendor/faiss/faiss/Index.h +5 -5
- data/vendor/faiss/faiss/Index2Layer.cpp +37 -53
- data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +49 -37
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +36 -34
- data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexBinary.cpp +5 -3
- data/vendor/faiss/faiss/IndexBinary.h +4 -4
- data/vendor/faiss/faiss/IndexBinaryFlat.cpp +1 -1
- data/vendor/faiss/faiss/IndexBinaryFlat.h +1 -1
- data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +4 -4
- data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +84 -92
- data/vendor/faiss/faiss/IndexBinaryHNSW.h +9 -3
- data/vendor/faiss/faiss/IndexBinaryHash.cpp +45 -236
- data/vendor/faiss/faiss/IndexBinaryHash.h +6 -6
- data/vendor/faiss/faiss/IndexBinaryIVF.cpp +87 -415
- data/vendor/faiss/faiss/IndexFastScan.cpp +72 -109
- data/vendor/faiss/faiss/IndexFastScan.h +25 -23
- data/vendor/faiss/faiss/IndexFlat.cpp +27 -20
- data/vendor/faiss/faiss/IndexFlat.h +21 -18
- data/vendor/faiss/faiss/IndexFlatCodes.cpp +42 -19
- data/vendor/faiss/faiss/IndexHNSW.cpp +283 -145
- data/vendor/faiss/faiss/IndexHNSW.h +16 -2
- data/vendor/faiss/faiss/IndexIDMap.cpp +25 -21
- data/vendor/faiss/faiss/IndexIDMap.h +9 -7
- data/vendor/faiss/faiss/IndexIVF.cpp +465 -362
- data/vendor/faiss/faiss/IndexIVF.h +33 -12
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +77 -74
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +96 -93
- data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.h +4 -1
- data/vendor/faiss/faiss/IndexIVFFastScan.cpp +357 -238
- data/vendor/faiss/faiss/IndexIVFFastScan.h +42 -41
- data/vendor/faiss/faiss/IndexIVFFlat.cpp +36 -68
- data/vendor/faiss/faiss/IndexIVFFlat.h +32 -0
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +53 -30
- data/vendor/faiss/faiss/IndexIVFFlatPanorama.h +3 -1
- data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +18 -15
- data/vendor/faiss/faiss/IndexIVFPQ.cpp +71 -843
- data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +151 -121
- data/vendor/faiss/faiss/IndexIVFPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexIVFPQR.cpp +21 -17
- data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +26 -39
- data/vendor/faiss/faiss/IndexIVFRaBitQ.h +2 -1
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +475 -476
- data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +248 -93
- data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +41 -127
- data/vendor/faiss/faiss/IndexIVFSpectralHash.h +1 -1
- data/vendor/faiss/faiss/IndexLSH.cpp +36 -19
- data/vendor/faiss/faiss/IndexLattice.cpp +13 -13
- data/vendor/faiss/faiss/IndexNNDescent.cpp +36 -21
- data/vendor/faiss/faiss/IndexNNDescent.h +2 -2
- data/vendor/faiss/faiss/IndexNSG.cpp +39 -23
- data/vendor/faiss/faiss/IndexNeuralNetCodec.cpp +31 -11
- data/vendor/faiss/faiss/IndexPQ.cpp +128 -221
- data/vendor/faiss/faiss/IndexPQ.h +3 -2
- data/vendor/faiss/faiss/IndexPQFastScan.cpp +20 -14
- data/vendor/faiss/faiss/IndexPQFastScan.h +3 -0
- data/vendor/faiss/faiss/IndexPreTransform.cpp +25 -18
- data/vendor/faiss/faiss/IndexPreTransform.h +1 -1
- data/vendor/faiss/faiss/IndexRaBitQ.cpp +11 -36
- data/vendor/faiss/faiss/IndexRaBitQ.h +2 -1
- data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +41 -277
- data/vendor/faiss/faiss/IndexRaBitQFastScan.h +183 -27
- data/vendor/faiss/faiss/IndexRefine.cpp +30 -25
- data/vendor/faiss/faiss/IndexRefine.h +4 -4
- data/vendor/faiss/faiss/IndexReplicas.cpp +6 -6
- data/vendor/faiss/faiss/IndexRowwiseMinMax.cpp +15 -14
- data/vendor/faiss/faiss/IndexRowwiseMinMax.h +1 -1
- data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +82 -14
- data/vendor/faiss/faiss/IndexShards.cpp +10 -9
- data/vendor/faiss/faiss/IndexShardsIVF.cpp +21 -15
- data/vendor/faiss/faiss/MatrixStats.cpp +5 -4
- data/vendor/faiss/faiss/MetaIndexes.cpp +19 -17
- data/vendor/faiss/faiss/MetaIndexes.h +1 -1
- data/vendor/faiss/faiss/MetricType.h +14 -7
- data/vendor/faiss/faiss/SuperKMeans.cpp +656 -0
- data/vendor/faiss/faiss/SuperKMeans.h +97 -0
- data/vendor/faiss/faiss/VectorTransform.cpp +237 -149
- data/vendor/faiss/faiss/VectorTransform.h +16 -16
- data/vendor/faiss/faiss/build.cpp +23 -0
- data/vendor/faiss/faiss/build.h +15 -0
- data/vendor/faiss/faiss/clone_index.cpp +48 -47
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-avx2-inl.h +47 -47
- data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-inl.h +11 -0
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-avx2-inl.h +38 -38
- data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-inl.h +11 -0
- data/vendor/faiss/faiss/factory_tools.cpp +5 -0
- data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +6 -5
- data/vendor/faiss/faiss/gpu/GpuResources.h +1 -1
- data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +9 -9
- data/vendor/faiss/faiss/gpu/StandardGpuResources.h +4 -3
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +46 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +56 -0
- data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +78 -1
- data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +72 -0
- data/vendor/faiss/faiss/gpu/test/TestUtils.h +23 -0
- data/vendor/faiss/faiss/gpu/utils/CuvsFilterConvert.h +1 -1
- data/vendor/faiss/faiss/gpu/utils/CuvsUtils.h +21 -10
- data/vendor/faiss/faiss/gpu_metal/GpuIndexFlat.h +22 -0
- data/vendor/faiss/faiss/gpu_metal/MetalCloner.h +35 -0
- data/vendor/faiss/faiss/gpu_metal/MetalFlatKernels.h +40 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +51 -0
- data/vendor/faiss/faiss/gpu_metal/MetalIndexFlat.h +65 -0
- data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +66 -0
- data/vendor/faiss/faiss/gpu_metal/MetalResources.h +79 -0
- data/vendor/faiss/faiss/gpu_metal/StandardMetalResources.h +35 -0
- data/vendor/faiss/faiss/impl/AdSampling.cpp +103 -0
- data/vendor/faiss/faiss/impl/AdSampling.h +35 -0
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +29 -25
- data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +1 -0
- data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +10 -9
- data/vendor/faiss/faiss/impl/AuxIndexStructures.h +3 -0
- data/vendor/faiss/faiss/impl/ClusteringHelpers.cpp +244 -0
- data/vendor/faiss/faiss/impl/ClusteringHelpers.h +94 -0
- data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +16 -16
- data/vendor/faiss/faiss/impl/CodePacker.cpp +3 -3
- data/vendor/faiss/faiss/impl/CodePackerRaBitQ.cpp +1 -1
- data/vendor/faiss/faiss/impl/DistanceComputer.h +8 -8
- data/vendor/faiss/faiss/impl/FaissAssert.h +6 -3
- data/vendor/faiss/faiss/impl/FaissException.h +50 -3
- data/vendor/faiss/faiss/impl/HNSW.cpp +92 -317
- data/vendor/faiss/faiss/impl/HNSW.h +13 -34
- data/vendor/faiss/faiss/impl/IDSelector.cpp +15 -11
- data/vendor/faiss/faiss/impl/IDSelector.h +8 -8
- data/vendor/faiss/faiss/impl/InvertedListScannerStats.h +26 -0
- data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +82 -77
- data/vendor/faiss/faiss/impl/NNDescent.cpp +62 -25
- data/vendor/faiss/faiss/impl/NNDescent.h +6 -2
- data/vendor/faiss/faiss/impl/NSG.cpp +38 -21
- data/vendor/faiss/faiss/impl/NSG.h +4 -4
- data/vendor/faiss/faiss/impl/Panorama.cpp +23 -6
- data/vendor/faiss/faiss/impl/Panorama.h +258 -87
- data/vendor/faiss/faiss/impl/PdxLayout.cpp +93 -0
- data/vendor/faiss/faiss/impl/PdxLayout.h +41 -0
- data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +46 -32
- data/vendor/faiss/faiss/impl/PolysemousTraining.h +3 -3
- data/vendor/faiss/faiss/impl/ProductAdditiveQuantizer.cpp +35 -35
- data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +21 -16
- data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +30 -23
- data/vendor/faiss/faiss/impl/Quantizer.h +2 -2
- data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +55 -49
- data/vendor/faiss/faiss/impl/RaBitQUtils.h +65 -0
- data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +296 -283
- data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +26 -23
- data/vendor/faiss/faiss/impl/ResidualQuantizer.h +1 -1
- data/vendor/faiss/faiss/impl/ResultHandler.h +99 -75
- data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +52 -4
- data/vendor/faiss/faiss/impl/ScalarQuantizer.h +27 -1
- data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +14 -11
- data/vendor/faiss/faiss/impl/VisitedTable.h +7 -0
- data/vendor/faiss/faiss/impl/approx_topk/approx_topk.h +276 -0
- data/vendor/faiss/faiss/impl/approx_topk/avx2.cpp +68 -0
- data/vendor/faiss/faiss/{utils → impl}/approx_topk/generic.h +15 -8
- data/vendor/faiss/faiss/impl/approx_topk/neon.cpp +68 -0
- data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab-inl.h +169 -0
- data/vendor/faiss/faiss/impl/approx_topk/rq_beam_search_tab.h +117 -0
- data/vendor/faiss/faiss/impl/approx_topk/simdlib256-inl.h +146 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHNSW_impl.h +73 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryHash_impl.h +270 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +460 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexIVFSpectralHash_impl.h +159 -0
- data/vendor/faiss/faiss/impl/binary_hamming/IndexPQ_impl.h +92 -0
- data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/avx512.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/dispatch.h +143 -0
- data/vendor/faiss/faiss/impl/binary_hamming/neon.cpp +26 -0
- data/vendor/faiss/faiss/impl/binary_hamming/rvv.cpp +26 -0
- data/vendor/faiss/faiss/impl/expanded_scanners.h +8 -3
- data/vendor/faiss/faiss/impl/{FastScanDistancePostProcessing.h → fast_scan/FastScanDistancePostProcessing.h} +13 -6
- data/vendor/faiss/faiss/impl/{LookupTableScaler.h → fast_scan/LookupTableScaler.h} +16 -5
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops.h +237 -0
- data/vendor/faiss/faiss/impl/fast_scan/accumulate_loops_512.h +185 -0
- data/vendor/faiss/faiss/impl/fast_scan/decompose_qbs.h +229 -0
- data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +268 -0
- data/vendor/faiss/faiss/impl/{pq4_fast_scan.cpp → fast_scan/fast_scan.cpp} +169 -2
- data/vendor/faiss/faiss/impl/fast_scan/fast_scan.h +341 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx2.cpp +36 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-avx512.cpp +40 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-neon.cpp +120 -0
- data/vendor/faiss/faiss/impl/fast_scan/impl-riscv.cpp +104 -0
- data/vendor/faiss/faiss/impl/fast_scan/kernels_simd256.h +213 -0
- data/vendor/faiss/faiss/impl/{pq4_fast_scan_search_qbs.cpp → fast_scan/kernels_simd512.h} +26 -356
- data/vendor/faiss/faiss/impl/fast_scan/rabitq_dispatching.h +90 -0
- data/vendor/faiss/faiss/impl/fast_scan/rabitq_result_handler.h +108 -0
- data/vendor/faiss/faiss/impl/{simd_result_handlers.h → fast_scan/simd_result_handlers.h} +282 -134
- data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +54 -0
- data/vendor/faiss/faiss/impl/hnsw/LockVector.h +64 -0
- data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +91 -0
- data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -0
- data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +104 -0
- data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +111 -0
- data/vendor/faiss/faiss/impl/index_read.cpp +1132 -45
- data/vendor/faiss/faiss/impl/index_read_utils.h +1 -1
- data/vendor/faiss/faiss/impl/index_write.cpp +95 -13
- data/vendor/faiss/faiss/impl/io.cpp +6 -6
- data/vendor/faiss/faiss/impl/io_macros.h +33 -16
- data/vendor/faiss/faiss/impl/kmeans1d.cpp +10 -10
- data/vendor/faiss/faiss/impl/lattice_Zn.cpp +37 -23
- data/vendor/faiss/faiss/impl/lattice_Zn.h +6 -6
- data/vendor/faiss/faiss/impl/mapped_io.cpp +6 -6
- data/vendor/faiss/faiss/impl/platform_macros.h +11 -4
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQScanner_impl.h +549 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +245 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.h +105 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +106 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +21 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx2.cpp → pq_code_distance-avx2.h} +9 -13
- data/vendor/faiss/faiss/impl/pq_code_distance/{pq_code_distance-avx512.cpp → pq_code_distance-avx512.h} +9 -57
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +29 -111
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.h +96 -0
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +238 -5
- data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +5 -7
- data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +68 -0
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.cpp +311 -477
- data/vendor/faiss/faiss/impl/residual_quantizer_encode_steps.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/codecs.h +1 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +3 -2
- data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +102 -11
- data/vendor/faiss/faiss/impl/scalar_quantizer/scanners.h +27 -1
- data/vendor/faiss/faiss/impl/scalar_quantizer/similarities.h +3 -3
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +148 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +167 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +59 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +163 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +311 -0
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.cpp +192 -8
- data/vendor/faiss/faiss/impl/scalar_quantizer/training.h +12 -0
- data/vendor/faiss/faiss/impl/simd_dispatch.h +100 -66
- data/vendor/faiss/faiss/impl/simdlib/simdlib.h +57 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_avx2.h +264 -172
- data/vendor/faiss/faiss/impl/simdlib/simdlib_avx512.h +414 -0
- data/vendor/faiss/faiss/impl/simdlib/simdlib_dispatch.h +44 -0
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_emulated.h +231 -166
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_neon.h +270 -218
- data/vendor/faiss/faiss/{utils → impl/simdlib}/simdlib_ppc64.h +201 -160
- data/vendor/faiss/faiss/impl/svs_io.cpp +12 -3
- data/vendor/faiss/faiss/impl/svs_io.h +8 -2
- data/vendor/faiss/faiss/index_factory.cpp +86 -18
- data/vendor/faiss/faiss/index_io.h +24 -0
- data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +66 -16
- data/vendor/faiss/faiss/invlists/DirectMap.cpp +24 -14
- data/vendor/faiss/faiss/invlists/DirectMap.h +4 -3
- data/vendor/faiss/faiss/invlists/InvertedLists.cpp +157 -73
- data/vendor/faiss/faiss/invlists/InvertedLists.h +86 -23
- data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +4 -4
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +13 -13
- data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +2 -2
- data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +350 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVF.h +128 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.cpp +40 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLVQ.h +43 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +225 -0
- data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.h +71 -0
- data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +25 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamana.h +18 -2
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +1 -1
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +12 -3
- data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +7 -2
- data/vendor/faiss/faiss/utils/Heap.cpp +10 -10
- data/vendor/faiss/faiss/utils/NeuralNet.cpp +47 -36
- data/vendor/faiss/faiss/utils/NeuralNet.h +1 -1
- data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +10 -4
- data/vendor/faiss/faiss/utils/distances.cpp +390 -560
- data/vendor/faiss/faiss/utils/distances.h +20 -1
- data/vendor/faiss/faiss/utils/distances_dispatch.h +117 -37
- data/vendor/faiss/faiss/utils/distances_fused/avx512.cpp +8 -7
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.cpp +33 -14
- data/vendor/faiss/faiss/utils/distances_fused/distances_fused.h +12 -1
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based.cpp +16 -293
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_based_neon.cpp +57 -0
- data/vendor/faiss/faiss/utils/distances_fused/simdlib_kernel-inl.h +290 -0
- data/vendor/faiss/faiss/utils/distances_simd.cpp +5 -177
- data/vendor/faiss/faiss/utils/extra_distances.cpp +9 -8
- data/vendor/faiss/faiss/utils/extra_distances.h +32 -6
- data/vendor/faiss/faiss/utils/hamming-inl.h +13 -11
- data/vendor/faiss/faiss/utils/hamming.cpp +66 -517
- data/vendor/faiss/faiss/utils/hamming.h +92 -2
- data/vendor/faiss/faiss/utils/hamming_distance/common.h +287 -10
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx2.h +142 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +234 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-generic.h +368 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-neon.h +322 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-rvv.h +39 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer.h +146 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_impl.h +481 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_neon.cpp +15 -0
- data/vendor/faiss/faiss/utils/hamming_distance/hamming_rvv.cpp +15 -0
- data/vendor/faiss/faiss/utils/partitioning.cpp +66 -987
- data/vendor/faiss/faiss/utils/partitioning.h +31 -0
- data/vendor/faiss/faiss/utils/popcount.h +29 -0
- data/vendor/faiss/faiss/utils/pq_code_distance.h +2 -2
- data/vendor/faiss/faiss/utils/prefetch.h +2 -2
- data/vendor/faiss/faiss/utils/quantize_lut.cpp +30 -30
- data/vendor/faiss/faiss/utils/quantize_lut.h +1 -1
- data/vendor/faiss/faiss/utils/rabitq_simd.h +57 -536
- data/vendor/faiss/faiss/utils/random.cpp +6 -6
- data/vendor/faiss/faiss/utils/simd_impl/IVFFlatScanner-inl.h +51 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_aarch64.cpp +5 -1
- data/vendor/faiss/faiss/utils/simd_impl/distances_arm_sve.cpp +213 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_autovec-inl.h +163 -10
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +250 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +7 -4
- data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +189 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_simdlib256.h +195 -0
- data/vendor/faiss/faiss/utils/simd_impl/distances_sse-inl.h +2 -1
- data/vendor/faiss/faiss/utils/{distances_fused/simdlib_based.h → simd_impl/exhaustive_L2sqr_blas_cmax.h} +5 -10
- data/vendor/faiss/faiss/utils/simd_impl/hamming_impl.h +481 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_avx2.cpp +14 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_neon.cpp +14 -0
- data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +1085 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +355 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +477 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +55 -0
- data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +55 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_dispatch.h +32 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels.h +43 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx2.cpp +57 -0
- data/vendor/faiss/faiss/utils/simd_impl/super_kmeans_kernels_avx512.cpp +45 -0
- data/vendor/faiss/faiss/utils/simd_levels.cpp +17 -5
- data/vendor/faiss/faiss/utils/simd_levels.h +93 -1
- data/vendor/faiss/faiss/utils/sorting.cpp +48 -36
- data/vendor/faiss/faiss/utils/utils.cpp +5 -5
- data/vendor/faiss/faiss/utils/utils.h +3 -3
- metadata +119 -34
- data/vendor/faiss/faiss/impl/RaBitQStats.cpp +0 -29
- data/vendor/faiss/faiss/impl/RaBitQStats.h +0 -56
- data/vendor/faiss/faiss/impl/pq4_fast_scan.h +0 -224
- data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +0 -230
- data/vendor/faiss/faiss/utils/approx_topk/approx_topk.h +0 -84
- data/vendor/faiss/faiss/utils/approx_topk/avx2-inl.h +0 -196
- data/vendor/faiss/faiss/utils/approx_topk/mode.h +0 -34
- data/vendor/faiss/faiss/utils/distances_fused/avx512.h +0 -36
- data/vendor/faiss/faiss/utils/extra_distances-inl.h +0 -235
- data/vendor/faiss/faiss/utils/hamming_distance/avx2-inl.h +0 -462
- data/vendor/faiss/faiss/utils/hamming_distance/avx512-inl.h +0 -490
- data/vendor/faiss/faiss/utils/hamming_distance/generic-inl.h +0 -449
- data/vendor/faiss/faiss/utils/hamming_distance/hamdis-inl.h +0 -87
- data/vendor/faiss/faiss/utils/hamming_distance/neon-inl.h +0 -524
- data/vendor/faiss/faiss/utils/simdlib.h +0 -42
- data/vendor/faiss/faiss/utils/simdlib_avx512.h +0 -365
- /data/ext/faiss/{utils_rb.h → utils.h} +0 -0
|
@@ -58,7 +58,7 @@ struct Level1Quantizer {
|
|
|
58
58
|
void encode_listno(idx_t list_no, uint8_t* code) const;
|
|
59
59
|
idx_t decode_listno(const uint8_t* code) const;
|
|
60
60
|
|
|
61
|
-
Level1Quantizer(Index*
|
|
61
|
+
Level1Quantizer(Index* quantizer_in, size_t nlist_in);
|
|
62
62
|
|
|
63
63
|
Level1Quantizer();
|
|
64
64
|
|
|
@@ -68,6 +68,25 @@ struct Level1Quantizer {
|
|
|
68
68
|
struct SearchParametersIVF : SearchParameters {
|
|
69
69
|
size_t nprobe = 1; ///< number of probes at query time
|
|
70
70
|
size_t max_codes = 0; ///< max nb of codes to visit to do a query
|
|
71
|
+
|
|
72
|
+
/// FastScan k-NN only: maximum number of inverted lists to visit.
|
|
73
|
+
/// 0 means unlimited, i.e. bounded only by nprobe. When set together
|
|
74
|
+
/// with max_codes, either budget may stop the scan. With
|
|
75
|
+
/// ensure_topk_full, this limit is treated as at least k lists.
|
|
76
|
+
size_t max_lists_num = 0;
|
|
77
|
+
|
|
78
|
+
/// For k-NN search, make small early-stop budgets less aggressive:
|
|
79
|
+
/// max_codes is treated as at least k post-IDSelector scans. Supported
|
|
80
|
+
/// by generic IVF in parallel_mode 0 and 3, and by FastScan k-NN
|
|
81
|
+
/// implementations 10 and 11.
|
|
82
|
+
bool ensure_topk_full = false;
|
|
83
|
+
|
|
84
|
+
/// Range-search only: stop after this many consecutive probed lists add
|
|
85
|
+
/// no in-radius results. 0 disables the heuristic. This trades recall
|
|
86
|
+
/// for less work. Supported in parallel_mode 0; FastScan range search
|
|
87
|
+
/// uses implementation 10 for this option.
|
|
88
|
+
size_t max_empty_result_buckets = 0;
|
|
89
|
+
|
|
71
90
|
SearchParameters* quantizer_params = nullptr;
|
|
72
91
|
/// context object to pass to InvertedLists
|
|
73
92
|
void* inverted_list_context = nullptr;
|
|
@@ -86,8 +105,10 @@ struct IndexIVFInterface : Level1Quantizer {
|
|
|
86
105
|
size_t nprobe = 1; ///< number of probes at query time
|
|
87
106
|
size_t max_codes = 0; ///< max nb of codes to visit to do a query
|
|
88
107
|
|
|
89
|
-
explicit IndexIVFInterface(
|
|
90
|
-
|
|
108
|
+
explicit IndexIVFInterface(
|
|
109
|
+
Index* quantizer_in = nullptr,
|
|
110
|
+
size_t nlist_in = 0)
|
|
111
|
+
: Level1Quantizer(quantizer_in, nlist_in) {}
|
|
91
112
|
|
|
92
113
|
/** search a set of vectors, that are pre-quantized by the IVF
|
|
93
114
|
* quantizer. Fill in the corresponding heaps with the query
|
|
@@ -203,12 +224,12 @@ struct IndexIVF : Index, IndexIVFInterface {
|
|
|
203
224
|
* identifier.
|
|
204
225
|
*/
|
|
205
226
|
IndexIVF(
|
|
206
|
-
Index*
|
|
207
|
-
size_t
|
|
208
|
-
size_t
|
|
209
|
-
size_t
|
|
227
|
+
Index* quantizer_in,
|
|
228
|
+
size_t d_in,
|
|
229
|
+
size_t nlist_in,
|
|
230
|
+
size_t code_size_in,
|
|
210
231
|
MetricType metric = METRIC_L2,
|
|
211
|
-
bool
|
|
232
|
+
bool own_invlists_in = true);
|
|
212
233
|
|
|
213
234
|
void reset() override;
|
|
214
235
|
|
|
@@ -484,9 +505,9 @@ struct InvertedListScanner {
|
|
|
484
505
|
const IDSelector* sel;
|
|
485
506
|
|
|
486
507
|
InvertedListScanner(
|
|
487
|
-
bool
|
|
488
|
-
const IDSelector*
|
|
489
|
-
: store_pairs(
|
|
508
|
+
bool store_pairs_in = false,
|
|
509
|
+
const IDSelector* sel_in = nullptr)
|
|
510
|
+
: store_pairs(store_pairs_in), sel(sel_in) {}
|
|
490
511
|
|
|
491
512
|
/// used in default implementation of scan_codes
|
|
492
513
|
size_t code_size = 0;
|
|
@@ -512,7 +533,7 @@ struct InvertedListScanner {
|
|
|
512
533
|
* @param k heap size
|
|
513
534
|
* @return number of heap updates performed
|
|
514
535
|
*/
|
|
515
|
-
|
|
536
|
+
size_t scan_codes(
|
|
516
537
|
size_t n,
|
|
517
538
|
const uint8_t* codes,
|
|
518
539
|
const idx_t* ids,
|
|
@@ -24,23 +24,23 @@ namespace faiss {
|
|
|
24
24
|
**************************************************************************************/
|
|
25
25
|
|
|
26
26
|
IndexIVFAdditiveQuantizer::IndexIVFAdditiveQuantizer(
|
|
27
|
-
AdditiveQuantizer*
|
|
28
|
-
Index*
|
|
29
|
-
size_t
|
|
30
|
-
size_t
|
|
27
|
+
AdditiveQuantizer* aq_,
|
|
28
|
+
Index* quantizer_,
|
|
29
|
+
size_t d_,
|
|
30
|
+
size_t nlist_,
|
|
31
31
|
MetricType metric,
|
|
32
|
-
bool
|
|
33
|
-
: IndexIVF(
|
|
32
|
+
bool own_invlists_)
|
|
33
|
+
: IndexIVF(quantizer_, d_, nlist_, 0, metric, own_invlists_), aq(aq_) {
|
|
34
34
|
by_residual = true;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
IndexIVFAdditiveQuantizer::IndexIVFAdditiveQuantizer(AdditiveQuantizer*
|
|
38
|
-
: IndexIVF(), aq(
|
|
37
|
+
IndexIVFAdditiveQuantizer::IndexIVFAdditiveQuantizer(AdditiveQuantizer* aq_)
|
|
38
|
+
: IndexIVF(), aq(aq_) {}
|
|
39
39
|
|
|
40
40
|
void IndexIVFAdditiveQuantizer::train_encoder(
|
|
41
41
|
idx_t n,
|
|
42
42
|
const float* x,
|
|
43
|
-
const idx_t* assign) {
|
|
43
|
+
const idx_t* /*assign*/) {
|
|
44
44
|
aq->train(n, x);
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -107,7 +107,7 @@ void IndexIVFAdditiveQuantizer::decode_vectors(
|
|
|
107
107
|
if (by_residual) {
|
|
108
108
|
int64_t list_no = listnos[i];
|
|
109
109
|
quantizer->reconstruct(list_no, residual.data());
|
|
110
|
-
for (
|
|
110
|
+
for (int j = 0; j < d; j++) {
|
|
111
111
|
xi[j] += residual[j];
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -133,7 +133,7 @@ void IndexIVFAdditiveQuantizer::sa_decode(
|
|
|
133
133
|
aq->decode(code + coarse_size, xi, 1);
|
|
134
134
|
if (by_residual) {
|
|
135
135
|
quantizer->reconstruct(list_no, residual.data());
|
|
136
|
-
for (
|
|
136
|
+
for (int j = 0; j < d; j++) {
|
|
137
137
|
xi[j] += residual[j];
|
|
138
138
|
}
|
|
139
139
|
}
|
|
@@ -171,27 +171,29 @@ struct AQInvertedListScanner : InvertedListScanner {
|
|
|
171
171
|
const AdditiveQuantizer& aq;
|
|
172
172
|
std::vector<float> tmp;
|
|
173
173
|
|
|
174
|
-
AQInvertedListScanner(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
174
|
+
AQInvertedListScanner(
|
|
175
|
+
const IndexIVFAdditiveQuantizer& ia_,
|
|
176
|
+
bool store_pairs_)
|
|
177
|
+
: ia(ia_), aq(*ia_.aq) {
|
|
178
|
+
this->store_pairs = store_pairs_;
|
|
179
|
+
this->code_size = ia_.code_size;
|
|
178
180
|
keep_max = is_similarity_metric(ia.metric_type);
|
|
179
181
|
tmp.resize(ia.d);
|
|
180
182
|
}
|
|
181
183
|
|
|
182
|
-
const float* q0;
|
|
184
|
+
const float* q0 = nullptr;
|
|
183
185
|
|
|
184
186
|
/// from now on we handle this query.
|
|
185
187
|
void set_query(const float* query_vector) override {
|
|
186
188
|
q0 = query_vector;
|
|
187
189
|
}
|
|
188
190
|
|
|
189
|
-
const float* q;
|
|
191
|
+
const float* q = nullptr;
|
|
190
192
|
/// following codes come from this inverted list
|
|
191
|
-
void set_list(idx_t
|
|
192
|
-
this->list_no =
|
|
193
|
+
void set_list(idx_t list_no_, float /*coarse_dis*/) override {
|
|
194
|
+
this->list_no = list_no_;
|
|
193
195
|
if (ia.metric_type == METRIC_L2 && ia.by_residual) {
|
|
194
|
-
ia.quantizer->compute_residual(q0, tmp.data(),
|
|
196
|
+
ia.quantizer->compute_residual(q0, tmp.data(), list_no_);
|
|
195
197
|
q = tmp.data();
|
|
196
198
|
} else {
|
|
197
199
|
q = q0;
|
|
@@ -204,15 +206,15 @@ struct AQInvertedListScanner : InvertedListScanner {
|
|
|
204
206
|
template <bool is_IP>
|
|
205
207
|
struct AQInvertedListScannerDecompress : AQInvertedListScanner {
|
|
206
208
|
AQInvertedListScannerDecompress(
|
|
207
|
-
const IndexIVFAdditiveQuantizer&
|
|
208
|
-
bool
|
|
209
|
-
: AQInvertedListScanner(
|
|
209
|
+
const IndexIVFAdditiveQuantizer& ia_,
|
|
210
|
+
bool store_pairs_)
|
|
211
|
+
: AQInvertedListScanner(ia_, store_pairs_) {}
|
|
210
212
|
|
|
211
213
|
float coarse_dis = 0;
|
|
212
214
|
|
|
213
215
|
/// following codes come from this inverted list
|
|
214
|
-
void set_list(idx_t
|
|
215
|
-
AQInvertedListScanner::set_list(
|
|
216
|
+
void set_list(idx_t list_no_, float coarse_dis_2) override {
|
|
217
|
+
AQInvertedListScanner::set_list(list_no_, coarse_dis_2);
|
|
216
218
|
if (ia.by_residual) {
|
|
217
219
|
this->coarse_dis = coarse_dis_2;
|
|
218
220
|
}
|
|
@@ -238,9 +240,9 @@ struct AQInvertedListScannerLUT : AQInvertedListScanner {
|
|
|
238
240
|
float distance_bias;
|
|
239
241
|
|
|
240
242
|
AQInvertedListScannerLUT(
|
|
241
|
-
const IndexIVFAdditiveQuantizer&
|
|
242
|
-
bool
|
|
243
|
-
: AQInvertedListScanner(
|
|
243
|
+
const IndexIVFAdditiveQuantizer& ia_,
|
|
244
|
+
bool store_pairs_)
|
|
245
|
+
: AQInvertedListScanner(ia_, store_pairs_) {
|
|
244
246
|
LUT.resize(aq.total_codebook_size);
|
|
245
247
|
tmp.resize(ia.d);
|
|
246
248
|
distance_bias = 0;
|
|
@@ -255,8 +257,8 @@ struct AQInvertedListScannerLUT : AQInvertedListScanner {
|
|
|
255
257
|
}
|
|
256
258
|
|
|
257
259
|
/// following codes come from this inverted list
|
|
258
|
-
void set_list(idx_t
|
|
259
|
-
AQInvertedListScanner::set_list(
|
|
260
|
+
void set_list(idx_t list_no_, float coarse_dis) override {
|
|
261
|
+
AQInvertedListScanner::set_list(list_no_, coarse_dis);
|
|
260
262
|
// TODO find a way to provide the nprobes together to do a matmul
|
|
261
263
|
// + precompute tables
|
|
262
264
|
aq.compute_LUT(1, q, LUT.data());
|
|
@@ -310,6 +312,7 @@ InvertedListScanner* IndexIVFAdditiveQuantizer::get_InvertedListScanner(
|
|
|
310
312
|
case AdditiveQuantizer::ST_norm_rq2x4:
|
|
311
313
|
A(ST_norm_cqint8)
|
|
312
314
|
#undef A
|
|
315
|
+
case AdditiveQuantizer::ST_count:
|
|
313
316
|
default:
|
|
314
317
|
FAISS_THROW_FMT(
|
|
315
318
|
"search type %d not supported", aq->search_type);
|
|
@@ -322,21 +325,21 @@ InvertedListScanner* IndexIVFAdditiveQuantizer::get_InvertedListScanner(
|
|
|
322
325
|
**************************************************************************************/
|
|
323
326
|
|
|
324
327
|
IndexIVFResidualQuantizer::IndexIVFResidualQuantizer(
|
|
325
|
-
Index*
|
|
326
|
-
size_t
|
|
327
|
-
size_t
|
|
328
|
+
Index* quantizer_,
|
|
329
|
+
size_t d_,
|
|
330
|
+
size_t nlist_,
|
|
328
331
|
const std::vector<size_t>& nbits,
|
|
329
332
|
MetricType metric,
|
|
330
333
|
Search_type_t search_type,
|
|
331
|
-
bool
|
|
334
|
+
bool own_invlists_)
|
|
332
335
|
: IndexIVFAdditiveQuantizer(
|
|
333
336
|
&rq,
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
+
quantizer_,
|
|
338
|
+
d_,
|
|
339
|
+
nlist_,
|
|
337
340
|
metric,
|
|
338
|
-
|
|
339
|
-
rq(
|
|
341
|
+
own_invlists_),
|
|
342
|
+
rq(d_, nbits, search_type) {
|
|
340
343
|
code_size = rq.code_size;
|
|
341
344
|
if (invlists) {
|
|
342
345
|
invlists->code_size = code_size;
|
|
@@ -347,22 +350,22 @@ IndexIVFResidualQuantizer::IndexIVFResidualQuantizer()
|
|
|
347
350
|
: IndexIVFAdditiveQuantizer(&rq) {}
|
|
348
351
|
|
|
349
352
|
IndexIVFResidualQuantizer::IndexIVFResidualQuantizer(
|
|
350
|
-
Index*
|
|
351
|
-
size_t
|
|
352
|
-
size_t
|
|
353
|
+
Index* quantizer_,
|
|
354
|
+
size_t d_,
|
|
355
|
+
size_t nlist_,
|
|
353
356
|
size_t M, /* number of subquantizers */
|
|
354
357
|
size_t nbits, /* number of bit per subvector index */
|
|
355
358
|
MetricType metric,
|
|
356
359
|
Search_type_t search_type,
|
|
357
|
-
bool
|
|
360
|
+
bool own_invlists_)
|
|
358
361
|
: IndexIVFResidualQuantizer(
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
+
quantizer_,
|
|
363
|
+
d_,
|
|
364
|
+
nlist_,
|
|
362
365
|
std::vector<size_t>(M, nbits),
|
|
363
366
|
metric,
|
|
364
367
|
search_type,
|
|
365
|
-
|
|
368
|
+
own_invlists_) {}
|
|
366
369
|
|
|
367
370
|
IndexIVFResidualQuantizer::~IndexIVFResidualQuantizer() = default;
|
|
368
371
|
|
|
@@ -371,22 +374,22 @@ IndexIVFResidualQuantizer::~IndexIVFResidualQuantizer() = default;
|
|
|
371
374
|
**************************************************************************************/
|
|
372
375
|
|
|
373
376
|
IndexIVFLocalSearchQuantizer::IndexIVFLocalSearchQuantizer(
|
|
374
|
-
Index*
|
|
375
|
-
size_t
|
|
376
|
-
size_t
|
|
377
|
+
Index* quantizer_,
|
|
378
|
+
size_t d_,
|
|
379
|
+
size_t nlist_,
|
|
377
380
|
size_t M, /* number of subquantizers */
|
|
378
381
|
size_t nbits, /* number of bit per subvector index */
|
|
379
382
|
MetricType metric,
|
|
380
383
|
Search_type_t search_type,
|
|
381
|
-
bool
|
|
384
|
+
bool own_invlists_)
|
|
382
385
|
: IndexIVFAdditiveQuantizer(
|
|
383
386
|
&lsq,
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
+
quantizer_,
|
|
388
|
+
d_,
|
|
389
|
+
nlist_,
|
|
387
390
|
metric,
|
|
388
|
-
|
|
389
|
-
lsq(
|
|
391
|
+
own_invlists_),
|
|
392
|
+
lsq(d_, M, nbits, search_type) {
|
|
390
393
|
code_size = lsq.code_size;
|
|
391
394
|
if (invlists) {
|
|
392
395
|
invlists->code_size = code_size;
|
|
@@ -403,23 +406,23 @@ IndexIVFLocalSearchQuantizer::~IndexIVFLocalSearchQuantizer() = default;
|
|
|
403
406
|
**************************************************************************************/
|
|
404
407
|
|
|
405
408
|
IndexIVFProductResidualQuantizer::IndexIVFProductResidualQuantizer(
|
|
406
|
-
Index*
|
|
407
|
-
size_t
|
|
408
|
-
size_t
|
|
409
|
+
Index* quantizer_,
|
|
410
|
+
size_t d_,
|
|
411
|
+
size_t nlist_,
|
|
409
412
|
size_t nsplits,
|
|
410
413
|
size_t Msub,
|
|
411
414
|
size_t nbits,
|
|
412
415
|
MetricType metric,
|
|
413
416
|
Search_type_t search_type,
|
|
414
|
-
bool
|
|
417
|
+
bool own_invlists_)
|
|
415
418
|
: IndexIVFAdditiveQuantizer(
|
|
416
419
|
&prq,
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
+
quantizer_,
|
|
421
|
+
d_,
|
|
422
|
+
nlist_,
|
|
420
423
|
metric,
|
|
421
|
-
|
|
422
|
-
prq(
|
|
424
|
+
own_invlists_),
|
|
425
|
+
prq(d_, nsplits, Msub, nbits, search_type) {
|
|
423
426
|
code_size = prq.code_size;
|
|
424
427
|
if (invlists) {
|
|
425
428
|
invlists->code_size = code_size;
|
|
@@ -436,23 +439,23 @@ IndexIVFProductResidualQuantizer::~IndexIVFProductResidualQuantizer() = default;
|
|
|
436
439
|
**************************************************************************************/
|
|
437
440
|
|
|
438
441
|
IndexIVFProductLocalSearchQuantizer::IndexIVFProductLocalSearchQuantizer(
|
|
439
|
-
Index*
|
|
440
|
-
size_t
|
|
441
|
-
size_t
|
|
442
|
+
Index* quantizer_,
|
|
443
|
+
size_t d_,
|
|
444
|
+
size_t nlist_,
|
|
442
445
|
size_t nsplits,
|
|
443
446
|
size_t Msub,
|
|
444
447
|
size_t nbits,
|
|
445
448
|
MetricType metric,
|
|
446
449
|
Search_type_t search_type,
|
|
447
|
-
bool
|
|
450
|
+
bool own_invlists_)
|
|
448
451
|
: IndexIVFAdditiveQuantizer(
|
|
449
452
|
&plsq,
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
+
quantizer_,
|
|
454
|
+
d_,
|
|
455
|
+
nlist_,
|
|
453
456
|
metric,
|
|
454
|
-
|
|
455
|
-
plsq(
|
|
457
|
+
own_invlists_),
|
|
458
|
+
plsq(d_, nsplits, Msub, nbits, search_type) {
|
|
456
459
|
code_size = plsq.code_size;
|
|
457
460
|
if (invlists) {
|
|
458
461
|
invlists->code_size = code_size;
|