<divclass="line"><aname="l00002"></a><spanclass="lineno"> 2</span> <spanclass="comment"> * Copyright (c) Facebook, Inc. and its affiliates.</span></div>
<divclass="line"><aname="l00004"></a><spanclass="lineno"> 4</span> <spanclass="comment"> * This source code is licensed under the MIT license found in the</span></div>
<divclass="line"><aname="l00005"></a><spanclass="lineno"> 5</span> <spanclass="comment"> * LICENSE file in the root directory of this source tree.</span></div>
<divclass="line"><aname="l00028"></a><spanclass="lineno"> 28</span> <spanclass="comment"> * In the inverted file, the quantizer (an IndexBinary instance) provides a</span></div>
<divclass="line"><aname="l00029"></a><spanclass="lineno"> 29</span> <spanclass="comment"> * quantization index for each vector to be added. The quantization</span></div>
<divclass="line"><aname="l00030"></a><spanclass="lineno"> 30</span> <spanclass="comment"> * index maps to a list (aka inverted list or posting list), where the</span></div>
<divclass="line"><aname="l00031"></a><spanclass="lineno"> 31</span> <spanclass="comment"> * id of the vector is stored.</span></div>
<divclass="line"><aname="l00033"></a><spanclass="lineno"> 33</span> <spanclass="comment"> * Otherwise the object is similar to the IndexIVF</span></div>
<divclass="line"><aname="l00040"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexBinaryIVF.html#ae9890e0946f3aba99ccad6b637df0c8b"> 40</a></span> <spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#ae9890e0946f3aba99ccad6b637df0c8b">nprobe</a>; <spanclass="comment">///< number of probes at query time</span></div>
<divclass="line"><aname="l00041"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexBinaryIVF.html#a18ffc5dbf15b4a86a8c868ca845ea4c9"> 41</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#a18ffc5dbf15b4a86a8c868ca845ea4c9">max_codes</a>; <spanclass="comment">///< max nb of codes to visit to do a query</span></div>
<divclass="line"><aname="l00043"></a><spanclass="lineno"> 43</span> <spanclass="comment"> /** Select between using a heap or counting to select the k smallest values</span></div>
<divclass="line"><aname="l00044"></a><spanclass="lineno"> 44</span> <spanclass="comment"> * when scanning inverted lists.</span></div>
<divclass="line"><aname="l00048"></a><spanclass="lineno"> 48</span> <spanclass="comment"> /// map for direct access to the elements. Enables reconstruct().</span></div>
<divclass="line"><aname="l00052"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexBinaryIVF.html#a5c08ac8e6c1444e61b9f357cfba34e2e"> 52</a></span> <aclass="code"href="structfaiss_1_1IndexBinary.html">IndexBinary</a> *<aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#a5c08ac8e6c1444e61b9f357cfba34e2e">quantizer</a>; <spanclass="comment">///< quantizer that maps vectors to inverted lists</span></div>
<divclass="line"><aname="l00053"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexBinaryIVF.html#a9eb4370bcc95994822c3a81c290fa919"> 53</a></span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span><aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#a9eb4370bcc95994822c3a81c290fa919">nlist</a>; <spanclass="comment">///< number of possible key values</span></div>
<divclass="line"><aname="l00057"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexBinaryIVF.html#a0c3d371cf3985da70b6dacac74f03491"> 57</a></span> <aclass="code"href="structfaiss_1_1ClusteringParameters.html">ClusteringParameters</a><aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#a0c3d371cf3985da70b6dacac74f03491">cp</a>; <spanclass="comment">///< to override default clustering params</span></div>
<divclass="line"><aname="l00058"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexBinaryIVF.html#ae4b4048070a6fc5aa3226a2edf42db5e"> 58</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1Index.html">Index</a> *<aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#ae4b4048070a6fc5aa3226a2edf42db5e">clustering_index</a>; <spanclass="comment">///< to override index used during clustering</span></div>
<divclass="line"><aname="l00060"></a><spanclass="lineno"> 60</span> <spanclass="comment"> /** The Inverted file takes a quantizer (an IndexBinary) on input,</span></div>
<divclass="line"><aname="l00061"></a><spanclass="lineno"> 61</span> <spanclass="comment"> * which implements the function mapping a vector to a list</span></div>
<divclass="line"><aname="l00062"></a><spanclass="lineno"> 62</span> <spanclass="comment"> * identifier. The pointer is borrowed: the quantizer should not</span></div>
<divclass="line"><aname="l00063"></a><spanclass="lineno"> 63</span> <spanclass="comment"> * be deleted while the IndexBinaryIVF is in use.</span></div>
<divclass="line"><aname="l00080"></a><spanclass="lineno"> 80</span> <spanclass="comment"> /// same as add_with_ids, with precomputed coarse quantizer</span></div>
<divclass="line"><aname="l00081"></a><spanclass="lineno"> 81</span> <spanclass="comment"></span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#a6f74afc490b61ba896ecfad037c9a429">add_core</a> (<aclass="code"href="structfaiss_1_1IndexBinary.html#a01749bbdbd3b7ec6bb9390257ab16c5c">idx_t</a> n, <spanclass="keyword">const</span> uint8_t * x, <spanclass="keyword">const</span><spanclass="keywordtype">long</span> *xids,</div>
<divclass="line"><aname="l00084"></a><spanclass="lineno"> 84</span> <spanclass="comment"> /** Search a set of vectors, that are pre-quantized by the IVF</span></div>
<divclass="line"><aname="l00085"></a><spanclass="lineno"> 85</span> <spanclass="comment"> * quantizer. Fill in the corresponding heaps with the query</span></div>
<divclass="line"><aname="l00096"></a><spanclass="lineno"> 96</span> <spanclass="comment"> * @param store_pairs store inv list index + inv list offset</span></div>
<divclass="line"><aname="l00097"></a><spanclass="lineno"> 97</span> <spanclass="comment"> * instead in upper/lower 32 bit of result,</span></div>
<divclass="line"><aname="l00098"></a><spanclass="lineno"> 98</span> <spanclass="comment"> * instead of ids (used for reranking).</span></div>
<divclass="line"><aname="l00099"></a><spanclass="lineno"> 99</span> <spanclass="comment"> * @param params used to override the object's search parameters</span></div>
<divclass="line"><aname="l00112"></a><spanclass="lineno"> 112</span> <spanclass="comment"> /** assign the vectors, then call search_preassign */</span></div>
<divclass="line"><aname="l00113"></a><spanclass="lineno"> 113</span> <spanclass="keyword">virtual</span><spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexBinaryIVF.html#aeaf24ee802fe8f43879c735c363b6fd5">search</a>(<aclass="code"href="structfaiss_1_1IndexBinary.html#a01749bbdbd3b7ec6bb9390257ab16c5c">idx_t</a> n, <spanclass="keyword">const</span> uint8_t *x, <aclass="code"href="structfaiss_1_1IndexBinary.html#a01749bbdbd3b7ec6bb9390257ab16c5c">idx_t</a> k,</div>
<divclass="line"><aname="l00118"></a><spanclass="lineno"> 118</span> <spanclass="comment"> /** Reconstruct a subset of the indexed vectors.</span></div>
<divclass="line"><aname="l00129"></a><spanclass="lineno"> 129</span> <spanclass="comment"> /** Similar to search, but also reconstructs the stored vectors (or an</span></div>
<divclass="line"><aname="l00130"></a><spanclass="lineno"> 130</span> <spanclass="comment"> * approximation in the case of lossy coding) for the search results.</span></div>
<divclass="line"><aname="l00132"></a><spanclass="lineno"> 132</span> <spanclass="comment"> * Overrides default implementation to avoid having to maintain direct_map</span></div>
<divclass="line"><aname="l00133"></a><spanclass="lineno"> 133</span> <spanclass="comment"> * and instead fetch the code offsets through the `store_pairs` flag in</span></div>
<divclass="line"><aname="l00142"></a><spanclass="lineno"> 142</span> <spanclass="comment"> /** Reconstruct a vector given the location in terms of (inv list index +</span></div>
<divclass="line"><aname="l00143"></a><spanclass="lineno"> 143</span> <spanclass="comment"> * inv list offset) instead of the id.</span></div>
<divclass="line"><aname="l00145"></a><spanclass="lineno"> 145</span> <spanclass="comment"> * Useful for reconstructing when the direct_map is not maintained and</span></div>
<divclass="line"><aname="l00146"></a><spanclass="lineno"> 146</span> <spanclass="comment"> * the inv list offset is computed by search_preassigned() with</span></div>
<divclass="line"><aname="l00157"></a><spanclass="lineno"> 157</span> <spanclass="comment"> /** moves the entries from another dataset to self. On output,</span></div>
<divclass="line"><aname="l00158"></a><spanclass="lineno"> 158</span> <spanclass="comment"> * other is empty. add_id is added to all moved ids (for</span></div>
<divclass="line"><aname="l00159"></a><spanclass="lineno"> 159</span> <spanclass="comment"> * sequential ids, this would be this->ntotal */</span></div>
<divclass="line"><aname="l00167"></a><spanclass="lineno"> 167</span> <spanclass="comment"> * @param new_maintain_direct_map if true, create a direct map,</span></div>
<divclass="line"><aname="l00183"></a><spanclass="lineno"> 183</span> <spanclass="comment"> /// following codes come from this inverted list</span></div>
<divclass="line"><aname="l00186"></a><spanclass="lineno"> 186</span> <spanclass="comment"> /// compute a single query-to-code distance</span></div>
<divclass="line"><aname="l00189"></a><spanclass="lineno"> 189</span> <spanclass="comment"> /** compute the distances to codes. (distances, labels) should be</span></div>
<divclass="line"><aname="l00190"></a><spanclass="lineno"> 190</span> <spanclass="comment"> * organized as a min- or max-heap</span></div>
<divclass="ttc"id="structfaiss_1_1BinaryInvertedListScanner_html_a22bf6ac0128e4e45768f91b4de58fdb6"><divclass="ttname"><ahref="structfaiss_1_1BinaryInvertedListScanner.html#a22bf6ac0128e4e45768f91b4de58fdb6">faiss::BinaryInvertedListScanner::set_query</a></div><divclass="ttdeci">virtual void set_query(const uint8_t *query_vector)=0</div><divclass="ttdoc">from now on we handle this query. </div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_ae9890e0946f3aba99ccad6b637df0c8b"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#ae9890e0946f3aba99ccad6b637df0c8b">faiss::IndexBinaryIVF::nprobe</a></div><divclass="ttdeci">size_t nprobe</div><divclass="ttdoc">number of probes at query time </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8h_source.html#l00040">IndexBinaryIVF.h:40</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a6f74afc490b61ba896ecfad037c9a429"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a6f74afc490b61ba896ecfad037c9a429">faiss::IndexBinaryIVF::add_core</a></div><divclass="ttdeci">void add_core(idx_t n, const uint8_t *x, const long *xids, const long *precomputed_idx)</div><divclass="ttdoc">same as add_with_ids, with precomputed coarse quantizer </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8cpp_source.html#l00064">IndexBinaryIVF.cpp:64</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a9e0d01c30760152fbac8f08bb5825de4"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a9e0d01c30760152fbac8f08bb5825de4">faiss::IndexBinaryIVF::reconstruct_from_offset</a></div><divclass="ttdeci">virtual void reconstruct_from_offset(long list_no, long offset, uint8_t *recons) const </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8cpp_source.html#l00206">IndexBinaryIVF.cpp:206</a></div></div>
<divclass="ttc"id="structfaiss_1_1BinaryInvertedListScanner_html_ae28e1381cb4c16ff9941c909fe9c4122"><divclass="ttname"><ahref="structfaiss_1_1BinaryInvertedListScanner.html#ae28e1381cb4c16ff9941c909fe9c4122">faiss::BinaryInvertedListScanner::set_list</a></div><divclass="ttdeci">virtual void set_list(idx_t list_no, uint8_t coarse_dis)=0</div><divclass="ttdoc">following codes come from this inverted list </div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a1ae109b12efeb9b3349c1de2c6d480e5"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a1ae109b12efeb9b3349c1de2c6d480e5">faiss::IndexBinaryIVF::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="IndexBinaryIVF_8h_source.html#l00049">IndexBinaryIVF.h:49</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a9eb4370bcc95994822c3a81c290fa919"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a9eb4370bcc95994822c3a81c290fa919">faiss::IndexBinaryIVF::nlist</a></div><divclass="ttdeci">size_t nlist</div><divclass="ttdoc">number of possible key values </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8h_source.html#l00053">IndexBinaryIVF.h:53</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_1IndexBinaryIVF_html_a5c08ac8e6c1444e61b9f357cfba34e2e"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a5c08ac8e6c1444e61b9f357cfba34e2e">faiss::IndexBinaryIVF::quantizer</a></div><divclass="ttdeci">IndexBinary * quantizer</div><divclass="ttdoc">quantizer that maps vectors to inverted lists </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8h_source.html#l00052">IndexBinaryIVF.h:52</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinary_html_a01749bbdbd3b7ec6bb9390257ab16c5c"><divclass="ttname"><ahref="structfaiss_1_1IndexBinary.html#a01749bbdbd3b7ec6bb9390257ab16c5c">faiss::IndexBinary::idx_t</a></div><divclass="ttdeci">Index::idx_t idx_t</div><divclass="ttdoc">all indices are this type </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinary_8h_source.html#l00037">IndexBinary.h:37</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_ae4b4048070a6fc5aa3226a2edf42db5e"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#ae4b4048070a6fc5aa3226a2edf42db5e">faiss::IndexBinaryIVF::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="IndexBinaryIVF_8h_source.html#l00058">IndexBinaryIVF.h:58</a></div></div>
<divclass="ttc"id="structfaiss_1_1Index_html_ad3f0d3071f987baabbdd3da4500c87ea"><divclass="ttname"><ahref="structfaiss_1_1Index.html#ad3f0d3071f987baabbdd3da4500c87ea">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_1IndexBinaryIVF_html_a4b4b1ba42e6af7c30ccbaf0fc0f38034"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a4b4b1ba42e6af7c30ccbaf0fc0f38034">faiss::IndexBinaryIVF::train</a></div><divclass="ttdeci">void train(idx_t n, const uint8_t *x) override</div><divclass="ttdoc">Trains the quantizer. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8cpp_source.html#l00253">IndexBinaryIVF.cpp:253</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinary_html_a27c32414471c57138b248583fc0c5f8c"><divclass="ttname"><ahref="structfaiss_1_1IndexBinary.html#a27c32414471c57138b248583fc0c5f8c">faiss::IndexBinary::assign</a></div><divclass="ttdeci">void assign(idx_t n, const uint8_t *x, idx_t *labels, idx_t k=1)</div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinary_8cpp_source.html#l00028">IndexBinary.cpp:28</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a9dfe26312102f0010940fd2fbdf87d85"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a9dfe26312102f0010940fd2fbdf87d85">faiss::IndexBinaryIVF::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">Removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8cpp_source.html#l00211">IndexBinaryIVF.cpp:211</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a18ffc5dbf15b4a86a8c868ca845ea4c9"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a18ffc5dbf15b4a86a8c868ca845ea4c9">faiss::IndexBinaryIVF::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="IndexBinaryIVF_8h_source.html#l00041">IndexBinaryIVF.h:41</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a8f5fc7b1cc59623154f7922459d8c7bb"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a8f5fc7b1cc59623154f7922459d8c7bb">faiss::IndexBinaryIVF::add_with_ids</a></div><divclass="ttdeci">void add_with_ids(idx_t n, const uint8_t *x, const long *xids) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8cpp_source.html#l00060">IndexBinaryIVF.cpp:60</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_aaa0eb1eca49892304ceaa11bd3a5ffa1"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#aaa0eb1eca49892304ceaa11bd3a5ffa1">faiss::IndexBinaryIVF::add</a></div><divclass="ttdeci">void add(idx_t n, const uint8_t *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8cpp_source.html#l00056">IndexBinaryIVF.cpp:56</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexBinaryIVF_html_a094ef9572645ff86a76ff4df967bf65a"><divclass="ttname"><ahref="structfaiss_1_1IndexBinaryIVF.html#a094ef9572645ff86a76ff4df967bf65a">faiss::IndexBinaryIVF::invlists</a></div><divclass="ttdeci">InvertedLists * invlists</div><divclass="ttdoc">Acess to the actual data. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexBinaryIVF_8h_source.html#l00037">IndexBinaryIVF.h:37</a></div></div>