From 322f1b2f5871d2d14b606a2eddd090194e577967 Mon Sep 17 00:00:00 2001 From: Connor Pigg Date: Mon, 24 Jun 2019 12:14:49 -0400 Subject: [PATCH] Test changing fitting method. This closes #102 by providing tests for using it. --- tests/test_bayes.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/test_bayes.py b/tests/test_bayes.py index d28486b..d2cb8ae 100644 --- a/tests/test_bayes.py +++ b/tests/test_bayes.py @@ -1,6 +1,7 @@ import numpy as np from numpy.testing import assert_array_almost_equal, assert_array_equal import pytest +import warnings from idpflex import bayes from idpflex import properties @@ -60,6 +61,34 @@ def test_fit_at_depth_multi(sans_fit): assert_array_equal(fit2.weights, exp_pd.feature_weights) +def test_global_minimization(sans_fit): + tree = sans_fit['tree'] + exp = sans_fit['experiment_property'] + exp_pd = properties.PropertyDict([exp]) + mod = bayes.create_at_depth_multiproperty(tree, sans_fit['depth']) + for param in mod.params.values(): + param.set(min=0, max=10) + fit = bayes.fit_multiproperty_model(mod, exp_pd, + weights=exp_pd.feature_weights) + fit2 = bayes.fit_multiproperty_model(mod, exp_pd, + weights=exp_pd.feature_weights, + method='differential_evolution') + try: + # Expect less than 20% difference between these + diff = abs(1 - fit.redchi/fit2.redchi) + assert diff <= 0.20 + except AssertionError: + warnings.warn('Global minimization did not get within 20% of reference' + f' fit. Relative difference {diff:.3}.', + RuntimeWarning) + # Try refitting and looser tolerance + fit3 = bayes.fit_multiproperty_model(mod, exp_pd, + weights=exp_pd.feature_weights, + method='differential_evolution') + assert abs(1 - fit.redchi/fit2.redchi) <= 0.50\ + or abs(1 - fit3.redchi/fit2.redchi) <= 0.50 + + def test_fit_to_depth_multi(sans_fit): tree = sans_fit['tree'] exp = sans_fit['experiment_property']