code: def _shift_rgb_uint8(img, r_shift, g_shift, b_shift):
      if r_shift == g_shift == b_shift:
          h, w, c = img.shape
          img = img.reshape([h, w * c])
  
          return _shift_image_uint8(img, r_shift)
  
      result_img = np.empty_like(img)
      shifts = [r_shift, g_shift, b_shift]
      for i, shift in enumerate(shifts):
          result_img[..., i] = _shift_image_uint8(img[..., i], shift)
  
      return result_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 15 for calling a global function with example usage: _shift_rgb_uint8(img, r_shift, g_shift, b_shift) and returns: result_img, _shift_image_uint8