class_docstr: Summarization Metrics
  
  This class computes the following standard summarization metrics
  
  1. Rouge (1,2,L)
  2. Extractiveness (coverage, density, novel n-grams)
  3. Compression
  4. Faithfulness (SummaC)
code: def evaluate(
      self,
      scenario_state: ScenarioState,
      metric_service: MetricService,
      eval_cache_path: str,
      parallelism: int,
  ) -> MetricResult:
      if self.compute_faithfulness:
          # When running with a GPU and parallelism > 1, errors with "...in layer_norm
          # return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
          # RuntimeError: expected scalar type Float but found Half".
          hlog(
              f"Setting parallelism from {parallelism} to 1, since "
              f"evaluating faithfulness with parallelism > 1 errors."
          )
          parallelism = 1
  
      return super().evaluate(
          scenario_state,
          metric_service,
          eval_cache_path,
          parallelism=parallelism,
      )
  
imports: import json
  import pandas
  import numpy
  import os
  import pickle
  import spacy
  from typing import List, Dict, Optional
  from collections import defaultdict
  from helm.benchmark.adaptation.scenario_state import ScenarioState
  from helm.benchmark.adaptation.request_state import RequestState
  from helm.benchmark.adaptation.adapter_spec import AdapterSpec
  from helm.common.hierarchical_logger import hlog
  from helm.common.general import ensure_file_downloaded
  from .metric import Metric, MetricResult
  from .metric_name import MetricName
  from .metric_service import MetricService
  from .basic_metrics import get_rouge_function
  from .statistic import Stat
  from .summac.model_summac import SummaCZS
  from bert_score import BERTScorer
label_desc: Use image node_id 4 for calling the SummarizationMetric obj's underlying member method code with example usage: obj.evaluate(scenario_state, metric_service, eval_cache_path, parallelism) and returns: super