From 62500c1599a52ef827c01d7710e02c4aff620357 Mon Sep 17 00:00:00 2001
From: Felix Schindler <felix.schindler@wwu.de>
Date: Sun, 22 Mar 2020 22:45:19 +0100
Subject: [PATCH] [python] streamline

* prefix most .so with _mod_name, to identify cmake targets
* use same import mechanism
---
 python/dune/xt/CMakeLists.txt                 |  4 +-
 python/dune/xt/common/CMakeLists.txt          |  8 +--
 python/dune/xt/common/__init__.py             |  4 +-
 python/dune/xt/common/empty.cc                |  3 +-
 python/dune/xt/common/exceptions.cc           |  2 +-
 python/dune/xt/common/mpi.cc                  |  2 +-
 python/dune/xt/common/timings.cc              |  2 +-
 python/dune/xt/common/timings.py              |  2 +-
 python/dune/xt/functions/CMakeLists.txt       | 24 ++++-----
 python/dune/xt/functions/__init__.py          | 51 ++++++-------------
 python/dune/xt/functions/checkerboard.cc      |  8 +--
 python/dune/xt/functions/constant.cc          |  8 +--
 python/dune/xt/functions/expression.cc        |  8 +--
 .../xt/functions/function-as-grid-function.cc | 11 ++--
 .../xt/functions/function-interface-1d.cc     |  2 +-
 .../xt/functions/function-interface-2d.cc     |  2 +-
 .../xt/functions/function-interface-3d.cc     |  2 +-
 .../xt/functions/gridfunction-interface-1d.cc |  4 +-
 .../xt/functions/gridfunction-interface-2d.cc |  4 +-
 .../xt/functions/gridfunction-interface-3d.cc |  4 +-
 python/dune/xt/functions/indicator.cc         |  8 +--
 python/dune/xt/functions/spe10.cc             |  8 +--
 python/dune/xt/grid/CMakeLists.txt            |  6 +--
 python/dune/xt/grid/__init__.py               | 19 +++++--
 python/dune/xt/grid/types.cc                  |  2 +-
 python/dune/xt/grid/walker.cc                 |  2 +-
 26 files changed, 98 insertions(+), 102 deletions(-)

diff --git a/python/dune/xt/CMakeLists.txt b/python/dune/xt/CMakeLists.txt
index 74941efd4..f75a22870 100644
--- a/python/dune/xt/CMakeLists.txt
+++ b/python/dune/xt/CMakeLists.txt
@@ -12,7 +12,7 @@
 #   Tobias Leibner  (2019)
 # ~~~
 
-add_subdirectory(grid)
 add_subdirectory(common)
-add_subdirectory(la)
 add_subdirectory(functions)
+add_subdirectory(grid)
+add_subdirectory(la)
diff --git a/python/dune/xt/common/CMakeLists.txt b/python/dune/xt/common/CMakeLists.txt
index c8a019eaa..993bbd2c7 100644
--- a/python/dune/xt/common/CMakeLists.txt
+++ b/python/dune/xt/common/CMakeLists.txt
@@ -14,7 +14,7 @@
 dune_pybindxi_add_module(logging EXCLUDE_FROM_ALL logging.cc)
 dune_pybindxi_add_module(timedlogging EXCLUDE_FROM_ALL timedlogging.cc)
 
-dune_pybindxi_add_module(_empty EXCLUDE_FROM_ALL empty.cc)
-dune_pybindxi_add_module(_exceptions EXCLUDE_FROM_ALL exceptions.cc)
-dune_pybindxi_add_module(_mpi EXCLUDE_FROM_ALL mpi.cc)
-dune_pybindxi_add_module(_timings EXCLUDE_FROM_ALL timings.cc)
+dune_pybindxi_add_module(_common_empty EXCLUDE_FROM_ALL empty.cc)
+dune_pybindxi_add_module(_common_exceptions EXCLUDE_FROM_ALL exceptions.cc)
+dune_pybindxi_add_module(_common_mpi EXCLUDE_FROM_ALL mpi.cc)
+dune_pybindxi_add_module(_common_timings EXCLUDE_FROM_ALL timings.cc)
diff --git a/python/dune/xt/common/__init__.py b/python/dune/xt/common/__init__.py
index 0fad39f14..bea1dd791 100644
--- a/python/dune/xt/common/__init__.py
+++ b/python/dune/xt/common/__init__.py
@@ -14,7 +14,7 @@
 from dune.xt import guarded_import
 
 for mod_name in (
-        '_exceptions',
-        '_mpi',
+        '_common_exceptions',
+        '_common_mpi',
 ):
     guarded_import(globals(), 'dune.xt.common', mod_name)
