def test_eval_op(): """Pick a "complicated" combination just to check.""" x = np.asarray([2, 4, 5, 6, 7]) m1 = basic.Const1D() m1.c0 = 10 m2 = basic.Polynom1D() m2.c0 = 5 m2.c1 = 1 m3 = basic.Box1D() m3.xlow = 5 m3.xhi = 6 mdl = m1 + 2 * (m2 + (-m3)) assert mdl.ndim == 1 expected_m1 = 10 * np.ones(5) expected_m2 = 5 + np.asarray(x) expected_m3 = np.asarray([0, 0, 1, 1, 0]) expected = expected_m1 + 2 * (expected_m2 - expected_m3) got = mdl(x) assert got == pytest.approx(expected)
def test_combine_models1d(): """Check we can combine 1D models""" mdls = [ basic.Box1D(), basic.Const1D(), basic.Gauss1D(), basic.NormGauss1D() ] mdl = reduce(operator.add, mdls) assert isinstance(mdl, BinaryOpModel) # now multiply by a constant # mdl *= 2 assert isinstance(mdl, BinaryOpModel) assert mdl.ndim == 1 # Check we can call it as a 1D model; there is minimal checks # of the response. # bins = np.arange(2, 10, 2) y1 = mdl(bins) y2 = mdl(bins[:-1], bins[1:]) assert y1.shape == (4, ) assert y2.shape == (3, )
def test_source_component_arbitrary_grid_int(session): ui = session() x = numpy.array([1, 2, 3]), numpy.array([2, 3, 4]) y = [1.5, 2.5, 3.5] re_x = numpy.array([10, 20, 30]), numpy.array([20, 30, 40]) ui.load_arrays(1, x[0], x[1], y, Data1DInt) model = basic.Const1D('c') model.c0 = 10 regrid_model = model.regrid(*re_x) ui.plot_source_component(regrid_model) # should this use ui.get_source_component_plot()? assert ui._compsrchistplot.xlo == pytest.approx(x[0]) assert ui._compsrchistplot.xhi == pytest.approx(x[1]) assert ui._compsrchistplot.y == pytest.approx([0.0, 0.0, 0.0])
def test_plot_model_arbitrary_grid_integrated(session): ui = session() model = basic.Const1D('c') model.c0 = 10 def tst(x, y, re_x, yy): ui.load_arrays(1, x[0], x[1], y, Data1DInt) regrid_model = model.regrid(*re_x) ui.set_model(regrid_model) ui.plot_model() # should this use ui.get_model_plot()? assert ui._modelhistplot.xlo == pytest.approx(x[0]) assert ui._modelhistplot.xhi == pytest.approx(x[1]) assert ui._modelhistplot.y == pytest.approx(yy) tmp = numpy.arange(1, 5, 1) x = tmp[:-1], tmp[1:] y = x[0] tmp = numpy.arange(10, 50, 10) re_x = tmp[:-1], tmp[1:] tst(x, y, re_x, [0, 0, 0]) tmp = numpy.arange(1, 20, 1) x = tmp[:-1], tmp[1:] y = x[0] tmp = numpy.arange(1, 20, 0.5) re_x = tmp[:-1], tmp[1:] tst(x, y, re_x, len(y) * [10]) tmp = numpy.arange(1, 20, 1) x = tmp[:-1], tmp[1:] y = x[0] tmp = numpy.arange(10, 20, 0.5) re_x = tmp[:-1], tmp[1:] n = int(len(y) / 2) yy = numpy.append(n * [0.], n * [10.]) tst(x, y, re_x, yy)