code: def _merge_add_a_into_b(a, b):
      """
      Merge config dictionary a into config dictionary b,
      clobbering the options in b whenever they are also specified in a.
      New options that are only in a will be added to b.
      """
      if type(a) is not EasyDict:
          return
  
      for k, v in a.items():
          # if the key from a is new to b simply add it
          if not k in b:
              b[k] = v
              continue
  
          # the types must match
          old_type = type(b[k])
          if old_type is not type(v):
              if isinstance(b[k], np.ndarray):
                  v = np.array(v, dtype=b[k].dtype)
              else:
                  raise ValueError(
                      (
                          "Type mismatch ({} vs. {}) for config key: {}"
                      ).format(type(b[k]), type(v), k)
                  )
  
          # recursively merge dicts
          if type(v) is EasyDict:
              try:
                  _merge_add_a_into_b(a[k], b[k])
              except:
                  print("Error under config key: {}".format(k))
                  raise
          else:
              b[k] = v
  
label_desc: Use image node_id 2 for calling a global function with example usage: _merge_add_a_into_b(a, b) without return types