code: def forward(self, x, seq_len=None):
      # x: [bs, num_attention_heads, seq_len, head_size]
      # This `if` block is unlikely to be run after we build sin/cos in `__init__`. Keep the logic here just in case.
      if seq_len > self.max_seq_len_cached:
          self.max_seq_len_cached = seq_len
          t = torch.arange(
              self.max_seq_len_cached,
              device=x.device,
              dtype=self.inv_freq.dtype,
          )
          freqs = torch.einsum("i,j->ij", t, self.inv_freq)
          # Different from paper, but it uses a different permutation in order to obtain the same calculation
          emb = torch.cat((freqs, freqs), dim=-1).to(x.device)
          self.cos_cached = emb.cos()[None, None, :, :]
          self.sin_cached = emb.sin()[None, None, :, :]
      return self.cos_cached[:seq_len, ...].to(
          x.device
      ), self.sin_cached[:seq_len, ...].to(x.device)
  
imports: from typing import Optional, Tuple, Union
  import torch
  import torch.utils.checkpoint
  from torch import nn
  from torch.nn import CrossEntropyLoss
  from ...activations import ACT2FN
  from ...file_utils import add_code_sample_docstrings, add_start_docstrings, add_start_docstrings_to_model_forward, replace_return_docstrings
  from ...modeling_outputs import BaseModelOutputWithPast, CausalLMOutputWithPast
  from ...modeling_utils import PreTrainedModel
  from ...utils import logging
  from .configuration_gpt_neox import GPTNeoXConfig
label_desc: Use image node_id 2 for calling the RotaryEmbedding obj's underlying member method code with example usage: obj.forward(x, seq_len) and returns: self,  self