-
-
Notifications
You must be signed in to change notification settings - Fork 812
Open
Labels
bugSomething isn't workingSomething isn't working
Description
🐛 Bug
Description
Composing a config throws an AssertionError in some circumstances where there is a DictConfig whose _content is None.
To reproduce
Run the following script to confirm that an AssertionError is raised:
from dataclasses import dataclass
from typing import Optional
from hydra import compose, initialize
from hydra.core.config_store import ConfigStore
# from pytest import raises
@dataclass
class Child:
field: bool | int = True
@dataclass
class Parent:
child: Optional[Child] = None
cs = ConfigStore.instance()
cs.store(name="schema", node=Parent)
cs.store(group="grp", name="option", node={"child": {}}, package="_global_")
# with raises(AssertionError):
with initialize(version_base=None):
compose(config_name="schema", overrides=["+grp=option"])Here is the full traceback:
Traceback (most recent call last):
File "/home/homestar/dev/mrepo/pysc/repro.py", line 25, in <module>
compose(config_name="schema", overrides=["+grp=option"])
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/hydra/compose.py", line 34, in compose
cfg = gh.hydra.compose_config(
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/hydra/_internal/hydra.py", line 594, in compose_config
cfg = self.config_loader.load_configuration(
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/hydra/_internal/config_loader_impl.py", line 142, in load_configuration
return self._load_configuration_impl(
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/hydra/_internal/config_loader_impl.py", line 263, in _load_configuration_impl
cfg = self._compose_config_from_defaults_list(
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/hydra/_internal/config_loader_impl.py", line 542, in _compose_config_from_defaults_list
cfg.merge_with(loaded.config)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 490, in merge_with
self._format_and_raise(key=None, value=None, cause=e)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/base.py", line 231, in _format_and_raise
format_and_raise(
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 488, in merge_with
self._merge_with(*others)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 512, in _merge_with
BaseContainer._map_merge(self, other)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 378, in _map_merge
expand(dest_node)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 342, in expand
node._set_value(val)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 647, in _set_value
raise e
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 644, in _set_value
self._set_value_impl(value, flags)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 677, in _set_value_impl
self.__setitem__(k, v)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 314, in __setitem__
self._format_and_raise(key=key, value=value, cause=e)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/base.py", line 231, in _format_and_raise
format_and_raise(
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 308, in __setitem__
self.__set_impl(key=key, value=value)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/dictconfig.py", line 318, in __set_impl
self._set_item_impl(key, value)
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/basecontainer.py", line 533, in _set_item_impl
if self._get_root() is value._get_root():
File "/home/homestar/miniconda3/envs/pysc/lib/python3.10/site-packages/omegaconf/base.py", line 289, in _get_root
assert isinstance(self, Container)
AssertionError
Expected Behavior
No AssertionError, the call to compose should return a config that looks like Parent(Child()).
System information
- Hydra Version : 1.3.0
- Python version : 3.10.8
Additional context
This feels related to omry/omegaconf#1035, though it might not be the exact same code path.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working