class_docstr: Represents a Conformer block as described in
  :cite:t:`https://doi.org/10.48550/arxiv.2005.08100`.
code: def _forward_self_attn(
      self,
      seqs: Tensor,
      padding_mask: Optional[PaddingMask],
      self_attn_mask: Optional[AttentionMask],
  ) -> Tensor:
      residual = seqs
  
      seqs = self.self_attn_layer_norm(seqs)
  
      seqs = self.self_attn(
          seqs,
          padding_mask,
          keys=seqs,
          key_padding_mask=padding_mask,
          values=seqs,
          attn_mask=self_attn_mask,
      )
  
      if self.self_attn_dropout is not None:
          seqs = self.self_attn_dropout(seqs)
  
      return seqs + residual
  
file_path: fairseq2/src/fairseq2/models/conformer/block.py
imports: from typing import Optional, Tuple
  from torch import Tensor
  from torch.nn import Dropout
  from fairseq2.models.conformer.convolution import ConformerConvolution
  from fairseq2.nn.normalization import LayerNorm
  from fairseq2.nn.padding import PaddingMask
  from fairseq2.nn.transformer import AttentionMask, FeedForwardNetwork, LayerNormFactory, MultiheadAttention, TransformerEncoderLayer, create_standard_layer_norm
  from fairseq2.typing import DataType, Device, finaloverride
label_desc: Use image node_id 4 for calling the ConformerBlock obj's underlying member method code with example usage: obj._forward_self_attn(seqs, padding_mask, _attn_mask) and returns: unknown