class_docstr: Cell class for the ConvLSTM layer.
  
  Args:
      rank: Integer, rank of the convolution, e.g. "2" for 2D convolutions.
      filters: Integer, the dimensionality of the output space
          (i.e. the number of output filters in the convolution).
      kernel_size: An integer or tuple/list of n integers, specifying the
          dimensions of the convolution window.
      strides: An integer or tuple/list of n integers, specifying the strides
          of the convolution. Specifying any stride value != 1
          is incompatible with specifying any `dilation_rate` value != 1.
      padding: One of `"valid"` or `"same"` (case-insensitive).
          `"valid"` means no padding. `"same"` results in padding evenly
          to the left/right or up/down of the input such that output
          has the same height/width dimension as the input.
      data_format: A string, one of `channels_last` (default) or
          `channels_first`. When unspecified, uses
          `image_data_format` value found in your Keras config file at
          `~/.keras/keras.json` (if exists) else 'channels_last'.
          Defaults to `'channels_last'`.
      dilation_rate: An integer or tuple/list of n integers, specifying the
          dilation rate to use for dilated convolution.
          Currently, specifying any `dilation_rate` value != 1 is
          incompatible with specifying any `strides` value != 1.
      activation: Activation function. If `None`, no activation is applied.
      recurrent_activation: Activation function to use for the recurrent step.
      use_bias: Boolean, (default `True`), whether the layer
          should use a bias vector.
      kernel_initializer: Initializer for the `kernel` weights matrix,
          used for the linear transformation of the inputs. Default:
          `"glorot_uniform"`.
      recurrent_initializer: Initializer for the `recurrent_kernel`
          weights matrix, used for the linear transformation of the recurrent
          state. Default: `"orthogonal"`.
      bias_initializer: Initializer for the bias vector. Default: `"zeros"`.
      unit_forget_bias: Boolean (default `True`). If `True`,
          add 1 to the bias of the forget gate at initialization.
          Setting it to `True` will also force `bias_initializer="zeros"`.
          This is recommended in [Jozefowicz et al.](
          https://github.com/mlresearch/v37/blob/gh-pages/jozefowicz15.pdf)
      kernel_regularizer: Regularizer function applied to the `kernel` weights
          matrix. Default: `None`.
      recurrent_regularizer: Regularizer function applied to the
          `recurrent_kernel` weights matrix. Default: `None`.
      bias_regularizer: Regularizer function applied to the bias vector.
          Default: `None`.
      activity_regularizer: Regularizer function applied to the output of the
          layer (its "activation"). Default: `None`.
      kernel_constraint: Constraint function applied to the `kernel` weights
          matrix. Default: `None`.
      recurrent_constraint: Constraint function applied to the
          `recurrent_kernel` weights matrix. Default: `None`.
      bias_constraint: Constraint function applied to the bias vector.
          Default: `None`.
      dropout: Float between 0 and 1. Fraction of the units to drop for the
          linear transformation of the inputs. Default: 0.
      recurrent_dropout: Float between 0 and 1. Fraction of the units to drop
          for the linear transformation of the recurrent state. Default: 0.
      seed: Random seed for dropout.
  
  Call arguments:
      inputs: A (2+ `rank`)D tensor.
      states:  List of state tensors corresponding to the previous timestep.
      training: Python boolean indicating whether the layer should behave in
          training mode or in inference mode. Only relevant when `dropout` or
          `recurrent_dropout` is used.
code: def build(self, inputs_shape, states_shape=None):
      if self.data_format == "channels_first":
          channel_axis = 1
          self.spatial_dims = inputs_shape[2:]
      else:
          channel_axis = -1
          self.spatial_dims = inputs_shape[1:-1]
      if None in self.spatial_dims:
          raise ValueError(
              "ConvLSTM layers only support static "
              "input shapes for the spatial dimension. "
              f"Received invalid input shape: input_shape={inputs_shape}"
          )
      if inputs_shape[channel_axis] is None:
          raise ValueError(
              "The channel dimension of the inputs (last axis) should be "
              "defined. Found None. Full input shape received: "
              f"input_shape={inputs_shape}"
          )
      self.input_spec = InputSpec(
          ndim=self.rank + 3, shape=(None,) + inputs_shape[1:]
      )
  
      input_dim = inputs_shape[channel_axis]
      self.input_dim = input_dim
      self.kernel_shape = self.kernel_size + (
          input_dim,
          self.filters * 4,
      )
      recurrent_kernel_shape = self.kernel_size + (
          self.filters,
          self.filters * 4,
      )
  
      self.kernel = self.add_weight(
          shape=self.kernel_shape,
          initializer=self.kernel_initializer,
          name="kernel",
          regularizer=self.kernel_regularizer,
          constraint=self.kernel_constraint,
      )
      self.recurrent_kernel = self.add_weight(
          shape=recurrent_kernel_shape,
          initializer=self.recurrent_initializer,
          name="recurrent_kernel",
          regularizer=self.recurrent_regularizer,
          constraint=self.recurrent_constraint,
      )
  
      if self.use_bias:
          if self.unit_forget_bias:
  
              def bias_initializer(_, *args, **kwargs):
                  return ops.concatenate(
                      [
                          self.bias_initializer(
                              (self.filters,), *args, **kwargs
                          ),
                          initializers.get("ones")(
                              (self.filters,), *args, **kwargs
                          ),
                          self.bias_initializer(
                              (self.filters * 2,), *args, **kwargs
                          ),
                      ]
                  )
  
          else:
              bias_initializer = self.bias_initializer
          self.bias = self.add_weight(
              shape=(self.filters * 4,),
              name="bias",
              initializer=bias_initializer,
              regularizer=self.bias_regularizer,
              constraint=self.bias_constraint,
          )
      else:
          self.bias = None
      self.built = True
  
imports: import tree
  from keras import activations
  from keras import backend
  from keras import constraints
  from keras import initializers
  from keras import ops
  from keras import regularizers
  from keras.layers.input_spec import InputSpec
  from keras.layers.layer import Layer
  from keras.layers.rnn.dropout_rnn_cell import DropoutRNNCell
  from keras.layers.rnn.rnn import RNN
  from keras.ops import operation_utils
  from keras.utils import argument_validation
label_desc: Use image node_id 2 for calling the ConvLSTMCell obj's underlying member method code with example usage: obj.build(inputs_shape, states_shape) and returns: ops