class_docstr: Marginal distribution of a Multitask GP at finitely many points.
docstr: Return the posterior predictive distribution associated with this distribution.
  
  Returns the posterior predictive distribution `p(Y' | X, Y, X')` where:
    * `X'` is `predictive_index_points`
    * `X` is `self.index_points`.
    * `Y` is `observations`.
  
  This is equivalent to using the
  `MultiTaskGaussianProcessRegressionModel.precompute_regression_model`
  method.
  
  WARNING: This method assumes `predictive_index_points` is the only varying
  parameter (i.e. is a `Variable` / changes after initialization) and hence
  is not tape-safe.
  
  Args:
    observations: `float` `Tensor` representing collection, or batch of
      collections, of observations corresponding to
      `self.index_points`. Shape has the form `[b1, ..., bB, t, e]`, where
      `t` is the number of tasks. The batch shape `[b1, ..., bB]` must be
      broadcastable with the shapes of all other batched parameters
    observations_is_missing:  `bool` `Tensor` of shape `[..., e, t]`,
      representing a batch of boolean masks.  When
      `observations_is_missing` is not `None`, this distribution is
      conditioned only on the observations for which the
      corresponding elements of `observations_is_missing` are `False`.
    predictive_index_points: (Nested) `float` `Tensor` representing finite
      collection, or batch of collections, of points in the index set over
      which the GP is defined.
      Shape (or shape of each nested component) has the form
      `[b1, ..., bB, e, f1, ..., fF]` where `F` is the number of feature
      dimensions and must equal `kernel.feature_ndims` (or its corresponding
      nested component) and `e` is the number (size) of predictive index
      points in each batch. The batch shape must be broadcastable with this
      distributions `batch_shape`.
      Default value: `None`.
    **kwargs: Any other keyword arguments to pass / override.
  
  Returns:
    mtgprm: An instance of `Distribution` that represents the posterior
      predictive.
