faiss 0.2.0 → 0.2.4

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +7 -7
  5. data/ext/faiss/extconf.rb +6 -3
  6. data/ext/faiss/numo.hpp +4 -4
  7. data/ext/faiss/utils.cpp +1 -1
  8. data/ext/faiss/utils.h +1 -1
  9. data/lib/faiss/version.rb +1 -1
  10. data/vendor/faiss/faiss/AutoTune.cpp +292 -291
  11. data/vendor/faiss/faiss/AutoTune.h +55 -56
  12. data/vendor/faiss/faiss/Clustering.cpp +365 -194
  13. data/vendor/faiss/faiss/Clustering.h +102 -35
  14. data/vendor/faiss/faiss/IVFlib.cpp +171 -195
  15. data/vendor/faiss/faiss/IVFlib.h +48 -51
  16. data/vendor/faiss/faiss/Index.cpp +85 -103
  17. data/vendor/faiss/faiss/Index.h +54 -48
  18. data/vendor/faiss/faiss/Index2Layer.cpp +126 -224
  19. data/vendor/faiss/faiss/Index2Layer.h +22 -36
  20. data/vendor/faiss/faiss/IndexAdditiveQuantizer.cpp +407 -0
  21. data/vendor/faiss/faiss/IndexAdditiveQuantizer.h +195 -0
  22. data/vendor/faiss/faiss/IndexBinary.cpp +45 -37
  23. data/vendor/faiss/faiss/IndexBinary.h +140 -132
  24. data/vendor/faiss/faiss/IndexBinaryFlat.cpp +73 -53
  25. data/vendor/faiss/faiss/IndexBinaryFlat.h +29 -24
  26. data/vendor/faiss/faiss/IndexBinaryFromFloat.cpp +46 -43
  27. data/vendor/faiss/faiss/IndexBinaryFromFloat.h +16 -15
  28. data/vendor/faiss/faiss/IndexBinaryHNSW.cpp +215 -232
  29. data/vendor/faiss/faiss/IndexBinaryHNSW.h +25 -24
  30. data/vendor/faiss/faiss/IndexBinaryHash.cpp +182 -177
  31. data/vendor/faiss/faiss/IndexBinaryHash.h +41 -34
  32. data/vendor/faiss/faiss/IndexBinaryIVF.cpp +489 -461
  33. data/vendor/faiss/faiss/IndexBinaryIVF.h +97 -68
  34. data/vendor/faiss/faiss/IndexFlat.cpp +115 -176
  35. data/vendor/faiss/faiss/IndexFlat.h +42 -59
  36. data/vendor/faiss/faiss/IndexFlatCodes.cpp +67 -0
  37. data/vendor/faiss/faiss/IndexFlatCodes.h +47 -0
  38. data/vendor/faiss/faiss/IndexHNSW.cpp +372 -348
  39. data/vendor/faiss/faiss/IndexHNSW.h +57 -41
  40. data/vendor/faiss/faiss/IndexIVF.cpp +545 -453
  41. data/vendor/faiss/faiss/IndexIVF.h +169 -118
  42. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.cpp +316 -0
  43. data/vendor/faiss/faiss/IndexIVFAdditiveQuantizer.h +121 -0
  44. data/vendor/faiss/faiss/IndexIVFFlat.cpp +247 -252
  45. data/vendor/faiss/faiss/IndexIVFFlat.h +48 -51
  46. data/vendor/faiss/faiss/IndexIVFPQ.cpp +459 -517
  47. data/vendor/faiss/faiss/IndexIVFPQ.h +75 -67
  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 +163 -150
  53. data/vendor/faiss/faiss/IndexIVFSpectralHash.h +38 -25
  54. data/vendor/faiss/faiss/IndexLSH.cpp +66 -113
  55. data/vendor/faiss/faiss/IndexLSH.h +20 -38
  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 +229 -0
  59. data/vendor/faiss/faiss/IndexNNDescent.h +72 -0
  60. data/vendor/faiss/faiss/IndexNSG.cpp +301 -0
  61. data/vendor/faiss/faiss/IndexNSG.h +85 -0
  62. data/vendor/faiss/faiss/IndexPQ.cpp +387 -495
  63. data/vendor/faiss/faiss/IndexPQ.h +64 -82
  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 +139 -127
  69. data/vendor/faiss/faiss/IndexRefine.h +32 -23
  70. data/vendor/faiss/faiss/IndexReplicas.cpp +147 -153
  71. data/vendor/faiss/faiss/IndexReplicas.h +62 -56
  72. data/vendor/faiss/faiss/IndexScalarQuantizer.cpp +111 -172
  73. data/vendor/faiss/faiss/IndexScalarQuantizer.h +41 -59
  74. data/vendor/faiss/faiss/IndexShards.cpp +256 -240
  75. data/vendor/faiss/faiss/IndexShards.h +85 -73
  76. data/vendor/faiss/faiss/MatrixStats.cpp +112 -97
  77. data/vendor/faiss/faiss/MatrixStats.h +7 -10
  78. data/vendor/faiss/faiss/MetaIndexes.cpp +135 -157
  79. data/vendor/faiss/faiss/MetaIndexes.h +40 -34
  80. data/vendor/faiss/faiss/MetricType.h +7 -7
  81. data/vendor/faiss/faiss/VectorTransform.cpp +654 -475
  82. data/vendor/faiss/faiss/VectorTransform.h +64 -89
  83. data/vendor/faiss/faiss/clone_index.cpp +78 -73
  84. data/vendor/faiss/faiss/clone_index.h +4 -9
  85. data/vendor/faiss/faiss/gpu/GpuAutoTune.cpp +33 -38
  86. data/vendor/faiss/faiss/gpu/GpuAutoTune.h +11 -9
  87. data/vendor/faiss/faiss/gpu/GpuCloner.cpp +198 -171
  88. data/vendor/faiss/faiss/gpu/GpuCloner.h +53 -35
  89. data/vendor/faiss/faiss/gpu/GpuClonerOptions.cpp +12 -14
  90. data/vendor/faiss/faiss/gpu/GpuClonerOptions.h +27 -25
  91. data/vendor/faiss/faiss/gpu/GpuDistance.h +116 -112
  92. data/vendor/faiss/faiss/gpu/GpuFaissAssert.h +1 -2
  93. data/vendor/faiss/faiss/gpu/GpuIcmEncoder.h +60 -0
  94. data/vendor/faiss/faiss/gpu/GpuIndex.h +134 -137
  95. data/vendor/faiss/faiss/gpu/GpuIndexBinaryFlat.h +76 -73
  96. data/vendor/faiss/faiss/gpu/GpuIndexFlat.h +173 -162
  97. data/vendor/faiss/faiss/gpu/GpuIndexIVF.h +67 -64
  98. data/vendor/faiss/faiss/gpu/GpuIndexIVFFlat.h +89 -86
  99. data/vendor/faiss/faiss/gpu/GpuIndexIVFPQ.h +150 -141
  100. data/vendor/faiss/faiss/gpu/GpuIndexIVFScalarQuantizer.h +101 -103
  101. data/vendor/faiss/faiss/gpu/GpuIndicesOptions.h +17 -16
  102. data/vendor/faiss/faiss/gpu/GpuResources.cpp +116 -128
  103. data/vendor/faiss/faiss/gpu/GpuResources.h +182 -186
  104. data/vendor/faiss/faiss/gpu/StandardGpuResources.cpp +433 -422
  105. data/vendor/faiss/faiss/gpu/StandardGpuResources.h +131 -130
  106. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.cpp +468 -456
  107. data/vendor/faiss/faiss/gpu/impl/InterleavedCodes.h +25 -19
  108. data/vendor/faiss/faiss/gpu/impl/RemapIndices.cpp +22 -20
  109. data/vendor/faiss/faiss/gpu/impl/RemapIndices.h +9 -8
  110. data/vendor/faiss/faiss/gpu/perf/IndexWrapper-inl.h +39 -44
  111. data/vendor/faiss/faiss/gpu/perf/IndexWrapper.h +16 -14
  112. data/vendor/faiss/faiss/gpu/perf/PerfClustering.cpp +77 -71
  113. data/vendor/faiss/faiss/gpu/perf/PerfIVFPQAdd.cpp +109 -88
  114. data/vendor/faiss/faiss/gpu/perf/WriteIndex.cpp +75 -64
  115. data/vendor/faiss/faiss/gpu/test/TestCodePacking.cpp +230 -215
  116. data/vendor/faiss/faiss/gpu/test/TestGpuIndexBinaryFlat.cpp +80 -86
  117. data/vendor/faiss/faiss/gpu/test/TestGpuIndexFlat.cpp +284 -277
  118. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFFlat.cpp +416 -416
  119. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFPQ.cpp +611 -517
  120. data/vendor/faiss/faiss/gpu/test/TestGpuIndexIVFScalarQuantizer.cpp +166 -164
  121. data/vendor/faiss/faiss/gpu/test/TestGpuMemoryException.cpp +61 -53
  122. data/vendor/faiss/faiss/gpu/test/TestUtils.cpp +274 -238
  123. data/vendor/faiss/faiss/gpu/test/TestUtils.h +73 -57
  124. data/vendor/faiss/faiss/gpu/test/demo_ivfpq_indexing_gpu.cpp +47 -50
  125. data/vendor/faiss/faiss/gpu/utils/DeviceUtils.h +79 -72
  126. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.cpp +140 -146
  127. data/vendor/faiss/faiss/gpu/utils/StackDeviceMemory.h +69 -71
  128. data/vendor/faiss/faiss/gpu/utils/StaticUtils.h +21 -16
  129. data/vendor/faiss/faiss/gpu/utils/Timer.cpp +25 -29
  130. data/vendor/faiss/faiss/gpu/utils/Timer.h +30 -29
  131. data/vendor/faiss/faiss/impl/AdditiveQuantizer.cpp +503 -0
  132. data/vendor/faiss/faiss/impl/AdditiveQuantizer.h +175 -0
  133. data/vendor/faiss/faiss/impl/AuxIndexStructures.cpp +90 -120
  134. data/vendor/faiss/faiss/impl/AuxIndexStructures.h +81 -65
  135. data/vendor/faiss/faiss/impl/FaissAssert.h +73 -58
  136. data/vendor/faiss/faiss/impl/FaissException.cpp +56 -48
  137. data/vendor/faiss/faiss/impl/FaissException.h +41 -29
  138. data/vendor/faiss/faiss/impl/HNSW.cpp +606 -617
  139. data/vendor/faiss/faiss/impl/HNSW.h +179 -200
  140. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.cpp +855 -0
  141. data/vendor/faiss/faiss/impl/LocalSearchQuantizer.h +244 -0
  142. data/vendor/faiss/faiss/impl/NNDescent.cpp +487 -0
  143. data/vendor/faiss/faiss/impl/NNDescent.h +154 -0
  144. data/vendor/faiss/faiss/impl/NSG.cpp +679 -0
  145. data/vendor/faiss/faiss/impl/NSG.h +199 -0
  146. data/vendor/faiss/faiss/impl/PolysemousTraining.cpp +484 -454
  147. data/vendor/faiss/faiss/impl/PolysemousTraining.h +52 -55
  148. data/vendor/faiss/faiss/impl/ProductQuantizer-inl.h +26 -47
  149. data/vendor/faiss/faiss/impl/ProductQuantizer.cpp +469 -459
  150. data/vendor/faiss/faiss/impl/ProductQuantizer.h +76 -87
  151. data/vendor/faiss/faiss/impl/ResidualQuantizer.cpp +758 -0
  152. data/vendor/faiss/faiss/impl/ResidualQuantizer.h +188 -0
  153. data/vendor/faiss/faiss/impl/ResultHandler.h +96 -132
  154. data/vendor/faiss/faiss/impl/ScalarQuantizer.cpp +647 -707
  155. data/vendor/faiss/faiss/impl/ScalarQuantizer.h +48 -46
  156. data/vendor/faiss/faiss/impl/ThreadedIndex-inl.h +129 -131
  157. data/vendor/faiss/faiss/impl/ThreadedIndex.h +61 -55
  158. data/vendor/faiss/faiss/impl/index_read.cpp +631 -480
  159. data/vendor/faiss/faiss/impl/index_write.cpp +547 -407
  160. data/vendor/faiss/faiss/impl/io.cpp +76 -95
  161. data/vendor/faiss/faiss/impl/io.h +31 -41
  162. data/vendor/faiss/faiss/impl/io_macros.h +60 -29
  163. data/vendor/faiss/faiss/impl/kmeans1d.cpp +301 -0
  164. data/vendor/faiss/faiss/impl/kmeans1d.h +48 -0
  165. data/vendor/faiss/faiss/impl/lattice_Zn.cpp +137 -186
  166. data/vendor/faiss/faiss/impl/lattice_Zn.h +40 -51
  167. data/vendor/faiss/faiss/impl/platform_macros.h +29 -8
  168. data/vendor/faiss/faiss/impl/pq4_fast_scan.cpp +77 -124
  169. data/vendor/faiss/faiss/impl/pq4_fast_scan.h +39 -48
  170. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_1.cpp +41 -52
  171. data/vendor/faiss/faiss/impl/pq4_fast_scan_search_qbs.cpp +80 -117
  172. data/vendor/faiss/faiss/impl/simd_result_handlers.h +109 -137
  173. data/vendor/faiss/faiss/index_factory.cpp +619 -397
  174. data/vendor/faiss/faiss/index_factory.h +8 -6
  175. data/vendor/faiss/faiss/index_io.h +23 -26
  176. data/vendor/faiss/faiss/invlists/BlockInvertedLists.cpp +67 -75
  177. data/vendor/faiss/faiss/invlists/BlockInvertedLists.h +22 -24
  178. data/vendor/faiss/faiss/invlists/DirectMap.cpp +96 -112
  179. data/vendor/faiss/faiss/invlists/DirectMap.h +29 -33
  180. data/vendor/faiss/faiss/invlists/InvertedLists.cpp +307 -364
  181. data/vendor/faiss/faiss/invlists/InvertedLists.h +151 -151
  182. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.cpp +29 -34
  183. data/vendor/faiss/faiss/invlists/InvertedListsIOHook.h +17 -18
  184. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.cpp +257 -293
  185. data/vendor/faiss/faiss/invlists/OnDiskInvertedLists.h +50 -45
  186. data/vendor/faiss/faiss/python/python_callbacks.cpp +23 -26
  187. data/vendor/faiss/faiss/python/python_callbacks.h +9 -16
  188. data/vendor/faiss/faiss/utils/AlignedTable.h +79 -44
  189. data/vendor/faiss/faiss/utils/Heap.cpp +40 -48
  190. data/vendor/faiss/faiss/utils/Heap.h +186 -209
  191. data/vendor/faiss/faiss/utils/WorkerThread.cpp +67 -76
  192. data/vendor/faiss/faiss/utils/WorkerThread.h +32 -33
  193. data/vendor/faiss/faiss/utils/distances.cpp +305 -312
  194. data/vendor/faiss/faiss/utils/distances.h +170 -122
  195. data/vendor/faiss/faiss/utils/distances_simd.cpp +498 -508
  196. data/vendor/faiss/faiss/utils/extra_distances-inl.h +117 -0
  197. data/vendor/faiss/faiss/utils/extra_distances.cpp +113 -232
  198. data/vendor/faiss/faiss/utils/extra_distances.h +30 -29
  199. data/vendor/faiss/faiss/utils/hamming-inl.h +260 -209
  200. data/vendor/faiss/faiss/utils/hamming.cpp +375 -469
  201. data/vendor/faiss/faiss/utils/hamming.h +62 -85
  202. data/vendor/faiss/faiss/utils/ordered_key_value.h +16 -18
  203. data/vendor/faiss/faiss/utils/partitioning.cpp +393 -318
  204. data/vendor/faiss/faiss/utils/partitioning.h +26 -21
  205. data/vendor/faiss/faiss/utils/quantize_lut.cpp +78 -66
  206. data/vendor/faiss/faiss/utils/quantize_lut.h +22 -20
  207. data/vendor/faiss/faiss/utils/random.cpp +39 -63
  208. data/vendor/faiss/faiss/utils/random.h +13 -16
  209. data/vendor/faiss/faiss/utils/simdlib.h +4 -2
  210. data/vendor/faiss/faiss/utils/simdlib_avx2.h +88 -85
  211. data/vendor/faiss/faiss/utils/simdlib_emulated.h +226 -165
  212. data/vendor/faiss/faiss/utils/simdlib_neon.h +832 -0
  213. data/vendor/faiss/faiss/utils/utils.cpp +304 -287
  214. data/vendor/faiss/faiss/utils/utils.h +54 -49
  215. metadata +29 -4
