code: def ascii_table(
      data,
      human_column_names=None,
      footer=None,
      indentation="",
      alignments=(),
  ):
      data = list(data)
      column_alignments = dict(alignments)
      columns = human_column_names or ordered_unique(
          itertools.chain.from_iterable(data)
      )
      widths = {
          column: max(len(str(row.get(column))) for row in data)
          for column in columns
      }
  
      if human_column_names:
          for column, human in human_column_names.items():
              widths[column] = max(widths[column], len(human))
  
      if footer:
          for column, footer_value in footer.items():
              widths[column] = max(widths[column], len(footer_value))
  
      separator = (
          "+"
          + "+".join("-" * (width + 2) for width in widths.values())
          + "+"
      )
  
      def format_row(row, alignment=None):
          alignments = {
              column: alignment or column_alignments.get(column, ">")
              for column in columns
          }
          return (
              "| "
              + " | ".join(
                  format(
                      row.get(column, ""),
                      f"{alignments[column]}{width}",
                  )
                  for column, width in widths.items()
              )
              + " |"
          )
  
      header = (
          (format_row(human_column_names, alignment="<"), separator)
          if human_column_names
          else ()
      )
  
      footer = (
          (format_row(footer, alignment="<"), separator)
          if footer
          else ()
      )
  
      return indentation + f"\n{indentation}".join(
          (
              separator,
              *header,
              *(format_row(row) for row in data),
              separator,
              *footer,
          )
      )
  
imports: import itertools
label_desc: Use image node_id 2 for calling a global function with example usage: ascii_table(data, human_column_names, footer, indentation, alignments) and returns: unknown, unknown