code: def run(self, data: IData, **kwargs: Any) -> None:
      if not self.blocks:
          print_warning("no blocks are built, nothing will happen")
          return
      kw = shallow_copy_dict(kwargs)
      kw["data"] = data
      kw["_defaults"] = self._defaults
      all_blocks = self.block_mappings
      for block in self.blocks:
          block.previous = all_blocks
          safe_execute(block.run, kw)
  
imports: from typing import Any
  from typing import Dict
  from typing import List
  from typing import Type
  from typing import Optional
  from collections import OrderedDict
  from cftool.misc import safe_execute
  from cftool.misc import print_warning
  from cftool.misc import shallow_copy_dict
  from cftool.pipeline import IBlock
  from cftool.pipeline import IPipeline
  from cftool.pipeline import TPipeline
  from ..schema import IData
  from ..schema import DLConfig
  from ..misc.toolkit import get_ddp_info
label_desc: Use image node_id 8 for calling the Pipeline obj's underlying member method code with example usage: obj.run(data) without return types