<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def assemble_default_config(modules):
 """Build the default configuration from a set of modules. `modules` is an iterable of :class:`yakonfig.configurable.Configurable` objects, or anything equivalently typed. This produces the default configuration from that list of modules. :param modules: modules or Configurable instances to use :type modules: iterable of :class:`~yakonfig.configurable.Configurable` :return: configuration dictionary """

    def work_in(parent_config, config_name, prefix, module):
        my_config = dict(getattr(module, 'default_config', {}))
        if config_name in parent_config:
            extra_config = parent_config[config_name]
            raise ProgrammerError(
                'config for {0} already present when about to fetch {3}.default_config (had {1!r} would have set {2!r})'.format(
                    prefix, extra_config, my_config, module))
        parent_config[config_name] = my_config
    return _recurse_config(dict(), modules, work_in)