docstr: DenselyConnectedBlock forward.
  
  Args:
      input (torch.Tensor): (B, C, T_in, F_in)
  Returns:
      out (torch.Tensor): (B, C, T_out, F_out)
docstr_tok: ["DenselyConnectedBlock","forward",".","Args",":","input","(","torch.Tensor",")",":","(","B",",","C",",","T_in",",","F_in",")","Returns",":","out","(","torch.Tensor",")",":","(","B",",","C",",","T_out",",","F_out",")"]
code: def forward(self, input):
      """DenselyConnectedBlock forward.
  
      Args:
          input (torch.Tensor): (B, C, T_in, F_in)
      Returns:
          out (torch.Tensor): (B, C, T_out, F_out)
      """
      out = self.conv[0](input)
      outputs = [input, out]
      num_layers = len(self.conv)
      for idx, layer in enumerate(self.conv[1:]):
          out = layer(torch.cat(outputs, dim=1))
          if idx < num_layers - 1:
              outputs.append(out)
      return out
  
imports: from typing import List
  import torch
  import torch.nn
  from espnet2.enh.layers.conv_utils import conv2d_output_shape, convtransp2d_output_shape
label_desc: Use image node_id 2 for calling the DenselyConnectedBlock obj's underlying member method code with example usage: obj.forward(input) and returns: out