This module provides Python bindings for all Dune core modules.
The aim of this module is to firstly provide the general infrastructure for exporting realizations of statically polymorphic interfaces based on just-in-time compilation and secondly to provide bindings for the central interfaces of the Dune core modules. This makes it possible to use Python to perform pre and post processing steps and to test new algorithms before transferring the code to C++.
Staying true to the Dune philosophy, we only introduce a thin layer when passing objects into Python, which can be removed when the object is passed back into a C++ algorithm. This retains the efficiency of C++ algorithms and little maintenance cost is incurred. Also the modular structure of Dune is maintained so that adding bindings for additional modules is straightforward.
This module provides a good entry point for getting started with Dune due to the flexibility of the Python environment. To facilitate the transition to the C++ development all the Python classes have a very similar interface to their C++ counterparts. This makes rapid prototyping in Python and then transferring the resulting code to C++ to increase efficiency straightforward. Furthermore, the Python interfaces will be very familiar to experienced Dune users and developers, leading to no issues when switching between C++ and Python. Combining C++ code and Python code is straightforward since free standing C++ functions can be easily called in a Python script and in addition, vectorized versions of many interfaces allow for more efficient code on the Python side.
A description of the mechanisms behind dune-python and a detailed introduction to its use can be found in the accompanying article Dedner, Nolte. The DUNE-Python Module.