code: def _get_saturated_resource_error(
      cls, additive_resources, excess_resources
  ):
      isare = "is" if len(additive_resources) == 1 else "are"
      additive_clause = (
          (
              f", except for {additive_resources}, which {isare} calculated via max(). "
          )
          if additive_resources
          else ". "
      )
      return WorkflowError(
          "Not enough resources were provided. This error is typically "
          "caused by a Pipe group requiring too many resources. Note "
          "that resources are summed across every member of the pipe "
          f"group{additive_clause}"
          f"Excess Resources:\n{excess_resources}"
      )
  
imports: from collections import UserDict, defaultdict
  import itertools
  import operator
  import re
  import tempfile
  from snakemake.exceptions import ResourceScopesException, WorkflowError
  from snakemake.common.tbdstring import TBDString
label_desc: Use image node_id 2 for calling the GroupResources obj's underlying member method code with example usage: obj._get_saturated_resource_error(cls, additive_resources, excess_resources) and returns: WorkflowError