code: def _export_corpus_group_scores(
      cls, corpus_scores, group_scores, export_func: callable
  ):
      assert set(corpus_scores.keys()) == set(group_scores.keys())
      metrics = corpus_scores.keys()
      exported = {}
      for s in metrics:
          cur_scores = {"All": corpus_scores[s]}
          cur_scores.update(group_scores[s])
          exported[s] = export_func(cur_scores)
      return exported
  
imports: from typing import List, Tuple, Iterable
  import math
  import os
  import os.path
  from glob import glob
  import json
  from vizseq._data import VizSeqTaskConfigManager, VizSeqGlobalConfigManager, VizSeqStats, set_g_cred_path, VizSeqTableExporter, VizSeqNGrams, VizSeqTokenization
  from vizseq.scorers import get_scorer_name, get_scorer_ids_and_names
  from .data_view import VizSeqDataPageView, VizSeqPageData
  from .mem_cached_data_getters import _get_src, _get_ref, _get_tag, _get_hypo, _get_scores
label_desc: Use image node_id 14 for calling the VizSeqWebView obj's underlying member method code with example usage: obj._export_corpus_group_scores(cls, corpus_scores, group_scores, export_func) and returns: exported