code: def test_equivalence_vgp_and_opper_archambeau() -> None:
      kernel = gpflow.kernels.Matern52()
      likelihood = gpflow.likelihoods.StudentT()
  
      vgp_oa_model = _create_vgpao_model(
          kernel, likelihood, DatumVGP.q_alpha, DatumVGP.q_lambda
      )
  
      K = kernel(DatumVGP.X) + np.eye(DatumVGP.N) * default_jitter()
      L = np.linalg.cholesky(K)
      L_inv = np.linalg.inv(L)
      K_inv = np.linalg.inv(K)
  
      mean = K @ DatumVGP.q_alpha
  
      prec_dnn = K_inv[None, :, :] + np.array(
          [np.diag(l**2) for l in DatumVGP.q_lambda.T]
      )
      var_dnn = np.linalg.inv(prec_dnn)
  
      svgp_model_unwhitened = _create_svgp_model(
          kernel,
          likelihood,
          mean,
          np.linalg.cholesky(var_dnn),
          whiten=False,
      )
  
      mean_white_nd = L_inv.dot(mean)
      var_white_dnn = np.einsum("nN,dNM,mM->dnm", L_inv, var_dnn, L_inv)
      q_sqrt_nnd = np.linalg.cholesky(var_white_dnn)
  
      vgp_model = _create_vgp_model(
          kernel, likelihood, mean_white_nd, q_sqrt_nnd
      )
  
      likelihood_vgp = vgp_model.elbo()
      likelihood_vgp_oa = vgp_oa_model.elbo()
      likelihood_svgp_unwhitened = svgp_model_unwhitened.elbo(
          DatumVGP.data
      )
  
      assert_allclose(likelihood_vgp, likelihood_vgp_oa, rtol=1e-2)
      assert_allclose(
          likelihood_vgp, likelihood_svgp_unwhitened, rtol=1e-2
      )
  
      vgp_oa_mu, vgp_oa_var = vgp_oa_model.predict_f(DatumVGP.Xs)
      (
          svgp_unwhitened_mu,
          svgp_unwhitened_var,
      ) = svgp_model_unwhitened.predict_f(DatumVGP.Xs)
      vgp_mu, vgp_var = vgp_model.predict_f(DatumVGP.Xs)
  
      assert_allclose(vgp_oa_mu, vgp_mu)
      assert_allclose(vgp_oa_var, vgp_var, rtol=1e-4)  # jitter?
      assert_allclose(svgp_unwhitened_mu, vgp_mu)
      assert_allclose(svgp_unwhitened_var, vgp_var, rtol=1e-4)
  
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 8 for calling a global function with example usage: test_equivalence_vgp_and_opper_archambeau() without return types