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_combine_models_1d_2d(): """What happens when we combine 1D and 2D models?""" m1 = basic.Box1D() m2 = basic.Box2D() with pytest.raises(ModelErr) as exc: m1 + m2 assert str(exc.value) == 'Models do not match: 1D (box1d) and 2D (box2d)'