class_docstr: This module takes the time-series data of already computed statistics, plots the data and
  combines all the plots into a list which is stored together with the section name in a dictionary
  which later will be used for the report generation.
code: def transform(
      self,
      data_obj: dict,
      dynamic_bounds: dict | None = None,
      sections: list | None = None,
  ):
      assert isinstance(data_obj, dict)
      if dynamic_bounds is None:
          dynamic_bounds = {}
      assert isinstance(dynamic_bounds, dict)
      if sections is None:
          sections = []
      assert isinstance(sections, list)
  
      features = self.get_features(list(data_obj.keys()))
      features_w_metrics = []
  
      self.logger.info(f'Generating section "{self.section_name}"')
  
      for feature in tqdm(features, ncols=100):
          df = data_obj.get(feature, pd.DataFrame())
          fdbounds = dynamic_bounds.get(
              feature, pd.DataFrame(index=df.index)
          )
  
          assert all(df.index == fdbounds.index)
  
          # prepare date labels
          df = df.drop(
              columns=["histogram", "reference_histogram"],
              errors="ignore",
          )
          dates = [short_date(date) for date in df.index.tolist()]
  
          metrics = sorted(
              filter_metrics(
                  df.columns, self.ignore_stat_endswith, self.show_stats
              )
          )
  
          plots = [
              _plot_metrics(
                  feature,
                  metrics,
                  dates,
                  df,
                  self.last_n,
                  self.skip_first_n,
                  self.skip_last_n,
                  tl_colors=self.tl_colors,
              )
          ]
  
          # filter out potential empty plots (from skip empty plots)
          plots = [e for e in plots if len(e["plot"])]
  
          features_w_metrics.append(
              {
                  "name": feature,
                  "plot_type_layouts": {"traffic_lights": ""},
                  "plots": sorted(plots, key=lambda plot: plot["name"]),
              }
          )
  
      sections.append(
          {
              "section_title": self.section_name,
              "section_description": self.description,
              "features": features_w_metrics,
          }
      )
      return sections
  
file_path: popmon/popmon/visualization/traffic_light_section_generator.py
imports: from __future__ import annotations
  import numpy
  import pandas
  from tqdm import tqdm
  from popmon.base import Module
  from popmon.config import Report
  from popmon.utils import filter_metrics, short_date
  from popmon.visualization.utils import _prune, plot_traffic_lights_alerts_aggregate, plot_traffic_lights_overview
label_desc: Use image node_id 3 for calling the TrafficLightSectionGenerator obj's underlying member method code with example usage: obj.transform(data_obj, dynamic_bounds, sections) and returns: sections