code: def perspective(
      img: Image.Image,
      perspective_coeffs: List[float],
      interpolation: int = Image.BICUBIC,
      fill: Optional[
          Union[int, float, Sequence[int], Sequence[float]]
      ] = None,
  ) -> Image.Image:
      if not _is_pil_image(img):
          raise TypeError(f"img should be PIL Image. Got {type(img)}")
  
      opts = _parse_fill(fill, img)
  
      return img.transform(
          img.size,
          Image.PERSPECTIVE,
          perspective_coeffs,
          interpolation,
          **opts,
      )
  
imports: import numbers
  from typing import Any, Dict, List, Literal, Optional, Sequence, Tuple, Union
  import numpy
  import torch
  from PIL import Image, ImageEnhance, ImageOps
label_desc: Use image node_id 18 for calling a global function with example usage: perspective(img, perspective_coeffs, interpolation, fill) and returns: img