def update(self, E=None, **F):
def _update(D):<EOL><INDENT>for k,v in D.items():<EOL><INDENT>if super(ConfigDict, self).__contains__(k):<EOL><INDENT>if isinstance(self[k], ConfigDict):<EOL><INDENT>self[k].update(v)<EOL><DEDENT>else:<EOL><INDENT>self[k] = self.assimilate(v)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>self[k] = self.assimilate(v)<EOL><DEDENT><DEDENT><DEDENT>if E is not None:<EOL><INDENT>if not hasattr(E, '<STR_LIT>'):<EOL><INDENT>E = self.assimilate(dict(E))<EOL><DEDENT>_update(E)<EOL><DEDENT>_update(F)<EOL>return self<EOL>
flatten nested dictionaries to update pathwise

        >>> Config({'foo': {'bar': 'glork'}}).update({'foo': {'blub': 'bla'}})
        {'foo': {'bar': 'glork', 'blub': 'bla'}

        In contrast to:

        >>> {'foo': {'bar': 'glork'}}.update({'foo': {'blub': 'bla'}})
        {'foo: {'blub': 'bla'}'}