code: def _shift_hsv_non_uint8(img, hue_shift, sat_shift, val_shift):
      dtype = img.dtype
      img = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
      hue, sat, val = cv2.split(img)
  
      if hue_shift != 0:
          hue = cv2.add(hue, hue_shift)
          hue = np.mod(hue, 360)  # OpenCV fails with negative values
  
      if sat_shift != 0:
          sat = clip(cv2.add(sat, sat_shift), dtype, 1.0)
  
      if val_shift != 0:
          val = clip(cv2.add(val, val_shift), dtype, 1.0)
  
      img = cv2.merge((hue, sat, val))
      img = cv2.cvtColor(img, cv2.COLOR_HSV2RGB)
      return img
  
imports: from __future__ import division
  from typing import Optional, Sequence, Union
  from warnings import warn
  import cv2
  import numpy
  import skimage
  from albumentations import random_utils
  from albumentations.augmentations.utils import MAX_VALUES_BY_DTYPE, _maybe_process_in_chunks, clip, clipped, ensure_contiguous, is_grayscale_image, is_rgb_image, non_rgb_warning, preserve_channel_dim, preserve_shape
label_desc: Use image node_id 5 for calling a global function with example usage: _shift_hsv_non_uint8(img, hue_shift, sat_shift, val_shift) and returns: img