def test_saveload_modelresult_roundtrip(method): """Test for modelresult.loads()/dumps() and repeating that""" def mfunc(x, a, b): return a * (x-b) model = Model(mfunc) params = model.make_params(a=0.1, b=3.0) params['a'].set(min=.01, max=1, brute_step=0.01) params['b'].set(min=.01, max=3.1, brute_step=0.01) xx = np.linspace(-5, 5, 201) yy = 0.5 * (xx - 0.22) + np.random.normal(scale=0.01, size=len(xx)) result1 = model.fit(yy, params=params, x=xx, method=method) result2 = ModelResult(model, Parameters()) result2.loads(result1.dumps(), funcdefs={'mfunc': mfunc}) result3 = ModelResult(model, Parameters()) result3.loads(result2.dumps(), funcdefs={'mfunc': mfunc}) assert result3 is not None assert_param_between(result2.params['a'], 0.48, 0.52) assert_param_between(result2.params['b'], 0.20, 0.25) assert_param_between(result3.params['a'], 0.48, 0.52) assert_param_between(result3.params['b'], 0.20, 0.25)
def test_saveload_modelresult_roundtrip(): """Test for modelresult.loads()/dumps() and repeating that""" def mfunc(x, a, b): return a * (x-b) model = Model(mfunc) params = model.make_params(a=0.0, b=3.0) xx = np.linspace(-5, 5, 201) yy = 0.5 * (xx - 0.22) + np.random.normal(scale=0.01, size=len(xx)) result1 = model.fit(yy, params, x=xx) result2 = ModelResult(model, Parameters()) result2.loads(result1.dumps(), funcdefs={'mfunc': mfunc}) result3 = ModelResult(model, Parameters()) result3.loads(result2.dumps(), funcdefs={'mfunc': mfunc}) assert result3 is not None assert_param_between(result2.params['a'], 0.48, 0.52) assert_param_between(result2.params['b'], 0.20, 0.25) assert_param_between(result3.params['a'], 0.48, 0.52) assert_param_between(result3.params['b'], 0.20, 0.25)
def check_fit_results(result): """Check the result of optimization.""" assert result.nvarys == 8 assert_between(result.chisqr, 1000, 1500) assert_between(result.aic, 400, 450) pars = result.params assert_param_between(pars['exp_decay'], 90, 92) assert_param_between(pars['exp_amplitude'], 98, 101) assert_param_between(pars['g1_sigma'], 16, 17) assert_param_between(pars['g1_center'], 106, 109) assert_param_between(pars['g1_amplitude'], 4100, 4500) assert_param_between(pars['g1_fwhm'], 38, 42) assert_param_between(pars['g1_height'], 100, 103) assert_param_between(pars['g2_sigma'], 10, 15) assert_param_between(pars['g2_center'], 150, 160) assert_param_between(pars['g2_amplitude'], 2100, 2900) assert_param_between(pars['g2_fwhm'], 30, 34) assert_param_between(pars['g2_height'], 70, 75)
def test_saveload_usersyms(): """Test save/load of modelresult with non-trivial user symbols, this example uses a VoigtModel, wheree `wofz()` is used in a constraint expression""" x = np.linspace(0, 20, 501) y = gaussian(x, 1.1, 8.5, 2) + lorentzian(x, 1.7, 8.5, 1.5) np.random.seed(20) y = y + np.random.normal(size=len(x), scale=0.025) model = VoigtModel() pars = model.guess(y, x=x) result = model.fit(y, pars, x=x) savefile = 'tmpvoigt_modelresult.sav' save_modelresult(result, savefile) assert_param_between(result.params['sigma'], 0.7, 2.1) assert_param_between(result.params['center'], 8.4, 8.6) assert_param_between(result.params['height'], 0.2, 1.0) time.sleep(0.25) result2 = load_modelresult(savefile) assert_param_between(result2.params['sigma'], 0.7, 2.1) assert_param_between(result2.params['center'], 8.4, 8.6) assert_param_between(result2.params['height'], 0.2, 1.0)