Exemple #1
0
def test_makecovblock_checks():
    a = np.random.randn(10, 10)
    b = np.copy(a)
    b[0, 0] = np.inf
    m = b.T @ b

    gp = lgp.GP(checksym=False)
    gp.addcov(a, 0)
    gp._checksym = True
    with pytest.raises(RuntimeError):
        gp.prior(raw=True)

    gp = lgp.GP(checkfinite=False)
    gp.addcov(m, 0)
    gp._checkfinite = True
    with pytest.raises(RuntimeError):
        gp.prior(raw=True)

    gp = lgp.GP(checksym=False, checkpos=False)
    gp.addcov(a, 0)
    gp.prior(raw=True)

    gp = lgp.GP(checkfinite=False, checkpos=False)
    gp.addcov(m, 0)
    gp.prior(raw=True)
Exemple #2
0
def test_incompatible_dtypes():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(0, 0)
    with pytest.raises(TypeError):
        gp.addx(np.zeros(1, 'd,d'), 1)

    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(np.zeros(1, 'd,d'), 0)
    # gp.addx(np.zeros(1, 'i,i'), 1) # succeeds only if numpy >= 1.23
    with pytest.raises(TypeError):
        gp.addx(np.zeros(1, 'd,d,d'), 2)
Exemple #3
0
def test_partial_derivative():
    gp = lgp.GP(lgp.ExpQuad())
    x = np.arange(20)
    y = np.zeros(len(x), 'f8,f8')
    y['f0'] = x
    gp.addx(y, 0, deriv='f0')
    cov1 = gp.prior(0, raw=True)

    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(x, 0, deriv=1)
    cov2 = gp.prior(0, raw=True)

    util.assert_equal(cov1, cov2)
Exemple #4
0
def test_none_key():
    gp = lgp.GP(lgp.ExpQuad())
    with pytest.raises(ValueError):
        gp.addx({None: 0})

    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(0, 0)
    with pytest.raises(ValueError):
        gp.addtransf({0: 1}, None)

    gp = lgp.GP(lgp.ExpQuad())
    with pytest.raises(ValueError):
        gp.addcov({None: 1})
Exemple #5
0
def test_key_already_used():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(0, 0)
    with pytest.raises(KeyError):
        gp.addx(0, 0)

    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(0, 0)
    with pytest.raises(KeyError):
        gp.addtransf({0: 1}, 0)

    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(0, 0)
    with pytest.raises(KeyError):
        gp.addcov(1, 0)
Exemple #6
0
def makegp(params):
    kernel_time = lgp.ExpQuad(scale=params['time_scale'], dim='time')
    kernel_label = lgp.ExpQuad(scale=label_scale, dim='label')
    gp = lgp.GP(kernel_time * kernel_label)
    gp.addx(x, 'data', deriv=(data_deriv, 'time'))
    gp.addx(np.array([(0, 0)], dtype=x.dtype), 'fixed_point')
    return gp
Exemple #7
0
def makegp(hp):
    
    gp = lgp.GP()

    kernel = makekernel(hp)
    gp.addproc(kernel, 'h')
    gp.addproctransf({'h': 1}, 'primitive', deriv='x'     )
    gp.addproctransf({'h': 1}, 'f'        , deriv=(2, 'x'))
    gp.addproctransf({
        'primitive': lambda x: x['x'],
        'h'        : -1,
    }, 'primitive of xf(x)')

    # data
    gp.addx(xdata, 'xdata', proc='f')
    gp.addtransf({'xdata': M}, 'data', axes=2)

    # total momentum rule
    gp.addx(xinteg, 'xmomrule', proc='primitive of xf(x)')
    gp.addtransf({'xmomrule': suminteg}, 'momrule', axes=2)
    
    # quark sum rules
    for quark in 'ducs':
        idx = indices[quark]
        label = f'{quark}{quark}bar' # the one appearing in `constraints`
        xlabel = f'x{label}'
        gp.addx(xinteg[idx], xlabel, proc='primitive')
        gp.addtransf({xlabel: suminteg[idx] * qdiff}, label, axes=2)

    return gp
Exemple #8
0
 def makegp(x):
     gp = lgp.GP(lgp.ExpQuad(),
                 checkfinite=False,
                 checksym=False,
                 checkpos=False)
     gp.addx(np.nan, 0)
     return gp
Exemple #9
0
def makegp(params):
    kernel = lgp.Cauchy(scale=params['time_scale'], dim='time', beta=2)
    kernel *= lgp.ExpQuad(scale=params['label_scale'], dim='label')
    gp = lgp.GP(kernel)
    x['time'] = jnp.array([time, time - params['delay']])
    gp.addx(x, 'A')
    return gp
