From 5ac2b4690adee25eb568d96792b516b78f440c11 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Tue, 24 Aug 2021 15:25:57 +0200 Subject: [PATCH] + RealLimits::check --- Fit/Param/RealLimits.cpp | 10 ++++++ Fit/Param/RealLimits.h | 2 ++ auto/Wrap/doxygenFit.i | 3 ++ auto/Wrap/libBornAgainFit.py | 8 +++++ auto/Wrap/libBornAgainFit_wrap.cpp | 49 ++++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+) diff --git a/Fit/Param/RealLimits.cpp b/Fit/Param/RealLimits.cpp index 99010ee3880..8fb19309119 100644 --- a/Fit/Param/RealLimits.cpp +++ b/Fit/Param/RealLimits.cpp @@ -158,6 +158,16 @@ std::string RealLimits::toString() const return result.str(); } +void RealLimits::check(const std::string& name, const double value) +{ + if (!isInRange(value)) { + std::ostringstream message; + message << "Parameter " << name << ": value " << value + << " is out of bounds [" << *this << "]\n"; + throw std::runtime_error(message.str()); + } +} + bool RealLimits::operator==(const RealLimits& other) const { return (m_has_lower_limit == other.m_has_lower_limit) diff --git a/Fit/Param/RealLimits.h b/Fit/Param/RealLimits.h index 3734f14903e..a30ae9aeee1 100644 --- a/Fit/Param/RealLimits.h +++ b/Fit/Param/RealLimits.h @@ -81,6 +81,8 @@ public: std::string toString() const; + void check(const std::string& name, const double value); + //! Prints class friend std::ostream& operator<<(std::ostream& ostr, const RealLimits& m) { diff --git a/auto/Wrap/doxygenFit.i b/auto/Wrap/doxygenFit.i index c5a3d0055d9..aa28b58963e 100644 --- a/auto/Wrap/doxygenFit.i +++ b/auto/Wrap/doxygenFit.i @@ -11326,6 +11326,9 @@ returns true if proposed value is in limits range %feature("docstring") RealLimits::toString "std::string RealLimits::toString() const "; +%feature("docstring") RealLimits::check "void RealLimits::check(const std::string &name, const double value) +"; + %feature("docstring") RealLimits::isLimitless "bool RealLimits::isLimitless() const "; diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py index d7b0b9649e2..33191aabc94 100644 --- a/auto/Wrap/libBornAgainFit.py +++ b/auto/Wrap/libBornAgainFit.py @@ -1857,6 +1857,14 @@ class RealLimits(object): """ return _libBornAgainFit.RealLimits_toString(self) + def check(self, name, value): + r""" + check(RealLimits self, std::string const & name, double const value) + void RealLimits::check(const std::string &name, const double value) + + """ + return _libBornAgainFit.RealLimits_check(self, name, value) + def __eq__(self, other): r"""__eq__(RealLimits self, RealLimits other) -> bool""" return _libBornAgainFit.RealLimits___eq__(self, other) diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp index 1a63f365542..6e6989d8dbf 100644 --- a/auto/Wrap/libBornAgainFit_wrap.cpp +++ b/auto/Wrap/libBornAgainFit_wrap.cpp @@ -24201,6 +24201,50 @@ fail: } +SWIGINTERN PyObject *_wrap_RealLimits_check(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + RealLimits *arg1 = (RealLimits *) 0 ; + std::string *arg2 = 0 ; + double arg3 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + double val3 ; + int ecode3 = 0 ; + PyObject *swig_obj[3] ; + + if (!SWIG_Python_UnpackTuple(args, "RealLimits_check", 3, 3, swig_obj)) SWIG_fail; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_RealLimits, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "RealLimits_check" "', argument " "1"" of type '" "RealLimits *""'"); + } + arg1 = reinterpret_cast< RealLimits * >(argp1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(swig_obj[1], &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "RealLimits_check" "', argument " "2"" of type '" "std::string const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "RealLimits_check" "', argument " "2"" of type '" "std::string const &""'"); + } + arg2 = ptr; + } + ecode3 = SWIG_AsVal_double(swig_obj[2], &val3); + if (!SWIG_IsOK(ecode3)) { + SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "RealLimits_check" "', argument " "3"" of type '" "double""'"); + } + arg3 = static_cast< double >(val3); + (arg1)->check((std::string const &)*arg2,arg3); + resultobj = SWIG_Py_Void(); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + SWIGINTERN PyObject *_wrap_RealLimits___eq__(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; RealLimits *arg1 = (RealLimits *) 0 ; @@ -28416,6 +28460,11 @@ static PyMethodDef SwigMethods[] = { "std::string RealLimits::toString() const\n" "\n" ""}, + { "RealLimits_check", _wrap_RealLimits_check, METH_VARARGS, "\n" + "RealLimits_check(RealLimits self, std::string const & name, double const value)\n" + "void RealLimits::check(const std::string &name, const double value)\n" + "\n" + ""}, { "RealLimits___eq__", _wrap_RealLimits___eq__, METH_VARARGS, "RealLimits___eq__(RealLimits self, RealLimits other) -> bool"}, { "RealLimits___ne__", _wrap_RealLimits___ne__, METH_VARARGS, "RealLimits___ne__(RealLimits self, RealLimits other) -> bool"}, { "RealLimits_isLimitless", _wrap_RealLimits_isLimitless, METH_O, "\n" -- GitLab