NekPy uses the Boost.Python library to provide a set of high-quality, hand-written Python
bindings for selected functions and classes in Nektar++.
It is worth noting that Python (CPython, the standard Python implementation written in C,
in particular) includes C API and that everything in Python is strictly speaking a C structure
called PyObject. Hence, defining a new class, method etc. in Python is in reality creating a
new PyObject structure.
Boost.Python is essentially a wrapper for Python C API which conveniently exports C++
classes and methods into PyObjects. At compilation time a dynamic library is created which
is then imported to Python, as shown in Figure 18.1.
A typical snippet could look something like:
1from NekPy.LibUtilities import PointsKey, PointsType, BasisKey, BasisType 2from NekPy.StdRegions import StdQuadExp 3import numpy as np 4numModes = 8 5numPts = 9 6ptsKey = PointsKey(numPts, PointsType.GaussLobattoLegendre) 7basisKey = BasisKey(BasisType.Modified_A, numModes, ptsKey) 8quadExp = StdQuadExp(basisKey, basisKey) 9x, y = quadExp.GetCoords() 10fx = np.sin(x) * np.cos(y) 11proj = quadExp.FwdTrans(fx)
NekPy uses the Boost.NumPy library, contained in Boost 1.63+, to automatically convert C++
Array<OneD, > objects to and from the commonly-used numpy.ndarray object, which makes
the integration more seamless between Python and C++.