code: def get_rel_pos(
      q_size: int, k_size: int, rel_pos: torch.Tensor
  ) -> torch.Tensor:
      """
      Get relative positional embeddings according to the relative positions of
          query and key sizes.
      Args:
          q_size (int): size of query q.
          k_size (int): size of key k.
          rel_pos (Tensor): relative position embeddings (L, C).
  
      Returns:
          Extracted positional embeddings according to relative positions.
      """
      max_rel_dist = int(2 * max(q_size, k_size) - 1)
      # Interpolate rel pos if needed.
      if rel_pos.shape[0] != max_rel_dist:
          # Interpolate rel pos.
          rel_pos_resized = F.interpolate(
              rel_pos.reshape(1, rel_pos.shape[0], -1).permute(0, 2, 1),
              size=max_rel_dist,
              mode="linear",
          )
          rel_pos_resized = rel_pos_resized.reshape(
              -1, max_rel_dist
          ).permute(1, 0)
      else:
          rel_pos_resized = rel_pos
  
      # Scale the coords with short length if shapes for q and k are different.
      q_coords = torch.arange(q_size)[:, None] * max(
          k_size / q_size, 1.0
      )
      k_coords = torch.arange(k_size)[None, :] * max(
          q_size / k_size, 1.0
      )
      relative_coords = (q_coords - k_coords) + (k_size - 1) * max(
          q_size / k_size, 1.0
      )
  
      return rel_pos_resized[relative_coords.long()]
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from typing import Optional, Tuple, Type
  from .common import LayerNorm2d, MLPBlock
label_desc: Use image node_id 3 for calling a global function with example usage: get_rel_pos(q_size, k_size, rel_pos) and returns: rel_pos_resized