class_docstr: Rotate Image, Polygon, Box
  
  Args:
      scale (float): rotate scale
      angle (float): rotate angle
      fill_value (int, tuple): fill color
      auto_bound (bool): whether auto bound or not
class_docstr_tok: ["Rotate","Image",",","Polygon",",","Box","Args",":","scale","(","float",")",":","rotate","scale","angle","(","float",")",":","rotate","angle","fill_value","(","int",",","tuple",")",":","fill","color","auto_bound","(","bool",")",":","whether","auto","bound","or","not"]
code: def apply_pts(self, pts, matrix, h, w):
      assert (
          pts.shape[-1] % 2 == 0
      ), "the dim of input [pts] is not correct"
      # n is number of samples and m is two times the number of points due to (x, y)
      _, m = pts.shape
      # transpose points
      pts_ = pts.reshape(-1, 2).T
      # pad 1 to convert the points to homogeneous coordinates
      padding = np.ones((1, pts_.shape[1]), pts.dtype)
      rotated_pts = np.matmul(
          matrix, np.concatenate((pts_, padding), axis=0)
      )
      return rotated_pts[:2, :].T.reshape(-1, m)
  
imports: from __future__ import absolute_import
  from __future__ import print_function
  from __future__ import division
  from numbers import Number, Integral
  import cv2
  import numpy
  import math
  import copy
  from .operators import register_op, BaseOperator
  from ppdet.modeling.rbox_utils import poly2rbox_le135_np, poly2rbox_oc_np, rbox2poly_np
  from ppdet.utils.logger import setup_logger
  from ppdet.utils.compact import imagedraw_textsize_c
label_desc: Use image node_id 5 for calling the RRotate obj's underlying member method code with example usage: obj.apply_pts(pts, matrix, h, w) and returns: rotated_pts