From 6fc2de2e48392c461975f0c45272ad4b901b2354 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Sat, 8 Aug 2020 22:26:26 +0200
Subject: [PATCH] mv printRealLimit* to pyfmt

---
 Core/Beam/FootprintGauss.cpp                  |  2 +-
 Core/Export/SimulationToPython.cpp            |  2 +-
 Core/Parametrization/RangedDistributions.cpp  |  3 +-
 Core/PyIO/PythonFormatting.cpp                | 50 +----------------
 Core/PyIO/PythonFormatting.h                  |  5 --
 Core/Tools/PyFmt.cpp                          | 56 +++++++++++++++++--
 Core/Tools/PyFmt.h                            | 10 +++-
 .../ExportToPython/PythonFormattingTest.cpp   | 26 ++++-----
 8 files changed, 77 insertions(+), 77 deletions(-)

diff --git a/Core/Beam/FootprintGauss.cpp b/Core/Beam/FootprintGauss.cpp
index 2f91175b13f..dd6a7a23ad7 100644
--- a/Core/Beam/FootprintGauss.cpp
+++ b/Core/Beam/FootprintGauss.cpp
@@ -14,8 +14,8 @@
 
 #include "Core/Beam/FootprintGauss.h"
 #include "Core/Basics/MathConstants.h"
-#include "Core/Tools/PyFmt.h"
 #include "Core/Tools/MathFunctions.h"
+#include "Core/Tools/PyFmt.h"
 
 FootprintGauss::FootprintGauss(double width_ratio) : IFootprintFactor(width_ratio)
 {
diff --git a/Core/Export/SimulationToPython.cpp b/Core/Export/SimulationToPython.cpp
index 25ee7fc4f4c..1c1e7e031da 100644
--- a/Core/Export/SimulationToPython.cpp
+++ b/Core/Export/SimulationToPython.cpp
@@ -354,7 +354,7 @@ std::string SimulationToPython::defineParameterDistributions(const Simulation* s
         result << pyfmt::indent() << "simulation.addParameterDistribution(\"" << main_par_name
                << "\", " << s_distr << ", " << nbr_samples << ", "
                << pyfmt::printDouble(sigma_factor)
-               << pyfmt2::printRealLimitsArg(distributions[i].getLimits(), mainParUnits) << ")\n";
+               << pyfmt::printRealLimitsArg(distributions[i].getLimits(), mainParUnits) << ")\n";
     }
     return result.str();
 }
diff --git a/Core/Parametrization/RangedDistributions.cpp b/Core/Parametrization/RangedDistributions.cpp
index 6cadc4bf82b..70375576939 100644
--- a/Core/Parametrization/RangedDistributions.cpp
+++ b/Core/Parametrization/RangedDistributions.cpp
@@ -15,7 +15,6 @@
 #include "Core/Parametrization/RangedDistributions.h"
 #include "Core/Parametrization/Distributions.h"
 #include "Core/Parametrization/ParameterSample.h"
-#include "Core/PyIO/PythonFormatting.h"
 #include "Core/Tools/PyFmt.h"
 #include <limits>
 
@@ -92,7 +91,7 @@ std::string RangedDistribution::print() const
     result << pyfmt::indent() << "distribution = " << name();
     result << "(" << m_n_samples << ", " << pyfmt::printDouble(m_sigma_factor);
     if (!m_limits.isLimitless())
-        result << pyfmt2::printRealLimitsArg(m_limits);
+        result << pyfmt::printRealLimitsArg(m_limits);
     result << ")";
     return result.str();
 }
diff --git a/Core/PyIO/PythonFormatting.cpp b/Core/PyIO/PythonFormatting.cpp
index cfa64321322..80ccff58c8b 100644
--- a/Core/PyIO/PythonFormatting.cpp
+++ b/Core/PyIO/PythonFormatting.cpp
@@ -126,54 +126,6 @@ std::string printDistribution(const IDistribution1D& par_distr, const std::strin
     return result.str();
 }
 
