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