docstr: This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher
  resolution images.
  
  Source:
  https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174
code: def interpolate_pos_encoding(
      self, embeddings: torch.Tensor, height: int, width: int
  ) -> torch.Tensor:
      """
      This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher
      resolution images.
  
      Source:
      https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174
      """
  
      num_patches = embeddings.shape[1] - 1
      pos_embed = self.position_embedding(self.position_ids)
      num_positions = pos_embed.shape[1] - 1
      if num_patches == num_positions and height == width:
          return pos_embed
      class_pos_embed = pos_embed[:, 0]
      patch_pos_embed = pos_embed[:, 1:]
  
      embed_dim = embeddings.shape[-1]
      num_h_patches = height // self.config.patch_size
      num_w_patches = width // self.config.patch_size
      # we add a small number to avoid floating point error in the interpolation
      # see discussion at https://github.com/facebookresearch/dino/issues/8
      num_h_patches, num_w_patches = (
          num_h_patches + 0.1,
          num_w_patches + 0.1,
      )
      sqrt_num_positions = math.sqrt(num_positions)
      patch_pos_embed = patch_pos_embed.reshape(
          1, int(sqrt_num_positions), int(sqrt_num_positions), embed_dim
      )
      patch_pos_embed = patch_pos_embed.permute(0, 3, 1, 2)
      fp32_upcasting = patch_pos_embed.dtype == torch.bfloat16
      if fp32_upcasting:
          logger.warning_once(
              "Upcasting patch_pos_embed to fp32 for interpolation since `upsample_bicubic2d_out_frame` in nn.functional.interpolate "
              "is not implemented for 'torch.bfloat16' dtype. This will result in a slight overhead."
          )
          patch_pos_embed = patch_pos_embed.to(torch.float)
      patch_pos_embed = nn.functional.interpolate(
          patch_pos_embed,
          scale_factor=(
              num_h_patches / sqrt_num_positions,
              num_w_patches / sqrt_num_positions,
          ),
          mode="bicubic",
          align_corners=False,
      )
      if fp32_upcasting:
          patch_pos_embed = patch_pos_embed.to(torch.bfloat16)
      if (
          int(num_h_patches) != patch_pos_embed.shape[-2]
          or int(num_w_patches) != patch_pos_embed.shape[-1]
      ):
          raise ValueError(
              f"Number of patches for images ({int(num_h_patches), int(num_w_patches)}) don't match the "
              f"shape of position embedding ({patch_pos_embed.shape[-2], patch_pos_embed.shape[-1]})"
          )
      patch_pos_embed = patch_pos_embed.permute(0, 2, 3, 1).view(
          1, -1, embed_dim
      )
      return torch.cat(
          (class_pos_embed.unsqueeze(0), patch_pos_embed), dim=1
      )
  
imports: import math
  from dataclasses import dataclass
  from typing import Optional, Tuple, Union
  import torch
  import torch.utils.checkpoint
  from torch import nn
  from ...activations import ACT2FN
  from ...modeling_outputs import BaseModelOutput, BaseModelOutputWithPooling
  from ...utils import ModelOutput, logging
  from .configuration_idefics import IdeficsVisionConfig
label_desc: Use image node_id 2 for calling the IdeficsVisionEmbeddings obj's underlying member method code with example usage: obj.interpolate_pos_encoding(embeddings, height, width) and returns: torch, pos_embed