def _apply_defaults_overrides( overrides: List[str], defaults: ListConfig ) -> List[str]: consumed = [] key_to_idx = {} for idx, d in enumerate(defaults): if isinstance(d, DictConfig): key = next(iter(d.keys())) key_to_idx[key] = idx for override in copy.deepcopy(overrides): key, value = split_key_val(override) if key in key_to_idx: if "," in value: # If this is a multirun config (comma separated list), flag the default to prevent it from being # loaded until we are constructing the config for individual jobs. value = "_SKIP_" if value == "null": del defaults[key_to_idx[key]] else: defaults[key_to_idx[key]][key] = value overrides.remove(override) consumed.append(override) return consumed
def _apply_free_defaults(self, defaults: ListConfig, overrides: List[str]) -> List[str]: consumed = [] for override in copy.copy(overrides): key, value = split_key_val(override) if self.exists_in_search_path(key): # Do not add multirun configs into defaults, those will be added to the defaults # during the runs after list is broken into items if "," not in value: defaults.append({key: value}) overrides.remove(override) consumed.append(override) return consumed