@@ -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
  *
@@ -55,78 +40,120 @@ float fvec_Linf (
55
40
  * @param nq nb of query vectors
56
41
  * @param nb nb of database vectors
57
42
  * @param xq query vectors (size nq * d)
58
- * @param xb database vectros (size nb * d)
43
+ * @param xb database vectors (size nb * d)
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);
74
-
75
- /* 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
-
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);
65
+
66
+ /* compute ny square L2 distance between x and a set of contiguous y vectors */
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
- /* This function exists because the Torch counterpart is extremly slow
90
+ /* This function exists because the Torch counterpart is extremely 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);
99
+
100
+ /*********************************************************
101
+ * Vector to vector functions
102
+ *********************************************************/
103
+
104
+ /** compute c := a + b for vectors
105
+ *
106
+ * c and a can overlap, c and b can overlap
107
+ *
108
+ * @param a size d
109
+ * @param b size d
110
+ * @param c size d
111
+ */
112
+ void fvec_add(size_t d, const float* a, const float* b, float* c);
113
+
114
+ /** compute c := a + b for a, c vectors and b a scalar
115
+ *
116
+ * c and a can overlap
117
+ *
118
+ * @param a size d
119
+ * @param c size d
120
+ */
121
+ void fvec_add(size_t d, const float* a, float b, float* c);
122
+
123
+ /** compute c := a - b for vectors
124
+ *
125
+ * c and a can overlap, c and b can overlap
126
+ *
127
+ * @param a size d
128
+ * @param b size d
129
+ * @param c size d
130
+ */
131
+ void fvec_sub(size_t d, const float* a, const float* b, float* c);
108
132
 
