class_docstr: Implements a single Transformer decoder layer with cross (encoder) attention as in.
  
  [Vaswani, 2017](https://arxiv.org/abs/1706.03762).
  
  Decoder layers are similar to encoder layers but:
  
  1. Self-attention is limited in a causal (auto-regressive) manner.
  2. Attend over all of the encoder states.
docstr: Overridden to allow swapping out of the attention class at instantiation.
docstr_tok: ["Overridden","to","allow","swapping","out","of","the","attention","class","at","instantiation","."]
code: def build_self_attention(
      self, n_heads: int = None, dim: int = None, dropout: float = 0
  ) -> MultiHeadAttention:
      """
      Overridden to allow swapping out of the attention class at instantiation.
      """
      return self.swappables.self_attention(  # type: ignore
          opt=self.opt, n_heads=n_heads, dim=dim, dropout=dropout
      )
  
imports: from __future__ import annotations
  from abc import ABC
  from typing import Dict, Optional, Tuple
  import numpy
  import torch
  import torch.nn
  from parlai.agents.transformer.modules import create_position_codes, get_n_positions_from_options, LAYER_NORM_EPS, MultiHeadAttention, TransformerFFN
  from parlai.agents.transformer.modules.modular import swappable
  from parlai.core.opt import Opt
  from parlai.core.params import default
  from parlai.core.torch_agent import DictionaryAgent
  from parlai.utils.misc import warn_once
  from parlai.utils.torch import PipelineHelper
  from parlai.utils.fsdp import fsdp_wrap
  from parlai.nn.checkpoint import checkpoint_wrapper
label_desc: Use image node_id 2 for calling the TransformerDecoderLayer obj's underlying member method code with example usage: obj.build_self_attention(n_heads, dim, dropout) and returns: self