From b65925a903a6242c7ef14e29118d35c9a7b7ee78 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (l)" <j.wuttke@fz-juelich.de>
Date: Fri, 18 Dec 2020 20:47:49 +0100
Subject: [PATCH] Export to Py: Conditional import of ba_plot

---
 Core/Export/PyFmt.cpp                                 |  7 ++-----
 Core/Export/PyFmt.h                                   |  2 +-
 Core/Export/SimulationToPython.cpp                    | 11 ++++++++---
 Examples/scatter2d/ApproximationDA.py                 |  3 ++-
 Examples/scatter2d/ApproximationLMA.py                |  3 ++-
 Examples/scatter2d/ApproximationSSCA.py               |  3 ++-
 Examples/scatter2d/BeamDivergence.py                  |  3 ++-
 Examples/scatter2d/BiMaterialCylinders.py             |  3 ++-
 Examples/scatter2d/BoxesWithSpecularPeak.py           |  3 ++-
 Examples/scatter2d/BuriedParticles.py                 |  3 ++-
 Examples/scatter2d/ConstantBackground.py              |  3 ++-
 Examples/scatter2d/CoreShellNanoparticles.py          |  3 ++-
 Examples/scatter2d/CorrelatedRoughness.py             |  3 ++-
 Examples/scatter2d/CosineRipplesAtRectLattice.py      |  3 ++-
 Examples/scatter2d/CylindersAndPrisms.py              |  3 ++-
 Examples/scatter2d/CylindersInAverageLayer.py         |  3 ++-
 Examples/scatter2d/CylindersInBA.py                   |  3 ++-
 Examples/scatter2d/CylindersInDWBA.py                 |  3 ++-
 Examples/scatter2d/CylindersWithSizeDistribution.py   |  3 ++-
 Examples/scatter2d/DetectorResolutionFunction.py      |  3 ++-
 Examples/scatter2d/HalfSpheresInAverageTopLayer.py    |  3 ++-
 Examples/scatter2d/HexagonalLatticesWithBasis.py      |  3 ++-
 Examples/scatter2d/Interference1DRadialParaCrystal.py |  3 ++-
 .../scatter2d/Interference2DCenteredSquareLattice.py  |  3 ++-
 .../scatter2d/Interference2DLatticeSumOfRotated.py    |  3 ++-
 Examples/scatter2d/Interference2DParaCrystal.py       |  3 ++-
 .../scatter2d/Interference2DRotatedSquareLattice.py   |  3 ++-
 .../scatter2d/Interference2DSquareFiniteLattice.py    |  3 ++-
 Examples/scatter2d/Interference2DSquareLattice.py     |  3 ++-
 Examples/scatter2d/MagneticSpheres.py                 |  3 ++-
 Examples/scatter2d/MesoCrystal.py                     |  3 ++-
 Examples/scatter2d/ParticlesCrossingInterface.py      |  3 ++-
 Examples/scatter2d/RotatedPyramids.py                 |  3 ++-
 Examples/scatter2d/SpheresAtHexLattice.py             |  3 ++-
 Examples/scatter2d/TriangularRipple.py                |  3 ++-
 .../TwoTypesOfCylindersWithSizeDistribution.py        |  3 ++-
 Tests/Functional/PyEmbedded/Tests.cpp                 |  4 +++-
 auto/Wrap/doxygenCore.i                               |  2 +-
 38 files changed, 81 insertions(+), 44 deletions(-)

