class_docstr: Composite `FeatureConnector` for a `dict` where each value is a list.
  
  `Sequence` correspond to sequence of `tfds.features.FeatureConnector`. At
  generation time, a list for each of the sequence element is given. The output
  of `tf.data.Dataset` will batch all the elements of the sequence together.
  
  If the length of the sequence is static and known in advance, it should be
  specified in the constructor using the `length` param.
  
  Note that `Sequence` does not support features which are of type
  `tf.io.FixedLenSequenceFeature`.
  
  Example:
  At construction time:
  
  ```
  tfds.features.Sequence(tfds.features.Image(), length=NB_FRAME)
  ```
  
  or:
  
  ```
  tfds.features.Sequence({
      'frame': tfds.features.Image(shape=(64, 64, 3))
      'action': tfds.features.ClassLabel(['up', 'down', 'left', 'right'])
  }, length=NB_FRAME)
  ```
  
  During data generation:
  
  ```
  yield {
      'frame': np.ones(shape=(NB_FRAME, 64, 64, 3)),
      'action': ['left', 'left', 'up', ...],
  }
  ```
  
  Tensor returned by `.as_dataset()`:
  
  ```
  {
      'frame': tf.Tensor(shape=(NB_FRAME, 64, 64, 3), dtype=tf.uint8),
      'action': tf.Tensor(shape=(NB_FRAME,), dtype=tf.int64),
  }
  ```
  
  At generation time, you can specify a list of features dict, a dict of list
  values or a stacked numpy array. The lists will automatically be distributed
  into their corresponding `FeatureConnector`.
code: def catalog_documentation(
      self,
  ) -> List[feature_lib.CatalogFeatureDocumentation]:
      sub_feature_docs = self._feature.catalog_documentation()
  
      # If it's a sequence of a single feature, then we add more details.
      if len(sub_feature_docs) == 1:
          sub_feature_doc = sub_feature_docs[0]
          return [
              sub_feature_doc.replace(
                  # Embed type of feature in class name, e.g. Sequence(tf.int64)
                  cls_name=f"{type(self).__name__}({sub_feature_doc.cls_name})",
                  tensor_info=self._add_length_dim(
                      sub_feature_doc.tensor_info
                  ),
                  description=self._doc.desc
                  or sub_feature_doc.description,
                  value_range=self._doc.value_range
                  or sub_feature_doc.value_range,
              )
          ]
  
      result = []
      for documentation in sub_feature_docs:
          if not documentation.name:
              # Override the nested FeaturesDict to become a Sequence.
              documentation = documentation.replace(
                  cls_name=type(self).__name__,
                  description=self._doc.desc
                  or documentation.description,
                  value_range=self._doc.value_range
                  or documentation.value_range,
              )
          result.append(documentation)
      return result
  
imports: from __future__ import annotations
  from typing import List, Optional, Union
  import numpy
  from tensorflow_datasets.core import utils
  from tensorflow_datasets.core.features import feature
  from tensorflow_datasets.core.features import features_dict
  from tensorflow_datasets.core.features import tensor_feature
  from tensorflow_datasets.core.features import top_level_feature
  from tensorflow_datasets.core.proto import feature_pb2
  from tensorflow_datasets.core.utils import py_utils
  from tensorflow_datasets.core.utils import tree_utils
  from tensorflow_datasets.core.utils import type_utils
label_desc: Use image node_id 17 for calling the Sequence obj's underlying member method code with example usage: obj.catalog_documentation() and returns: result, list