<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="l00026"></a><spanclass="lineno"> 26</span> <spanclass="comment">/** Index based on a product quantizer. Stored vectors are</span></div>
<divclass="line"><aname="l00027"></a><spanclass="lineno"> 27</span> <spanclass="comment"> * approximated by PQ codes. */</span></div>
<divclass="line"><aname="l00030"></a><spanclass="lineno"> 30</span> <spanclass="comment"> /// The product quantizer used to encode the vectors</span></div>
<divclass="line"><aname="l00038"></a><spanclass="lineno"> 38</span> <spanclass="comment"> * @param d dimensionality of the input vectors</span></div>
<divclass="line"><aname="l00039"></a><spanclass="lineno"> 39</span> <spanclass="comment"> * @param M number of subquantizers</span></div>
<divclass="line"><aname="l00040"></a><spanclass="lineno"> 40</span> <spanclass="comment"> * @param nbits number of bit per subvector index</span></div>
<divclass="line"><aname="l00042"></a><spanclass="lineno"> 42</span> <aclass="code"href="structfaiss_1_1IndexPQ.html">IndexPQ</a> (<spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1Index.html#a2a002388d2c081c2dbab8508dcefe73d">d</a>, <spanclass="comment">///< dimensionality of the input vectors</span></div>
<divclass="line"><aname="l00043"></a><spanclass="lineno"> 43</span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span> M, <spanclass="comment">///< number of subquantizers</span></div>
<divclass="line"><aname="l00044"></a><spanclass="lineno"> 44</span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span> nbits, <spanclass="comment">///< number of bit per subvector index</span></div>
<divclass="line"><aname="l00071"></a><spanclass="lineno"> 71</span> <spanclass="comment"> /// parameters used for the polysemous training</span></div>
<divclass="line"><aname="l00074"></a><spanclass="lineno"> 74</span> <spanclass="comment"> /// how to perform the search in search_core</span></div>
<divclass="line"><aname="l00077"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea903849f87cca2e7fbbfe034edbb81718"> 77</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea903849f87cca2e7fbbfe034edbb81718">ST_HE</a>, <spanclass="comment">///< Hamming distance on codes</span></div>
<divclass="line"><aname="l00078"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea237afca36629dae511c0ac56effbfaa6"> 78</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea237afca36629dae511c0ac56effbfaa6">ST_generalized_HE</a>, <spanclass="comment">///< nb of same codes</span></div>
<divclass="line"><aname="l00086"></a><spanclass="lineno"> 86</span> <spanclass="comment">// just encode the sign of the components, instead of using the PQ encoder</span></div>
<divclass="line"><aname="l00087"></a><spanclass="lineno"> 87</span> <spanclass="comment">// used only for the queries</span></div>
<divclass="line"><aname="l00097"></a><spanclass="lineno"> 97</span> <spanclass="comment"> /// prepare query for a polysemous search, but instead of</span></div>
<divclass="line"><aname="l00098"></a><spanclass="lineno"> 98</span> <spanclass="comment"> /// computing the result, just get the histogram of Hamming</span></div>
<divclass="line"><aname="l00099"></a><spanclass="lineno"> 99</span> <spanclass="comment"> /// distances. May be computed on a provided dataset if xb != NULL</span></div>
<divclass="line"><aname="l00105"></a><spanclass="lineno"> 105</span> <spanclass="comment"> /** compute pairwise distances between queries and database</span></div>
<divclass="line"><aname="l00117"></a><spanclass="lineno"> 117</span> <spanclass="comment">/// statistics are robust to internal threading, but not if</span></div>
<divclass="line"><aname="l00118"></a><spanclass="lineno"> 118</span> <spanclass="comment">/// IndexPQ::search is called by multiple threads</span></div>
<divclass="line"><aname="l00120"></a><spanclass="lineno"> 120</span> <spanclass="keywordtype">size_t</span> nq; <spanclass="comment">// nb of queries run</span></div>
<divclass="line"><aname="l00121"></a><spanclass="lineno"> 121</span> <spanclass="keywordtype">size_t</span> ncode; <spanclass="comment">// nb of codes visited</span></div>
<divclass="line"><aname="l00133"></a><spanclass="lineno"> 133</span> <spanclass="comment">/** Quantizer where centroids are virtual: they are the Cartesian</span></div>
<divclass="line"><aname="l00134"></a><spanclass="lineno"> 134</span> <spanclass="comment"> * product of sub-centroids. */</span></div>
<divclass="line"><aname="l00138"></a><spanclass="lineno"> 138</span> <aclass="code"href="structfaiss_1_1MultiIndexQuantizer.html">MultiIndexQuantizer</a> (<spanclass="keywordtype">int</span><aclass="code"href="structfaiss_1_1Index.html#a2a002388d2c081c2dbab8508dcefe73d">d</a>, <spanclass="comment">///< dimension of the input vectors</span></div>
<divclass="line"><aname="l00139"></a><spanclass="lineno"> 139</span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span> M, <spanclass="comment">///< number of subquantizers</span></div>
<divclass="line"><aname="l00140"></a><spanclass="lineno"> 140</span> <spanclass="comment"></span><spanclass="keywordtype">size_t</span> nbits); <spanclass="comment">///< number of bit per subvector index</span></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a4fa05430935a02b62b7c15c9840c42fea903849f87cca2e7fbbfe034edbb81718"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea903849f87cca2e7fbbfe034edbb81718">faiss::IndexPQ::ST_HE</a></div><divclass="ttdoc">Hamming distance on codes. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00077">IndexPQ.h:77</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_af616e1f3c7bff7f62c2607b8079da43f"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#af616e1f3c7bff7f62c2607b8079da43f">faiss::IndexPQ::do_polysemous_training</a></div><divclass="ttdeci">bool do_polysemous_training</div><divclass="ttdoc">false = standard PQ </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00069">IndexPQ.h:69</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a87898add5ab4d86ba901ca79778fc11e"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a87898add5ab4d86ba901ca79778fc11e">faiss::IndexPQ::train</a></div><divclass="ttdeci">void train(idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8cpp_source.html#l00054">IndexPQ.cpp:54</a></div></div>
<divclass="ttc"id="structfaiss_1_1MultiIndexQuantizer_html_a4808ce22fcc95c7af902b97969f2a90d"><divclass="ttname"><ahref="structfaiss_1_1MultiIndexQuantizer.html#a4808ce22fcc95c7af902b97969f2a90d">faiss::MultiIndexQuantizer::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8cpp_source.html#l00901">IndexPQ.cpp:901</a></div></div>
<divclass="ttc"id="structfaiss_1_1MultiIndexQuantizer_html_a6fa1d1a295eb2d4377b8de5096ab3ef4"><divclass="ttname"><ahref="structfaiss_1_1MultiIndexQuantizer.html#a6fa1d1a295eb2d4377b8de5096ab3ef4">faiss::MultiIndexQuantizer::train</a></div><divclass="ttdeci">void train(idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8cpp_source.html#l00804">IndexPQ.cpp:804</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a4fa05430935a02b62b7c15c9840c42fe"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fe">faiss::IndexPQ::Search_type_t</a></div><divclass="ttdeci">Search_type_t</div><divclass="ttdoc">how to perform the search in search_core </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00075">IndexPQ.h:75</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a4fa05430935a02b62b7c15c9840c42feaef79af61798670a362434b7bc9ced45e"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42feaef79af61798670a362434b7bc9ced45e">faiss::IndexPQ::ST_polysemous_generalize</a></div><divclass="ttdoc">Filter on generalized Hamming. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00081">IndexPQ.h:81</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_1IndexPQ_html_aa7b7cfe0c8dfd37c8a940fd93d12dc88"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#aa7b7cfe0c8dfd37c8a940fd93d12dc88">faiss::IndexPQ::pq</a></div><divclass="ttdeci">ProductQuantizer pq</div><divclass="ttdoc">The product quantizer used to encode the vectors. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00031">IndexPQ.h:31</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_ac72c9b93f8fe7e5ec27fbe26bb38a7bf"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#ac72c9b93f8fe7e5ec27fbe26bb38a7bf">faiss::IndexPQ::add</a></div><divclass="ttdeci">void add(idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8cpp_source.html#l00078">IndexPQ.cpp:78</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a4fa05430935a02b62b7c15c9840c42fea237afca36629dae511c0ac56effbfaa6"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a4fa05430935a02b62b7c15c9840c42fea237afca36629dae511c0ac56effbfaa6">faiss::IndexPQ::ST_generalized_HE</a></div><divclass="ttdoc">nb of same codes </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00078">IndexPQ.h:78</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#l00125">PolysemousTraining.h:125</a></div></div>
<divclass="ttc"id="structfaiss_1_1MultiIndexQuantizer_html_aa72640bcbe2e5d9029954c2fa6633453"><divclass="ttname"><ahref="structfaiss_1_1MultiIndexQuantizer.html#aa72640bcbe2e5d9029954c2fa6633453">faiss::MultiIndexQuantizer::add</a></div><divclass="ttdeci">void add(idx_t n, const float *x) override</div><divclass="ttdoc">add and reset will crash at runtime </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8cpp_source.html#l00895">IndexPQ.cpp:895</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a25e17da885cf55d84b176b46f3ad25b1"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a25e17da885cf55d84b176b46f3ad25b1">faiss::IndexPQ::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8cpp_source.html#l00088">IndexPQ.cpp:88</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_aff455f2adff6064939494dad6e3017bc"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#aff455f2adff6064939494dad6e3017bc">faiss::IndexPQ::polysemous_ht</a></div><divclass="ttdeci">int polysemous_ht</div><divclass="ttdoc">Hamming threshold used for polysemy. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00091">IndexPQ.h:91</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexPQ_html_a820cec27d1ef14bf59fb288b2e143b6a"><divclass="ttname"><ahref="structfaiss_1_1IndexPQ.html#a820cec27d1ef14bf59fb288b2e143b6a">faiss::IndexPQ::polysemous_training</a></div><divclass="ttdeci">PolysemousTraining polysemous_training</div><divclass="ttdoc">parameters used for the polysemous training </div><divclass="ttdef"><b>Definition:</b><ahref="IndexPQ_8h_source.html#l00072">IndexPQ.h:72</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>