def test_psf1d_kernel_data(caplog): """Access the kernel data: subkernel=True""" k = np.asarray([2, 5, 3]) x = 5 + np.arange(k.size) d = Data1D('my-kernel', x, k) m = PSFModel(kernel=d) dfold = Data1D('fold', np.arange(10), np.zeros(10)) with caplog.at_level(logging.INFO, logger='sherpa'): ans = m.get_kernel(dfold) assert len(caplog.records) == 1 r = caplog.record_tuples[0] assert r[0] == 'sherpa.instrument' assert r[1] == logging.INFO assert r[2] == "PSF frac: 1.0" assert isinstance(ans, Data1D) assert ans.name == 'kernel' # integers, so treat as exact assert (ans.x == np.arange(5, 8)).all() assert ans.y == pytest.approx(k / k.sum()) assert ans.staterror is None assert ans.syserror is None
def test_psf1d_kernel_model(caplog): """Access the kernel data: subkernel=True""" k = Box1D() k.xlow = 1 k.xhi = 3 m = PSFModel(kernel=k) dfold = Data1D('fold', np.arange(10), np.zeros(10)) with caplog.at_level(logging.INFO, logger='sherpa'): ans = m.get_kernel(dfold) assert len(caplog.records) == 1 r = caplog.record_tuples[0] assert r[0] == 'sherpa.instrument' assert r[1] == logging.INFO assert r[2] == "PSF frac: 1.0" assert isinstance(ans, Data1D) assert ans.name == 'kernel' # integers, so treat as exact assert (ans.x == np.arange(10)).all() # box1D between 1 and 3 inclusive y = np.asarray([0, 1, 1, 1, 0, 0, 0, 0, 0, 0]) assert ans.y == pytest.approx(y / y.sum()) assert ans.staterror is None assert ans.syserror is None
def test_psf2d_kernel_model(caplog): """Access the kernel data: no subkernel""" k = Box2D() k.xlow = -1 k.xhi = 1 k.ylow = 10 k.yhi = 12 m = PSFModel('x', kernel=k) d1, d0 = np.mgrid[5:15, -5:4] ds = d0.shape d0 = d0.flatten() d1 = d1.flatten() z = np.zeros(ds).flatten() dfold = Data2D('fold', d0, d1, z, shape=ds) with caplog.at_level(logging.INFO, logger='sherpa'): ans = m.get_kernel(dfold) assert len(caplog.records) == 1 r = caplog.record_tuples[0] assert r[0] == 'sherpa.instrument' assert r[1] == logging.INFO assert r[2] == "PSF frac: 1.0" assert isinstance(ans, Data2D) assert ans.name == 'kernel' assert (ans.shape == [10, 9]).all() # integers, so treat as exact assert (ans.x0 == d0).all() assert (ans.x1 == d1).all() # This is the old check, converted to what I assume is meant to be # the correct form - see #1428 - but ans.y is all zeros except for # a single 1 whilst k is not (it has 9 True values and the rest # False). I do not have time to identify the truth here. # k = (ans.x0 >= -1) & (ans.x0 <= 1) & (ans.x1 >= 10) & (ans.x1 <= 12) assert ans.y == pytest.approx(k / k.sum()) assert ans.staterror is None assert ans.syserror is None
def test_psf2d_kernel_data(caplog): """Access the kernel data: no subkernel""" x1, x0 = np.mgrid[-5:-3, 10:13] s = x0.shape k = np.ones(s) k[1, 1] = 2 x0 = x1.flatten() x1 = x1.flatten() k = k.flatten() d = Data2D('my-kernel', x0, x1, k, shape=s) m = PSFModel('x', kernel=d) d1, d0 = np.mgrid[5:15, -5:5] ds = d0.shape z = np.zeros(ds) dfold = Data2D('fold', d0.flatten(), d1.flatten(), z.flatten(), shape=ds) with caplog.at_level(logging.INFO, logger='sherpa'): ans = m.get_kernel(dfold) assert len(caplog.records) == 1 r = caplog.record_tuples[0] assert r[0] == 'sherpa.instrument' assert r[1] == logging.INFO assert r[2] == "PSF frac: 1.0" assert isinstance(ans, Data2D) assert ans.name == 'kernel' assert (ans.shape == [2, 3]).all() # integers, so treat as exact assert (ans.x0 == x0).all() assert (ans.x1 == x1).all() assert ans.y == pytest.approx(k / k.sum()) assert ans.staterror is None assert ans.syserror is None
def test_psf2d_kernel_model(caplog): """Access the kernel data: no subkernel""" k = Box2D() k.xlow = -1 k.xhi = 1 k.ylow = 10 k.yhi = 12 m = PSFModel('x', kernel=k) d1, d0 = np.mgrid[5:15, -5:4] ds = d0.shape d0 = d0.flatten() d1 = d1.flatten() z = np.zeros(ds).flatten() dfold = Data2D('fold', d0, d1, z, shape=ds) with caplog.at_level(logging.INFO, logger='sherpa'): ans = m.get_kernel(dfold) assert len(caplog.records) == 1 r = caplog.record_tuples[0] assert r[0] == 'sherpa.instrument' assert r[1] == logging.INFO assert r[2] == "PSF frac: 1.0" assert isinstance(ans, Data2D) assert ans.name == 'kernel' assert (ans.shape == [10, 9]).all() # integers, so treat as exact assert (ans.x0 == d0).all() assert (ans.x1 == d1).all() k = (ans.x0 >= -1) & (ans.x0 <= 1) & (ans.x1 >= 10) & (ans.x1 <= 12) assert pytest.approx(k / k.sum(), ans.y) assert ans.staterror is None assert ans.syserror is None