class_docstr: PipelineProfiler to trace one pipeline.
class_docstr_tok: ["PipelineProfiler","to","trace","one","pipeline","."]
code: def set_node_report(self):
      self.check_tracer()  # check and set node_tracer
      for node_id, tracer in self.node_tracer.items():
          self.node_report[node_id] = dict(
              node=tracer["name"] + "(" + tracer["iter"] + ")",
              ncalls=len(tracer["process_in"]),
              total_time=self.cal_time(
                  tracer["queue_in"], tracer["queue_out"]
              ),
              init=self.cal_time(tracer["init_in"], tracer["init_out"]),
              wait_data=self.cal_time(
                  tracer["queue_in"], tracer["process_in"]
              ),
              call_op=self.cal_time(
                  tracer["process_in"], tracer["process_out"]
              ),
              output_data=self.cal_time(
                  tracer["process_out"], tracer["queue_out"]
              ),
          )
  
imports: import json
  from typing import Dict, List
  from tabulate import tabulate
  from copy import deepcopy
  from pathlib import Path
  from towhee.runtime.constants import WindowAllConst
  from towhee.runtime.time_profiler import Event
  from towhee.utils.log import engine_log
label_desc: Use image node_id 3 for calling the PipelineProfiler obj's underlying member method code with example usage: obj.set_node_report() without return types