@@ -709,8 +709,8 @@ def create_x(self):...
709
709
710
710
with
711
711
712
- x_Y_args : DictConfig = dataclasses.field(default_factory=lambda: get_default_args(Y))
713
- x_Z_args : DictConfig = dataclasses.field(default_factory=lambda: get_default_args(Z))
712
+ x_Y_args: dict = dataclasses.field(default_factory=lambda: get_default_args(Y))
713
+ x_Z_args: dict = dataclasses.field(default_factory=lambda: get_default_args(Z))
714
714
def create_x(self):
715
715
args = self.getattr(f"x_{self.x_class_type}_args")
716
716
self.create_x_impl(self.x_class_type, args)
@@ -733,8 +733,8 @@ def create_x(self):...
733
733
734
734
with
735
735
736
- x_Y_args : DictConfig = dataclasses.field(default_factory=lambda: get_default_args(Y))
737
- x_Z_args : DictConfig = dataclasses.field(default_factory=lambda: get_default_args(Z))
736
+ x_Y_args: dict = dataclasses.field(default_factory=lambda: get_default_args(Y))
737
+ x_Z_args: dict = dataclasses.field(default_factory=lambda: get_default_args(Z))
738
738
def create_x(self):
739
739
if self.x_class_type is None:
740
740
args = None
@@ -764,7 +764,7 @@ def create_x(self):...
764
764
765
765
will be replaced with
766
766
767
- x_args : DictConfig = dataclasses.field(default_factory=lambda: get_default_args(X))
767
+ x_args: dict = dataclasses.field(default_factory=lambda: get_default_args(X))
768
768
def create_x(self):
769
769
self.create_x_impl(True, self.x_args)
770
770
@@ -786,7 +786,7 @@ def create_x(self):...
786
786
787
787
with
788
788
789
- x_args : DictConfig = dataclasses.field(default_factory=lambda: get_default_args(X))
789
+ x_args: dict = dataclasses.field(default_factory=lambda: get_default_args(X))
790
790
x_enabled: bool = False
791
791
def create_x(self):
792
792
self.create_x_impl(self.x_enabled, self.x_args)
@@ -818,6 +818,11 @@ def x_tweak_args(cls, member_type: Type, args: DictConfig) -> None
818
818
then the default_factory of x_args will also have a call to x_tweak_args(X, x_args) and
819
819
the default_factory of x_Y_args will also have a call to x_tweak_args(Y, x_Y_args).
820
820
821
+ Note that although the *_args members are intended to have type DictConfig, they
822
+ are actually internally annotated as dicts. OmegaConf is happy to see a DictConfig
823
+ in place of a dict, but not vice-versa. Allowing dict lets a class user specify
824
+ x_args as an explicit dict without getting an incomprehensible error.
825
+
821
826
Args:
822
827
some_class: the class to be processed
823
828
_do_not_process: Internal use for get_default_args: Because get_default_args calls
@@ -1040,7 +1045,7 @@ def _process_member(
1040
1045
raise ValueError (
1041
1046
f"Cannot generate { args_name } because it is already present."
1042
1047
)
1043
- some_class .__annotations__ [args_name ] = DictConfig
1048
+ some_class .__annotations__ [args_name ] = dict
1044
1049
if hook is not None :
1045
1050
hook_closed = partial (hook , derived_type )
1046
1051
else :
@@ -1064,7 +1069,7 @@ def _process_member(
1064
1069
if issubclass (type_ , some_class ) or type_ in _do_not_process :
1065
1070
raise ValueError (f"Cannot process { type_ } inside { some_class } " )
1066
1071
1067
- some_class .__annotations__ [args_name ] = DictConfig
1072
+ some_class .__annotations__ [args_name ] = dict
1068
1073
if hook is not None :
1069
1074
hook_closed = partial (hook , type_ )
1070
1075
else :
0 commit comments