code: def parse_header(header, ignores):
      gdict = defaultdict(list)
      gdict.update(
          {
              "ns": [],
              "classes": {},
              "includes": set(),
              "steps": set(),
              "need_methods": False,
              "error_template_string": "",
              "enums": defaultdict(lambda: defaultdict(lambda: "")),
              "typedefs": {},
          }
      )
      ctxt = pcontext(gdict, ignores, header.name)
      parsers = [
          comment_parser(),
          ns_parser(),
          include_parser(),
          eos_parser(),
          typedef_parser(),
          enum_parser(),
          access_parser(),
          step_parser(),
          setget_parser(),
          result_parser(),
          member_parser(),
          class_template_parser(),
      ]
  
      # go line by line
      ctxt.n = 1
      for elem in header:
          # first strip of eol comments if it is not the link
          if not re.search(r"https?://", elem):
              elem = elem.split("//")[0]
          # delete 'DAAL_DEPRECATED'
          elem = elem.replace("DAAL_DEPRECATED ", "")
          # apply each parser, continue to next line if possible
          for p in parsers:
              if p.parse(elem, ctxt):
                  break
          ctxt.n += 1
  
      return gdict
  
imports: import re
  from collections import OrderedDict, defaultdict
label_desc: Use image node_id 2 for calling a global function with example usage: parse_header(header, ignores) and returns: gdict