code: def gpr_and_vgp(
      data: Tuple[tf.Tensor, tf.Tensor],
      kernel: Kernel,
      likelihood: Likelihood,
  ) -> Tuple[GPR, VGP]:
      vgp = VGP(data, kernel, likelihood)
      gpr = GPR(data, kernel)
      gpr.likelihood.variance.assign(likelihood.variance)
      set_trainable(vgp, False)
      set_trainable(vgp.q_mu, True)
      set_trainable(vgp.q_sqrt, True)
      return gpr, vgp
  
imports: from typing import Any, Optional, Tuple
  import numpy
  import pytest
  import tensorflow
  from check_shapes import check_shapes
  import gpflow
  from gpflow import set_trainable
  from gpflow.config import default_float
  from gpflow.kernels import Kernel, SquaredExponential
  from gpflow.likelihoods import Gaussian, Likelihood
  from gpflow.models import GPR, SGPR, SVGP, VGP, BayesianModel
  from gpflow.optimizers import NaturalGradient
label_desc: Use image node_id 5 for calling a global function with example usage: gpr_and_vgp(data, kernel, likelihood) and returns: gpr,  vgp