109
133
  /***************************************************************************
110
134
  * Compute a subset of distances
111
135
  ***************************************************************************/
112
136
 
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);
137
+ /* compute the inner product between x and a subset y of ny vectors,
138
+ whose indices are given by idy. */
139
+ void fvec_inner_products_by_idx(
140
+ float* ip,
141
+ const float* x,
142
+ const float* y,
143
+ const int64_t* ids,
144
+ size_t d,
145
+ size_t nx,
146
+ size_t ny);
121
147
 
122
148
  /* 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
-
149
+ void fvec_L2sqr_by_idx(
150
+ float* dis,
151
+ const float* x,
152
+ const float* y,
153
+ const int64_t* ids, /* ids of y vecs */
154
+ size_t d,
155
+ size_t nx,
156
+ size_t ny);
130
157
 
131
158
  /** compute dis[j] = L2sqr(x[ix[j]], y[iy[j]]) forall j=0..n-1
132
159
  *
@@ -136,18 +163,24 @@ void fvec_L2sqr_by_idx (
136
163
  * @param iy size n
137
164
  * @param dis size n
138
165
  */
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);
166
+ void pairwise_indexed_L2sqr(
167
+ size_t d,
168
+ size_t n,
169
+ const float* x,
170
+ const int64_t* ix,
171
+ const float* y,
172
+ const int64_t* iy,
173
+ float* dis);
144
174
 
