code: def make_ma_observation_matrix(coefficients):
      """Build observation matrix for an moving average StateSpaceModel.
  
      When applied in the observation equation, this row vector extracts the
      current (topmost) value and then takes a linear combination of previous
      noise values that were added during previous recursive steps:
  
      ```
      observation_matrix = [1, theta[0], theta[1], ..., theta[p-1]]
      ```
  
      To ensure broadcasting with the transition matrix, we return a shape of:
      `concat([batch_shape, [1, order])`
  
      Args:
        coefficients: float `Tensor` of shape `concat([batch_shape, [order - 1])`.
      Returns:
        ma_matrix: float `Tensor` with shape `concat([batch_shape, [1, order])`.
      """
      batch_shape = ps.shape(coefficients)[:-1]
      top_entry = tf.ones(
          ps.concat([batch_shape, [1, 1]], axis=0),
          dtype=coefficients.dtype,
      )
      return tf.concat(
          [top_entry, coefficients[..., tf.newaxis, :]], axis=-1
      )
  
file_path: probability/tensorflow_probability/python/sts/components/autoregressive_moving_average.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.distributions import linear_gaussian_ssm
  from tensorflow_probability.python.distributions import mvn_diag
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.sts.components.autoregressive import make_ar_transition_matrix
  from tensorflow_probability.python.sts.internal import util
label_desc: Use image node_id 1 for calling a global function with example usage: make_ma_observation_matrix(coefficients) and returns: tf