import tensorflow as tf

            >>> samples.dtype
            dtype('float32')
            
        """
        mu, var = self.build_prior_mean_var(test_points, num_latent, True)
        jitter = tfhacks.eye(tf.shape(mu)[0], var.dtype) * 1e-06
        L = tf.batch_cholesky(tf.transpose(var, (2, 0, 1)) + jitter)
        V_shape = [tf.shape(L)[0], tf.shape(L)[1], num_samples]
        V = tf.random_normal(V_shape, dtype=L.dtype)
        samples = tf.expand_dims(tf.transpose(mu), -1) + tf.batch_matmul(L, V)
        return tf.transpose(samples)
        
    @autoflow((tf.float64, [None, None]), (tf.float64, [None, None]),
              (tf.float64, [None, None]))
    def compute_posterior_mean_var(self, X, Y, test_points):
        """Computes the means and variances of the posterior(s).
