code: def score(
      self,
      hypothesis: List[str],
      references: List[List[str]],
      tags: Optional[List[List[str]]] = None,
  ) -> VizSeqScore:
      self._update_n_workers(len(hypothesis))
  
      corpus_score, group_scores, sent_scores = None, None, None
      if self.sent_level:
          sent_scores = self._score_sentences_multiprocess(
              hypothesis, references, _get_sent_chrf
          )
  
      if self.corpus_level:
          corpus_score = self.score_corpus_multiprocess(
              hypothesis, references
          )
  
      if tags is not None:
          tag_set = self._unique(tags)
          group_scores = {}
          for t in tag_set:
              indices = [i for i, cur in enumerate(tags) if t in cur]
              ref_slice = [[r[i] for i in indices] for r in references]
              pred_slice = [hypothesis[i] for i in indices]
              group_scores[t] = self.score_corpus_multiprocess(
                  pred_slice, ref_slice
              )
  
      return VizSeqScore.make(
          corpus_score=corpus_score,
          sent_scores=sent_scores,
          group_scores=group_scores,
      )
  
file_path: vizseq/vizseq/scorers/chrf.py
imports: from concurrent.futures import ProcessPoolExecutor, as_completed
  from typing import List, Optional, Dict
  import argparse
  from sacrebleu.metrics import CHRF
  from tqdm import tqdm
  from vizseq.scorers import register_scorer, VizSeqScorer, VizSeqScore
label_desc: Use image node_id 2 for calling the ChrFScorer obj's underlying member method code with example usage: obj.score(hypothesis, references, tags) and returns: VizSeqScore