code: def _create_svgp_model(
      kernel: Kernel,
      likelihood: Likelihood,
      q_mu: Optional[TensorType],
      q_sqrt: Optional[TensorType],
      whiten: bool,
  ) -> gpflow.models.SVGP:
      model_svgp = gpflow.models.SVGP(
          kernel,
          likelihood,
          DatumVGP.X.copy(),
          whiten=whiten,
          q_diag=False,
          num_latent_gps=DatumVGP.DY,
      )
      model_svgp.q_mu.assign(q_mu)
      model_svgp.q_sqrt.assign(q_sqrt)
      return model_svgp
  
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 5 for calling a global function with example usage: _create_svgp_model(kernel, likelihood, q_mu, q_sqrt, whiten) and returns: model_svgp