hydra-core 1.4.0.dev5__tar.gz → 1.4.0.dev8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hydra_core-1.4.0.dev5/hydra_core.egg-info → hydra_core-1.4.0.dev8}/PKG-INFO +3 -4
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/README.md +1 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/__init__.py +1 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/callbacks.py +2 -46
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/config_loader_impl.py +55 -67
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/config_repository.py +16 -48
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/bash_completion.py +6 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/structured_config_source.py +0 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/defaults_list.py +205 -106
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/deprecation_warning.py +5 -2
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/grammar/grammar_functions.py +9 -2
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/hydra.py +47 -31
- hydra_core-1.4.0.dev8/hydra/_internal/instantiate/_instantiate2.py +869 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/utils.py +29 -35
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/compose.py +4 -20
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/__init__.py +1 -2
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/config_store.py +3 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/default_element.py +31 -51
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/override_parser/overrides_parser.py +2 -3
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/override_parser/overrides_visitor.py +9 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/override_parser/types.py +0 -13
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/plugins.py +6 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/utils.py +36 -30
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/errors.py +8 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/experimental/callback.py +1 -13
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/experimental/callbacks.py +2 -47
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/initialize.py +4 -24
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/main.py +3 -22
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/plugins/completion_plugin.py +1 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/plugins/config_source.py +5 -8
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/plugins/sweeper.py +6 -12
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/completion.py +1 -3
- hydra_core-1.4.0.dev8/hydra/test_utils/configs/package_tests/__init__.py +1 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/example_app.py +1 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/launcher_common_tests.py +2 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/test_utils.py +7 -10
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/types.py +0 -25
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/utils.py +21 -13
- hydra_core-1.4.0.dev8/hydra/version.py +85 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8/hydra_core.egg-info}/PKG-INFO +3 -4
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra_core.egg-info/SOURCES.txt +0 -2
- hydra_core-1.4.0.dev8/hydra_core.egg-info/requires.txt +1 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/pyproject.toml +50 -25
- hydra_core-1.4.0.dev8/requirements/requirements.txt +1 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_basic_sweeper.py +54 -2
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_callbacks.py +29 -19
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_completion.py +54 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_compose.py +154 -162
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_config_loader.py +30 -34
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_config_repository.py +47 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_hydra.py +82 -47
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_hydra_cli_errors.py +1 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_hydra_context_warnings.py +1 -11
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_internal_utils.py +50 -1
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_overrides_parser.py +41 -35
- hydra_core-1.4.0.dev8/tests/test_plugin_interface.py +106 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_utils.py +79 -3
- hydra_core-1.4.0.dev5/hydra/_internal/instantiate/_instantiate2.py +0 -478
- hydra_core-1.4.0.dev5/hydra/experimental/__init__.py +0 -10
- hydra_core-1.4.0.dev5/hydra/experimental/compose.py +0 -31
- hydra_core-1.4.0.dev5/hydra/experimental/initialize.py +0 -134
- hydra_core-1.4.0.dev5/hydra/version.py +0 -82
- hydra_core-1.4.0.dev5/hydra_core.egg-info/requires.txt +0 -2
- hydra_core-1.4.0.dev5/requirements/requirements.txt +0 -2
- hydra_core-1.4.0.dev5/tests/test_plugin_interface.py +0 -52
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/LICENSE +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/MANIFEST.in +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/build_helpers/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/build_helpers/bin/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/build_helpers/bin/antlr-4.11.1-complete.jar +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/build_helpers/build_helpers.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/build_helpers/test_helpers.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/config_search_path_impl.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/basic_launcher.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/basic_sweeper.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/file_config_source.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/fish_completion.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/importlib_resources_config_source.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/zsh_completion.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/grammar/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/grammar/functions.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/grammar/utils.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/instantiate/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/sources_registry.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/env/default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/help/default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/hydra_help/default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/hydra_logging/default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/hydra_logging/disabled.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/hydra_logging/hydra_debug.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/hydra_logging/none.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/job_logging/default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/job_logging/disabled.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/job_logging/none.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/job_logging/stdout.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/conf/hydra/output/default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/config_loader.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/config_search_path.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/global_hydra.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/hydra_config.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/object_type.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/override_parser/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/core/singleton.py +0 -0
- {hydra_core-1.4.0.dev5/hydra/grammar → hydra_core-1.4.0.dev8/hydra/experimental}/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/extra/pytest_plugin.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/.gitignore +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/OverrideLexer.g4 +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/OverrideParser.g4 +0 -0
- {hydra_core-1.4.0.dev5/hydra/plugins → hydra_core-1.4.0.dev8/hydra/grammar}/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/.gitignore +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideLexer.interp +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideLexer.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideLexer.tokens +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideParser.interp +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideParser.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideParser.tokens +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideParserListener.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/grammar/gen/OverrideParserVisitor.py +0 -0
- {hydra_core-1.4.0.dev5/hydra/test_utils → hydra_core-1.4.0.dev8/hydra/plugins}/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/plugins/launcher.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/plugins/plugin.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/plugins/search_path_plugin.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/py.typed +0 -0
- {hydra_core-1.4.0.dev5/hydra/test_utils/configs → hydra_core-1.4.0.dev8/hydra/test_utils}/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/a_module.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/config_source_common_tests.py +0 -0
- {hydra_core-1.4.0.dev5/hydra/test_utils/configs/completion_test_additional_package → hydra_core-1.4.0.dev8/hydra/test_utils/configs}/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/accessing_hydra_config.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/additional_searchpath.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/config.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/group/dict.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/group/list.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/hydra/launcher/fairtask.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/missing_default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test/test_hydra/launcher/fairtask.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test_additional_file/additional_group/file_opt_additional.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test_additional_file/group/file_opt.yaml +0 -0
- {hydra_core-1.4.0.dev5/hydra/test_utils/configs/package_tests → hydra_core-1.4.0.dev8/hydra/test_utils/configs/completion_test_additional_package}/__init__.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test_additional_package/additional_group/pkg_opt_additional.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/completion_test_additional_package/group/pkg_opt.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/compose.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/conf.zip +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/config.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/config.yml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/custom_resolver.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/db/mysql.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/db/postgresql.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/db/validated_mysql.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/db/validated_postgresql.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/db_conf.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/defaults_not_list.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/group1/abc.cde.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/group1/file1.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/group1/file2.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/group2/file1.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/group2/file2.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/missing-default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/missing-optional-default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/missing_init_py/.gitignore +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/missing_init_py/test.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/optional-default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/overriding_output_dir.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/overriding_run_dir.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/package_tests/group1/option1.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/package_tests/group1/option2.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/package_tests/group2/option1.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/package_tests/group2/option2.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/package_tests/pkg_override.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/package_tests/two_packages_one_group.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/schema_key_error.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/schema_validation_error.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/some_config.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/top_level_list/file1.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/test_utils/configs/unspecified_mandatory_default.yaml +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra_core.egg-info/dependency_links.txt +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra_core.egg-info/entry_points.txt +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra_core.egg-info/top_level.txt +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/setup.cfg +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/setup.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_basic_launcher.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_config_search_path.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_core_utils.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_env_defaults.py +0 -0
- {hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/tests/test_errors.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hydra-core
|
|
3
|
-
Version: 1.4.0.
|
|
3
|
+
Version: 1.4.0.dev8
|
|
4
4
|
Summary: A framework for elegantly configuring complex applications
|
|
5
5
|
Home-page: https://github.com/facebookresearch/hydra
|
|
6
6
|
Author: Omry Yadan
|
|
@@ -19,8 +19,7 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
|
19
19
|
Requires-Python: >=3.10
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: omegaconf>=2.4.0.
|
|
23
|
-
Requires-Dist: packaging
|
|
22
|
+
Requires-Dist: omegaconf>=2.4.0.dev13
|
|
24
23
|
Dynamic: author
|
|
25
24
|
Dynamic: author-email
|
|
26
25
|
Dynamic: classifier
|
|
@@ -46,7 +45,7 @@ Dynamic: summary
|
|
|
46
45
|
<p align="center">
|
|
47
46
|
<a href="https://github.com/facebookresearch/hydra/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/hydra-core" alt="PyPI - License" /></a>
|
|
48
47
|
<a href="https://hydra-framework.zulipchat.com/"><img src="https://img.shields.io/badge/zulip-join_chat-brightgreen.svg" alt="Zulip chat" /></a>
|
|
49
|
-
<a href="https://github.com/
|
|
48
|
+
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/badge/code%20style-ruff-261230.svg" alt="Code style: Ruff" /></a>
|
|
50
49
|
</p>
|
|
51
50
|
|
|
52
51
|
<p align="center">
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<p align="center">
|
|
11
11
|
<a href="https://github.com/facebookresearch/hydra/blob/main/LICENSE"><img src="https://img.shields.io/pypi/l/hydra-core" alt="PyPI - License" /></a>
|
|
12
12
|
<a href="https://hydra-framework.zulipchat.com/"><img src="https://img.shields.io/badge/zulip-join_chat-brightgreen.svg" alt="Zulip chat" /></a>
|
|
13
|
-
<a href="https://github.com/
|
|
13
|
+
<a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/badge/code%20style-ruff-261230.svg" alt="Code style: Ruff" /></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
|
2
2
|
|
|
3
3
|
# Source of truth for Hydra's version
|
|
4
|
-
__version__ = "1.4.0.
|
|
4
|
+
__version__ = "1.4.0.dev8"
|
|
5
5
|
from hydra import utils
|
|
6
6
|
from hydra.errors import MissingConfigException
|
|
7
7
|
from hydra.main import main
|
|
@@ -1,54 +1,23 @@
|
|
|
1
1
|
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
|
2
2
|
import warnings
|
|
3
|
-
from typing import TYPE_CHECKING, Any,
|
|
3
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
4
4
|
|
|
5
5
|
from omegaconf import DictConfig, OmegaConf
|
|
6
6
|
|
|
7
|
-
from hydra.core.singleton import Singleton
|
|
8
7
|
from hydra.types import TaskFunction
|
|
9
8
|
|
|
10
9
|
if TYPE_CHECKING:
|
|
11
10
|
from hydra.core.utils import JobReturn
|
|
12
11
|
|
|
13
12
|
|
|
14
|
-
class CallbacksCache(metaclass=Singleton):
|
|
15
|
-
"""
|
|
16
|
-
A singleton class to cache callbacks so they are not reinstantiated during
|
|
17
|
-
compose config and start run.
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
@staticmethod
|
|
21
|
-
def instance() -> "CallbacksCache":
|
|
22
|
-
return Singleton.instance(CallbacksCache) # type: ignore
|
|
23
|
-
|
|
24
|
-
cache: Dict[int, "Callbacks"]
|
|
25
|
-
|
|
26
|
-
def __init__(self) -> None:
|
|
27
|
-
self.cache = {}
|
|
28
|
-
|
|
29
|
-
|
|
30
13
|
class Callbacks:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def __init__(
|
|
34
|
-
self, config: Optional[DictConfig] = None, check_cache: bool = True
|
|
35
|
-
) -> None:
|
|
36
|
-
if config is None:
|
|
37
|
-
return
|
|
38
|
-
cache = CallbacksCache.instance().cache
|
|
39
|
-
if check_cache:
|
|
40
|
-
cached_callback = cache.get(id(config))
|
|
41
|
-
if cached_callback is not None:
|
|
42
|
-
self.callbacks = cached_callback.callbacks
|
|
43
|
-
return
|
|
44
|
-
|
|
14
|
+
def __init__(self, config: Optional[DictConfig] = None) -> None:
|
|
45
15
|
self.callbacks = []
|
|
46
16
|
from hydra.utils import instantiate
|
|
47
17
|
|
|
48
18
|
if config is not None and OmegaConf.select(config, "hydra.callbacks"):
|
|
49
19
|
for params in config.hydra.callbacks.values():
|
|
50
20
|
self.callbacks.append(instantiate(params))
|
|
51
|
-
cache[id(config)] = self
|
|
52
21
|
|
|
53
22
|
def _notify(self, function_name: str, reverse: bool = False, **kwargs: Any) -> None:
|
|
54
23
|
callbacks = reversed(self.callbacks) if reverse else self.callbacks
|
|
@@ -94,16 +63,3 @@ class Callbacks:
|
|
|
94
63
|
reverse=True,
|
|
95
64
|
**kwargs,
|
|
96
65
|
)
|
|
97
|
-
|
|
98
|
-
def on_compose_config(
|
|
99
|
-
self,
|
|
100
|
-
config: DictConfig,
|
|
101
|
-
config_name: Optional[str],
|
|
102
|
-
overrides: List[str],
|
|
103
|
-
) -> None:
|
|
104
|
-
self._notify(
|
|
105
|
-
function_name="on_compose_config",
|
|
106
|
-
config=config,
|
|
107
|
-
config_name=config_name,
|
|
108
|
-
overrides=overrides,
|
|
109
|
-
)
|
|
@@ -36,11 +36,9 @@ from hydra.core.override_parser.overrides_parser import OverridesParser
|
|
|
36
36
|
from hydra.core.override_parser.types import Override, ValueType
|
|
37
37
|
from hydra.core.utils import JobRuntime
|
|
38
38
|
from hydra.errors import ConfigCompositionException, MissingConfigException
|
|
39
|
-
from hydra.plugins.config_source import
|
|
39
|
+
from hydra.plugins.config_source import ConfigResult, ConfigSource
|
|
40
40
|
from hydra.types import RunMode
|
|
41
41
|
|
|
42
|
-
from .deprecation_warning import deprecation_warning
|
|
43
|
-
|
|
44
42
|
|
|
45
43
|
class ConfigLoaderImpl(ConfigLoader):
|
|
46
44
|
"""
|
|
@@ -53,6 +51,7 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
53
51
|
) -> None:
|
|
54
52
|
self.config_search_path = config_search_path
|
|
55
53
|
self.repository = ConfigRepository(config_search_path=config_search_path)
|
|
54
|
+
self._active_repository: Optional[IConfigRepository] = None
|
|
56
55
|
|
|
57
56
|
@staticmethod
|
|
58
57
|
def validate_sweep_overrides_legal(
|
|
@@ -142,6 +141,41 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
142
141
|
run_mode: RunMode,
|
|
143
142
|
from_shell: bool = True,
|
|
144
143
|
validate_sweep_overrides: bool = True,
|
|
144
|
+
) -> DictConfig:
|
|
145
|
+
return self._load_configuration(
|
|
146
|
+
config_name=config_name,
|
|
147
|
+
overrides=overrides,
|
|
148
|
+
run_mode=run_mode,
|
|
149
|
+
from_shell=from_shell,
|
|
150
|
+
validate_sweep_overrides=validate_sweep_overrides,
|
|
151
|
+
activate_config_repository=False,
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
def _load_configuration_with_active_repository(
|
|
155
|
+
self,
|
|
156
|
+
config_name: Optional[str],
|
|
157
|
+
overrides: List[str],
|
|
158
|
+
run_mode: RunMode,
|
|
159
|
+
from_shell: bool = True,
|
|
160
|
+
validate_sweep_overrides: bool = True,
|
|
161
|
+
) -> DictConfig:
|
|
162
|
+
return self._load_configuration(
|
|
163
|
+
config_name=config_name,
|
|
164
|
+
overrides=overrides,
|
|
165
|
+
run_mode=run_mode,
|
|
166
|
+
from_shell=from_shell,
|
|
167
|
+
validate_sweep_overrides=validate_sweep_overrides,
|
|
168
|
+
activate_config_repository=True,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
def _load_configuration(
|
|
172
|
+
self,
|
|
173
|
+
config_name: Optional[str],
|
|
174
|
+
overrides: List[str],
|
|
175
|
+
run_mode: RunMode,
|
|
176
|
+
from_shell: bool,
|
|
177
|
+
validate_sweep_overrides: bool,
|
|
178
|
+
activate_config_repository: bool,
|
|
145
179
|
) -> DictConfig:
|
|
146
180
|
try:
|
|
147
181
|
return self._load_configuration_impl(
|
|
@@ -150,6 +184,7 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
150
184
|
run_mode=run_mode,
|
|
151
185
|
from_shell=from_shell,
|
|
152
186
|
validate_sweep_overrides=validate_sweep_overrides,
|
|
187
|
+
activate_config_repository=activate_config_repository,
|
|
153
188
|
)
|
|
154
189
|
except OmegaConfBaseException as e:
|
|
155
190
|
raise ConfigCompositionException().with_traceback(sys.exc_info()[2]) from e
|
|
@@ -242,6 +277,7 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
242
277
|
run_mode: RunMode,
|
|
243
278
|
from_shell: bool = True,
|
|
244
279
|
validate_sweep_overrides: bool = True,
|
|
280
|
+
activate_config_repository: bool = False,
|
|
245
281
|
) -> DictConfig:
|
|
246
282
|
from hydra import __version__, version
|
|
247
283
|
|
|
@@ -277,7 +313,7 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
277
313
|
# The Hydra node should not be read-only even if the root config is read-only.
|
|
278
314
|
OmegaConf.set_readonly(cfg.hydra, False)
|
|
279
315
|
|
|
280
|
-
# Apply command line overrides after enabling
|
|
316
|
+
# Apply command line overrides after enabling struct mode
|
|
281
317
|
ConfigLoaderImpl._apply_overrides_to_config(config_overrides, cfg)
|
|
282
318
|
for override in parsed_overrides:
|
|
283
319
|
if override.is_hydra_override():
|
|
@@ -304,6 +340,9 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
304
340
|
|
|
305
341
|
cfg.hydra.job.config_name = config_name
|
|
306
342
|
|
|
343
|
+
if activate_config_repository:
|
|
344
|
+
self._active_repository = caching_repo
|
|
345
|
+
|
|
307
346
|
return cfg
|
|
308
347
|
|
|
309
348
|
def load_sweep_config(
|
|
@@ -441,11 +480,13 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
441
480
|
OmegaConf.update(cfg, key, value, merge=True, force_add=True)
|
|
442
481
|
else:
|
|
443
482
|
assert override.input_line is not None
|
|
444
|
-
raise ConfigCompositionException(
|
|
483
|
+
raise ConfigCompositionException(
|
|
484
|
+
dedent(f"""\
|
|
445
485
|
Could not append to config. An item is already at '{override.key_or_group}'.
|
|
446
486
|
Either remove + prefix: '{override.input_line[1:]}'
|
|
447
487
|
Or add a second + to add or override '{override.key_or_group}': '+{override.input_line}'
|
|
448
|
-
""")
|
|
488
|
+
""")
|
|
489
|
+
)
|
|
449
490
|
elif override.is_force_add():
|
|
450
491
|
OmegaConf.update(cfg, key, value, merge=True, force_add=True)
|
|
451
492
|
elif override.is_list_extend():
|
|
@@ -485,67 +526,6 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
485
526
|
f" {type(ret.config).__name__}"
|
|
486
527
|
)
|
|
487
528
|
|
|
488
|
-
if not ret.is_schema_source:
|
|
489
|
-
schema = None
|
|
490
|
-
try:
|
|
491
|
-
schema_source = repo.get_schema_source()
|
|
492
|
-
cname = ConfigSource._normalize_file_name(filename=config_path)
|
|
493
|
-
schema = schema_source.load_config(cname)
|
|
494
|
-
except ConfigLoadError:
|
|
495
|
-
# schema not found, ignore
|
|
496
|
-
pass
|
|
497
|
-
|
|
498
|
-
if schema is not None:
|
|
499
|
-
try:
|
|
500
|
-
url = "https://hydra.cc/docs/1.2/upgrades/1.0_to_1.1/automatic_schema_matching"
|
|
501
|
-
if "defaults" in schema.config:
|
|
502
|
-
raise ConfigCompositionException(dedent(f"""\
|
|
503
|
-
'{config_path}' is validated against ConfigStore schema with the same name.
|
|
504
|
-
This behavior is deprecated in Hydra 1.1 and will be removed in Hydra 1.2.
|
|
505
|
-
In addition, the automatically matched schema contains a defaults list.
|
|
506
|
-
This combination is no longer supported.
|
|
507
|
-
See {url} for migration instructions."""))
|
|
508
|
-
else:
|
|
509
|
-
deprecation_warning(
|
|
510
|
-
dedent(f"""\
|
|
511
|
-
|
|
512
|
-
'{config_path}' is validated against ConfigStore schema with the same name.
|
|
513
|
-
This behavior is deprecated in Hydra 1.1 and will be removed in Hydra 1.2.
|
|
514
|
-
See {url} for migration instructions."""),
|
|
515
|
-
stacklevel=11,
|
|
516
|
-
)
|
|
517
|
-
|
|
518
|
-
# if primary config has a hydra node, remove it during validation and add it back.
|
|
519
|
-
# This allows overriding Hydra's configuration without declaring it's node
|
|
520
|
-
# in the schema of every primary config
|
|
521
|
-
hydra = None
|
|
522
|
-
hydra_config_group = (
|
|
523
|
-
default.config_path is not None
|
|
524
|
-
and default.config_path.startswith("hydra/")
|
|
525
|
-
)
|
|
526
|
-
config = ret.config
|
|
527
|
-
if (
|
|
528
|
-
default.primary
|
|
529
|
-
and isinstance(config, DictConfig)
|
|
530
|
-
and "hydra" in config
|
|
531
|
-
and not hydra_config_group
|
|
532
|
-
):
|
|
533
|
-
hydra = config.pop("hydra")
|
|
534
|
-
|
|
535
|
-
merged = OmegaConf.merge(schema.config, config)
|
|
536
|
-
assert isinstance(merged, DictConfig)
|
|
537
|
-
|
|
538
|
-
if hydra is not None:
|
|
539
|
-
with open_dict(merged):
|
|
540
|
-
merged.hydra = hydra
|
|
541
|
-
ret.config = merged
|
|
542
|
-
except OmegaConfBaseException as e:
|
|
543
|
-
raise ConfigCompositionException(
|
|
544
|
-
f"Error merging '{config_path}' with schema"
|
|
545
|
-
) from e
|
|
546
|
-
|
|
547
|
-
assert isinstance(merged, DictConfig)
|
|
548
|
-
|
|
549
529
|
res = self._embed_result_config(ret, default.package)
|
|
550
530
|
if (
|
|
551
531
|
not default.primary
|
|
@@ -588,6 +568,12 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
588
568
|
config_name: Optional[str] = None,
|
|
589
569
|
overrides: Optional[List[str]] = None,
|
|
590
570
|
) -> List[str]:
|
|
571
|
+
if (
|
|
572
|
+
config_name is None
|
|
573
|
+
and overrides is None
|
|
574
|
+
and self._active_repository is not None
|
|
575
|
+
):
|
|
576
|
+
return self._active_repository.get_group_options(group_name, results_filter)
|
|
591
577
|
if overrides is None:
|
|
592
578
|
overrides = []
|
|
593
579
|
_, caching_repo = self._parse_overrides_and_create_caching_repo(
|
|
@@ -630,6 +616,8 @@ class ConfigLoaderImpl(ConfigLoader):
|
|
|
630
616
|
return cfg
|
|
631
617
|
|
|
632
618
|
def get_sources(self) -> List[ConfigSource]:
|
|
619
|
+
if self._active_repository is not None:
|
|
620
|
+
return self._active_repository.get_sources()
|
|
633
621
|
return self.repository.get_sources()
|
|
634
622
|
|
|
635
623
|
def compute_defaults_list(
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import copy
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from textwrap import dedent
|
|
6
5
|
from typing import Dict, List, Optional, Tuple
|
|
7
6
|
|
|
8
7
|
from omegaconf import (
|
|
@@ -15,13 +14,11 @@ from omegaconf import (
|
|
|
15
14
|
read_write,
|
|
16
15
|
)
|
|
17
16
|
|
|
18
|
-
from hydra import version
|
|
19
17
|
from hydra.core.config_search_path import ConfigSearchPath
|
|
20
18
|
from hydra.core.object_type import ObjectType
|
|
21
19
|
from hydra.plugins.config_source import ConfigResult, ConfigSource
|
|
22
20
|
|
|
23
21
|
from ..core.default_element import ConfigDefault, GroupDefault, InputDefault
|
|
24
|
-
from .deprecation_warning import deprecation_warning
|
|
25
22
|
from .sources_registry import SourcesRegistry
|
|
26
23
|
|
|
27
24
|
|
|
@@ -51,6 +48,8 @@ class IConfigRepository(ABC):
|
|
|
51
48
|
|
|
52
49
|
|
|
53
50
|
class ConfigRepository(IConfigRepository):
|
|
51
|
+
_KNOWN_DEFAULTS_LIST_KEYWORDS = ("optional", "override")
|
|
52
|
+
|
|
54
53
|
config_search_path: ConfigSearchPath
|
|
55
54
|
sources: List[ConfigSource]
|
|
56
55
|
|
|
@@ -168,24 +167,10 @@ class ConfigRepository(IConfigRepository):
|
|
|
168
167
|
config_path: str,
|
|
169
168
|
defaults: ListConfig,
|
|
170
169
|
) -> List[InputDefault]:
|
|
171
|
-
def issue_deprecated_name_warning() -> None:
|
|
172
|
-
# DEPRECATED: remove in 1.2
|
|
173
|
-
url = "https://hydra.cc/docs/1.2/upgrades/1.0_to_1.1/changes_to_package_header"
|
|
174
|
-
deprecation_warning(
|
|
175
|
-
message=dedent(f"""\
|
|
176
|
-
In {config_path}: Defaults List contains deprecated keyword _name_, see {url}
|
|
177
|
-
"""),
|
|
178
|
-
)
|
|
179
|
-
|
|
180
170
|
res: List[InputDefault] = []
|
|
181
171
|
for item in defaults._iter_ex(resolve=False):
|
|
182
172
|
default: InputDefault
|
|
183
173
|
if isinstance(item, DictConfig):
|
|
184
|
-
old_optional = None
|
|
185
|
-
if not version.base_at_least("1.2"):
|
|
186
|
-
if len(item) > 1:
|
|
187
|
-
if "optional" in item:
|
|
188
|
-
old_optional = item.pop("optional")
|
|
189
174
|
keys = list(item.keys())
|
|
190
175
|
|
|
191
176
|
if len(keys) > 1:
|
|
@@ -199,27 +184,14 @@ class ConfigRepository(IConfigRepository):
|
|
|
199
184
|
assert isinstance(key, str)
|
|
200
185
|
config_group, package, _package2 = self._split_group(key)
|
|
201
186
|
keywords = ConfigRepository.Keywords()
|
|
202
|
-
self._extract_keywords_from_config_group(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
if not keywords.optional and old_optional is not None:
|
|
206
|
-
keywords.optional = old_optional
|
|
187
|
+
self._extract_keywords_from_config_group(
|
|
188
|
+
config_path, config_group, keywords
|
|
189
|
+
)
|
|
207
190
|
|
|
208
191
|
node = item._get_node(key)
|
|
209
192
|
assert node is not None and isinstance(node, Node)
|
|
210
193
|
config_value = node._value()
|
|
211
194
|
|
|
212
|
-
if not version.base_at_least("1.2"):
|
|
213
|
-
if old_optional is not None:
|
|
214
|
-
msg = dedent(
|
|
215
|
-
f"""
|
|
216
|
-
In {config_path}: 'optional: true' is deprecated.
|
|
217
|
-
Use 'optional {key}: {config_value}' instead.
|
|
218
|
-
Support for the old style is removed for Hydra version_base >= 1.2"""
|
|
219
|
-
)
|
|
220
|
-
|
|
221
|
-
deprecation_warning(msg)
|
|
222
|
-
|
|
223
195
|
if config_value is not None and not isinstance(
|
|
224
196
|
config_value, (str, list)
|
|
225
197
|
):
|
|
@@ -240,10 +212,6 @@ class ConfigRepository(IConfigRepository):
|
|
|
240
212
|
options.append(vv)
|
|
241
213
|
config_value = options
|
|
242
214
|
|
|
243
|
-
if not version.base_at_least("1.2"):
|
|
244
|
-
if package is not None and "_name_" in package:
|
|
245
|
-
issue_deprecated_name_warning()
|
|
246
|
-
|
|
247
215
|
default = GroupDefault(
|
|
248
216
|
group=keywords.group,
|
|
249
217
|
value=config_value,
|
|
@@ -254,10 +222,6 @@ class ConfigRepository(IConfigRepository):
|
|
|
254
222
|
|
|
255
223
|
elif isinstance(item, str):
|
|
256
224
|
path, package, _package2 = self._split_group(item)
|
|
257
|
-
if not version.base_at_least("1.2"):
|
|
258
|
-
if package is not None and "_name_" in package:
|
|
259
|
-
issue_deprecated_name_warning()
|
|
260
|
-
|
|
261
225
|
default = ConfigDefault(path=path, package=package)
|
|
262
226
|
else:
|
|
263
227
|
raise ValueError(
|
|
@@ -301,18 +265,22 @@ class ConfigRepository(IConfigRepository):
|
|
|
301
265
|
|
|
302
266
|
@staticmethod
|
|
303
267
|
def _extract_keywords_from_config_group(
|
|
304
|
-
group: str, keywords: "ConfigRepository.Keywords"
|
|
268
|
+
config_path: str, group: str, keywords: "ConfigRepository.Keywords"
|
|
305
269
|
) -> None:
|
|
306
|
-
elements = group.split(
|
|
270
|
+
elements = group.split()
|
|
271
|
+
if not elements:
|
|
272
|
+
raise ValueError(f"In {config_path}: Missing group name in defaults list")
|
|
307
273
|
group = elements[-1]
|
|
308
274
|
elements = elements[0:-1]
|
|
309
|
-
for
|
|
310
|
-
if
|
|
275
|
+
for keyword in elements:
|
|
276
|
+
if keyword not in ConfigRepository._KNOWN_DEFAULTS_LIST_KEYWORDS:
|
|
277
|
+
raise ValueError(
|
|
278
|
+
f"In {config_path}: Unsupported keyword '{keyword}' in defaults list"
|
|
279
|
+
)
|
|
280
|
+
if keyword == "optional":
|
|
311
281
|
keywords.optional = True
|
|
312
|
-
elif
|
|
282
|
+
elif keyword == "override":
|
|
313
283
|
keywords.override = True
|
|
314
|
-
else:
|
|
315
|
-
break
|
|
316
284
|
keywords.group = group
|
|
317
285
|
|
|
318
286
|
|
{hydra_core-1.4.0.dev5 → hydra_core-1.4.0.dev8}/hydra/_internal/core_plugins/bash_completion.py
RENAMED
|
@@ -22,11 +22,16 @@ class BashCompletion(CompletionPlugin):
|
|
|
22
22
|
if (( ${#words[@]} < 2 )); then
|
|
23
23
|
return
|
|
24
24
|
fi
|
|
25
|
+
if [[ "${words[1]}" == -* ]]; then
|
|
26
|
+
return
|
|
27
|
+
fi
|
|
25
28
|
file_path=$(pwd)/${words[1]}
|
|
26
29
|
if [ ! -f "$file_path" ]; then
|
|
27
30
|
return
|
|
28
31
|
fi
|
|
29
|
-
grep "@hydra.main" $file_path
|
|
32
|
+
if ! grep -Fq -- "@hydra.main" "$file_path"; then
|
|
33
|
+
return
|
|
34
|
+
fi
|
|
30
35
|
helper="${words[0]} ${words[1]}"
|
|
31
36
|
else
|
|
32
37
|
helper="${words[0]}"
|
|
@@ -9,7 +9,6 @@ from hydra.plugins.config_source import ConfigResult, ConfigSource
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class StructuredConfigSource(ConfigSource):
|
|
12
|
-
|
|
13
12
|
def __init__(self, provider: str, path: str) -> None:
|
|
14
13
|
super().__init__(provider=provider, path=path)
|
|
15
14
|
# Import the module, the __init__ there is expected to register the configs.
|