def overwrite_config(config_from: Config, config_to: Any, ignore_keys: Optional[Set[str]] = None) -> None: r"""Takes Habitat Lab config and Habitat-Sim config structures. Overwrites Habitat-Sim config with Habitat Lab values, where a field name is present in lowercase. Mostly used to avoid :ref:`sim_cfg.field = hapi_cfg.FIELD` code. Args: config_from: Habitat Lab config node. config_to: Habitat-Sim config structure. ignore_keys: Optional set of keys to ignore in config_to """ def if_config_to_lower(config): if isinstance(config, Config): return {key.lower(): val for key, val in config.items()} else: return config for attr, value in config_from.items(): low_attr = attr.lower() if ignore_keys is None or low_attr not in ignore_keys: if hasattr(config_to, low_attr): setattr(config_to, low_attr, if_config_to_lower(value)) else: raise NameError( f"""{low_attr} is not found on habitat_sim but is found on habitat_lab config. It's also not in the list of keys to ignore: {ignore_keys} Did you make a typo in the config? If not the version of Habitat Sim may not be compatible with Habitat Lab version: {config_from} """)
def overwrite_config(config_from: Config, config_to: Any) -> None: r"""Takes Habitat-API config and Habitat-Sim config structures. Overwrites Habitat-Sim config with Habitat-API values, where a field name is present in lowercase. Mostly used to avoid `sim_cfg.field = hapi_cfg.FIELD` code. Args: config_from: Habitat-API config node. config_to: Habitat-Sim config structure. """ def if_config_to_lower(config): if isinstance(config, Config): return {key.lower(): val for key, val in config.items()} else: return config for attr, value in config_from.items(): if hasattr(config_to, attr.lower()): setattr(config_to, attr.lower(), if_config_to_lower(value))
def overwrite_config(config_from: Config, config_to: Any) -> None: for attr, value in config_from.items(): if hasattr(config_to, attr.lower()): setattr(config_to, attr.lower(), value)