mirror of
https://github.com/facebookresearch/faiss.git
synced 2025-06-03 21:54:02 +08:00
Changelog: - changed license: BSD+Patents -> MIT - propagates exceptions raised in sub-indexes of IndexShards and IndexReplicas - support for searching several inverted lists in parallel (parallel_mode != 0) - better support for PQ codes where nbit != 8 or 16 - IVFSpectralHash implementation: spectral hash codes inside an IVF - 6-bit per component scalar quantizer (4 and 8 bit were already supported) - combinations of inverted lists: HStackInvertedLists and VStackInvertedLists - configurable number of threads for OnDiskInvertedLists prefetching (including 0=no prefetch) - more test and demo code compatible with Python 3 (print with parentheses) - refactored benchmark code: data loading is now in a single file
67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
// -*- c++ -*-
|
|
|
|
#include "FaissException.h"
|
|
#include <sstream>
|
|
|
|
namespace faiss {
|
|
|
|
FaissException::FaissException(const std::string& m)
|
|
: msg(m) {
|
|
}
|
|
|
|
FaissException::FaissException(const std::string& m,
|
|
const char* funcName,
|
|
const char* file,
|
|
int line) {
|
|
int size = snprintf(nullptr, 0, "Error in %s at %s:%d: %s",
|
|
funcName, file, line, m.c_str());
|
|
msg.resize(size + 1);
|
|
snprintf(&msg[0], msg.size(), "Error in %s at %s:%d: %s",
|
|
funcName, file, line, m.c_str());
|
|
}
|
|
|
|
const char*
|
|
FaissException::what() const noexcept {
|
|
return msg.c_str();
|
|
}
|
|
|
|
void handleExceptions(
|
|
std::vector<std::pair<int, std::exception_ptr>>& exceptions) {
|
|
if (exceptions.size() == 1) {
|
|
// throw the single received exception directly
|
|
std::rethrow_exception(exceptions.front().second);
|
|
|
|
} else if (exceptions.size() > 1) {
|
|
// multiple exceptions; aggregate them and return a single exception
|
|
std::stringstream ss;
|
|
|
|
for (auto& p : exceptions) {
|
|
try {
|
|
std::rethrow_exception(p.second);
|
|
} catch (std::exception& ex) {
|
|
if (ex.what()) {
|
|
// exception message available
|
|
ss << "Exception thrown from index " << p.first << ": "
|
|
<< ex.what() << "\n";
|
|
} else {
|
|
// No message available
|
|
ss << "Unknown exception thrown from index " << p.first << "\n";
|
|
}
|
|
} catch (...) {
|
|
ss << "Unknown exception thrown from index " << p.first << "\n";
|
|
}
|
|
}
|
|
|
|
throw FaissException(ss.str());
|
|
}
|
|
}
|
|
|
|
}
|