From caece9681b2226d36fa3b7d26f95d533ed8e40dc Mon Sep 17 00:00:00 2001 From: Asher Mancinelli Date: Fri, 4 Sep 2020 15:53:55 -0700 Subject: [PATCH 1/7] Initial module for porting swig BS to pybind11; see #19 --- CMakeLists.txt | 2 +- tools/CMakeLists.txt | 1 + tools/python-pybind/CMakeLists.txt | 25 +++++++++++ tools/python-pybind/bind_nosh.cpp | 19 +++++++++ tools/python-pybind/bind_nosh.hpp | 67 ++++++++++++++++++++++++++++++ tools/python-pybind/module.cpp | 24 +++++++++++ 6 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 tools/python-pybind/CMakeLists.txt create mode 100644 tools/python-pybind/bind_nosh.cpp create mode 100644 tools/python-pybind/bind_nosh.hpp create mode 100644 tools/python-pybind/module.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f2180721..d2b616c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,7 +58,7 @@ OPTION(BUILD_SHARED_LIBS "Build shared libraries." OFF) message(STATUS "Setting project paths") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -fpermissive -fPIC") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -fpermissive -fPIC") if(WIN32) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:100000000") endif() diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index eaa25ed7..d1637cc9 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -5,5 +5,6 @@ add_subdirectory(manip) if(ENABLE_PYTHON) add_subdirectory(python) + add_subdirectory(python-pybind) endif(ENABLE_PYTHON) diff --git a/tools/python-pybind/CMakeLists.txt b/tools/python-pybind/CMakeLists.txt new file mode 100644 index 00000000..eb26fdb7 --- /dev/null +++ b/tools/python-pybind/CMakeLists.txt @@ -0,0 +1,25 @@ + +find_package(pybind11 REQUIRED) +add_library(apbs_pybind + MODULE + module.cpp + bind_nosh.cpp) + +set_target_properties(apbs_pybind + PROPERTIES + PREFIX "${PYTHON_MODULE_PREFIX}" + SUFFIX "${PYTHON_MODULE_EXTENSION}" + OUTPUT_NAME "apbs" + ) + +message(STATUS "LIBS ${APBS_LIBS}") +message(STATUS "INTERNAL_LIBS ${APBS_INTERNAL_LIBS}") +target_link_libraries( + apbs_pybind + PRIVATE + pybind11::module + ${APBS_LIBS} + ${APBS_INTERNAL_LIBS} + ) + +install(TARGETS apbs_pybind LIBRARY DESTINATION ${PROJECT_BINARY_DIR}/lib) diff --git a/tools/python-pybind/bind_nosh.cpp b/tools/python-pybind/bind_nosh.cpp new file mode 100644 index 00000000..a703871f --- /dev/null +++ b/tools/python-pybind/bind_nosh.cpp @@ -0,0 +1,19 @@ +#include "bind_nosh.hpp" + +int parseInputFromString(NOsh *nosh, std::string str) +{ + int ret, bufsize; + Vio *sock; + + startVio(); + + VASSERT( bufsize <= VMAX_BUFSIZE ); + sock = Vio_ctor("BUFF","ASC",VNULL,"0","r"); + + Vio_bufTake(sock, str.c_str(), str.size()); + + ret = NOsh_parseInput(nosh, sock); + sock->VIObuffer = VNULL; + Vio_dtor(&sock); + return ret; +} diff --git a/tools/python-pybind/bind_nosh.hpp b/tools/python-pybind/bind_nosh.hpp new file mode 100644 index 00000000..d1a5629c --- /dev/null +++ b/tools/python-pybind/bind_nosh.hpp @@ -0,0 +1,67 @@ + +#pragma once + +#include +#include + +extern "C" +{ +#include "apbscfg.h" +#include "routines.h" +#include "generic/nosh.h" +#include "generic/valist.h" +#include "generic/vatom.h" +} + +/** + * @file tools/python-pybind/bind_nosh.hpp + * @author Asher Mancinelli + * @brief Contains bindings for nosh-related functions. + * + * @note keep all implementations in the impl unless templated. + */ + +/** + * @todo request help documenting + */ +int parseInputFromString(NOsh *nosh, std::string str); + +/** + * @todo request help documenting + */ +template +std::vector getPotentials(NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg, Valist *alist) +{ + Vgrid *grid; + Vatom *atom; + int i, rc, nx, ny, nz; + double hx, hy, hzed, xcent, ycent, zcent, xmin, ymin, zmin; + double value; + double *position; + std::vector values; + + nx = pmg->pmgp->nx; + ny = pmg->pmgp->ny; + nz = pmg->pmgp->nz; + hx = pmg->pmgp->hx; + hy = pmg->pmgp->hy; + hzed = pmg->pmgp->hzed; + xcent = pmg->pmgp->xcent; + ycent = pmg->pmgp->ycent; + zcent = pmg->pmgp->zcent; + xmin = xcent - 0.5*(nx-1)*hx; + ymin = ycent - 0.5*(ny-1)*hy; + zmin = zcent - 0.5*(nz-1)*hzed; + + Vpmg_fillArray(pmg, pmg->rwork, VDT_POT, 0.0, pbeparm->pbetype, pbeparm); + grid = Vgrid_ctor(nx, ny, nz, hx, hy, hzed, xmin, ymin, zmin, + pmg->rwork); + for (i=0;i + +#include "bind_nosh.hpp" + +/** + * @file tools/python-pybind/module.cpp + * @author Asher Mancinelli + * + * @brief Glue code that binds each function/class to python + * + * @note Keep all binding functions in their own header/impl pair. No raw + * functions should live in this file; this is for *binding only*. + */ + +namespace py = pybind11; + +PYBIND11_MODULE(apbs, m) { + m.doc() = R"pbdoc( + )pbdoc"; + + /// @see bind_nosh.hpp + m.def("parseInputFromString", &parseInputFromString); + m.def("getPotentials", &getPotentials); +} From 488e4473d2334cf676ab7fefe7db37c2653d5b01 Mon Sep 17 00:00:00 2001 From: Asher Mancinelli Date: Sat, 5 Sep 2020 09:44:38 -0700 Subject: [PATCH 2/7] more thorough binding to python-side classes --- tools/python-pybind/bind_nosh.cpp | 48 ++++++++++++++++++++++++++++++ tools/python-pybind/bind_nosh.hpp | 20 +++++++++---- tools/python-pybind/bind_vatom.cpp | 0 tools/python-pybind/bind_vatom.hpp | 0 tools/python-pybind/module.cpp | 9 +++--- 5 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 tools/python-pybind/bind_vatom.cpp create mode 100644 tools/python-pybind/bind_vatom.hpp diff --git a/tools/python-pybind/bind_nosh.cpp b/tools/python-pybind/bind_nosh.cpp index a703871f..471043f5 100644 --- a/tools/python-pybind/bind_nosh.cpp +++ b/tools/python-pybind/bind_nosh.cpp @@ -17,3 +17,51 @@ int parseInputFromString(NOsh *nosh, std::string str) Vio_dtor(&sock); return ret; } + +void bind_nosh(py::module& m) +{ + m.def("getPotentials", &getPotentials); + + py::class_(m, "NOsh_calc") + .def("__init__", + [] (NOsh_calc* self, NOsh_CalcType calcType) + { + self = NOsh_calc_ctor(calcType); + }) + .def("NOsh_calc_mgparm_set", + [] (NOsh_calc* nosh, MGparm& mgparm) + { + nosh->mgparm = &mgparm; + }) + .def("__del__", + [] (NOsh_calc* self) + { + NOsh_calc_dtor(&self); + }); + + py::class_(m, "NOsh") + .def(py::init<>()) + .def("parseInputFromString", + [] (NOsh* self, std::string str) -> int + { + int ret, bufsize; + Vio *sock; + + startVio(); + + VASSERT( bufsize <= VMAX_BUFSIZE ); + sock = Vio_ctor("BUFF","ASC",VNULL,"0","r"); + + Vio_bufTake(sock, str.c_str(), str.size()); + + ret = NOsh_parseInput(self, sock); + sock->VIObuffer = VNULL; + Vio_dtor(&sock); + return ret; + }) + .def("__del__", + [] (NOsh* self) + { + NOsh_dtor(&self); + }); +} diff --git a/tools/python-pybind/bind_nosh.hpp b/tools/python-pybind/bind_nosh.hpp index d1a5629c..fc63e934 100644 --- a/tools/python-pybind/bind_nosh.hpp +++ b/tools/python-pybind/bind_nosh.hpp @@ -4,6 +4,12 @@ #include #include +#include +namespace py = pybind11; + +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wunused-function" +#endif extern "C" { #include "apbscfg.h" @@ -19,13 +25,12 @@ extern "C" * @brief Contains bindings for nosh-related functions. * * @note keep all implementations in the impl unless templated. + * @note contains bindings for nosh and all classes encapsulated by this struct + * within the source. + * + * @see src/generic/nosh.h:195 */ -/** - * @todo request help documenting - */ -int parseInputFromString(NOsh *nosh, std::string str); - /** * @todo request help documenting */ @@ -65,3 +70,8 @@ std::vector getPotentials(NOsh *nosh, PBEparm *pbeparm, Vpmg *pmg, Valist *al Vgrid_dtor(&grid); return values; } + +/** + * @brief Perform binding to module + */ +void bind_nosh(py::module& m); diff --git a/tools/python-pybind/bind_vatom.cpp b/tools/python-pybind/bind_vatom.cpp new file mode 100644 index 00000000..e69de29b diff --git a/tools/python-pybind/bind_vatom.hpp b/tools/python-pybind/bind_vatom.hpp new file mode 100644 index 00000000..e69de29b diff --git a/tools/python-pybind/module.cpp b/tools/python-pybind/module.cpp index d42b9f3b..d8cf019f 100644 --- a/tools/python-pybind/module.cpp +++ b/tools/python-pybind/module.cpp @@ -6,10 +6,11 @@ * @file tools/python-pybind/module.cpp * @author Asher Mancinelli * - * @brief Glue code that binds each function/class to python + * @brief Creates python module and passes to each binding function. * * @note Keep all binding functions in their own header/impl pair. No raw - * functions should live in this file; this is for *binding only*. + * functions or binding should live in this file; this is for creating the + * module and passing to binding functions only. */ namespace py = pybind11; @@ -18,7 +19,5 @@ PYBIND11_MODULE(apbs, m) { m.doc() = R"pbdoc( )pbdoc"; - /// @see bind_nosh.hpp - m.def("parseInputFromString", &parseInputFromString); - m.def("getPotentials", &getPotentials); + bind_nosh(m); } From e85fee845b3e1932b1900bb311a71c4efd7496d7 Mon Sep 17 00:00:00 2001 From: Asher Mancinelli Date: Sat, 5 Sep 2020 13:32:58 -0700 Subject: [PATCH 3/7] stubbed out further python interfaces/constants --- tools/python-pybind/CMakeLists.txt | 5 ++++- tools/python-pybind/bind_constants.hpp | 22 +++++++++++++++++++ tools/python-pybind/bind_nosh.hpp | 1 - tools/python-pybind/bind_valist.cpp | 7 ++++++ tools/python-pybind/bind_valist.hpp | 30 ++++++++++++++++++++++++++ tools/python-pybind/bind_vatom.cpp | 5 +++++ tools/python-pybind/bind_vatom.hpp | 26 ++++++++++++++++++++++ tools/python-pybind/module.cpp | 10 +++++++++ 8 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 tools/python-pybind/bind_constants.hpp create mode 100644 tools/python-pybind/bind_valist.cpp create mode 100644 tools/python-pybind/bind_valist.hpp diff --git a/tools/python-pybind/CMakeLists.txt b/tools/python-pybind/CMakeLists.txt index eb26fdb7..b3fff2d3 100644 --- a/tools/python-pybind/CMakeLists.txt +++ b/tools/python-pybind/CMakeLists.txt @@ -3,7 +3,10 @@ find_package(pybind11 REQUIRED) add_library(apbs_pybind MODULE module.cpp - bind_nosh.cpp) + bind_nosh.cpp + bind_vatom.cpp + bind_valist.cpp + ) set_target_properties(apbs_pybind PROPERTIES diff --git a/tools/python-pybind/bind_constants.hpp b/tools/python-pybind/bind_constants.hpp new file mode 100644 index 00000000..64600f7a --- /dev/null +++ b/tools/python-pybind/bind_constants.hpp @@ -0,0 +1,22 @@ +#pragma once + +/** + * @file tools/python-pybind/bind_constants.hpp + * @author Asher Mancinelli + * @brief Contains bindings for exported constants. + * + * @note The constants exported here were simply the same ones exported by the + * original SWIG python interface. + * + * @see tools/python/apbslib.c + */ + +inline void bind_constants(py::module& m) +{ + m.attr("NPT_ENERGY") = py::int_(static_cast(NPT_ENERGY)); + m.attr("NPT_FORCE") = py::int_(static_cast(NPT_FORCE)); + m.attr("NPT_ELECENERGY") = py::int_(static_cast(NPT_ELECENERGY)); + m.attr("NPT_ELECFORCE") = py::int_(static_cast(NPT_ELECFORCE)); + m.attr("NPT_APOLENERGY") = py::int_(static_cast(NPT_APOLENERGY)); + m.attr("NPT_APOLFORCE") = py::int_(static_cast(NPT_APOLFORCE)); +} diff --git a/tools/python-pybind/bind_nosh.hpp b/tools/python-pybind/bind_nosh.hpp index fc63e934..f4865622 100644 --- a/tools/python-pybind/bind_nosh.hpp +++ b/tools/python-pybind/bind_nosh.hpp @@ -1,4 +1,3 @@ - #pragma once #include diff --git a/tools/python-pybind/bind_valist.cpp b/tools/python-pybind/bind_valist.cpp new file mode 100644 index 00000000..bdd1500d --- /dev/null +++ b/tools/python-pybind/bind_valist.cpp @@ -0,0 +1,7 @@ +#include "bind_valist.hpp" + +void bind_valist(py::module& m) +{ + py::class_(m, "Valist") + .def(py::init<>()); +} diff --git a/tools/python-pybind/bind_valist.hpp b/tools/python-pybind/bind_valist.hpp new file mode 100644 index 00000000..0f87f189 --- /dev/null +++ b/tools/python-pybind/bind_valist.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include +namespace py = pybind11; + + +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wunused-function" +#endif +extern "C" +{ +#include "generic/valist.h" +} + +/** + * @file tools/python-pybind/bind_valist.hpp + * @author Asher Mancinelli + * @brief Contains bindings for Valist-related functions. + * + * @note keep all implementations in the impl unless templated. + * @note contains bindings for nosh and all classes encapsulated by this struct + * within the source. + * + * @see src/generic/valist.h:195 + */ + +/** + * @brief Perform binding to module + */ +void bind_valist(py::module& m); diff --git a/tools/python-pybind/bind_vatom.cpp b/tools/python-pybind/bind_vatom.cpp index e69de29b..dc8ca656 100644 --- a/tools/python-pybind/bind_vatom.cpp +++ b/tools/python-pybind/bind_vatom.cpp @@ -0,0 +1,5 @@ +#include "bind_vatom.hpp" + +void bind_vatom(py::module& m) +{ +} diff --git a/tools/python-pybind/bind_vatom.hpp b/tools/python-pybind/bind_vatom.hpp index e69de29b..fef03f3a 100644 --- a/tools/python-pybind/bind_vatom.hpp +++ b/tools/python-pybind/bind_vatom.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include +namespace py = pybind11; + +extern "C" +{ +#include "generic/valist.h" +} + +/** + * @file tools/python-pybind/bind_valist.hpp + * @author Asher Mancinelli + * @brief Contains bindings for Valist-related functions. + * + * @note keep all implementations in the impl unless templated. + * @note contains bindings for nosh and all classes encapsulated by this struct + * within the source. + * + * @see src/generic/valist.h:195 + */ + +/** + * @brief Perform binding of _Vatom_ to module + */ +void bind_vatom(py::module& m); diff --git a/tools/python-pybind/module.cpp b/tools/python-pybind/module.cpp index d8cf019f..488e4c6c 100644 --- a/tools/python-pybind/module.cpp +++ b/tools/python-pybind/module.cpp @@ -1,6 +1,12 @@ #include +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wunused-function" +#endif #include "bind_nosh.hpp" +#include "bind_vatom.hpp" +#include "bind_valist.hpp" +#include "bind_constants.hpp" /** * @file tools/python-pybind/module.cpp @@ -17,7 +23,11 @@ namespace py = pybind11; PYBIND11_MODULE(apbs, m) { m.doc() = R"pbdoc( + )pbdoc"; bind_nosh(m); + bind_vatom(m); + bind_valist(m); + bind_constants(m); } From dc719b6ce88350df56ece9448a76882bda972940 Mon Sep 17 00:00:00 2001 From: Asher Mancinelli Date: Sat, 5 Sep 2020 16:10:09 -0700 Subject: [PATCH 4/7] cleaning up warnings --- tools/python-pybind/bind_nosh.cpp | 4 +- tools/python-pybind/bind_nosh.hpp | 1 + tools/python-pybind/bind_valist.cpp | 63 ++++++++++++++++++++++++++++- tools/python-pybind/bind_valist.hpp | 15 ++++++- 4 files changed, 78 insertions(+), 5 deletions(-) diff --git a/tools/python-pybind/bind_nosh.cpp b/tools/python-pybind/bind_nosh.cpp index 471043f5..78403cbc 100644 --- a/tools/python-pybind/bind_nosh.cpp +++ b/tools/python-pybind/bind_nosh.cpp @@ -10,7 +10,7 @@ int parseInputFromString(NOsh *nosh, std::string str) VASSERT( bufsize <= VMAX_BUFSIZE ); sock = Vio_ctor("BUFF","ASC",VNULL,"0","r"); - Vio_bufTake(sock, str.c_str(), str.size()); + Vio_bufTake(sock, const_cast(str.c_str()), str.size()); ret = NOsh_parseInput(nosh, sock); sock->VIObuffer = VNULL; @@ -52,7 +52,7 @@ void bind_nosh(py::module& m) VASSERT( bufsize <= VMAX_BUFSIZE ); sock = Vio_ctor("BUFF","ASC",VNULL,"0","r"); - Vio_bufTake(sock, str.c_str(), str.size()); + Vio_bufTake(sock, const_cast(str.c_str()), str.size()); ret = NOsh_parseInput(self, sock); sock->VIObuffer = VNULL; diff --git a/tools/python-pybind/bind_nosh.hpp b/tools/python-pybind/bind_nosh.hpp index f4865622..710965bf 100644 --- a/tools/python-pybind/bind_nosh.hpp +++ b/tools/python-pybind/bind_nosh.hpp @@ -4,6 +4,7 @@ #include #include +#include namespace py = pybind11; #ifdef __GNUC__ diff --git a/tools/python-pybind/bind_valist.cpp b/tools/python-pybind/bind_valist.cpp index bdd1500d..88b9264a 100644 --- a/tools/python-pybind/bind_valist.cpp +++ b/tools/python-pybind/bind_valist.cpp @@ -1,7 +1,66 @@ #include "bind_valist.hpp" -void bind_valist(py::module& m) +void Valist_load(Valist *self, + int size, + std::vector x, + std::vector y, + std::vector z, + std::vector chg, + std::vector rad) +{ + + int i, j; + double pos[3]; + + Vatom *atom; + + VASSERT(self != VNULL); + + self->atoms = static_cast(Vmem_malloc(self->vmem, size, sizeof(Vatom))); + self->number = size; + for (i = 0; i < size; i++) { + pos[0] = x[i]; + pos[1] = y[i]; + pos[2] = z[i]; + Vatom_setCharge(&(self->atoms[i]), chg[i]); + Vatom_setRadius(&(self->atoms[i]), rad[i]); + Vatom_setPosition(&(self->atoms[i]), pos); + Vatom_setAtomID(&(self->atoms[i]), i); + } + + self->center[0] = 0.0; + self->center[1] = 0.0; + self->center[2] = 0.0; + self->maxrad = 0.0; + self->charge = 0.0; + + /* Reset stat variables */ + atom = &(self->atoms[0]); + for (i = 0; i < 3; i++) { + self->maxcrd[i] = self->mincrd[i] = atom->position[i]; + } + self->maxrad = atom->radius; + + for (i = 0; i < self->number; i++) { + atom = &(self->atoms[i]); + for (j = 0; j < 3; j++) { + if (atom->position[j] < self->mincrd[j]) + self->mincrd[j] = atom->position[j]; + if (atom->position[j] > self->maxcrd[j]) + self->maxcrd[j] = atom->position[j]; + } + if (atom->radius > self->maxrad) self->maxrad = atom->radius; + self->charge = self->charge + atom->charge; + } + + self->center[0] = 0.5 * (self->maxcrd[0] + self->mincrd[0]); + self->center[1] = 0.5 * (self->maxcrd[1] + self->mincrd[1]); + self->center[2] = 0.5 * (self->maxcrd[2] + self->mincrd[2]); +} + +void bind_valist(py::module &m) { py::class_(m, "Valist") - .def(py::init<>()); + .def(py::init<>()) + .def("load", &Valist_load); } diff --git a/tools/python-pybind/bind_valist.hpp b/tools/python-pybind/bind_valist.hpp index 0f87f189..54875c79 100644 --- a/tools/python-pybind/bind_valist.hpp +++ b/tools/python-pybind/bind_valist.hpp @@ -1,9 +1,11 @@ #pragma once +#include + #include +#include namespace py = pybind11; - #ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wunused-function" #endif @@ -24,6 +26,17 @@ extern "C" * @see src/generic/valist.h:195 */ +/** + * @todo request documentation for this + */ +void Valist_load(Valist *self, + int size, + std::vector x, + std::vector y, + std::vector z, + std::vector chg, + std::vector rad); + /** * @brief Perform binding to module */ From 7896b2a5ecb6c30ebb07a734cd893bb1d328e29b Mon Sep 17 00:00:00 2001 From: intendo Date: Sun, 6 Sep 2020 14:19:25 -0700 Subject: [PATCH 5/7] Add pybind11 to replace SWIG --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 18309b5d..3c8927dc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +pybind11>=2.5 sphinx>=3.1 sphinx_rtd_theme sphinx_sitemap \ No newline at end of file From 757a466e1c8c8843b748c538a76aad73b772a9a0 Mon Sep 17 00:00:00 2001 From: intendo Date: Sun, 6 Sep 2020 14:39:06 -0700 Subject: [PATCH 6/7] Try to get pybind11 installed --- .github/workflows/build.yml | 2 +- requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 46c7d984..766f50fd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,5 +62,5 @@ jobs: echo "==================================== BUILD =============================================== " ./.build.sh env: - # https://codecov.io/gh/Electrostatics/apbs-pdb2pqr + # https://codecov.io/gh/Electrostatics/apbs CODECOV_TOKEN: "e3a1e24c-5598-4f47-9353-7fa0ac57f98e" diff --git a/requirements.txt b/requirements.txt index 3c8927dc..0b247bc0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +python-dev-tools>=2020.9.4 pybind11>=2.5 sphinx>=3.1 sphinx_rtd_theme From a8bd271c0676e03bfa23195f6c3d29cd4e304c70 Mon Sep 17 00:00:00 2001 From: intendo Date: Sun, 6 Sep 2020 19:14:30 -0700 Subject: [PATCH 7/7] Add pybind submodule --- .gitmodules | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index c1e53f04..29b99adb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,4 +13,7 @@ url = https://github.com/Electrostatics/TABIPB.git [submodule "externals/pb_solvers"] path = externals/pb_solvers - url = https://github.com/Electrostatics/pb_solvers \ No newline at end of file + url = https://github.com/Electrostatics/pb_solvers +[submodule "externals/pybind11"] + path = externals/pybind11 + url = https://github.com/pybind/pybind11 \ No newline at end of file