Nektar++
LibUtilities.cpp
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: LibUtilities.cpp
4 //
5 // For more information, please see: http://www.nektar.info
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 //
31 // Description: Python wrapper for LibUtilities classes.
32 //
33 ///////////////////////////////////////////////////////////////////////////////
34 
37 #include <sstream>
38 
39 void export_Basis();
40 void export_Comm();
41 void export_Points();
43 void export_ShapeType();
44 void export_Comm();
45 
46 template<typename T>
47 void export_SharedArray();
48 
49 template<typename T>
50 void export_NekMatrix();
51 
52 PyObject *NekErrorType = nullptr;
53 std::stringstream errorStream;
54 
56 
57 PyObject* CreateExceptionClass(const char* name,
58  PyObject* baseTypeObj = PyExc_Exception)
59 {
60  std::string qualifiedName0 = std::string("NekPy.LibUtilities.") + name;
61 
62  PyObject* typeObj = PyErr_NewException(
63  const_cast<char*>(qualifiedName0.c_str()), baseTypeObj, 0);
64 
65  if (!typeObj)
66  {
67  py::throw_error_already_set();
68  }
69 
70  py::scope().attr(name) = py::handle<>(py::borrowed(typeObj));
71  return typeObj;
72 }
73 
75 {
76  PyErr_SetString(NekErrorType, e.what());
77 }
78 
79 
80 BOOST_PYTHON_MODULE(_LibUtilities)
81 {
82  np::initialize();
83 
84  // Register the NekError exception.
85  NekErrorType = CreateExceptionClass("NekError");
86  py::register_exception_translator<NekError>(&TranslateNekError);
87 
88  // Set a stringstream as an error sink to avoid duplicate output.
90 
91  export_Basis();
92  export_Points();
97  export_Comm();
98 }
void export_Comm()
Export for Comm communicator.
void export_Basis()
Basis exports.
PyObject * NekErrorType
PyObject * CreateExceptionClass(const char *name, PyObject *baseTypeObj=PyExc_Exception)
void TranslateNekError(NekError const &e)
Nektar::ErrorUtil::NekError NekError
BOOST_PYTHON_MODULE(_LibUtilities)
void export_ShapeType()
Export for ShapeType enumeration.
Definition: ShapeType.cpp:44
std::stringstream errorStream
void export_NekMatrix()
Definition: NekMatrix.cpp:96
void export_Points()
Points exports.
void export_SharedArray()
void export_SessionReader()
SessionReader exports.
template void export_NekMatrix< double >()
template void export_SharedArray< double >()
static void SetErrorStream(std::ostream &o)
Definition: ErrorUtil.hpp:73