code: def to_string(self) -> str:
          
          classes = defaultdict(list)
          typing_imports = set()
          contents = ""
  
          # import necessary modules from typing
          for stub in self._stubs:
              typing_imports.update(stub.get_typing_imports())
          alphabetical_imports = sorted(list(typing_imports))
          if alphabetical_imports:
              contents += "from typing import {}\n\n".format(
                  ", ".join(str(type_import) for type_import in alphabetical_imports)
              )
  
          for stub in self._fields:
              parent = _relativize_access(stub.parent, stub.path)
              # Ignore nested classes
              if len(parent) == 1:
                  classes[parent[0]].append(stub)
              else:
                  contents += stub.to_string() + "\n"
  
          for stub in self._methods:
              parent = _relativize_access(stub.parent, stub.path)
              # Ignore nested classes
              if len(parent) == 1:
                  classes[parent[0]].append(stub)
  
          for stub in self._functions:
              contents += stub.to_string() + "\n"
  
          for parent, stubs in classes.items():
              contents += "\nclass {}:\n".format(parent)
              for stub in stubs:
                  contents += "    {}\n".format(stub.to_string().replace("\n", "\n    "))
          return contents
docs: We currently ignore nested classes, i.e.:
            class X:
                class Y:
                    [ALL OF THIS IS IGNORED]