docstr_tok: ["Return","the","posterior","predictive","distribution","associated","with","this","distribution",".","Returns","the","posterior","predictive","distribution","`","p","(","Y","'","|","X",",","Y",",","X","'",")","`","where",":","*","`","X","'","`","is","`","predictive_index_points","`","*","`","X","`","is","`","self.index_points","`",".","*","`","Y","`","is","`","observations","`",".","This","is","equivalent","to","using","the","`","MultiTaskGaussianProcessRegressionModel.precompute_regression_model","`","method",".","WARNING",":","This","method","assumes","`","predictive_index_points","`","is","the","only","varying","parameter","(","i.e",".","is","a","`","Variable","`","\/","changes","after","initialization",")","and","hence","is","not","tape-safe",".","Args",":","observations",":","`","float","`","`","Tensor","`","representing","collection",",","or","batch","of","collections",",","of","observations","corresponding","to","`","self.index_points","`",".","Shape","has","the","form","`","[","b1",",","...",",","bB",",","t",",","e","]","`",",","where","`","t","`","is","the","number","of","tasks",".","The","batch","shape","`","[","b1",",","...",",","bB","]","`","must","be","broadcastable","with","the","shapes","of","all","other","batched","parameters","observations_is_missing",":","`","bool","`","`","Tensor","`","of","shape","`","[","...",",","e",",","t","]","`",",","representing","a","batch","of","boolean","masks",".","When","`","observations_is_missing","`","is","not","`","None","`",",","this","distribution","is","conditioned","only","on","the","observations","for","which","the","corresponding","elements","of","`","observations_is_missing","`","are","`","False","`",".","predictive_index_points",":","(","Nested",")","`","float","`","`","Tensor","`","representing","finite","collection",",","or","batch","of","collections",",","of","points","in","the","index","set","over","which","the","GP","is","defined",".","Shape","(","or","shape","of","each","nested","component",")","has","the","form","`","[","b1",",","...",",","bB",",","e",",","f1",",","...",",","fF","]","`","where","`","F","`","is","the","number","of","feature","dimensions","and","must","equal","`","kernel.feature_ndims","`","(","or","its","corresponding","nested","component",")","and","`","e","`","is","the","number","(","size",")","of","predictive","index","points","in","each","batch",".","The","batch","shape","must","be","broadcastable","with","this","distributions","`","batch_shape","`",".","Default","value",":","`","None","`",".","*","*","kwargs",":","Any","other","keyword","arguments","to","pass","\/","override",".","Returns",":","mtgprm",":","An","instance","of","`","Distribution","`","that","represents","the","posterior","predictive","."]
code: def posterior_predictive(
      self,
      observations,
      observations_is_missing=None,
      predictive_index_points=None,
      **kwargs,
  ):
      """Return the posterior predictive distribution associated with this distribution.
  
      Returns the posterior predictive distribution `p(Y' | X, Y, X')` where:
        * `X'` is `predictive_index_points`
        * `X` is `self.index_points`.
        * `Y` is `observations`.
  
      This is equivalent to using the
      `MultiTaskGaussianProcessRegressionModel.precompute_regression_model`
      method.
  
      WARNING: This method assumes `predictive_index_points` is the only varying
      parameter (i.e. is a `Variable` / changes after initialization) and hence
      is not tape-safe.
  
      Args:
        observations: `float` `Tensor` representing collection, or batch of
          collections, of observations corresponding to
          `self.index_points`. Shape has the form `[b1, ..., bB, t, e]`, where
          `t` is the number of tasks. The batch shape `[b1, ..., bB]` must be
          broadcastable with the shapes of all other batched parameters
        observations_is_missing:  `bool` `Tensor` of shape `[..., e, t]`,
          representing a batch of boolean masks.  When
          `observations_is_missing` is not `None`, this distribution is
          conditioned only on the observations for which the
          corresponding elements of `observations_is_missing` are `False`.
        predictive_index_points: (Nested) `float` `Tensor` representing finite
          collection, or batch of collections, of points in the index set over
          which the GP is defined.
          Shape (or shape of each nested component) has the form
          `[b1, ..., bB, e, f1, ..., fF]` where `F` is the number of feature
          dimensions and must equal `kernel.feature_ndims` (or its corresponding
          nested component) and `e` is the number (size) of predictive index
          points in each batch. The batch shape must be broadcastable with this
          distributions `batch_shape`.
          Default value: `None`.
        **kwargs: Any other keyword arguments to pass / override.
  
      Returns:
        mtgprm: An instance of `Distribution` that represents the posterior
          predictive.
      """
      from tensorflow_probability.python.experimental.distributions import (
          multitask_gaussian_process_regression_model as mtgprm,
      )  # pylint:disable=g-import-not-at-top
  
      if self.index_points is None:
          raise ValueError(
              "Expected that `self.index_points` is not `None`. Using "
              "`self.index_points=None` is equivalent to using a `GaussianProcess` "
              "prior, which this class encapsulates."
          )
      argument_dict = {
          "kernel": self.kernel,
          "observation_index_points": self.index_points,
          "observations_is_missing": observations_is_missing,
          "observations": observations,
          "index_points": predictive_index_points,
          "observation_noise_variance": self.observation_noise_variance,
          "cholesky_fn": self.cholesky_fn,
          "mean_fn": self.mean_fn,
          "validate_args": self.validate_args,
          "allow_nan_stats": self.allow_nan_stats,
      }
      argument_dict.update(**kwargs)
  
      return mtgprm.MultiTaskGaussianProcessRegressionModel.precompute_regression_model(
          **argument_dict
      )
  
imports: import functools
  import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import cholesky_util
  from tensorflow_probability.python.distributions import distribution
  from tensorflow_probability.python.distributions import mvn_linear_operator
  from tensorflow_probability.python.distributions.internal import stochastic_process_util
  from tensorflow_probability.python.experimental.linalg import linear_operator_unitary
  from tensorflow_probability.python.experimental.psd_kernels import multitask_kernel
  from tensorflow_probability.python.internal import batch_shape_lib
  from tensorflow_probability.python.internal import distribution_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import nest_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import reparameterization
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.internal import tensorshape_util
  from tensorflow.python.util import nest
label_desc: Use image node_id 2 for calling the MultiTaskGaussianProcess obj's underlying member method code with example usage: obj.posterior_predictive(observations, observations_is_missing, predictive_index_points) and returns: mtgprm