From 6e796da0ce12a7459e145d3b59d8fb8e75cbf1bd Mon Sep 17 00:00:00 2001 From: Hu Zhao <zhao@mbd.rwth-aachen.de> Date: Thu, 27 Oct 2022 23:51:10 +0200 Subject: [PATCH] test: add test for init error check of active learning --- tests/test_active_learning.py | 106 ++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/test_active_learning.py diff --git a/tests/test_active_learning.py b/tests/test_active_learning.py new file mode 100644 index 0000000..06d9fbb --- /dev/null +++ b/tests/test_active_learning.py @@ -0,0 +1,106 @@ +import pytest +import numpy as np +from psimpy.inference.active_learning import ActiveLearning +from psimpy.simulator.run_simulator import RunSimulator +from psimpy.simulator.mass_point_model import MassPointModel +from psimpy.sampler.latin import LHS +from psimpy.sampler.saltelli import Saltelli +from psimpy.emulator.robustgasp import ScalarGaSP, PPGaSP +from scipy.stats import uniform, norm +from scipy import optimize +from beartype.roar import BeartypeCallHintParamViolation + +@pytest.mark.parametrize( + "run_sim_obj, prior, likelihood, lhs_sampler, scalar_gasp, optimizer", + [ + (MassPointModel(), uniform.pdf, norm.pdf, LHS(1), ScalarGaSP(1), + optimize.brute), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + None, norm.pdf, LHS(1), ScalarGaSP(1), optimize.brute), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + uniform.pdf, None, LHS(1), ScalarGaSP(1), optimize.brute), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + uniform.pdf, norm.pdf, Saltelli(1), ScalarGaSP(1), optimize.brute), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + uniform.pdf, norm.pdf, LHS(1), PPGaSP(1), optimize.brute), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + uniform.pdf, norm.pdf, LHS(1), ScalarGaSP(1), None) + ] +) +def test_ActiveLearning_init_TypeError(run_sim_obj, prior, likelihood, + lhs_sampler, scalar_gasp, optimizer): + ndim = 1 + bounds = np.array([[0,1]]) + data = np.array([1,2,3]) + n0 = 20 + nt = 100 + with pytest.raises(BeartypeCallHintParamViolation): + _ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood, + n0, nt, lhs_sampler, scalar_gasp, optimizer=optimizer) + + +@pytest.mark.parametrize( + "run_sim_obj, lhs_sampler, scalar_gasp", + [ + (RunSimulator(MassPointModel.run, + ['coulomb_friction', 'turbulent_friction']), + LHS(1), ScalarGaSP(1) + ), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + LHS(2), ScalarGaSP(1)), + (RunSimulator(MassPointModel.run, ['coulomb_friction']), + LHS(1), ScalarGaSP(3)) + ] +) +def test_ActiveLearning_init_RuntimeError(run_sim_obj, lhs_sampler, + scalar_gasp): + ndim = 1 + bounds = np.array([[0,1]]) + data = np.array([1,2,3]) + prior = uniform.pdf + likelihood = norm.pdf + n0 = 20 + nt = 100 + with pytest.raises(RuntimeError): + _ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood, + n0, nt, lhs_sampler, scalar_gasp) + + +@pytest.mark.parametrize( + "scalar_gasp_mean, indicator", + [ + ('cubic', 'entropy'), + ('linear', 'divergence') + ] +) +def test_ActiveLearning_init_NotImplementedError(scalar_gasp_mean, indicator): + ndim = 1 + bounds = np.array([[0,1]]) + data = np.array([1,2,3]) + run_sim_obj = RunSimulator(MassPointModel.run, ['coulomb_friction']) + lhs_sampler = LHS(1) + scalar_gasp = ScalarGaSP(1) + prior = uniform.pdf + likelihood = norm.pdf + n0 = 20 + nt = 100 + with pytest.raises(NotImplementedError): + _ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood, + n0, nt, lhs_sampler, scalar_gasp, scalar_gasp_mean=scalar_gasp_mean, + indicator=indicator) + +def test_ActiveLearning_init_ValueError(): + ndim = 1 + bounds = np.array([[0,1]]) + data = np.array([1,2,3]) + run_sim_obj = RunSimulator(MassPointModel.run, ['coulomb_friction']) + lhs_sampler = LHS(1) + scalar_gasp = ScalarGaSP(1) + prior = uniform.pdf + likelihood = norm.pdf + n0 = 20 + nt = 100 + kwgs_optimizer = {"NS":50} + with pytest.raises(ValueError): + _ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood, + n0, nt, lhs_sampler, scalar_gasp, kwgs_optimizer=kwgs_optimizer) -- GitLab