diff --git a/Tests/Functional/Python/PyFit/CMakeLists.txt b/Tests/Functional/Python/PyFit/CMakeLists.txt index c2e919e4fc216aef368eb91b3ef74ed0dad3ea65..2e947e15d75374d9f7b3e23dd030ba89b377a735 100644 --- a/Tests/Functional/Python/PyFit/CMakeLists.txt +++ b/Tests/Functional/Python/PyFit/CMakeLists.txt @@ -14,7 +14,8 @@ endforeach() set(tests "testfit_UsingBuilder.py" "fitsuite_api.py" - "fit_parameters.py" + "minimizer_api.py" + "standalone_fits.py" # "testfit_GSLLMA.py" # "testfit_GSLMultiMin.py" # "testfit_GSLSimAn.py" diff --git a/Tests/Functional/Python/PyFit/fit_parameters.py b/Tests/Functional/Python/PyFit/minimizer_api.py similarity index 94% rename from Tests/Functional/Python/PyFit/fit_parameters.py rename to Tests/Functional/Python/PyFit/minimizer_api.py index 5a70514448b5660481a79d1e3f8f178d1c1883be..a474c767d4697d3133f937d4a90bb68b21e75ed4 100644 --- a/Tests/Functional/Python/PyFit/fit_parameters.py +++ b/Tests/Functional/Python/PyFit/minimizer_api.py @@ -1,5 +1,5 @@ """ -Testing python specific FitSuite API. +Testing python specific API for Minimizer related classes. """ import sys import os @@ -20,7 +20,7 @@ class TestMinimizerHelper: return 42.0 -class FitParametersAPITest(unittest.TestCase): +class MinimizerAPITest(unittest.TestCase): def test_ParametersSetIterator(self): """ diff --git a/Tests/Functional/Python/PyFit/standalone_fits.py b/Tests/Functional/Python/PyFit/standalone_fits.py new file mode 100644 index 0000000000000000000000000000000000000000..bbe063403b3650ba026e80c1453c093330e51ab6 --- /dev/null +++ b/Tests/Functional/Python/PyFit/standalone_fits.py @@ -0,0 +1,58 @@ +""" +Fitting scalar and residual based objective functions +""" +import sys +import os +import unittest + +sys.path.append("@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") +import bornagain as ba +import numpy as np + + +class Rosenbrock: + def __init__(self): + self.m_expected_minimum = 0.0 + self.m_expected_params = [1.0, 1.0] + pass + + def objective_function(self, params): + """ + Returns the value of Rosenbrock function + """ + x = params["x"].value() + y = params["y"].value() + tmp1 = y - x * x + tmp2 = 1 - x + return 100 * tmp1 * tmp1 + tmp2 * tmp2 + + +class StandaloneFitTest(unittest.TestCase): + + def test_RosenbrockFit(self): + """ + Testing fit of rosenbrock function + """ + pars = ba.Parameters() + pars.add(ba.Parameter("x", -1.2, ba.AttLimits.limited(-5.0, 5.0), 0.01)) + pars.add(ba.Parameter("y", 1.0, ba.AttLimits.limited(-5.0, 5.0), 0.01)) + + rosenbrock = Rosenbrock() + minimizer = ba.Minimizer() + result = minimizer.minimize(rosenbrock.objective_function, pars) + + print(result.toString()) + + # check found parameter values + np.testing.assert_almost_equal(result.parameters().values(), + rosenbrock.m_expected_params, 3) + + # check found minimum + np.testing.assert_almost_equal(result.minValue(), + rosenbrock.m_expected_minimum, 3) + + + + +if __name__ == '__main__': + unittest.main()