code: def parse_alignment_scorers(fn, rows, tags):
      newrows = {}
      df = read_space_separated_to_df(fn)
  
      tsvtags = list(df.loc[0].keys())
      data_dict = df.to_dict()
  
      for key, value in data_dict.items():
          for line in range(len(value)):
              if str(line) not in rows:
                  continue
              newrows[str(line)] = rows[str(line)]
              newrows[str(line)][key] = str(value[line])
      # dedupe tags
      new_tags = tags + [t for t in tsvtags if t not in tags]
      return newrows, new_tags
  
imports: import argparse
  from collections import defaultdict
  import csv
  import math
  import os
  import pathlib
  from typing import Dict, Iterable, List, Optional, Set, Tuple, Union
  import pandas
  from projects.roscoe.meta_evaluation.correlations import Analyzer
  from projects.roscoe.score import ROSCOE_SA, ROSCOE_SS, ROSCOE_LI, ROSCOE_LC, SUPERVISED_SCORES, UNSUPERVISED_SCORES
  from projects.roscoe.utils import assert_all_elements_same_length, ordered_union, split_list
  from projects.roscoe.meta_evaluation.table_file_writing import ANNOTATION_COLUMN_ORDER, COLUMN_RENAMES, MODELS, ROSCOE_SECTIONS, STEP_COLUMN_RENAMES, section_rows, write_every_dataset_summary_table_tex, write_every_dataset_final_summary_table_tex, write_granular_summary_tex
label_desc: Use image node_id 6 for calling a global function with example usage: parse_alignment_scorers(fn, rows, tags) and returns: newrows,  new_tags