diff --git a/Core/Export/PyFmt.cpp b/Core/Export/PyFmt.cpp
index b008fd342cf..2db85738238 100644
--- a/Core/Export/PyFmt.cpp
+++ b/Core/Export/PyFmt.cpp
@@ -21,7 +21,7 @@
 
 namespace pyfmt {
 
-std::string preambled(const std::string& code)
+std::string printImportedSymbols(const std::string& code)
 {
     std::vector<std::string> to_declare;
     for (const std::string& key : {"angstrom", "deg", "nm", "nm2", "micrometer"})
@@ -30,10 +30,7 @@ std::string preambled(const std::string& code)
     for (const std::string& key : {"kvector_t"})
         if (code.find(key) != std::string::npos)
             to_declare.push_back(key);
-    return "import numpy, sys\n"
-           "import bornagain as ba\n"
-           "from bornagain import "
-           + StringUtils::join(to_declare, ", ") + "\n\n\n" + code;
+    return "from bornagain import " + StringUtils::join(to_declare, ", ") + "\n";
 }
 
 std::string printBool(double value)
diff --git a/Core/Export/PyFmt.h b/Core/Export/PyFmt.h
index bd174b9d4b9..e3dfc741b1d 100644
--- a/Core/Export/PyFmt.h
+++ b/Core/Export/PyFmt.h
@@ -27,7 +27,7 @@
 
 namespace pyfmt {
 
-std::string preambled(const std::string& code);
+std::string printImportedSymbols(const std::string& code);
 
 std::string printInt(int value);
 std::string printBool(double value);
diff --git a/Core/Export/SimulationToPython.cpp b/Core/Export/SimulationToPython.cpp
index ff0b0364f44..19483816bb9 100644
--- a/Core/Export/SimulationToPython.cpp
+++ b/Core/Export/SimulationToPython.cpp
@@ -464,7 +464,10 @@ std::string simulationCode(const ISimulation& simulation)
         throw std::runtime_error("Cannot export: Simulation has no sample");
     std::string code =
         SampleToPython().sampleCode(*simulation.sample()) + defineSimulate(&simulation);
-    return pyfmt::preambled(code);
+    return "import bornagain as ba\n"
+        + pyfmt::printImportedSymbols(code)
+        + "import ba_plot if  __name__ == '__main__'"
+        "\n\n" + code;
 }
 
 } // namespace
