docs: def reformat_python_docstrings(top_dirs: List[str],
                                 correct_copyright_lines: List[str],
                                 show_only: bool = True,
                                 rewrite: bool = False,
                                 process_only_filenum: int = None) -> None:
      """
      Walk a directory, finding Python files and rewriting them.
  
      Args:
          top_dirs: list of directories to descend into
          correct_copyright_lines:
              list of lines (without newlines) representing the copyright
              docstring block, including the transition lines of equals
              symbols
          show_only: show results (to stdout) only; don't rewrite
          rewrite: write the changes
          process_only_filenum: only process this file number (1-based index);
              for debugging only
      """
      filenum = 0
      for top_dir in top_dirs:
          for dirpath, dirnames, filenames in walk(top_dir):
              for filename in filenames:
                  fullname = join(dirpath, filename)
                  extension = splitext(filename)[1]
                  if extension != PYTHON_EXTENSION:
                      # log.debug("Skipping non-Python file: {}", fullname)
                      continue
  
                  filenum += 1
  
                  if process_only_filenum and filenum != process_only_filenum:
                      continue
  
                  log.info("Processing file {}: {}", filenum, fullname)
                  proc = PythonProcessor(
                      full_path=fullname,
                      top_dir=top_dir,
                      correct_copyright_lines=correct_copyright_lines)
                  if show_only:
                      proc.show()
                  elif rewrite:
                      proc.rewrite_file()