parameters: (a, b)
docstring: Merge config dictionary a into config dictionary b, clobbering the options
      in b whenever they are also specified in a.
docstring_summary: Merge config dictionary a into config dictionary b, clobbering the options
      in b whenever they are also specified in a.
docstring_tokens: Merge config dictionary a into config dictionary b clobbering the options in b whenever they are also specified in a .
function: def _merge_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.
      """
      if type(a) is not edict:
          return
      for k, v in a.iteritems():
          # a must specify keys that are in b
          if not b.has_key(k):
              raise KeyError('{} is not a valid config key'.format(k))
  
          # the types must match, too
          if type(b[k]) is not type(v):
              raise ValueError('Type mismatch ({} vs. {}) for config key: {}'.
                                format(type(b[k]), type(v), k))
  
          # recursively merge dicts
          if type(v) is edict:
              try:
                  _merge_a_into_b(a[k], b[k])
              except:
                  print('Error under config key: {}'.format(k))
                  raise
          else:
              b[k] = v
function_tokens: def _merge_a_into_b ( a , b ) : if type ( a ) is not edict : return for k , v in a . iteritems ( ) : # a must specify keys that are in b if not b . has_key ( k ) : raise KeyError ( '{} is not a valid config key' . format ( k ) ) # the types must match, too if type ( b [ k ] ) is not type ( v ) : raise ValueError ( 'Type mismatch ({} vs. {}) for config key: {}' . format ( type ( b [ k ] ) , type ( v ) , k ) ) # recursively merge dicts if type ( v ) is edict : try : _merge_a_into_b ( a [ k ] , b [ k ] ) except : print ( 'Error under config key: {}' . format ( k ) ) raise else : b [ k ] = v