Exemple #10
0
def test_addcov_checks():
    gp = lgp.GP()
    a = np.random.randn(10, 10)
    b = np.copy(a)
    b[0, 0] = np.inf
    m = b.T @ b
    with pytest.raises(ValueError):
        gp.addcov(a, 0)
    with pytest.raises(ValueError):
        gp.addcov(m, 0)

    gp = lgp.GP(checksym=False)
    gp.addcov(a, 0)

    gp = lgp.GP(checkfinite=False)
    gp.addcov(m, 0)
Exemple #11
0
def test_cov():
    A = np.random.randn(20, 20)
    M1 = A.T @ A
    gp = lgp.GP()
    gp.addcov(M1, 'M')
    M2 = gp.prior('M', raw=True)
    util.assert_equal(M1, M2)
Exemple #12
0
def test_addcov_wrong_blocks():
    gp = lgp.GP(lgp.ExpQuad())
    with pytest.raises(ValueError):
        gp.addcov(np.zeros((1, 1, 1)), 0)
    with pytest.raises(ValueError):
        gp.addcov(np.zeros((1, 2, 2, 1)), 0)
    with pytest.raises(ValueError):
        gp.addcov(np.random.randn(10, 10), 0)
    with pytest.raises(KeyError):
        gp.addcov({
            (0, 0): 1,
            (0, 1): 0,
        })
    with pytest.raises(ValueError):
        gp.addcov({
            (0, 0): np.ones((2, 2)),
            (1, 1): np.ones((3, 3)),
            (0, 1): np.ones((3, 2)),
        })
    with pytest.raises(ValueError):
        gp.addcov({
            (0, 0): np.ones((2, 2)),
            (1, 1): np.ones((3, 3)),
            (0, 1): np.ones((2, 3)),
            (1, 0): np.zeros((3, 2)),
        })
Exemple #13
0
    def test_fourier(self):
        for kw in self.kwargs_list:
            kernel = self.kernel_class(**kw)
            try:
                kernel.fourier(True, True)
            except NotImplementedError:
                pytest.skip()

            if isinstance(kernel, _kernels.Zeta) and kw['nu'] == 0:
                continue

            x = np.linspace(0, 1, 100)
            gp = lgp.GP(kernel, posepsfac=200)
            gp.addkernelop('fourier', True, 'F')
            gp.addx(x, 'x')
            gp.addx(1, 's1', proc='F')
            gp.addx(2, 'c1', proc='F')
            ms, cs = gp.predfromdata(dict(s1=1, c1=0), 'x', raw=True)
            mc, cc = gp.predfromdata(dict(c1=1, s1=0), 'x', raw=True)
            np.testing.assert_allclose(ms,
                                       np.sin(2 * np.pi * x),
                                       equal_nan=False)
            np.testing.assert_allclose(mc,
                                       np.cos(2 * np.pi * x),
                                       equal_nan=False)
            eps = np.finfo(cs.dtype).eps
            np.testing.assert_allclose(np.diag(cs),
                                       cs[0, 0],
                                       atol=eps,
                                       equal_nan=False)
            np.testing.assert_allclose(np.diag(cc),
                                       cc[0, 0],
                                       atol=eps,
                                       equal_nan=False)
Exemple #14
0
 def preparegp():
     gp = lgp.GP()
     gp.addproc(lgp.ExpQuad(), 'a')
     gp.addproc(lgp.Cauchy(), 'b')
     gp.addx(x, 'ax', proc='a')
     gp.addx(x, 'bx', proc='b')
     return gp
Exemple #15
0
def test_no_checksym():
    covs = []
    for checksym in [False, True]:
        gp = lgp.GP(lgp.ExpQuad(), checksym=checksym)
        gp.addx({'x': np.arange(20)})
        covs.append(gp.prior('x', raw=True))
    util.assert_equal(*covs)
Exemple #16
0
def test_marginal_likelihood_separate():
    gp = lgp.GP(lgp.ExpQuad())
    x, y = np.random.randn(2, 20)
    gp.addx(x, 0)
    ml1 = gp.marginal_likelihood({0: y})
    l, r = gp.marginal_likelihood({0: y}, separate=True)
    ml2 = -1 / 2 * (l + r @ r)
    np.testing.assert_allclose(ml2, ml1, rtol=1e-15)
Exemple #17
0
def test_transf_vector():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addx([0, 1], 'x')
    gp.addtransf({'x': [-1, 1]}, 'y')
    prior = gp.prior()
    y1 = prior['y']
    y2 = prior['x'][1] - prior['x'][0]
    util.assert_same_gvars(y1, y2, atol=1e-12)
Exemple #18
0
def test_zero_covblock():
    gp = lgp.GP()
    a = np.random.randn(10, 10)
    m = a.T @ a
    gp.addcov(m, 0)
    gp.addcov(m, 1)
    prior = gp.prior(raw=True)
    util.assert_equal(prior[0, 1], np.zeros_like(m))
Exemple #19
0
def test_addcov_no_checksym():
    gp = lgp.GP(lgp.ExpQuad(), checksym=False)
    gp.addcov({
        (0, 0): np.ones((2, 2)),
        (1, 1): np.ones((3, 3)),
        (0, 1): np.ones((2, 3)),
        (1, 0): np.zeros((3, 2)),
    })
