deepcode-ci-bot[bot]: ## DeepCode's analysis on [#08bced](https://www.deepcode.ai/app/gh/omry/omegaconf/2f42a758dbf0b515576d59bfcd13a6beda93001b/omry/omegaconf/08bced2b859407d3fb19b68ffa570248a308219c/_/%2F/code/?utm_source=gh_review) found:

:warning: **1** warning  :heavy_check_mark: **0** issues were fixed.

##### 👉 View analysis in [**DeepCode’s Dashboard**](https://www.deepcode.ai/app/gh/omry/omegaconf/2f42a758dbf0b515576d59bfcd13a6beda93001b/omry/omegaconf/08bced2b859407d3fb19b68ffa570248a308219c/_/%2F/code/?utm_source=gh_review)
---
:relaxed: If you want to provide feedback on our bot, here is how to [contact us](https://www.deepcode.ai/feedback?select=4&utm_source=gh_review).

diff --git a/omegaconf/_utils.py b/omegaconf/_utils.py
index bcd4be3..bec1fe1 100644
--- a/omegaconf/_utils.py
+++ b/omegaconf/_utils.py
@@ -9,6 +9,7 @@ import yaml
 from .errors import (
     ConfigIndexError,
     ConfigTypeError,
+    ConfigValueError,
     KeyValidationError,
     OmegaConfBaseException,
     ValidationError,
@@ -76,9 +77,11 @@ def _get_class(path: str) -> type:
     return klass
 
 
-def _resolve_optional(type_: Any) -> Tuple[bool, Any]:
-    from typing import Union
+def _is_union(type_: Any) -> bool:
+    return getattr(type_, "__origin__", None) is Union
+
 
+def _resolve_optional(type_: Any) -> Tuple[bool, Any]:
     if getattr(type_, "__origin__", None) is Union:
         args = type_.__args__
         if len(args) == 2 and args[1] == type(None):  # noqa E721
@@ -107,8 +110,8 @@ def get_attr_data(obj: Any) -> Dict[str, Any]:
     obj_type = obj if is_type else type(obj)
     for name, attrib in attr.fields_dict(obj_type).items():
         is_optional, type_ = _resolve_optional(attrib.type)
-        type_ = _resolve_forward(type_, obj.__module__)
         is_nested = is_attr_class(type_)
+        type_ = _resolve_forward(type_, obj.__module__)
         if not is_type:
             value = getattr(obj, name)
         else:
@@ -118,9 +121,15 @@ def get_attr_data(obj: Any) -> Dict[str, Any]:
                     value = type_
                 else:
                     raise ValueError(
-                        "Missing default value for {}, to indicate "
-                        "default must be populated later use '???'".format(name)
+                        f"Missing default value for {name}, to indicate "
+                        "default must be populated later use OmegaConf.MISSING"
                     )
+        if _is_union(type_):
+            e = ConfigValueError(
+                f"Union types are not supported:\n{name}: {type_str(type_)}"
+            )
+            format_and_raise(node=None, key=None, value=value, cause=e, msg=str(e))
+
         d[name] = _maybe_wrap(
             ref_type=type_, is_optional=is_optional, key=name, value=value, parent=None,
         )
@@ -146,10 +155,15 @@ def get_dataclass_data(obj: Any) -> Dict[str, Any]:
                     value = type_
                 else:
                     raise ValueError(
-                        "Missing default value for {}, to indicate "
-                        "default must be populated later use '???'".format(name)
+                        f"Missing default value for {name}, to indicate "
+                        "default must be populated later use OmegaConf.MISSING"
                     )
 
+        if _is_union(type_):
+            e = ConfigValueError(
+                f"Union types are not supported:\n{name}: {type_str(type_)}"
+            )
+            format_and_raise(node=None, key=None, value=value, cause=e, msg=str(e))
         d[name] = _maybe_wrap(
             ref_type=type_, is_optional=is_optional, key=name, value=value, parent=None,
         )
@@ -429,15 +443,15 @@ def format_and_raise(
     ref_type_str: Optional[str]
 
     child_node: Optional[Node] = None
-    if key is not None:
-        child_node = node._get_node(key, validate_access=False)
-
     if node is None:
         full_key = ""
         object_type = None
         ref_type = None
         ref_type_str = None
     else:
+        if key is not None:
+            child_node = node._get_node(key, validate_access=False)
+
         full_key = node._get_full_key(key=key)
 
         ref_type = OmegaConf.get_ref_type(node)
@@ -497,10 +511,27 @@ def format_and_raise(
 
 
 def type_str(t: Any) -> str:
-    if hasattr(t, "__name__"):
-        name = str(t.__name__)
-    else:
-        name = str(t._name)  # pragma: no cover
+    if sys.version_info < (3, 7, 0):  # pragma: no cover
+        # Python 3.6
+        if hasattr(t, "__name__"):
+            name = str(t.__name__)
+        else:
+            if t.__origin__ is not None:
+                name = type_str(t.__origin__)
+            else:
+                name = str(t)
+                if name.startswith("typing."):
+                    name = name[len("typing.") :]
+    else:  # pragma: no cover
+        # Python >= 3.7
+        if hasattr(t, "__name__"):
+            name = str(t.__name__)
+        else:
+            if t._name is None:
+                if t.__origin__ is not None:
+                    name = type_str(t.__origin__)
+            else:
+                name = str(t._name)
 
     args = getattr(t, "__args__", None)
     if args is not None:
diff --git a/omegaconf/omegaconf.py b/omegaconf/omegaconf.py
index c40cf22..6652a1e 100644
--- a/omegaconf/omegaconf.py
+++ b/omegaconf/omegaconf.py
@@ -40,6 +40,7 @@ from ._utils import (
     is_primitive_type,
     is_structured_config,
     isint,
+    type_str,
     valid_value_annotation_type,
 )
 from .base import Container, Node
@@ -586,7 +587,7 @@ def _node_wrap(
 ) -> ValueNode:
     if not valid_value_annotation_type(type_):
         raise ValidationError(
-            f"Annotated class '{type_.__name__}' is not a structured config. "
+            f"Annotated class '{type_str(type_)}' is not a structured config. "
             "did you forget to decorate it as a dataclass?"
         )
     node: ValueNode

Add a clear error for Union in structured configs not being supported for now
cc @jrapin

diff --git a/tests/__init__.py b/tests/__init__.py
index 41a64ed..b831bca 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,7 +1,7 @@
 from contextlib import contextmanager
 from dataclasses import dataclass, field
 from enum import Enum
-from typing import Any, Dict, Iterator, List, Optional
+from typing import Any, Dict, Iterator, List, Optional, Union
 
 from omegaconf import II, MISSING
 
@@ -83,3 +83,8 @@ class StructuredWithMissing:
     inter_num: int = II("num")
     inter_user: User = II("user")
     inter_opt_user: Optional[User] = II("opt_user")
+
+
+@dataclass
+class UnionError:
+    x: Union[int, str] = 10
diff --git a/tests/structured_conf/data/attr_classes.py b/tests/structured_conf/data/attr_classes.py
index 8e088c4..c9767b1 100644
--- a/tests/structured_conf/data/attr_classes.py
+++ b/tests/structured_conf/data/attr_classes.py
@@ -1,4 +1,4 @@
-from typing import Any, Dict, List, Optional, Tuple
+from typing import Any, Dict, List, Optional, Tuple, Union
 
 import attr  # noqaE402
 import pytest
@@ -387,3 +387,8 @@ class MissingTest:
 @attr.s(auto_attribs=True)
 class NestedWithNone:
     plugin: Optional[Plugin] = None
+
+
+@attr.s(auto_attribs=True)
+class UnionError:
+    x: Union[int, str] = 10
diff --git a/tests/structured_conf/data/dataclasses.py b/tests/structured_conf/data/dataclasses.py
index 282903b..6851d0c 100644
--- a/tests/structured_conf/data/dataclasses.py
+++ b/tests/structured_conf/data/dataclasses.py
@@ -1,5 +1,5 @@
 from dataclasses import dataclass, field  # noqaE402
-from typing import Any, Dict, List, Optional, Tuple
+from typing import Any, Dict, List, Optional, Tuple, Union
 
 import pytest
 
@@ -394,3 +394,8 @@ class MissingTest:
 @dataclass
 class NestedWithNone:
     plugin: Optional[Plugin] = None
+
+
+@dataclass
+class UnionError:
+    x: Union[int, str] = 10
diff --git a/tests/structured_conf/test_structured_config.py b/tests/structured_conf/test_structured_config.py
index d812232..98a4977 100644
--- a/tests/structured_conf/test_structured_config.py
+++ b/tests/structured_conf/test_structured_config.py
@@ -1,3 +1,4 @@
+import re
 from importlib import import_module
 from typing import Any, Dict
 
@@ -142,9 +143,26 @@ class TestConfigs:
         conf1 = OmegaConf.structured(module.NestedConfig(default_value=module.Nested()))
         validate(conf1)
 
-        with pytest.raises(ValueError):
+    def test_value_without_a_default(self, class_type: str) -> None:
+        module: Any = import_module(class_type)
+        with pytest.raises(
+            ValueError,
+            match=re.escape(
+                "Missing default value for no_default, "
+                "to indicate default must be populated later use OmegaConf.MISSING"
+            ),
+        ):
             OmegaConf.structured(module.NoDefaultErrors)
 
+        OmegaConf.structured(module.NoDefaultErrors(no_default=10)) == {
+            "no_default": 10
+        }
+
+    def test_union_errors(self, class_type: str) -> None:
+        module: Any = import_module(class_type)
+        with pytest.raises(ValueError):
+            OmegaConf.structured(module.UnionError)
+
     def test_config_with_list(self, class_type: str) -> None:
         module: Any = import_module(class_type)
 
diff --git a/tests/test_errors.py b/tests/test_errors.py
index 7b972e5..2fca652 100644
--- a/tests/test_errors.py
+++ b/tests/test_errors.py
@@ -24,7 +24,14 @@ from omegaconf.errors import (
     MissingMandatoryValue,
 )
 
-from . import Color, ConcretePlugin, IllegalType, Plugin, StructuredWithMissing
+from . import (
+    Color,
+    ConcretePlugin,
+    IllegalType,
+    Plugin,
+    StructuredWithMissing,
+    UnionError,
+)
 
 
 @dataclass
@@ -405,6 +412,17 @@ params = [
         ),
         id="structured:create_from_unsupported_object",
     ),
+    pytest.param(
+        Expected(
+            create=lambda: None,
+            op=lambda cfg: OmegaConf.structured(UnionError),
+            exception_type=ValueError,
+            msg="Union types are not supported:\nx: Union[int, str]",
+            object_type_str=None,
+            ref_type_str=None,
+        ),
+        id="structured:create_with_union_error",
+    ),
     # assign
     pytest.param(
         Expected(
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 709ac63..74cb297 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -1,6 +1,6 @@
 from dataclasses import dataclass, field
 from enum import Enum
-from typing import Any, Dict, List
+from typing import Any, Dict, List, Union
 
 import attr
 import pytest
@@ -308,6 +308,7 @@ def test_is_primitive_type(type_: Any, is_primitive: bool) -> None:
         (List[str], "List[str]"),
         (List[Color], "List[Color]"),
         (List[Dict[str, Color]], "List[Dict[str, Color]]"),
+        (Union[str, int, Color], "Union[str, int, Color]"),
     ],
 )
 def test_type_str(type_: Any, expected: str) -> None:

pip install -e .[dev]
parse_log_pytest
pytest
pytest pytest-mock
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
-e git+https://github.com/omry/omegaconf.git@2f42a758dbf0b515576d59bfcd13a6beda93001b#egg=omegaconf
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
pytest-mock==3.11.1
PyYAML==6.0.1
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work

name: omegaconf
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - omegaconf==2.0.0rc23
      - pytest-mock==3.11.1
      - pyyaml==6.0.1
prefix: /opt/conda/envs/omegaconf

tests/structured_conf/test_structured_config.py::TestConfigs::test_value_without_a_default[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_value_without_a_default[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_union_errors[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_union_errors[tests.structured_conf.data.attr_classes] tests/test_errors.py::test_errors[structured:create_with_union_error] tests/test_utils.py::test_type_str[type_14-Union[str,
tests/test_base_config.py::test_set_value[input_0-foo-10-expected0] tests/test_base_config.py::test_set_value[input_1-foo-value1-expected1] tests/test_base_config.py::test_set_value[input_2-foo-value2-expected2] tests/test_base_config.py::test_set_value[input_3-foo-value3-expected3] tests/test_base_config.py::test_set_value[input_4-0-10-expected4] tests/test_base_config.py::test_set_value[input_5-1-10-expected5] tests/test_base_config.py::test_set_value[input_6-1-value6-expected6] tests/test_base_config.py::test_set_value[input_7-1-value7-expected7] tests/test_base_config.py::test_set_value[input_8-1-value8-expected8] tests/test_base_config.py::test_set_value_validation_fail[input_0-foo-str] tests/test_base_config.py::test_set_value_validation_fail[input_1-1-str] tests/test_base_config.py::test_replace_value_node_type_with_another[input_0-foo-value0] tests/test_base_config.py::test_replace_value_node_type_with_another[input_1-1-value1] tests/test_base_config.py::test_to_container_returns_primitives[input_0] tests/test_base_config.py::test_to_container_returns_primitives[input_1] tests/test_base_config.py::test_to_container_returns_primitives[input_2] tests/test_base_config.py::test_to_container_returns_primitives[input_3] tests/test_base_config.py::test_to_container_returns_primitives[input_4] tests/test_base_config.py::test_empty[input_0-True] tests/test_base_config.py::test_empty[input_1-True] tests/test_base_config.py::test_empty[input_2-False] tests/test_base_config.py::test_empty[input_3-False] tests/test_base_config.py::test_str[input_0-[]-str] tests/test_base_config.py::test_str[input_0-[]-repr] tests/test_base_config.py::test_str[input_1-{}-str] tests/test_base_config.py::test_str[input_1-{}-repr] tests/test_base_config.py::test_str[input_2-[1, tests/test_base_config.py::test_str[input_3-[1, tests/test_base_config.py::test_str[input_4-[1, tests/test_base_config.py::test_str[input_5-{'b': tests/test_base_config.py::test_str[input_6-{'b': tests/test_base_config.py::test_str[StructuredWithMissing-{'num': tests/test_base_config.py::test_flag_dict[readonly] tests/test_base_config.py::test_flag_dict[struct] tests/test_base_config.py::test_freeze_nested_dict[readonly] tests/test_base_config.py::test_freeze_nested_dict[struct] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src0] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src1] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src2] tests/test_base_config.py::TestDeepCopy::test_deepcopy[src3] tests/test_base_config.py::TestDeepCopy::test_deepcopy[StructuredWithMissing] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src0] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src1] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src2] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[src3] tests/test_base_config.py::TestDeepCopy::test_deepcopy_readonly[StructuredWithMissing] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src0] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src1] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src2] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[src3] tests/test_base_config.py::TestDeepCopy::test_deepcopy_struct[StructuredWithMissing] tests/test_base_config.py::test_deepcopy_after_del tests/test_base_config.py::test_deepcopy_after_pop tests/test_base_config.py::test_deepcopy_with_interpolation tests/test_base_config.py::test_deepcopy_and_merge_and_flags tests/test_base_config.py::test_deepcopy_preserves_container_type[cfg0] tests/test_base_config.py::test_deepcopy_preserves_container_type[cfg1] tests/test_base_config.py::test_flag_override[struct_setiitem] tests/test_base_config.py::test_flag_override[struct_setattr] tests/test_base_config.py::test_flag_override[readonly] tests/test_base_config.py::test_read_write_override[src0-<lambda>-expectation0] tests/test_base_config.py::test_read_write_override[src1-<lambda>-expectation1] tests/test_base_config.py::test_tokenize_with_escapes[dog,cat-tokenized0] tests/test_base_config.py::test_tokenize_with_escapes[dog\\,cat\\ tests/test_base_config.py::test_tokenize_with_escapes[dog,\\ tests/test_base_config.py::test_tokenize_with_escapes[\\ tests/test_base_config.py::test_tokenize_with_escapes[dog, tests/test_base_config.py::test_tokenize_with_escapes[whitespace\\ tests/test_base_config.py::test_tokenize_with_escapes[None-tokenized8] tests/test_base_config.py::test_tokenize_with_escapes[-tokenized9] tests/test_base_config.py::test_tokenize_with_escapes[no tests/test_base_config.py::test_struct_override[src0-<lambda>-expectation0] tests/test_base_config.py::test_open_dict_restore[struct-open_dict] tests/test_base_config.py::test_open_dict_restore[readonly-read_write] tests/test_base_config.py::TestCopy::test_copy[src0-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src0-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src1-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src1-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src2-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src2-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src3-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src3-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src4-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src4-<lambda>1] tests/test_base_config.py::TestCopy::test_copy[src5-<lambda>0] tests/test_base_config.py::TestCopy::test_copy[src5-<lambda>1] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src0-2-0-<lambda>0] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src0-2-0-<lambda>1] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src1-b-a-<lambda>0] tests/test_base_config.py::TestCopy::test_copy_with_interpolation[src1-b-a-<lambda>1] tests/test_base_config.py::TestCopy::test_list_copy_is_shallow[<lambda>0] tests/test_base_config.py::TestCopy::test_list_copy_is_shallow[<lambda>1] tests/test_base_config.py::test_not_implemented tests/test_base_config.py::test_resolve_str_interpolation[a-a] tests/test_base_config.py::test_resolve_str_interpolation[${foo}-10] tests/test_base_config.py::test_resolve_str_interpolation[${bar}-10] tests/test_base_config.py::test_resolve_str_interpolation[foo_${foo}-foo_10] tests/test_base_config.py::test_resolve_str_interpolation[foo_${bar}-foo_10] tests/test_base_config.py::test_omegaconf_create tests/test_base_config.py::test_assign[parent0-0-value0-expected0] tests/test_base_config.py::test_assign[parent1-0-value1-expected1] tests/test_base_config.py::test_assign[parent2-0-value2-expected2] tests/test_base_config.py::test_assign[parent3-foo-value3-expected3] tests/test_base_config.py::test_assign[parent4-foo-value4-expected4] tests/test_base_config.py::test_assign[parent5-foo-value5-expected5] tests/test_base_config.py::test_get_node[cfg0-foo-bar] tests/test_base_config.py::test_get_node[cfg1-foo-None] tests/test_base_config.py::test_get_node[cfg2-foo-???] tests/test_base_config.py::test_get_node[cfg3-1-20] tests/test_base_config.py::test_get_node[cfg4-1-None] tests/test_base_config.py::test_get_node[cfg5-1-???] tests/structured_conf/test_structured_config.py::TestConfigs::test_nested_config_is_none[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_nested_config_is_none[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_nested_config[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_nested_config[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_config_with_list[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_config_with_list[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_assignment_to_nested_structured_config[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_assignment_to_nested_structured_config[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_assignment_to_structured_inside_dict_config[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_assignment_to_structured_inside_dict_config[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_config_with_dict[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_config_with_dict[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_structured_config_struct_behavior[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_structured_config_struct_behavior[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[BoolConfig-BoolConfigAssignments-init_dict0-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[BoolConfig-BoolConfigAssignments-init_dict0-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[IntegersConfig-IntegersConfigAssignments-init_dict1-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[IntegersConfig-IntegersConfigAssignments-init_dict1-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[FloatConfig-FloatConfigAssignments-init_dict2-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[FloatConfig-FloatConfigAssignments-init_dict2-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[StringConfig-StringConfigAssignments-init_dict3-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[StringConfig-StringConfigAssignments-init_dict3-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[EnumConfig-EnumConfigAssignments-init_dict4-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[EnumConfig-EnumConfigAssignments-init_dict4-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[BoolConfig-BoolConfigAssignments-init_dict5-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[BoolConfig-BoolConfigAssignments-init_dict5-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[IntegersConfig-IntegersConfigAssignments-init_dict6-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[IntegersConfig-IntegersConfigAssignments-init_dict6-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[FloatConfig-FloatConfigAssignments-init_dict7-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[FloatConfig-FloatConfigAssignments-init_dict7-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[StringConfig-StringConfigAssignments-init_dict8-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[StringConfig-StringConfigAssignments-init_dict8-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[EnumConfig-EnumConfigAssignments-init_dict9-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[EnumConfig-EnumConfigAssignments-init_dict9-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[AnyTypeConfig-AnyTypeConfigAssignments-init_dict10-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_field_with_default_value[AnyTypeConfig-AnyTypeConfigAssignments-init_dict10-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[None-expected_init0-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[None-expected_init0-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[input_init1-expected_init1-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[input_init1-expected_init1-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[None-expected_init2-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[None-expected_init2-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[input_init3-expected_init3-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_untyped[input_init3-expected_init3-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_interpolation[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_interpolation[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[BoolOptional-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[BoolOptional-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[IntegerOptional-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[IntegerOptional-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[FloatOptional-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[FloatOptional-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[StringOptional-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[StringOptional-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[EnumOptional-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[EnumOptional-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[StructuredOptional-tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_optional[StructuredOptional-tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_list[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_list[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_dict[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_dict[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_type1[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_type1[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_type2[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_type2[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_with_subclass[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_with_subclass[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_with_nons_subclass[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_merged_with_nons_subclass[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_dict_key_error[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_dict_key_error[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_dict_value_error[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_dict_value_error[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_list_value_error[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_typed_list_value_error[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_list_examples[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_list_examples[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_dict_examples[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_dict_examples[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_enum_key[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_enum_key[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_dict_of_objects[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_dict_of_objects[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_list_of_objects[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_list_of_objects[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_promote_api[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_promote_api[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_promote_to_class[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_promote_to_class[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestConfigs::test_promote_to_object[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestConfigs::test_promote_to_object[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::test_attr_frozen tests/structured_conf/test_structured_config.py::test_dataclass_frozen tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2str[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2str[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_color2str[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_color2str[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_color2color[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_color2color[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2user[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2user[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2str_with_field[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2str_with_field[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2int_with_field_of_different_type[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::test_str2int_with_field_of_different_type[tests.structured_conf.data.attr_classes] tests/structured_conf/test_structured_config.py::TestDictSubclass::TestErrors::test_usr2str[tests.structured_conf.data.dataclasses] tests/structured_conf/test_structured_config.py::TestDictSubclass::TestErrors::test_usr2str[tests.structured_conf.data.attr_classes] tests/test_errors.py::test_errors[structured:update_with_invalid_value] tests/test_errors.py::test_errors[structured:update:none_to_non_optional] tests/test_errors.py::test_errors[dict:update:object_of_illegal_type] tests/test_errors.py::test_errors[dict,readonly:pop] tests/test_errors.py::test_errors[dict:pop_invalid] tests/test_errors.py::test_errors[dict:pop_invalid_nested] tests/test_errors.py::test_errors[structured:access_invalid_attribute] tests/test_errors.py::test_errors[dict,struct:access_invalid_attribute] tests/test_errors.py::test_errors[dict,accessing_missing_interpolation] tests/test_errors.py::test_errors[dict,accessing_missing_str_interpolation] tests/test_errors.py::test_errors[dict,struct:set_invalid_attribute] tests/test_errors.py::test_errors[structured:setattr,invalid_type_assigned_to_structured] tests/test_errors.py::test_errors[dict,readonly:set_attribute] tests/test_errors.py::test_errors[dict,none_optional:set_none] tests/test_errors.py::test_errors[structured:setattr,invalid_type_assigned_to_field] tests/test_errors.py::test_errors[dict,struct:setitem_on_none_existing_key] tests/test_errors.py::test_errors[dict,struct:getitem_key_not_in_struct] tests/test_errors.py::test_errors[dict,reftype=Dict[Color,str]:,getitem_str_key] tests/test_errors.py::test_errors[dict,reftype=Dict[str,str]:,getitem_color_key] tests/test_errors.py::test_errors[dict,readonly:merge_with] tests/test_errors.py::test_errors[structured:merge,invalid_field_type] tests/test_errors.py::test_errors[structured:merge,adding_an_invalid_key] tests/test_errors.py::test_errors[structured:merge_invalid_dataclass] tests/test_errors.py::test_errors[dict:get_illegal_type] tests/test_errors.py::test_errors[dict:get_object_of_illegal_type] tests/test_errors.py::test_errors[dict_create_none_optional_with_none] tests/test_errors.py::test_errors[dict_create_from_illegal_type] tests/test_errors.py::test_errors[structured:create_from_unsupported_object] tests/test_errors.py::test_errors[dict:set_value:reftype_mismatch] tests/test_errors.py::test_errors[dict,int_element_type:assigned_str_value] tests/test_errors.py::test_errors[dict,readonly:del] tests/test_errors.py::test_errors[list:get_nox_ex:invalid_index_type] tests/test_errors.py::test_errors[list:get_node_ex:index_out_of_range] tests/test_errors.py::test_errors[list:get_node_none] tests/test_errors.py::test_errors[list:get_node_missing] tests/test_errors.py::test_errors[list:create_not_optional_with_none] tests/test_errors.py::test_errors[list:append_value_of_illegal_type] tests/test_errors.py::test_errors[dict:readonly:pop0] tests/test_errors.py::test_errors[dict:readonly:pop1] tests/test_errors.py::test_errors[list:pop_from_none] tests/test_errors.py::test_errors[list:pop_from_missing] tests/test_errors.py::test_errors[list:subscript_slice_with_missing] tests/test_errors.py::test_errors[list:subscript_index_with_missing] tests/test_errors.py::test_errors[list:subscript:index_out_of_range] tests/test_errors.py::test_errors[list:getitem,illegal_key_type0] tests/test_errors.py::test_errors[list:getitem,illegal_key_type1] tests/test_errors.py::test_errors[list:setitem,illegal_value_type] tests/test_errors.py::test_errors[list:setitem,illegal_key_type] tests/test_errors.py::test_errors[list,readonly:setitem] tests/test_errors.py::test_errors[list,int_elements:assigned_str_element0] tests/test_errors.py::test_errors[list,int_elements:assigned_str_element1] tests/test_errors.py::test_errors[list,not_optional:null_assignment] tests/test_errors.py::test_errors[list,readonly:index_not_found] tests/test_errors.py::test_errors[list,readonly:insert] tests/test_errors.py::test_errors[list:insert_into_none] tests/test_errors.py::test_errors[list:insert_into_missing] tests/test_errors.py::test_errors[list:get_from_none] tests/test_errors.py::test_errors[list:get_from_missing] tests/test_errors.py::test_errors[list:readonly:sort0] tests/test_errors.py::test_errors[list:sort_from_none] tests/test_errors.py::test_errors[list:sort_from_missing] tests/test_errors.py::test_errors[list:readonly:sort1] tests/test_errors.py::test_errors[list:iter_none] tests/test_errors.py::test_errors[list:iter_missing] tests/test_errors.py::test_errors[list,readonly:del] tests/test_utils.py::test_maybe_wrap[target_type0-foo-None] tests/test_utils.py::test_maybe_wrap[target_type1-True-None] tests/test_utils.py::test_maybe_wrap[target_type2-1-None] tests/test_utils.py::test_maybe_wrap[target_type3-1.0-None] tests/test_utils.py::test_maybe_wrap[target_type4-Color.RED-None] tests/test_utils.py::test_maybe_wrap[int-foo-ValidationError] tests/test_utils.py::test_maybe_wrap[int-True-ValidationError] tests/test_utils.py::test_maybe_wrap[int-1-None] tests/test_utils.py::test_maybe_wrap[int-1.0-ValidationError] tests/test_utils.py::test_maybe_wrap[int-Color.RED-ValidationError] tests/test_utils.py::test_maybe_wrap[float-foo-ValidationError] tests/test_utils.py::test_maybe_wrap[float-True-ValidationError] tests/test_utils.py::test_maybe_wrap[float-1-None] tests/test_utils.py::test_maybe_wrap[float-1.0-None] tests/test_utils.py::test_maybe_wrap[float-Color.RED-ValidationError] tests/test_utils.py::test_maybe_wrap[bool-foo-ValidationError] tests/test_utils.py::test_maybe_wrap[bool-True-None] tests/test_utils.py::test_maybe_wrap[bool-1-None] tests/test_utils.py::test_maybe_wrap[bool-0-None] tests/test_utils.py::test_maybe_wrap[bool-1.0-ValidationError] tests/test_utils.py::test_maybe_wrap[bool-Color.RED-ValidationError] tests/test_utils.py::test_maybe_wrap[bool-true-None] tests/test_utils.py::test_maybe_wrap[bool-false-None] tests/test_utils.py::test_maybe_wrap[bool-on-None] tests/test_utils.py::test_maybe_wrap[bool-off-None] tests/test_utils.py::test_maybe_wrap[str-foo-None] tests/test_utils.py::test_maybe_wrap[str-True-None] tests/test_utils.py::test_maybe_wrap[str-1-None] tests/test_utils.py::test_maybe_wrap[str-1.0-None] tests/test_utils.py::test_maybe_wrap[str-Color.RED-None] tests/test_utils.py::test_maybe_wrap[Color-foo-ValidationError] tests/test_utils.py::test_maybe_wrap[Color-True-ValidationError] tests/test_utils.py::test_maybe_wrap[Color-1-None] tests/test_utils.py::test_maybe_wrap[Color-1.0-ValidationError] tests/test_utils.py::test_maybe_wrap[Color-Color.RED-None0] tests/test_utils.py::test_maybe_wrap[Color-RED-None] tests/test_utils.py::test_maybe_wrap[Color-Color.RED-None1] tests/test_utils.py::test_maybe_wrap[IllegalType-nope-ValidationError] tests/test_utils.py::test_valid_value_annotation_type[int-True] tests/test_utils.py::test_valid_value_annotation_type[float-True] tests/test_utils.py::test_valid_value_annotation_type[bool-True] tests/test_utils.py::test_valid_value_annotation_type[str-True] tests/test_utils.py::test_valid_value_annotation_type[type_4-True] tests/test_utils.py::test_valid_value_annotation_type[_TestEnum-True] tests/test_utils.py::test_valid_value_annotation_type[_TestUserClass-False] tests/test_utils.py::test_valid_value_annotation_type[_TestAttrsClass-True] tests/test_utils.py::test_valid_value_annotation_type[_TestDataclass-True] tests/test_utils.py::test_get_structured_config_data[_TestDataclass-expectation0] tests/test_utils.py::test_get_structured_config_data[test_cls_or_obj1-expectation1] tests/test_utils.py::test_get_structured_config_data[_TestAttrsClass-expectation2] tests/test_utils.py::test_get_structured_config_data[test_cls_or_obj3-expectation3] tests/test_utils.py::test_get_structured_config_data[invalid-expectation4] tests/test_utils.py::test_is_dataclass tests/test_utils.py::test_is_attr_class tests/test_utils.py::test_is_structured_config_frozen_with_invalid_obj tests/test_utils.py::test_value_kind[foo-ValueKind.VALUE] tests/test_utils.py::test_value_kind[1-ValueKind.VALUE] tests/test_utils.py::test_value_kind[1.0-ValueKind.VALUE] tests/test_utils.py::test_value_kind[True-ValueKind.VALUE] tests/test_utils.py::test_value_kind[False-ValueKind.VALUE] tests/test_utils.py::test_value_kind[Color.GREEN-ValueKind.VALUE] tests/test_utils.py::test_value_kind[Dataclass-ValueKind.VALUE] tests/test_utils.py::test_value_kind[???-ValueKind.MANDATORY_MISSING] tests/test_utils.py::test_value_kind[${foo.bar}-ValueKind.INTERPOLATION] tests/test_utils.py::test_value_kind[ftp://${host}/path-ValueKind.STR_INTERPOLATION] tests/test_utils.py::test_re_parent tests/test_utils.py::test_get_class tests/test_utils.py::test_get_key_value_types[int-int-int-KeyValidationError] tests/test_utils.py::test_get_key_value_types[int-int-str-str] tests/test_utils.py::test_get_key_value_types[int-int-Color-Color] tests/test_utils.py::test_get_key_value_types[int-int-key_type3-None] tests/test_utils.py::test_get_key_value_types[int-int-None-KeyValidationError] tests/test_utils.py::test_get_key_value_types[str-str-int-KeyValidationError] tests/test_utils.py::test_get_key_value_types[str-str-str-str] tests/test_utils.py::test_get_key_value_types[str-str-Color-Color] tests/test_utils.py::test_get_key_value_types[str-str-key_type3-None] tests/test_utils.py::test_get_key_value_types[str-str-None-KeyValidationError] tests/test_utils.py::test_get_key_value_types[Color-Color-int-KeyValidationError] tests/test_utils.py::test_get_key_value_types[Color-Color-str-str] tests/test_utils.py::test_get_key_value_types[Color-Color-Color-Color] tests/test_utils.py::test_get_key_value_types[Color-Color-key_type3-None] tests/test_utils.py::test_get_key_value_types[Color-Color-None-KeyValidationError] tests/test_utils.py::test_get_key_value_types[value_type3-None-int-KeyValidationError] tests/test_utils.py::test_get_key_value_types[value_type3-None-str-str] tests/test_utils.py::test_get_key_value_types[value_type3-None-Color-Color] tests/test_utils.py::test_get_key_value_types[value_type3-None-key_type3-None] tests/test_utils.py::test_get_key_value_types[value_type3-None-None-KeyValidationError] tests/test_utils.py::test_get_key_value_types[None-NoneType-int-KeyValidationError] tests/test_utils.py::test_get_key_value_types[None-NoneType-str-str] tests/test_utils.py::test_get_key_value_types[None-NoneType-Color-Color] tests/test_utils.py::test_get_key_value_types[None-NoneType-key_type3-None] tests/test_utils.py::test_get_key_value_types[None-NoneType-None-KeyValidationError] tests/test_utils.py::test_is_primitive_type[int-True] tests/test_utils.py::test_is_primitive_type[float-True] tests/test_utils.py::test_is_primitive_type[bool-True] tests/test_utils.py::test_is_primitive_type[str-True] tests/test_utils.py::test_is_primitive_type[NoneType-True] tests/test_utils.py::test_is_primitive_type[Color-True] tests/test_utils.py::test_is_primitive_type[list-False] tests/test_utils.py::test_is_primitive_type[ListConfig-False] tests/test_utils.py::test_is_primitive_type[dict-False] tests/test_utils.py::test_is_primitive_type[DictConfig-False] tests/test_utils.py::test_type_str[int-int] tests/test_utils.py::test_type_str[bool-bool] tests/test_utils.py::test_type_str[float-float] tests/test_utils.py::test_type_str[str-str] tests/test_utils.py::test_type_str[Color-Color] tests/test_utils.py::test_type_str[DictConfig-DictConfig] tests/test_utils.py::test_type_str[ListConfig-ListConfig] tests/test_utils.py::test_type_str[type_7-Dict[str, tests/test_utils.py::test_type_str[type_8-Dict[Color, tests/test_utils.py::test_type_str[type_9-Dict[str, tests/test_utils.py::test_type_str[type_10-Dict[str, tests/test_utils.py::test_type_str[type_11-List[str]] tests/test_utils.py::test_type_str[type_12-List[Color]] tests/test_utils.py::test_type_str[type_13-List[Dict[str,
omegaconf/_utils.py omegaconf/omegaconf.py
omegaconf/_utils.py omegaconf/omegaconf.py