class_docstr: Heteroskedastic Likelihood where the conditional distribution
  is given by a TensorFlow Probability Distribution.
  The `loc` and `scale` of the distribution are given by a
  two-dimensional multi-output GP.
class_docstr_tok: ["Heteroskedastic","Likelihood","where","the","conditional","distribution","is","given","by","a","TensorFlow","Probability","Distribution",".","The","`","loc","`","and","`","scale","`","of","the","distribution","are","given","by","a","two-dimensional","multi-output","GP","."]
docstr: :param distribution_class: distribution class parameterized by `loc` and `scale`
      as first and second argument, respectively.
  :param scale_transform: callable/bijector applied to the latent
      function modelling the scale to ensure its positivity.
      Typically, `tf.exp` or `tf.softplus`, but can be any function f: R -> R^+. Defaults to exp if not explicitly specified.
docstr_tok: [":","param","distribution_class",":","distribution","class","parameterized","by","`","loc","`","and","`","scale","`","as","first","and","second","argument",",","respectively",".",":","param","scale_transform",":","callable\/bijector","applied","to","the","latent","function","modelling","the","scale","to","ensure","its","positivity",".","Typically",",","`","tf.exp","`","or","`","tf.softplus","`",",","but","can","be","any","function","f",":","R","-",">","R^+",".","Defaults","to","exp","if","not","explicitly","specified","."]
code: def __init__(
      self,
      distribution_class: Type[
          tfp.distributions.Distribution
      ] = tfp.distributions.Normal,
      scale_transform: Optional[tfp.bijectors.Bijector] = None,
      **kwargs: Any,
  ) -> None:
      """
      :param distribution_class: distribution class parameterized by `loc` and `scale`
          as first and second argument, respectively.
      :param scale_transform: callable/bijector applied to the latent
          function modelling the scale to ensure its positivity.
          Typically, `tf.exp` or `tf.softplus`, but can be any function f: R -> R^+. Defaults to exp if not explicitly specified.
      """
      if scale_transform is None:
          scale_transform = positive(base="exp")
      self.scale_transform = scale_transform
  
      @check_shapes(
          "F: [batch..., 2]",
      )
      def conditional_distribution(
          F: TensorType,
      ) -> tfp.distributions.Distribution:
          loc = F[..., :1]
          scale = self.scale_transform(F[..., 1:])
          return distribution_class(loc, scale)
  
      super().__init__(
          latent_dim=2,
          conditional_distribution=conditional_distribution,
          **kwargs,
      )
  
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 1 to create a new HeteroskedasticTFPConditional object from inherited base classes: MultiLatentTFPConditional with example: obj = HeteroskedasticTFPConditional(distribution_class, scale_transform)