docstr: ConcatAdaptLayer forward.
  
  Args:
      main: tensor or tuple or list
            activations in the main neural network, which are adapted
            tuple/list may be useful when we want to apply the adaptation
              to both normal and skip connection at once
      enroll: tensor or tuple or list
              embedding extracted from enrollment
              tuple/list may be useful when we want to apply the adaptation
                to both normal and skip connection at once
docstr_tok: ["ConcatAdaptLayer","forward",".","Args",":","main",":","tensor","or","tuple","or","list","activations","in","the","main","neural","network",",","which","are","adapted","tuple\/list","may","be","useful","when","we","want","to","apply","the","adaptation","to","both","normal","and","skip","connection","at","once","enroll",":","tensor","or","tuple","or","list","embedding","extracted","from","enrollment","tuple\/list","may","be","useful","when","we","want","to","apply","the","adaptation","to","both","normal","and","skip","connection","at","once"]
code: def forward(self, main, enroll):
      """ConcatAdaptLayer forward.
  
      Args:
          main: tensor or tuple or list
                activations in the main neural network, which are adapted
                tuple/list may be useful when we want to apply the adaptation
                  to both normal and skip connection at once
          enroll: tensor or tuple or list
                  embedding extracted from enrollment
                  tuple/list may be useful when we want to apply the adaptation
                    to both normal and skip connection at once
      """
      assert type(main) is type(enroll)
      orig_type = type(main)
      main, enroll = into_tuple(main), into_tuple(enroll)
      assert len(main) == len(enroll) == self.ninputs
  
      out = []
      for transform, main0, enroll0 in zip(
          self.transform, main, enroll
      ):
          out.append(
              transform(
                  torch.cat(
                      (main0, enroll0[:, :, None].expand(main0.shape)),
                      dim=1,
                  ).permute(0, 2, 1)
              ).permute(0, 2, 1)
          )
      return into_orig_type(tuple(out), orig_type)
  
file_path: espnet/espnet2/enh/layers/adapt_layers.py
imports: from functools import partial
  import torch
  import torch.nn
label_desc: Use image node_id 2 for calling the ConcatAdaptLayer obj's underlying member method code with example usage: obj.forward(main, enroll) and returns: into_orig_type