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
@@ -12,85 +12,100 @@
12
12
 
13
13
  #include <faiss/impl/FaissException.h>
14
14
  #include <faiss/impl/platform_macros.h>
15
- #include <cstdlib>
16
15
  #include <cstdio>
16
+ #include <cstdlib>
17
17
  #include <string>
18
18
 
19
19
  ///
20
20
  /// Assertions
21
21
  ///
22
22
 
23
- #define FAISS_ASSERT(X) \
24
- do { \
25
- if (! (X)) { \
26
- fprintf(stderr, "Faiss assertion '%s' failed in %s " \
27
- "at %s:%d\n", \
28
- #X, __PRETTY_FUNCTION__, __FILE__, __LINE__); \
29
- abort(); \
30
- } \
31
- } while (false)
23
+ #define FAISS_ASSERT(X) \
24
+ do { \
25
+ if (!(X)) { \
26
+ fprintf(stderr, \
27
+ "Faiss assertion '%s' failed in %s " \
28
+ "at %s:%d\n", \
29
+ #X, \
30
+ __PRETTY_FUNCTION__, \
31
+ __FILE__, \
32
+ __LINE__); \
33
+ abort(); \
34
+ } \
35
+ } while (false)
32
36
 
33
- #define FAISS_ASSERT_MSG(X, MSG) \
34
- do { \
35
- if (! (X)) { \
36
- fprintf(stderr, "Faiss assertion '%s' failed in %s " \
37
- "at %s:%d; details: " MSG "\n", \
38
- #X, __PRETTY_FUNCTION__, __FILE__, __LINE__); \
39
- abort(); \
40
- } \
41
- } while (false)
37
+ #define FAISS_ASSERT_MSG(X, MSG) \
38
+ do { \
39
+ if (!(X)) { \
40
+ fprintf(stderr, \
41
+ "Faiss assertion '%s' failed in %s " \
42
+ "at %s:%d; details: " MSG "\n", \
43
+ #X, \
44
+ __PRETTY_FUNCTION__, \
45
+ __FILE__, \
46
+ __LINE__); \
47
+ abort(); \
48
+ } \
49
+ } while (false)
42
50
 
43
- #define FAISS_ASSERT_FMT(X, FMT, ...) \
44
- do { \
45
- if (! (X)) { \
46
- fprintf(stderr, "Faiss assertion '%s' failed in %s " \
47
- "at %s:%d; details: " FMT "\n", \
48
- #X, __PRETTY_FUNCTION__, __FILE__, __LINE__, __VA_ARGS__); \
49
- abort(); \
50
- } \
51
- } while (false)
51
+ #define FAISS_ASSERT_FMT(X, FMT, ...) \
52
+ do { \
53
+ if (!(X)) { \
54
+ fprintf(stderr, \
55
+ "Faiss assertion '%s' failed in %s " \
56
+ "at %s:%d; details: " FMT "\n", \
57
+ #X, \
58
+ __PRETTY_FUNCTION__, \
59
+ __FILE__, \
60
+ __LINE__, \
61
+ __VA_ARGS__); \
62
+ abort(); \
63
+ } \
64
+ } while (false)
52
65
 
53
66
  ///
54
67
  /// Exceptions for returning user errors
55
68
  ///
56
69
 
57
- #define FAISS_THROW_MSG(MSG) \
58
- do { \
59
- throw faiss::FaissException(MSG, __PRETTY_FUNCTION__, __FILE__, __LINE__); \
60
- } while (false)
70
+ #define FAISS_THROW_MSG(MSG) \
71
+ do { \
72
+ throw faiss::FaissException( \
73
+ MSG, __PRETTY_FUNCTION__, __FILE__, __LINE__); \
74
+ } while (false)
61
75
 
62
- #define FAISS_THROW_FMT(FMT, ...) \
63
- do { \
64
- std::string __s; \
65
- int __size = snprintf(nullptr, 0, FMT, __VA_ARGS__); \
66
- __s.resize(__size + 1); \
67
- snprintf(&__s[0], __s.size(), FMT, __VA_ARGS__); \
68
- throw faiss::FaissException(__s, __PRETTY_FUNCTION__, __FILE__, __LINE__); \
69
- } while (false)
76
+ #define FAISS_THROW_FMT(FMT, ...) \
77
+ do { \
78
+ std::string __s; \
79
+ int __size = snprintf(nullptr, 0, FMT, __VA_ARGS__); \
80
+ __s.resize(__size + 1); \
81
+ snprintf(&__s[0], __s.size(), FMT, __VA_ARGS__); \
82
+ throw faiss::FaissException( \
83
+ __s, __PRETTY_FUNCTION__, __FILE__, __LINE__); \
84
+ } while (false)
70
85
 
71
86
  ///
72
87
  /// Exceptions thrown upon a conditional failure
73
88
  ///
74
89
 
75
- #define FAISS_THROW_IF_NOT(X) \
76
- do { \
77
- if (!(X)) { \
78
- FAISS_THROW_FMT("Error: '%s' failed", #X); \
79
- } \
80
- } while (false)
90
+ #define FAISS_THROW_IF_NOT(X) \
91
+ do { \
92
+ if (!(X)) { \
93
+ FAISS_THROW_FMT("Error: '%s' failed", #X); \
94
+ } \
95
+ } while (false)
81
96
 
82
- #define FAISS_THROW_IF_NOT_MSG(X, MSG) \
83
- do { \
84
- if (!(X)) { \
85
- FAISS_THROW_FMT("Error: '%s' failed: " MSG, #X); \
86
- } \
87
- } while (false)
97
+ #define FAISS_THROW_IF_NOT_MSG(X, MSG) \
98
+ do { \
99
+ if (!(X)) { \
100
+ FAISS_THROW_FMT("Error: '%s' failed: " MSG, #X); \
101
+ } \
102
+ } while (false)
88
103
 
89
- #define FAISS_THROW_IF_NOT_FMT(X, FMT, ...) \
90
- do { \
91
- if (!(X)) { \
92
- FAISS_THROW_FMT("Error: '%s' failed: " FMT, #X, __VA_ARGS__); \
93
- } \
94
- } while (false)
104
+ #define FAISS_THROW_IF_NOT_FMT(X, FMT, ...) \
105
+ do { \
106
+ if (!(X)) { \
107
+ FAISS_THROW_FMT("Error: '%s' failed: " FMT, #X, __VA_ARGS__); \
108
+ } \
109
+ } while (false)
95
110
 
96
111
  #endif
@@ -10,71 +10,81 @@
10
10
  #include <faiss/impl/FaissException.h>
11
11
  #include <sstream>
12
12
 
13
- #ifdef __GNUG__
13
+ #ifdef __GNUG__
14
14
  #include <cxxabi.h>
15
15
  #endif
16
16
 
17
17
  namespace faiss {
18
18
 
19
- FaissException::FaissException(const std::string& m)
20
- : msg(m) {
21
- }
22
-
23
- FaissException::FaissException(const std::string& m,
24
- const char* funcName,
25
- const char* file,
26
- int line) {
27
- int size = snprintf(nullptr, 0, "Error in %s at %s:%d: %s",
28
- funcName, file, line, m.c_str());
29
- msg.resize(size + 1);
30
- snprintf(&msg[0], msg.size(), "Error in %s at %s:%d: %s",
31
- funcName, file, line, m.c_str());
19
+ FaissException::FaissException(const std::string& m) : msg(m) {}
20
+
21
+ FaissException::FaissException(
22
+ const std::string& m,
23
+ const char* funcName,
24
+ const char* file,
25
+ int line) {
26
+ int size = snprintf(
27
+ nullptr,
28
+ 0,
29
+ "Error in %s at %s:%d: %s",
30
+ funcName,
31
+ file,
32
+ line,
33
+ m.c_str());
34
+ msg.resize(size + 1);
35
+ snprintf(
36
+ &msg[0],
37
+ msg.size(),
38
+ "Error in %s at %s:%d: %s",
39
+ funcName,
40
+ file,
41
+ line,
42
+ m.c_str());
32
43
  }
33
44
 
34
- const char*
35
- FaissException::what() const noexcept {
36
- return msg.c_str();
45
+ const char* FaissException::what() const noexcept {
46
+ return msg.c_str();
37
47
  }
38
48
 
39
49
  void handleExceptions(
40
- std::vector<std::pair<int, std::exception_ptr>>& exceptions) {
41
- if (exceptions.size() == 1) {
42
- // throw the single received exception directly
43
- std::rethrow_exception(exceptions.front().second);
44
-
45
- } else if (exceptions.size() > 1) {
46
- // multiple exceptions; aggregate them and return a single exception
47
- std::stringstream ss;
48
-
49
- for (auto& p : exceptions) {
50
- try {
51
- std::rethrow_exception(p.second);
52
- } catch (std::exception& ex) {
53
- if (ex.what()) {
54
- // exception message available
55
- ss << "Exception thrown from index " << p.first << ": "
56
- << ex.what() << "\n";
57
- } else {
58
- // No message available
59
- ss << "Unknown exception thrown from index " << p.first << "\n";
50
+ std::vector<std::pair<int, std::exception_ptr>>& exceptions) {
51
+ if (exceptions.size() == 1) {
52
+ // throw the single received exception directly
53
+ std::rethrow_exception(exceptions.front().second);
54
+
55
+ } else if (exceptions.size() > 1) {
56
+ // multiple exceptions; aggregate them and return a single exception
57
+ std::stringstream ss;
58
+
59
+ for (auto& p : exceptions) {
60
+ try {
61
+ std::rethrow_exception(p.second);
62
+ } catch (std::exception& ex) {
63
+ if (ex.what()) {
64
+ // exception message available
65
+ ss << "Exception thrown from index " << p.first << ": "
66
+ << ex.what() << "\n";
67
+ } else {
68
+ // No message available
69
+ ss << "Unknown exception thrown from index " << p.first
70
+ << "\n";
71
+ }
72
+ } catch (...) {
73
+ ss << "Unknown exception thrown from index " << p.first << "\n";
74
+ }
60
75
  }
61
- } catch (...) {
62
- ss << "Unknown exception thrown from index " << p.first << "\n";
63
- }
64
- }
65
76
 
66
- throw FaissException(ss.str());
67
- }
77
+ throw FaissException(ss.str());
78
+ }
68
79
  }
69
80
 
70
-
71
81
  // From
72
82
  // https://stackoverflow.com/questions/281818/unmangling-the-result-of-stdtype-infoname
73
83
 
74
84
  std::string demangle_cpp_symbol(const char* name) {
75
85
  #ifdef __GNUG__
76
86
  int status = -1;
77
- const char * res = abi::__cxa_demangle(name, nullptr, nullptr, &status);
87
+ const char* res = abi::__cxa_demangle(name, nullptr, nullptr, &status);
78
88
  std::string sres;
79
89
  if (status == 0) {
80
90
  sres = res;
@@ -87,6 +97,4 @@ std::string demangle_cpp_symbol(const char* name) {
87
97
  #endif
88
98
  }
89
99
 
90
-
91
-
92
- } // namespace
100
+ } // namespace faiss
@@ -12,56 +12,69 @@
12
12
 
13
13
  #include <exception>
14
14
  #include <string>
15
- #include <vector>
16
15
  #include <utility>
16
+ #include <vector>
17
17
 
18
18
  namespace faiss {
19
19
 
20
20
  /// Base class for Faiss exceptions
21
21
  class FaissException : public std::exception {
22
- public:
23
- explicit FaissException(const std::string& msg);
22
+ public:
23
+ explicit FaissException(const std::string& msg);
24
24
 
25
- FaissException(const std::string& msg,
26
- const char* funcName,
27
- const char* file,
28
- int line);
25
+ FaissException(
26
+ const std::string& msg,
27
+ const char* funcName,
28
+ const char* file,
29
+ int line);
29
30
 
30
- /// from std::exception
31
- const char* what() const noexcept override;
31
+ /// from std::exception
32
+ const char* what() const noexcept override;
32
33
 
33
- std::string msg;
34
+ std::string msg;
34
35
  };
35
36
 
36
37
  /// Handle multiple exceptions from worker threads, throwing an appropriate
37
38
  /// exception that aggregates the information
38
39
  /// The pair int is the thread that generated the exception
39
- void
40
- handleExceptions(std::vector<std::pair<int, std::exception_ptr>>& exceptions);
40
+ void handleExceptions(
41
+ std::vector<std::pair<int, std::exception_ptr>>& exceptions);
41
42
 
42
43
  /** bare-bones unique_ptr
43
44
  * this one deletes with delete [] */
44
- template<class T>
45
+ template <class T>
45
46
  struct ScopeDeleter {
46
- const T * ptr;
47
- explicit ScopeDeleter (const T* ptr = nullptr): ptr (ptr) {}
48
- void release () {ptr = nullptr; }
49
- void set (const T * ptr_in) { ptr = ptr_in; }
50
- void swap (ScopeDeleter<T> &other) {std::swap (ptr, other.ptr); }
51
- ~ScopeDeleter () {
52
- delete [] ptr;
47
+ const T* ptr;
48
+ explicit ScopeDeleter(const T* ptr = nullptr) : ptr(ptr) {}
49
+ void release() {
50
+ ptr = nullptr;
51
+ }
52
+ void set(const T* ptr_in) {
53
+ ptr = ptr_in;
54
+ }
55
+ void swap(ScopeDeleter<T>& other) {
56
+ std::swap(ptr, other.ptr);
57
+ }
58
+ ~ScopeDeleter() {
59
+ delete[] ptr;
53
60
  }
54
61
  };
55
62
 
56
63
  /** same but deletes with the simple delete (least common case) */
57
- template<class T>
64
+ template <class T>
58
65
  struct ScopeDeleter1 {
59
- const T * ptr;
60
- explicit ScopeDeleter1 (const T* ptr = nullptr): ptr (ptr) {}
61
- void release () {ptr = nullptr; }
62
- void set (const T * ptr_in) { ptr = ptr_in; }
63
- void swap (ScopeDeleter1<T> &other) {std::swap (ptr, other.ptr); }
64
- ~ScopeDeleter1 () {
66
+ const T* ptr;
67
+ explicit ScopeDeleter1(const T* ptr = nullptr) : ptr(ptr) {}
68
+ void release() {
69
+ ptr = nullptr;
70
+ }
71
+ void set(const T* ptr_in) {
72
+ ptr = ptr_in;
73
+ }
74
+ void swap(ScopeDeleter1<T>& other) {
75
+ std::swap(ptr, other.ptr);
76
+ }
77
+ ~ScopeDeleter1() {
65
78
  delete ptr;
66
79
  }
67
80
  };
@@ -69,7 +82,6 @@ struct ScopeDeleter1 {
69
82
  /// make typeids more readable
70
83
  std::string demangle_cpp_symbol(const char* name);
71
84
 
72
-
73
- }
85
+ } // namespace faiss
74
86
 
75
87
  #endif