faiss 0.1.7 → 0.2.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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +7 -7
  4. data/ext/faiss/ext.cpp +1 -1
  5. data/ext/faiss/extconf.rb +8 -2
  6. data/ext/faiss/index.cpp +102 -69
  7. data/ext/faiss/index_binary.cpp +24 -30
  8. data/ext/faiss/kmeans.cpp +20 -16
  9. data/ext/faiss/numo.hpp +867 -0
  10. data/ext/faiss/pca_matrix.cpp +13 -14
  11. data/ext/faiss/product_quantizer.cpp +23 -24
  12. data/ext/faiss/utils.cpp +10 -37
  13. data/ext/faiss/utils.h +2 -13
  14. data/lib/faiss/version.rb +1 -1
  15. data/lib/faiss.rb +0 -5
  16. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  17. data/vendor/faiss/faiss/AutoTune.h +55 -56
  18. data/vendor/faiss/faiss/Clustering.cpp +334 -195
  19. data/vendor/faiss/faiss/Clustering.h +88 -35
  20. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  21. data/vendor/faiss/faiss/IVFlib.h +48 -51
  22. data/vendor/faiss/faiss/Index.cpp +85 -103
  23. data/vendor/faiss/faiss/Index.h +54 -48
  24. data/vendor/faiss/faiss/Index2Layer.cpp +139 -164
  25. data/vendor/faiss/faiss/Index2Layer.h +22 -22
  26. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  27. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  28. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  29. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  30. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  31. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  32. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  33. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  34. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  35. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  36. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  37. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  38. data/vendor/faiss/faiss/IndexFlat.cpp +116 -147
  39. data/vendor/faiss/faiss/IndexFlat.h +35 -46
  40. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  41. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  42. data/vendor/faiss/faiss/IndexIVF.cpp +474 -454
  43. data/vendor/faiss/faiss/IndexIVF.h +146 -113
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +248 -250
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +457 -516
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +74 -66
  48. data/vendor/faiss/faiss/IndexIVFPQFastScan.cpp +406 -372
  49. data/vendor/faiss/faiss/IndexIVFPQFastScan.h +82 -57
  50. data/vendor/faiss/faiss/IndexIVFPQR.cpp +104 -102
  51. data/vendor/faiss/faiss/IndexIVFPQR.h +33 -28
  52. data/vendor/faiss/faiss/IndexIVFSpectralHash.cpp +125 -133
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +19 -21
  54. data/vendor/faiss/faiss/IndexLSH.cpp +75 -96
  55. data/vendor/faiss/faiss/IndexLSH.h +21 -26
  56. data/vendor/faiss/faiss/IndexLattice.cpp +42 -56
  57. data/vendor/faiss/faiss/IndexLattice.h +11 -16
  58. data/vendor/faiss/faiss/IndexNNDescent.cpp +231 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +303 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +405 -464
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -67
  64. data/vendor/faiss/faiss/IndexPQFastScan.cpp +143 -170
  65. data/vendor/faiss/faiss/IndexPQFastScan.h +46 -32
  66. data/vendor/faiss/faiss/IndexPreTransform.cpp +120 -150
  67. data/vendor/faiss/faiss/IndexPreTransform.h +33 -36
  68. data/vendor/faiss/faiss/IndexRefine.cpp +115 -131
  69. data/vendor/faiss/faiss/IndexRefine.h +22 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexResidual.cpp +291 -0
  73. data/vendor/faiss/faiss/IndexResidual.h +152 -0
  74. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +120 -155
  75. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -45
  76. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  77. data/vendor/faiss/faiss/IndexShards.h +85 -73
  78. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  79. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  80. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  81. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  82. data/vendor/faiss/faiss/MetricType.h +7 -7
  83. data/vendor/faiss/faiss/VectorTransform.cpp +652 -474
  84. data/vendor/faiss/faiss/VectorTransform.h +61 -89
  85. data/vendor/faiss/faiss/clone_index.cpp +77 -73
  86. data/vendor/faiss/faiss/clone_index.h +4 -9
  87. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  88. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  89. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +197 -170
  90. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  91. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  92. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  93. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  94. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  95. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  96. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  97. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  101. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  102. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  103. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  104. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  106. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  108. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  110. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  112. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  113. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  114. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  115. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  116. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  121. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  122. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  124. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  125. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  126. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  128. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  129. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  130. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  131. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +270 -0
  133. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +115 -0
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  135. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  136. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  137. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  138. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  139. data/vendor/faiss/faiss/impl/HNSW.cpp +595 -611
  140. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +672 -0
  142. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +172 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  144. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  145. data/vendor/faiss/faiss/impl/NSG.cpp +682 -0
  146. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  148. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  149. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  151. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +448 -0
  153. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +130 -0
  154. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +648 -701
  156. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  157. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  158. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  159. data/vendor/faiss/faiss/impl/index_read.cpp +547 -479
  160. data/vendor/faiss/faiss/impl/index_write.cpp +497 -407
  161. data/vendor/faiss/faiss/impl/io.cpp +75 -94
  162. data/vendor/faiss/faiss/impl/io.h +31 -41
  163. data/vendor/faiss/faiss/impl/io_macros.h +40 -29
  164. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  165. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  166. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  167. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  171. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  172. data/vendor/faiss/faiss/index_factory.cpp +269 -218
  173. data/vendor/faiss/faiss/index_factory.h +6 -7
  174. data/vendor/faiss/faiss/index_io.h +23 -26
  175. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  177. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  178. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  179. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  180. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  181. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  183. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  185. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  186. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  187. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  188. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  189. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  190. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  191. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  192. data/vendor/faiss/faiss/utils/distances.cpp +301 -310
  193. data/vendor/faiss/faiss/utils/distances.h +133 -118
  194. data/vendor/faiss/faiss/utils/distances_simd.cpp +456 -516
  195. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  196. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  197. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  198. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  199. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  200. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  201. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  202. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  203. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  204. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  205. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  206. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  207. data/vendor/faiss/faiss/utils/random.h +13 -16
  208. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  209. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  210. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  211. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  212. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  213. data/vendor/faiss/faiss/utils/utils.h +53 -48
  214. metadata +26 -12
  215. data/lib/faiss/index.rb +0 -20
  216. data/lib/faiss/index_binary.rb +0 -20
  217. data/lib/faiss/kmeans.rb +0 -15
  218. data/lib/faiss/pca_matrix.rb +0 -15
  219. data/lib/faiss/product_quantizer.rb +0 -22
