class_docstr: Convolution-augmented Emformer layer that constitutes ConvEmformer.
  
  Args:
      input_dim (int): input dimension.
      num_heads (int): number of attention heads.
      ffn_dim: (int): hidden layer dimension of feedforward network.
      segment_length (int): length of each input segment.
      kernel_size (int): size of kernel to use in convolution module.
      dropout (float, optional): dropout probability. (Default: 0.0)
      ffn_activation (str, optional): activation function to use in feedforward network.
          Must be one of ("relu", "gelu", "silu"). (Default: "relu")
      left_context_length (int, optional): length of left context. (Default: 0)
      right_context_length (int, optional): length of right context. (Default: 0)
      max_memory_size (int, optional): maximum number of memory elements to use. (Default: 0)
      weight_init_gain (float or None, optional): scale factor to apply when initializing
          attention module parameters. (Default: ``None``)
      tanh_on_mem (bool, optional): if ``True``, applies tanh to memory elements. (Default: ``False``)
      negative_inf (float, optional): value to use for negative infinity in attention weights. (Default: -1e8)
      conv_activation (str, optional): activation function to use in convolution module.
          Must be one of ("relu", "gelu", "silu"). (Default: "silu")
code: def _apply_pre_attention(
      self,
      utterance: torch.Tensor,
      right_context: torch.Tensor,
      summary: torch.Tensor,
  ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
      x = torch.cat([right_context, utterance, summary])
      ffn0_out = self.ffn0(x)
      layer_norm_input_out = self.layer_norm_input(ffn0_out)
      (
          layer_norm_input_right_context,
          layer_norm_input_utterance,
          layer_norm_input_summary,
      ) = (
          layer_norm_input_out[: right_context.size(0)],
          layer_norm_input_out[
              right_context.size(0) : right_context.size(0)
              + utterance.size(0)
          ],
          layer_norm_input_out[
              right_context.size(0) + utterance.size(0) :
          ],
      )
      return (
          ffn0_out,
          layer_norm_input_right_context,
          layer_norm_input_utterance,
          layer_norm_input_summary,
      )
  
imports: import math
  from typing import List, Optional, Tuple
  import torch
  from torchaudio.models.emformer import _EmformerAttention, _EmformerImpl, _get_weight_init_gains
label_desc: Use image node_id 5 for calling the _ConvEmformerLayer obj's underlying member method code with example usage: obj._apply_pre_attention(utterance, right_context, summary) and returns: ffn0_out,  layer_norm_input_right_context,  layer_norm_input_utterance,  layer_norm_input_summary