class_docstr: A sequence of modules with potentially inferring shape on construction.
  
  If layers are passed with names, these can be referenced with dot notation.
  
  Arguments
  ---------
  input_shape : iterable
      A list or tuple of ints or None, representing the expected shape of an
      input tensor. None represents a variable-length dimension. If no
      ``input_shape`` is passed, no shape inference will be performed.
  *layers, **named_layers
      The inputs are treated as a list of layers to be
      applied in sequence. The output shape of each layer is used to
      infer the shape of the following layer. If a tuple is returned,
      only the shape of the first element is used to determine input
      shape of the next layer (e.g. RNN returns output, hidden).
  
  Example
  -------
  >>> inputs = torch.rand(10, 40, 50)
  >>> model = Sequential(input_shape=inputs.shape)
  >>> model.append(Linear, n_neurons=100, layer_name="layer1")
  >>> model.append(Linear, n_neurons=200, layer_name="layer2")
  >>> outputs = model(inputs)
  >>> outputs.shape
  torch.Size([10, 40, 200])
  >>> outputs = model.layer1(inputs)
  >>> outputs.shape
  torch.Size([10, 40, 100])
docstr: Add a layer to the list of layers, inferring shape if necessary.
  
  Arguments
  ---------
  layer : A torch.nn.Module class or object
      If the layer is a class, it should accept an argument called
      ``input_shape`` which will be inferred and passed. If the layer
      is a module object, it is added as-is.
  layer_name : str
      The name of the layer, for reference. If the name is in use,
      ``_{count}`` will be appended.
  *args, **kwargs
      These are passed to the layer if it is constructed.
docstr_tok: ["Add","a","layer","to","the","list","of","layers",",","inferring","shape","if","necessary",".","Arguments","--","--","--","--","-","layer",":","A","torch.nn.Module","class","or","object","If","the","layer","is","a","class",",","it","should","accept","an","argument","called","``","input_shape","``","which","will","be","inferred","and","passed",".","If","the","layer","is","a","module","object",",","it","is","added","as-is",".","layer_name",":","str","The","name","of","the","layer",",","for","reference",".","If","the","name","is","in","use",",","``","_","{","count","}","``","will","be","appended",".","*","args",",","*","*","kwargs","These","are","passed","to","the","layer","if","it","is","constructed","."]
code: def append(self, layer, *args, layer_name=None, **kwargs):
      """Add a layer to the list of layers, inferring shape if necessary.
  
      Arguments
      ---------
      layer : A torch.nn.Module class or object
          If the layer is a class, it should accept an argument called
          ``input_shape`` which will be inferred and passed. If the layer
          is a module object, it is added as-is.
      layer_name : str
          The name of the layer, for reference. If the name is in use,
          ``_{count}`` will be appended.
      *args, **kwargs
          These are passed to the layer if it is constructed.
      """
  
      # Compute layer_name
      if layer_name is None:
          layer_name = str(len(self))
      elif layer_name in self:
          index = 0
          while f"{layer_name}_{index}" in self:
              index += 1
          layer_name = f"{layer_name}_{index}"
  
      # Check if it needs to be constructed with input shape
      if self.input_shape:
          argspec = inspect.getfullargspec(layer)
          if "input_shape" in argspec.args + argspec.kwonlyargs:
              input_shape = self.get_output_shape()
              layer = layer(*args, input_shape=input_shape, **kwargs)
  
      # Finally, append the layer.
      try:
          self.add_module(layer_name, layer)
      except TypeError:
          raise ValueError(
              "Must pass `input_shape` at initialization and use "
              "modules that take `input_shape` to infer shape when "
              "using `append()`."
          )
  
imports: import torch
  import inspect
  import logging
  import operator
  import functools
  from speechbrain.nnet.linear import Linear
  from speechbrain.utils.callchains import lengths_arg_exists
label_desc: Use image node_id 2 for calling the Sequential obj's underlying member method code with example usage: obj.append(layer) without return types