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.
class_docstr_tok: ["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,
      start_time: datetime | None = None,
      end_time: datetime | 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()))
  
      self.logger.info(f'Generating section "{self.section_name}"')
      time_windows = 0
      values = {}
      offset = ""
      max_timestamp = ""
      for feature in tqdm(features, ncols=100):
          df = data_obj.get(feature, pd.DataFrame())
          time_windows = len(df.index)
          offset = df.index.min()
          max_timestamp = df.index.max()
  
          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",
          )
  
          metrics = filter_metrics(
              df.columns, self.ignore_stat_endswith, self.show_stats
          )
  
          values[feature] = _get_metrics(
              metrics,
              df,
              self.last_n,
              self.skip_first_n,
              self.skip_last_n,
          )
  
      # Dataset summary table and Analysis Details  table
      tables = []
      bin_width = (
          self.bin_specs[self.time_axis]["bin_width"]
          if self.time_axis in self.bin_specs
          else 0
      )
  
      if (
          self.time_axis in self.bin_specs
          and self.bin_specs[self.time_axis]["bin_offset"] > 0
      ):
          offset = datetime.utcfromtimestamp(
              self.bin_specs[self.time_axis]["bin_offset"] // 1e9
          )
      tables.append(
          get_summary_table(
              len(features),
              time_windows,
              self.time_axis,
              self.reference_type,
              bin_width,
              offset,
              max_timestamp,
          )
      )
  
      tables.append(
          get_reproduction_table(start_time, end_time, __version__)
      )
  
      # overview plots
      plots = [_plot_metrics(values)]
      # filter out potential empty plots (from skip empty plots)
      plots = [e for e in plots if len(e["plot"])]
      plots = sorted(plots, key=lambda plot: plot["name"])
  
      plots = tables + plots
  
      sections.append(
          {
              "section_title": self.section_name,
              "section_description": self.description,
              "plots": plots,
          }
      )
      return sections
  
file_path: popmon/popmon/visualization/overview_section.py
imports: from __future__ import annotations
  from datetime import datetime
  import numpy
  import pandas
  from tqdm import tqdm
  from popmon.base import Module
  from popmon.config import Report
  from popmon.resources import templates_env
  from popmon.utils import filter_metrics
  from popmon.version import version
  from popmon.visualization.utils import _prune, get_reproduction_table, get_summary_table
label_desc: Use image node_id 3 for calling the OverviewSectionGenerator obj's underlying member method code with example usage: obj.transform(data_obj, dynamic_bounds, sections, start_time, end_time) and returns: sections