import pytest import tensorflow as tf import gpflow.kernels as kernels rng = np.random.RandomState(0) class Datum: num_data = 100 D = 100 X = rng.rand(num_data, D) * 100 kernel_list = [ kernels.Matern12(), kernels.Matern32(), kernels.Matern52(), kernels.Exponential(), kernels.Cosine() ] @pytest.mark.parametrize('kernel', kernel_list) def test_kernel_euclidean_distance(kernel): ''' Tests output & gradients of kernels that are a function of the (scaled) euclidean distance of the points. We test on a high dimensional space, which can generate very small distances causing the scaled_square_dist to generate some negative values. ''' K = kernel(Datum.X)
kernels.Constant, # Stationary kernels.SquaredExponential, kernels.RationalQuadratic, kernels.Exponential, kernels.Matern12, kernels.Matern32, kernels.Matern52, kernels.Cosine, kernels.Linear, kernels.Polynomial, pytest.param(kernels.ArcCosine, marks=pytest.mark.xfail), # broadcasting not implemented kernels.Periodic, lambda input_dim: kernels.White(input_dim) + kernels.Matern12(input_dim), lambda input_dim: kernels.White(input_dim) * kernels.Matern12(input_dim), ] @pytest.mark.parametrize("Kern", Kerns) def test_broadcast_no_active_dims(Kern, session_tf): S, N, M, D = 5, 4, 3, 2 X1 = tf.identity(np.random.randn(S, N, D)) X2 = tf.identity(np.random.randn(M, D)) kern = Kern(D) + gpflow.kernels.White(2) compare_vs_map(X1, X2, kern, session_tf) @pytest.mark.parametrize("Kern", [gpflow.kernels.SquaredExponential])
# Static kernels: kernels.White, kernels.Constant, # Stationary kernels: kernels.SquaredExponential, kernels.RationalQuadratic, kernels.Exponential, kernels.Matern12, kernels.Matern32, kernels.Matern52, # other kernels: kernels.Cosine, kernels.Linear, kernels.Polynomial, # sum and product kernels: lambda: kernels.White() + kernels.Matern12(), lambda: kernels.White() * kernels.Matern12(), # Following kernels do not broadcast: see https://github.com/GPflow/GPflow/issues/1339 pytest.param(kernels.ArcCosine, marks=pytest.mark.xfail), # broadcasting not implemented pytest.param(kernels.Coregion, marks=pytest.mark.xfail), # broadcasting not implemented pytest.param(kernels.ChangePoints, marks=pytest.mark.xfail), # broadcasting not implemented pytest.param(kernels.Convolutional, marks=pytest.mark.xfail), # broadcasting not implemented ] def check_broadcasting(kernel): S, N, M, D = 5, 4, 3, 2