docs: def as_asciitree(self, str_func=None):
          """Represent this Sentence as an ASCII tree string. Requires
          the asciitree package. A default token stringifier is provided
          but for custom formatting, specify a str_func which should take
          a single Token and return a string."""
          import asciitree
          from collections import defaultdict
          children = defaultdict(list)
          # since erased nodes may be missing, multiple tokens may have same
          # index (CCprocessed), etc.
          token_to_index = {}
          roots = []
          for token in self:
              children[token.head].append(token)
              token_to_index[token] = token.index
              if token.head == 0:
                  roots.append(token)
          assert roots, "Couldn't find root Token(s)"
  
          if len(roots) > 1:
              # multiple roots so we make a fake one to be their parent
              root = Token(0, 'ROOT', 'ROOT-LEMMA', 'ROOT-CPOS', 'ROOT-POS',
                           None, None, 'ROOT-DEPREL', None, None, None)
              token_to_index[root] = 0
              children[0] = roots
          else:
              root = roots[0]
  
          def child_func(token):
              index = token_to_index[token]
              return children[index]
          if not str_func:
              def str_func(token):
                  return ' %s [%s]' % (token.form, token.deprel)
  
          return asciitree.draw_tree(root, child_func, str_func)