code: def _type_name(x):
      """Generates a description of the type of an object."""
      if isinstance(x, dict):
          key_types = set(_type_name(key) for key in x.keys())
          val_types = set(_type_name(key) for key in x.values())
          return "({} containing {} keys and {} values)".format(
              type(x), key_types, val_types
          )
      if isinstance(x, (list, tuple)):
          types = set(_type_name(val) for val in x)
          return "({} containing values of types {})".format(
              type(x), types
          )
      return str(type(x))
  
file_path: elegy/elegy/data/data_handler.py
imports: import contextlib
  import logging
  from .array_adapter import ArrayDataAdapter
  from .dataset import DataLoaderAdapter
  from .generator_adapter import GeneratorDataAdapter
  from .list_adapter import ListsOfScalarsDataAdapter
label_desc: Use image node_id 1 for calling a global function with example usage: _type_name(x) and returns: str, str, str