def _test_solve(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, method, seed=42): solver = get_solver(method) np.random.seed(seed) t = np.sort(np.random.rand(500)) diag = np.random.uniform(0.1, 0.5, len(t)) b = np.random.randn(len(t)) with pytest.raises(RuntimeError): solver.log_determinant() with pytest.raises(RuntimeError): solver.dot_solve(b) solver.compute(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, diag) K = get_kernel_value(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :]) K[np.diag_indices_from(K)] += diag assert np.allclose(solver.solve(b).T, np.linalg.solve(K, b)) b = np.random.randn(len(t), 5) assert np.allclose(solver.solve(b), np.linalg.solve(K, b))
def test_dot_L(seed=42): solver = celerite.CholeskySolver() np.random.seed(seed) t = np.sort(np.random.rand(5)) b = np.random.randn(len(t), 5) yerr = np.random.uniform(0.1, 0.5, len(t)) alpha_real = np.array([1.3, 0.2]) beta_real = np.array([0.5, 0.8]) alpha_complex_real = np.array([0.1]) alpha_complex_imag = np.array([0.0]) beta_complex_real = np.array([1.5]) beta_complex_imag = np.array([0.1]) K = get_kernel_value( alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :] ) K[np.diag_indices_from(K)] += yerr**2 L = np.linalg.cholesky(K) x0 = np.dot(L, b) solver.compute( 0.0, alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, yerr**2) x = solver.dot_L(b) assert np.allclose(x0, x)
def test_dot(with_general, seed=42): solver = celerite.CholeskySolver() np.random.seed(seed) t = np.sort(np.random.rand(500)) b = np.random.randn(len(t), 5) alpha_real = np.array([1.3, 0.2]) beta_real = np.array([0.5, 0.8]) alpha_complex_real = np.array([0.1]) alpha_complex_imag = np.array([0.0]) beta_complex_real = np.array([1.5]) beta_complex_imag = np.array([0.1]) K = get_kernel_value(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :]) if with_general: U = np.vander(t - np.mean(t), 4).T V = U * np.random.rand(4)[:, None] A = np.sum(U * V, axis=0) + 1e-8 K[np.diag_indices_from(K)] += A K += np.tril(np.dot(U.T, V), -1) + np.triu(np.dot(V.T, U), 1) else: A = np.empty(0) U = np.empty((0, 0)) V = np.empty((0, 0)) x0 = np.dot(K, b) x = solver.dot(0.0, alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, A, U, V, t, b) assert np.allclose(x0, x)
def _test_log_determinant(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, seed=42): solver = celerite.CholeskySolver() np.random.seed(seed) t = np.sort(np.random.rand(5)) diag = np.random.uniform(0.1, 0.5, len(t)) solver.compute( 0.0, alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, diag ) K = get_kernel_value( alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :] ) K[np.diag_indices_from(K)] += diag assert np.allclose(solver.log_determinant(), np.linalg.slogdet(K)[1])
def _test_solve(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, seed=42, with_general=False): solver = celerite.CholeskySolver() np.random.seed(seed) t = np.sort(np.random.rand(500)) diag = np.random.uniform(0.1, 0.5, len(t)) b = np.random.randn(len(t)) with pytest.raises(RuntimeError): solver.log_determinant() with pytest.raises(RuntimeError): solver.dot_solve(b) if with_general: U = np.vander(t - np.mean(t), 4).T V = U * np.random.rand(4)[:, None] A = np.sum(U * V, axis=0) + 1e-8 else: A = np.empty(0) U = np.empty((0, 0)) V = np.empty((0, 0)) solver.compute(0.0, alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, A, U, V, t, diag) K = get_kernel_value(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :]) K[np.diag_indices_from(K)] += diag if len(A): K[np.diag_indices_from(K)] += A K += np.tril(np.dot(U.T, V), -1) + np.triu(np.dot(V.T, U), 1) assert np.allclose(solver.solve(b).T, np.linalg.solve(K, b)) b = np.random.randn(len(t), 5) assert np.allclose(solver.solve(b), np.linalg.solve(K, b))
def test_dot(method, seed=42): solver = get_solver(method) np.random.seed(seed) t = np.sort(np.random.rand(300)) b = np.random.randn(len(t), 5) alpha_real = np.array([1.3, 0.2]) beta_real = np.array([0.5, 0.8]) alpha_complex_real = np.array([0.1]) alpha_complex_imag = np.array([0.3]) beta_complex_real = np.array([0.5]) beta_complex_imag = np.array([3.0]) K = get_kernel_value(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :]) x0 = np.dot(K, b) x = solver.dot(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, b) assert np.allclose(x0, x)
def test_single(seed=42): if not celerite.__with_lapack__: with pytest.raises(RuntimeError): solver = SingleSolver() return alpha_real = np.array([1.5]) beta_real = np.array([0.3]) alpha_complex_real = np.array([]) alpha_complex_imag = np.array([]) beta_complex_real = np.array([]) beta_complex_imag = np.array([]) solver = SingleSolver() np.random.seed(seed) t = np.sort(np.random.uniform(0, 10, 5)) diag = np.random.uniform(0.1, 0.8, len(t)) flag = solver.compute(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, diag) assert flag == 0 K0 = get_kernel_value(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :]) K = np.array(K0) K[np.diag_indices_from(K)] += diag assert np.allclose(solver.log_determinant(), np.linalg.slogdet(K)[1]) b = np.random.randn(len(t), 2) assert np.allclose(solver.solve(b), np.linalg.solve(K, b)) d1 = solver.dot(alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, b) d2 = np.dot(K0, b) assert np.allclose(d1, d2)
def test_dot(seed=42): solver = celerite.CholeskySolver() np.random.seed(seed) t = np.sort(np.random.rand(500)) b = np.random.randn(len(t), 5) alpha_real = np.array([1.3, 0.2]) beta_real = np.array([0.5, 0.8]) alpha_complex_real = np.array([0.1]) alpha_complex_imag = np.array([0.0]) beta_complex_real = np.array([1.5]) beta_complex_imag = np.array([0.1]) K = get_kernel_value( alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t[:, None] - t[None, :] ) x0 = np.dot(K, b) x = solver.dot( 0.0, alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, b ) assert np.allclose(x0, x)