Exemple #20
0
def test_prior_raw_shape():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(np.arange(20).reshape(2, 10), 'x')
    cov = gp.prior(raw=True)
    assert cov['x', 'x'].shape == (2, 10, 2, 10)

    cov = gp.prior('x', raw=True)
    assert cov.shape == (2, 10, 2, 10)
Exemple #21
0
def test_priorpoints_cache():
    gp = lgp.GP(lgp.ExpQuad())
    x = np.arange(20)
    gp.addx(x, 0)
    gp.addx(x, 1)
    prior = gp.prior()
    cov = gvar.evalcov(prior)
    util.assert_equal(cov[0, 0], cov[1, 1])
    util.assert_equal(cov[0, 0], cov[0, 1])
Exemple #22
0
def test_addprocderiv():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addprocderiv(1, 'a')
    x = np.arange(20)
    gp.addx(x, 0, proc='a')
    gp.addx(x, 1, deriv=1)
    prior = gp.prior(raw=True)
    util.assert_equal(prior[0, 0], prior[1, 1])
    util.assert_equal(prior[0, 0], prior[0, 1])
Exemple #23
0
def test_pred_all():
    gp = lgp.GP(lgp.ExpQuad())
    x, y, z = np.random.randn(3, 20)
    gp.addx(x, 0)
    gp.addx(y, 1)
    m1, c1 = gp.predfromdata({0: z}, raw=True)
    m2, c2 = gp.predfromdata({0: z}, [0, 1], raw=True)
    util.assert_equal(m1, m2)
    util.assert_equal(c1, c2)
Exemple #24
0
def test_addcov_missing_block():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addcov({
        (0, 0): np.ones((2, 2)),
        (1, 1): np.ones((3, 3)),
        (0, 1): np.ones((2, 3)),
    })
    prior = gp.prior(raw=True)
    util.assert_equal(prior[0, 1], prior[1, 0].T)
Exemple #25
0
def test_default_kernel():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addproc(key='a')
    x = np.arange(20)
    gp.addx(x, 'x1')
    gp.addx(x, 'x2', proc='a')
    prior = gp.prior(raw=True)
    util.assert_equal(prior['x1', 'x1'], prior['x2', 'x2'])
    util.assert_equal(prior['x1', 'x2'], np.zeros(2 * x.shape))
Exemple #26
0
def test_marginal_likelihood_gvar():
    gp = lgp.GP(lgp.ExpQuad())
    x, y = np.random.randn(2, 20)
    gp.addx(x, 0)
    a = np.random.randn(20, 20)
    m = a.T @ a
    ml1 = gp.marginal_likelihood({0: gvar.gvar(y, m)})
    ml2 = gp.marginal_likelihood({0: y}, {(0, 0): m})
    np.testing.assert_allclose(ml2, ml1, rtol=1e-15)
Exemple #27
0
def test_nonsense_tensors():
    gp = lgp.GP(lgp.ExpQuad())
    gp.addx(0, 0)
    with pytest.raises(TypeError):
        gp.addtransf({0: 'a'}, 1)
    with pytest.raises(ValueError):
        gp.addtransf({0: np.inf}, 1)
    gp.addx([0, 1], 1)
    with pytest.raises(ValueError):
        gp.addtransf({1: [1, 2, 3]}, 2)
Exemple #28
0
def test_empty_proc():
    gp = lgp.GP()
    gp.addproctransf({}, 'a')
    gp.addproclintransf(lambda: lambda x: 0, [], 'b')
    x = np.arange(20)
    gp.addx(x, 'ax', proc='a')
    gp.addx(x, 'bx', proc='b')
    cov = gp.prior(raw=True)
    util.assert_equal(cov['ax', 'ax'], np.zeros(2 * x.shape))
    util.assert_equal(cov['bx', 'bx'], np.zeros(2 * x.shape))
Exemple #29
0
def test_priortransf():
    gp = lgp.GP(lgp.ExpQuad())
    x, y = np.arange(40).reshape(2, -1)
    gp.addx(x, 0)
    gp.addx(y, 1)
    gp.addtransf({0: x, 1: y}, 2)
    cov1 = gp.prior(2, raw=True)
    u = gp.prior(2)
    cov2 = gvar.evalcov(u)
    np.testing.assert_allclose(cov1, cov2, rtol=1e-15)
Exemple #30
0
def test_zero_givencov():
    gp = lgp.GP(lgp.ExpQuad())
    x, y, z = np.random.randn(3, 20)
    gp.addx(x, 0)
    gp.addx(y, 1)
    cov = np.zeros(2 * x.shape)
    m1, c1 = gp.predfromdata({0: z}, 1, {(0, 0): cov}, raw=True)
    m2, c2 = gp.predfromdata({0: z}, 1, raw=True)
    util.assert_equal(m1, m2)
    util.assert_equal(c1, c2)