class_docstr: Rotate the input inside the input's frame by an angle selected randomly from the uniform distribution.
  
  The resulting image may have artifacts in it. After rotation, the image may have a different aspect ratio, and
  after resizing, it returns to its original shape with the original aspect ratio of the image. For these reason we
  may see some artifacts.
  
  Args:
      limit ((int, int) or int): range from which a random angle is picked. If limit is a single int
          an angle is picked from (-limit, limit). Default: (-90, 90)
      interpolation (OpenCV flag): flag that is used to specify the interpolation algorithm. Should be one of:
          cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_CUBIC, cv2.INTER_AREA, cv2.INTER_LANCZOS4.
          Default: cv2.INTER_LINEAR.
      border_mode (OpenCV flag): flag that is used to specify the pixel extrapolation method. Should be one of:
          cv2.BORDER_CONSTANT, cv2.BORDER_REPLICATE, cv2.BORDER_REFLECT, cv2.BORDER_WRAP, cv2.BORDER_REFLECT_101.
          Default: cv2.BORDER_REFLECT_101
      value (int, float, list of ints, list of float): padding value if border_mode is cv2.BORDER_CONSTANT.
      mask_value (int, float,
                  list of ints,
                  list of float): padding value if border_mode is cv2.BORDER_CONSTANT applied for masks.
      p (float): probability of applying the transform. Default: 0.5.
  
  Targets:
      image, mask, bboxes, keypoints
  
  Image types:
      uint8, float32
code: def apply_to_keypoint(
      self,
      keypoint: KeypointInternalType,
      angle: float = 0,
      scale_x: float = 0,
      scale_y: float = 0,
      cols: int = 0,
      rows: int = 0,
      **params,
  ) -> KeypointInternalType:
      return F.keypoint_safe_rotate(
          keypoint,
          params["matrix"],
          angle,
          scale_x,
          scale_y,
          cols,
          rows,
      )
  
imports: import math
  import random
  from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
  import cv2
  import numpy
  from ...core.transforms_interface import BoxInternalType, DualTransform, FillValueType, KeypointInternalType, to_tuple
  from ..crops import functional
  from .None import functional
label_desc: Use image node_id 5 for calling the SafeRotate obj's underlying member method code with example usage: obj.apply_to_keypoint(keypoint, angle, scale_x, scale_y, cols, rows) and returns: F