-std::string printRealLimits(const RealLimits& limits, const std::string& units)
-{
-    std::ostringstream result;
-
-    if (limits.isLimitless()) {
-        result << "RealLimits()";
-    }
-
-    else if (limits.isPositive()) {
-        result << "RealLimits.positive()";
-    }
-
-    else if (limits.isNonnegative()) {
-        result << "RealLimits.nonnegative()";
-    }
-
-    else if (limits.isLowerLimited()) {
-        result << "RealLimits.lowerLimited(" << pyfmt::printValue(limits.lowerLimit(), units)
-               << ")";
-    }
-
-    else if (limits.isUpperLimited()) {
-        result << "RealLimits.upperLimited(" << pyfmt::printValue(limits.upperLimit(), units)
-               << ")";
-    }
-
-    else if (limits.isLimited()) {
-        result << "RealLimits.limited(" << pyfmt::printValue(limits.lowerLimit(), units) << ", "
-               << pyfmt::printValue(limits.upperLimit(), units) << ")";
-    }
-
-    return result.str();
-}
-
-//! Prints RealLimits in the form of argument (in the context of ParameterDistribution and
-//! similar). Default RealLimits will not be printed, any other will be printed as
-//! ", ba.RealLimits.limited(1*deg, 2*deg)"
-
-std::string printRealLimitsArg(const RealLimits& limits, const std::string& units)
-{
-    return limits.isLimitless() ? "" : ", ba." + printRealLimits(limits, units);
-}
-
-//! Prints ParameterDistribution.
-//! distVarName is a string representing IDistribution1D variable, e.g. "distr_1"
-//!
-//! ba.ParameterDistribution("/Particle/Height", distr_1, 10, 0.0, ba.RealLimits.limited(1*nm,2*nm))
-
 std::string printParameterDistribution(const ParameterDistribution& par_distr,
                                        const std::string& distVarName, const std::string& units)
 {
@@ -183,7 +135,7 @@ std::string printParameterDistribution(const ParameterDistribution& par_distr,
            << "\"" << par_distr.getMainParameterName() << "\""
            << ", " << distVarName << ", " << par_distr.getNbrSamples() << ", "
            << pyfmt::printDouble(par_distr.getSigmaFactor())
-           << printRealLimitsArg(par_distr.getLimits(), units) << ")";
+           << pyfmt::printRealLimitsArg(par_distr.getLimits(), units) << ")";
 
     return result.str();
 }
diff --git a/Core/PyIO/PythonFormatting.h b/Core/PyIO/PythonFormatting.h
index 616a0ecb713..8d73df183ad 100644
--- a/Core/PyIO/PythonFormatting.h
+++ b/Core/PyIO/PythonFormatting.h
@@ -24,7 +24,6 @@ class IParameterized;
 class IShape2D;
 class RealParameter;
 class ParameterDistribution;
-class RealLimits;
 class IAxis;
 
 //! Utility functions for writing Python code snippets.
@@ -42,10 +41,6 @@ BA_CORE_API_ std::string argumentList(const IParameterized* ip);
 BA_CORE_API_ std::string printDistribution(const IDistribution1D& par_distr,
                                            const std::string& units = "");
 
-BA_CORE_API_ std::string printRealLimits(const RealLimits& limits, const std::string& units = "");
-BA_CORE_API_ std::string printRealLimitsArg(const RealLimits& limits,
-                                            const std::string& units = "");
-
 BA_CORE_API_ std::string printParameterDistribution(const ParameterDistribution& par_distr,
                                                     const std::string& distVarName,
                                                     const std::string& units = "");
diff --git a/Core/Tools/PyFmt.cpp b/Core/Tools/PyFmt.cpp
index 44aadad3ac4..d88a74800cf 100644
--- a/Core/Tools/PyFmt.cpp
+++ b/Core/Tools/PyFmt.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Core/PyIO/PythonFormatting.cpp
+//! @file      Core/Tools/PyFmt.cpp
 //! @brief     Implements functions from namespace pyfmt.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -14,9 +14,10 @@
 
 #include "Core/Tools/PyFmt.h"
 #include "Core/Basics/MathConstants.h"
+#include "Core/Parametrization/Units.h" // printDegrees
 #include "Fit/TestEngine/Numeric.h"
+#include "Fit/Tools/RealLimits.h"
 #include "Fit/Tools/StringUtils.h"
-#include "Core/Parametrization/Units.h" // printDegrees
 #include <iomanip>
 
 namespace pyfmt
@@ -111,8 +112,7 @@ std::string printValue(double value, const std::string& units)
     else if (units == "")
         return printDouble(value);
     else
-        throw std::runtime_error("pyfmt::printValue() -> Error. Unknown units '" + units
-                                 + "'");
+        throw std::runtime_error("pyfmt::printValue() -> Error. Unknown units '" + units + "'");
 }
 
 std::string printString(const std::string& value)
