SYCL: Avoid using no_init read accessor in rocFFT
[alexxy/gromacs.git] / python_packaging / src / gmxapi / module.cpp
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 2019,2020, by the GROMACS development team, led by
5  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6  * and including many others, as listed in the AUTHORS file in the
7  * top-level source directory and at http://www.gromacs.org.
8  *
9  * GROMACS is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * GROMACS is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with GROMACS; if not, see
21  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
23  *
24  * If you want to redistribute modifications to GROMACS, please
25  * consider that scientific software is very special. Version
26  * control is crucial - bugs must be traceable. We will be happy to
27  * consider code for inclusion in the official distribution, but
28  * derived work must not be called official GROMACS. Details are found
29  * in the README & COPYING files - if they are missing, get the
30  * official version at http://www.gromacs.org.
31  *
32  * To help us fund GROMACS development, we humbly ask that you cite
33  * the research papers on the package. Check out http://www.gromacs.org.
34  */
35
36 /*! \internal \file
37  * \brief Exports Python bindings for gmxapi._gmxapi module.
38  *
39  * \author M. Eric Irrgang <ericirrgang@gmail.com>
40  *
41  * \ingroup module_python
42  */
43
44 #include "module.h"
45
46 #include <memory>
47
48 #include "gmxapi/status.h"
49 #include "gmxapi/version.h"
50
51 #include "pybind11/pybind11.h"
52
53 namespace py = pybind11;
54
55 // Export Python module.
56
57 /// used to set __doc__
58 /// pybind11 uses const char* objects for docstrings. C++ raw literals can be used.
59 const char* const docstring = R"delimeter(
60 gmxapi core module
61 ==================
62
63 gmxapi._gmxapi provides Python access to the GROMACS C++ API so that client code can be
64 implemented in Python, C++, or a mixture. The classes provided are mirrored on the
65 C++ side in the gmxapi namespace as best as possible.
66
67 This documentation is generated from C++ extension code. Refer to C++ source
68 code and developer documentation for more details.
69
70 )delimeter";
71
72 /*! \brief Export gmxapi._gmxapi Python module in shared object file.
73  *
74  * \ingroup module_python
75  */
76
77 // Instantiate the Python module
78 PYBIND11_MODULE(_gmxapi, m)
79 {
80     using namespace gmxpy::detail;
81     m.doc() = docstring;
82
83     // Register exceptions and catch-all exception translators. We do this early
84     // to give more freedom to the other export functions. Note that bindings
85     // for C++ symbols should be expressed before those symbols are referenced
86     // in other bindings, and that exception translators are tried in reverse
87     // order of registration for uncaught C++ exceptions.
88     export_exceptions(m);
89
90     // Export core bindings
91     m.def("has_feature",
92           &gmxapi::Version::hasFeature,
93           "Check the gmxapi library for a named feature.");
94
95     py::class_<::gmxapi::Status> gmx_status(m, "Status", "Holds status for API operations.");
96
97     // Get bindings exported by the various components.
98     export_context(m);
99     export_system(m);
100     export_tprfile(m);
101
102 } // end pybind11 module