class_docstr: Transfomer decoder module.
  
  Args:
      odim (int): Output diminsion.
      self_attention_layer_type (str): Self-attention layer type.
      attention_dim (int): Dimension of attention.
      attention_heads (int): The number of heads of multi head attention.
      conv_wshare (int): The number of kernel of convolution. Only used in
          self_attention_layer_type == "lightconv*" or "dynamiconv*".
      conv_kernel_length (Union[int, str]): Kernel size str of convolution
          (e.g. 71_71_71_71_71_71). Only used in self_attention_layer_type
          == "lightconv*" or "dynamiconv*".
      conv_usebias (bool): Whether to use bias in convolution. Only used in
          self_attention_layer_type == "lightconv*" or "dynamiconv*".
      linear_units (int): The number of units of position-wise feed forward.
      num_blocks (int): The number of decoder blocks.
      dropout_rate (float): Dropout rate.
      positional_dropout_rate (float): Dropout rate after adding positional encoding.
      self_attention_dropout_rate (float): Dropout rate in self-attention.
      src_attention_dropout_rate (float): Dropout rate in source-attention.
      input_layer (Union[str, torch.nn.Module]): Input layer type.
      use_output_layer (bool): Whether to use output layer.
      pos_enc_class (torch.nn.Module): Positional encoding module class.
          `PositionalEncoding `or `ScaledPositionalEncoding`
      normalize_before (bool): Whether to use layer_norm before the first block.
      concat_after (bool): Whether to concat attention layer's input and output.
          if True, additional linear will be applied.
          i.e. x -> x + linear(concat(x, att(x)))
          if False, no additional linear will be applied. i.e. x -> x + att(x)
docstr: Forward decoder.
  
  Args:
      tgt (torch.Tensor): Input token ids, int64 (#batch, maxlen_out) if
          input_layer == "embed". In the other case, input tensor
          (#batch, maxlen_out, odim).
      tgt_mask (torch.Tensor): Input token mask (#batch, maxlen_out).
          dtype=torch.uint8 in PyTorch 1.2- and dtype=torch.bool in PyTorch 1.2+
          (include 1.2).
      memory (torch.Tensor): Encoded memory, float32 (#batch, maxlen_in, feat).
      memory_mask (torch.Tensor): Encoded memory mask (#batch, maxlen_in).
          dtype=torch.uint8 in PyTorch 1.2- and dtype=torch.bool in PyTorch 1.2+
          (include 1.2).
  
  Returns:
      torch.Tensor: Decoded token score before softmax (#batch, maxlen_out, odim)
             if use_output_layer is True. In the other case,final block outputs
             (#batch, maxlen_out, attention_dim).
      torch.Tensor: Score mask before softmax (#batch, maxlen_out).
docstr_tok: ["Forward","decoder",".","Args",":","tgt","(","torch.Tensor",")",":","Input","token","ids",",","int64","(","#","batch",",","maxlen_out",")","if","input_layer","==","``","embed","''",".","In","the","other","case",",","input","tensor","(","#","batch",",","maxlen_out",",","odim",")",".","tgt_mask","(","torch.Tensor",")",":","Input","token","mask","(","#","batch",",","maxlen_out",")",".","dtype=torch.uint8","in","PyTorch","1.2-","and","dtype=torch.bool","in","PyTorch","1.2+","(","include","1.2",")",".","memory","(","torch.Tensor",")",":","Encoded","memory",",","float32","(","#","batch",",","maxlen_in",",","feat",")",".","memory_mask","(","torch.Tensor",")",":","Encoded","memory","mask","(","#","batch",",","maxlen_in",")",".","dtype=torch.uint8","in","PyTorch","1.2-","and","dtype=torch.bool","in","PyTorch","1.2+","(","include","1.2",")",".","Returns",":","torch.Tensor",":","Decoded","token","score","before","softmax","(","#","batch",",","maxlen_out",",","odim",")","if","use_output_layer","is","True",".","In","the","other","case",",","final","block","outputs","(","#","batch",",","maxlen_out",",","attention_dim",")",".","torch.Tensor",":","Score","mask","before","softmax","(","#","batch",",","maxlen_out",")","."]
code: def forward(self, tgt, tgt_mask, memory, memory_mask):
      """Forward decoder.
  
      Args:
          tgt (torch.Tensor): Input token ids, int64 (#batch, maxlen_out) if
              input_layer == "embed". In the other case, input tensor
              (#batch, maxlen_out, odim).
          tgt_mask (torch.Tensor): Input token mask (#batch, maxlen_out).
              dtype=torch.uint8 in PyTorch 1.2- and dtype=torch.bool in PyTorch 1.2+
              (include 1.2).
          memory (torch.Tensor): Encoded memory, float32 (#batch, maxlen_in, feat).
          memory_mask (torch.Tensor): Encoded memory mask (#batch, maxlen_in).
              dtype=torch.uint8 in PyTorch 1.2- and dtype=torch.bool in PyTorch 1.2+
              (include 1.2).
  
      Returns:
          torch.Tensor: Decoded token score before softmax (#batch, maxlen_out, odim)
                 if use_output_layer is True. In the other case,final block outputs
                 (#batch, maxlen_out, attention_dim).
          torch.Tensor: Score mask before softmax (#batch, maxlen_out).
  
      """
      x = self.embed(tgt)
      x, tgt_mask, memory, memory_mask = self.decoders(
          x, tgt_mask, memory, memory_mask
      )
      if self.normalize_before:
          x = self.after_norm(x)
      if self.output_layer is not None:
          x = self.output_layer(x)
      return x, tgt_mask
  
imports: import logging
  from typing import Any, List, Tuple
  import torch
  from espnet.nets.pytorch_backend.nets_utils import rename_state_dict
  from espnet.nets.pytorch_backend.transformer.attention import MultiHeadedAttention
  from espnet.nets.pytorch_backend.transformer.decoder_layer import DecoderLayer
  from espnet.nets.pytorch_backend.transformer.dynamic_conv import DynamicConvolution
  from espnet.nets.pytorch_backend.transformer.dynamic_conv2d import DynamicConvolution2D
  from espnet.nets.pytorch_backend.transformer.embedding import PositionalEncoding
  from espnet.nets.pytorch_backend.transformer.layer_norm import LayerNorm
  from espnet.nets.pytorch_backend.transformer.lightconv import LightweightConvolution
  from espnet.nets.pytorch_backend.transformer.lightconv2d import LightweightConvolution2D
  from espnet.nets.pytorch_backend.transformer.mask import subsequent_mask
  from espnet.nets.pytorch_backend.transformer.positionwise_feed_forward import PositionwiseFeedForward
  from espnet.nets.pytorch_backend.transformer.repeat import repeat
  from espnet.nets.scorer_interface import BatchScorerInterface
label_desc: Use image node_id 2 for calling the Decoder obj's underlying member method code with example usage: obj.forward(tgt, tgt_mask, memory, memory_mask) and returns: x,  tgt_mask