def test_independentnormalkernel():
    x0 = {'y0': np.array([1, 2]), 'y1': 2.5}
    x = {'y0': np.array([0, 0]), 'y1': 7}

    # use default var
    kernel = IndependentNormalKernel()
    kernel.initialize(0, None, x0)
    ret = kernel(x, x0)
    expected = -0.5 * (3 * np.log(2 * np.pi * 1) + 1**2 + 2**2 + 4.5**2)
    assert np.isclose(ret, expected)

    # define own var
    kernel = IndependentNormalKernel([1, 2, 3])
    kernel.initialize(0, None, x0)
    ret = kernel(x, x0)
    expected = -0.5 * (3 * np.log(2 * np.pi) + np.log(1) + np.log(2) +
                       np.log(3) + 1**2 / 1 + 2**2 / 2 + 4.5**2 / 3)
    assert np.isclose(ret, expected)

    # compare to normal kernel
    normal_kernel = NormalKernel(cov=np.diag([1, 2, 3]))
    normal_kernel.initialize(0, None, x0)
    normal_ret = normal_kernel(x, x0)
    assert np.isclose(ret, normal_ret)

    # function var
    def var(p):
        if p is None:
            return 42
        return np.array([p['th0'], p['th1'], 3])

    kernel = IndependentNormalKernel(var)
    kernel.initialize(0, None, x0)
    ret = kernel(x, x0, par={'th0': 1, 'th1': 2})
    assert np.isclose(ret, expected)
Esempio n. 2
0
def test_independentnormalkernel():
    x0 = {'y0': np.array([1, 2]), 'y1': 2.5}
    x = {'y0': np.array([0, 0]), 'y1': 7}

    # use default var
    kernel = IndependentNormalKernel()
    kernel.initialize(0, None, x0, total_sims=0)
    ret = kernel(x, x0)
    expected = -0.5 * (3 * np.log(2 * np.pi * 1) + 1**2 + 2**2 + 4.5**2)
    sp_expected = np.log(
        np.prod([stats.norm.pdf(x=x, loc=0, scale=1) for x in [1, 2, 4.5]]))
    assert np.isclose(expected, sp_expected)
    assert np.isclose(ret, expected)

    # define own var
    kernel = IndependentNormalKernel([1, 2, 3])
    kernel.initialize(0, None, x0, total_sims=0)
    ret = kernel(x, x0)
    expected = -0.5 * (3 * np.log(2 * np.pi) + np.log(1) + np.log(2) +
                       np.log(3) + 1**2 / 1 + 2**2 / 2 + 4.5**2 / 3)
    sp_expected = np.log(
        np.prod([
            stats.norm.pdf(x=x, loc=0, scale=s)
            for x, s in zip([1, 2, 4.5], np.sqrt([1, 2, 3]))
        ]))
    assert np.isclose(expected, sp_expected)
    assert np.isclose(ret, expected)

    # compare to normal kernel
    normal_kernel = NormalKernel(cov=np.diag([1, 2, 3]))
    normal_kernel.initialize(0, None, x0, total_sims=0)
    normal_ret = normal_kernel(x, x0)
    assert np.isclose(ret, normal_ret)

    # function var
    def var(p):
        if p is None:
            return 42
        return np.array([p['th0'], p['th1'], 3])

    kernel = IndependentNormalKernel(var)
    kernel.initialize(0, None, x, total_sims=0)
    ret = kernel(x, x0, par={'th0': 1, 'th1': 2})
    assert np.isclose(ret, expected)
Esempio n. 3
0
def test_normalkernel():
    x0 = {'y0': np.array([1, 0]), 'y1': 1}
    x = {'y0': np.array([2, 2]), 'y1': 2}

    # use default cov
    kernel = NormalKernel()
    kernel.initialize(0, None, x0, total_sims=0)
    ret = kernel(x, x0)
    # expected value
    logterm = 3 * np.log(2 * np.pi * 1)
    quadterm = 1**2 + 2**2 + 1**2
    expected = -0.5 * (logterm + quadterm)
    assert np.isclose(ret, expected)

    # define own cov
    cov = np.array([[2, 1, 0], [0, 2, 1], [0, 1, 3]])
    kernel = NormalKernel(cov=cov)
    kernel.initialize(0, None, x0, total_sims=0)
    ret = kernel(x, x0)
    expected = stats.multivariate_normal(cov=cov).logpdf([1, 2, 1])
    assert np.isclose(ret, expected)

    # define own keys, linear output
    kernel = NormalKernel(keys=['y0'], ret_scale=SCALE_LIN)
    kernel.initialize(0, None, x0, total_sims=0)
    ret = kernel(x, x0)
    expected = stats.multivariate_normal(cov=np.eye(2)).pdf([1, 2])
    assert np.isclose(ret, expected)