code: def check_num_args(graph):
      msg0 = (
          "Step {0.name} has too many arguments. Normal steps take only "
          "'self' as an argument. Join steps take 'self' and 'inputs'."
      )
      msg1 = (
          "Step *{0.name}* is both a join step (it takes an extra argument) "
          "and a split step (it transitions to multiple steps). This is not "
          "allowed. Add a new step so that split and join become separate steps."
      )
      msg2 = "Step *{0.name}* is missing the 'self' argument."
      for node in graph:
          if node.num_args > 2:
              raise LintWarn(msg0.format(node), node.func_lineno)
          elif node.num_args == 2 and node.type != "join":
              raise LintWarn(msg1.format(node), node.func_lineno)
          elif node.num_args == 0:
              raise LintWarn(msg2.format(node), node.func_lineno)
  
imports: import re
  from .exception import MetaflowException
  from .util import all_equal
label_desc: Use image node_id 5 for calling a global function with example usage: check_num_args(graph) without return types