docs: def fullqualname_py2(obj):
      """Fully qualified name for objects in Python 2."""
  
      if type(obj).__name__ == 'builtin_function_or_method':
  
          return _fullqualname_builtin_py2(obj)
  
      elif type(obj).__name__ == 'function':
  
          return obj.__module__ + '.' + obj.__name__
  
      elif type(obj).__name__ in ['member_descriptor', 'method_descriptor',
                                  'wrapper_descriptor']:
  
          return (obj.__objclass__.__module__ + '.' +
                  obj.__objclass__.__name__ + '.' +
                  obj.__name__)
  
      elif type(obj).__name__ == 'instancemethod':
  
          return _fullqualname_method_py2(obj)
  
      elif type(obj).__name__ == 'method-wrapper':
  
          return fullqualname_py2(obj.__self__) + '.' + obj.__name__
  
      elif type(obj).__name__ == 'module':
  
          return obj.__name__
  
      elif inspect.isclass(obj):
  
          return obj.__module__ + '.' + obj.__name__
  
      return obj.__class__.__module__ + '.' + obj.__class__.__name__