def test_opts(pars): ds = MyDataset(pars) factors, info, minuit = optimize_iminuit( function=ds.fcn, parameters=pars, migrad_opts={"ncall": 20}, tol=1.0, strategy=2 ) assert info["nfev"] == 29 assert minuit.tol == 1.0 assert minuit.strategy == 2
def test_migrad_opts(pars): ds = MyDataset(pars) kwargs = {} kwargs["migrad_opts"] = {"ncall": 20} factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars, **kwargs) assert info["nfev"] == 20
def test_iminuit_stepsize(): ds = MyDataset() pars = ds.models.parameters factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert info["success"] assert_allclose(ds.fcn(), 0, atol=1e-5) assert_allclose(pars["x"].value, 2, rtol=1e-3) assert_allclose(pars["y"].value, 3e5, rtol=1e-3) assert_allclose(pars["z"].value, 4e-5, rtol=2e-2)
def test_iminuit_frozen(pars): ds = MyDataset(pars) pars["y"].frozen = True factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert info["success"] assert_allclose(pars["x"].value, 2, rtol=1e-4) assert_allclose(pars["y"].value, 3.1e5) assert_allclose(pars["z"].value, 4.0e-5, rtol=1e-4) assert_allclose(ds.fcn(), 0.111112, rtol=1e-5)
def test_iminuit_stepsize(pars): ds = MyDataset(pars) pars.covariance = np.diag([0.2, 3e4, 4e-6]) ** 2 factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert info["success"] assert_allclose(ds.fcn(), 0, atol=1e-5) assert_allclose(pars["x"].value, 2, rtol=1e-3) assert_allclose(pars["y"].value, 3e5, rtol=1e-3) assert_allclose(pars["z"].value, 4e-5, rtol=2e-2)
def test_iminuit_confidence(pars): ds = MyDataset(pars) factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert_allclose(ds.fcn(), 0, atol=1e-5) par = pars["x"] par.min, par.max = 0, 10 result = confidence_iminuit(minuit=minuit, parameters=pars, parameter=par, sigma=1) assert result["success"] assert_allclose(result["errp"], 0.2) assert_allclose(result["errn"], 0.2)
def test_iminuit_basic(pars): ds = MyDataset(pars) factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert info["success"] assert_allclose(ds.fcn(), 0, atol=1e-5) # Check the result in parameters is OK assert_allclose(pars["x"].value, 2, rtol=1e-3) assert_allclose(pars["y"].value, 3e5, rtol=1e-3) # Precision of estimate on "z" is very poor (0.040488). Why is it so bad? assert_allclose(pars["z"].value, 4e-5, rtol=2e-2) # Check that minuit sees the parameter factors correctly assert_allclose(factors, [2, 3, 4], rtol=1e-3) assert_allclose(minuit.values["par_000_x"], 2, rtol=1e-3) assert_allclose(minuit.values["par_001_y"], 3, rtol=1e-3) assert_allclose(minuit.values["par_002_z"], 4, rtol=1e-3)
def test_iminuit_limits(pars): ds = MyDataset(pars) pars["y"].min = 301000 factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert info["success"] # Check the result in parameters is OK assert_allclose(pars["x"].value, 2, rtol=1e-2) assert_allclose(pars["y"].value, 301000, rtol=1e-3) # Check that minuit sees the limit factors correctly states = minuit.get_param_states() assert not states[0]["has_limits"] y = states[1] assert y["has_limits"] assert_allclose(y["lower_limit"], 3.01)
def test_iminuit_limits(): ds = MyDataset() pars = ds.models.parameters pars["y"].min = 301000 factors, info, minuit = optimize_iminuit(function=ds.fcn, parameters=pars) assert info["success"] # Check the result in parameters is OK assert_allclose(pars["x"].value, 2, rtol=1e-2) assert_allclose(pars["y"].value, 301000, rtol=1e-3) # Check that minuit sees the limit factors correctly params = minuit.init_params assert not params["x"].has_limits assert params["par_001_y"].has_limits assert_allclose(params["par_001_y"].lower_limit, 3.01) assert params["par_001_y"].upper_limit is None