Hydra: интерполировать переменную из дочернего узла

#python #fb-hydra #omegaconf

#питон #fb-гидра #омегаконф

Вопрос:

Учитывая следующие конфигурационные файлы:

 # foo/bar.yaml _target_: ChildClass a: 0 b: 1  
 # config.yaml defaults: - foo: bar.yaml  _target_: MainClass c: 2 d: ${foo.a} # this line doesn't work  

Я хотел бы построить объект типа MainClass, который принимает объект типа ChildClass.
Один из аргументов ChildClass также используется в конструкторе MainClass.

Как я могу прочитать дочернее свойство a с помощью интерполяции аргументов?

Ответ №1:

Ваша идея должна работать как есть. Пожалуйста, убедитесь, что у вас установлена версия Hydra gt;= 1.1, и попробуйте это сделать:

 # foo/bar.yaml _target_: mod.ChildClass a: 0 b: 1  
 # config.yaml defaults: - foo: bar.yaml  _target_: mod.MainClass c: 2 d: ${foo.a}  
 # mod.py class ChildClass:  def __init__(self, a, b):  print(f"Child {a=} {b=}")   class MainClass:  def __init__(self, c, d, foo):  print(f"Child {c=} {d=} {foo=}")  
 # app.py import hydra from hydra.utils import instantiate from omegaconf import DictConfig, OmegaConf   @hydra.main(config_path=".", config_name="config") def run(cfg: DictConfig):  instantiate(cfg)   if __name__ == "__main__":  run()  
 $ python app.py Child a=0 b=1 Child c=2 d=0 foo=lt;mod.ChildClass object at 0x7f675436b130gt;