faiss 0.6.1 → 0.6.3

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.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/lib/faiss/version.rb +1 -1
  4. data/vendor/faiss/faiss/AutoTune.cpp +3 -1
  5. data/vendor/faiss/faiss/Clustering.cpp +9 -1
  6. data/vendor/faiss/faiss/IVFlib.cpp +14 -3
  7. data/vendor/faiss/faiss/Index.h +2 -2
  8. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +9 -10
  9. data/vendor/faiss/faiss/IndexAdditiveQuantizerFastScan.cpp +2 -3
  10. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +1 -2
  11. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +10 -12
  12. data/vendor/faiss/faiss/IndexBinaryHash.cpp +5 -9
  13. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +5 -7
  14. data/vendor/faiss/faiss/IndexEDEN.cpp +273 -0
  15. data/vendor/faiss/faiss/IndexEDEN.h +57 -0
  16. data/vendor/faiss/faiss/IndexFastScan.cpp +15 -4
  17. data/vendor/faiss/faiss/IndexFlat.cpp +13 -50
  18. data/vendor/faiss/faiss/IndexHNSW.cpp +177 -148
  19. data/vendor/faiss/faiss/IndexIDMap.cpp +16 -3
  20. data/vendor/faiss/faiss/IndexIDMap.h +2 -0
  21. data/vendor/faiss/faiss/IndexIVF.cpp +19 -8
  22. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +3 -3
  23. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizerFastScan.cpp +3 -4
  24. data/vendor/faiss/faiss/IndexIVFEDEN.cpp +302 -0
  25. data/vendor/faiss/faiss/IndexIVFEDEN.h +70 -0
  26. data/vendor/faiss/faiss/IndexIVFFastScan.cpp +5 -6
  27. data/vendor/faiss/faiss/IndexIVFFlat.cpp +6 -5
  28. data/vendor/faiss/faiss/IndexIVFFlatPanorama.cpp +3 -3
  29. data/vendor/faiss/faiss/IndexIVFIndependentQuantizer.cpp +1 -1
  30. data/vendor/faiss/faiss/IndexIVFPQ.cpp +42 -25
  31. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +0 -1
  32. data/vendor/faiss/faiss/IndexIVFPQR.cpp +2 -3
  33. data/vendor/faiss/faiss/IndexIVFRaBitQ.cpp +23 -62
  34. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.cpp +180 -76
  35. data/vendor/faiss/faiss/IndexIVFRaBitQFastScan.h +5 -4
  36. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +8 -6
  37. data/vendor/faiss/faiss/IndexLSH.cpp +2 -3
  38. data/vendor/faiss/faiss/IndexLattice.cpp +5 -0
  39. data/vendor/faiss/faiss/IndexNNDescent.cpp +10 -3
  40. data/vendor/faiss/faiss/IndexNSG.cpp +8 -4
  41. data/vendor/faiss/faiss/IndexPQ.cpp +6 -8
  42. data/vendor/faiss/faiss/IndexPreTransform.cpp +15 -0
  43. data/vendor/faiss/faiss/IndexRaBitQ.cpp +2 -2
  44. data/vendor/faiss/faiss/IndexRaBitQFastScan.cpp +1 -2
  45. data/vendor/faiss/faiss/IndexRaBitQFastScan.h +5 -1
  46. data/vendor/faiss/faiss/IndexRefine.cpp +30 -1
  47. data/vendor/faiss/faiss/IndexReplicas.cpp +1 -2
  48. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +68 -6
  49. data/vendor/faiss/faiss/IndexScalarQuantizer.h +10 -0
  50. data/vendor/faiss/faiss/IndexShards.cpp +2 -2
  51. data/vendor/faiss/faiss/IndexShardsIVF.cpp +2 -2
  52. data/vendor/faiss/faiss/MetaIndexes.cpp +2 -4
  53. data/vendor/faiss/faiss/SuperKMeans.cpp +256 -240
  54. data/vendor/faiss/faiss/SuperKMeans.h +30 -0
  55. data/vendor/faiss/faiss/VectorTransform.cpp +33 -2
  56. data/vendor/faiss/faiss/clone_index.cpp +5 -0
  57. data/vendor/faiss/faiss/cppcontrib/SaDecodeKernels.h +1 -1
  58. data/vendor/faiss/faiss/cppcontrib/sa_decode/Level2-neon-inl.h +902 -12
  59. data/vendor/faiss/faiss/cppcontrib/sa_decode/PQ-neon-inl.h +702 -10
  60. data/vendor/faiss/faiss/factory_tools.cpp +51 -4
  61. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +11 -11
  62. data/vendor/faiss/faiss/gpu/GpuIndex.h +34 -11
  63. data/vendor/faiss/faiss/gpu/GpuIndexCagra.h +47 -0
  64. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +17 -0
  65. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +16 -0
  66. data/vendor/faiss/faiss/gpu/GpuResources.h +3 -2
  67. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +11 -12
  68. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +3 -3
  69. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +1 -1
  70. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +2 -2
  71. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +180 -0
  72. data/vendor/faiss/faiss/gpu_metal/MetalDistance.h +87 -0
  73. data/vendor/faiss/faiss/gpu_metal/MetalIndex.h +7 -0
  74. data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFFlat.h +177 -0
  75. data/vendor/faiss/faiss/gpu_metal/MetalIndexIVFPQ.h +88 -0
  76. data/vendor/faiss/faiss/gpu_metal/MetalKernels.h +48 -3
  77. data/vendor/faiss/faiss/gpu_metal/MetalPythonBridge.h +45 -0
  78. data/vendor/faiss/faiss/gpu_metal/impl/MetalIVFFlat.h +193 -0
  79. data/vendor/faiss/faiss/gpu_metal/impl/MetalIVFPQ.h +134 -0
  80. data/vendor/faiss/faiss/impl/ClusteringInitialization.cpp +2 -2
  81. data/vendor/faiss/faiss/impl/DistanceComputer.h +34 -0
  82. data/vendor/faiss/faiss/impl/EDENQuantizer.h +119 -0
  83. data/vendor/faiss/faiss/impl/HNSW.cpp +658 -344
  84. data/vendor/faiss/faiss/impl/HNSW.h +51 -13
  85. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +2 -2
  86. data/vendor/faiss/faiss/impl/NSG.cpp +18 -12
  87. data/vendor/faiss/faiss/impl/Panorama.h +20 -7
  88. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +152 -84
  89. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +59 -24
  90. data/vendor/faiss/faiss/impl/RaBitQUtils.cpp +45 -37
  91. data/vendor/faiss/faiss/impl/RaBitQUtils.h +35 -0
  92. data/vendor/faiss/faiss/impl/RaBitQuantizer.cpp +175 -68
  93. data/vendor/faiss/faiss/impl/RaBitQuantizer.h +19 -0
  94. data/vendor/faiss/faiss/impl/RaBitQuantizerMultiBit.cpp +2 -11
  95. data/vendor/faiss/faiss/impl/ResultHandler.h +26 -31
  96. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +522 -58
  97. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +70 -0
  98. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +2 -2
  99. data/vendor/faiss/faiss/impl/VisitedTable.cpp +33 -13
  100. data/vendor/faiss/faiss/impl/VisitedTable.h +88 -33
  101. data/vendor/faiss/faiss/impl/binary_hamming/IndexBinaryIVF_impl.h +1 -1
  102. data/vendor/faiss/faiss/impl/binary_hamming/avx2.cpp +4 -4
  103. data/vendor/faiss/faiss/impl/fast_scan/dispatching.h +38 -3
  104. data/vendor/faiss/faiss/impl/hnsw/LockVector.cpp +1 -1
  105. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.cpp +35 -43
  106. data/vendor/faiss/faiss/impl/hnsw/MinimaxHeap.h +64 -15
  107. data/vendor/faiss/faiss/impl/hnsw/avx2.cpp +86 -40
  108. data/vendor/faiss/faiss/impl/hnsw/avx512.cpp +81 -50
  109. data/vendor/faiss/faiss/impl/index_read.cpp +476 -75
  110. data/vendor/faiss/faiss/impl/index_write.cpp +56 -4
  111. data/vendor/faiss/faiss/impl/io_macros.h +25 -0
  112. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +8 -9
  113. data/vendor/faiss/faiss/impl/platform_macros.h +15 -9
  114. data/vendor/faiss/faiss/impl/polysemous_training/avx512.cpp +284 -0
  115. data/vendor/faiss/faiss/impl/polysemous_training/dispatch.h +115 -0
  116. data/vendor/faiss/faiss/impl/pq_code_distance/IVFPQ_QueryTables.cpp +0 -1
  117. data/vendor/faiss/faiss/impl/pq_code_distance/PQDistanceComputer_impl.h +26 -15
  118. data/vendor/faiss/faiss/impl/pq_code_distance/avx2.cpp +6 -4
  119. data/vendor/faiss/faiss/impl/pq_code_distance/avx512.cpp +2 -0
  120. data/vendor/faiss/faiss/impl/pq_code_distance/neon.cpp +2 -0
  121. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-generic.cpp +20 -0
  122. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-inl.h +36 -0
  123. data/vendor/faiss/faiss/impl/pq_code_distance/pq_code_distance-sve.cpp +5 -0
  124. data/vendor/faiss/faiss/impl/pq_code_distance/pq_scan_impl.h +105 -0
  125. data/vendor/faiss/faiss/impl/pq_code_distance/rvv.cpp +2 -0
  126. data/vendor/faiss/faiss/impl/result_handler/ResultHandler.cpp +195 -0
  127. data/vendor/faiss/faiss/impl/result_handler/avx2.cpp +133 -0
  128. data/vendor/faiss/faiss/impl/result_handler/avx512.cpp +281 -0
  129. data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx2.cpp +72 -0
  130. data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer-avx512.cpp +228 -0
  131. data/vendor/faiss/faiss/impl/scalar_quantizer/EDENQuantizer.cpp +882 -0
  132. data/vendor/faiss/faiss/impl/scalar_quantizer/distance_computers.h +6 -0
  133. data/vendor/faiss/faiss/impl/scalar_quantizer/quantizers.h +336 -26
  134. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx2.cpp +331 -32
  135. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-impl.h +553 -0
  136. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512-spr.cpp +558 -0
  137. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-avx512.cpp +284 -45
  138. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-dispatch.h +502 -3
  139. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-neon.cpp +157 -32
  140. data/vendor/faiss/faiss/impl/scalar_quantizer/sq-rvv.cpp +26 -0
  141. data/vendor/faiss/faiss/impl/simd_dispatch.h +86 -8
  142. data/vendor/faiss/faiss/index_factory.cpp +37 -7
  143. data/vendor/faiss/faiss/index_io.h +16 -0
  144. data/vendor/faiss/faiss/invlists/DirectMap.cpp +5 -2
  145. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +15 -15
  146. data/vendor/faiss/faiss/invlists/InvertedLists.h +2 -2
  147. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +19 -4
  148. data/vendor/faiss/faiss/python/python_callbacks.cpp +3 -1
  149. data/vendor/faiss/faiss/svs/IndexSVSFaissUtils.h +60 -0
  150. data/vendor/faiss/faiss/svs/IndexSVSFlat.cpp +26 -1
  151. data/vendor/faiss/faiss/svs/IndexSVSFlat.h +13 -0
  152. data/vendor/faiss/faiss/svs/IndexSVSIVF.cpp +1 -1
  153. data/vendor/faiss/faiss/svs/IndexSVSIVFLeanVec.cpp +1 -1
  154. data/vendor/faiss/faiss/svs/IndexSVSVamana.cpp +150 -23
  155. data/vendor/faiss/faiss/svs/IndexSVSVamana.h +30 -7
  156. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.cpp +3 -2
  157. data/vendor/faiss/faiss/svs/IndexSVSVamanaLVQ.h +2 -1
  158. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.cpp +65 -25
  159. data/vendor/faiss/faiss/svs/IndexSVSVamanaLeanVec.h +3 -2
  160. data/vendor/faiss/faiss/utils/approx_topk_hamming/approx_topk_hamming.h +1 -1
  161. data/vendor/faiss/faiss/utils/bf16.h +34 -0
  162. data/vendor/faiss/faiss/utils/distances.cpp +14 -2
  163. data/vendor/faiss/faiss/utils/distances_simd.cpp +4 -4
  164. data/vendor/faiss/faiss/utils/extra_distances.cpp +4 -14
  165. data/vendor/faiss/faiss/utils/extra_distances.h +1 -2
  166. data/vendor/faiss/faiss/utils/hamming.cpp +9 -9
  167. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx2.cpp +2 -1
  168. data/vendor/faiss/faiss/utils/hamming_distance/hamming_avx512_spr.cpp +15 -0
  169. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512.h +6 -30
  170. data/vendor/faiss/faiss/utils/hamming_distance/hamming_computer-avx512_spr.h +171 -0
  171. data/vendor/faiss/faiss/utils/partitioning.cpp +0 -2
  172. data/vendor/faiss/faiss/utils/quantize_lut.cpp +29 -8
  173. data/vendor/faiss/faiss/utils/rabitq_simd.h +202 -0
  174. data/vendor/faiss/faiss/utils/simd_impl/distances_avx2.cpp +0 -1
  175. data/vendor/faiss/faiss/utils/simd_impl/distances_avx512.cpp +263 -15
  176. data/vendor/faiss/faiss/utils/simd_impl/distances_rvv.cpp +160 -18
  177. data/vendor/faiss/faiss/utils/simd_impl/partitioning_simdlib256.h +14 -68
  178. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx2.cpp +245 -0
  179. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512.cpp +273 -0
  180. data/vendor/faiss/faiss/utils/simd_impl/rabitq_avx512_spr.cpp +435 -0
  181. data/vendor/faiss/faiss/utils/simd_impl/rabitq_neon.cpp +11 -0
  182. data/vendor/faiss/faiss/utils/simd_impl/rabitq_rvv.cpp +143 -6
  183. data/vendor/faiss/faiss/utils/simd_levels.cpp +56 -2
  184. data/vendor/faiss/faiss/utils/simd_levels.h +14 -0
  185. data/vendor/faiss/faiss/utils/utils.cpp +9 -27
  186. metadata +27 -2
