code: def _contour_data(data, length_scales, log_SNRs, kernel_call=GPy.kern.RBF):
      
  
      lls = []
      total_var = np.var(data['Y'])
      kernel = kernel_call(1, variance=1., lengthscale=1.)
      model = GPy.models.GPRegression(data['X'], data['Y'], kernel=kernel)
      for log_SNR in log_SNRs:
          SNR = 10.**log_SNR
          noise_var = total_var / (1. + SNR)
          signal_var = total_var - noise_var
          model.kern['.*variance'] = signal_var
          model.likelihood.variance = noise_var
          length_scale_lls = []
  
          for length_scale in length_scales:
              model['.*lengthscale'] = length_scale
              length_scale_lls.append(model.log_likelihood())
  
          lls.append(length_scale_lls)
  
      return np.array(lls)
docs: Evaluate the GP objective function for a given data set for a range of
      signal to noise ratios and a range of lengthscales.
  
      :data_set: A data set from the utils.datasets director.
      :length_scales: a list of length scales to explore for the contour plot.
      :log_SNRs: a list of base 10 logarithm signal to noise ratios to explore for the contour plot.
      :kernel: a kernel to use for the 'signal' portion of the data.