code: def move_tone_curve(img, low_y, high_y):
      """Rescales the relationship between bright and dark areas of the image by manipulating its tone curve.
  
      Args:
          img (numpy.ndarray): RGB or grayscale image.
          low_y (float): y-position of a Bezier control point used
              to adjust the tone curve, must be in range [0, 1]
          high_y (float): y-position of a Bezier control point used
              to adjust image tone curve, must be in range [0, 1]
      """
      input_dtype = img.dtype
  
      if low_y < 0 or low_y > 1:
          raise ValueError("low_shift must be in range [0, 1]")
      if high_y < 0 or high_y > 1:
          raise ValueError("high_shift must be in range [0, 1]")
  
      if input_dtype != np.uint8:
          raise ValueError(
              "Unsupported image type {}".format(input_dtype)
          )
  
      t = np.linspace(0.0, 1.0, 256)
  
      # Defines responze of a four-point bezier curve
      def evaluate_bez(t):
          return (
              3 * (1 - t) ** 2 * t * low_y
              + 3 * (1 - t) * t**2 * high_y
              + t**3
          )
  
      evaluate_bez = np.vectorize(evaluate_bez)
      remapping = np.rint(evaluate_bez(t) * 255).astype(np.uint8)
  
      lut_fn = _maybe_process_in_chunks(cv2.LUT, lut=remapping)
      img = lut_fn(img)
      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 12 for calling a global function with example usage: move_tone_curve(img, low_y, high_y) and returns: img, unknown