@@ -0,0 +1,57 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <faiss/IndexFlatCodes.h>
11
+ #include <faiss/impl/EDENQuantizer.h>
12
+
13
+ namespace faiss {
14
+
15
+ struct IndexEDEN : IndexFlatCodes {
16
+ ScalarQuantizer sq;
17
+ EDENScaleType scale_type = EDENScaleType_UNBIASED;
18
+
19
+ // Center of all training points. Random rotation, if desired, is expected
20
+ // to be supplied externally via IndexPreTransform.
21
+ std::vector<float> center;
22
+
23
+ IndexEDEN();
24
+
25
+ // Factory strings: EDEN, EDEN<n>, EDENBIASED, EDEN<n>BIASED.
26
+ // <n> is the Lloyd-Max bit budget, 1..8. The default is EDEN's original
27
+ // unbiased scale; the BIASED suffix selects the MSE-minimizing scale.
28
+ explicit IndexEDEN(
29
+ idx_t d,
30
+ MetricType metric = METRIC_L2,
31
+ uint8_t nb_bits = 1,
32
+ EDENScaleType scale_type = EDENScaleType_UNBIASED);
33
+
34
+ void train(idx_t n, const float* x) override;
35
+
36
+ void sa_encode(idx_t n, const float* x, uint8_t* bytes) const override;
37
+ void sa_decode(idx_t n, const uint8_t* bytes, float* x) const override;
38
+
39
+ FlatCodesDistanceComputer* get_FlatCodesDistanceComputer() const override;
40
+
41
+ void search(
42
+ idx_t n,
43
+ const float* x,
44
+ idx_t k,
45
+ float* distances,
46
+ idx_t* labels,
47
+ const SearchParameters* params = nullptr) const override;
48
+
49
+ void range_search(
50
+ idx_t n,
51
+ const float* x,
52
+ float radius,
53
+ RangeSearchResult* result,
54
+ const SearchParameters* params = nullptr) const override;
55
+ };
56
+
57
+ } // namespace faiss
@@ -8,6 +8,7 @@
8
8
  #include <faiss/IndexFastScan.h>
