<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="l00025"></a><spanclass="lineno"> 25</span> <spanclass="comment"> * The uniform quantizer has a range [vmin, vmax]. The range can be</span></div>
<divclass="line"><aname="l00026"></a><spanclass="lineno"> 26</span> <spanclass="comment"> * the same for all dimensions (uniform) or specific per dimension</span></div>
<divclass="line"><aname="l00035"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c"> 35</a></span> <aclass="code"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c">QT_8bit</a>, <spanclass="comment">///< 8 bits per component</span></div>
<divclass="line"><aname="l00036"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b"> 36</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b">QT_4bit</a>, <spanclass="comment">///< 4 bits per component</span></div>
<divclass="line"><aname="l00037"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea029f07a15ea64e7e73daaf9633ac429a"> 37</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea029f07a15ea64e7e73daaf9633ac429a">QT_8bit_uniform</a>, <spanclass="comment">///< same, shared range for all dimensions</span></div>
<divclass="line"><aname="l00040"></a><spanclass="lineno"> 40</span>  QT_8bit_direct, <spanclass="comment">/// fast indexing of uint8s</span></div>
<divclass="line"><aname="l00041"></a><spanclass="lineno"><aclass="line"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eaf654ce120baf92b9ac3c43592744fbf8"> 41</a></span> <spanclass="comment"></span><aclass="code"href="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eaf654ce120baf92b9ac3c43592744fbf8">QT_6bit</a>, <spanclass="comment">///< 6 bits per component</span></div>
<divclass="line"><aname="l00046"></a><spanclass="lineno"> 46</span> <spanclass="comment"> /** The uniform encoder can estimate the range of representable</span></div>
<divclass="line"><aname="l00047"></a><spanclass="lineno"> 47</span> <spanclass="comment"> * values of the unform encoder using different statistics. Here</span></div>
<divclass="line"><aname="l00076"></a><spanclass="lineno"> 76</span> <spanclass="comment"> /// same as compute_code for several vectors</span></div>
<divclass="line"><aname="l00081"></a><spanclass="lineno"> 81</span> <spanclass="comment"> /// decode a vector from a given code (or n vectors if third argument)</span></div>
<divclass="line"><aname="l00103"></a><spanclass="lineno"> 103</span> <spanclass="comment"> * @param d dimensionality of the input vectors</span></div>
<divclass="line"><aname="l00104"></a><spanclass="lineno"> 104</span> <spanclass="comment"> * @param M number of subquantizers</span></div>
<divclass="line"><aname="l00105"></a><spanclass="lineno"> 105</span> <spanclass="comment"> * @param nbits number of bit per subvector index</span></div>
<divclass="line"><aname="l00135"></a><spanclass="lineno"> 135</span> <spanclass="comment"> /** An IVF implementation where the components of the residuals are</span></div>
<divclass="line"><aname="l00136"></a><spanclass="lineno"> 136</span> <spanclass="comment"> * encoded with a scalar uniform quantizer. All distance computations</span></div>
<divclass="line"><aname="l00137"></a><spanclass="lineno"> 137</span> <spanclass="comment"> * are asymmetric, so the encoded vectors are decoded and approximate</span></div>
<divclass="line"><aname="l00138"></a><spanclass="lineno"> 138</span> <spanclass="comment"> * distances are computed.</span></div>
<divclass="line"><aname="l00153"></a><spanclass="lineno"> 153</span> <spanclass="keywordtype">void</span><aclass="code"href="structfaiss_1_1IndexIVFScalarQuantizer.html#a4079709524ca1abf344580b94b223e2a">encode_vectors</a>(<aclass="code"href="structfaiss_1_1Index.html#ad3f0d3071f987baabbdd3da4500c87ea">idx_t</a> n, <spanclass="keyword">const</span><spanclass="keywordtype">float</span>* x,</div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a647b8774e4cd8ca5623a194f5c7f8a33"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a647b8774e4cd8ca5623a194f5c7f8a33">faiss::ScalarQuantizer::code_size</a></div><divclass="ttdeci">size_t code_size</div><divclass="ttdoc">bytes per vector </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00065">IndexScalarQuantizer.h:65</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952ea029f07a15ea64e7e73daaf9633ac429a"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea029f07a15ea64e7e73daaf9633ac429a">faiss::ScalarQuantizer::QT_8bit_uniform</a></div><divclass="ttdoc">same, shared range for all dimensions </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00037">IndexScalarQuantizer.h:37</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eacd3d1bd71533a7bc52149e4b3d1db13b">faiss::ScalarQuantizer::QT_4bit</a></div><divclass="ttdoc">4 bits per component </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00036">IndexScalarQuantizer.h:36</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexScalarQuantizer_html_af0d6b901a2a02fff34e5c7c1ea5b8d55"><divclass="ttname"><ahref="structfaiss_1_1IndexScalarQuantizer.html#af0d6b901a2a02fff34e5c7c1ea5b8d55">faiss::IndexScalarQuantizer::reset</a></div><divclass="ttdeci">void reset() override</div><divclass="ttdoc">removes all elements from the database. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8cpp_source.html#l01690">IndexScalarQuantizer.cpp:1690</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFScalarQuantizer_html_afa95c17787b7e3dbed9309b440d4d748"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFScalarQuantizer.html#afa95c17787b7e3dbed9309b440d4d748">faiss::IndexIVFScalarQuantizer::add_with_ids</a></div><divclass="ttdeci">void add_with_ids(idx_t n, const float *x, const long *xids) override</div><divclass="ttdoc">default implementation that calls encode_vectors </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8cpp_source.html#l01796">IndexScalarQuantizer.cpp:1796</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_1IndexScalarQuantizer_html_a71381f74754d8a54812e80af46a2a83a"><divclass="ttname"><ahref="structfaiss_1_1IndexScalarQuantizer.html#a71381f74754d8a54812e80af46a2a83a">faiss::IndexScalarQuantizer::sq</a></div><divclass="ttdeci">ScalarQuantizer sq</div><divclass="ttdoc">Used to encode the vectors. </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00094">IndexScalarQuantizer.h:94</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952eaf654ce120baf92b9ac3c43592744fbf8"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952eaf654ce120baf92b9ac3c43592744fbf8">faiss::ScalarQuantizer::QT_6bit</a></div><divclass="ttdoc">fast indexing of uint8s </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00041">IndexScalarQuantizer.h:41</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a7ab9e9158da1777d45e6f9bf73bfd489"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a7ab9e9158da1777d45e6f9bf73bfd489">faiss::ScalarQuantizer::decode</a></div><divclass="ttdeci">void decode(const uint8_t *code, float *x, size_t n) const </div><divclass="ttdoc">decode a vector from a given code (or n vectors if third argument) </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8cpp_source.html#l01290">IndexScalarQuantizer.cpp:1290</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexIVFScalarQuantizer_html_ace901d49514b5b1384b6a07ec8a49363"><divclass="ttname"><ahref="structfaiss_1_1IndexIVFScalarQuantizer.html#ace901d49514b5b1384b6a07ec8a49363">faiss::IndexIVFScalarQuantizer::get_InvertedListScanner</a></div><divclass="ttdeci">InvertedListScanner * get_InvertedListScanner(bool store_pairs) const override</div><divclass="ttdoc">get a scanner for this index (store_pairs means ignore labels) </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8cpp_source.html#l01843">IndexScalarQuantizer.cpp:1843</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a2bccf276565c4f80fed3d0c715c58816"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a2bccf276565c4f80fed3d0c715c58816">faiss::ScalarQuantizer::compute_codes</a></div><divclass="ttdeci">void compute_codes(const float *x, uint8_t *codes, size_t n) const </div><divclass="ttdoc">same as compute_code for several vectors </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8cpp_source.html#l01278">IndexScalarQuantizer.cpp:1278</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a1201dbd1611fa5c10782ade5d0e4952ea1650389e3efa052ff60177d502328a2c">faiss::ScalarQuantizer::QT_8bit</a></div><divclass="ttdoc">8 bits per component </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00035">IndexScalarQuantizer.h:35</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a867ad0000e4ccfd40bbb1e01e7882d06aa52f2f14616c61c04baf6323d43588fd"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a867ad0000e4ccfd40bbb1e01e7882d06aa52f2f14616c61c04baf6323d43588fd">faiss::ScalarQuantizer::RS_minmax</a></div><divclass="ttdoc">[min - rs*(max-min), max + rs*(max-min)] </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00052">IndexScalarQuantizer.h:52</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_a30b411b10780a74079bbbfaff678c86f"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#a30b411b10780a74079bbbfaff678c86f">faiss::ScalarQuantizer::trained</a></div><divclass="ttdeci">std::vector< float > trained</div><divclass="ttdoc">trained values (including the range) </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00068">IndexScalarQuantizer.h:68</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#l00032">IndexIVF.h:32</a></div></div>
<divclass="ttc"id="structfaiss_1_1IndexScalarQuantizer_html_a300647e9cdac9acd160f2c55c610056b"><divclass="ttname"><ahref="structfaiss_1_1IndexScalarQuantizer.html#a300647e9cdac9acd160f2c55c610056b">faiss::IndexScalarQuantizer::train</a></div><divclass="ttdeci">void train(idx_t n, const float *x) override</div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8cpp_source.html#l01625">IndexScalarQuantizer.cpp:1625</a></div></div>
<divclass="ttc"id="structfaiss_1_1ScalarQuantizer_html_acd88af01ad1d06560cecc30bc38aef49"><divclass="ttname"><ahref="structfaiss_1_1ScalarQuantizer.html#acd88af01ad1d06560cecc30bc38aef49">faiss::ScalarQuantizer::d</a></div><divclass="ttdeci">size_t d</div><divclass="ttdoc">dimension of input vectors </div><divclass="ttdef"><b>Definition:</b><ahref="IndexScalarQuantizer_8h_source.html#l00062">IndexScalarQuantizer.h:62</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#l00033">IndexIVF.h:33</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#l00044">Index.h:44</a></div></div>