Select Git revision
test_active_learning.py 3.66 KiB
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])
with pytest.raises(BeartypeCallHintParamViolation):
_ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood,
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
with pytest.raises(RuntimeError):
_ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood,
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
with pytest.raises(NotImplementedError):
_ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood,
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
kwgs_optimizer = {"NS":50}
with pytest.raises(ValueError):
_ = ActiveLearning(ndim, bounds, data, run_sim_obj, prior, likelihood,
lhs_sampler, scalar_gasp, kwgs_optimizer=kwgs_optimizer)