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,8 +5,6 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- // -*- c++ -*-
9
-
10
8
  #pragma once
11
9
 
12
10
  #include <faiss/Index.h>
@@ -16,10 +14,11 @@ namespace faiss {
16
14
 
17
15
  /** Build and index with the sequence of processing steps described in
18
16
  * the string. */
19
- Index *index_factory (int d, const char *description,
20
- MetricType metric = METRIC_L2);
21
-
22
- IndexBinary *index_binary_factory (int d, const char *description);
17
+ Index* index_factory(
18
+ int d,
19
+ const char* description,
20
+ MetricType metric = METRIC_L2);
23
21
 
22
+ IndexBinary* index_binary_factory(int d, const char* description);
24
23
 
25
- }
24
+ } // namespace faiss
@@ -12,10 +12,9 @@
12
12
  #ifndef FAISS_INDEX_IO_H
13
13
  #define FAISS_INDEX_IO_H
14
14
 
15
-
16
15
  #include <cstdio>
17
- #include <typeinfo>
18
16
  #include <string>
17
+ #include <typeinfo>
19
18
  #include <vector>
20
19
 
21
20
  /** I/O functions can read/write to a filename, a file handle or to an
@@ -36,13 +35,13 @@ struct IOReader;
36
35
  struct IOWriter;
37
36
  struct InvertedLists;
38
37
 
39
- void write_index (const Index *idx, const char *fname);
40
- void write_index (const Index *idx, FILE *f);
41
- void write_index (const Index *idx, IOWriter *writer);
38
+ void write_index(const Index* idx, const char* fname);
39
+ void write_index(const Index* idx, FILE* f);
40
+ void write_index(const Index* idx, IOWriter* writer);
42
41
 
43
- void write_index_binary (const IndexBinary *idx, const char *fname);
44
- void write_index_binary (const IndexBinary *idx, FILE *f);
45
- void write_index_binary (const IndexBinary *idx, IOWriter *writer);
42
+ void write_index_binary(const IndexBinary* idx, const char* fname);
43
+ void write_index_binary(const IndexBinary* idx, FILE* f);
44
+ void write_index_binary(const IndexBinary* idx, IOWriter* writer);
46
45
 
47
46
  // The read_index flags are implemented only for a subset of index types.
48
47
  const int IO_FLAG_READ_ONLY = 2;
@@ -51,32 +50,30 @@ const int IO_FLAG_READ_ONLY = 2;
51
50
  const int IO_FLAG_ONDISK_SAME_DIR = 4;
52
51
  // don't load IVF data to RAM, only list sizes
53
52
  const int IO_FLAG_SKIP_IVF_DATA = 8;
54
- // try to memmap data (useful to load an ArrayInvertedLists as an OnDiskInvertedLists)
53
+ // try to memmap data (useful to load an ArrayInvertedLists as an
54
+ // OnDiskInvertedLists)
55
55
  const int IO_FLAG_MMAP = IO_FLAG_SKIP_IVF_DATA | 0x646f0000;
56
56
 
57
+ Index* read_index(const char* fname, int io_flags = 0);
58
+ Index* read_index(FILE* f, int io_flags = 0);
59
+ Index* read_index(IOReader* reader, int io_flags = 0);
57
60
 
58
- Index *read_index (const char *fname, int io_flags = 0);
59
- Index *read_index (FILE * f, int io_flags = 0);
60
- Index *read_index (IOReader *reader, int io_flags = 0);
61
+ IndexBinary* read_index_binary(const char* fname, int io_flags = 0);
62
+ IndexBinary* read_index_binary(FILE* f, int io_flags = 0);
63
+ IndexBinary* read_index_binary(IOReader* reader, int io_flags = 0);
61
64
 
62
- IndexBinary *read_index_binary (const char *fname, int io_flags = 0);
63
- IndexBinary *read_index_binary (FILE * f, int io_flags = 0);
64
- IndexBinary *read_index_binary (IOReader *reader, int io_flags = 0);
65
+ void write_VectorTransform(const VectorTransform* vt, const char* fname);
66
+ VectorTransform* read_VectorTransform(const char* fname);
65
67
 
66
- void write_VectorTransform (const VectorTransform *vt, const char *fname);
67
- VectorTransform *read_VectorTransform (const char *fname);
68
+ ProductQuantizer* read_ProductQuantizer(const char* fname);
69
+ ProductQuantizer* read_ProductQuantizer(IOReader* reader);
68
70
 
69
- ProductQuantizer * read_ProductQuantizer (const char*fname);
70
- ProductQuantizer * read_ProductQuantizer (IOReader *reader);
71
-
72
- void write_ProductQuantizer (const ProductQuantizer*pq, const char *fname);
73
- void write_ProductQuantizer (const ProductQuantizer*pq, IOWriter *f);
74
-
75
- void write_InvertedLists (const InvertedLists *ils, IOWriter *f);
76
- InvertedLists *read_InvertedLists (IOReader *reader, int io_flags = 0);
71
+ void write_ProductQuantizer(const ProductQuantizer* pq, const char* fname);
72
+ void write_ProductQuantizer(const ProductQuantizer* pq, IOWriter* f);
77
73
 
74
+ void write_InvertedLists(const InvertedLists* ils, IOWriter* f);
75
+ InvertedLists* read_InvertedLists(IOReader* reader, int io_flags = 0);
78
76
 
79
77
  } // namespace faiss
80
78
 
81
-
82
79
  #endif
@@ -12,81 +12,80 @@
12
12
  #include <faiss/impl/io.h>
13
13
  #include <faiss/impl/io_macros.h>
14
14
 
15
-
16
15
  namespace faiss {
17
16
 
18
- BlockInvertedLists::BlockInvertedLists (
19
- size_t nlist, size_t n_per_block,
20
- size_t block_size):
21
- InvertedLists (nlist, InvertedLists::INVALID_CODE_SIZE),
22
- n_per_block(n_per_block), block_size(block_size)
23
- {
24
- ids.resize (nlist);
25
- codes.resize (nlist);
17
+ BlockInvertedLists::BlockInvertedLists(
18
+ size_t nlist,
19
+ size_t n_per_block,
20
+ size_t block_size)
21
+ : InvertedLists(nlist, InvertedLists::INVALID_CODE_SIZE),
22
+ n_per_block(n_per_block),
23
+ block_size(block_size) {
24
+ ids.resize(nlist);
25
+ codes.resize(nlist);
26
26
  }
27
27
 
28
- BlockInvertedLists::BlockInvertedLists ():
29
- InvertedLists (0, InvertedLists::INVALID_CODE_SIZE),
30
- n_per_block(0), block_size(0)
31
- {}
32
-
33
-
34
- size_t BlockInvertedLists::add_entries (
35
- size_t list_no, size_t n_entry,
36
- const idx_t* ids_in, const uint8_t *code)
37
- {
38
- if (n_entry == 0) return 0;
39
- FAISS_THROW_IF_NOT (list_no < nlist);
40
- size_t o = ids [list_no].size();
41
- FAISS_THROW_IF_NOT (o == 0); // not clear how we should handle subsequent adds
42
- ids [list_no].resize (o + n_entry);
43
- memcpy (&ids[list_no][o], ids_in, sizeof (ids_in[0]) * n_entry);
28
+ BlockInvertedLists::BlockInvertedLists()
29
+ : InvertedLists(0, InvertedLists::INVALID_CODE_SIZE),
30
+ n_per_block(0),
31
+ block_size(0) {}
32
+
33
+ size_t BlockInvertedLists::add_entries(
34
+ size_t list_no,
35
+ size_t n_entry,
36
+ const idx_t* ids_in,
37
+ const uint8_t* code) {
38
+ if (n_entry == 0)
39
+ return 0;
40
+ FAISS_THROW_IF_NOT(list_no < nlist);
41
+ size_t o = ids[list_no].size();
42
+ FAISS_THROW_IF_NOT(
43
+ o == 0); // not clear how we should handle subsequent adds
44
+ ids[list_no].resize(o + n_entry);
45
+ memcpy(&ids[list_no][o], ids_in, sizeof(ids_in[0]) * n_entry);
44
46
 
45
47
  // copy whole blocks
46
48
  size_t n_block = (n_entry + n_per_block - 1) / n_per_block;
47
- codes [list_no].resize (n_block * block_size);
48
- memcpy (&codes[list_no][o * code_size], code, n_block * block_size);
49
+ codes[list_no].resize(n_block * block_size);
50
+ memcpy(&codes[list_no][o * code_size], code, n_block * block_size);
49
51
  return o;
50
52
  }
51
53
 
52
- size_t BlockInvertedLists::list_size(size_t list_no) const
53
- {
54
- assert (list_no < nlist);
54
+ size_t BlockInvertedLists::list_size(size_t list_no) const {
55
+ assert(list_no < nlist);
55
56
  return ids[list_no].size();
56
57
  }
57
58
 
58
- const uint8_t * BlockInvertedLists::get_codes (size_t list_no) const
59
- {
60
- assert (list_no < nlist);
59
+ const uint8_t* BlockInvertedLists::get_codes(size_t list_no) const {
60
+ assert(list_no < nlist);
61
61
  return codes[list_no].get();
62
62
  }
63
63
 
64
- const InvertedLists::idx_t * BlockInvertedLists::get_ids (size_t list_no) const
65
- {
66
- assert (list_no < nlist);
64
+ const InvertedLists::idx_t* BlockInvertedLists::get_ids(size_t list_no) const {
65
+ assert(list_no < nlist);
67
66
  return ids[list_no].data();
68
67
  }
69
68
 
70
- void BlockInvertedLists::resize (size_t list_no, size_t new_size)
71
- {
72
- ids[list_no].resize (new_size);
69
+ void BlockInvertedLists::resize(size_t list_no, size_t new_size) {
70
+ ids[list_no].resize(new_size);
73
71
  size_t prev_nbytes = codes[list_no].size();
74
72
  size_t n_block = (new_size + n_per_block - 1) / n_per_block;
75
73
  size_t new_nbytes = n_block * block_size;
76
- codes[list_no].resize (new_nbytes);
74
+ codes[list_no].resize(new_nbytes);
77
75
  if (prev_nbytes < new_nbytes) {
78
76
  // set new elements to 0
79
- memset(
80
- codes[list_no].data() + prev_nbytes, 0,
81
- new_nbytes - prev_nbytes
82
- );
77
+ memset(codes[list_no].data() + prev_nbytes,
78
+ 0,
79
+ new_nbytes - prev_nbytes);
83
80
  }
84
81
  }
85
82
 
86
- void BlockInvertedLists::update_entries (
87
- size_t , size_t , size_t ,
88
- const idx_t *, const uint8_t *)
89
- {
83
+ void BlockInvertedLists::update_entries(
84
+ size_t,
85
+ size_t,
86
+ size_t,
87
+ const idx_t*,
88
+ const uint8_t*) {
90
89
  FAISS_THROW_MSG("not impemented");
91
90
  /*
92
91
  assert (list_no < nlist);
@@ -96,29 +95,25 @@ void BlockInvertedLists::update_entries (
96
95
  */
