code: def normalize_heatmaps(inputs, shapes=None):
      # TODO get rid of this deferred import
      from imgaug.augmentables.heatmaps import HeatmapsOnImage
  
      shapes = _preprocess_shapes(shapes)
      ntype = estimate_heatmaps_norm_type(inputs)
      _assert_exactly_n_shapes_partial = functools.partial(
          _assert_exactly_n_shapes,
          from_ntype=ntype,
          to_ntype="List[HeatmapsOnImage]",
          shapes=shapes,
      )
  
      if ntype == "None":
          return None
      if ntype == "array[float]":
          _assert_single_array_ndim(
              inputs, 4, "(N,H,W,C)", "HeatmapsOnImage"
          )
          _assert_exactly_n_shapes_partial(n=len(inputs))
          return [
              HeatmapsOnImage(attr_i, shape=shape_i)
              for attr_i, shape_i in zip(inputs, shapes)
          ]
      if ntype == "HeatmapsOnImage":
          return [inputs]
      if ntype == "iterable[empty]":
          return None
      if ntype == "iterable-array[float]":
          _assert_many_arrays_ndim(
              inputs, 3, "(H,W,C)", "HeatmapsOnImage"
          )
          _assert_exactly_n_shapes_partial(n=len(inputs))
          return [
              HeatmapsOnImage(attr_i, shape=shape_i)
              for attr_i, shape_i in zip(inputs, shapes)
          ]
      assert (
          ntype == "iterable-HeatmapsOnImage"
      ), "Got unknown normalization type '%s'." % (ntype,)
      return inputs
  
imports: from __future__ import print_function, division, absolute_import
  import functools
  import numpy
  from ..None import imgaug
  from ..None import dtypes
  from .base import IAugmentable
label_desc: Use image node_id 8 for calling a global function with example usage: normalize_heatmaps(inputs, shapes) and returns: inputs, None, unknown, list, None, unknown