code: def keypoint_affine(
      keypoint: KeypointInternalType,
      matrix: skimage.transform.ProjectiveTransform,
      scale: dict,
  ) -> KeypointInternalType:
      if _is_identity_matrix(matrix):
          return keypoint
  
      x, y, a, s = keypoint[:4]
      x, y = cv2.transform(
          np.array([[[x, y]]]), matrix.params[:2]
      ).squeeze()
      a += rotation2DMatrixToEulerAngles(matrix.params[:2])
      s *= np.max([scale["x"], scale["y"]])
      return x, y, a, s
  
imports: import math
  from typing import List, Optional, Sequence, Tuple, Union
  import cv2
  import numpy
  import skimage.transform
  from scipy.ndimage import gaussian_filter
  from albumentations.augmentations.utils import _maybe_process_in_chunks, angle_2pi_range, clipped, preserve_channel_dim, preserve_shape
  from ...None import random_utils
  from ...core.bbox_utils import denormalize_bbox, normalize_bbox
  from ...core.transforms_interface import BoxInternalType, FillValueType, ImageColorType, KeypointInternalType
label_desc: Use image node_id 23 for calling a global function with example usage: keypoint_affine(keypoint, matrix, scale) and returns: x,  y,  a,  s, keypoint