| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| from typing import Any, Dict, List, Union |
|
|
| from omegaconf import OmegaConf |
| from omegaconf.base import DictKeyType, SCMode |
| from omegaconf.dictconfig import DictConfig |
|
|
|
|
| def to_object(cfg: Any) -> Union[Dict[DictKeyType, Any], List[Any], None, str, Any]: |
| """ |
| Converts an OmegaConf configuration object to a native Python container (dict or list), unless |
| the configuration is specifically created by LazyCall, in which case the original configuration |
| is returned directly. |
| |
| This function serves as a modification of the original `to_object` method from OmegaConf, |
| preventing DictConfig objects created by LazyCall from being automatically converted to Python |
| dictionaries. This ensures that configurations meant to be lazily evaluated retain their intended |
| structure and behavior. |
| |
| Differences from OmegaConf's original `to_object`: |
| - Adds a check at the beginning to return the configuration unchanged if it is created by LazyCall. |
| |
| Reference: |
| - Original OmegaConf `to_object` method: https://github.com/omry/omegaconf/blob/master/omegaconf/omegaconf.py#L595 |
| |
| Args: |
| cfg (Any): The OmegaConf configuration object to convert. |
| |
| Returns: |
| Union[Dict[DictKeyType, Any], List[Any], None, str, Any]: The converted Python container if |
| `cfg` is not a LazyCall created configuration, otherwise the unchanged `cfg`. |
| |
| Examples: |
| >>> cfg = DictConfig({"key": "value", "_target_": "Model"}) |
| >>> to_object(cfg) |
| DictConfig({"key": "value", "_target_": "Model"}) |
| |
| >>> cfg = DictConfig({"list": [1, 2, 3]}) |
| >>> to_object(cfg) |
| {'list': [1, 2, 3]} |
| """ |
| if isinstance(cfg, DictConfig) and "_target_" in cfg.keys(): |
| return cfg |
|
|
| return OmegaConf.to_container( |
| cfg=cfg, |
| resolve=True, |
| throw_on_missing=True, |
| enum_to_str=False, |
| structured_config_mode=SCMode.INSTANTIATE, |
| ) |
|
|