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_carma(method, seed=42): solver = get_solver(method) np.random.seed(seed) t = np.sort(np.random.uniform(0, 5, 100)) yerr = 0.1 + np.zeros_like(t) y = np.sin(t) + yerr * np.random.randn(len(t)) carma_solver = CARMASolver(-0.5, np.array([0.1, 0.05, 0.01]), np.array([0.2, 0.1])) carma_ll = carma_solver.log_likelihood(t, y, yerr) params = carma_solver.get_celerite_coeffs() solver.compute(params[0], params[1], params[2], params[3], params[4], params[5], t, yerr**2) celerite_ll = -0.5 * (solver.dot_solve(y) + solver.log_determinant() + len(t) * np.log(2 * np.pi)) assert np.allclose(carma_ll, celerite_ll)
def _test_log_determinant(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(5)) diag = np.random.uniform(0.1, 0.5, len(t)) 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.log_determinant(), np.linalg.slogdet(K)[1])
def test_pickle(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)) y = np.sin(t) alpha_real = np.array([1.3, 1.5]) beta_real = np.array([0.5, 0.2]) alpha_complex_real = np.array([1.0]) alpha_complex_imag = np.array([0.1]) beta_complex_real = np.array([1.0]) beta_complex_imag = np.array([1.0]) def compare(solver1, solver2): assert solver1.computed() == solver2.computed() if not solver1.computed(): return assert np.allclose(solver1.log_determinant(), solver2.log_determinant()) assert np.allclose(solver1.dot_solve(y), solver2.dot_solve(y)) s = pickle.dumps(solver, -1) solver2 = pickle.loads(s) compare(solver, solver2) if method != "sparse": solver.compute( alpha_real, beta_real, alpha_complex_real, alpha_complex_imag, beta_complex_real, beta_complex_imag, t, diag ) solver2 = pickle.loads(pickle.dumps(solver, -1)) compare(solver, solver2) # Test that models can be pickled too. kernel = terms.RealTerm(0.5, 0.1) kernel += terms.ComplexTerm(0.6, 0.7, 1.0) gp1 = GP(kernel, method=method) gp1.compute(t, diag) s = pickle.dumps(gp1, -1) gp2 = pickle.loads(s) assert np.allclose(gp1.log_likelihood(y), gp2.log_likelihood(y))
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)