code: def render_weighted_spans(pws):
      # type: (PreparedWeightedSpans) -> str
      # TODO - for longer documents, an option to remove text
      # without active features
      return "".join(
          _colorize(
              "".join(t for t, _ in tokens_weights),
              weight,
              pws.weight_range,
          )
          for weight, tokens_weights in groupby(
              zip(pws.doc_weighted_spans.document, pws.char_weights),
              key=lambda x: x[1],
          )
      )
  
imports: from __future__ import absolute_import
  from itertools import groupby
  from typing import List, Optional, Tuple
  import numpy
  from jinja2 import Environment, PackageLoader
  from eli5 import _graphviz
  from eli5.base import Explanation, TargetExplanation, FeatureWeights, FeatureWeight
  from eli5.utils import max_or_0
  from .utils import format_signed, format_value, format_weight, has_any_values_for_weights, replace_spaces, should_highlight_spaces
  from .None import fields
  from .features import FormattedFeatureName
  from .trees import tree2text
  from .text_helpers import prepare_weighted_spans, PreparedWeightedSpans
label_desc: Use image node_id 4 for calling a global function with example usage: render_weighted_spans(pws) and returns: str