code: def test_fully_correlated_conditional_shapes_fc_and_foc(
      fully_correlated_q_sqrt_factory: QSqrtFactory,
      full_cov: bool,
      full_output_cov: bool,
      whiten: bool,
  ) -> None:
      L, M, N, P = Data.L, Data.M, Data.N, Data.P
  
      Kmm = tf.ones((L * M, L * M)) + default_jitter() * tf.eye(L * M)
      Kmn = tf.ones((L * M, N, P))
  
      if full_cov and full_output_cov:
          Knn = tf.ones((N, P, N, P))
          expected_v_shape = [N, P, N, P]
      elif not full_cov and full_output_cov:
          Knn = tf.ones((N, P, P))
          expected_v_shape = [N, P, P]
      elif full_cov and not full_output_cov:
          Knn = tf.ones((P, N, N))
          expected_v_shape = [P, N, N]
      else:
          Knn = tf.ones((N, P))
          expected_v_shape = [N, P]
  
      f = tf.ones((L * M, 1))
      q_sqrt = fully_correlated_q_sqrt_factory(L * M, 1)
  
      m, v = fully_correlated_conditional(
          Kmn,
          Kmm,
          Knn,
          f,
          full_cov=full_cov,
          full_output_cov=full_output_cov,
          q_sqrt=q_sqrt,
          white=whiten,
      )
  
      assert m.shape.as_list() == [N, P]
      assert v.shape.as_list() == expected_v_shape
  
imports: from typing import Callable, List, Sequence, Tuple, cast
  import numpy
  import pytest
  import scipy
  import tensorflow
  from _pytest.fixtures import SubRequest
  from check_shapes import ShapeChecker, check_shapes
  import gpflow
  import gpflow.inducing_variables.multioutput
  import gpflow.kernels.multioutput
  from gpflow import set_trainable
  from gpflow.base import AnyNDArray, RegressionData
  from gpflow.conditionals import sample_conditional
  from gpflow.conditionals.util import fully_correlated_conditional, fully_correlated_conditional_repeat, independent_interdomain_conditional, sample_mvn
  from gpflow.config import default_float, default_jitter
  from gpflow.inducing_variables import InducingPoints
  from gpflow.kernels import SquaredExponential
  from gpflow.likelihoods import Gaussian
  from gpflow.models import SVGP
label_desc: Use image node_id 12 for calling a global function with example usage: test_fully_correlated_conditional_shapes_fc_and_foc(fully_correlated_q_sqrt_factory, full_cov, full_output_cov, whiten) without return types