mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
[WIP] Add Leader picker implementation (#2724)
* initial commit of Roger's contrib * add the new file to the headers list * clang-format * stub of the python wrapper * code added for testing * code added for testing * add LeaderPicker.seq.h * default pickSize value * first crude python wrapper * Add C++ tests for the LeaderPicker combine the thread and non-thread versions * that was not really a test * support providing a functor from Python * no longer need the .seq header * temporarily disable the threaded version to allow CI runs to pass * some refactoring and cleanup
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
#include <numpy/arrayobject.h>
|
||||
#include <map>
|
||||
|
||||
#include "PickerHelpers.h"
|
||||
|
||||
#include <DataStructs/BitVects.h>
|
||||
#include <DataStructs/BitOps.h>
|
||||
#include <SimDivPickers/DistPicker.h>
|
||||
@@ -55,18 +57,6 @@ RDKit::INT_VECT MaxMinPicks(MaxMinPicker *picker, python::object distMat,
|
||||
return res;
|
||||
}
|
||||
|
||||
class pyobjFunctor {
|
||||
public:
|
||||
pyobjFunctor(python::object obj) : dp_obj(std::move(obj)) {}
|
||||
~pyobjFunctor() {}
|
||||
double operator()(unsigned int i, unsigned int j) {
|
||||
return python::extract<double>(dp_obj(i, j));
|
||||
}
|
||||
|
||||
private:
|
||||
python::object dp_obj;
|
||||
};
|
||||
|
||||
namespace {
|
||||
template <typename T>
|
||||
void LazyMaxMinHelper(MaxMinPicker *picker, T functor, unsigned int poolSize,
|
||||
@@ -107,37 +97,6 @@ python::tuple LazyMaxMinPicksWithThreshold(
|
||||
return python::make_tuple(res, threshold);
|
||||
}
|
||||
|
||||
// NOTE: TANIMOTO and DICE provably return the same results for the diversity
|
||||
// picking this is still here just in case we ever later want to support other
|
||||
// methods.
|
||||
typedef enum { TANIMOTO = 1, DICE } DistanceMethod;
|
||||
|
||||
template <typename BV>
|
||||
class pyBVFunctor {
|
||||
public:
|
||||
pyBVFunctor(const std::vector<const BV *> &obj, DistanceMethod method)
|
||||
: d_obj(obj), d_method(method) {}
|
||||
~pyBVFunctor() {}
|
||||
double operator()(unsigned int i, unsigned int j) {
|
||||
double res = 0.0;
|
||||
switch (d_method) {
|
||||
case TANIMOTO:
|
||||
res = 1. - TanimotoSimilarity(*d_obj[i], *d_obj[j]);
|
||||
break;
|
||||
case DICE:
|
||||
res = 1. - DiceSimilarity(*d_obj[i], *d_obj[j]);
|
||||
break;
|
||||
default:
|
||||
throw_value_error("unsupported similarity value");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private:
|
||||
const std::vector<const BV *> &d_obj;
|
||||
DistanceMethod d_method;
|
||||
};
|
||||
|
||||
RDKit::INT_VECT LazyVectorMaxMinPicks(MaxMinPicker *picker, python::object objs,
|
||||
int poolSize, int pickSize,
|
||||
python::object firstPicks, int seed,
|
||||
|
||||
Reference in New Issue
Block a user