145
175
  /* 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);
176
+ void pairwise_indexed_inner_product(
177
+ size_t d,
178
+ size_t n,
179
+ const float* x,
180
+ const int64_t* ix,
181
+ const float* y,
182
+ const int64_t* iy,
183
+ float* dis);
151
184
 
152
185
  /***************************************************************************
153
186
  * KNN functions
@@ -171,46 +204,51 @@ FAISS_API extern int distance_compute_min_k_reservoir;
171
204
  * @param y database vectors, size ny * d
172
205
  * @param res result array, which also provides k. Sorted on output
173
206
  */
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);
207
+ void knn_inner_product(
208
+ const float* x,
209
+ const float* y,
210
+ size_t d,
211
+ size_t nx,
212
+ size_t ny,
213
+ float_minheap_array_t* res);
179
214
 
180
215
  /** Same as knn_inner_product, for the L2 distance
181
216
  * @param y_norm2 norms for the y vectors (nullptr or size ny)
182
217
  */
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
-
218
+ void knn_L2sqr(
219
+ const float* x,
220
+ const float* y,
221
+ size_t d,
222
+ size_t nx,
223
+ size_t ny,
224
+ float_maxheap_array_t* res,
225
+ const float* y_norm2 = nullptr);
190
226
 
191
227
  /* Find the nearest neighbors for nx queries in a set of ny vectors
192
228
  * indexed by ids. May be useful for re-ranking a pre-selected vector list
193
229
  */
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);
230
+ void knn_inner_products_by_idx(
231
+ const float* x,
232
+ const float* y,
233
+ const int64_t* ids,
234
+ size_t d,
235
+ size_t nx,
236
+ size_t ny,
237
+ float_minheap_array_t* res);
238
+
239
+ void knn_L2sqr_by_idx(
240
+ const float* x,
241
+ const float* y,
242
+ const int64_t* ids,
243
+ size_t d,
244
+ size_t nx,
245
+ size_t ny,
246
+ float_maxheap_array_t* res);
207
247
 
