Files
rdkit/Code/DataStructs/Wrap/wrap_Utils.cpp
Paolo Tosco 2b4202867e Add Python modules to generate stubs and automatically patch docstrings (#6919)
* - added gen_rdkit_stubs Python module to generate rdkit-stubs
- added patch_rdkit_docstrings Python module to patch existing C++ sources to fix docstrings missing self parameter and add named parameters taken from C++ signatures where possible
- added rdkit-stubs/CMakeLists.txt to build rdkit-stubs as part of the RDKit build
- added an option to CMakeLists.txt to enable building rdkit-stubs as part of the RDKit build (defaults to OFF)

* fixed CMakeLists.txt, rdkit-stubs/CMakeLists.txt and a doctest

* - added missing cmp_func parameter
- fixed case with overloads with optional parameters
- do not trim params if expected_param_count == -1
- add dummy parameter names if we could not find any
- keep into account member functions when making up parameter names
- address __init__ and make_constructor __init__ functions
- fix incorrectly assigned staticmethods

* patched sources

* address residual few remarks

---------

Co-authored-by: ptosco <paolo.tosco@novartis.com>
2023-11-30 04:54:18 +01:00

80 lines
2.8 KiB
C++

// $Id$
//
// Copyright (C) 2003-2012 greg Landrum and Rational Discovery LLC
//
// @@ 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/Wrap.h>
#include <DataStructs/BitVects.h>
#include <DataStructs/BitVectUtils.h>
#include <DataStructs/BitOps.h>
namespace python = boost::python;
ExplicitBitVect *createFromBitString(const std::string &bits) {
auto *res = new ExplicitBitVect(bits.length());
FromBitString(*res, bits);
return res;
}
ExplicitBitVect *createFromFPSText(const std::string &fps) {
if (fps.length() % 2) {
throw ValueErrorException(
"input string must have an even number of characters");
}
auto *res = new ExplicitBitVect(fps.length() * 4);
UpdateBitVectFromFPSText(*res, fps);
return res;
}
ExplicitBitVect *createFromBinaryText(const std::string &fps) {
auto *res = new ExplicitBitVect(fps.length() * 8);
UpdateBitVectFromBinaryText(*res, fps);
return res;
}
struct Utils_wrapper {
static void wrap() {
python::def("ConvertToExplicit", convertToExplicit,
python::return_value_policy<python::manage_new_object>(),
python::args("sbv"),
"Converts a SparseBitVector to an ExplicitBitVector and "
"returns the ExplicitBitVector");
python::def(
"CreateFromBitString", createFromBitString,
python::return_value_policy<python::manage_new_object>(),
python::args("bits"),
"Creates an ExplicitBitVect from a bit string (string of 0s and 1s).");
python::def("CreateFromFPSText", createFromFPSText,
python::return_value_policy<python::manage_new_object>(),
python::args("fps"),
"Creates an ExplicitBitVect from an FPS string.");
python::def(
"CreateFromBinaryText", createFromBinaryText,
python::return_value_policy<python::manage_new_object>(),
python::args("fps"),
"Creates an ExplicitBitVect from a binary string (byte array).");
python::def(
"InitFromDaylightString",
(void (*)(SparseBitVect &, const std::string &))FromDaylightString,
python::args("sbv", "s"));
python::def(
"InitFromDaylightString",
(void (*)(ExplicitBitVect &, const std::string &))FromDaylightString,
python::args("sbv", "s"),
"Fill a BitVect using an ASCII (Daylight) encoding of a fingerprint.\n\
\n\
**Arguments**\n\
- bv: either a _SparseBitVect_ or an _ExplicitBitVect_\n\
- txt: a string with the Daylight encoding (this is the text that\n\
the Daylight tools put in the FP field of a TDT)\n\
\n");
}
};
void wrap_Utils() { Utils_wrapper::wrap(); }