class_docstr: the Seg-LSTM of SkiM
  
  args:
      input_size: int, dimension of the input feature.
          The input should have shape (batch, seq_len, input_size).
      hidden_size: int, dimension of the hidden state.
      dropout: float, dropout ratio. Default is 0.
      bidirectional: bool, whether the LSTM layers are bidirectional.
          Default is False.
      norm_type: gLN, cLN. cLN is for causal implementation.
class_docstr_tok: ["the","Seg-LSTM","of","SkiM","args",":","input_size",":","int",",","dimension","of","the","input","feature",".","The","input","should","have","shape","(","batch",",","seq_len",",","input_size",")",".","hidden_size",":","int",",","dimension","of","the","hidden","state",".","dropout",":","float",",","dropout","ratio",".","Default","is","0.","bidirectional",":","bool",",","whether","the","LSTM","layers","are","bidirectional",".","Default","is","False",".","norm_type",":","gLN",",","cLN",".","cLN","is","for","causal","implementation","."]
code: def forward(self, input, hc):
      # input shape: B, T, H
  
      B, T, H = input.shape
  
      if hc is None:
          # In fist input SkiM block, h and c are not available
          d = self.num_direction
          h = torch.zeros(d, B, self.hidden_size, dtype=input.dtype).to(
              input.device
          )
          c = torch.zeros(d, B, self.hidden_size, dtype=input.dtype).to(
              input.device
          )
      else:
          h, c = hc
  
      output, (h, c) = self.lstm(input, (h, c))
      output = self.dropout(output)
      output = self.proj(
          output.contiguous().view(-1, output.shape[2])
      ).view(input.shape)
      output = input + self.norm(output)
  
      return output, (h, c)
  
file_path: espnet/espnet2/enh/layers/skim.py
imports: import torch
  import torch.nn
  from espnet2.enh.layers.dprnn import SingleRNN, merge_feature, split_feature
  from espnet2.enh.layers.tcn import choose_norm
label_desc: Use image node_id 2 for calling the SegLSTM obj's underlying member method code with example usage: obj.forward(input, hc) and returns: output,  h,  c