code: def remove_empty_columns(values_by_title):
      def _is_column_empty(title: str) -> bool:
          return all(math.isnan(s) for s in values_by_title[title])
  
      empty_columns = [
          t for t in values_by_title.keys() if _is_column_empty(t)
      ]
      for c in empty_columns:
          del values_by_title[c]
  
      return values_by_title
  
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 19 for calling a global function with example usage: remove_empty_columns(values_by_title) and returns: values_by_title, all