@@ -122,6 +122,54 @@ std::string printString(const std::string& value)
     return result.str();
 }
 
+std::string printRealLimits(const RealLimits& limits, const std::string& units)
+{
+    std::ostringstream result;
+
+    if (limits.isLimitless()) {
+        result << "RealLimits()";
+    }
+
+    else if (limits.isPositive()) {
+        result << "RealLimits.positive()";
+    }
+
+    else if (limits.isNonnegative()) {
+        result << "RealLimits.nonnegative()";
+    }
+
+    else if (limits.isLowerLimited()) {
+        result << "RealLimits.lowerLimited(" << pyfmt::printValue(limits.lowerLimit(), units)
+               << ")";
+    }
+
+    else if (limits.isUpperLimited()) {
+        result << "RealLimits.upperLimited(" << pyfmt::printValue(limits.upperLimit(), units)
+               << ")";
+    }
+
+    else if (limits.isLimited()) {
+        result << "RealLimits.limited(" << pyfmt::printValue(limits.lowerLimit(), units) << ", "
+               << pyfmt::printValue(limits.upperLimit(), units) << ")";
+    }
+
+    return result.str();
+}
+
+//! Prints RealLimits in the form of argument (in the context of ParameterDistribution and
+//! similar). Default RealLimits will not be printed, any other will be printed as
+//! ", ba.RealLimits.limited(1*deg, 2*deg)"
+
+std::string printRealLimitsArg(const RealLimits& limits, const std::string& units)
+{
+    return limits.isLimitless() ? "" : ", ba." + printRealLimits(limits, units);
+}
+
+//! Prints ParameterDistribution.
+//! distVarName is a string representing IDistribution1D variable, e.g. "distr_1"
+//!
+//! ba.ParameterDistribution("/Particle/Height", distr_1, 10, 0.0, ba.RealLimits.limited(1*nm,2*nm))
+
 bool isSquare(double length1, double length2, double angle)
 {
     return length1 == length2 && Numeric::AreAlmostEqual(angle, M_PI_2);
diff --git a/Core/Tools/PyFmt.h b/Core/Tools/PyFmt.h
index 6b182881282..08ca16dc536 100644
--- a/Core/Tools/PyFmt.h
+++ b/Core/Tools/PyFmt.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Core/PyIO/PythonFormatting.h
+//! @file      Core/Tools/PyFmt.h
 //! @brief     Defines namespace pyfmt.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -15,10 +15,12 @@
 #ifndef BORNAGAIN_CORE_TOOLS_PYFMT_H
 #define BORNAGAIN_CORE_TOOLS_PYFMT_H
 
-#include "Wrap/WinDllMacros.h"
 #include "Core/Vector/Vectors3D.h"
+#include "Wrap/WinDllMacros.h"
 #include <string>
 
+class RealLimits;
+
 //! Utility functions for writing Python code snippets.
 
 namespace pyfmt
@@ -37,6 +39,10 @@ BA_CORE_API_ std::string printDegrees(double input);
 BA_CORE_API_ std::string printValue(double value, const std::string& units = "");
 BA_CORE_API_ std::string printString(const std::string& value);
 
+BA_CORE_API_ std::string printRealLimits(const RealLimits& limits, const std::string& units = "");
+BA_CORE_API_ std::string printRealLimitsArg(const RealLimits& limits,
+                                            const std::string& units = "");
+
 BA_CORE_API_ bool isSquare(double length1, double length2, double angle);
 BA_CORE_API_ bool isHexagonal(double length1, double length2, double angle);
 BA_CORE_API_ std::string printKvector(const kvector_t value);
diff --git a/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.cpp b/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.cpp
index 7430076ae52..10abb470fbe 100644
--- a/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.cpp
+++ b/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.cpp
@@ -21,38 +21,38 @@ TEST_F(PythonFormattingTest, ValueTimesUnits)
 
 TEST_F(PythonFormattingTest, RealLimits)
 {
-    EXPECT_EQ("RealLimits.positive()", pyfmt2::printRealLimits(RealLimits::positive()));
+    EXPECT_EQ("RealLimits.positive()", pyfmt::printRealLimits(RealLimits::positive()));
 
-    EXPECT_EQ("RealLimits.nonnegative()", pyfmt2::printRealLimits(RealLimits::nonnegative()));
+    EXPECT_EQ("RealLimits.nonnegative()", pyfmt::printRealLimits(RealLimits::nonnegative()));
 
     EXPECT_EQ("RealLimits.lowerLimited(1.0)",
-              pyfmt2::printRealLimits(RealLimits::lowerLimited(1.0)));
+              pyfmt::printRealLimits(RealLimits::lowerLimited(1.0)));
     EXPECT_EQ("RealLimits.lowerLimited(1.0*nm)",
-              pyfmt2::printRealLimits(RealLimits::lowerLimited(1.0), "nm"));
+              pyfmt::printRealLimits(RealLimits::lowerLimited(1.0), "nm"));
     EXPECT_EQ("RealLimits.lowerLimited(1.0*deg)",
-              pyfmt2::printRealLimits(RealLimits::lowerLimited(1.0 * Units::deg), "rad"));
+              pyfmt::printRealLimits(RealLimits::lowerLimited(1.0 * Units::deg), "rad"));
 
     EXPECT_EQ("RealLimits.upperLimited(1.0)",
-              pyfmt2::printRealLimits(RealLimits::upperLimited(1.0)));
+              pyfmt::printRealLimits(RealLimits::upperLimited(1.0)));
     EXPECT_EQ("RealLimits.upperLimited(1.0*nm)",
-              pyfmt2::printRealLimits(RealLimits::upperLimited(1.0), "nm"));
+              pyfmt::printRealLimits(RealLimits::upperLimited(1.0), "nm"));
     EXPECT_EQ("RealLimits.upperLimited(1.0*deg)",
-              pyfmt2::printRealLimits(RealLimits::upperLimited(1.0 * Units::deg), "rad"));
+              pyfmt::printRealLimits(RealLimits::upperLimited(1.0 * Units::deg), "rad"));
 
     EXPECT_EQ("RealLimits.limited(1.0, 2.0)",
-              pyfmt2::printRealLimits(RealLimits::limited(1.0, 2.0)));
+              pyfmt::printRealLimits(RealLimits::limited(1.0, 2.0)));
     EXPECT_EQ("RealLimits.limited(1.0*nm, 2.0*nm)",
-              pyfmt2::printRealLimits(RealLimits::limited(1.0, 2.0), "nm"));
+              pyfmt::printRealLimits(RealLimits::limited(1.0, 2.0), "nm"));
     EXPECT_EQ(
         "RealLimits.limited(1.0*deg, 2.0*deg)",
-        pyfmt2::printRealLimits(RealLimits::limited(1.0 * Units::deg, 2.0 * Units::deg), "rad"));
+        pyfmt::printRealLimits(RealLimits::limited(1.0 * Units::deg, 2.0 * Units::deg), "rad"));
 
     // testing printing of real limits in the context of ParameterDistribution and similar
     EXPECT_EQ(
         ", ba.RealLimits.limited(1.0*deg, 2.0*deg)",
-        pyfmt2::printRealLimitsArg(RealLimits::limited(1.0 * Units::deg, 2.0 * Units::deg), "rad"));
+        pyfmt::printRealLimitsArg(RealLimits::limited(1.0 * Units::deg, 2.0 * Units::deg), "rad"));
 
-    EXPECT_EQ("", pyfmt2::printRealLimitsArg(RealLimits::limitless()));
+    EXPECT_EQ("", pyfmt::printRealLimitsArg(RealLimits::limitless()));
 }
 
 TEST_F(PythonFormattingTest, printDistribution)
-- 
GitLab