<divclass="line"><aname="l00006"></a><spanclass="lineno"> 6</span> <spanclass="comment"> * This source code is licensed under the CC-by-NC license found in the</span></div>
<divclass="line"><aname="l00007"></a><spanclass="lineno"> 7</span> <spanclass="comment"> * LICENSE file in the root directory of this source tree.</span></div>
<divclass="line"><aname="l00010"></a><spanclass="lineno"> 10</span> <spanclass="comment">// Copyright 2004-present Facebook. All Rights Reserved.</span></div>
<divclass="line"><aname="l00011"></a><spanclass="lineno"> 11</span> <spanclass="comment">// -*- c++ -*-</span></div>
<divclass="line"><aname="l00027"></a><spanclass="lineno"> 27</span> <spanclass="comment">/** Inverted file with Product Quantizer encoding. Each residual</span></div>
<divclass="line"><aname="l00028"></a><spanclass="lineno"> 28</span> <spanclass="comment"> * vector is encoded as a product quantizer code.</span></div>
<divclass="line"><aname="l00031"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#afd13b471df293ae5a6e895704c69a4c3"> 31</a></span> <spanclass="keywordtype">bool</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#afd13b471df293ae5a6e895704c69a4c3">by_residual</a>; <spanclass="comment">///< Encode residual or plain vector?</span></div>
<divclass="line"><aname="l00032"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a1c66ff073c18a1edbe8444c24d870583"> 32</a></span> <spanclass="comment"></span><spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a1c66ff073c18a1edbe8444c24d870583">use_precomputed_table</a>; <spanclass="comment">///< if by_residual, build precompute tables</span></div>
<divclass="line"><aname="l00033"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a31c6fb2faa4dadea4c0594338be7be90"> 33</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a31c6fb2faa4dadea4c0594338be7be90">code_size</a>; <spanclass="comment">///< code size per vector in bytes</span></div>
<divclass="line"><aname="l00034"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a007303be116c8da65b6d058e3fc77d16"> 34</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1ProductQuantizer.html">ProductQuantizer</a><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a007303be116c8da65b6d058e3fc77d16">pq</a>; <spanclass="comment">///< produces the codes</span></div>
<divclass="line"><aname="l00036"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a9d5373633df7a9bec4de69400b9adeed"> 36</a></span> <spanclass="keywordtype">bool</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a9d5373633df7a9bec4de69400b9adeed">do_polysemous_training</a>; <spanclass="comment">///< reorder PQ centroids after training?</span></div>
<divclass="line"><aname="l00037"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a2b14cbb5acb3fc28a4df8fde3f5567cd"> 37</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1PolysemousTraining.html">PolysemousTraining</a> *<aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a2b14cbb5acb3fc28a4df8fde3f5567cd">polysemous_training</a>; <spanclass="comment">///< if NULL, use default</span></div>
<divclass="line"><aname="l00040"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a7430fc4fa030c96497abced3b68358d4"> 40</a></span> <spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a7430fc4fa030c96497abced3b68358d4">scan_table_threshold</a>; <spanclass="comment">///< use table computation or on-the-fly?</span></div>
<divclass="line"><aname="l00041"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a77501995b3671e377102d2db1a93ade4"> 41</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a77501995b3671e377102d2db1a93ade4">max_codes</a>; <spanclass="comment">///< max nb of codes to visit to do a query</span></div>
<divclass="line"><aname="l00042"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQ.html#a3093a0a3e128eafce6e0583b75e9662e"> 42</a></span> <spanclass="comment"></span><spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a3093a0a3e128eafce6e0583b75e9662e">polysemous_ht</a>; <spanclass="comment">///< Hamming thresh for polysemous filtering</span></div>
<divclass="line"><aname="l00052"></a><spanclass="lineno"> 52</span> <spanclass="keywordtype">size_t</span> M, <spanclass="keywordtype">size_t</span> nbits_per_idx);</div>
<divclass="line"><aname="l00057"></a><spanclass="lineno"> 57</span> <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="l00062"></a><spanclass="lineno"> 62</span> <spanclass="comment"> /// - use precomputed list numbers if precomputed_idx != NULL</span></div>
<divclass="line"><aname="l00063"></a><spanclass="lineno"> 63</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#ac0cb8421b9885d691696d2ff4f76894b">add_core_o</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="l00078"></a><spanclass="lineno"> 78</span> <spanclass="comment"> /// same as train_residual, also output 2nd level residuals</span></div>
<divclass="line"><aname="l00079"></a><spanclass="lineno"> 79</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a4e06f04853dcb424dc393de5f641e917">train_residual_o</a> (<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> *x, <spanclass="keywordtype">float</span> *residuals_2);</div>
<divclass="line"><aname="l00082"></a><spanclass="lineno"> 82</span> <spanclass="comment"> /** Reconstruct a subset of the indexed vectors</span></div>
<divclass="line"><aname="l00096"></a><spanclass="lineno"> 96</span> <spanclass="comment"> * the duplicates are returned in pre-allocated arrays (see the</span></div>
<divclass="line"><aname="l00097"></a><spanclass="lineno"> 97</span> <spanclass="comment"> * max sizes).</span></div>
<divclass="line"><aname="l00099"></a><spanclass="lineno"> 99</span> <spanclass="comment"> * @params lims limits between groups of duplicates</span></div>
<divclass="line"><aname="l00101"></a><spanclass="lineno"> 101</span> <spanclass="comment"> * @params ids ids[lims[i]] : ids[lims[i+1]-1] is a group of</span></div>
<divclass="line"><aname="l00107"></a><spanclass="lineno"> 107</span> <spanclass="comment">// map a vector to a binary code knowning the index</span></div>
<divclass="line"><aname="l00110"></a><spanclass="lineno"> 110</span> <spanclass="comment"> /// same as encode, for multiple points at once</span></div>
<divclass="line"><aname="l00111"></a><spanclass="lineno"> 111</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVFPQ.html#a947c6b15c2dde086a8e638fa69b7a7a6">encode_multiple</a> (<spanclass="keywordtype">size_t</span> n, <spanclass="keyword">const</span><spanclass="keywordtype">long</span> *keys,</div>
<divclass="line"><aname="l00114"></a><spanclass="lineno"> 114</span> <spanclass="comment"> /** search a set of vectors, that are pre-quantized by the IVF</span></div>
<divclass="line"><aname="l00115"></a><spanclass="lineno"> 115</span> <spanclass="comment"> * quantizer. Fill in the corresponding heaps with the query</span></div>
<divclass="line"><aname="l00123"></a><spanclass="lineno"> 123</span> <spanclass="comment"> * @param res heaps for all the results, gives the nprobe</span></div>
<divclass="line"><aname="l00124"></a><spanclass="lineno"> 124</span> <spanclass="comment"> * @param store_pairs store inv list index + inv list offset</span></div>
<divclass="line"><aname="l00125"></a><spanclass="lineno"> 125</span> <spanclass="comment"> * instead in upper/lower 32 bit of result,</span></div>
<divclass="line"><aname="l00126"></a><spanclass="lineno"> 126</span> <spanclass="comment"> * instead of ids (used for reranking).</span></div>
<divclass="line"><aname="l00143"></a><spanclass="lineno"> 143</span> <spanclass="comment"> /** copy a subset of the entries index to the other index</span></div>
<divclass="line"><aname="l00145"></a><spanclass="lineno"> 145</span> <spanclass="comment"> * if subset_type == 0: copies ids in [a1, a2)</span></div>
<divclass="line"><aname="l00146"></a><spanclass="lineno"> 146</span> <spanclass="comment"> * if subset_type == 1: copies ids if id % a1 == a2</span></div>
<divclass="line"><aname="l00156"></a><spanclass="lineno"> 156</span> <spanclass="comment">/// statistics are robust to internal threading, but not if</span></div>
<divclass="line"><aname="l00157"></a><spanclass="lineno"> 157</span> <spanclass="comment">/// IndexIVFPQ::search is called by multiple threads</span></div>
<divclass="line"><aname="l00159"></a><spanclass="lineno"> 159</span> <spanclass="keywordtype">size_t</span> nq; <spanclass="comment">// nb of queries run</span></div>
<divclass="line"><aname="l00160"></a><spanclass="lineno"> 160</span> <spanclass="keywordtype">size_t</span> nlist; <spanclass="comment">// nb of inverted lists scanned</span></div>
<divclass="line"><aname="l00161"></a><spanclass="lineno"> 161</span> <spanclass="keywordtype">size_t</span> ncode; <spanclass="comment">// nb of codes visited</span></div>
<divclass="line"><aname="l00162"></a><spanclass="lineno"> 162</span> <spanclass="keywordtype">size_t</span> nrefine; <spanclass="comment">// nb of refines (IVFPQR)</span></div>
<divclass="line"><aname="l00165"></a><spanclass="lineno"> 165</span> <spanclass="comment">// nb of passed Hamming distance tests (for polysemous)</span></div>
<divclass="line"><aname="l00171"></a><spanclass="lineno"> 171</span> <spanclass="keywordtype">size_t</span> refine_cycles; <spanclass="comment">// only for IVFPQR</span></div>
<divclass="line"><aname="l00173"></a><spanclass="lineno"> 173</span> <spanclass="comment">// single thread (double-counted with search_cycles)</span></div>
<divclass="line"><aname="l00188"></a><spanclass="lineno"> 188</span> <spanclass="comment">/** Index with an additional level of PQ refinement */</span></div>
<divclass="line"><aname="l00193"></a><spanclass="lineno"> 193</span> <spanclass="comment"> /// factor between k requested in search and the k requested from the IVFPQ</span></div>
<divclass="line"><aname="l00198"></a><spanclass="lineno"> 198</span> <spanclass="keywordtype">size_t</span> M, <spanclass="keywordtype">size_t</span> nbits_per_idx,</div>
<divclass="line"><aname="l00213"></a><spanclass="lineno"> 213</span> <spanclass="comment"> /// same as add_with_ids, but optionally use the precomputed list ids</span></div>
<divclass="line"><aname="l00214"></a><spanclass="lineno"> 214</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVFPQR.html#a186b746f22b65ddf416b1e821b0866ec">add_core</a> (<aclass="code"href="structfaiss_1_1Index.html#a040c6aed1f224f3ea7bf58eebc0c31a4">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span> *x, <spanclass="keyword">const</span><spanclass="keywordtype">long</span> *xids,</div>
<divclass="line"><aname="l00231"></a><spanclass="lineno"> 231</span> <spanclass="comment">/** Index with 32-bit ids and flat tables. Must be constructed from an</span></div>
<divclass="line"><aname="l00232"></a><spanclass="lineno"> 232</span> <spanclass="comment"> * exisiting IndexIVFPQ. Cannot be copy-constructed/assigned. The</span></div>
<divclass="line"><aname="l00233"></a><spanclass="lineno"> 233</span> <spanclass="comment"> * actual data is stored in the compact_* tables, the ids and codes</span></div>
<divclass="line"><aname="l00234"></a><spanclass="lineno"> 234</span> <spanclass="comment"> * tables are not used. */</span></div>
<divclass="line"><aname="l00239"></a><spanclass="lineno"> 239</span> <spanclass="comment"> /// how were the compact tables allocated?</span></div>
<divclass="line"><aname="l00241"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70a3d58d7b26146791f0fe34b35a9b0fd95"> 241</a></span> <aclass="code"href="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70a3d58d7b26146791f0fe34b35a9b0fd95">Alloc_type_none</a>, <spanclass="comment">///< alloc from outside</span></div>
<divclass="line"><aname="l00242"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70acf2d6ba8878a2778383adc32593ba8e6"> 242</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70acf2d6ba8878a2778383adc32593ba8e6">Alloc_type_new</a>, <spanclass="comment">///< was allocated with new</span></div>
<divclass="line"><aname="l00243"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70a38c1b1ed9ebdbd4b0047be13080094bb"> 243</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70a38c1b1ed9ebdbd4b0047be13080094bb">Alloc_type_mmap</a><spanclass="comment">///< was mmapped</span></div>
<divclass="line"><aname="l00252"></a><spanclass="lineno"> 252</span> <spanclass="comment">// file and buffer this was mmapped (will be unmapped when object</span></div>
<divclass="line"><aname="l00253"></a><spanclass="lineno"> 253</span> <spanclass="comment">// is deleted)</span></div>
<divclass="line"><aname="l00265"></a><spanclass="lineno"> 265</span> <spanclass="comment"> /// the three following functions will fail at runtime</span></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_af278c710f6c7605f59e1da48a6dea37a"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#af278c710f6c7605f59e1da48a6dea37a">faiss::IndexIVFPQ::copy_subset_to</a></div><divclass="ttdeci">void copy_subset_to(IndexIVFPQ &other, int subset_type, long a1, long a2) const </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l00317">IndexIVFPQ.cpp:317</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a2b14cbb5acb3fc28a4df8fde3f5567cd"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a2b14cbb5acb3fc28a4df8fde3f5567cd">faiss::IndexIVFPQ::polysemous_training</a></div><divclass="ttdeci">PolysemousTraining * polysemous_training</div><divclass="ttdoc">if NULL, use default </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00037">IndexIVFPQ.h:37</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQCompact_html_ade7b46bbbcaf244ad680104380afb1b8"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQCompact.html#ade7b46bbbcaf244ad680104380afb1b8">faiss::IndexIVFPQCompact::add</a></div><divclass="ttdeci">virtual void add(idx_t, const float *) override</div><divclass="ttdoc">the three following functions will fail at runtime </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01445">IndexIVFPQ.cpp:1445</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a6b8964e2da609a9261a8a35ae347ecb2"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a6b8964e2da609a9261a8a35ae347ecb2">faiss::IndexIVFPQ::merge_from_residuals</a></div><divclass="ttdeci">virtual void merge_from_residuals(IndexIVF &other) override</div><divclass="ttdoc">used to implement merging </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l00307">IndexIVFPQ.cpp:307</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a4e06f04853dcb424dc393de5f641e917"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a4e06f04853dcb424dc393de5f641e917">faiss::IndexIVFPQ::train_residual_o</a></div><divclass="ttdeci">void train_residual_o(idx_t n, const float *x, float *residuals_2)</div><divclass="ttdoc">same as train_residual, also output 2nd level residuals </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l00083">IndexIVFPQ.cpp:83</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a9d5373633df7a9bec4de69400b9adeed"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a9d5373633df7a9bec4de69400b9adeed">faiss::IndexIVFPQ::do_polysemous_training</a></div><divclass="ttdeci">bool do_polysemous_training</div><divclass="ttdoc">reorder PQ centroids after training? </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00036">IndexIVFPQ.h:36</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a7430fc4fa030c96497abced3b68358d4"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a7430fc4fa030c96497abced3b68358d4">faiss::IndexIVFPQ::scan_table_threshold</a></div><divclass="ttdeci">size_t scan_table_threshold</div><divclass="ttdoc">use table computation or on-the-fly? </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00040">IndexIVFPQ.h:40</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_a68ed7cae5bec89fcdcb6a1d2addbd5a8"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#a68ed7cae5bec89fcdcb6a1d2addbd5a8">faiss::IndexIVFPQR::train_residual</a></div><divclass="ttdeci">virtual void train_residual(idx_t n, const float *x) override</div><divclass="ttdoc">trains the two product quantizers </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01206">IndexIVFPQ.cpp:1206</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_a186b746f22b65ddf416b1e821b0866ec"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#a186b746f22b65ddf416b1e821b0866ec">faiss::IndexIVFPQR::add_core</a></div><divclass="ttdeci">void add_core(idx_t n, const float *x, const long *xids, const long *precomputed_idx=nullptr)</div><divclass="ttdoc">same as add_with_ids, but optionally use the precomputed list ids </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01230">IndexIVFPQ.cpp:1230</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_ae0e979a014a9defe2254e9543657b075"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#ae0e979a014a9defe2254e9543657b075">faiss::IndexIVFPQR::reset</a></div><divclass="ttdeci">virtual void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01197">IndexIVFPQ.cpp:1197</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a981c2748bfbd9b018494f119279a0342"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a981c2748bfbd9b018494f119279a0342">faiss::IndexIVFPQ::add_with_ids</a></div><divclass="ttdeci">virtual void add_with_ids(idx_t n, const float *x, const long *xids=nullptr) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l00170">IndexIVFPQ.cpp:170</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_af16d325f5bef22b2e5f90ceea796e80d"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#af16d325f5bef22b2e5f90ceea796e80d">faiss::IndexIVF::ids</a></div><divclass="ttdeci">std::vector< std::vector< long >> ids</div><divclass="ttdoc">Inverted lists for indexes. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVF_8h_source.html#l00056">IndexIVF.h:56</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_a4b40cc7a70dff41196a3b8769586667a"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#a4b40cc7a70dff41196a3b8769586667a">faiss::IndexIVF::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#l00050">IndexIVF.h:50</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a77501995b3671e377102d2db1a93ade4"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a77501995b3671e377102d2db1a93ade4">faiss::IndexIVFPQ::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="IndexIVFPQ_8h_source.html#l00041">IndexIVFPQ.h:41</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQCompact_html_ab2698c5d65644a171c53ffe39e420b70"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70">faiss::IndexIVFPQCompact::Alloc_type_t</a></div><divclass="ttdeci">Alloc_type_t</div><divclass="ttdoc">how were the compact tables allocated? </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00240">IndexIVFPQ.h:240</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#l00064">Index.h:64</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_acd807799dc56dcef0f221847a2af86f7"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#acd807799dc56dcef0f221847a2af86f7">faiss::IndexIVFPQ::reset</a></div><divclass="ttdeci">virtual void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01065">IndexIVFPQ.cpp:1065</a></div></div>
<divclass="ttc"id="structfaiss_1_1PolysemousTraining_html"><divclass="ttname"><ahref="structfaiss_1_1PolysemousTraining.html">faiss::PolysemousTraining</a></div><divclass="ttdoc">optimizes the order of indices in a ProductQuantizer </div><divclass="ttdef"><b>Definition:</b><ahref="PolysemousTraining_8h_source.html#l00127">PolysemousTraining.h:127</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_af6c7ee3bc917cc5d4ab04ff64269ee06"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#af6c7ee3bc917cc5d4ab04ff64269ee06">faiss::IndexIVFPQR::merge_from_residuals</a></div><divclass="ttdeci">virtual void merge_from_residuals(IndexIVF &other) override</div><divclass="ttdoc">used to implement merging </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01353">IndexIVFPQ.cpp:1353</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_afd13b471df293ae5a6e895704c69a4c3"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#afd13b471df293ae5a6e895704c69a4c3">faiss::IndexIVFPQ::by_residual</a></div><divclass="ttdeci">bool by_residual</div><divclass="ttdoc">Encode residual or plain vector? </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00031">IndexIVFPQ.h:31</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQCompact_html_ab2698c5d65644a171c53ffe39e420b70a3d58d7b26146791f0fe34b35a9b0fd95"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70a3d58d7b26146791f0fe34b35a9b0fd95">faiss::IndexIVFPQCompact::Alloc_type_none</a></div><divclass="ttdoc">alloc from outside </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00241">IndexIVFPQ.h:241</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a007303be116c8da65b6d058e3fc77d16"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a007303be116c8da65b6d058e3fc77d16">faiss::IndexIVFPQ::pq</a></div><divclass="ttdeci">ProductQuantizer pq</div><divclass="ttdoc">produces the codes </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00034">IndexIVFPQ.h:34</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVF_html_ab38fde4c923abefc4185eb7450b5b95b"><divclass="ttname"><ahref="structfaiss_1_1IndexIVF.html#ab38fde4c923abefc4185eb7450b5b95b">faiss::IndexIVF::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#l00047">IndexIVF.h:47</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_ac0cb8421b9885d691696d2ff4f76894b"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#ac0cb8421b9885d691696d2ff4f76894b">faiss::IndexIVFPQ::add_core_o</a></div><divclass="ttdeci">void add_core_o(idx_t n, const float *x, const long *xids, float *residuals_2, const long *precomputed_idx=nullptr)</div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l00176">IndexIVFPQ.cpp:176</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a31c6fb2faa4dadea4c0594338be7be90"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a31c6fb2faa4dadea4c0594338be7be90">faiss::IndexIVFPQ::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="IndexIVFPQ_8h_source.html#l00033">IndexIVFPQ.h:33</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_acc5eeeeb8ac8d2581ef07947932d9f6c"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#acc5eeeeb8ac8d2581ef07947932d9f6c">faiss::IndexIVFPQR::remove_ids</a></div><divclass="ttdeci">virtual long remove_ids(const IDSelector &sel) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01362">IndexIVFPQ.cpp:1362</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQCompact_html_a8f5eccfb4d5e4098ff6c00acb3bc40a1"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQCompact.html#a8f5eccfb4d5e4098ff6c00acb3bc40a1">faiss::IndexIVFPQCompact::reset</a></div><divclass="ttdeci">virtual void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01449">IndexIVFPQ.cpp:1449</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQCompact_html_ab2698c5d65644a171c53ffe39e420b70acf2d6ba8878a2778383adc32593ba8e6"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQCompact.html#ab2698c5d65644a171c53ffe39e420b70acf2d6ba8878a2778383adc32593ba8e6">faiss::IndexIVFPQCompact::Alloc_type_new</a></div><divclass="ttdoc">was allocated with new </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00242">IndexIVFPQ.h:242</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQ_html_a947c6b15c2dde086a8e638fa69b7a7a6"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQ.html#a947c6b15c2dde086a8e638fa69b7a7a6">faiss::IndexIVFPQ::encode_multiple</a></div><divclass="ttdeci">void encode_multiple(size_t n, const long *keys, const float *x, uint8_t *codes) const </div><divclass="ttdoc">same as encode, for multiple points at once </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l00153">IndexIVFPQ.cpp:153</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_a4b6154a5194d574d037ba78c137a2fa5"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#a4b6154a5194d574d037ba78c137a2fa5">faiss::IndexIVFPQR::add_with_ids</a></div><divclass="ttdeci">virtual void add_with_ids(idx_t n, const float *x, const long *xids) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8cpp_source.html#l01226">IndexIVFPQ.cpp:1226</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFPQR_html_a0b02a4151ceacc070352f8b15cc0ee0b"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFPQR.html#a0b02a4151ceacc070352f8b15cc0ee0b">faiss::IndexIVFPQR::k_factor</a></div><divclass="ttdeci">float k_factor</div><divclass="ttdoc">factor between k requested in search and the k requested from the IVFPQ </div><divclass="ttdef"><b>Definition:</b><ahref="IndexIVFPQ_8h_source.html#l00194">IndexIVFPQ.h:194</a></div></div>