docs: def _conditional(Xnew, feat, kern, f, *, full_cov=False, full_output_cov=False, q_sqrt=None, white=False):
      """
      Multi-output GP with fully correlated inducing variables.
      The inducing variables are shaped in the same way as evaluations of K, to allow a default
      inducing point scheme for multi-output kernels.
  
      The covariance matrices used to calculate the conditional have the following shape:
      - Kuu: M x L x M x L
      - Kuf: M x L x N x P
      - Kff: N x P x N x P, N x P x P, N x P
  
      Further reference
      -----------------
      - See `gpflow.conditionals._conditional` for a detailed explanation of
        conditional in the single-output case.
      - See the multiouput notebook for more information about the multiouput framework.
  
      Parameters
      ----------
      :param f: variational mean, ML x 1
      :param q_sqrt: standard-deviations or cholesky, ML x 1  or  1 x ML x ML
      """
      logger.debug("Conditional: InducingPoints -- Mok")
      Kmm = Kuu(feat, kern, jitter=settings.numerics.jitter_level)  # M x L x M x L
      Kmn = Kuf(feat, kern, Xnew)  # M x L x N x P
      Knn = kern.K(Xnew, full_output_cov=full_output_cov) if full_cov \
          else kern.Kdiag(Xnew, full_output_cov=full_output_cov)  # N x P(x N)x P  or  N x P(x P)
  
      M, L, N, K = [tf.shape(Kmn)[i] for i in range(Kmn.shape.ndims)]
      Kmm = tf.reshape(Kmm, (M * L, M * L))
  
      if full_cov == full_output_cov:
          Kmn = tf.reshape(Kmn, (M * L, N * K))
          Knn = tf.reshape(Knn, (N * K, N * K)) if full_cov else tf.reshape(Knn, (N * K,))
          fmean, fvar = base_conditional(Kmn, Kmm, Knn, f, full_cov=full_cov, q_sqrt=q_sqrt, white=white)  # NK x 1, 1 x NK(x NK)
          fmean = tf.reshape(fmean, (N, K))
          fvar = tf.reshape(fvar, (N, K, N, K) if full_cov else (N, K))
      else:
          Kmn = tf.reshape(Kmn, (M * L, N, K))
          fmean, fvar = fully_correlated_conditional(Kmn, Kmm, Knn, f, full_cov=full_cov,
                                                     full_output_cov=full_output_cov, q_sqrt=q_sqrt, white=white)
      return fmean, fvar