|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
|
|
#include <faiss/IVFlib.h> |
|
|
#include <faiss/impl/IDSelector.h> |
|
|
#include <faiss/impl/io.h> |
|
|
#include <faiss/invlists/InvertedLists.h> |
|
|
#include "Python.h" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct PyCallbackIOWriter : faiss::IOWriter { |
|
|
PyObject* callback; |
|
|
size_t bs; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
explicit PyCallbackIOWriter(PyObject* callback, size_t bs = 1024 * 1024); |
|
|
|
|
|
size_t operator()(const void* ptrv, size_t size, size_t nitems) override; |
|
|
|
|
|
~PyCallbackIOWriter() override; |
|
|
}; |
|
|
|
|
|
struct PyCallbackIOReader : faiss::IOReader { |
|
|
PyObject* callback; |
|
|
size_t bs; |
|
|
|
|
|
|
|
|
|
|
|
explicit PyCallbackIOReader(PyObject* callback, size_t bs = 1024 * 1024); |
|
|
|
|
|
size_t operator()(void* ptrv, size_t size, size_t nitems) override; |
|
|
|
|
|
~PyCallbackIOReader() override; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct PyCallbackIDSelector : faiss::IDSelector { |
|
|
PyObject* callback; |
|
|
|
|
|
explicit PyCallbackIDSelector(PyObject* callback); |
|
|
|
|
|
bool is_member(faiss::idx_t id) const override; |
|
|
|
|
|
~PyCallbackIDSelector() override; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct PyCallbackShardingFunction : faiss::ivflib::ShardingFunction { |
|
|
PyObject* callback; |
|
|
|
|
|
explicit PyCallbackShardingFunction(PyObject* callback); |
|
|
|
|
|
int64_t operator()(int64_t i, int64_t shard_count) override; |
|
|
|
|
|
~PyCallbackShardingFunction() override; |
|
|
|
|
|
PyCallbackShardingFunction(const PyCallbackShardingFunction&) = delete; |
|
|
PyCallbackShardingFunction(PyCallbackShardingFunction&&) noexcept = default; |
|
|
PyCallbackShardingFunction& operator=(const PyCallbackShardingFunction&) = |
|
|
default; |
|
|
PyCallbackShardingFunction& operator=(PyCallbackShardingFunction&&) = |
|
|
default; |
|
|
}; |
|
|
|