code: def __init__(self, func_ast, decos, doc):
      self.name = func_ast.name
      self.func_lineno = func_ast.lineno
      self.decorators = decos
      self.doc = deindent_docstring(doc)
      self.parallel_step = any(
          getattr(deco, "IS_PARALLEL", False) for deco in decos
      )
  
      # these attributes are populated by _parse
      self.tail_next_lineno = 0
      self.type = None
      self.out_funcs = []
      self.has_tail_next = False
      self.invalid_tail_next = False
      self.num_args = 0
      self.foreach_param = None
      self.num_parallel = 0
      self.parallel_foreach = False
      self._parse(func_ast)
  
      # these attributes are populated by _traverse_graph
      self.in_funcs = set()
      self.split_parents = []
      self.matching_join = None
      # these attributes are populated by _postprocess
      self.is_inside_foreach = False
  
imports: import inspect
  import ast
  import re
label_desc: Use image node_id 1 to create a new DAGNode object from inherited base classes: object with example: obj = DAGNode(func_ast, decos, doc)