code: def describe(self: object, fileids: str = None):
          
          started = time.time()
  
          # Structures to perform counting
          counts = FreqDist()
          tokens = FreqDist()
  
          # Perform a single pass over paragraphs, tokenize, and counts
          for para in self.paras(fileids):
              counts['paras'] += 1
  
              for sent in para:
                  counts['sents'] += 1
  
                  # Include POS at some point
                  for word in sent:
                      counts['words'] += 1
                      tokens[word] += 1
  
          # Compute the number of files in the corpus
          n_fileids = len(self.fileids())
  
          # Return data structure with information
          return {
              'files': n_fileids,
              'paras': counts['paras'],
              'sents': counts['sents'],
              'words': counts['words'],
              'vocab': len(tokens),
              'lexdiv': round((counts['words'] / len(tokens)), 3),
              'ppdoc': round((counts['paras'] / n_fileids), 3),
              'sppar':round((counts['sents'] / counts['paras']), 3),
              'secs': round((time.time()-started), 3),
          }
docs: Performs a single pass of the corpus and returns a dictionary with a
          variety of metrics concerning the state of the corpus.
  
          based on (Bengfort et al, 2018: 46)