9
9
 
10
10
  #include <omp.h>
11
+ #include <algorithm>
11
12
  #include <cstring>
12
13
  #include <memory>
13
14
 
@@ -266,8 +267,7 @@ void IndexFastScan::search(
266
267
  float* distances,
267
268
  idx_t* labels,
268
269
  const SearchParameters* params) const {
269
- FAISS_THROW_IF_NOT_MSG(
270
- !params, "search params not supported for this index");
270
+ FAISS_THROW_IF_MSG(params, "search params not supported for this index");
271
271
  FAISS_THROW_IF_NOT(k > 0);
272
272
 
273
273
  FastScanDistancePostProcessing empty_context{};
@@ -316,7 +316,7 @@ void IndexFastScan::search_dispatch_implem(
316
316
  if (implem == 1) {
317
317
  FAISS_THROW_MSG("not implemented");
318
318
  } else if (implem == 2 || implem == 3 || implem == 4) {
319
- FAISS_THROW_IF_NOT(orig_codes != nullptr);
319
+ FAISS_THROW_IF_NOT(orig_codes);
320
320
  search_implem_234<Cfloat>(n, x, k, distances, labels, context);
321
321
  } else if (impl >= 12 && impl <= 15) {
322
322
  FAISS_THROW_IF_NOT(ntotal < INT_MAX);
@@ -617,8 +617,19 @@ template void IndexFastScan::search_dispatch_implem<false>(
617
617
  const FastScanDistancePostProcessing& context) const;
618
618
 
619
619
  void IndexFastScan::reconstruct(idx_t key, float* recons) const {
620
- std::vector<uint8_t> code(code_size, 0);
620
+ FAISS_THROW_IF_NOT_FMT(
621
+ key >= 0 && key < ntotal,
622
+ "IndexFastScan::reconstruct: key %zd out of range (ntotal=%zd)",
623
+ (size_t)key,
624
+ (size_t)ntotal);
621
625
  std::unique_ptr<CodePacker> packer(get_CodePacker());
626
+ size_t block_no = (size_t)key / packer->nvec;
627
+ FAISS_THROW_IF_NOT_MSG(
628
+ mul_no_overflow(
629
+ block_no + 1, packer->block_size, "IndexFastScan codes") <=
630
+ codes.size(),
631
+ "IndexFastScan::reconstruct: packed codes buffer too small");
632
+ std::vector<uint8_t> code(std::max(code_size, packer->code_size), 0);
622
633
  packer->unpack_1(codes.data(), key, code.data());
623
634
  sa_decode(1, code.data(), recons);
624
635
  }
@@ -77,7 +77,8 @@ void IndexFlat::range_search(
77
77
  range_search_L2sqr(x, get_xb(), d, n, ntotal, radius, result, sel);
78
78
  break;
79
79
  default:
80
- FAISS_THROW_MSG("metric type not supported");
80
+ IndexFlatCodes::range_search(n, x, radius, result, params);
81
+ break;
81
82
  }
82
83
  }
83
84
 
@@ -105,13 +106,8 @@ namespace {
105
106
  template <SIMDLevel SL>
106
107
  struct FlatL2Dis : FlatCodesDistanceComputer {
107
108
  size_t d;
108
- idx_t nb;
109
- const float* b;
110
- size_t ndis;
111
- size_t npartial_dot_products;
112
109
 
113
110
  float distance_to_code(const uint8_t* code) final {
114
- ndis++;
115
111
  return fvec_L2sqr<SL>(q, (float*)code, d);
116
112
  }
117
113
 
@@ -119,25 +115,21 @@ struct FlatL2Dis : FlatCodesDistanceComputer {
119
115
  const idx_t i,
120
116
  const uint32_t offset,
121
117
  const uint32_t num_components) final override {
122
- npartial_dot_products++;
118
+ const float* b = (const float*)this->codes;
123
119
  return fvec_inner_product<SL>(
124
120
  q + offset, b + i * d + offset, num_components);
125
121
  }
126
122
 
127
123
  float symmetric_dis(idx_t i, idx_t j) override {
124
+ const float* b = (const float*)this->codes;
128
125
  return fvec_L2sqr<SL>(b + j * d, b + i * d, d);
129
126
  }
130
127
 
131
- explicit FlatL2Dis(const IndexFlat& storage, const float* q_ = nullptr)
128
+ explicit FlatL2Dis(const IndexFlat& storage)
132
129
  : FlatCodesDistanceComputer(
133
130
  storage.codes.data(),
134
- storage.code_size,
135
- q_),
136
- d(storage.d),
137
- nb(storage.ntotal),
138
- b(storage.get_xb()),
139
- ndis(0),
140
- npartial_dot_products(0) {}
131
+ storage.code_size),
132
+ d(storage.d) {}
141
133
 
142
134
  void set_query(const float* x) override {
143
135
  q = x;
@@ -153,8 +145,6 @@ struct FlatL2Dis : FlatCodesDistanceComputer {
153
145
  float& dis1,
154
146
  float& dis2,
155
147
  float& dis3) final override {
156
- ndis += 4;
157
-
158
148
  // compute first, assign next
159
149
  const float* __restrict y0 =
160
150
  reinterpret_cast<const float*>(codes + idx0 * code_size);
@@ -187,8 +177,6 @@ struct FlatL2Dis : FlatCodesDistanceComputer {
187
177
  float& dp3,
188
178
  const uint32_t offset,
189
179
  const uint32_t num_components) final override {
190
- npartial_dot_products += 4;
191
-
192
180
  // compute first, assign next
193
181
  const float* __restrict y0 =
194
182
  reinterpret_cast<const float*>(codes + idx0 * code_size);
@@ -224,29 +212,21 @@ struct FlatL2Dis : FlatCodesDistanceComputer {
224
212
  template <SIMDLevel SL>
225
213
  struct FlatIPDis : FlatCodesDistanceComputer {
226
214
  size_t d;
227
- idx_t nb;
228
- const float* q;
229
- const float* b;
230
- size_t ndis;
231
215
 
232
216
  float symmetric_dis(idx_t i, idx_t j) final override {
217
+ const float* b = (const float*)this->codes;
233
218
  return fvec_inner_product<SL>(b + j * d, b + i * d, d);
234
219
  }
235
220
 
236
221
  float distance_to_code(const uint8_t* code) final override {
237
- ndis++;
238
222
  return fvec_inner_product<SL>(q, (const float*)code, d);
239
223
  }
240
224
 
241
- explicit FlatIPDis(const IndexFlat& storage, const float* q_in = nullptr)
225
+ explicit FlatIPDis(const IndexFlat& storage)
242
226
  : FlatCodesDistanceComputer(
243
227
  storage.codes.data(),
244
228
  storage.code_size),
245
- d(storage.d),
246
- nb(storage.ntotal),
247
- q(q_in),
248
- b(storage.get_xb()),
249
- ndis(0) {}
229
+ d(storage.d) {}
250
230
 
251
231
  void set_query(const float* x) override {
252
232
  q = x;
@@ -262,8 +242,6 @@ struct FlatIPDis : FlatCodesDistanceComputer {
262
242
  float& dis1,
263
243
  float& dis2,
264
244
  float& dis3) final override {
265
- ndis += 4;
266
-
267
245
  // compute first, assign next
268
246
  const float* __restrict y0 =
269
247
  reinterpret_cast<const float*>(codes + idx0 * code_size);
@@ -296,8 +274,7 @@ FlatCodesDistanceComputer* IndexFlat::get_FlatCodesDistanceComputer() const {
296
274
  } else if (metric_type == METRIC_INNER_PRODUCT) {
297
275
  with_simd_level([&]<SIMDLevel SL>() { dc = new FlatIPDis<SL>(*this); });
298
276
  } else {
299
- dc = get_extra_distance_computer(
300
- d, metric_type, metric_arg, ntotal, get_xb());
277
+ dc = get_extra_distance_computer(d, metric_type, metric_arg, get_xb());
301
278
  }
302
279
  return dc;
303
280
  }
@@ -327,16 +304,11 @@ namespace {
327
304
  template <SIMDLevel SL>
328
305
  struct FlatL2WithNormsDis : FlatCodesDistanceComputer {
329
306
  size_t d;
330
- idx_t nb;
331
- const float* q;
332
- const float* b;
333
- size_t ndis;
334
307
 
335
308
  const float* l2norms;
336
309
  float query_l2norm;
337
310
 
338
311
  float distance_to_code(const uint8_t* code) final override {
339
- ndis++;
340
312
  return fvec_L2sqr<SL>(q, (float*)code, d);
341
313
  }
342
314
 
@@ -361,17 +333,11 @@ struct FlatL2WithNormsDis : FlatCodesDistanceComputer {
361
333
  return l2norms[i] + l2norms[j] - 2 * dp0;
362
334
  }
363
335
 
364
- explicit FlatL2WithNormsDis(
365
- const IndexFlatL2& storage,
366
- const float* q_in = nullptr)
336
+ explicit FlatL2WithNormsDis(const IndexFlatL2& storage)
367
337
  : FlatCodesDistanceComputer(
368
338
  storage.codes.data(),
369
339
  storage.code_size),
370
340
  d(storage.d),
371
- nb(storage.ntotal),
372
- q(q_in),
373
- b(storage.get_xb()),
374
- ndis(0),
375
341
  l2norms(storage.cached_l2norms.data()),
376
342
  query_l2norm(0) {}
377
343
 
@@ -390,8 +356,6 @@ struct FlatL2WithNormsDis : FlatCodesDistanceComputer {
390
356
  float& dis1,
391
357
  float& dis2,
392
358
  float& dis3) final override {
393
- ndis += 4;
394
-
395
359
  // compute first, assign next
396
360
  const float* __restrict y0 =
397
361
  reinterpret_cast<const float*>(codes + idx0 * code_size);
@@ -487,8 +451,7 @@ void IndexFlat1D::search(
487
451
  float* distances,
488
452
  idx_t* labels,
489
453
  const SearchParameters* params) const {
490
- FAISS_THROW_IF_NOT_MSG(
491
- !params, "search params not supported for this index");
454
+ FAISS_THROW_IF_MSG(params, "search params not supported for this index");
492
455
  FAISS_THROW_IF_NOT(k > 0);
493
456
  FAISS_THROW_IF_NOT_MSG(
494
457
  perm.size() == static_cast<size_t>(ntotal),