docs: def get_eval_func(obj, feature, slice=np.s_[...]):
      """
      Return the function of interest (kernel or mean) for the expectation
      depending on the type of :obj: and whether any features are given
      """
      if feature is not None:
          # kernel + feature combination
          if not isinstance(feature, InducingFeature) or not isinstance(obj, kernels.Kernel):
              raise TypeError("If `feature` is supplied, `obj` must be a kernel.")
          return lambda x: tf.transpose(Kuf(feature, obj, x))[slice]
      elif isinstance(obj, mean_functions.MeanFunction):
          return lambda x: obj(x)[slice]
      elif isinstance(obj, kernels.Kernel):
          return lambda x: obj.Kdiag(x)
      else:
          raise NotImplementedError()