class_docstr: Masks a sequence by using a mask value to skip timesteps.
  
  For each timestep in the input tensor (dimension #1 in the tensor),
  if all values in the input tensor at that timestep
  are equal to `mask_value`, then the timestep will be masked (skipped)
  in all downstream layers (as long as they support masking).
  
  If any downstream layer does not support masking yet receives such
  an input mask, an exception will be raised.
  
  Example:
  
  Consider a NumPy data array `x` of shape `(samples, timesteps, features)`,
  to be fed to an LSTM layer. You want to mask timestep #3 and #5 because you
  lack data for these timesteps. You can:
  
  - Set `x[:, 3, :] = 0.` and `x[:, 5, :] = 0.`
  - Insert a `Masking` layer with `mask_value=0.` before the LSTM layer:
  
  ```python
  samples, timesteps, features = 32, 10, 8
  inputs = np.random.random([samples, timesteps, features]).astype(np.float32)
  inputs[:, 3, :] = 0.
  inputs[:, 5, :] = 0.
  
  model = keras.models.Sequential()
  model.add(keras.layers.Masking(mask_value=0.)
  model.add(keras.layers.LSTM(32))
  output = model(inputs)
  # The time step 3 and 5 will be skipped from LSTM calculation.
  ```
  
  Note: in the Keras masking convention, a masked timestep is denoted by
  a mask value of `False`, while a non-masked (i.e. usable) timestep
  is denoted by a mask value of `True`.
code: def compute_output_shape(self, input_shape):
      return input_shape
  
file_path: keras/keras/layers/core/masking.py
imports: from keras import backend
  from keras import ops
  from keras.api_export import keras_export
  from keras.layers.layer import Layer
label_desc: Use image node_id 4 for calling the Masking obj's underlying member method code with example usage: obj.compute_output_shape(input_shape) and returns: input_shape