diff --git a/python/dune/xt/common/empty.cc b/python/dune/xt/common/empty.cc
index 5532dd8ce..67de967c6 100644
--- a/python/dune/xt/common/empty.cc
+++ b/python/dune/xt/common/empty.cc
@@ -57,7 +57,8 @@ struct Terrier : Dog
   {}
 };
 
-PYBIND11_MODULE(_empty, m)
+
+PYBIND11_MODULE(_common_empty, m)
 {
   namespace py = pybind11;
   using namespace pybind11::literals;
diff --git a/python/dune/xt/common/exceptions.cc b/python/dune/xt/common/exceptions.cc
index 7f9c20d77..195fc031d 100644
--- a/python/dune/xt/common/exceptions.cc
+++ b/python/dune/xt/common/exceptions.cc
@@ -24,7 +24,7 @@
 #include <dune/pybindxi/stl.h>
 
 
-PYBIND11_MODULE(_exceptions, m)
+PYBIND11_MODULE(_common_exceptions, m)
 {
   namespace py = pybind11;
   using namespace pybind11::literals;
diff --git a/python/dune/xt/common/mpi.cc b/python/dune/xt/common/mpi.cc
index aefdbabca..f46f78ff0 100644
--- a/python/dune/xt/common/mpi.cc
+++ b/python/dune/xt/common/mpi.cc
@@ -35,7 +35,7 @@
 #include <dune/xt/common/string.hh>
 
 
-PYBIND11_MODULE(_mpi, m)
+PYBIND11_MODULE(_common_mpi, m)
 {
   using namespace Dune;
   namespace py = pybind11;
diff --git a/python/dune/xt/common/timings.cc b/python/dune/xt/common/timings.cc
index 6f88a233c..22bae4f4b 100644
--- a/python/dune/xt/common/timings.cc
+++ b/python/dune/xt/common/timings.cc
@@ -24,7 +24,7 @@
 #include <dune/common/parallel/mpihelper.hh>
 
 
-PYBIND11_MODULE(_timings, m)
+PYBIND11_MODULE(_common_timings, m)
 {
   namespace py = pybind11;
   using namespace pybind11::literals;
diff --git a/python/dune/xt/common/timings.py b/python/dune/xt/common/timings.py
index 941d4b2b3..836066f6f 100644
--- a/python/dune/xt/common/timings.py
+++ b/python/dune/xt/common/timings.py
@@ -13,6 +13,6 @@
 
 from dune.xt import guarded_import
 
-guarded_import(globals(), 'dune.xt.common', '_timings')
+guarded_import(globals(), 'dune.xt.common', '_common_timings')
 
 instance()
diff --git a/python/dune/xt/functions/CMakeLists.txt b/python/dune/xt/functions/CMakeLists.txt
index 5d5d3cea4..badd67b09 100644
--- a/python/dune/xt/functions/CMakeLists.txt
+++ b/python/dune/xt/functions/CMakeLists.txt
@@ -12,15 +12,15 @@
 #   Tobias Leibner  (2019)
 # ~~~
 
-dune_pybindxi_add_module(_function_interface_1d EXCLUDE_FROM_ALL function-interface-1d.cc)
-dune_pybindxi_add_module(_function_interface_2d EXCLUDE_FROM_ALL function-interface-2d.cc)
-dune_pybindxi_add_module(_function_interface_3d EXCLUDE_FROM_ALL function-interface-3d.cc)
-dune_pybindxi_add_module(_gridfunction_interface_1d EXCLUDE_FROM_ALL gridfunction-interface-1d.cc)
-dune_pybindxi_add_module(_gridfunction_interface_2d EXCLUDE_FROM_ALL gridfunction-interface-2d.cc)
-dune_pybindxi_add_module(_gridfunction_interface_3d EXCLUDE_FROM_ALL gridfunction-interface-3d.cc)
-dune_pybindxi_add_module(_checkerboard EXCLUDE_FROM_ALL checkerboard.cc)
-dune_pybindxi_add_module(_constant EXCLUDE_FROM_ALL constant.cc)
-dune_pybindxi_add_module(_expression EXCLUDE_FROM_ALL expression.cc)
-dune_pybindxi_add_module(_function_as_grid_function EXCLUDE_FROM_ALL function-as-grid-function.cc)
-dune_pybindxi_add_module(_indicator EXCLUDE_FROM_ALL indicator.cc)
-dune_pybindxi_add_module(_spe10 EXCLUDE_FROM_ALL spe10.cc)
+dune_pybindxi_add_module(_functions_function_interface_1d EXCLUDE_FROM_ALL function-interface-1d.cc)
+dune_pybindxi_add_module(_functions_function_interface_2d EXCLUDE_FROM_ALL function-interface-2d.cc)
+dune_pybindxi_add_module(_functions_function_interface_3d EXCLUDE_FROM_ALL function-interface-3d.cc)
+dune_pybindxi_add_module(_functions_gridfunction_interface_1d EXCLUDE_FROM_ALL gridfunction-interface-1d.cc)
+dune_pybindxi_add_module(_functions_gridfunction_interface_2d EXCLUDE_FROM_ALL gridfunction-interface-2d.cc)
+dune_pybindxi_add_module(_functions_gridfunction_interface_3d EXCLUDE_FROM_ALL gridfunction-interface-3d.cc)
+dune_pybindxi_add_module(_functions_checkerboard EXCLUDE_FROM_ALL checkerboard.cc)
+dune_pybindxi_add_module(_functions_constant EXCLUDE_FROM_ALL constant.cc)
+dune_pybindxi_add_module(_functions_expression EXCLUDE_FROM_ALL expression.cc)
+dune_pybindxi_add_module(_functions_function_as_grid_function EXCLUDE_FROM_ALL function-as-grid-function.cc)
+dune_pybindxi_add_module(_functions_indicator EXCLUDE_FROM_ALL indicator.cc)
+dune_pybindxi_add_module(_functions_spe10 EXCLUDE_FROM_ALL spe10.cc)
diff --git a/python/dune/xt/functions/__init__.py b/python/dune/xt/functions/__init__.py
index 33d3dc83e..3485f09d1 100644
--- a/python/dune/xt/functions/__init__.py
+++ b/python/dune/xt/functions/__init__.py
@@ -12,40 +12,21 @@
 #   Tobias Leibner  (2019)
 # ~~~
 
-from importlib import import_module
+from dune.xt import guarded_import
 
-import dune.xt.common
-import dune.xt.la
-import dune.xt.grid
+for mod_name in (
+    '_functions_function_interface_1d',
+    '_functions_function_interface_2d',
+    '_functions_function_interface_3d',
+    '_functions_gridfunction_interface_1d',
+    '_functions_gridfunction_interface_2d',
+    '_functions_gridfunction_interface_3d',
+    '_functions_checkerboard',
+    '_functions_constant',
+    '_functions_expression',
+    '_functions_function_as_grid_function',
+    '_functions_indicator',
+    '_functions_spe10',
+    ):
+    guarded_import(globals(), 'dune.xt.functions', mod_name)
 
-_modules = (
-    '_function_interface_1d',
-    '_function_interface_2d',
-    '_function_interface_3d',
-    '_gridfunction_interface_1d',
-    '_gridfunction_interface_2d',
-    '_gridfunction_interface_3d',
-    '_checkerboard',
-    '_constant',
-    '_expression',
-    '_function_as_grid_function',
-    '_indicator',
-    '_spe10',
-)
-
-# see https://stackoverflow.com/questions/43059267/how-to-do-from-module-import-using-importlib
-for mod_name in _modules:
-    try:
-        mod = import_module('.{}'.format(mod_name), 'dune.xt.functions')
-        if "__all__" in mod.__dict__:
-            names = mod.__dict__["__all__"]
-        else:
-            # otherwise we import all names that don't begin with _
-            names = [x for x in mod.__dict__ if not x.startswith("_")]
-        globals().update({k: getattr(mod, k) for k in names})
-    except ImportError as e:
-        import os
-        import logging
-        if os.environ.get('DXT_PYTHON_DEBUG', False):
-            raise e
-        logging.error('dune-xt-functions: could not import {} module'.format(mod_name))
diff --git a/python/dune/xt/functions/checkerboard.cc b/python/dune/xt/functions/checkerboard.cc
index 7b22187ac..42fdbad61 100644
--- a/python/dune/xt/functions/checkerboard.cc
+++ b/python/dune/xt/functions/checkerboard.cc
@@ -54,16 +54,16 @@ void all_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_checkerboard, m)
+PYBIND11_MODULE(_functions_checkerboard, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._gridfunction_interface_1d");
-  py::module::import("dune.xt.functions._gridfunction_interface_2d");
-  py::module::import("dune.xt.functions._gridfunction_interface_3d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_1d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_2d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_3d");
 
   all_grids(m);
 } // PYBIND11_MODULE(...)
diff --git a/python/dune/xt/functions/constant.cc b/python/dune/xt/functions/constant.cc
index c6ad9a61c..398d784eb 100644
--- a/python/dune/xt/functions/constant.cc
+++ b/python/dune/xt/functions/constant.cc
@@ -23,15 +23,15 @@
 #include "constant.hh"
 
 
-PYBIND11_MODULE(_constant, m)
+PYBIND11_MODULE(_functions_constant, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
-  py::module::import("dune.xt.functions._function_interface_1d");
-  py::module::import("dune.xt.functions._function_interface_2d");
-  py::module::import("dune.xt.functions._function_interface_3d");
+  py::module::import("dune.xt.functions._functions_function_interface_1d");
+  py::module::import("dune.xt.functions._functions_function_interface_2d");
+  py::module::import("dune.xt.functions._functions_function_interface_3d");
 
   using namespace Dune::XT::Functions;
 
diff --git a/python/dune/xt/functions/expression.cc b/python/dune/xt/functions/expression.cc
index 8a1b645af..0b44fe9aa 100644
--- a/python/dune/xt/functions/expression.cc
+++ b/python/dune/xt/functions/expression.cc
@@ -23,15 +23,15 @@
 #include "expression.hh"
 
 
-PYBIND11_MODULE(_expression, m)
+PYBIND11_MODULE(_functions_expression, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
-  py::module::import("dune.xt.functions._function_interface_1d");
-  py::module::import("dune.xt.functions._function_interface_2d");
-  py::module::import("dune.xt.functions._function_interface_3d");
+  py::module::import("dune.xt.functions._functions_function_interface_1d");
+  py::module::import("dune.xt.functions._functions_function_interface_2d");
+  py::module::import("dune.xt.functions._functions_function_interface_3d");
 
   using namespace Dune::XT::Functions;
 
diff --git a/python/dune/xt/functions/function-as-grid-function.cc b/python/dune/xt/functions/function-as-grid-function.cc
index fd3639ec7..a976bda4b 100644
--- a/python/dune/xt/functions/function-as-grid-function.cc
+++ b/python/dune/xt/functions/function-as-grid-function.cc
@@ -54,16 +54,19 @@ void all_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_function_as_grid_function, m)
+PYBIND11_MODULE(_functions_function_as_grid_function, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._gridfunction_interface_1d");
-  py::module::import("dune.xt.functions._gridfunction_interface_2d");
-  py::module::import("dune.xt.functions._gridfunction_interface_3d");
+  py::module::import("dune.xt.functions._functions_function_interface_1d");
+  py::module::import("dune.xt.functions._functions_function_interface_2d");
+  py::module::import("dune.xt.functions._functions_function_interface_3d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_1d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_2d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_3d");
 
   all_grids(m);
 }
diff --git a/python/dune/xt/functions/function-interface-1d.cc b/python/dune/xt/functions/function-interface-1d.cc
index 5b1de0ff6..a0a84547e 100644
--- a/python/dune/xt/functions/function-interface-1d.cc
+++ b/python/dune/xt/functions/function-interface-1d.cc
@@ -23,7 +23,7 @@
 #include "function-interface.hh"
 
 
-PYBIND11_MODULE(_function_interface_1d, m)
+PYBIND11_MODULE(_functions_function_interface_1d, m)
 {
   namespace py = pybind11;
 
diff --git a/python/dune/xt/functions/function-interface-2d.cc b/python/dune/xt/functions/function-interface-2d.cc
index a8fe75642..3e44773cc 100644
--- a/python/dune/xt/functions/function-interface-2d.cc
+++ b/python/dune/xt/functions/function-interface-2d.cc
@@ -23,7 +23,7 @@
 #include "function-interface.hh"
 
 
-PYBIND11_MODULE(_function_interface_2d, m)
+PYBIND11_MODULE(_functions_function_interface_2d, m)
 {
   namespace py = pybind11;
 
diff --git a/python/dune/xt/functions/function-interface-3d.cc b/python/dune/xt/functions/function-interface-3d.cc
index 3e92818ff..5bc2c6fc5 100644
--- a/python/dune/xt/functions/function-interface-3d.cc
+++ b/python/dune/xt/functions/function-interface-3d.cc
@@ -23,7 +23,7 @@
 #include "function-interface.hh"
 
 
-PYBIND11_MODULE(_function_interface_3d, m)
+PYBIND11_MODULE(_functions_function_interface_3d, m)
 {
   namespace py = pybind11;
 
diff --git a/python/dune/xt/functions/gridfunction-interface-1d.cc b/python/dune/xt/functions/gridfunction-interface-1d.cc
index 65186c5dc..7c6b4a8e2 100644
--- a/python/dune/xt/functions/gridfunction-interface-1d.cc
+++ b/python/dune/xt/functions/gridfunction-interface-1d.cc
@@ -38,14 +38,14 @@ void bind_all_1d_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_gridfunction_interface_1d, m)
+PYBIND11_MODULE(_functions_gridfunction_interface_1d, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._function_interface_1d");
+  py::module::import("dune.xt.functions._functions_function_interface_1d");
 
   bind_all_1d_grids(m);
 } // PYBIND11_MODULE(...)
diff --git a/python/dune/xt/functions/gridfunction-interface-2d.cc b/python/dune/xt/functions/gridfunction-interface-2d.cc
index 22a010f76..05c0397bc 100644
--- a/python/dune/xt/functions/gridfunction-interface-2d.cc
+++ b/python/dune/xt/functions/gridfunction-interface-2d.cc
@@ -38,14 +38,14 @@ void bind_all_2d_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_gridfunction_interface_2d, m)
+PYBIND11_MODULE(_functions_gridfunction_interface_2d, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._function_interface_2d");
+  py::module::import("dune.xt.functions._functions_function_interface_2d");
 
   bind_all_2d_grids(m);
 } // PYBIND11_MODULE(...)
diff --git a/python/dune/xt/functions/gridfunction-interface-3d.cc b/python/dune/xt/functions/gridfunction-interface-3d.cc
index f23e7701f..217f5ec41 100644
--- a/python/dune/xt/functions/gridfunction-interface-3d.cc
+++ b/python/dune/xt/functions/gridfunction-interface-3d.cc
@@ -38,14 +38,14 @@ void bind_all_3d_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_gridfunction_interface_3d, m)
+PYBIND11_MODULE(_functions_gridfunction_interface_3d, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._function_interface_3d");
+  py::module::import("dune.xt.functions._functions_function_interface_3d");
 
   bind_all_3d_grids(m);
 } // PYBIND11_MODULE(...)
diff --git a/python/dune/xt/functions/indicator.cc b/python/dune/xt/functions/indicator.cc
index 4e0dbb48d..a9e06be81 100644
--- a/python/dune/xt/functions/indicator.cc
+++ b/python/dune/xt/functions/indicator.cc
@@ -54,16 +54,16 @@ void all_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_indicator, m)
+PYBIND11_MODULE(_functions_indicator, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._gridfunction_interface_1d");
-  py::module::import("dune.xt.functions._gridfunction_interface_2d");
-  py::module::import("dune.xt.functions._gridfunction_interface_3d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_1d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_2d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_3d");
 
   all_grids(m);
 
diff --git a/python/dune/xt/functions/spe10.cc b/python/dune/xt/functions/spe10.cc
index 59cd2f392..7a518b7ee 100644
--- a/python/dune/xt/functions/spe10.cc
+++ b/python/dune/xt/functions/spe10.cc
@@ -51,16 +51,16 @@ void all_grids<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_spe10, m)
+PYBIND11_MODULE(_functions_spe10, m)
 {
   namespace py = pybind11;
 
   py::module::import("dune.xt.common");
   py::module::import("dune.xt.la");
   py::module::import("dune.xt.grid");
-  py::module::import("dune.xt.functions._gridfunction_interface_1d");
-  py::module::import("dune.xt.functions._gridfunction_interface_2d");
-  py::module::import("dune.xt.functions._gridfunction_interface_3d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_1d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_2d");
+  py::module::import("dune.xt.functions._functions_gridfunction_interface_3d");
 
   all_grids(m);
 }
diff --git a/python/dune/xt/grid/CMakeLists.txt b/python/dune/xt/grid/CMakeLists.txt
index ee5e86ef7..e0912a209 100644
--- a/python/dune/xt/grid/CMakeLists.txt
+++ b/python/dune/xt/grid/CMakeLists.txt
@@ -12,9 +12,9 @@
 #   Tobias Leibner  (2019)
 # ~~~
 
-dune_pybindxi_add_module(_boundaryinfo EXCLUDE_FROM_ALL boundaryinfo.cc)
-dune_pybindxi_add_module(_types EXCLUDE_FROM_ALL types.cc)
-dune_pybindxi_add_module(_walker EXCLUDE_FROM_ALL walker.cc)
+dune_pybindxi_add_module(_grid_boundaryinfo EXCLUDE_FROM_ALL boundaryinfo.cc)
 dune_pybindxi_add_module(_grid_gridprovider_cube EXCLUDE_FROM_ALL gridprovider/cube.cc)
 dune_pybindxi_add_module(_grid_gridprovider_provider EXCLUDE_FROM_ALL gridprovider/provider.cc)
 dune_pybindxi_add_module(_grid_traits EXCLUDE_FROM_ALL traits.cc)
+dune_pybindxi_add_module(_grid_types EXCLUDE_FROM_ALL types.cc)
+dune_pybindxi_add_module(_grid_walker EXCLUDE_FROM_ALL walker.cc)
diff --git a/python/dune/xt/grid/__init__.py b/python/dune/xt/grid/__init__.py
index b305efc58..5e4a2aeec 100644
--- a/python/dune/xt/grid/__init__.py
+++ b/python/dune/xt/grid/__init__.py
@@ -11,17 +11,28 @@
 #   Tobias Leibner  (2019)
 # ~~~
 
+from numbers import Number
+
 from dune.xt import guarded_import
 
 for mod_name in (
-        '_boundaryinfo',
-        '_types',
-        '_walker',
-        '_provider',
+            '_grid_boundaryinfo',
+            '_grid_gridprovider_cube',
+            '_grid_gridprovider_provider',
+            '_grid_traits',
+            '_grid_types',
+            '_grid_walker',
 ):
     guarded_import(globals(), 'dune.xt.grid', mod_name)
 
 
+def Dim(d):
+    assert isinstance(d, Number)
+    if f'Dimension{d}' not in globals():
+        raise RuntimeError(f'Dimension {d} not available, extend <python/dune/xt/grid/traits.cc>!')
+    return globals()[f'Dimension{d}']()
+
+
 def make_walker(gridprovider, level=0):
     for factory in [globals()[s] for s in globals().keys() if s.startswith('make_walker_on_')]:
         try:
diff --git a/python/dune/xt/grid/types.cc b/python/dune/xt/grid/types.cc
index 22692a5cf..7f43c3c6d 100644
--- a/python/dune/xt/grid/types.cc
+++ b/python/dune/xt/grid/types.cc
@@ -41,7 +41,7 @@ template <>
 void addbind_for_Grid<boost::tuples::null_type>(pybind11::module&, std::vector<std::string>&)
 {}
 
-PYBIND11_MODULE(_types, m)
+PYBIND11_MODULE(_grid_types, m)
 {
   namespace py = pybind11;
 
diff --git a/python/dune/xt/grid/walker.cc b/python/dune/xt/grid/walker.cc
index 8ea5b973d..e50e2a260 100644
--- a/python/dune/xt/grid/walker.cc
+++ b/python/dune/xt/grid/walker.cc
@@ -57,7 +57,7 @@ void addbind_for_Grid<boost::tuples::null_type>(pybind11::module&)
 {}
 
 
-PYBIND11_MODULE(_walker, m)
+PYBIND11_MODULE(_grid_walker, m)
 {
   namespace py = pybind11;
 
-- 
GitLab