@@ -5,49 +5,34 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- // -*- c++ -*-
9
-
10
8
  /* All distance functions for L2 and IP distances.
11
- * The actual functions are implemented in distances.cpp and distances_simd.cpp */
9
+ * The actual functions are implemented in distances.cpp and distances_simd.cpp
10
+ */
12
11
 
13
12
  #pragma once
14
13
 
15
14
  #include <stdint.h>
16
15
 
17
- #include <faiss/utils/Heap.h>
18
16
  #include <faiss/impl/platform_macros.h>
19
-
17
+ #include <faiss/utils/Heap.h>
20
18
 
21
19
  namespace faiss {
22
20
 
23
- /*********************************************************
21
+ /*********************************************************
24
22
  * Optimized distance/norm/inner prod computations
25
23
  *********************************************************/
26
24
 
27
-
28
25
  /// Squared L2 distance between two vectors
29
- float fvec_L2sqr (
30
- const float * x,
31
- const float * y,
32
- size_t d);
26
+ float fvec_L2sqr(const float* x, const float* y, size_t d);
33
27
 
34
28
  /// inner product
35
- float fvec_inner_product (
36
- const float * x,
37
- const float * y,
38
- size_t d);
29
+ float fvec_inner_product(const float* x, const float* y, size_t d);
39
30
 
40
31
  /// L1 distance
41
- float fvec_L1 (
42
- const float * x,
43
- const float * y,
44
- size_t d);
45
-
46
- float fvec_Linf (
47
- const float * x,
48
- const float * y,
49
- size_t d);
32
+ float fvec_L1(const float* x, const float* y, size_t d);
50
33
 
34
+ /// infinity distance
35
+ float fvec_Linf(const float* x, const float* y, size_t d);
51
36
 
52
37
  /** Compute pairwise distances between sets of vectors
53
38
  *
@@ -59,74 +44,83 @@ float fvec_Linf (
59
44
  * @param dis output distances (size nq * nb)
60
45
  * @param ldq,ldb, ldd strides for the matrices
61
46
  */
62
- void pairwise_L2sqr (int64_t d,
63
- int64_t nq, const float *xq,
64
- int64_t nb, const float *xb,
65
- float *dis,
66
- int64_t ldq = -1, int64_t ldb = -1, int64_t ldd = -1);
47
+ void pairwise_L2sqr(
48
+ int64_t d,
49
+ int64_t nq,
50
+ const float* xq,
51
+ int64_t nb,
52
+ const float* xb,
53
+ float* dis,
54
+ int64_t ldq = -1,
55
+ int64_t ldb = -1,
56
+ int64_t ldd = -1);
67
57
 
68
58
  /* compute the inner product between nx vectors x and one y */
69
- void fvec_inner_products_ny (
70
- float * ip, /* output inner product */
71
- const float * x,
72
- const float * y,
73
- size_t d, size_t ny);
59
+ void fvec_inner_products_ny(
60
+ float* ip, /* output inner product */
61
+ const float* x,
62
+ const float* y,
63
+ size_t d,
64
+ size_t ny);
74
65
 
75
66
  /* compute ny square L2 distance bewteen x and a set of contiguous y vectors */
76
- void fvec_L2sqr_ny (
77
- float * dis,
78
- const float * x,
79
- const float * y,
80
- size_t d, size_t ny);
81
-
67
+ void fvec_L2sqr_ny(
68
+ float* dis,
69
+ const float* x,
70
+ const float* y,
71
+ size_t d,
72
+ size_t ny);
82
73
 
83
74
  /** squared norm of a vector */
84
- float fvec_norm_L2sqr (const float * x,
85
- size_t d);
75
+ float fvec_norm_L2sqr(const float* x, size_t d);
86
76
 
87
77
  /** compute the L2 norms for a set of vectors
88
78
  *
89
- * @param ip output norms, size nx
79
+ * @param norms output norms, size nx
90
80
  * @param x set of vectors, size nx * d
91
81
  */
92
- void fvec_norms_L2 (float * ip, const float * x, size_t d, size_t nx);
82
+ void fvec_norms_L2(float* norms, const float* x, size_t d, size_t nx);
93
83
 
94
- /// same as fvec_norms_L2, but computes square norms
95
- void fvec_norms_L2sqr (float * ip, const float * x, size_t d, size_t nx);
84
+ /// same as fvec_norms_L2, but computes squared norms
85
+ void fvec_norms_L2sqr(float* norms, const float* x, size_t d, size_t nx);
96
86
 
97
87
  /* L2-renormalize a set of vector. Nothing done if the vector is 0-normed */
98
- void fvec_renorm_L2 (size_t d, size_t nx, float * x);
99
-
88
+ void fvec_renorm_L2(size_t d, size_t nx, float* x);
100
89
 
101
90
  /* This function exists because the Torch counterpart is extremly slow
102
91
  (not multi-threaded + unexpected overhead even in single thread).
103
92
  It is here to implement the usual property |x-y|^2=|x|^2+|y|^2-2<x|y> */
104
- void inner_product_to_L2sqr (float * dis,
105
- const float * nr1,
106
- const float * nr2,
107
- size_t n1, size_t n2);
93
+ void inner_product_to_L2sqr(
94
+ float* dis,
95
+ const float* nr1,
96
+ const float* nr2,
97
+ size_t n1,
98
+ size_t n2);
108
99
 
109
100
  /***************************************************************************
110
101
  * Compute a subset of distances
111
102
  ***************************************************************************/
112
103
 
113
- /* compute the inner product between x and a subset y of ny vectors,
114
- whose indices are given by idy. */
115
- void fvec_inner_products_by_idx (
116
- float * ip,
117
- const float * x,
118
- const float * y,
119
- const int64_t *ids,
120
- size_t d, size_t nx, size_t ny);
104
+ /* compute the inner product between x and a subset y of ny vectors,
105
+ whose indices are given by idy. */
106
+ void fvec_inner_products_by_idx(
107
+ float* ip,
108
+ const float* x,
109
+ const float* y,
110
+ const int64_t* ids,
111
+ size_t d,
112
+ size_t nx,
113
+ size_t ny);
121
114
 
122
115
  /* same but for a subset in y indexed by idsy (ny vectors in total) */
123
- void fvec_L2sqr_by_idx (
124
- float * dis,
125
- const float * x,
126
- const float * y,
127
- const int64_t *ids, /* ids of y vecs */
128
- size_t d, size_t nx, size_t ny);
129
-
116
+ void fvec_L2sqr_by_idx(
117
+ float* dis,
118
+ const float* x,
119
+ const float* y,
120
+ const int64_t* ids, /* ids of y vecs */
121
+ size_t d,
122
+ size_t nx,
123
+ size_t ny);
130
124
 
131
125
  /** compute dis[j] = L2sqr(x[ix[j]], y[iy[j]]) forall j=0..n-1
132
126
  *
@@ -136,18 +130,24 @@ void fvec_L2sqr_by_idx (
136
130
  * @param iy size n
137
131
  * @param dis size n
138
132
  */
139
- void pairwise_indexed_L2sqr (
140
- size_t d, size_t n,
141
- const float * x, const int64_t *ix,
142
- const float * y, const int64_t *iy,
143
- float *dis);
133
+ void pairwise_indexed_L2sqr(
134
+ size_t d,
135
+ size_t n,
136
+ const float* x,
137
+ const int64_t* ix,
138
+ const float* y,
139
+ const int64_t* iy,
140
+ float* dis);
144
141
 
145
142
  /* same for inner product */
146
- void pairwise_indexed_inner_product (
147
- size_t d, size_t n,
148
- const float * x, const int64_t *ix,
149
- const float * y, const int64_t *iy,
150
- float *dis);
143
+ void pairwise_indexed_inner_product(
144
+ size_t d,
145
+ size_t n,
146
+ const float* x,
147
+ const int64_t* ix,
148
+ const float* y,
149
+ const int64_t* iy,
150
+ float* dis);
151
151
 
152
152
  /***************************************************************************
153
153
  * KNN functions
@@ -171,46 +171,51 @@ FAISS_API extern int distance_compute_min_k_reservoir;
171
171
  * @param y database vectors, size ny * d
172
172
  * @param res result array, which also provides k. Sorted on output
173
173
  */
174
- void knn_inner_product (
175
- const float * x,
176
- const float * y,
177
- size_t d, size_t nx, size_t ny,
178
- float_minheap_array_t * res);
174
+ void knn_inner_product(
175
+ const float* x,
176
+ const float* y,
177
+ size_t d,
178
+ size_t nx,
179
+ size_t ny,
180
+ float_minheap_array_t* res);
179
181
 
180
182
  /** Same as knn_inner_product, for the L2 distance
181
183
  * @param y_norm2 norms for the y vectors (nullptr or size ny)
182
184
  */
183
- void knn_L2sqr (
184
- const float * x,
185
- const float * y,
186
- size_t d, size_t nx, size_t ny,
187
- float_maxheap_array_t * res,
188
- const float *y_norm2 = nullptr);
189
-
185
+ void knn_L2sqr(
186
+ const float* x,
187
+ const float* y,
188
+ size_t d,
189
+ size_t nx,
190
+ size_t ny,
191
+ float_maxheap_array_t* res,
192
+ const float* y_norm2 = nullptr);
190
193
 
191
194
  /* Find the nearest neighbors for nx queries in a set of ny vectors
192
195
  * indexed by ids. May be useful for re-ranking a pre-selected vector list
193
196
  */
194
- void knn_inner_products_by_idx (
195
- const float * x,
196
- const float * y,
197
- const int64_t * ids,
198
- size_t d, size_t nx, size_t ny,
199
- float_minheap_array_t * res);
200
-
201
- void knn_L2sqr_by_idx (
202
- const float * x,
203
- const float * y,
204
- const int64_t * ids,
205
- size_t d, size_t nx, size_t ny,
206
- float_maxheap_array_t * res);
197
+ void knn_inner_products_by_idx(
198
+ const float* x,
199
+ const float* y,
200
+ const int64_t* ids,
201
+ size_t d,
202
+ size_t nx,
203
+ size_t ny,
204
+ float_minheap_array_t* res);
205
+
206
+ void knn_L2sqr_by_idx(
207
+ const float* x,
208
+ const float* y,
209
+ const int64_t* ids,
210
+ size_t d,
211
+ size_t nx,
212
+ size_t ny,
213
+ float_maxheap_array_t* res);
207
214
 
208
215
  /***************************************************************************
209
216
  * Range search
210
217
  ***************************************************************************/
211
218
 
212
-
213
-
214
219
  /// Forward declaration, see AuxIndexStructures.h
215
220
  struct RangeSearchResult;
216
221
 
@@ -222,21 +227,24 @@ struct RangeSearchResult;
222
227
  * @param radius search radius around the x vectors
223
228
  * @param result result structure
224
229
  */
225
- void range_search_L2sqr (
226
- const float * x,
227
- const float * y,
228
- size_t d, size_t nx, size_t ny,
230
+ void range_search_L2sqr(
231
+ const float* x,
232
+ const float* y,
233
+ size_t d,
234
+ size_t nx,
235
+ size_t ny,
229
236
  float radius,
230
- RangeSearchResult *result);
237
+ RangeSearchResult* result);
231
238
 
232
239
  /// same as range_search_L2sqr for the inner product similarity
233
- void range_search_inner_product (
234
- const float * x,
235
- const float * y,
236
- size_t d, size_t nx, size_t ny,
240
+ void range_search_inner_product(
241
+ const float* x,
242
+ const float* y,
243
+ size_t d,
244
+ size_t nx,
245
+ size_t ny,
237
246
  float radius,
238
- RangeSearchResult *result);
239
-
247
+ RangeSearchResult* result);
240
248
 
241
249
  /***************************************************************************
242
250
  * PQ tables computations
@@ -244,9 +252,16 @@ void range_search_inner_product (
244
252
 
245
253
  /// specialized function for PQ2
246
254
  void compute_PQ_dis_tables_dsub2(
247
- size_t d, size_t ksub, const float *centroids,
248
- size_t nx, const float * x,
255
+ size_t d,
256
+ size_t ksub,
257
+ const float* centroids,
258
+ size_t nx,
259
+ const float* x,
249
260
  bool is_inner_product,
250
- float * dis_tables);
261
+ float* dis_tables);
262
+
263
+ /***************************************************************************
264
+ * Templatized versions of distance functions
265
+ ***************************************************************************/
251
266
 
252
267
  } // namespace faiss