208
248
  /***************************************************************************
209
249
  * Range search
210
250
  ***************************************************************************/
211
251
 
212
-
213
-
214
252
  /// Forward declaration, see AuxIndexStructures.h
215
253
  struct RangeSearchResult;
216
254
 
@@ -222,21 +260,24 @@ struct RangeSearchResult;
222
260
  * @param radius search radius around the x vectors
223
261
  * @param result result structure
224
262
  */
225
- void range_search_L2sqr (
226
- const float * x,
227
- const float * y,
228
- size_t d, size_t nx, size_t ny,
263
+ void range_search_L2sqr(
264
+ const float* x,
265
+ const float* y,
266
+ size_t d,
267
+ size_t nx,
268
+ size_t ny,
229
269
  float radius,
230
- RangeSearchResult *result);
270
+ RangeSearchResult* result);
231
271
 
232
272
  /// 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,
273
+ void range_search_inner_product(
274
+ const float* x,
275
+ const float* y,
276
+ size_t d,
277
+ size_t nx,
278
+ size_t ny,
237
279
  float radius,
238
- RangeSearchResult *result);
239
-
280
+ RangeSearchResult* result);
240
281
 
241
282
  /***************************************************************************
242
283
  * PQ tables computations
@@ -244,9 +285,16 @@ void range_search_inner_product (
244
285
 
245
286
  /// specialized function for PQ2
246
287
  void compute_PQ_dis_tables_dsub2(
247
- size_t d, size_t ksub, const float *centroids,
248
- size_t nx, const float * x,
288
+ size_t d,
289
+ size_t ksub,
290
+ const float* centroids,
291
+ size_t nx,
292
+ const float* x,
249
293
  bool is_inner_product,
250
- float * dis_tables);
294
+ float* dis_tables);
295
+
296
+ /***************************************************************************
297
+ * Templatized versions of distance functions
298
+ ***************************************************************************/
251
299
 
252
300
  } // namespace faiss