1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
//
// Copyright (C) 2020 Greg Landrum and T5 Informatics GmbH
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#include <RDBoost/python.h>
#include <GraphMol/MolEnumerator/MolEnumerator.h>
namespace python = boost::python;
using namespace RDKit;
namespace {
enum class EnumeratorTypes { LinkNode, PositionVariation };
std::shared_ptr<MolEnumerator::MolEnumeratorOp> opFromName(
EnumeratorTypes typ) {
std::shared_ptr<MolEnumerator::MolEnumeratorOp> res;
switch (typ) {
case EnumeratorTypes::LinkNode:
res.reset(new MolEnumerator::LinkNodeOp());
break;
case EnumeratorTypes::PositionVariation:
res.reset(new MolEnumerator::PositionVariationOp());
break;
default:
throw ValueErrorException("unrecognized operator type");
}
return res;
}
MolEnumerator::MolEnumeratorParams *createParamsFromName(EnumeratorTypes typ) {
auto res = new MolEnumerator::MolEnumeratorParams();
res->dp_operation = opFromName(typ);
return res;
}
void setEnumerationHelper(MolEnumerator::MolEnumeratorParams *self,
EnumeratorTypes typ) {
self->dp_operation = opFromName(typ);
}
MolBundle *enumerateHelper(const ROMol &mol,
const MolEnumerator::MolEnumeratorParams &ps) {
auto res = MolEnumerator::enumerate(mol, ps);
return new MolBundle(res);
}
} // namespace
BOOST_PYTHON_MODULE(rdMolEnumerator) {
python::scope().attr("__doc__") =
"Module containing classes and functions for enumerating query molecules";
python::enum_<EnumeratorTypes>("EnumeratorType")
.value("LinkNode", EnumeratorTypes::LinkNode)
.value("PositionVariation", EnumeratorTypes::PositionVariation);
python::class_<MolEnumerator::MolEnumeratorParams>(
"MolEnumeratorParams", "Molecular enumerator parameters",
python::init<>())
.def("__init__", python::make_constructor(createParamsFromName))
.def_readwrite("sanitize", &MolEnumerator::MolEnumeratorParams::sanitize,
"sanitize molecules after enumeration")
.def_readwrite("maxToEnumerate",
&MolEnumerator::MolEnumeratorParams::maxToEnumerate,
"maximum number of molecules to enuemrate")
.def_readwrite("doRandom", &MolEnumerator::MolEnumeratorParams::doRandom,
"do random enumeration (not yet implemented")
.def_readwrite("randomSeed",
&MolEnumerator::MolEnumeratorParams::randomSeed,
"seed for the random enumeration (not yet implemented")
.def("SetEnumerationOperator", &setEnumerationHelper,
"set the operator to be used for enumeration");
python::def("Enumerate", &enumerateHelper,
python::return_value_policy<python::manage_new_object>(),
"do an enumeration and return a MolBundle");
}
|