97
96
  }
98
97
 
99
-
100
- BlockInvertedLists::~BlockInvertedLists ()
101
- {}
98
+ BlockInvertedLists::~BlockInvertedLists() {}
102
99
 
103
100
  /**************************************************
104
101
  * IO hook implementation
105
102
  **************************************************/
106
103
 
107
- BlockInvertedListsIOHook::BlockInvertedListsIOHook():
108
- InvertedListsIOHook("ilbl", typeid(BlockInvertedLists).name())
109
- {}
110
-
104
+ BlockInvertedListsIOHook::BlockInvertedListsIOHook()
105
+ : InvertedListsIOHook("ilbl", typeid(BlockInvertedLists).name()) {}
111
106
 
112
- void BlockInvertedListsIOHook::write(const InvertedLists *ils_in, IOWriter *f) const
113
- {
114
- uint32_t h = fourcc ("ilbl");
115
- WRITE1 (h);
116
- const BlockInvertedLists *il =
117
- dynamic_cast<const BlockInvertedLists*> (ils_in);
118
- WRITE1 (il->nlist);
119
- WRITE1 (il->code_size);
120
- WRITE1 (il->n_per_block);
121
- WRITE1 (il->block_size);
107
+ void BlockInvertedListsIOHook::write(const InvertedLists* ils_in, IOWriter* f)
108
+ const {
109
+ uint32_t h = fourcc("ilbl");
110
+ WRITE1(h);
111
+ const BlockInvertedLists* il =
112
+ dynamic_cast<const BlockInvertedLists*>(ils_in);
113
+ WRITE1(il->nlist);
114
+ WRITE1(il->code_size);
115
+ WRITE1(il->n_per_block);
116
+ WRITE1(il->block_size);
122
117
 
123
118
  for (size_t i = 0; i < il->nlist; i++) {
124
119
  WRITEVECTOR(il->ids[i]);
@@ -126,13 +121,13 @@ void BlockInvertedListsIOHook::write(const InvertedLists *ils_in, IOWriter *f) c
126
121
  }
127
122
  }
128
123
 
129
- InvertedLists * BlockInvertedListsIOHook::read(IOReader *f, int /* io_flags */) const
130
- {
131
- BlockInvertedLists *il = new BlockInvertedLists();
132
- READ1 (il->nlist);
133
- READ1 (il->code_size);
134
- READ1 (il->n_per_block);
135
- READ1 (il->block_size);
124
+ InvertedLists* BlockInvertedListsIOHook::read(IOReader* f, int /* io_flags */)
125
+ const {
126
+ BlockInvertedLists* il = new BlockInvertedLists();
127
+ READ1(il->nlist);
128
+ READ1(il->code_size);
129
+ READ1(il->n_per_block);
130
+ READ1(il->block_size);
136
131
 
137
132
  il->ids.resize(il->nlist);
138
133
  il->codes.resize(il->nlist);
@@ -145,7 +140,4 @@ InvertedLists * BlockInvertedListsIOHook::read(IOReader *f, int /* io_flags */)
145
140
  return il;
146
141
  }
147
142
 
148
-
149
-
150
-
151
143
  } // namespace faiss
@@ -5,13 +5,12 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
-
9
8
  #pragma once
10
9
 
10
+ #include <faiss/index_io.h>
11
11
  #include <faiss/invlists/InvertedLists.h>
12
12
  #include <faiss/invlists/InvertedListsIOHook.h>
13
13
  #include <faiss/utils/AlignedTable.h>
14
- #include <faiss/index_io.h>
15
14
 
16
15
  namespace faiss {
17
16
 
@@ -28,49 +27,48 @@ namespace faiss {
28
27
  * The writing functions add_entries and update_entries operate on block-aligned
29
28
  * data.
30
29
  */
31
- struct BlockInvertedLists: InvertedLists {
32
-
33
- size_t n_per_block; // nb of vectors stored per block
34
- size_t block_size; // nb bytes per block
30
+ struct BlockInvertedLists : InvertedLists {
31
+ size_t n_per_block; // nb of vectors stored per block
32
+ size_t block_size; // nb bytes per block
35
33
 
36
34
  std::vector<AlignedTable<uint8_t>> codes;
37
35
  std::vector<std::vector<idx_t>> ids;
38
36
 
39
-
40
- BlockInvertedLists (
41
- size_t nlist, size_t vec_per_block,
42
- size_t block_size
43
- );
37
+ BlockInvertedLists(size_t nlist, size_t vec_per_block, size_t block_size);
44
38
 
45
39
  BlockInvertedLists();
46
40
 
47
41
  size_t list_size(size_t list_no) const override;
48
- const uint8_t * get_codes (size_t list_no) const override;
49
- const idx_t * get_ids (size_t list_no) const override;
42
+ const uint8_t* get_codes(size_t list_no) const override;
43
+ const idx_t* get_ids(size_t list_no) const override;
50
44
 
51
45
  // works only on empty BlockInvertedLists
52
46
  // the codes should be of size ceil(n_entry / n_per_block) * block_size
53
47
  // and padded with 0s
54
- size_t add_entries (
55
- size_t list_no, size_t n_entry,
56
- const idx_t* ids, const uint8_t *code) override;
48
+ size_t add_entries(
49
+ size_t list_no,
50
+ size_t n_entry,
51
+ const idx_t* ids,
52
+ const uint8_t* code) override;
57
53
 
58
54
  /// not implemented
59
- void update_entries (size_t list_no, size_t offset, size_t n_entry,
60
- const idx_t *ids, const uint8_t *code) override;
55
+ void update_entries(
56
+ size_t list_no,
57
+ size_t offset,
58
+ size_t n_entry,
59
+ const idx_t* ids,
60
+ const uint8_t* code) override;
61
61
 
62
62
  // also pads new data with 0s
63
- void resize (size_t list_no, size_t new_size) override;
64
-
65
- ~BlockInvertedLists () override;
63
+ void resize(size_t list_no, size_t new_size) override;
66
64
 
65
+ ~BlockInvertedLists() override;
67
66
  };
68
67
 
69
68
  struct BlockInvertedListsIOHook : InvertedListsIOHook {
70
69
  BlockInvertedListsIOHook();
71
- void write(const InvertedLists *ils, IOWriter *f) const override;
72
- InvertedLists * read(IOReader *f, int io_flags) const override;
70
+ void write(const InvertedLists* ils, IOWriter* f) const override;
71
+ InvertedLists* read(IOReader* f, int io_flags) const override;
73
72
  };
74
73
 
75
-
76
74
  } // namespace faiss