class_docstr: Analyse time ranges for each TracerEventType, and summarize the time.
code: def __init__(self):
      # event name: GeneralItem
      self.memory_manipulation_items = (
          {}
      )  # for memory manipulation summary
      self.userdefined_items = {}  # for userdefined summary
      self.model_perspective_items = {}
      # phase name:
      #   device name:
      #     stage idx:
      #      thread name:
      #        event type:
      #             {"events" :[], "times": []}
      self.events_per_stage = collections.defaultdict(
          lambda: collections.defaultdict(
              lambda: collections.defaultdict(
                  lambda: collections.defaultdict(
                      lambda: collections.defaultdict(
                          lambda: collections.defaultdict(list)
                      )
                  )
              )
          )
      )
      # phase name:
      #   device name:
      #     stage idx:
      #      event type:
      #           { "calls" :[], "times": [], "total_time": 0 }
  
      self.merged_events_per_stage = collections.defaultdict(
          lambda: collections.defaultdict(
              lambda: collections.defaultdict(
                  lambda: collections.defaultdict(
                      lambda: collections.defaultdict(list)
                  )
              )
          )
      )
  
      self.stage_nums = 0
      self.gpu_ulitization = 0.0
      self.has_forward = False
      self.has_device = False
  
imports: import collections
  from .utils import merge_ranges
  from .utils import merge_self_ranges
  from .utils import rebuild_node_trees
  from .utils import sum_ranges
  from .utils import traverse_tree
label_desc: Use image node_id 1 to create a new OverviewParser object  with example: obj = OverviewParser()