code: def get_basic_type(value):
      basic_types = (
          float,
          int,
          bool,
          six.string_types,
          list,
          tuple,
          dict,
      )
  
      if isinstance(value, (list, tuple)) and value:
          tv = type(value)
          t = type(value[0])
          if all(t == type(v) for v in value):
              return "{}/{}".format(
                  str(getattr(tv, "__name__", tv)),
                  str(getattr(t, "__name__", t)),
              )
      elif isinstance(value, dict) and value:
          t = type(list(value.values())[0])
          if all(t == type(v) for v in value.values()):
              return "dict/{}".format(str(getattr(t, "__name__", t)))
  
      # it might be an empty list/dict/tuple
      t = type(value)
      if isinstance(value, basic_types):
          return str(getattr(t, "__name__", t))
  
      # we are storing it, even though we will not be able to restore it
      return str(getattr(t, "__name__", t))
  
imports: import itertools
  import json
  from copy import copy
  from logging import getLogger
  import six
  import yaml
label_desc: Use image node_id 5 for calling a global function with example usage: get_basic_type(value) and returns: str, str, str, str