docs: def typename(obj):
      """Returns the type of obj as a string. More descriptive and specific than
      type(obj), and safe for any object, unlike __class__."""
      if hasattr(obj, '__class__'):
          return getattr(obj, '__class__').__name__
      else:
          return type(obj).__name__