// $Id$ // // Copyright (C) 2013 Greg Landrum // // @@ 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. // #define PY_ARRAY_UNIQUE_SYMBOL rdreducedgraphs_array_API #include #include #include #include #include #include #include #include #include #include #include namespace python = boost::python; namespace { RDKit::ROMol *GenerateMolExtendedReducedGraphHelper(const RDKit::ROMol &mol, python::object atomTypes){ if(atomTypes){ throw_value_error("specification of atom types not yet supported"); } RDKit::ROMol *res=RDKit::ReducedGraphs::generateMolExtendedReducedGraph(mol); return res; } PyObject *GenerateErGFingerprintForReducedGraphHelper(const RDKit::ROMol &mol, python::object atomTypes, double fuzzIncrement, int minPath, int maxPath){ if(atomTypes){ throw_value_error("specification of atom types not yet supported"); } RDNumeric::DoubleVector *dv=RDKit::ReducedGraphs::generateErGFingerprintForReducedGraph(mol,0,fuzzIncrement, minPath,maxPath); npy_intp dim=dv->size(); PyArrayObject *res = (PyArrayObject *)PyArray_SimpleNew(1,&dim,NPY_DOUBLE); memcpy(static_cast(res->data), static_cast(dv->getData()), dv->size()*sizeof(double)); delete dv; return PyArray_Return(res); } PyObject *GetErGFingerprintHelper(const RDKit::ROMol &mol, python::object atomTypes, double fuzzIncrement, int minPath, int maxPath){ if(atomTypes){ throw_value_error("specification of atom types not yet supported"); } RDNumeric::DoubleVector *dv=RDKit::ReducedGraphs::getErGFingerprint(mol,0,fuzzIncrement, minPath,maxPath); npy_intp dim=dv->size(); PyArrayObject *res = (PyArrayObject *)PyArray_SimpleNew(1,&dim,NPY_DOUBLE); memcpy(static_cast(res->data), static_cast(dv->getData()), dv->size()*sizeof(double)); delete dv; return PyArray_Return(res); } } BOOST_PYTHON_MODULE(rdReducedGraphs) { python::scope().attr("__doc__") = "Module containing functions to generate and work with reduced graphs" ; rdkit_import_array(); python::register_exception_translator(&translate_index_error); python::register_exception_translator(&translate_value_error); std::string docString = ""; docString="Returns the reduced graph for a molecule"; python::def("GenerateMolExtendedReducedGraph", GenerateMolExtendedReducedGraphHelper, (python::arg("mol"), python::arg("atomTypes")=0 ), docString.c_str(), python::return_value_policy()); docString="Returns the ErG fingerprint vector for a reduced graph"; python::def("GenerateErGFingerprintForReducedGraph", GenerateErGFingerprintForReducedGraphHelper, (python::arg("mol"), python::arg("atomTypes")=0, python::arg("fuzzIncrement")=0.3, python::arg("minPath")=1, python::arg("maxPath")=15 ), docString.c_str()); docString="Returns the ErG fingerprint vector for a molecule"; python::def("GetErGFingerprint", GetErGFingerprintHelper, (python::arg("mol"), python::arg("atomTypes")=0, python::arg("fuzzIncrement")=0.3, python::arg("minPath")=1, python::arg("maxPath")=15 ), docString.c_str()); }