<divclass="line"><aname="l00005"></a><spanclass="lineno"> 5</span> <spanclass="comment"> * This source code is licensed under the BSD+Patents license found in the</span></div>
<divclass="line"><aname="l00006"></a><spanclass="lineno"> 6</span> <spanclass="comment"> * LICENSE file in the root directory of this source tree.</span></div>
<divclass="line"><aname="l00009"></a><spanclass="lineno"> 9</span> <spanclass="comment">// Copyright 2004-present Facebook. All Rights Reserved.</span></div>
<divclass="line"><aname="l00010"></a><spanclass="lineno"> 10</span> <spanclass="comment">// -*- c++ -*-</span></div>
<divclass="line"><aname="l00027"></a><spanclass="lineno"> 27</span> <spanclass="comment">/** Encapsulates a quantizer object for the IndexIVF</span></div>
<divclass="line"><aname="l00029"></a><spanclass="lineno"> 29</span> <spanclass="comment"> * The class isolates the fields that are independent of the storage</span></div>
<divclass="line"><aname="l00030"></a><spanclass="lineno"> 30</span> <spanclass="comment"> * of the lists (especially training)</span></div>
<divclass="line"><aname="l00033"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1Level1Quantizer.html#a3cf99e2ee92b8558a066f821efab95d5"> 33</a></span> <aclass="code"href="structfaiss_1_1Index.html">Index</a> * <aclass="code"href="structfaiss_1_1Level1Quantizer.html#a3cf99e2ee92b8558a066f821efab95d5">quantizer</a>; <spanclass="comment">///< quantizer that maps vectors to inverted lists</span></div>
<divclass="line"><aname="l00034"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1Level1Quantizer.html#a1c4fc9d874d9492ee0ea27a5be388fa7"> 34</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1Level1Quantizer.html#a1c4fc9d874d9492ee0ea27a5be388fa7">nlist</a>; <spanclass="comment">///< number of possible key values</span></div>
<divclass="line"><aname="l00037"></a><spanclass="lineno"> 37</span> <spanclass="comment"> * = 0: use the quantizer as index in a kmeans training</span></div>
<divclass="line"><aname="l00038"></a><spanclass="lineno"> 38</span> <spanclass="comment"> * = 1: just pass on the training set to the train() of the quantizer</span></div>
<divclass="line"><aname="l00039"></a><spanclass="lineno"> 39</span> <spanclass="comment"> * = 2: kmeans training on a flat index + add the centroids to the quantizer</span></div>
<divclass="line"><aname="l00044"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1Level1Quantizer.html#abb7097ed40b15ba0af08af6d03608f72"> 44</a></span> <aclass="code"href="structfaiss_1_1ClusteringParameters.html">ClusteringParameters</a><aclass="code"href="structfaiss_1_1Level1Quantizer.html#abb7097ed40b15ba0af08af6d03608f72">cp</a>; <spanclass="comment">///< to override default clustering params</span></div>
<divclass="line"><aname="l00045"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1Level1Quantizer.html#a45d29dd6a5c53789c08e5ceb3f63d989"> 45</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1Index.html">Index</a> *<aclass="code"href="structfaiss_1_1Level1Quantizer.html#a45d29dd6a5c53789c08e5ceb3f63d989">clustering_index</a>; <spanclass="comment">///< to override index used during clustering</span></div>
<divclass="line"><aname="l00047"></a><spanclass="lineno"> 47</span> <spanclass="comment"> /// Trains the quantizer and calls train_residual to train sub-quantizers</span></div>
<divclass="line"><aname="l00048"></a><spanclass="lineno"> 48</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1Level1Quantizer.html#a0069a6ee1e32c2e0c1c7df9a95740dd4">train_q1</a> (<spanclass="keywordtype">size_t</span> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> *x, <spanclass="keywordtype">bool</span> verbose,</div>
<divclass="line"><aname="l00062"></a><spanclass="lineno"> 62</span> <spanclass="comment"> * - concurrent read accesses are allowed</span></div>
<divclass="line"><aname="l00063"></a><spanclass="lineno"> 63</span> <spanclass="comment"> * - concurrent update accesses are allowed</span></div>
<divclass="line"><aname="l00064"></a><spanclass="lineno"> 64</span> <spanclass="comment"> * - for resize and add_entries, only concurrent access to different lists</span></div>
<divclass="line"><aname="l00065"></a><spanclass="lineno"> 65</span> <spanclass="comment"> * are allowed</span></div>
<divclass="line"><aname="l00070"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1InvertedLists.html#afaf8b7aa3e846aa4553f6aae67827ec8"> 70</a></span> <spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1InvertedLists.html#afaf8b7aa3e846aa4553f6aae67827ec8">nlist</a>; <spanclass="comment">///< number of possible key values</span></div>
<divclass="line"><aname="l00071"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1InvertedLists.html#ae06049e4259edb47d443ef87bdedc744"> 71</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1InvertedLists.html#ae06049e4259edb47d443ef87bdedc744">code_size</a>; <spanclass="comment">///< code size per vector in bytes</span></div>
<divclass="line"><aname="l00087"></a><spanclass="lineno"> 87</span> <spanclass="comment"> /// @return a single id in an inverted list</span></div>
<divclass="line"><aname="l00090"></a><spanclass="lineno"> 90</span> <spanclass="comment"> /// @return a single code in an inverted list</span></div>
<divclass="line"><aname="l00094"></a><spanclass="lineno"> 94</span> <spanclass="comment"> /// prepare the following lists (default does nothing)</span></div>
<divclass="line"><aname="l00095"></a><spanclass="lineno"> 95</span> <spanclass="comment"> /// a list can be -1 hence the signed long</span></div>
<divclass="line"><aname="l00148"></a><spanclass="lineno"> 148</span> <spanclass="comment"> * In the inverted file, the quantizer (an Index instance) provides a</span></div>
<divclass="line"><aname="l00149"></a><spanclass="lineno"> 149</span> <spanclass="comment"> * quantization index for each vector to be added. The quantization</span></div>
<divclass="line"><aname="l00150"></a><spanclass="lineno"> 150</span> <spanclass="comment"> * index maps to a list (aka inverted list or posting list), where the</span></div>
<divclass="line"><aname="l00151"></a><spanclass="lineno"> 151</span> <spanclass="comment"> * id of the vector is stored.</span></div>
<divclass="line"><aname="l00153"></a><spanclass="lineno"> 153</span> <spanclass="comment"> * The inverted list object is required only after trainng. If none is</span></div>
<divclass="line"><aname="l00154"></a><spanclass="lineno"> 154</span> <spanclass="comment"> * set externally, an ArrayInvertedLists is used automatically.</span></div>
<divclass="line"><aname="l00156"></a><spanclass="lineno"> 156</span> <spanclass="comment"> * At search time, the vector to be searched is also quantized, and</span></div>
<divclass="line"><aname="l00157"></a><spanclass="lineno"> 157</span> <spanclass="comment"> * only the list corresponding to the quantization index is</span></div>
<divclass="line"><aname="l00158"></a><spanclass="lineno"> 158</span> <spanclass="comment"> * searched. This speeds up the search by making it</span></div>
<divclass="line"><aname="l00159"></a><spanclass="lineno"> 159</span> <spanclass="comment"> * non-exhaustive. This can be relaxed using multi-probe search: a few</span></div>
<divclass="line"><aname="l00160"></a><spanclass="lineno"> 160</span> <spanclass="comment"> * (nprobe) quantization indices are selected and several inverted</span></div>
<divclass="line"><aname="l00161"></a><spanclass="lineno"> 161</span> <spanclass="comment"> * lists are visited.</span></div>
<divclass="line"><aname="l00163"></a><spanclass="lineno"> 163</span> <spanclass="comment"> * Sub-classes implement a post-filtering of the index that refines</span></div>
<divclass="line"><aname="l00164"></a><spanclass="lineno"> 164</span> <spanclass="comment"> * the distance estimation from the query to databse vectors.</span></div>
<divclass="line"><aname="l00171"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVF.html#a46d1aeddb60643c5b3f096147c3e028f"> 171</a></span> <spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexIVF.html#a46d1aeddb60643c5b3f096147c3e028f">code_size</a>; <spanclass="comment">///< code size per vector in bytes</span></div>
<divclass="line"><aname="l00173"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVF.html#affed235eadf27a13d753ee4d33a1dc58"> 173</a></span> <spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexIVF.html#affed235eadf27a13d753ee4d33a1dc58">nprobe</a>; <spanclass="comment">///< number of probes at query time</span></div>
<divclass="line"><aname="l00174"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVF.html#a7f2dd34f66f8770acba74a0a591fa4a8"> 174</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexIVF.html#a7f2dd34f66f8770acba74a0a591fa4a8">max_codes</a>; <spanclass="comment">///< max nb of codes to visit to do a query</span></div>
<divclass="line"><aname="l00176"></a><spanclass="lineno"> 176</span> <spanclass="comment"> /// map for direct access to the elements. Enables reconstruct().</span></div>
<divclass="line"><aname="l00180"></a><spanclass="lineno"> 180</span> <spanclass="comment"> /** The Inverted file takes a quantizer (an Index) on input,</span></div>
<divclass="line"><aname="l00181"></a><spanclass="lineno"> 181</span> <spanclass="comment"> * which implements the function mapping a vector to a list</span></div>
<divclass="line"><aname="l00182"></a><spanclass="lineno"> 182</span> <spanclass="comment"> * identifier. The pointer is borrowed: the quantizer should not</span></div>
<divclass="line"><aname="l00183"></a><spanclass="lineno"> 183</span> <spanclass="comment"> * be deleted while the IndexIVF is in use.</span></div>
<divclass="line"><aname="l00191"></a><spanclass="lineno"> 191</span> <spanclass="comment"> /// Trains the quantizer and calls train_residual to train sub-quantizers</span></div>
<divclass="line"><aname="l00192"></a><spanclass="lineno"> 192</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVF.html#a7a1d5eec194db0977b2318c6ed6a2b86">train</a>(<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span>* x) <spanclass="keyword">override</span>;</div>
<divclass="line"><aname="l00197"></a><spanclass="lineno"> 197</span> <spanclass="comment"> /// Sub-classes that encode the residuals can train their encoders here</span></div>
<divclass="line"><aname="l00198"></a><spanclass="lineno"> 198</span> <spanclass="comment"> /// does nothing by default</span></div>
<divclass="line"><aname="l00199"></a><spanclass="lineno"> 199</span> <spanclass="comment"></span><spanclass="keyword">virtual</span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVF.html#a567ef760fd09d09ce2ee4f4e6c2d7280">train_residual</a> (<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> *x);</div>
<divclass="line"><aname="l00201"></a><spanclass="lineno"> 201</span> <spanclass="comment"> /** search a set of vectors, that are pre-quantized by the IVF</span></div>
<divclass="line"><aname="l00202"></a><spanclass="lineno"> 202</span> <spanclass="comment"> * quantizer. Fill in the corresponding heaps with the query</span></div>
<divclass="line"><aname="l00213"></a><spanclass="lineno"> 213</span> <spanclass="comment"> * @param store_pairs store inv list index + inv list offset</span></div>
<divclass="line"><aname="l00214"></a><spanclass="lineno"> 214</span> <spanclass="comment"> * instead in upper/lower 32 bit of result,</span></div>
<divclass="line"><aname="l00215"></a><spanclass="lineno"> 215</span> <spanclass="comment"> * instead of ids (used for reranking).</span></div>
<divclass="line"><aname="l00223"></a><spanclass="lineno"> 223</span> <spanclass="comment"> /** assign the vectors, then call search_preassign */</span></div>
<divclass="line"><aname="l00224"></a><spanclass="lineno"> 224</span> <spanclass="keyword">virtual</span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVF.html#ae2fd47b7d52603659e269aa8f6abb613">search</a> (<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> *x, <aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> k,</div>
<divclass="line"><aname="l00229"></a><spanclass="lineno"> 229</span> <spanclass="comment"> /** Reconstruct a subset of the indexed vectors.</span></div>
<divclass="line"><aname="l00240"></a><spanclass="lineno"> 240</span> <spanclass="comment"> /** Similar to search, but also reconstructs the stored vectors (or an</span></div>
<divclass="line"><aname="l00241"></a><spanclass="lineno"> 241</span> <spanclass="comment"> * approximation in the case of lossy coding) for the search results.</span></div>
<divclass="line"><aname="l00243"></a><spanclass="lineno"> 243</span> <spanclass="comment"> * Overrides default implementation to avoid having to maintain direct_map</span></div>
<divclass="line"><aname="l00244"></a><spanclass="lineno"> 244</span> <spanclass="comment"> * and instead fetch the code offsets through the `store_pairs` flag in</span></div>
<divclass="line"><aname="l00253"></a><spanclass="lineno"> 253</span> <spanclass="comment"> /** Reconstruct a vector given the location in terms of (inv list index +</span></div>
<divclass="line"><aname="l00254"></a><spanclass="lineno"> 254</span> <spanclass="comment"> * inv list offset) instead of the id.</span></div>
<divclass="line"><aname="l00256"></a><spanclass="lineno"> 256</span> <spanclass="comment"> * Useful for reconstructing when the direct_map is not maintained and</span></div>
<divclass="line"><aname="l00257"></a><spanclass="lineno"> 257</span> <spanclass="comment"> * the inv list offset is computed by search_preassigned() with</span></div>
<divclass="line"><aname="l00268"></a><spanclass="lineno"> 268</span> <spanclass="comment"> /** moves the entries from another dataset to self. On output,</span></div>
<divclass="line"><aname="l00269"></a><spanclass="lineno"> 269</span> <spanclass="comment"> * other is empty. add_id is added to all moved ids (for</span></div>
<divclass="line"><aname="l00270"></a><spanclass="lineno"> 270</span> <spanclass="comment"> * sequential ids, this would be this->ntotal */</span></div>
<divclass="line"><aname="l00273"></a><spanclass="lineno"> 273</span> <spanclass="comment"> /** copy a subset of the entries index to the other index</span></div>
<divclass="line"><aname="l00275"></a><spanclass="lineno"> 275</span> <spanclass="comment"> * if subset_type == 0: copies ids in [a1, a2)</span></div>
<divclass="line"><aname="l00276"></a><spanclass="lineno"> 276</span> <spanclass="comment"> * if subset_type == 1: copies ids if id % a1 == a2</span></div>
<divclass="line"><aname="l00277"></a><spanclass="lineno"> 277</span> <spanclass="comment"> * if subset_type == 2: copies inverted lists such that a1</span></div>
<divclass="line"><aname="l00278"></a><spanclass="lineno"> 278</span> <spanclass="comment"> * elements are left before and a2 elements are after</span></div>
<divclass="line"><aname="l00290"></a><spanclass="lineno"> 290</span> <spanclass="comment"> * @param new_maintain_direct_map if true, create a direct map,</span></div>
<divclass="line"><aname="l00298"></a><spanclass="lineno"> 298</span> <spanclass="comment"> /// display some stats about the inverted lists</span></div>
<divclass="line"><aname="l00308"></a><spanclass="lineno"> 308</span> <spanclass="keywordtype">size_t</span> nq; <spanclass="comment">// nb of queries run</span></div>
<divclass="line"><aname="l00309"></a><spanclass="lineno"> 309</span> <spanclass="keywordtype">size_t</span> nlist; <spanclass="comment">// nb of inverted lists scanned</span></div>
<divclass="line"><aname="l00310"></a><spanclass="lineno"> 310</span> <spanclass="keywordtype">size_t</span> ndis; <spanclass="comment">// nb of distancs computed</span></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a2fc63f9bbfe64e05106366465ece2187"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a2fc63f9bbfe64e05106366465ece2187">faiss::IndexIVF::copy_subset_to</a></div><divclass="ttdeci">virtual void copy_subset_to(IndexIVF &other, int subset_type, long a1, long a2) const </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00527">IndexIVF.cpp:527</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_aac87273dafff2027d4bcf706e1c7d83f"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#aac87273dafff2027d4bcf706e1c7d83f">faiss::IndexIVF::reconstruct_from_offset</a></div><divclass="ttdeci">virtual void reconstruct_from_offset(long list_no, long offset, float *recons) const </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00370">IndexIVF.cpp:370</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_affed235eadf27a13d753ee4d33a1dc58"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#affed235eadf27a13d753ee4d33a1dc58">faiss::IndexIVF::nprobe</a></div><divclass="ttdeci">size_t nprobe</div><divclass="ttdoc">number of probes at query time </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00173">IndexIVF.h:173</a></div></div>
<divclass="ttc"id="structfaiss_1_1InvertedLists_html_a9bd256053ee360473842105460fe285f"><divclass="ttname"><ahref="structfaiss_1_1InvertedLists.html#a9bd256053ee360473842105460fe285f">faiss::InvertedLists::list_size</a></div><divclass="ttdeci">virtual size_t list_size(size_t list_no) const =0</div><divclass="ttdoc">get the size of a list </div></div>
<divclass="ttc"id="structfaiss_1_1InvertedLists_html_ae06049e4259edb47d443ef87bdedc744"><divclass="ttname"><ahref="structfaiss_1_1InvertedLists.html#ae06049e4259edb47d443ef87bdedc744">faiss::InvertedLists::code_size</a></div><divclass="ttdeci">size_t code_size</div><divclass="ttdoc">code size per vector in bytes </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00071">IndexIVF.h:71</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a7a1d5eec194db0977b2318c6ed6a2b86"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a7a1d5eec194db0977b2318c6ed6a2b86">faiss::IndexIVF::train</a></div><divclass="ttdeci">void train(idx_t n, const float *x) override</div><divclass="ttdoc">Trains the quantizer and calls train_residual to train sub-quantizers. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00424">IndexIVF.cpp:424</a></div></div>
<divclass="ttc"id="structfaiss_1_1InvertedLists_html_acd3e36cc06fc49e02773e403a84dba95"><divclass="ttname"><ahref="structfaiss_1_1InvertedLists.html#acd3e36cc06fc49e02773e403a84dba95">faiss::InvertedLists::add_entry</a></div><divclass="ttdeci">virtual size_t add_entry(size_t list_no, idx_t theid, const uint8_t *code)</div><divclass="ttdoc">add one entry to an inverted list </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00136">IndexIVF.cpp:136</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_a040c6aed1f224f3ea7bf58eebc0c31a4"><divclass="ttname"><ahref="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">faiss::Index::idx_t</a></div><divclass="ttdeci">long idx_t</div><divclass="ttdoc">all indices are this type </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00062">Index.h:62</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a47a3b7665e9d2be41c6d3b2e9144b73f"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a47a3b7665e9d2be41c6d3b2e9144b73f">faiss::IndexIVF::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00376">IndexIVF.cpp:376</a></div></div>
<divclass="ttc"id="structfaiss_1_1InvertedLists_html_a4e62994e54a0834f130bb4ba09c16a9c"><divclass="ttname"><ahref="structfaiss_1_1InvertedLists.html#a4e62994e54a0834f130bb4ba09c16a9c">faiss::InvertedLists::prefetch_lists</a></div><divclass="ttdeci">virtual void prefetch_lists(const long *list_nos, int nlist) const </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00126">IndexIVF.cpp:126</a></div></div>
<divclass="ttc"id="structfaiss_1_1Level1Quantizer_html_a45d29dd6a5c53789c08e5ceb3f63d989"><divclass="ttname"><ahref="structfaiss_1_1Level1Quantizer.html#a45d29dd6a5c53789c08e5ceb3f63d989">faiss::Level1Quantizer::clustering_index</a></div><divclass="ttdeci">Index * clustering_index</div><divclass="ttdoc">to override index used during clustering </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00045">IndexIVF.h:45</a></div></div>
<divclass="ttc"id="structfaiss_1_1Level1Quantizer_html_a0069a6ee1e32c2e0c1c7df9a95740dd4"><divclass="ttname"><ahref="structfaiss_1_1Level1Quantizer.html#a0069a6ee1e32c2e0c1c7df9a95740dd4">faiss::Level1Quantizer::train_q1</a></div><divclass="ttdeci">void train_q1(size_t n, const float *x, bool verbose, MetricType metric_type)</div><divclass="ttdoc">Trains the quantizer and calls train_residual to train sub-quantizers. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00056">IndexIVF.cpp:56</a></div></div>
<divclass="ttc"id="structfaiss_1_1InvertedLists_html_afaf8b7aa3e846aa4553f6aae67827ec8"><divclass="ttname"><ahref="structfaiss_1_1InvertedLists.html#afaf8b7aa3e846aa4553f6aae67827ec8">faiss::InvertedLists::nlist</a></div><divclass="ttdeci">size_t nlist</div><divclass="ttdoc">number of possible key values </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00070">IndexIVF.h:70</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a513dfec3a250f08a9fdd18a24178e6bb"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a513dfec3a250f08a9fdd18a24178e6bb">faiss::IndexIVF::print_stats</a></div><divclass="ttdeci">void print_stats() const </div><divclass="ttdoc">display some stats about the inverted lists </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00456">IndexIVF.cpp:456</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_aa0e8fc5e04cbd8e0dde61f98bc7dd0bc"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#aa0e8fc5e04cbd8e0dde61f98bc7dd0bc">faiss::IndexIVF::invlists</a></div><divclass="ttdeci">InvertedLists * invlists</div><divclass="ttdoc">Acess to the actual data. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00168">IndexIVF.h:168</a></div></div>
<divclass="ttc"id="structfaiss_1_1ArrayInvertedLists_html_a48563a58d3bbfbb4334f3afdf2c9ba7a"><divclass="ttname"><ahref="structfaiss_1_1ArrayInvertedLists.html#a48563a58d3bbfbb4334f3afdf2c9ba7a">faiss::ArrayInvertedLists::ids</a></div><divclass="ttdeci">std::vector< std::vector< idx_t >> ids</div><divclass="ttdoc">Inverted lists for indexes. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00125">IndexIVF.h:125</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a821002a9d3a1a74dc8d6f6072eca4075"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a821002a9d3a1a74dc8d6f6072eca4075">faiss::IndexIVF::add</a></div><divclass="ttdeci">void add(idx_t n, const float *x) override</div><divclass="ttdoc">Quantizes x and calls add_with_key. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00252">IndexIVF.cpp:252</a></div></div>
<divclass="ttc"id="structfaiss_1_1Level1Quantizer_html_a3cf99e2ee92b8558a066f821efab95d5"><divclass="ttname"><ahref="structfaiss_1_1Level1Quantizer.html#a3cf99e2ee92b8558a066f821efab95d5">faiss::Level1Quantizer::quantizer</a></div><divclass="ttdeci">Index * quantizer</div><divclass="ttdoc">quantizer that maps vectors to inverted lists </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00033">IndexIVF.h:33</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a7f2dd34f66f8770acba74a0a591fa4a8"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a7f2dd34f66f8770acba74a0a591fa4a8">faiss::IndexIVF::max_codes</a></div><divclass="ttdeci">size_t max_codes</div><divclass="ttdoc">max nb of codes to visit to do a query </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00174">IndexIVF.h:174</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_aedd0c14b5654295b291638ec7f9f9517"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#aedd0c14b5654295b291638ec7f9f9517">faiss::IndexIVF::maintain_direct_map</a></div><divclass="ttdeci">bool maintain_direct_map</div><divclass="ttdoc">map for direct access to the elements. Enables reconstruct(). </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00177">IndexIVF.h:177</a></div></div>
<divclass="ttc"id="structfaiss_1_1ArrayInvertedLists_html_af43d3f5c5bd897205853b289603fb42b"><divclass="ttname"><ahref="structfaiss_1_1ArrayInvertedLists.html#af43d3f5c5bd897205853b289603fb42b">faiss::ArrayInvertedLists::list_size</a></div><divclass="ttdeci">size_t list_size(size_t list_no) const override</div><divclass="ttdoc">get the size of a list </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8cpp_source.html#l00179">IndexIVF.cpp:179</a></div></div>
<divclass="ttc"id="structfaiss_1_1Level1Quantizer_html_a1c4fc9d874d9492ee0ea27a5be388fa7"><divclass="ttname"><ahref="structfaiss_1_1Level1Quantizer.html#a1c4fc9d874d9492ee0ea27a5be388fa7">faiss::Level1Quantizer::nlist</a></div><divclass="ttdeci">size_t nlist</div><divclass="ttdoc">number of possible key values </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00034">IndexIVF.h:34</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a46d1aeddb60643c5b3f096147c3e028f"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a46d1aeddb60643c5b3f096147c3e028f">faiss::IndexIVF::code_size</a></div><divclass="ttdeci">size_t code_size</div><divclass="ttdoc">code size per vector in bytes </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00171">IndexIVF.h:171</a></div></div>
<divclass="ttc"id="namespacefaiss_html_afd12191c638da74760ff397cf319752c"><divclass="ttname"><ahref="namespacefaiss.html#afd12191c638da74760ff397cf319752c">faiss::MetricType</a></div><divclass="ttdeci">MetricType</div><divclass="ttdoc">Some algorithms support both an inner product version and a L2 search version. </div><divclass="ttdef"><b>Definition:</b><ahref="Index_8h_source.html#l00043">Index.h:43</a></div></div>