class_docstr: MultiLatent likelihood where the conditional distribution
  is given by a TensorFlow Probability Distribution.
class_docstr_tok: ["MultiLatent","likelihood","where","the","conditional","distribution","is","given","by","a","TensorFlow","Probability","Distribution","."]
docstr: The log probability density log p(Y|F)
  
  :param F: function evaluation Tensor, with shape [..., latent_dim]
  :param Y: observation Tensor, with shape [..., 1]:
  :returns: log pdf, with shape [...]
docstr_tok: ["The","log","probability","density","log","p","(","Y|F",")",":","param","F",":","function","evaluation","Tensor",",","with","shape","[","...",",","latent_dim","]",":","param","Y",":","observation","Tensor",",","with","shape","[","...",",","1","]",":",":","returns",":","log","pdf",",","with","shape","[","...","]"]
code: def _log_prob(
      self, X: TensorType, F: TensorType, Y: TensorType
  ) -> tf.Tensor:
      """
      The log probability density log p(Y|F)
  
      :param F: function evaluation Tensor, with shape [..., latent_dim]
      :param Y: observation Tensor, with shape [..., 1]:
      :returns: log pdf, with shape [...]
      """
      return tf.squeeze(
          self.conditional_distribution(F).log_prob(Y), -1
      )
  
file_path: GPflow/gpflow/likelihoods/multilatent.py
imports: from typing import Any, Callable, Optional, Type
  import tensorflow
  import tensorflow_probability
  from check_shapes import check_shapes, inherit_check_shapes
  from ..base import TensorType
  from ..utilities import positive
  from .base import QuadratureLikelihood
label_desc: Use image node_id 2 for calling the MultiLatentTFPConditional obj's underlying member method code with example usage: obj._log_prob(X, F, Y) and returns: tf