class_docstr: Posterior predictive in a conjugate Multi-task GP regression model.
code: def _parameter_properties(cls, dtype, num_classes=None):
      def _event_ndims_fn(self):
          return tf.nest.map_structure(
              lambda nd: nd + 1, self.kernel.feature_ndims
          )
  
      return dict(
          index_points=parameter_properties.ParameterProperties(
              event_ndims=_event_ndims_fn,
              shape_fn=parameter_properties.SHAPE_FN_NOT_IMPLEMENTED,
          ),
          observations=parameter_properties.ParameterProperties(
              event_ndims=2,
              shape_fn=parameter_properties.SHAPE_FN_NOT_IMPLEMENTED,
          ),
          observation_index_points=parameter_properties.ParameterProperties(
              event_ndims=_event_ndims_fn,
              shape_fn=parameter_properties.SHAPE_FN_NOT_IMPLEMENTED,
          ),
          observations_is_missing=parameter_properties.ParameterProperties(
              event_ndims=2,
              shape_fn=parameter_properties.SHAPE_FN_NOT_IMPLEMENTED,
          ),
          kernel=parameter_properties.BatchedComponentProperties(),
          observation_noise_variance=parameter_properties.ParameterProperties(
              event_ndims=0,
              shape_fn=lambda sample_shape: sample_shape[:-1],
              default_constraining_bijector_fn=(
                  lambda: softplus_bijector.Softplus(
                      low=dtype_util.eps(dtype)
                  )
              ),
          ),
          predictive_noise_variance=parameter_properties.ParameterProperties(
              event_ndims=0,
              shape_fn=lambda sample_shape: sample_shape[:-1],
              default_constraining_bijector_fn=(
                  lambda: softplus_bijector.Softplus(
                      low=dtype_util.eps(dtype)
                  )
              ),
          ),
          _observation_scale=parameter_properties.BatchedComponentProperties(),
      )
  
imports: import functools
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import softplus
  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.distributions import multitask_gaussian_process
  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_probability.python.math.psd_kernels.internal import util
label_desc: Use image node_id 14 for calling the MultiTaskGaussianProcessRegressionModel obj's underlying member method code with example usage: obj._parameter_properties(cls, dtype, num_classes) and returns: dict, tf