@@ -477,7 +480,8 @@ std::string SimulationToPython::simulationPlotCode(const ISimulation& simulation
 {
     return simulationCode(simulation)
            + "if __name__ == '__main__':\n"
-             "    ba.run_and_plot(get_simulation(get_sample()))\n";
+             "    import ba_plot\n"
+             "    ba_plot.run_and_plot(get_simulation(get_sample()))\n";
 }
 
 std::string SimulationToPython::simulationSaveCode(const ISimulation& simulation,
@@ -485,6 +489,7 @@ std::string SimulationToPython::simulationSaveCode(const ISimulation& simulation
 {
     return simulationCode(simulation)
            + "if __name__ == '__main__':\n"
-             "    ba.run_and_save(get_simulation(get_sample()), \""
+             "    import ba_plot\n"
+             "    baplot.run_and_save(get_simulation(get_sample()), \""
            + fname + "\")\n";
 }
diff --git a/Examples/scatter2d/ApproximationDA.py b/Examples/scatter2d/ApproximationDA.py
index f6d60aa1180..e3d7392c9eb 100644
--- a/Examples/scatter2d/ApproximationDA.py
+++ b/Examples/scatter2d/ApproximationDA.py
@@ -59,4 +59,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/ApproximationLMA.py b/Examples/scatter2d/ApproximationLMA.py
index 1d69886e5be..db46e4af070 100644
--- a/Examples/scatter2d/ApproximationLMA.py
+++ b/Examples/scatter2d/ApproximationLMA.py
@@ -67,4 +67,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/ApproximationSSCA.py b/Examples/scatter2d/ApproximationSSCA.py
index 287dc47c68c..663e194a90f 100644
--- a/Examples/scatter2d/ApproximationSSCA.py
+++ b/Examples/scatter2d/ApproximationSSCA.py
@@ -60,4 +60,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/BeamDivergence.py b/Examples/scatter2d/BeamDivergence.py
index e8d4a04fc84..07e6f1b2858 100644
--- a/Examples/scatter2d/BeamDivergence.py
+++ b/Examples/scatter2d/BeamDivergence.py
@@ -57,4 +57,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/BiMaterialCylinders.py b/Examples/scatter2d/BiMaterialCylinders.py
index ac991ce7e79..0d8e8d351af 100644
--- a/Examples/scatter2d/BiMaterialCylinders.py
+++ b/Examples/scatter2d/BiMaterialCylinders.py
@@ -65,4 +65,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/BoxesWithSpecularPeak.py b/Examples/scatter2d/BoxesWithSpecularPeak.py
index ca87675492c..8c0184df479 100644
--- a/Examples/scatter2d/BoxesWithSpecularPeak.py
+++ b/Examples/scatter2d/BoxesWithSpecularPeak.py
@@ -60,4 +60,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/BuriedParticles.py b/Examples/scatter2d/BuriedParticles.py
index 6fb9cd0efa1..cbe1b459e5b 100644
--- a/Examples/scatter2d/BuriedParticles.py
+++ b/Examples/scatter2d/BuriedParticles.py
@@ -56,4 +56,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/ConstantBackground.py b/Examples/scatter2d/ConstantBackground.py
index 5244d0ceb44..7b1f7ed2758 100644
--- a/Examples/scatter2d/ConstantBackground.py
+++ b/Examples/scatter2d/ConstantBackground.py
@@ -51,4 +51,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CoreShellNanoparticles.py b/Examples/scatter2d/CoreShellNanoparticles.py
index 19162de038f..8c2148dc7e5 100644
--- a/Examples/scatter2d/CoreShellNanoparticles.py
+++ b/Examples/scatter2d/CoreShellNanoparticles.py
@@ -56,4 +56,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CorrelatedRoughness.py b/Examples/scatter2d/CorrelatedRoughness.py
index 916215b5f3d..1ce98d904cf 100644
--- a/Examples/scatter2d/CorrelatedRoughness.py
+++ b/Examples/scatter2d/CorrelatedRoughness.py
@@ -51,4 +51,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CosineRipplesAtRectLattice.py b/Examples/scatter2d/CosineRipplesAtRectLattice.py
index 694f055b18d..b34cdb3fdef 100644
--- a/Examples/scatter2d/CosineRipplesAtRectLattice.py
+++ b/Examples/scatter2d/CosineRipplesAtRectLattice.py
@@ -59,4 +59,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CylindersAndPrisms.py b/Examples/scatter2d/CylindersAndPrisms.py
index 216d9afa21f..cf8db3228dd 100644
--- a/Examples/scatter2d/CylindersAndPrisms.py
+++ b/Examples/scatter2d/CylindersAndPrisms.py
@@ -56,4 +56,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CylindersInAverageLayer.py b/Examples/scatter2d/CylindersInAverageLayer.py
index e13db805276..d2b8925c3a2 100644
--- a/Examples/scatter2d/CylindersInAverageLayer.py
+++ b/Examples/scatter2d/CylindersInAverageLayer.py
@@ -51,4 +51,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CylindersInBA.py b/Examples/scatter2d/CylindersInBA.py
index ec8d50a4d19..17fc834da2e 100644
--- a/Examples/scatter2d/CylindersInBA.py
+++ b/Examples/scatter2d/CylindersInBA.py
@@ -47,4 +47,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CylindersInDWBA.py b/Examples/scatter2d/CylindersInDWBA.py
index 076dd5960ea..b8420ad4a09 100644
--- a/Examples/scatter2d/CylindersInDWBA.py
+++ b/Examples/scatter2d/CylindersInDWBA.py
@@ -49,4 +49,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/CylindersWithSizeDistribution.py b/Examples/scatter2d/CylindersWithSizeDistribution.py
index 65439c35962..4cfce432bfe 100644
--- a/Examples/scatter2d/CylindersWithSizeDistribution.py
+++ b/Examples/scatter2d/CylindersWithSizeDistribution.py
@@ -53,4 +53,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/DetectorResolutionFunction.py b/Examples/scatter2d/DetectorResolutionFunction.py
index d6bde346d70..c9d2a61f956 100644
--- a/Examples/scatter2d/DetectorResolutionFunction.py
+++ b/Examples/scatter2d/DetectorResolutionFunction.py
@@ -51,4 +51,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/HalfSpheresInAverageTopLayer.py b/Examples/scatter2d/HalfSpheresInAverageTopLayer.py
index d8933487c15..96fdcad873b 100644
--- a/Examples/scatter2d/HalfSpheresInAverageTopLayer.py
+++ b/Examples/scatter2d/HalfSpheresInAverageTopLayer.py
@@ -61,4 +61,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/HexagonalLatticesWithBasis.py b/Examples/scatter2d/HexagonalLatticesWithBasis.py
index dd99d3f2c12..62c91b2c42a 100644
--- a/Examples/scatter2d/HexagonalLatticesWithBasis.py
+++ b/Examples/scatter2d/HexagonalLatticesWithBasis.py
@@ -68,4 +68,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference1DRadialParaCrystal.py b/Examples/scatter2d/Interference1DRadialParaCrystal.py
index b17da17637c..616ccfa7aac 100644
--- a/Examples/scatter2d/Interference1DRadialParaCrystal.py
+++ b/Examples/scatter2d/Interference1DRadialParaCrystal.py
@@ -55,4 +55,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference2DCenteredSquareLattice.py b/Examples/scatter2d/Interference2DCenteredSquareLattice.py
index d56deadc3ca..cbd0cf87f17 100644
--- a/Examples/scatter2d/Interference2DCenteredSquareLattice.py
+++ b/Examples/scatter2d/Interference2DCenteredSquareLattice.py
@@ -68,4 +68,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference2DLatticeSumOfRotated.py b/Examples/scatter2d/Interference2DLatticeSumOfRotated.py
index ac2a432a9da..32c1d01c575 100644
--- a/Examples/scatter2d/Interference2DLatticeSumOfRotated.py
+++ b/Examples/scatter2d/Interference2DLatticeSumOfRotated.py
@@ -46,4 +46,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference2DParaCrystal.py b/Examples/scatter2d/Interference2DParaCrystal.py
index 013a65d4b45..7570ea6a668 100644
--- a/Examples/scatter2d/Interference2DParaCrystal.py
+++ b/Examples/scatter2d/Interference2DParaCrystal.py
@@ -61,4 +61,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference2DRotatedSquareLattice.py b/Examples/scatter2d/Interference2DRotatedSquareLattice.py
index f428b440963..69790000341 100644
--- a/Examples/scatter2d/Interference2DRotatedSquareLattice.py
+++ b/Examples/scatter2d/Interference2DRotatedSquareLattice.py
@@ -59,4 +59,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference2DSquareFiniteLattice.py b/Examples/scatter2d/Interference2DSquareFiniteLattice.py
index 5fc42c81f48..ac3bdaf8e1f 100644
--- a/Examples/scatter2d/Interference2DSquareFiniteLattice.py
+++ b/Examples/scatter2d/Interference2DSquareFiniteLattice.py
@@ -57,4 +57,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/Interference2DSquareLattice.py b/Examples/scatter2d/Interference2DSquareLattice.py
index cb64a4e5415..1476f817786 100644
--- a/Examples/scatter2d/Interference2DSquareLattice.py
+++ b/Examples/scatter2d/Interference2DSquareLattice.py
@@ -58,4 +58,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/MagneticSpheres.py b/Examples/scatter2d/MagneticSpheres.py
index ef10a3bf24d..ef60d2b05d9 100644
--- a/Examples/scatter2d/MagneticSpheres.py
+++ b/Examples/scatter2d/MagneticSpheres.py
@@ -57,4 +57,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/MesoCrystal.py b/Examples/scatter2d/MesoCrystal.py
index c238716ca40..5d7f4733196 100644
--- a/Examples/scatter2d/MesoCrystal.py
+++ b/Examples/scatter2d/MesoCrystal.py
@@ -61,4 +61,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/ParticlesCrossingInterface.py b/Examples/scatter2d/ParticlesCrossingInterface.py
index a3be3b18f52..dedbeb3a650 100644
--- a/Examples/scatter2d/ParticlesCrossingInterface.py
+++ b/Examples/scatter2d/ParticlesCrossingInterface.py
@@ -75,4 +75,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/RotatedPyramids.py b/Examples/scatter2d/RotatedPyramids.py
index a4e73820ca7..100965a8a4e 100644
--- a/Examples/scatter2d/RotatedPyramids.py
+++ b/Examples/scatter2d/RotatedPyramids.py
@@ -51,4 +51,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/SpheresAtHexLattice.py b/Examples/scatter2d/SpheresAtHexLattice.py
index 961213c595b..d2bffe000f4 100644
--- a/Examples/scatter2d/SpheresAtHexLattice.py
+++ b/Examples/scatter2d/SpheresAtHexLattice.py
@@ -59,4 +59,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/TriangularRipple.py b/Examples/scatter2d/TriangularRipple.py
index 628e36846f1..6074955fca6 100644
--- a/Examples/scatter2d/TriangularRipple.py
+++ b/Examples/scatter2d/TriangularRipple.py
@@ -60,4 +60,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Examples/scatter2d/TwoTypesOfCylindersWithSizeDistribution.py b/Examples/scatter2d/TwoTypesOfCylindersWithSizeDistribution.py
index 7f4450d0fd4..de8116d8237 100644
--- a/Examples/scatter2d/TwoTypesOfCylindersWithSizeDistribution.py
+++ b/Examples/scatter2d/TwoTypesOfCylindersWithSizeDistribution.py
@@ -62,4 +62,5 @@ def get_simulation(sample):
 
 
 if __name__ == '__main__':
-    ba.run_and_plot(get_simulation(get_sample()))
+    import ba_plot
+    ba_plot.run_and_plot(get_simulation(get_sample()))
diff --git a/Tests/Functional/PyEmbedded/Tests.cpp b/Tests/Functional/PyEmbedded/Tests.cpp
index d54021a9b14..27c9e31d4e7 100644
--- a/Tests/Functional/PyEmbedded/Tests.cpp
+++ b/Tests/Functional/PyEmbedded/Tests.cpp
@@ -372,7 +372,9 @@ TEST_F(PyEmbedded, ExportToPythonAndBack)
     std::unique_ptr<MultiLayer> sample(factory.createSampleByName("CylindersAndPrismsBuilder"));
 
     const std::string code = ExportToPython::sampleCode(*sample);
-    const std::string snippet = pyfmt::preambled(code);
+    const std::string snippet = "import bornagain as ba\n"
+        + pyfmt::printImportedSymbols(code)
+        + "\n\n" + code;
 
     const auto multilayer =
         PyImport::createFromPython(snippet, "get_sample", BABuild::buildLibDir());
diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i
index 479b47904f7..2a2f3c967da 100644
--- a/auto/Wrap/doxygenCore.i
+++ b/auto/Wrap/doxygenCore.i
@@ -2406,7 +2406,7 @@ Returns default metric name.
 
 
 // File: namespacepyfmt.xml
-%feature("docstring")  pyfmt::preambled "std::string pyfmt::preambled(const std::string &code)
+%feature("docstring")  pyfmt::printImportedSymbols "std::string pyfmt::printImportedSymbols(const std::string &code)
 ";
 
 %feature("docstring")  pyfmt::printBool "std::string pyfmt::printBool(double value)
-- 
GitLab