code: def test_equivalence_vgp_and_svgp() -> None:
      kernel = gpflow.kernels.Matern52()
      likelihood = gpflow.likelihoods.StudentT()
  
      svgp_model = _create_svgp_model(
          kernel,
          likelihood,
          DatumVGP.q_mu,
          DatumVGP.q_sqrt,
          whiten=True,
      )
      vgp_model = _create_vgp_model(
          kernel, likelihood, DatumVGP.q_mu, DatumVGP.q_sqrt
      )
  
      likelihood_svgp = svgp_model.elbo(DatumVGP.data)
      likelihood_vgp = vgp_model.elbo()
      assert_allclose(likelihood_svgp, likelihood_vgp, rtol=1e-2)
  
      svgp_mu, svgp_var = svgp_model.predict_f(DatumVGP.Xs)
      vgp_mu, vgp_var = vgp_model.predict_f(DatumVGP.Xs)
  
      assert_allclose(svgp_mu, vgp_mu)
      assert_allclose(svgp_var, vgp_var)
  
imports: from typing import Optional, Tuple
  import numpy
  import pytest
  from check_shapes import ShapeChecker
  from numpy.testing import assert_allclose
  import gpflow
  from gpflow.base import AnyNDArray, TensorType
  from gpflow.config import default_jitter
  from gpflow.kernels import Kernel
  from gpflow.likelihoods import Likelihood
  from gpflow.mean_functions import Constant
  from gpflow.models import GPModel, maximum_log_likelihood_objective, training_loss_closure
label_desc: Use image node_id 7 for calling a global function with example usage: test_equivalence_vgp_and_svgp() without return types