code: def test_reduce_batch_minus_min_and_max_per_key(
      self,
      x,
      key,
      reduce_instance_dims,
      expected_key_vocab,
      expected_x_minus_min,
      expected_x_max,
      input_signature,
      function_handler,
  ):
      @function_handler(input_signature=input_signature)
      def _reduce_batch_minus_min_and_max_per_key(x, key):
          return tf_utils.reduce_batch_minus_min_and_max_per_key(
              x, key, reduce_instance_dims=reduce_instance_dims
          )
  
      (
          key_vocab,
          x_minus_min,
          x_max,
      ) = _reduce_batch_minus_min_and_max_per_key(x, key)
  
      self.assertAllEqual(key_vocab, expected_key_vocab)
      self.assertAllEqual(x_minus_min, expected_x_minus_min)
      self.assertAllEqual(x_max, expected_x_max)
  
imports: import os
  import numpy
  from packaging import version
  import tensorflow
  from tensorflow_transform import analyzers
  from tensorflow_transform import annotators
  from tensorflow_transform import tf_utils
  from tensorflow_transform import test_case
  from tensorflow.python.framework import composite_tensor
label_desc: Use image node_id 21 for calling the TFUtilsTest obj's underlying member method code with example usage: obj.test_reduce_batch_minus_min_and_max_per_key(x, key, reduce_instance_dims, expected_key_vocab, expected_x_minus_min, expected_x_max, input_signature, function_handler) and returns: tf_utils