Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 0 additions & 46 deletions thirdparty/faiss/faiss/IndexHNSW.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,52 +68,6 @@ HNSWStats hnsw_stats;

namespace {

/* Wrap the distance computer into one that negates the
distances. This makes supporting INNER_PRODUCE search easier */

struct NegativeDistanceComputer : DistanceComputer {
/// owned by this
DistanceComputer* basedis;

explicit NegativeDistanceComputer(DistanceComputer* basedis)
: basedis(basedis) {}

void set_query(const float* x) override {
basedis->set_query(x);
}

/// compute distance of vector i to current query
float operator()(idx_t i) override {
return -(*basedis)(i);
}

void distances_batch_4(
const idx_t idx0,
const idx_t idx1,
const idx_t idx2,
const idx_t idx3,
float& dis0,
float& dis1,
float& dis2,
float& dis3) override {
basedis->distances_batch_4(
idx0, idx1, idx2, idx3, dis0, dis1, dis2, dis3);
dis0 = -dis0;
dis1 = -dis1;
dis2 = -dis2;
dis3 = -dis3;
}

/// compute distance between two stored vectors
float symmetric_dis(idx_t i, idx_t j) override {
return -basedis->symmetric_dis(i, j);
}

virtual ~NegativeDistanceComputer() {
delete basedis;
}
};

DistanceComputer* storage_distance_computer(const Index* storage) {
if (is_similarity_metric(storage->metric_type)) {
return new NegativeDistanceComputer(storage->get_distance_computer());
Expand Down
29 changes: 0 additions & 29 deletions thirdparty/faiss/faiss/IndexNNDescent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,35 +58,6 @@ using storage_idx_t = NNDescent::storage_idx_t;

namespace {

/* Wrap the distance computer into one that negates the
distances. This makes supporting INNER_PRODUCE search easier */

struct NegativeDistanceComputer : DistanceComputer {
/// owned by this
DistanceComputer* basedis;

explicit NegativeDistanceComputer(DistanceComputer* basedis)
: basedis(basedis) {}

void set_query(const float* x) override {
basedis->set_query(x);
}

/// compute distance of vector i to current query
float operator()(idx_t i) override {
return -(*basedis)(i);
}

/// compute distance between two stored vectors
float symmetric_dis(idx_t i, idx_t j) override {
return -basedis->symmetric_dis(i, j);
}

~NegativeDistanceComputer() override {
delete basedis;
}
};

DistanceComputer* storage_distance_computer(const Index* storage) {
if (is_similarity_metric(storage->metric_type)) {
return new NegativeDistanceComputer(storage->get_distance_computer());
Expand Down
46 changes: 46 additions & 0 deletions thirdparty/faiss/faiss/impl/DistanceComputer.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,52 @@ struct DistanceComputer {
virtual ~DistanceComputer() {}
};

/* Wrap the distance computer into one that negates the
distances. This makes supporting INNER_PRODUCE search easier */

struct NegativeDistanceComputer : DistanceComputer {
/// owned by this
DistanceComputer* basedis;

explicit NegativeDistanceComputer(DistanceComputer* basedis)
: basedis(basedis) {}

void set_query(const float* x) override {
basedis->set_query(x);
}

/// compute distance of vector i to current query
float operator()(idx_t i) override {
return -(*basedis)(i);
}

void distances_batch_4(
const idx_t idx0,
const idx_t idx1,
const idx_t idx2,
const idx_t idx3,
float& dis0,
float& dis1,
float& dis2,
float& dis3) override {
basedis->distances_batch_4(
idx0, idx1, idx2, idx3, dis0, dis1, dis2, dis3);
dis0 = -dis0;
dis1 = -dis1;
dis2 = -dis2;
dis3 = -dis3;
}

/// compute distance between two stored vectors
float symmetric_dis(idx_t i, idx_t j) override {
return -basedis->symmetric_dis(i, j);
}

virtual ~NegativeDistanceComputer() {
delete basedis;
}
};

/*************************************************************
* Specialized version of the DistanceComputer when we know that codes are
* laid out in a flat index.
Expand Down
29 changes: 0 additions & 29 deletions thirdparty/faiss/faiss/impl/NSG.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,35 +25,6 @@ namespace {
// It needs to be smaller than 0
constexpr int EMPTY_ID = -1;

/* Wrap the distance computer into one that negates the
distances. This makes supporting INNER_PRODUCE search easier */

struct NegativeDistanceComputer : DistanceComputer {
/// owned by this
DistanceComputer* basedis;

explicit NegativeDistanceComputer(DistanceComputer* basedis)
: basedis(basedis) {}

void set_query(const float* x) override {
basedis->set_query(x);
}

/// compute distance of vector i to current query
float operator()(idx_t i) override {
return -(*basedis)(i);
}

/// compute distance between two stored vectors
float symmetric_dis(idx_t i, idx_t j) override {
return -basedis->symmetric_dis(i, j);
}

~NegativeDistanceComputer() override {
delete basedis;
}
};

} // namespace

DistanceComputer* storage_distance_computer(const Index* storage) {
Expand Down