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,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,14 @@ 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);
17
+ Index* index_factory(
18
+ int d,
19
+ const char* description,
20
+ MetricType metric = METRIC_L2);
21
21
 
22
- IndexBinary *index_binary_factory (int d, const char *description);
22
+ /// set to > 0 to get more logs from index_factory
23
+ FAISS_API extern int index_factory_verbose;
23
24
 
25
+ IndexBinary* index_binary_factory(int d, const char* description);
24
26
 
25
- }
27
+ } // 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