def test_compute_b_matches_sym():
    sigma = 1.
    X = np.random.randn(10, 2)
    R = incomplete_cholesky_gaussian(X, sigma, eta=0.1)["R"]

    x = gaussian_low_rank.compute_b(X, X, R.T, R.T, sigma)
    y = develop_gaussian_low_rank.compute_b_sym(X, R.T, sigma)
    assert_allclose(x, y)
def test_compute_b_matches_sym():
    sigma = 1.
    X = np.random.randn(10, 2)
    R = incomplete_cholesky_gaussian(X, sigma, eta=0.1)["R"]
    
    x = gaussian_low_rank.compute_b(X, X, R.T, R.T, sigma)
    y = develop_gaussian_low_rank.compute_b_sym(X, R.T, sigma)
    assert_allclose(x, y)
def test_compute_b_sym_matches_full():
    sigma = 1.
    Z = np.random.randn(100, 2)
    low_rank_dim = int(len(Z) * .9)
    K = gaussian_kernel(Z, sigma=sigma)
    R = incomplete_cholesky_gaussian(Z, sigma, eta=low_rank_dim)["R"]

    x = develop_gaussian.compute_b_sym(Z, K, sigma)
    y = develop_gaussian_low_rank.compute_b_sym(Z, R.T, sigma)
    assert_allclose(x, y, atol=5e-1)
def test_compute_b_sym_matches_full():
    sigma = 1.
    Z = np.random.randn(100, 2)
    low_rank_dim = int(len(Z) * .9)
    K = gaussian_kernel(Z, sigma=sigma)
    R = incomplete_cholesky_gaussian(Z, sigma, eta=low_rank_dim)["R"]
    
    x = develop_gaussian.compute_b_sym(Z, K, sigma)
    y = develop_gaussian_low_rank.compute_b_sym(Z, R.T, sigma)
    assert_allclose(x, y, atol=5e-1)
def test_objective_sym_optimum():
    sigma = 1.
    lmbda = 1.
    Z = np.random.randn(100, 2)
    
    L = incomplete_cholesky_gaussian(Z, sigma, eta=0.1)["R"].T
    a = develop_gaussian_low_rank.fit_sym(Z, sigma, lmbda, L)
    b = develop_gaussian_low_rank.compute_b_sym(Z, L, sigma)
    J_opt = develop_gaussian_low_rank.objective_sym(Z, sigma, lmbda, a, L, b)
    
    for _ in range(10):
        a_random = np.random.randn(len(Z))
        J = develop_gaussian_low_rank.objective_sym(Z, sigma, lmbda, a_random, L)
        assert J >= J_opt
def test_objective_sym_optimum():
    sigma = 1.
    lmbda = 1.
    Z = np.random.randn(100, 2)

    L = incomplete_cholesky_gaussian(Z, sigma, eta=0.1)["R"].T
    a = develop_gaussian_low_rank.fit_sym(Z, sigma, lmbda, L)
    b = develop_gaussian_low_rank.compute_b_sym(Z, L, sigma)
    J_opt = develop_gaussian_low_rank.objective_sym(Z, sigma, lmbda, a, L, b)

    for _ in range(10):
        a_random = np.random.randn(len(Z))
        J = develop_gaussian_low_rank.objective_sym(Z, sigma, lmbda, a_random,
                                                    L)
        assert J >= J_opt