<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="l00013"></a><spanclass="lineno"> 13</span> <spanclass="comment">/** Since IVF (inverted file) indexes are of so much use for</span></div>
<divclass="line"><aname="l00014"></a><spanclass="lineno"> 14</span> <spanclass="comment"> * large-scale use cases, we group a few functions related to them in</span></div>
<divclass="line"><aname="l00015"></a><spanclass="lineno"> 15</span> <spanclass="comment"> * this small library. Most functions work both on IndexIVFs and</span></div>
<divclass="line"><aname="l00016"></a><spanclass="lineno"> 16</span> <spanclass="comment"> * IndexIVFs embedded within an IndexPreTransform.</span></div>
<divclass="line"><aname="l00025"></a><spanclass="lineno"> 25</span> <spanclass="comment">/** check if two indexes have the same parameters and are trained in</span></div>
<divclass="line"><aname="l00026"></a><spanclass="lineno"> 26</span> <spanclass="comment"> * the same way, otherwise throw. */</span></div>
<divclass="line"><aname="l00027"></a><spanclass="lineno"> 27</span> <spanclass="keywordtype">void</span> check_compatible_for_merge (<spanclass="keyword">const</span> Index * index1,</div>
<divclass="line"><aname="l00028"></a><spanclass="lineno"> 28</span> <spanclass="keyword">const</span> Index * index2);</div>
<divclass="line"><aname="l00030"></a><spanclass="lineno"> 30</span> <spanclass="comment">/** get an IndexIVF from an index. The index may be an IndexIVF or</span></div>
<divclass="line"><aname="l00031"></a><spanclass="lineno"> 31</span> <spanclass="comment"> * some wrapper class that encloses an IndexIVF</span></div>
<divclass="line"><aname="l00033"></a><spanclass="lineno"> 33</span> <spanclass="comment"> * throws an exception if this is not the case.</span></div>
<divclass="line"><aname="l00038"></a><spanclass="lineno"> 38</span> <spanclass="comment">/** Merge index1 into index0. Works on IndexIVF's and IndexIVF's</span></div>
<divclass="line"><aname="l00039"></a><spanclass="lineno"> 39</span> <spanclass="comment"> * embedded in a IndexPreTransform. On output, the index1 is empty.</span></div>
<divclass="line"><aname="l00041"></a><spanclass="lineno"> 41</span> <spanclass="comment"> * @param shift_ids: translate the ids from index1 to index0->prev_ntotal</span></div>
<divclass="line"><aname="l00047"></a><spanclass="lineno"> 47</span> <spanclass="comment">/* Returns the cluster the embeddings belong to.</span></div>
<divclass="line"><aname="l00049"></a><spanclass="lineno"> 49</span> <spanclass="comment"> * @param index Index, which should be an IVF index</span></div>
<divclass="line"><aname="l00050"></a><spanclass="lineno"> 50</span> <spanclass="comment"> * (otherwise there are no clusters)</span></div>
<divclass="line"><aname="l00051"></a><spanclass="lineno"> 51</span> <spanclass="comment"> * @param embeddings object descriptors for which the centroids should be found,</span></div>
<divclass="line"><aname="l00054"></a><spanclass="lineno"> 54</span> <spanclass="comment"> * cluster id each object belongs to, size num_objects</span></div>
<divclass="line"><aname="l00060"></a><spanclass="lineno"> 60</span> <spanclass="comment">/* Returns the cluster the embeddings belong to.</span></div>
<divclass="line"><aname="l00062"></a><spanclass="lineno"> 62</span> <spanclass="comment"> * @param index Index, which should be an IVF index</span></div>
<divclass="line"><aname="l00063"></a><spanclass="lineno"> 63</span> <spanclass="comment"> * (otherwise there are no clusters)</span></div>
<divclass="line"><aname="l00067"></a><spanclass="lineno"> 67</span> <spanclass="comment"> * centroid ids corresponding to the results (size n * k)</span></div>
<divclass="line"><aname="l00068"></a><spanclass="lineno"> 68</span> <spanclass="comment"> * other arguments are the same as the standard search function</span></div>
<divclass="line"><aname="l00080"></a><spanclass="lineno"> 80</span> <spanclass="comment">/** A set of IndexIVFs concatenated together in a FIFO fashion.</span></div>
<divclass="line"><aname="l00081"></a><spanclass="lineno"> 81</span> <spanclass="comment"> * at each "step", the oldest index slice is removed and a new index is added.</span></div>
<divclass="line"><aname="l00084"></a><spanclass="lineno"> 84</span> <spanclass="comment"> /// common index that contains the sliding window</span></div>
<divclass="line"><aname="l00099"></a><spanclass="lineno"> 99</span> <spanclass="comment"> /// index should be initially empty and trained</span></div>
<divclass="line"><aname="l00102"></a><spanclass="lineno"> 102</span> <spanclass="comment"> /** Add one index to the current index and remove the oldest one.</span></div>
<divclass="line"><aname="l00104"></a><spanclass="lineno"> 104</span> <spanclass="comment"> * @param sub_index slice to swap in (can be NULL)</span></div>
<divclass="line"><aname="l00105"></a><spanclass="lineno"> 105</span> <spanclass="comment"> * @param remove_oldest if true, remove the oldest slices */</span></div>
<divclass="line"><aname="l00111"></a><spanclass="lineno"> 111</span> <spanclass="comment">/// Get a subset of inverted lists [i0, i1)</span></div>
<divclass="line"><aname="l00120"></a><spanclass="lineno"> 120</span> <spanclass="comment">// search an IndexIVF, possibly embedded in an IndexPreTransform</span></div>
<divclass="line"><aname="l00121"></a><spanclass="lineno"> 121</span> <spanclass="comment">// with given parameters</span></div>
<divclass="ttc"id="structfaiss_1_1ArrayInvertedLists_html"><divclass="ttname"><ahref="structfaiss_1_1ArrayInvertedLists.html">faiss::ArrayInvertedLists</a></div><divclass="ttdoc">simple (default) implementation as an array of inverted lists </div><divclass="ttdef"><b>Definition:</b><ahref="InvertedLists_8h_source.html#l00182">InvertedLists.h:182</a></div></div>
<divclass="ttc"id="structfaiss_1_1ivflib_1_1SlidingIndexWindow_html_ac124372fd2b67bb901f0c71235165216"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#ac124372fd2b67bb901f0c71235165216">faiss::ivflib::SlidingIndexWindow::nlist</a></div><divclass="ttdeci">size_t nlist</div><divclass="ttdoc">same as index-&gt;nlist </div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8h_source.html#l00094">IVFlib.h:94</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_1ivflib_1_1SlidingIndexWindow_html_a10d876a9c750bc95986a22a57cf4fdc7"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#a10d876a9c750bc95986a22a57cf4fdc7">faiss::ivflib::SlidingIndexWindow::ils</a></div><divclass="ttdeci">ArrayInvertedLists * ils</div><divclass="ttdoc">InvertedLists of index. </div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8h_source.html#l00088">IVFlib.h:88</a></div></div>
<divclass="ttc"id="structfaiss_1_1ivflib_1_1SlidingIndexWindow_html_a8defa5121e371e64071c0eb956ad20d1"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#a8defa5121e371e64071c0eb956ad20d1">faiss::ivflib::SlidingIndexWindow::n_slice</a></div><divclass="ttdeci">int n_slice</div><divclass="ttdoc">number of slices currently in index </div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8h_source.html#l00091">IVFlib.h:91</a></div></div>
<divclass="ttc"id="structfaiss_1_1ivflib_1_1SlidingIndexWindow_html_a6dfc430601d194c428c2a25e3afa4492"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#a6dfc430601d194c428c2a25e3afa4492">faiss::ivflib::SlidingIndexWindow::sizes</a></div><divclass="ttdeci">std::vector< std::vector< size_t >> sizes</div><divclass="ttdoc">cumulative list sizes at each slice </div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8h_source.html#l00097">IVFlib.h:97</a></div></div>
<divclass="ttc"id="structfaiss_1_1ivflib_1_1SlidingIndexWindow_html_a6347809123313ca945defdc7ddcd1465"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#a6347809123313ca945defdc7ddcd1465">faiss::ivflib::SlidingIndexWindow::SlidingIndexWindow</a></div><divclass="ttdeci">SlidingIndexWindow(Index *index)</div><divclass="ttdoc">index should be initially empty and trained </div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8cpp_source.html#l00159">IVFlib.cpp:159</a></div></div>
<divclass="ttc"id="structfaiss_1_1ivflib_1_1SlidingIndexWindow_html_accf1c7b8de188b74de0d6827beceac7c"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#accf1c7b8de188b74de0d6827beceac7c">faiss::ivflib::SlidingIndexWindow::step</a></div><divclass="ttdeci">void step(const Index *sub_index, bool remove_oldest)</div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8cpp_source.html#l00190">IVFlib.cpp:190</a></div></div>
<divclass="ttc"id="structfaiss_1_1ivflib_1_1SlidingIndexWindow_html_a2aae96a9373173e22686951e85b31aa1"><divclass="ttname"><ahref="structfaiss_1_1ivflib_1_1SlidingIndexWindow.html#a2aae96a9373173e22686951e85b31aa1">faiss::ivflib::SlidingIndexWindow::index</a></div><divclass="ttdeci">Index * index</div><divclass="ttdoc">common index that contains the sliding window </div><divclass="ttdef"><b>Definition:</b><ahref="IVFlib_8h_source.html#l00085">IVFlib.h:85</a></div></div>