code: def bytescale(data, cmin=None, cmax=None, high=255, low=0):
      """
      Byte scales an array (image).
  
      Byte scaling means converting the input image to uint8 dtype and scaling
      the range to ``(low, high)`` (default 0-255).
      If the input image already has dtype uint8, no scaling is done.
  
      This function is only available if Python Imaging Library (PIL) is installed.
  
      Parameters
      ----------
      data : ndarray
          PIL image data array.
      cmin : scalar, optional
          Bias scaling of small values. Default is ``data.min()``.
      cmax : scalar, optional
          Bias scaling of large values. Default is ``data.max()``.
      high : scalar, optional
          Scale max value to `high`.  Default is 255.
      low : scalar, optional
          Scale min value to `low`.  Default is 0.
  
      Returns
      -------
      img_array : uint8 ndarray
          The byte-scaled array.
  
      Examples
      --------
      >>> from scipy.misc import bytescale
      >>> img = np.array([[ 91.06794177,   3.39058326,  84.4221549 ],
      ...                 [ 73.88003259,  80.91433048,   4.88878881],
      ...                 [ 51.53875334,  34.45808177,  27.5873488 ]])
      >>> bytescale(img)
      array([[255,   0, 236],
             [205, 225,   4],
             [140,  90,  70]], dtype=uint8)
      >>> bytescale(img, high=200, low=100)
      array([[200, 100, 192],
             [180, 188, 102],
             [155, 135, 128]], dtype=uint8)
      >>> bytescale(img, cmin=0, cmax=255)
      array([[91,  3, 84],
             [74, 81,  5],
             [52, 34, 28]], dtype=uint8)
  
      """
      if data.dtype == uint8:
          return data
  
      if high > 255:
          raise ValueError(
              "`high` should be less than or equal to 255."
          )
      if low < 0:
          raise ValueError(
              "`low` should be greater than or equal to 0."
          )
      if high < low:
          raise ValueError(
              "`high` should be greater than or equal to `low`."
          )
  
      if cmin is None:
          cmin = data.min()
      if cmax is None:
          cmax = data.max()
  
      cscale = cmax - cmin
      if cscale < 0:
          raise ValueError("`cmax` should be larger than `cmin`.")
      elif cscale == 0:
          cscale = 1
  
      scale = float(high - low) / cscale
      bytedata = (data - cmin) * scale + low
      return (bytedata.clip(low, high) + 0.5).astype(uint8)
  
file_path: catboost/contrib/python/scipy/py2/scipy/misc/pilutil.py
imports: from __future__ import division, print_function, absolute_import
  import numpy
  import tempfile
  from numpy import amin, amax, ravel, asarray, arange, ones, newaxis, transpose, iscomplexobj, uint8, issubdtype, array
label_desc: Use image node_id 1 for calling a global function with example usage: bytescale(data, cmin, cmax, high, low) and returns: unknown, data