| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | from omegaconf import DictConfig, OmegaConf |
| |
|
| |
|
| | class CustomSimpleNamespace: |
| | """ |
| | A simple namespace class that supports both attribute-style and dictionary-style access. |
| | """ |
| |
|
| | def __init__(self, d): |
| | self._d = d |
| |
|
| | def __getattr__(self, attr): |
| | |
| | try: |
| | return self._d[attr] |
| | except KeyError: |
| | raise AttributeError(f"'CustomSimpleNamespace' object has no attribute '{attr}'") |
| |
|
| | def __getitem__(self, key): |
| | |
| | return self._d[key] |
| |
|
| |
|
| | def maybe_convert_to_namespace(config): |
| | """ |
| | This function cast a OmegaConf's DictConfig or a standard dict to CustomSimpleNamespace, which supports both |
| | attribute-style and dictionary-style access. |
| | Note: We need to convert OmegaConf's DictConfig since it is not compatible with torch.compile. |
| | """ |
| | |
| | if isinstance(config, DictConfig): |
| | config = OmegaConf.to_container(config, resolve=True) |
| |
|
| | if isinstance(config, dict): |
| | return CustomSimpleNamespace(config) |
| | else: |
| | return config |
| |
|