code: def _linear_interpolation_utilities(
      v_norm, v0_src, size_src, v0_dst, size_dst, size_z
  ):
      """
      Computes utility values for linear interpolation at points v.
      The points are given as normalized offsets in the source interval
      (v0_src, v0_src + size_src), more precisely:
          v = v0_src + v_norm * size_src / 256.0
      The computed utilities include lower points v_lo, upper points v_hi,
      interpolation weights v_w and flags j_valid indicating whether the
      points falls into the destination interval (v0_dst, v0_dst + size_dst).
  
      Args:
          v_norm (:obj: `torch.Tensor`): tensor of size N containing
              normalized point offsets
          v0_src (:obj: `torch.Tensor`): tensor of size N containing
              left bounds of source intervals for normalized points
          size_src (:obj: `torch.Tensor`): tensor of size N containing
              source interval sizes for normalized points
          v0_dst (:obj: `torch.Tensor`): tensor of size N containing
              left bounds of destination intervals
          size_dst (:obj: `torch.Tensor`): tensor of size N containing
              destination interval sizes
          size_z (int): interval size for data to be interpolated
  
      Returns:
          v_lo (:obj: `torch.Tensor`): int tensor of size N containing
              indices of lower values used for interpolation, all values are
              integers from [0, size_z - 1]
          v_hi (:obj: `torch.Tensor`): int tensor of size N containing
              indices of upper values used for interpolation, all values are
              integers from [0, size_z - 1]
          v_w (:obj: `torch.Tensor`): float tensor of size N containing
              interpolation weights
          j_valid (:obj: `torch.Tensor`): uint8 tensor of size N containing
              0 for points outside the estimation interval
              (v0_est, v0_est + size_est) and 1 otherwise
      """
      v = v0_src + v_norm * size_src / 256.0
      j_valid = (v - v0_dst >= 0) * (v - v0_dst < size_dst)
      v_grid = (v - v0_dst) * size_z / size_dst
      v_lo = v_grid.floor().long().clamp(min=0, max=size_z - 1)
      v_hi = (v_lo + 1).clamp(max=size_z - 1)
      v_grid = torch.min(v_hi.float(), v_grid)
      v_w = v_grid - v_lo.float()
      return v_lo, v_hi, v_w, j_valid
  
imports: from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from typing import Any, Dict, List, Optional, Tuple
  import torch
  from torch.nn import functional
  from detectron2.structures import BoxMode, Instances
  from densepose import DensePoseDataRelative
label_desc: Use image node_id 1 for calling a global function with example usage: _linear_interpolation_utilities(v_norm, v0_src, size_src, v0_dst, size_dst, size_z) and returns: v_lo,  v_hi,  v_w,  j_valid