code: def get_object_typename(obj) -> str:
      if isinstance(obj, float):
          return "float"
      if isinstance(obj, (int, bool)):
          return "int"
      if isinstance(obj, str):
          return "str"
      if isinstance(obj, bytes):
          return "bytes"
      if isinstance(obj, dict):
          return "object"
      if isinstance(obj, (tuple, list)):
          if len(obj) == 0:
              # element type is unknown yet.
              return "list"
          element_typename = get_object_typename(obj[0])
          return f"list({element_typename})"
      if isinstance(obj, CustomObject):
          return obj.get_typename()
      return "unknown"
  
imports: import os
  import shutil
  import tarfile
  import pathlib
  import re
  import uuid
  from contextlib import contextmanager
  from typing import Union, Any, Tuple, Optional, Callable
  from aim.sdk.configs import get_aim_repo_name
  from aim.storage.object import CustomObject
  from logging import getLogger
label_desc: Use image node_id 4 for calling a global function with example usage: get_object_typename(obj) and returns: str, str, str, str, str, str, str, element_typename, str, obj, str