code: def equalize(image):
      """Implements Equalize function from PIL using TF ops."""
  
      def scale_channel(im, c):
          """Scale the data in the channel to implement equalize."""
          im = tf.cast(im[:, :, c], tf.int32)
          # Compute the histogram of the image channel.
          histo = tf.histogram_fixed_width(im, [0, 255], nbins=256)
  
          # For the purposes of computing the step, filter out the nonzeros.
          nonzero = tf.where(tf.not_equal(histo, 0))
          nonzero_histo = tf.reshape(tf.gather(histo, nonzero), [-1])
          step = (
              tf.reduce_sum(nonzero_histo) - nonzero_histo[-1]
          ) // 255
  
          def build_lut(histo, step):
              # Compute the cumulative sum, shifting by step // 2
              # and then normalization by step.
              lut = (tf.cumsum(histo) + (step // 2)) // step
              # Shift lut, prepending with 0.
              lut = tf.concat([[0], lut[:-1]], 0)
              # Clip the counts to be in range.  This is done
              # in the C code for image.point.
              return tf.clip_by_value(lut, 0, 255)
  
          # If step is zero, return the original image.  Otherwise, build
          # lut from the full histogram and step and then index from it.
          result = tf.cond(
              tf.equal(step, 0),
              lambda: im,
              lambda: tf.gather(build_lut(histo, step), im),
          )
  
          return tf.cast(result, tf.uint8)
  
      # Assumes RGB for now.  Scales each channel independently
      # and then stacks the result.
      s1 = scale_channel(image, 0)
      s2 = scale_channel(image, 1)
      s3 = scale_channel(image, 2)
      image = tf.stack([s1, s2, s3], 2)
      return image
  
imports: import dataclasses
  import inspect
  import math
  import tensorflow.compat.v1
  from tensorflow_addons import image
label_desc: Use image node_id 18 for calling a global function with example usage: equalize(image) and returns: image, tf, tf