code: def letterbox(
      im: t.Any,
      new_shape: tuple[int, int] | int | list[int] = (640, 640),
      color: tuple[int, int, int] = (114, 114, 114),
      auto: bool = True,
      scaleFill: bool = False,
      scaleup: bool = True,
      stride: int = 32,
  ) -> tuple[NDArray[t.Any], tuple[float, float], tuple[float, float]]:
      # Resize and pad image while meeting stride-multiple constraints
      shape = im.shape[:2]  # current shape [height, width]
      if isinstance(new_shape, int):
          new_shape = (new_shape, new_shape)
  
      # Scale ratio (new / old)
      r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
      if (
          not scaleup
      ):  # only scale down, do not scale up (for better val mAP)
          r = min(r, 1.0)
  
      # Compute padding
      ratio = r, r  # width, height ratios
      new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
      dw, dh = (
          new_shape[1] - new_unpad[0],
          new_shape[0] - new_unpad[1],
      )  # wh padding
      if auto:  # minimum rectangle
          dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
      elif scaleFill:  # stretch
          dw, dh = 0.0, 0.0
          new_unpad = (new_shape[1], new_shape[0])
          ratio = (
              new_shape[1] / shape[1],
              new_shape[0] / shape[0],
          )  # width, height ratios
  
      dw /= 2  # divide padding into 2 sides
      dh /= 2
  
      if shape[::-1] != new_unpad:  # resize
          im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)
      top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
      left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
      im = cv2.copyMakeBorder(
          im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color
      )  # add border
      return im, ratio, (dw, dh)
  
imports: from __future__ import annotations
  import json
  import os
  import time
  import typing
  from pathlib import Path
  import attr
  import cv2
  import numpy
  import torch
  import torchvision
  from PIL import Image
label_desc: Use image node_id 6 for calling a global function with example usage: letterbox(im, new_shape, color, auto, scaleFill, scaleup, stride) and returns: im,  ratio,  dw,  dh