code: def _create_table(
      rows: List[List[str]],
      headers: List[str],
      column_sep: str = " " * 2,
      min_column_width: int = 4,
  ) -> str:
      """
      Creates a table from a list of rows and headers.
  
      Example
      =======
      >>> print(_create_table([["a", "b", "c"], ["d", "e", "f"]], ["x", "y", "z"]))
      x     y     z
      ----  ----  ----
      a     b     c
      d     e     f
      """
      column_widths = [
          max(len(max(col, key=len)), len(header) + 2, min_column_width)
          for col, header in zip(zip(*rows), headers)
      ]
      aligned_rows = [
          column_sep.join(
              header.ljust(width)
              for header, width in zip(headers, column_widths)
          ),
          column_sep.join("-" * width for width in column_widths),
          *(
              column_sep.join(
                  cell.ljust(width)
                  for cell, width in zip(row, column_widths)
              )
              for row in rows
          ),
      ]
      return "\n".join(aligned_rows)
  
file_path: mlflow/mlflow/utils/string_utils.py
imports: import os
  import re
  import shlex
  from typing import List
label_desc: Use image node_id 6 for calling a global function with example usage: _create_table(rows, headers, column_sep, min_column_width) and returns: str