Repository: treeverse/dvc Branch: main Commit: a65523a86a3c Files: 591 Total size: 2.9 MB Directory structure: gitextract_ngf1xy55/ ├── .dvc/ │ ├── .gitignore │ └── config ├── .dvcignore ├── .git-blame-ignore-revs ├── .git_archival.txt ├── .gitattributes ├── .github/ │ ├── .test_durations │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── codecov.yml │ ├── dependabot.yml │ ├── release.yml │ └── workflows/ │ ├── benchmarks.yaml │ ├── build.yaml │ ├── codeql.yml │ ├── plugin_tests.yaml │ └── tests.yaml ├── .gitignore ├── .mailmap ├── .pre-commit-config.yaml ├── .pre-commit-hooks.yaml ├── .zenodo.json ├── CITATION.cff ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.rst ├── dvc/ │ ├── __init__.py │ ├── __main__.py │ ├── __pyinstaller/ │ │ ├── __init__.py │ │ ├── hook-asyncssh.py │ │ ├── hook-celery.py │ │ ├── hook-dvc.py │ │ ├── hook-dvc.utils.flatten.py │ │ ├── hook-dvc_task.py │ │ ├── hook-fsspec.py │ │ └── hook-pydrive2.py │ ├── _debug.py │ ├── analytics.py │ ├── annotations.py │ ├── api/ │ │ ├── __init__.py │ │ ├── artifacts.py │ │ ├── data.py │ │ ├── dataset.py │ │ ├── experiments.py │ │ ├── scm.py │ │ └── show.py │ ├── build.py │ ├── cachemgr.py │ ├── cli/ │ │ ├── __init__.py │ │ ├── command.py │ │ ├── completion.py │ │ ├── formatter.py │ │ ├── parser.py │ │ └── utils.py │ ├── commands/ │ │ ├── __init__.py │ │ ├── add.py │ │ ├── artifacts.py │ │ ├── cache.py │ │ ├── check_ignore.py │ │ ├── checkout.py │ │ ├── commit.py │ │ ├── completion.py │ │ ├── config.py │ │ ├── daemon.py │ │ ├── dag.py │ │ ├── data.py │ │ ├── data_sync.py │ │ ├── dataset.py │ │ ├── destroy.py │ │ ├── diff.py │ │ ├── du.py │ │ ├── experiments/ │ │ │ ├── __init__.py │ │ │ ├── apply.py │ │ │ ├── branch.py │ │ │ ├── clean.py │ │ │ ├── diff.py │ │ │ ├── exec_run.py │ │ │ ├── ls.py │ │ │ ├── pull.py │ │ │ ├── push.py │ │ │ ├── queue_worker.py │ │ │ ├── remove.py │ │ │ ├── rename.py │ │ │ ├── run.py │ │ │ ├── save.py │ │ │ └── show.py │ │ ├── freeze.py │ │ ├── gc.py │ │ ├── get.py │ │ ├── get_url.py │ │ ├── git_hook.py │ │ ├── imp.py │ │ ├── imp_db.py │ │ ├── imp_url.py │ │ ├── init.py │ │ ├── install.py │ │ ├── ls/ │ │ │ ├── __init__.py │ │ │ └── ls_colors.py │ │ ├── ls_url.py │ │ ├── metrics.py │ │ ├── move.py │ │ ├── params.py │ │ ├── plots.py │ │ ├── queue/ │ │ │ ├── __init__.py │ │ │ ├── kill.py │ │ │ ├── logs.py │ │ │ ├── remove.py │ │ │ ├── start.py │ │ │ ├── status.py │ │ │ └── stop.py │ │ ├── remote.py │ │ ├── remove.py │ │ ├── repro.py │ │ ├── root.py │ │ ├── stage.py │ │ ├── status.py │ │ ├── studio.py │ │ ├── unprotect.py │ │ ├── update.py │ │ └── version.py │ ├── compare.py │ ├── config.py │ ├── config_schema.py │ ├── daemon.py │ ├── dagascii.py │ ├── data_cloud.py │ ├── database.py │ ├── dependency/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── dataset.py │ │ ├── db.py │ │ ├── param.py │ │ └── repo.py │ ├── dirs.py │ ├── dvcfile.py │ ├── env.py │ ├── exceptions.py │ ├── fs/ │ │ ├── __init__.py │ │ ├── callbacks.py │ │ ├── data.py │ │ ├── dvc.py │ │ ├── dvc_path.py │ │ └── git.py │ ├── ignore.py │ ├── info.py │ ├── lock.py │ ├── log.py │ ├── logger.py │ ├── output.py │ ├── parsing/ │ │ ├── __init__.py │ │ ├── context.py │ │ └── interpolate.py │ ├── pathspec_math.py │ ├── progress.py │ ├── prompt.py │ ├── render/ │ │ ├── __init__.py │ │ ├── convert.py │ │ ├── converter/ │ │ │ ├── __init__.py │ │ │ ├── image.py │ │ │ └── vega.py │ │ └── match.py │ ├── repo/ │ │ ├── __init__.py │ │ ├── add.py │ │ ├── artifacts.py │ │ ├── brancher.py │ │ ├── cache.py │ │ ├── checkout.py │ │ ├── collect.py │ │ ├── commit.py │ │ ├── data.py │ │ ├── datasets.py │ │ ├── destroy.py │ │ ├── diff.py │ │ ├── du.py │ │ ├── experiments/ │ │ │ ├── __init__.py │ │ │ ├── apply.py │ │ │ ├── branch.py │ │ │ ├── brancher.py │ │ │ ├── cache.py │ │ │ ├── clean.py │ │ │ ├── collect.py │ │ │ ├── diff.py │ │ │ ├── exceptions.py │ │ │ ├── executor/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ └── local.py │ │ │ ├── ls.py │ │ │ ├── pull.py │ │ │ ├── push.py │ │ │ ├── queue/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── celery.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── remove.py │ │ │ │ ├── tasks.py │ │ │ │ ├── tempdir.py │ │ │ │ ├── utils.py │ │ │ │ └── workspace.py │ │ │ ├── refs.py │ │ │ ├── remove.py │ │ │ ├── rename.py │ │ │ ├── run.py │ │ │ ├── save.py │ │ │ ├── serialize.py │ │ │ ├── show.py │ │ │ ├── stash.py │ │ │ └── utils.py │ │ ├── fetch.py │ │ ├── freeze.py │ │ ├── gc.py │ │ ├── get.py │ │ ├── get_url.py │ │ ├── graph.py │ │ ├── imp.py │ │ ├── imp_db.py │ │ ├── imp_url.py │ │ ├── index.py │ │ ├── init.py │ │ ├── install.py │ │ ├── ls.py │ │ ├── ls_url.py │ │ ├── metrics/ │ │ │ ├── __init__.py │ │ │ ├── diff.py │ │ │ └── show.py │ │ ├── move.py │ │ ├── open_repo.py │ │ ├── params/ │ │ │ ├── __init__.py │ │ │ ├── diff.py │ │ │ └── show.py │ │ ├── plots/ │ │ │ ├── __init__.py │ │ │ └── diff.py │ │ ├── pull.py │ │ ├── push.py │ │ ├── remove.py │ │ ├── reproduce.py │ │ ├── run.py │ │ ├── scm_context.py │ │ ├── stage.py │ │ ├── status.py │ │ ├── trie.py │ │ ├── update.py │ │ └── worktree.py │ ├── rwlock.py │ ├── schema.py │ ├── scm.py │ ├── stage/ │ │ ├── __init__.py │ │ ├── cache.py │ │ ├── decorators.py │ │ ├── exceptions.py │ │ ├── imports.py │ │ ├── loader.py │ │ ├── params.py │ │ ├── run.py │ │ ├── serialize.py │ │ └── utils.py │ ├── testing/ │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── api_tests.py │ │ ├── benchmarks/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ └── __init__.py │ │ │ ├── cli/ │ │ │ │ ├── __init__.py │ │ │ │ ├── commands/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_add.py │ │ │ │ │ ├── test_checkout.py │ │ │ │ │ ├── test_data_status.py │ │ │ │ │ ├── test_diff.py │ │ │ │ │ ├── test_exp_show.py │ │ │ │ │ ├── test_fetch.py │ │ │ │ │ ├── test_gc.py │ │ │ │ │ ├── test_get.py │ │ │ │ │ ├── test_get_url.py │ │ │ │ │ ├── test_help.py │ │ │ │ │ ├── test_import.py │ │ │ │ │ ├── test_import_url.py │ │ │ │ │ ├── test_init.py │ │ │ │ │ ├── test_ls.py │ │ │ │ │ ├── test_plots.py │ │ │ │ │ ├── test_push.py │ │ │ │ │ ├── test_status.py │ │ │ │ │ └── test_update.py │ │ │ │ └── stories/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_modify_data.py │ │ │ │ └── use_cases/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_sharing.py │ │ │ ├── conftest.py │ │ │ ├── fixtures.py │ │ │ └── plugin.py │ │ ├── cloud.py │ │ ├── conftest.py │ │ ├── fixtures.py │ │ ├── matchers.py │ │ ├── path_info.py │ │ ├── plugin.py │ │ ├── remote_tests.py │ │ ├── scripts.py │ │ ├── tmp_dir.py │ │ └── workspace_tests.py │ ├── types.py │ ├── ui/ │ │ ├── __init__.py │ │ ├── _rich_progress.py │ │ ├── pager.py │ │ └── table.py │ ├── updater.py │ ├── utils/ │ │ ├── .gitignore │ │ ├── __init__.py │ │ ├── cli_parse.py │ │ ├── collections.py │ │ ├── diff.py │ │ ├── flatten.py │ │ ├── fs.py │ │ ├── humanize.py │ │ ├── hydra.py │ │ ├── objects.py │ │ ├── packaging.py │ │ ├── plots.py │ │ ├── serialize/ │ │ │ ├── __init__.py │ │ │ ├── _common.py │ │ │ ├── _json.py │ │ │ ├── _py.py │ │ │ ├── _toml.py │ │ │ └── _yaml.py │ │ ├── strictyaml.py │ │ ├── studio.py │ │ ├── table.py │ │ └── threadpool.py │ └── version.py ├── pyproject.toml └── tests/ ├── __init__.py ├── conftest.py ├── dir_helpers.py ├── docker-compose.yml ├── func/ │ ├── __init__.py │ ├── api/ │ │ ├── __init__.py │ │ ├── test_artifacts.py │ │ ├── test_data.py │ │ ├── test_experiments.py │ │ ├── test_scm.py │ │ └── test_show.py │ ├── artifacts/ │ │ ├── __init__.py │ │ └── test_artifacts.py │ ├── data/ │ │ ├── __init__.py │ │ └── db/ │ │ ├── __init__.py │ │ └── test_index.py │ ├── experiments/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── executor/ │ │ │ └── __init__.py │ │ ├── test_apply.py │ │ ├── test_diff.py │ │ ├── test_experiments.py │ │ ├── test_queue.py │ │ ├── test_remote.py │ │ ├── test_remove.py │ │ ├── test_rename.py │ │ ├── test_save.py │ │ ├── test_set_params.py │ │ ├── test_show.py │ │ ├── test_stash_exp.py │ │ └── test_utils.py │ ├── metrics/ │ │ ├── __init__.py │ │ ├── test_diff.py │ │ └── test_show.py │ ├── params/ │ │ ├── __init__.py │ │ ├── test_diff.py │ │ └── test_show.py │ ├── parsing/ │ │ ├── __init__.py │ │ ├── test_errors.py │ │ ├── test_foreach.py │ │ ├── test_interpolated_entry.py │ │ ├── test_matrix.py │ │ ├── test_resolver.py │ │ └── test_top_level.py │ ├── plots/ │ │ ├── __init__.py │ │ ├── test_collect.py │ │ ├── test_diff.py │ │ ├── test_modify.py │ │ └── test_show.py │ ├── repro/ │ │ ├── __init__.py │ │ ├── test_repro.py │ │ ├── test_repro_allow_missing.py │ │ └── test_repro_pull.py │ ├── test_add.py │ ├── test_analytics.py │ ├── test_check_ignore.py │ ├── test_checkout.py │ ├── test_cli.py │ ├── test_commit.py │ ├── test_config.py │ ├── test_daemon.py │ ├── test_data_cloud.py │ ├── test_data_status.py │ ├── test_dataset.py │ ├── test_diff.py │ ├── test_download.py │ ├── test_du.py │ ├── test_dvcfile.py │ ├── test_external_repo.py │ ├── test_fs.py │ ├── test_gc.py │ ├── test_get.py │ ├── test_get_url.py │ ├── test_ignore.py │ ├── test_import.py │ ├── test_import_db.py │ ├── test_import_url.py │ ├── test_init.py │ ├── test_install.py │ ├── test_lock.py │ ├── test_lockfile.py │ ├── test_ls.py │ ├── test_ls_url.py │ ├── test_merge_driver.py │ ├── test_move.py │ ├── test_odb.py │ ├── test_remote.py │ ├── test_remove.py │ ├── test_repo.py │ ├── test_repo_index.py │ ├── test_root.py │ ├── test_run.py │ ├── test_run_cache.py │ ├── test_scm.py │ ├── test_scm_context.py │ ├── test_stage.py │ ├── test_stage_load.py │ ├── test_state.py │ ├── test_status.py │ ├── test_unprotect.py │ ├── test_update.py │ ├── test_used_objs.py │ ├── test_utils.py │ ├── test_version.py │ ├── test_virtual_directory.py │ └── utils/ │ ├── __init__.py │ ├── test_hydra.py │ └── test_strict_yaml.py ├── integration/ │ ├── __init__.py │ ├── conftest.py │ ├── plots/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── test_plots.py │ │ └── test_repo_plots_api.py │ └── test_studio_live_experiments.py ├── remotes/ │ ├── __init__.py │ ├── git-init/ │ │ └── git.sh │ ├── git_server.py │ ├── user.key │ └── user.key.pub ├── remotes_env.sample ├── scripts.py ├── unit/ │ ├── __init__.py │ ├── cli/ │ │ ├── __init__.py │ │ └── test_main.py │ ├── command/ │ │ ├── __init__.py │ │ ├── ls/ │ │ │ ├── __init__.py │ │ │ ├── test_ls.py │ │ │ └── test_ls_colors.py │ │ ├── test_add.py │ │ ├── test_cache.py │ │ ├── test_checkout.py │ │ ├── test_compat_flag.py │ │ ├── test_completion.py │ │ ├── test_config.py │ │ ├── test_dag.py │ │ ├── test_data_status.py │ │ ├── test_data_sync.py │ │ ├── test_dataset.py │ │ ├── test_diff.py │ │ ├── test_du.py │ │ ├── test_experiments.py │ │ ├── test_gc.py │ │ ├── test_get.py │ │ ├── test_get_url.py │ │ ├── test_git_hook.py │ │ ├── test_help.py │ │ ├── test_imp.py │ │ ├── test_imp_url.py │ │ ├── test_ls_url.py │ │ ├── test_metrics.py │ │ ├── test_params.py │ │ ├── test_plots.py │ │ ├── test_queue.py │ │ ├── test_repro.py │ │ ├── test_stage.py │ │ ├── test_status.py │ │ ├── test_studio.py │ │ └── test_update.py │ ├── data/ │ │ ├── __init__.py │ │ └── db/ │ │ ├── __init__.py │ │ └── test_local.py │ ├── dependency/ │ │ ├── __init__.py │ │ ├── test_dependency.py │ │ └── test_params.py │ ├── fs/ │ │ ├── __init__.py │ │ ├── test_base.py │ │ ├── test_data.py │ │ ├── test_dvc.py │ │ ├── test_dvc_info.py │ │ ├── test_dvcfs.py │ │ ├── test_fs.py │ │ └── test_tree.py │ ├── output/ │ │ ├── __init__.py │ │ ├── test_annotations.py │ │ ├── test_load.py │ │ ├── test_local.py │ │ └── test_output.py │ ├── remote/ │ │ ├── __init__.py │ │ ├── test_oss.py │ │ ├── test_remote.py │ │ ├── test_webdav.py │ │ └── test_webhdfs.py │ ├── render/ │ │ ├── __init__.py │ │ ├── test_convert.py │ │ ├── test_image_converter.py │ │ ├── test_match.py │ │ └── test_vega_converter.py │ ├── repo/ │ │ ├── __init__.py │ │ ├── experiments/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── queue/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_celery.py │ │ │ │ └── test_remove.py │ │ │ ├── test_collect.py │ │ │ ├── test_executor_status.py │ │ │ ├── test_remove.py │ │ │ └── test_utils.py │ │ ├── plots/ │ │ │ ├── __init__.py │ │ │ └── test_diff.py │ │ ├── test_graph.py │ │ ├── test_open_repo.py │ │ ├── test_repo.py │ │ ├── test_reproduce.py │ │ └── test_scm_context.py │ ├── scm/ │ │ ├── __init__.py │ │ └── test_scm.py │ ├── stage/ │ │ ├── __init__.py │ │ ├── test_cache.py │ │ ├── test_loader_pipeline_file.py │ │ ├── test_run.py │ │ ├── test_serialize_pipeline_file.py │ │ ├── test_serialize_pipeline_lock.py │ │ ├── test_stage.py │ │ └── test_utils.py │ ├── test_analytics.py │ ├── test_api.py │ ├── test_collect.py │ ├── test_compare.py │ ├── test_config.py │ ├── test_context.py │ ├── test_daemon.py │ ├── test_dirs.py │ ├── test_dvcfile.py │ ├── test_hashinfo.py │ ├── test_ignore.py │ ├── test_imports.py │ ├── test_info.py │ ├── test_interpolate.py │ ├── test_lockfile.py │ ├── test_logger.py │ ├── test_metrics.py │ ├── test_params.py │ ├── test_pathspec_math.py │ ├── test_progress.py │ ├── test_prompt.py │ ├── test_run.py │ ├── test_rwlock.py │ ├── test_scm.py │ ├── test_tabular_data.py │ ├── test_updater.py │ ├── ui/ │ │ ├── __init__.py │ │ ├── test_console.py │ │ ├── test_pager.py │ │ └── test_table.py │ └── utils/ │ ├── __init__.py │ ├── serialize/ │ │ ├── __init__.py │ │ ├── test_python.py │ │ ├── test_toml.py │ │ └── test_yaml.py │ ├── test_cli_parse.py │ ├── test_collections.py │ ├── test_executors.py │ ├── test_fs.py │ ├── test_humanize.py │ ├── test_plots.py │ ├── test_studio.py │ └── test_utils.py └── utils/ ├── __init__.py ├── asserts.py └── plots.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .dvc/.gitignore ================================================ /config.local /tmp /cache ================================================ FILE: .dvc/config ================================================ ================================================ FILE: .dvcignore ================================================ /tests /dvc /.github ================================================ FILE: .git-blame-ignore-revs ================================================ # The following commits will be ignored by the GitHub blame view. # You can configure `git blame` to use this file as the default ignore file: # git config blame.ignoreRevsFile .git-blame-ignore-revs # or, you can also manually ignore commits from this file by doing: # git blame --ignore-revs-file .git-blame-ignore-revs # see the `blame.markIgnoredLines` and `blame.markUnblamableLines` options as well. # Refer to: https://git-scm.com/docs/git-blame#Documentation/git-blame.txt---ignore-revs-fileltfilegt # update black to 2023 stable style and change line-length to 88 a86470ccbc693d6f0a4f8066cbd1357e5191c4ff ================================================ FILE: .git_archival.txt ================================================ node: $Format:%H$ node-date: $Format:%cI$ describe-name: $Format:%(describe:tags=true)$ ref-names: $Format:%D$ ================================================ FILE: .gitattributes ================================================ .git_archival.txt export-subst ================================================ FILE: .github/.test_durations ================================================ { "tests/func/api/test_artifacts.py::test_artifacts_show[]": 0.6690752999999994, "tests/func/api/test_artifacts.py::test_artifacts_show[sub]": 1.3406024999999993, "tests/func/api/test_artifacts.py::test_artifacts_show_subrepo[]": 0.7644723000000031, "tests/func/api/test_artifacts.py::test_artifacts_show_subrepo[sub]": 0.8369741000000008, "tests/func/api/test_data.py::TestAPI::test_filesystem[current-cache]": 0.7119634999999978, "tests/func/api/test_data.py::TestAPI::test_filesystem[current-no_cache]": 0.7142162999999968, "tests/func/api/test_data.py::TestAPI::test_filesystem[git-cache]": 0.8079615999999987, "tests/func/api/test_data.py::TestAPI::test_filesystem[git-no_cache]": 1.2323302999999974, "tests/func/api/test_data.py::TestAPI::test_filesystem[git_rev-cache]": 1.436392699999999, "tests/func/api/test_data.py::TestAPI::test_filesystem[git_rev-no_cache]": 1.2994606999999974, "tests/func/api/test_data.py::TestAPI::test_filesystem[local-cache]": 0.7356022999999965, "tests/func/api/test_data.py::TestAPI::test_filesystem[local-no_cache]": 1.1919572000000045, "tests/func/api/test_data.py::TestAPI::test_filesystem[local_rev-cache]": 0.8559640000000037, "tests/func/api/test_data.py::TestAPI::test_filesystem[local_rev-no_cache]": 0.713584400000002, "tests/func/api/test_data.py::TestAPI::test_get_url": 0.5835055000000011, "tests/func/api/test_data.py::TestAPI::test_open": 0.6204048000000011, "tests/func/api/test_data.py::test_api_missing_local_cache_exists_on_remote[file-False]": 0.6519310000000011, "tests/func/api/test_data.py::test_api_missing_local_cache_exists_on_remote[file-True]": 0.7536261999999994, "tests/func/api/test_data.py::test_api_missing_local_cache_exists_on_remote[inside-dir-False]": 0.7582351000000003, "tests/func/api/test_data.py::test_api_missing_local_cache_exists_on_remote[inside-dir-True]": 0.8035712000000004, "tests/func/api/test_data.py::test_get_url_external": 1.0128078999999985, "tests/func/api/test_data.py::test_get_url_from_remote": 0.8396529000000044, "tests/func/api/test_data.py::test_get_url_granular": 0.6913349999999951, "tests/func/api/test_data.py::test_get_url_requires_dvc": 0.34330409999999745, "tests/func/api/test_data.py::test_get_url_subrepos": 1.2583151999999984, "tests/func/api/test_data.py::test_missing": 0.4301550999999968, "tests/func/api/test_data.py::test_open_external": 1.0483930000000008, "tests/func/api/test_data.py::test_open_from_remote": 1.031453599999999, "tests/func/api/test_data.py::test_open_granular": 0.47627430000000004, "tests/func/api/test_data.py::test_open_not_cached": 0.4482658999999991, "tests/func/api/test_data.py::test_open_rev": 0.2935205000000032, "tests/func/api/test_data.py::test_open_scm_controlled": 0.2779954000000018, "tests/func/api/test_data.py::test_read_from_remote": 1.1489083000000022, "tests/func/api/test_data.py::test_read_with_subrepos[False]": 1.9086240000000103, "tests/func/api/test_data.py::test_read_with_subrepos[True]": 1.2316525000000027, "tests/func/api/test_experiments.py::test_exp_save": 1.126176700000002, "tests/func/api/test_experiments.py::test_exp_show": 0.7599229999999935, "tests/func/api/test_scm.py::test_all_branches": 0.36340509999998716, "tests/func/api/test_scm.py::test_all_commits": 0.9080075000000036, "tests/func/api/test_scm.py::test_all_tags": 0.32061440000000374, "tests/func/api/test_show.py::test_metrics_show_dirty_working_dir": 1.962079800000005, "tests/func/api/test_show.py::test_metrics_show_no_args": 1.889685600000007, "tests/func/api/test_show.py::test_metrics_show_no_metrics_found": 0.28593630000000303, "tests/func/api/test_show.py::test_metrics_show_rev_with_metrics": 2.2642164000000022, "tests/func/api/test_show.py::test_metrics_show_rev_without_metrics": 1.8105644999999981, "tests/func/api/test_show.py::test_metrics_show_targets": 2.152608200000003, "tests/func/api/test_show.py::test_params_show_deps": 0.7593096000000017, "tests/func/api/test_show.py::test_params_show_no_args": 0.8288500999999968, "tests/func/api/test_show.py::test_params_show_no_params_found": 0.42213559999999717, "tests/func/api/test_show.py::test_params_show_repo": 0.5701109999999971, "tests/func/api/test_show.py::test_params_show_revs": 0.7689407999999958, "tests/func/api/test_show.py::test_params_show_stage_addressing": 0.5756270999999984, "tests/func/api/test_show.py::test_params_show_stage_without_params": 0.32598780000000005, "tests/func/api/test_show.py::test_params_show_stages": 1.3495361999999957, "tests/func/api/test_show.py::test_params_show_targets": 1.131466500000002, "tests/func/api/test_show.py::test_params_show_untracked_target": 0.874395799999995, "tests/func/api/test_show.py::test_params_show_while_running_stage": 0.9435678999999979, "tests/func/artifacts/test_artifacts.py::test_artifacts_add_abspath": 0.1416759999999968, "tests/func/artifacts/test_artifacts.py::test_artifacts_add_fails_on_dvc_subrepo": 0.1239182999999926, "tests/func/artifacts/test_artifacts.py::test_artifacts_add_subdir": 0.1774754999999999, "tests/func/artifacts/test_artifacts.py::test_artifacts_download[]": 0.9987292999999937, "tests/func/artifacts/test_artifacts.py::test_artifacts_download[sub]": 1.0444975999999997, "tests/func/artifacts/test_artifacts.py::test_artifacts_download_studio": 0.13496169999999097, "tests/func/artifacts/test_artifacts.py::test_artifacts_download_subrepo[]": 1.1816100999999861, "tests/func/artifacts/test_artifacts.py::test_artifacts_download_subrepo[sub]": 1.5492141000000004, "tests/func/artifacts/test_artifacts.py::test_artifacts_read_bad_name": 0.13257700000000483, "tests/func/artifacts/test_artifacts.py::test_artifacts_read_fails_on_id_duplication": 0.12151710000000548, "tests/func/artifacts/test_artifacts.py::test_artifacts_read_subdir": 0.14055419999999685, "tests/func/artifacts/test_artifacts.py::test_broken_dvcyaml_extra_field[bad_dvcyaml0]": 0.14516059999999698, "tests/func/artifacts/test_artifacts.py::test_broken_dvcyaml_extra_field[bad_dvcyaml1]": 0.12352989999997988, "tests/func/artifacts/test_artifacts.py::test_get_path": 0.19403669999999806, "tests/func/artifacts/test_artifacts.py::test_get_path_subrepo": 0.603105400000004, "tests/func/artifacts/test_artifacts.py::test_get_rev": 0.22633340000000146, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[1]": 0.0032751000000104113, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[1nn]": 0.0029597000000052276, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[m1]": 0.0030679999999847496, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[m]": 0.0034961999999865156, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[model-prod-v1]": 0.0029481000000117774, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[model-prod]": 0.003120100000003845, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible[nn]": 0.003020700000007537, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[###]": 0.0029940000000010514, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[-model]": 0.0030767999999881113, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[/m]": 0.003051200000001586, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[@@@]": 0.0030206000000134736, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[@namespace/model]": 0.0036754999999999427, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[]": 0.003089799999997922, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[a model]": 0.003036399999984951, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[m/]": 0.003116800000000808, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[model#1]": 0.0030410000000102855, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[model-]": 0.0030069999999966512, "tests/func/artifacts/test_artifacts.py::test_name_is_compatible_fails[model@1]": 0.003050500000000511, "tests/func/artifacts/test_artifacts.py::test_parametrized": 0.29747580000001506, "tests/func/data/db/test_index.py::test_clear_on_download_err": 0.4539134000000189, "tests/func/data/db/test_index.py::test_clear_on_gc": 0.43299960000000226, "tests/func/data/db/test_index.py::test_indexed_dir_missing": 0.33903929999999605, "tests/func/data/db/test_index.py::test_indexed_on_push": 0.45842240000001766, "tests/func/data/db/test_index.py::test_indexed_on_status": 0.47928760000000636, "tests/func/data/db/test_index.py::test_partial_upload": 0.5441733999999911, "tests/func/experiments/test_apply.py::test_apply": 3.0489364999999964, "tests/func/experiments/test_apply.py::test_apply_failed": 0.7756726000000072, "tests/func/experiments/test_apply.py::test_apply_queued": 1.3775269999999864, "tests/func/experiments/test_apply.py::test_apply_unchanged_head": 2.3483619999999803, "tests/func/experiments/test_apply.py::test_apply_untracked": 1.7779260000000079, "tests/func/experiments/test_diff.py::test_diff_empty": 0.6685833000000088, "tests/func/experiments/test_diff.py::test_diff_exp": 2.169962599999991, "tests/func/experiments/test_diff.py::test_diff_head": 1.3638808000000182, "tests/func/experiments/test_experiments.py::test_branch": 2.1533368000000053, "tests/func/experiments/test_experiments.py::test_checkout_targets_deps": 1.6357962000000157, "tests/func/experiments/test_experiments.py::test_clean": 0.1494907000000012, "tests/func/experiments/test_experiments.py::test_copy_paths[False]": 0.8107860000000358, "tests/func/experiments/test_experiments.py::test_copy_paths[True]": 1.135548200000045, "tests/func/experiments/test_experiments.py::test_copy_paths_errors": 0.9207782000000009, "tests/func/experiments/test_experiments.py::test_custom_commit_message[False]": 0.9768105000000276, "tests/func/experiments/test_experiments.py::test_custom_commit_message[True]": 1.2530415000000232, "tests/func/experiments/test_experiments.py::test_detached_parent": 1.9396536999999938, "tests/func/experiments/test_experiments.py::test_exp_run_recursive": 1.1496640000000298, "tests/func/experiments/test_experiments.py::test_experiment_exists[False]": 2.698194200000003, "tests/func/experiments/test_experiments.py::test_experiment_exists[True]": 2.0226000000000255, "tests/func/experiments/test_experiments.py::test_experiment_name_invalid": 0.43865630000001943, "tests/func/experiments/test_experiments.py::test_experiment_no_commit": 0.36042209999999386, "tests/func/experiments/test_experiments.py::test_experiment_run_dry": 1.1187728000000448, "tests/func/experiments/test_experiments.py::test_experiment_unchanged": 1.5600346999999886, "tests/func/experiments/test_experiments.py::test_experiments_workspace_not_log_exception": 0.4825525000000255, "tests/func/experiments/test_experiments.py::test_failed_exp_workspace": 0.8329308999999938, "tests/func/experiments/test_experiments.py::test_file_permissions": 0.0012947000000025355, "tests/func/experiments/test_experiments.py::test_fix_exp_head[]": 0.025993000000028132, "tests/func/experiments/test_experiments.py::test_fix_exp_head[^]": 0.030619200000018054, "tests/func/experiments/test_experiments.py::test_fix_exp_head[~1]": 0.04737730000002216, "tests/func/experiments/test_experiments.py::test_get_baseline": 2.717492400000012, "tests/func/experiments/test_experiments.py::test_list": 3.138903099999993, "tests/func/experiments/test_experiments.py::test_local_config_is_propagated_to_tmp": 0.9434146000000396, "tests/func/experiments/test_experiments.py::test_mixed_git_dvc_out": 1.5312878000000012, "tests/func/experiments/test_experiments.py::test_modified_data_dep[False-foo: 1-False]": 2.0527747999999804, "tests/func/experiments/test_experiments.py::test_modified_data_dep[False-foo: 1-True]": 2.294647700000013, "tests/func/experiments/test_experiments.py::test_modified_data_dep[False-foo: 2-False]": 2.230488899999955, "tests/func/experiments/test_experiments.py::test_modified_data_dep[False-foo: 2-True]": 1.8093015999999693, "tests/func/experiments/test_experiments.py::test_modified_data_dep[True-foo: 1-False]": 1.7912287000000333, "tests/func/experiments/test_experiments.py::test_modified_data_dep[True-foo: 1-True]": 1.4503267999999991, "tests/func/experiments/test_experiments.py::test_modified_data_dep[True-foo: 2-False]": 1.679704700000002, "tests/func/experiments/test_experiments.py::test_modified_data_dep[True-foo: 2-True]": 1.8077306999999792, "tests/func/experiments/test_experiments.py::test_new_simple[False-None]": 1.7895829999999933, "tests/func/experiments/test_experiments.py::test_new_simple[False-foo]": 1.5720811999999995, "tests/func/experiments/test_experiments.py::test_new_simple[True-None]": 3.114446799999996, "tests/func/experiments/test_experiments.py::test_new_simple[True-foo]": 1.5187964999999934, "tests/func/experiments/test_experiments.py::test_no_scm": 0.254213099999987, "tests/func/experiments/test_experiments.py::test_packed_args_exists": 1.1008666000000034, "tests/func/experiments/test_experiments.py::test_run_celery": 10.300323799999973, "tests/func/experiments/test_experiments.py::test_run_env": 1.2357240000000047, "tests/func/experiments/test_experiments.py::test_subdir[False]": 1.5404146000000196, "tests/func/experiments/test_experiments.py::test_subdir[True]": 1.3069993000000153, "tests/func/experiments/test_experiments.py::test_subrepo[False]": 2.0550482000000017, "tests/func/experiments/test_experiments.py::test_subrepo[True]": 1.5268956000000031, "tests/func/experiments/test_experiments.py::test_untracked[False]": 1.8188596999999902, "tests/func/experiments/test_experiments.py::test_untracked[True]": 1.2779773999999975, "tests/func/experiments/test_experiments.py::test_untracked_top_level_files_are_included_in_exp[False]": 0.7230959000000041, "tests/func/experiments/test_experiments.py::test_untracked_top_level_files_are_included_in_exp[True]": 0.9551126000000068, "tests/func/experiments/test_experiments.py::test_update_py_params": 3.051115799999991, "tests/func/experiments/test_queue.py::test_celery_logs[False]": 6.378822700000001, "tests/func/experiments/test_queue.py::test_celery_logs[True]": 4.388742000000036, "tests/func/experiments/test_queue.py::test_copy_paths_queue": 5.5122883999999885, "tests/func/experiments/test_queue.py::test_custom_commit_message_queue": 5.6898801000000105, "tests/func/experiments/test_queue.py::test_queue_doesnt_remove_untracked_params_file": 0.5072050999999931, "tests/func/experiments/test_remote.py::test_auth_error_list": 0.14862869999998907, "tests/func/experiments/test_remote.py::test_auth_error_pull": 0.15549210000000357, "tests/func/experiments/test_remote.py::test_auth_error_push": 1.2056490000000224, "tests/func/experiments/test_remote.py::test_auto_push_misconfigured": 2.3435677000000226, "tests/func/experiments/test_remote.py::test_auto_push_on_run[False-success]": 2.4090233999999953, "tests/func/experiments/test_remote.py::test_auto_push_on_run[True-up_to_date]": 2.7894929000000275, "tests/func/experiments/test_remote.py::test_auto_push_on_save[False-success]": 2.384592700000013, "tests/func/experiments/test_remote.py::test_auto_push_on_save[True-up_to_date]": 2.4866651000000104, "tests/func/experiments/test_remote.py::test_auto_push_tmp_dir": 2.711254000000025, "tests/func/experiments/test_remote.py::test_get[False]": 1.6720234999999946, "tests/func/experiments/test_remote.py::test_get[True]": 1.5247991999999613, "tests/func/experiments/test_remote.py::test_list_remote[False]": 3.433762700000017, "tests/func/experiments/test_remote.py::test_list_remote[True]": 3.2126294999999914, "tests/func/experiments/test_remote.py::test_pull[False]": 3.0422385000000247, "tests/func/experiments/test_remote.py::test_pull[True]": 3.176392099999987, "tests/func/experiments/test_remote.py::test_pull_ambiguous_name": 2.3352716999999927, "tests/func/experiments/test_remote.py::test_pull_args[False-True-None]": 2.8758509999999546, "tests/func/experiments/test_remote.py::test_pull_args[True-False-True]": 2.8549404000000322, "tests/func/experiments/test_remote.py::test_pull_diverged": 1.5577454999999816, "tests/func/experiments/test_remote.py::test_pull_multi_rev": 2.8295723000000237, "tests/func/experiments/test_remote.py::test_push[False]": 3.469447900000006, "tests/func/experiments/test_remote.py::test_push[True]": 3.1035360999999853, "tests/func/experiments/test_remote.py::test_push_ambiguous_name": 2.7821596, "tests/func/experiments/test_remote.py::test_push_args[False-True-None]": 3.2440407999999934, "tests/func/experiments/test_remote.py::test_push_args[True-False-True]": 3.3222015999999996, "tests/func/experiments/test_remote.py::test_push_diverged": 1.8917133999999578, "tests/func/experiments/test_remote.py::test_push_multi_rev": 3.2379070999999726, "tests/func/experiments/test_remote.py::test_push_pull_invalid_workspace": 1.779622499999988, "tests/func/experiments/test_remove.py::test_remove_all": 2.2928706999999804, "tests/func/experiments/test_remove.py::test_remove_all_queued_experiments": 1.9678789999999822, "tests/func/experiments/test_remove.py::test_remove_experiments_by_ref": 3.0080556000000342, "tests/func/experiments/test_remove.py::test_remove_experiments_by_rev": 2.64246559999998, "tests/func/experiments/test_remove.py::test_remove_multi_rev": 2.2034240999999497, "tests/func/experiments/test_remove.py::test_remove_remote[False]": 3.372327699999971, "tests/func/experiments/test_remove.py::test_remove_remote[True]": 3.4991858999999863, "tests/func/experiments/test_remove.py::test_remove_special_queued_experiments": 2.8150486000000114, "tests/func/experiments/test_rename.py::test_existing_name": 1.892558500000007, "tests/func/experiments/test_rename.py::test_invalid_name": 1.0761679999999956, "tests/func/experiments/test_rename.py::test_rename_experiment_by_name": 1.1512879999999655, "tests/func/experiments/test_rename.py::test_same_name": 1.0524115000000052, "tests/func/experiments/test_save.py::test_exp_save[None]": 0.756629299999986, "tests/func/experiments/test_save.py::test_exp_save[test]": 0.9682786999999848, "tests/func/experiments/test_save.py::test_exp_save_after_commit": 1.3312111000000186, "tests/func/experiments/test_save.py::test_exp_save_custom_message": 1.0982238999999936, "tests/func/experiments/test_save.py::test_exp_save_include_untracked": 0.77491729999997, "tests/func/experiments/test_save.py::test_exp_save_include_untracked_force": 0.8746251999999686, "tests/func/experiments/test_save.py::test_exp_save_include_untracked_warning": 0.9865022000000181, "tests/func/experiments/test_save.py::test_exp_save_invalid_name[invalid..name]": 0.43050610000000233, "tests/func/experiments/test_save.py::test_exp_save_invalid_name[invalid/name]": 0.37493930000005093, "tests/func/experiments/test_save.py::test_exp_save_invalid_name[invalid?name]": 0.3782524000000649, "tests/func/experiments/test_save.py::test_exp_save_invalid_name[invalidname.]": 0.4567057000000432, "tests/func/experiments/test_save.py::test_exp_save_invalid_name[invalid~name]": 0.37448059999996985, "tests/func/experiments/test_save.py::test_exp_save_overwrite_experiment": 1.2816242999999758, "tests/func/experiments/test_save.py::test_exp_save_target": 0.9417426999999634, "tests/func/experiments/test_save.py::test_exp_save_unchanged": 0.8742640000000392, "tests/func/experiments/test_save.py::test_exp_save_with_staged_changes": 0.9713927999999896, "tests/func/experiments/test_save.py::test_untracked_dvclock_is_included_in_exp": 0.7397634000000153, "tests/func/experiments/test_save.py::test_untracked_top_level_files_are_included_in_exp": 0.8345099999999661, "tests/func/experiments/test_set_params.py::test_hydra_compose_and_dump[None-None-False]": 1.3278675000000248, "tests/func/experiments/test_set_params.py::test_hydra_compose_and_dump[None-None-True]": 2.344593800000041, "tests/func/experiments/test_set_params.py::test_hydra_compose_and_dump[None-bar-False]": 1.5483196000000703, "tests/func/experiments/test_set_params.py::test_hydra_compose_and_dump[None-bar-True]": 2.2510721000000444, "tests/func/experiments/test_set_params.py::test_hydra_compose_and_dump[conf-bar-False]": 1.3779260000000022, "tests/func/experiments/test_set_params.py::test_hydra_compose_and_dump[conf-bar-True]": 2.2169706000000815, "tests/func/experiments/test_set_params.py::test_hydra_sweep[False-overrides1-expected1]": 0.3220042000000376, "tests/func/experiments/test_set_params.py::test_hydra_sweep[False-overrides2-expected2]": 0.372244099999989, "tests/func/experiments/test_set_params.py::test_hydra_sweep[True-overrides0-expected0]": 0.329921899999988, "tests/func/experiments/test_set_params.py::test_hydra_sweep_prefix_name": 0.7365541000000349, "tests/func/experiments/test_set_params.py::test_hydra_sweep_requires_queue": 0.3379746999999611, "tests/func/experiments/test_set_params.py::test_modify_params[changes0-foo: baz\\ngoo:\\n bag: 3.0\\nlorem: false]": 0.8577662999999802, "tests/func/experiments/test_set_params.py::test_modify_params[changes1-foo: baz\\ngoo:\\n bag: 3.0\\nlorem: false]": 0.88462659999999, "tests/func/experiments/test_show.py::test_metrics_renaming": 1.9396978000000331, "tests/func/experiments/test_show.py::test_show_baseline_error": 1.3798479000000157, "tests/func/experiments/test_show.py::test_show_branch_and_tag_name": 0.8210886000000528, "tests/func/experiments/test_show.py::test_show_completed_error": 2.197091100000023, "tests/func/experiments/test_show.py::test_show_csv": 3.597721500000034, "tests/func/experiments/test_show.py::test_show_experiment[False]": 2.177178099999992, "tests/func/experiments/test_show.py::test_show_experiment[True]": 1.7142262000000414, "tests/func/experiments/test_show.py::test_show_failed_experiment": 6.400676799999985, "tests/func/experiments/test_show.py::test_show_filter": 1.0972039999999765, "tests/func/experiments/test_show.py::test_show_multiple_commits": 1.5359957999999665, "tests/func/experiments/test_show.py::test_show_only_changed": 1.7540200000000823, "tests/func/experiments/test_show.py::test_show_outs": 1.5832652999999368, "tests/func/experiments/test_show.py::test_show_queued": 1.3007974999999874, "tests/func/experiments/test_show.py::test_show_queued_error": 1.2482168999999885, "tests/func/experiments/test_show.py::test_show_running[TaskStatus.FAILED-False]": 0.6858837999999423, "tests/func/experiments/test_show.py::test_show_running[TaskStatus.RUNNING-False]": 0.6576839000000518, "tests/func/experiments/test_show.py::test_show_running[TaskStatus.RUNNING-True]": 0.9630088000000114, "tests/func/experiments/test_show.py::test_show_simple": 0.6424460000000067, "tests/func/experiments/test_show.py::test_show_sort": 1.8322294999999826, "tests/func/experiments/test_show.py::test_show_sort_metric_sep": 0.9055835999999999, "tests/func/experiments/test_show.py::test_show_sorted_deps": 0.4166311000000178, "tests/func/experiments/test_show.py::test_show_with_broken_repo": 1.5486077000000478, "tests/func/experiments/test_stash_exp.py::test_deleted[False-False]": 0.7941452000000595, "tests/func/experiments/test_stash_exp.py::test_deleted[False-True]": 1.0229252999999972, "tests/func/experiments/test_stash_exp.py::test_deleted[True-False]": 0.8553899000000342, "tests/func/experiments/test_stash_exp.py::test_deleted[True-True]": 0.9744108999999526, "tests/func/experiments/test_stash_exp.py::test_modified[False-False]": 0.9669892000000004, "tests/func/experiments/test_stash_exp.py::test_modified[False-True]": 1.1569672999999625, "tests/func/experiments/test_stash_exp.py::test_modified[True-False]": 0.8601257999999916, "tests/func/experiments/test_stash_exp.py::test_modified[True-True]": 1.2164980000000014, "tests/func/experiments/test_stash_exp.py::test_staged_new_file[False]": 0.7563609999999699, "tests/func/experiments/test_stash_exp.py::test_staged_new_file[True]": 1.1449452999999608, "tests/func/experiments/test_utils.py::test_generate_random_exp_name": 2.6529195999999615, "tests/func/metrics/test_diff.py::test_diff_top_level_metrics[dir/dvc.yaml-..\\\\my_metrics.yaml]": 0.3479751000000988, "tests/func/metrics/test_diff.py::test_diff_top_level_metrics[dir/dvc.yaml-my_metrics.yaml]": 0.4379244000000426, "tests/func/metrics/test_diff.py::test_diff_top_level_metrics[dvc.yaml-my_metrics.yaml]": 0.4825845999999956, "tests/func/metrics/test_diff.py::test_metrics_diff_active_branch_unchanged": 1.0561294999999973, "tests/func/metrics/test_diff.py::test_metrics_diff_broken_json": 0.7592303000000129, "tests/func/metrics/test_diff.py::test_metrics_diff_cli": 1.1395653000000152, "tests/func/metrics/test_diff.py::test_metrics_diff_deleted_metric": 0.5902245999999423, "tests/func/metrics/test_diff.py::test_metrics_diff_dirty": 1.0837390000000937, "tests/func/metrics/test_diff.py::test_metrics_diff_json": 1.1032326000000126, "tests/func/metrics/test_diff.py::test_metrics_diff_json_unchanged": 1.0659378999999376, "tests/func/metrics/test_diff.py::test_metrics_diff_new_metric": 0.5472320000000082, "tests/func/metrics/test_diff.py::test_metrics_diff_no_metrics": 0.2914406999999528, "tests/func/metrics/test_diff.py::test_metrics_diff_non_metrics": 0.5010075999999799, "tests/func/metrics/test_diff.py::test_metrics_diff_simple": 1.1088795000000005, "tests/func/metrics/test_diff.py::test_metrics_diff_with_unchanged": 0.6916975999999977, "tests/func/metrics/test_diff.py::test_metrics_diff_yaml": 1.105636499999946, "tests/func/metrics/test_diff.py::test_no_commits": 0.3156121999999755, "tests/func/metrics/test_show.py::test_cached_metrics": 0.7686137999999687, "tests/func/metrics/test_show.py::test_log_errors[dvc.yaml-error_path0-YAMLSyntaxError]": 0.5792332000000329, "tests/func/metrics/test_show.py::test_log_errors[metrics.yaml-error_path1-YAMLFileCorruptedError]": 0.6297549999999887, "tests/func/metrics/test_show.py::test_metric_in_a_tracked_directory_with_missing_dir_file": 0.3644590999999764, "tests/func/metrics/test_show.py::test_metrics_show_no_target": 0.1800465999999119, "tests/func/metrics/test_show.py::test_metrics_show_overlap[False]": 0.001055300000018633, "tests/func/metrics/test_show.py::test_metrics_show_overlap[True]": 0.001104099999963637, "tests/func/metrics/test_show.py::test_missing_cache": 0.6544150999999374, "tests/func/metrics/test_show.py::test_non_metric_and_dir_show": 0.44453069999997297, "tests/func/metrics/test_show.py::test_show": 0.3920631999999955, "tests/func/metrics/test_show.py::test_show_branch": 0.6811390999999958, "tests/func/metrics/test_show.py::test_show_falsey": 0.20822529999998096, "tests/func/metrics/test_show.py::test_show_malformed_metric": 0.2597896999999989, "tests/func/metrics/test_show.py::test_show_multiple": 0.5938720999999987, "tests/func/metrics/test_show.py::test_show_no_metrics_files": 0.1196421999999302, "tests/func/metrics/test_show.py::test_show_no_repo": 0.0665103999999701, "tests/func/metrics/test_show.py::test_show_non_metric[False]": 0.10242660000000114, "tests/func/metrics/test_show.py::test_show_non_metric[True]": 0.37919599999992215, "tests/func/metrics/test_show.py::test_show_non_metric_branch[False]": 0.24209780000001047, "tests/func/metrics/test_show.py::test_show_non_metric_branch[True]": 0.5168121000000383, "tests/func/metrics/test_show.py::test_show_simple": 0.3916608999999198, "tests/func/metrics/test_show.py::test_show_simple_from_subdir": 0.4041560000000004, "tests/func/metrics/test_show.py::test_show_subrepo_with_preexisting_tags": 0.8456790999999839, "tests/func/metrics/test_show.py::test_show_targets": 0.5895505000000298, "tests/func/metrics/test_show.py::test_show_toml": 0.40270450000008395, "tests/func/metrics/test_show.py::test_top_level_parametrized": 0.36376849999999195, "tests/func/params/test_diff.py::test_diff": 0.49012349999992466, "tests/func/params/test_diff.py::test_diff_active_branch_no_changes": 0.373032999999964, "tests/func/params/test_diff.py::test_diff_deleted": 0.38685540000000174, "tests/func/params/test_diff.py::test_diff_dict": 0.38326520000009623, "tests/func/params/test_diff.py::test_diff_dirty": 0.4405797000000007, "tests/func/params/test_diff.py::test_diff_list": 0.413541500000008, "tests/func/params/test_diff.py::test_diff_new": 0.31764760000004344, "tests/func/params/test_diff.py::test_diff_no_changes": 0.3898240999999416, "tests/func/params/test_diff.py::test_diff_no_params": 0.33827360000003637, "tests/func/params/test_diff.py::test_diff_targeted": 0.9226150999999732, "tests/func/params/test_diff.py::test_diff_top_level_params[dir/dvc.yaml-..\\\\my_params.yaml]": 0.39441390000001775, "tests/func/params/test_diff.py::test_diff_top_level_params[dir/dvc.yaml-my_params.yaml]": 0.35384809999999334, "tests/func/params/test_diff.py::test_diff_top_level_params[dvc.yaml-my_params.yaml]": 0.35703069999993886, "tests/func/params/test_diff.py::test_diff_with_unchanged": 0.47371570000001384, "tests/func/params/test_diff.py::test_diff_without_targets_specified[other_params.yaml]": 0.3682619999999588, "tests/func/params/test_diff.py::test_diff_without_targets_specified[params.yaml]": 0.3944649000000595, "tests/func/params/test_diff.py::test_no_commits": 0.3962024000000497, "tests/func/params/test_diff.py::test_pipeline_tracked_params": 0.791154199999994, "tests/func/params/test_diff.py::test_vars_shows_on_params_diff": 0.5142563999999652, "tests/func/params/test_show.py::test_cached_params": 0.670684299999948, "tests/func/params/test_show.py::test_deps_multi_stage": 0.8328005999999846, "tests/func/params/test_show.py::test_deps_with_targets": 0.7908949000000121, "tests/func/params/test_show.py::test_param_in_a_tracked_directory_with_missing_dir_file": 0.286612899999966, "tests/func/params/test_show.py::test_pipeline_params": 0.7957324000000199, "tests/func/params/test_show.py::test_show": 0.24756000000002132, "tests/func/params/test_show.py::test_show_branch": 0.7055480000000216, "tests/func/params/test_show.py::test_show_empty": 0.18992719999999963, "tests/func/params/test_show.py::test_show_list": 0.2911527999999066, "tests/func/params/test_show.py::test_show_multiple": 0.3037872000000448, "tests/func/params/test_show.py::test_show_no_repo": 0.06914749999998548, "tests/func/params/test_show.py::test_show_py": 0.22990459999999757, "tests/func/params/test_show.py::test_show_targets": 0.25046029999992925, "tests/func/params/test_show.py::test_show_toml": 0.2446489000000156, "tests/func/params/test_show.py::test_show_without_targets_specified[other_params.yaml]": 0.27128309999994826, "tests/func/params/test_show.py::test_show_without_targets_specified[params.yaml]": 0.27053269999998975, "tests/func/params/test_show.py::test_top_level_parametrized": 0.19129430000003822, "tests/func/parsing/test_errors.py::test_failed_to_interpolate": 0.18144300000000158, "tests/func/parsing/test_errors.py::test_foreach_data_expects_list_or_dict[${dct.model1}]": 0.12848279999997203, "tests/func/parsing/test_errors.py::test_foreach_data_expects_list_or_dict[${foo}]": 0.15648720000001504, "tests/func/parsing/test_errors.py::test_foreach_data_expects_list_or_dict[${lst.0}]": 0.1442303000000038, "tests/func/parsing/test_errors.py::test_foreach_data_expects_list_or_dict[foobar]": 0.1321871000000101, "tests/func/parsing/test_errors.py::test_foreach_data_key_does_not_exists[modelss.123]": 0.12942199999997683, "tests/func/parsing/test_errors.py::test_foreach_data_key_does_not_exists[modelss]": 0.13210100000009106, "tests/func/parsing/test_errors.py::test_foreach_data_syntax_error": 0.1302176999998892, "tests/func/parsing/test_errors.py::test_foreach_do_definition_item_does_not_exist[foo.bar-stages.build@0.cmd]": 0.1371279000000527, "tests/func/parsing/test_errors.py::test_foreach_do_definition_item_does_not_exist[item.thresh-stages.build@1.cmd]": 0.14251179999996566, "tests/func/parsing/test_errors.py::test_foreach_do_syntax_errors": 0.13003960000008874, "tests/func/parsing/test_errors.py::test_foreach_overwriting_item_in_list[global_data0-item and key are]": 0.12448729999994157, "tests/func/parsing/test_errors.py::test_foreach_overwriting_item_in_list[global_data1-item is]": 0.1222735000000057, "tests/func/parsing/test_errors.py::test_foreach_overwriting_item_in_list[global_data2-key is]": 0.14229789999996, "tests/func/parsing/test_errors.py::test_foreach_wdir_key_does_not_exist": 0.13372600000002421, "tests/func/parsing/test_errors.py::test_interpolate_nested_iterable": 0.14655879999997978, "tests/func/parsing/test_errors.py::test_interpolate_non_string": 0.13041680000003453, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[False-redefine0]": 0.13570640000000367, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[False-redefine1]": 0.13289270000001352, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[False-redefine2]": 0.1272615999999971, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[False-redefine3]": 0.1316560999999865, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[True-redefine0]": 0.14314220000005662, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[True-redefine1]": 0.14537790000002815, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[True-redefine2]": 0.13925029999995786, "tests/func/parsing/test_errors.py::test_item_key_in_generated_stage_vars[True-redefine3]": 0.13336179999993192, "tests/func/parsing/test_errors.py::test_local_vars_params_file_not_exist": 0.20451159999998936, "tests/func/parsing/test_errors.py::test_partial_vars_doesnot_exist": 0.13008860000002187, "tests/func/parsing/test_errors.py::test_specified_key_does_not_exist": 0.1631060000000275, "tests/func/parsing/test_errors.py::test_vars_interpolation_errors[${file}_params.yaml]": 0.1693879000000038, "tests/func/parsing/test_errors.py::test_vars_interpolation_errors[vars_1]": 0.16431169999987105, "tests/func/parsing/test_errors.py::test_wdir_failed_to_interpolate[${models.foo]}-\\n${models.foo]}\\n ^\\nParseException: Expected end of text, found ']' (at char 12), (line:1, col:13)]": 0.18762429999998176, "tests/func/parsing/test_errors.py::test_wdir_failed_to_interpolate[${models[foobar]}- Could not find 'models.foobar']": 0.16902380000004769, "tests/func/parsing/test_foreach.py::test_foreach_data_from_nested_vars": 0.17006920000000036, "tests/func/parsing/test_foreach.py::test_foreach_data_is_only_resolved_once": 0.1409080999999901, "tests/func/parsing/test_foreach.py::test_foreach_do_syntax_is_checked_once": 0.1484127999999032, "tests/func/parsing/test_foreach.py::test_foreach_interpolate_with_composite_data[foreach_data0-result0-${item.thresh}]": 0.12445279999991499, "tests/func/parsing/test_foreach.py::test_foreach_interpolate_with_composite_data[foreach_data0-result0-${item[thresh]}]": 0.12519980000007536, "tests/func/parsing/test_foreach.py::test_foreach_interpolate_with_composite_data[foreach_data1-result1-${item.thresh}]": 0.12490900000005922, "tests/func/parsing/test_foreach.py::test_foreach_interpolate_with_composite_data[foreach_data1-result1-${item[thresh]}]": 0.1543631999999775, "tests/func/parsing/test_foreach.py::test_foreach_interpolated_simple_list": 0.12273310000000492, "tests/func/parsing/test_foreach.py::test_foreach_partial_interpolations": 0.19919840000000022, "tests/func/parsing/test_foreach.py::test_foreach_with_imported_vars[test_params.yaml:train,prepare]": 0.15518950000000586, "tests/func/parsing/test_foreach.py::test_foreach_with_imported_vars[test_params.yaml:train]": 0.15083899999990535, "tests/func/parsing/test_foreach.py::test_foreach_with_imported_vars[test_params.yaml]": 0.1749901999999679, "tests/func/parsing/test_foreach.py::test_foreach_with_interpolated_wdir": 0.13871310000001813, "tests/func/parsing/test_foreach.py::test_foreach_with_interpolated_wdir_and_local_vars[params.yaml:train,prepare]": 0.16226059999996778, "tests/func/parsing/test_foreach.py::test_foreach_with_interpolated_wdir_and_local_vars[params.yaml]": 0.1652341000000206, "tests/func/parsing/test_foreach.py::test_foreach_with_local_vars": 0.14472939999996015, "tests/func/parsing/test_foreach.py::test_mixed_vars_for_foreach_data": 0.1677091000000246, "tests/func/parsing/test_foreach.py::test_mixed_vars_for_foreach_data_2": 0.17762529999998833, "tests/func/parsing/test_foreach.py::test_params_file_tracked_for_composite_list": 0.16980849999993097, "tests/func/parsing/test_foreach.py::test_params_file_with_dict_tracked": 0.19925219999998944, "tests/func/parsing/test_foreach.py::test_with_composite_list": 0.1260032999999794, "tests/func/parsing/test_foreach.py::test_with_dict_data": 0.1329804000000081, "tests/func/parsing/test_foreach.py::test_with_dict_with_non_str_keys": 0.12633909999993875, "tests/func/parsing/test_foreach.py::test_with_simple_list_data": 0.11791700000003402, "tests/func/parsing/test_interpolated_entry.py::test_cmd_dict[None-None]": 0.1439924000000019, "tests/func/parsing/test_interpolated_entry.py::test_cmd_dict[boolean_optional-append]": 0.14662889999993922, "tests/func/parsing/test_interpolated_entry.py::test_cmd_dict[store_true-nargs]": 0.16324960000002875, "tests/func/parsing/test_interpolated_entry.py::test_resolve_local_tries_to_load_globally_used_files": 0.15116809999994985, "tests/func/parsing/test_interpolated_entry.py::test_resolve_local_tries_to_load_globally_used_params_yaml": 0.13703460000004952, "tests/func/parsing/test_interpolated_entry.py::test_simple": 0.14924290000004703, "tests/func/parsing/test_interpolated_entry.py::test_stage_with_wdir": 0.14364079999995738, "tests/func/parsing/test_interpolated_entry.py::test_vars_and_params_import": 0.1336033000000043, "tests/func/parsing/test_interpolated_entry.py::test_vars_import": 0.15960929999999962, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_0-False]": 0.12724699999995437, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_0-True]": 0.13362110000008443, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_1-False]": 0.13219050000003563, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_1-True]": 0.15331199999997125, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_2-False]": 0.15744130000001633, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_2-True]": 0.12270669999998063, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_3-False]": 0.14442820000004986, "tests/func/parsing/test_interpolated_entry.py::test_vars_load_partial[vars_3-True]": 0.14452160000001868, "tests/func/parsing/test_interpolated_entry.py::test_vars_relpath_overwrite": 0.13569209999997156, "tests/func/parsing/test_interpolated_entry.py::test_with_templated_wdir": 0.1428108999999722, "tests/func/parsing/test_matrix.py::test_matrix_interpolated[matrix0]": 0.1593235000000277, "tests/func/parsing/test_matrix.py::test_matrix_interpolated[matrix1]": 0.18672480000003588, "tests/func/parsing/test_matrix.py::test_matrix_key_present[matrix0]": 0.16882160000005797, "tests/func/parsing/test_matrix.py::test_matrix_key_present[matrix1]": 0.19714740000000575, "tests/func/parsing/test_resolver.py::test_default_params_file[vars_0]": 0.14472480000000587, "tests/func/parsing/test_resolver.py::test_default_params_file[vars_1]": 0.16231190000002016, "tests/func/parsing/test_resolver.py::test_default_params_file[vars_2]": 0.13667279999998527, "tests/func/parsing/test_resolver.py::test_default_params_file_not_exist": 0.18006049999996776, "tests/func/parsing/test_resolver.py::test_global_overwrite_error_on_imports": 0.14821919999997135, "tests/func/parsing/test_resolver.py::test_global_overwrite_vars": 0.13191389999991543, "tests/func/parsing/test_resolver.py::test_load_vars_from_file": 0.1413463999999749, "tests/func/parsing/test_resolver.py::test_load_vars_with_relpath": 0.25372550000003, "tests/func/parsing/test_resolver.py::test_local_declared_vars_overwrite": 0.1364957999999774, "tests/func/parsing/test_resolver.py::test_local_overwrite_error[params.json-params.json]": 0.34710509999996475, "tests/func/parsing/test_resolver.py::test_local_overwrite_error[vars_0-build.vars[0]]": 0.14905879999992067, "tests/func/parsing/test_resolver.py::test_local_vars": 0.19008880000001227, "tests/func/parsing/test_resolver.py::test_no_params_yaml_and_vars": 0.1554322999999158, "tests/func/parsing/test_resolver.py::test_partial_vars_doesnot_exist": 0.15263030000005529, "tests/func/parsing/test_resolver.py::test_resolver": 0.1734412000000134, "tests/func/parsing/test_resolver.py::test_specified_params_file_not_exist": 0.16217699999998558, "tests/func/parsing/test_resolver.py::test_vars_already_loaded_message[vars_0-False]": 0.157558999999992, "tests/func/parsing/test_resolver.py::test_vars_already_loaded_message[vars_0-True]": 0.1264745999999377, "tests/func/parsing/test_resolver.py::test_vars_already_loaded_message[vars_1-False]": 0.13397820000000138, "tests/func/parsing/test_resolver.py::test_vars_already_loaded_message[vars_1-True]": 0.15042000000005373, "tests/func/parsing/test_resolver.py::test_vars_already_loaded_message[vars_2-False]": 0.12980170000003, "tests/func/parsing/test_resolver.py::test_vars_already_loaded_message[vars_2-True]": 0.1325290999999993, "tests/func/parsing/test_resolver.py::test_vars_interpolation_errors[${file}_params.yaml]": 0.20060419999992973, "tests/func/parsing/test_resolver.py::test_vars_interpolation_errors[vars_1]": 0.18543940000000703, "tests/func/parsing/test_top_level.py::test_artifacts": 0.14650329999989253, "tests/func/parsing/test_top_level.py::test_datasets": 0.13541109999994205, "tests/func/parsing/test_top_level.py::test_metrics": 0.14192579999996724, "tests/func/parsing/test_top_level.py::test_params": 0.1397473999999761, "tests/func/parsing/test_top_level.py::test_plots": 0.17080190000001494, "tests/func/plots/test_collect.py::test_subdir_config_not_overwritten_by_parents": 0.3654680000000212, "tests/func/plots/test_diff.py::test_diff_dirty": 1.4312219999999911, "tests/func/plots/test_diff.py::test_no_commits": 0.35085469999995667, "tests/func/plots/test_modify.py::test_dir_plots": 0.47324759999997923, "tests/func/plots/test_modify.py::test_plots_modify_existing_template": 0.3573830000000271, "tests/func/plots/test_modify.py::test_plots_modify_not_existing_template": 0.14442609999997558, "tests/func/plots/test_modify.py::test_plots_modify_should_not_change_lockfile": 0.34480729999995674, "tests/func/plots/test_modify.py::test_unset_nonexistent": 0.3391591000000176, "tests/func/plots/test_show.py::test_collect_non_existing_dir": 0.7527599999999666, "tests/func/plots/test_show.py::test_dir_plots": 0.49907970000003843, "tests/func/plots/test_show.py::test_ignore_parsing_error": 0.4091096999999877, "tests/func/plots/test_show.py::test_log_errors[dvc.yaml-path_kwargs0]": 0.5107886000000121, "tests/func/plots/test_show.py::test_log_errors[plot.yaml-path_kwargs1]": 0.7021611999999777, "tests/func/plots/test_show.py::test_plot_cache_missing": 0.9331480999999826, "tests/func/plots/test_show.py::test_plot_wrong_metric_type": 0.5906494999999836, "tests/func/plots/test_show.py::test_plots_binary[jpg]": 0.7359160999999972, "tests/func/plots/test_show.py::test_plots_binary[svg]": 0.8953023000000258, "tests/func/plots/test_show.py::test_plots_show_nested_x_dict": 0.28097090000005664, "tests/func/plots/test_show.py::test_plots_show_non_existing": 0.2934837999999331, "tests/func/plots/test_show.py::test_plots_show_overlap[False]": 0.4044963000000621, "tests/func/plots/test_show.py::test_plots_show_overlap[True]": 0.5023849000000382, "tests/func/plots/test_show.py::test_show_from_subdir": 0.36088259999991124, "tests/func/plots/test_show.py::test_show_non_plot[False]": 0.15651450000001432, "tests/func/plots/test_show.py::test_show_non_plot[True]": 0.37671339999997144, "tests/func/plots/test_show.py::test_show_non_plot_and_plot_with_params": 0.708958100000018, "tests/func/plots/test_show.py::test_show_plots_defined_with_native_os_path": 0.3919658999999456, "tests/func/plots/test_show.py::test_show_targets": 0.20834130000002915, "tests/func/plots/test_show.py::test_top_level_parametrized[${data1}-expanded_config2-expected_datafiles2]": 0.21378269999996746, "tests/func/plots/test_show.py::test_top_level_parametrized[plot_config0-expanded_config0-expected_datafiles0]": 0.2116988999999876, "tests/func/plots/test_show.py::test_top_level_parametrized[plot_config1-expanded_config1-expected_datafiles1]": 0.2667495999999687, "tests/func/plots/test_show.py::test_top_level_plots[plot_config0-expected_datafiles0]": 0.22352249999994456, "tests/func/plots/test_show.py::test_top_level_plots[plot_config1-expected_datafiles1]": 0.24122239999996964, "tests/func/plots/test_show.py::test_top_level_plots[plot_config2-expected_datafiles2]": 0.21663869999997587, "tests/func/repro/test_repro.py::TestReproAlreadyCached::test": 0.44233299999996234, "tests/func/repro/test_repro.py::TestReproAlreadyCached::test_force_import": 0.8097182000000203, "tests/func/repro/test_repro.py::TestReproAlreadyCached::test_force_with_dependencies": 0.6607293999999797, "tests/func/repro/test_repro.py::test_cmd_repro": 1.0095081999999707, "tests/func/repro/test_repro.py::test_cyclic_graph_error": 0.9080728000000136, "tests/func/repro/test_repro.py::test_downstream": 2.411942099999976, "tests/func/repro/test_repro.py::test_freeze_non_existing[Dvcfile:name]": 0.22750590000003967, "tests/func/repro/test_repro.py::test_freeze_non_existing[Dvcfile]": 0.25325349999997115, "tests/func/repro/test_repro.py::test_freeze_non_existing[not-existing-stage.json]": 0.2027564999999072, "tests/func/repro/test_repro.py::test_freeze_non_existing[pipelines.yaml:name]": 0.24169990000001462, "tests/func/repro/test_repro.py::test_freeze_non_existing[pipelines.yaml]": 0.24990230000003066, "tests/func/repro/test_repro.py::test_freeze_non_existing[stage.dvc:name]": 0.18956570000000283, "tests/func/repro/test_repro.py::test_freeze_non_existing[stage.dvc]": 0.19225720000002866, "tests/func/repro/test_repro.py::test_non_existing_output": 0.42798149999998714, "tests/func/repro/test_repro.py::test_non_existing_stage_name": 0.40296299999999974, "tests/func/repro/test_repro.py::test_repro_all_pipelines": 0.8409965000000739, "tests/func/repro/test_repro.py::test_repro_allow_missing": 0.5695142999999803, "tests/func/repro/test_repro.py::test_repro_allow_missing_and_pull": 1.1501956999999834, "tests/func/repro/test_repro.py::test_repro_changed_code": 0.6990531999999803, "tests/func/repro/test_repro.py::test_repro_changed_data": 0.8488271000000509, "tests/func/repro/test_repro.py::test_repro_changed_deep_data": 1.1420626999999968, "tests/func/repro/test_repro.py::test_repro_changed_dir": 0.6733219999999847, "tests/func/repro/test_repro.py::test_repro_changed_dir_data": 1.1888351000000057, "tests/func/repro/test_repro.py::test_repro_data_source": 0.6440561999999659, "tests/func/repro/test_repro.py::test_repro_dep_dir_with_outputs_under_it": 1.0282210000000305, "tests/func/repro/test_repro.py::test_repro_dep_under_dir": 0.83027340000001, "tests/func/repro/test_repro.py::test_repro_dry": 0.7964034000000311, "tests/func/repro/test_repro.py::test_repro_dry_no_exec": 0.5031210999999303, "tests/func/repro/test_repro.py::test_repro_external_outputs[False]": 0.6774030999999923, "tests/func/repro/test_repro.py::test_repro_external_outputs[True]": 0.46038469999996323, "tests/func/repro/test_repro.py::test_repro_fail": 0.5050530000000322, "tests/func/repro/test_repro.py::test_repro_force": 0.6815554999999449, "tests/func/repro/test_repro.py::test_repro_force_downstream": 1.426229400000011, "tests/func/repro/test_repro.py::test_repro_force_downstream_do_not_force_independent_stages": 1.8231759000000238, "tests/func/repro/test_repro.py::test_repro_frozen": 1.1989045999999917, "tests/func/repro/test_repro.py::test_repro_frozen_callback": 0.4590139000000022, "tests/func/repro/test_repro.py::test_repro_frozen_unchanged": 0.4908328999999867, "tests/func/repro/test_repro.py::test_repro_ignore_errors": 0.6419171000000006, "tests/func/repro/test_repro.py::test_repro_keep_going": 0.450359399999968, "tests/func/repro/test_repro.py::test_repro_list_of_commands_in_order[False]": 0.19824639999995952, "tests/func/repro/test_repro.py::test_repro_list_of_commands_in_order[True]": 0.20887840000000324, "tests/func/repro/test_repro.py::test_repro_list_of_commands_raise_and_stops_after_failure[False]": 0.22823670000002494, "tests/func/repro/test_repro.py::test_repro_list_of_commands_raise_and_stops_after_failure[True]": 0.18410009999996646, "tests/func/repro/test_repro.py::test_repro_metrics_add_unchanged": 0.5753306999999381, "tests/func/repro/test_repro.py::test_repro_missing_lock_info": 0.47467919999996866, "tests/func/repro/test_repro.py::test_repro_multiple_params": 0.6419725999999741, "tests/func/repro/test_repro.py::test_repro_no_commit": 0.6478619000000094, "tests/func/repro/test_repro.py::test_repro_phony": 0.8436360000000036, "tests/func/repro/test_repro.py::test_repro_pipeline": 1.0502811000000065, "tests/func/repro/test_repro.py::test_repro_pipeline_cli": 0.6927358000000368, "tests/func/repro/test_repro.py::test_repro_pipelines": 1.1391434000000231, "tests/func/repro/test_repro.py::test_repro_pipelines_cli": 1.1502829999999449, "tests/func/repro/test_repro.py::test_repro_pulls_continue_without_run_cache": 1.0244599999999764, "tests/func/repro/test_repro.py::test_repro_pulls_missing_data_source": 0.8908059999999978, "tests/func/repro/test_repro.py::test_repro_pulls_missing_import": 1.45085720000003, "tests/func/repro/test_repro.py::test_repro_rm_recursive": 0.298509700000011, "tests/func/repro/test_repro.py::test_repro_shell": 0.0010611999999809996, "tests/func/repro/test_repro.py::test_repro_single_item_with_multiple_targets": 0.5554508999999825, "tests/func/repro/test_repro.py::test_repro_skip_pull_if_no_run_cache_is_passed": 0.7956775000000107, "tests/func/repro/test_repro.py::test_repro_up_to_date": 0.4973491000000081, "tests/func/repro/test_repro.py::test_repro_when_cmd_changes": 0.579681100000073, "tests/func/repro/test_repro.py::test_repro_when_lockfile_gets_deleted": 0.5708748999999784, "tests/func/repro/test_repro.py::test_repro_when_new_deps_added_does_not_exist": 0.23076729999996815, "tests/func/repro/test_repro.py::test_repro_when_new_deps_is_added_in_dvcfile": 0.6290411000000518, "tests/func/repro/test_repro.py::test_repro_when_new_deps_is_moved": 0.6029598999999735, "tests/func/repro/test_repro.py::test_repro_when_new_out_overlaps_others_stage_outs": 0.2545671999999968, "tests/func/repro/test_repro.py::test_repro_when_new_outs_added_does_not_exist": 0.3137187999999469, "tests/func/repro/test_repro.py::test_repro_when_new_outs_is_added_in_dvcfile": 0.5474466999999663, "tests/func/repro/test_repro_allow_missing.py::test_repro_allow_missing": 0.5116075000000251, "tests/func/repro/test_repro_allow_missing.py::test_repro_allow_missing_and_pull": 0.8432981000000268, "tests/func/repro/test_repro_allow_missing.py::test_repro_allow_missing_cached": 0.5020847000000117, "tests/func/repro/test_repro_allow_missing.py::test_repro_allow_missing_upstream_stage_modified": 1.2886707000000115, "tests/func/repro/test_repro_pull.py::test_repro_pull_fails": 0.7426556000000346, "tests/func/repro/test_repro_pull.py::test_repro_pulls_allow_missing[False]": 0.7117745999999556, "tests/func/repro/test_repro_pull.py::test_repro_pulls_allow_missing[True]": 0.6968059999999809, "tests/func/repro/test_repro_pull.py::test_repro_pulls_continue_without_run_cache": 0.7865740000000301, "tests/func/repro/test_repro_pull.py::test_repro_pulls_missing_data_source": 0.6968352999999183, "tests/func/repro/test_repro_pull.py::test_repro_pulls_missing_import": 1.3220061999999757, "tests/func/repro/test_repro_pull.py::test_repro_pulls_persisted_output": 0.6955814000000373, "tests/func/repro/test_repro_pull.py::test_repro_skip_pull_if_no_run_cache_is_passed": 1.052970700000003, "tests/func/repro/test_repro_pull.py::test_repro_skip_pull_if_single_item_is_passed": 1.0417836000000307, "tests/func/test_add.py::test_add": 0.22337029999999913, "tests/func/test_add.py::test_add_colon_in_filename": 0.001040700000032757, "tests/func/test_add.py::test_add_commit": 0.2579165999999873, "tests/func/test_add.py::test_add_dir_with_existing_cache": 0.41711939999999004, "tests/func/test_add.py::test_add_directory": 0.30083650000005946, "tests/func/test_add.py::test_add_directory_with_forward_slash": 0.31754209999996874, "tests/func/test_add.py::test_add_does_not_remove_stage_file_on_failure[dvc.repo.index.Index.check_graph]": 0.29538049999996474, "tests/func/test_add.py::test_add_does_not_remove_stage_file_on_failure[dvc.stage.Stage.add_outs]": 0.28946510000002945, "tests/func/test_add.py::test_add_empty_files[copy]": 0.2735349999999812, "tests/func/test_add.py::test_add_empty_files[hardlink]": 0.266218399999957, "tests/func/test_add.py::test_add_empty_files[symlink]": 0.2584461999999803, "tests/func/test_add.py::test_add_executable": 0.001299799999969764, "tests/func/test_add.py::test_add_file_in_dir": 0.22947199999998702, "tests/func/test_add.py::test_add_file_in_symlink_dir": 0.13436689999997498, "tests/func/test_add.py::test_add_filtered_files_in_dir[dir\\\\**\\\\subdata*-expected_def_paths3-expected_rel_paths3]": 0.3367860999999266, "tests/func/test_add.py::test_add_filtered_files_in_dir[dir\\\\subdir\\\\?subdata-expected_def_paths1-expected_rel_paths1]": 0.3288568000000396, "tests/func/test_add.py::test_add_filtered_files_in_dir[dir\\\\subdir\\\\[aiou]subdata-expected_def_paths2-expected_rel_paths2]": 0.21213800000003857, "tests/func/test_add.py::test_add_filtered_files_in_dir[dir\\\\subdir\\\\subdata*-expected_def_paths0-expected_rel_paths0]": 0.30685490000007576, "tests/func/test_add.py::test_add_force_overwrite_out": 0.2808322999999291, "tests/func/test_add.py::test_add_from_data_dir": 0.3940832000000114, "tests/func/test_add.py::test_add_ignored": 0.24244040000002087, "tests/func/test_add.py::test_add_long_fname": 0.0010275999999862506, "tests/func/test_add.py::test_add_modified_dir": 0.38431979999995747, "tests/func/test_add.py::test_add_on_not_existing_file_should_not_remove_stage_file": 0.2649236999999971, "tests/func/test_add.py::test_add_optimization_for_hardlink_on_empty_files": 0.39760729999989053, "tests/func/test_add.py::test_add_parent_dir": 0.34646930000002385, "tests/func/test_add.py::test_add_pipeline_file": 0.3983269999999379, "tests/func/test_add.py::test_add_preserve_fields": 0.2187667000000033, "tests/func/test_add.py::test_add_symlink_dir": 0.1593280000000732, "tests/func/test_add.py::test_add_symlink_file": 0.2915504000000624, "tests/func/test_add.py::test_add_to_cache_different_name": 0.3470150999999646, "tests/func/test_add.py::test_add_to_cache_dir": 0.3618119000000206, "tests/func/test_add.py::test_add_to_cache_file": 0.3751513000000273, "tests/func/test_add.py::test_add_to_cache_from_remote": 0.4571867000000225, "tests/func/test_add.py::test_add_to_cache_not_exists": 0.26145719999993844, "tests/func/test_add.py::test_add_to_remote_absolute": 0.4374439000000052, "tests/func/test_add.py::test_add_tracked_file": 0.4206479999999715, "tests/func/test_add.py::test_add_unicode": 0.3307029000000625, "tests/func/test_add.py::test_add_unprotected": 0.28614760000004935, "tests/func/test_add.py::test_add_unsupported_file": 0.23960789999995313, "tests/func/test_add.py::test_add_updates_to_cloud_versioning_dir": 0.27616580000005797, "tests/func/test_add.py::test_add_with_cache_link_error": 0.18520460000002004, "tests/func/test_add.py::test_add_with_out": 0.24095520000003035, "tests/func/test_add.py::test_cmd_add": 0.24542709999997214, "tests/func/test_add.py::test_double_add_unchanged_dir": 0.28557270000004564, "tests/func/test_add.py::test_double_add_unchanged_file": 0.26062300000006644, "tests/func/test_add.py::test_escape_gitignore_entries": 0.24416680000001634, "tests/func/test_add.py::test_failed_add_cleanup": 0.31850170000006983, "tests/func/test_add.py::test_not_raises_on_re_add": 0.31634130000003324, "tests/func/test_add.py::test_readding_dir_should_not_unprotect_all": 0.2872294000000011, "tests/func/test_add.py::test_should_collect_dir_cache_only_once": 0.27603559999988647, "tests/func/test_add.py::test_should_not_checkout_when_adding_cached_copy": 0.2916169000000082, "tests/func/test_add.py::test_should_place_stage_in_data_dir_if_repository_below_symlink": 0.21484020000002602, "tests/func/test_add.py::test_should_protect_on_repeated_add[copy]": 0.270738999999935, "tests/func/test_add.py::test_should_protect_on_repeated_add[hardlink]": 0.2855639999999653, "tests/func/test_add.py::test_should_protect_on_repeated_add[symlink]": 0.2652501000000598, "tests/func/test_add.py::test_should_relink_on_repeated_add[copy-hardlink-is_hardlink]": 0.3022183999999015, "tests/func/test_add.py::test_should_relink_on_repeated_add[copy-symlink-is_symlink]": 0.30608630000000403, "tests/func/test_add.py::test_should_relink_on_repeated_add[hardlink-copy-]": 0.32222020000000384, "tests/func/test_add.py::test_should_relink_on_repeated_add[symlink-copy-]": 0.35585129999998344, "tests/func/test_add.py::test_should_throw_proper_exception_on_corrupted_stage_file": 0.2975190000000225, "tests/func/test_add.py::test_should_throw_proper_exception_on_existing_out": 0.24529200000006313, "tests/func/test_add.py::test_should_update_state_entry_for_directory_after_add": 0.44023219999996854, "tests/func/test_add.py::test_should_update_state_entry_for_file_after_add": 0.34753579999988915, "tests/func/test_add.py::test_try_adding_multiple_overlaps": 0.2431571999999278, "tests/func/test_add.py::test_try_adding_pipeline_tracked_output": 0.47223850000005996, "tests/func/test_add.py::test_windows_should_add_when_cache_on_different_drive": 0.201824600000009, "tests/func/test_analytics.py::test_collect_and_send_report": 0.2581531999999811, "tests/func/test_analytics.py::test_daemon_analytics": 0.009375399999953515, "tests/func/test_analytics.py::test_main_analytics": 0.21399900000000116, "tests/func/test_analytics.py::test_scm_dvc_only": 0.14955400000002328, "tests/func/test_analytics.py::test_scm_git": 0.19675599999993665, "tests/func/test_analytics.py::test_scm_subrepo": 0.34907369999996263, "tests/func/test_check_ignore.py::test_check_ignore[ignored-0-True]": 0.21529790000005278, "tests/func/test_check_ignore.py::test_check_ignore[not_ignored-1-False]": 0.18026370000006864, "tests/func/test_check_ignore.py::test_check_ignore_default_dir": 0.26343130000009296, "tests/func/test_check_ignore.py::test_check_ignore_details[dir\\\\foobar-0-dir\\\\.dvcignore:1:foobar\\tdir\\\\foobar\\n]": 0.1903800000000615, "tests/func/test_check_ignore.py::test_check_ignore_details[file-0-.dvcignore:1:f*\\tfile\\n]": 0.18237559999994346, "tests/func/test_check_ignore.py::test_check_ignore_details[foo-0-.dvcignore:2:!foo\\tfoo\\n]": 0.1908862999999883, "tests/func/test_check_ignore.py::test_check_ignore_details_all": 0.24732430000005934, "tests/func/test_check_ignore.py::test_check_ignore_dir[path0-0]": 0.23948219999999765, "tests/func/test_check_ignore.py::test_check_ignore_dir[path1-1]": 0.1965277999998989, "tests/func/test_check_ignore.py::test_check_ignore_error_args_cases[args0]": 0.19047829999999522, "tests/func/test_check_ignore.py::test_check_ignore_error_args_cases[args1]": 0.19249660000008362, "tests/func/test_check_ignore.py::test_check_ignore_error_args_cases[args2]": 0.1935739000000467, "tests/func/test_check_ignore.py::test_check_ignore_error_args_cases[args3]": 0.17713900000006788, "tests/func/test_check_ignore.py::test_check_ignore_error_args_cases[args4]": 0.18244690000005903, "tests/func/test_check_ignore.py::test_check_ignore_non_matching[False]": 0.20048250000007783, "tests/func/test_check_ignore.py::test_check_ignore_non_matching[True]": 0.1996592000000419, "tests/func/test_check_ignore.py::test_check_ignore_out_side_repo": 0.2362817000001769, "tests/func/test_check_ignore.py::test_check_ignore_stdin_mode[ignored-0-True]": 0.2505042999999887, "tests/func/test_check_ignore.py::test_check_ignore_stdin_mode[not_ignored-1-False]": 0.2630323999999291, "tests/func/test_check_ignore.py::test_check_ignore_sub_repo": 0.2633756000000176, "tests/func/test_check_ignore.py::test_check_sub_dir_ignore_file": 0.2596231999999645, "tests/func/test_checkout.py::TestCheckoutCleanWorkingDir::test": 0.38110630000005585, "tests/func/test_checkout.py::TestCheckoutCleanWorkingDir::test_force": 0.3655913000000055, "tests/func/test_checkout.py::test_checkout": 0.6012491000000182, "tests/func/test_checkout.py::test_checkout_cli": 0.8530119000000695, "tests/func/test_checkout.py::test_checkout_dir_compat": 0.30509909999989304, "tests/func/test_checkout.py::test_checkout_directory": 0.39772500000003674, "tests/func/test_checkout.py::test_checkout_empty_dir": 0.32532400000002326, "tests/func/test_checkout.py::test_checkout_executable": 0.2870113000000174, "tests/func/test_checkout.py::test_checkout_file": 0.2947092000000566, "tests/func/test_checkout.py::test_checkout_missing_md5_in_lock_file_for_outs_deps": 0.44046830000002046, "tests/func/test_checkout.py::test_checkout_moved_cache_dir_with_symlinks": 0.4461985000000368, "tests/func/test_checkout.py::test_checkout_no_checksum": 0.23846259999993435, "tests/func/test_checkout.py::test_checkout_not_cached_file": 0.35285209999983635, "tests/func/test_checkout.py::test_checkout_partial": 0.406533000000195, "tests/func/test_checkout.py::test_checkout_partial_subdir": 0.3881925999999112, "tests/func/test_checkout.py::test_checkout_partial_unchanged": 0.5505855999999767, "tests/func/test_checkout.py::test_checkout_recursive": 0.3562659999998914, "tests/func/test_checkout.py::test_checkout_recursive_not_directory": 0.27791689999992286, "tests/func/test_checkout.py::test_checkout_relink[hardlink-is_hardlink]": 0.3497247000000243, "tests/func/test_checkout.py::test_checkout_relink[symlink-is_symlink]": 0.3419618000000355, "tests/func/test_checkout.py::test_checkout_selective_remove": 0.39663129999996727, "tests/func/test_checkout.py::test_checkout_stats_on_failure": 0.8075246000000789, "tests/func/test_checkout.py::test_checkout_suggest_git": 0.1943472999998903, "tests/func/test_checkout.py::test_checkout_target_recursive_should_not_remove_other_used_files": 0.4229938000000857, "tests/func/test_checkout.py::test_checkout_with_deps": 0.5434178000000429, "tests/func/test_checkout.py::test_checkout_with_deps_cli": 0.6640707999999904, "tests/func/test_checkout.py::test_checkout_with_relink_existing[copy]": 0.4169368000000304, "tests/func/test_checkout.py::test_checkout_with_relink_existing[hardlink]": 0.36636650000002646, "tests/func/test_checkout.py::test_checkout_with_relink_existing[symlink]": 0.3817441000001054, "tests/func/test_checkout.py::test_checkouts_for_pipeline_tracked_outs": 1.2298499999999422, "tests/func/test_checkout.py::test_checkouts_on_same_stage_name_and_output_name": 0.7647766000000047, "tests/func/test_checkout.py::test_checkouts_with_different_addressing": 1.2168963999998823, "tests/func/test_checkout.py::test_gitignore_basic": 0.6002985999999737, "tests/func/test_checkout.py::test_gitignore_when_checkout": 1.270755199999826, "tests/func/test_checkout.py::test_partial_checkout[dir\\\\subdir\\\\file]": 0.4440303999999742, "tests/func/test_checkout.py::test_partial_checkout[dir\\\\subdir]": 0.44663820000005217, "tests/func/test_checkout.py::test_remove_files_when_checkout": 0.5229241000000684, "tests/func/test_checkout.py::test_stats_does_not_show_changes_by_default": 0.5245118999999931, "tests/func/test_checkout.py::test_stats_on_added_file_from_tracked_dir": 0.7492703999998866, "tests/func/test_checkout.py::test_stats_on_checkout": 1.7117934000000332, "tests/func/test_checkout.py::test_stats_on_empty_checkout": 0.661128299999973, "tests/func/test_checkout.py::test_stats_on_removed_file_from_tracked_dir": 0.9060216999999966, "tests/func/test_checkout.py::test_stats_on_show_changes_does_not_show_summary": 0.5733001999999487, "tests/func/test_checkout.py::test_stats_on_updated_file_from_tracked_dir": 0.7445966999999882, "tests/func/test_cli.py::test_add": 0.16391589999989264, "tests/func/test_cli.py::test_argparse": 0.11586220000015146, "tests/func/test_cli.py::test_cd": 0.16199100000005728, "tests/func/test_cli.py::test_checkout": 0.23483790000000226, "tests/func/test_cli.py::test_config_list": 0.0035698999998885483, "tests/func/test_cli.py::test_config_unset": 0.11844689999998081, "tests/func/test_cli.py::test_find_root": 0.1724064999999655, "tests/func/test_cli.py::test_pull": 0.1517998000000489, "tests/func/test_cli.py::test_push": 0.1573064000000386, "tests/func/test_cli.py::test_remove": 0.180031299999996, "tests/func/test_cli.py::test_repro": 0.15573790000007648, "tests/func/test_cli.py::test_status": 0.14812940000001618, "tests/func/test_cli.py::test_unknown_command_help": 0.007515200000057121, "tests/func/test_cli.py::test_unknown_subcommand_help": 0.0067342999999482345, "tests/func/test_commit.py::test_commit_changed_md5": 0.2195017999999891, "tests/func/test_commit.py::test_commit_dos2unix": 0.3207045999999991, "tests/func/test_commit.py::test_commit_force": 0.3498164000001225, "tests/func/test_commit.py::test_commit_granular_dir": 0.3889625999998998, "tests/func/test_commit.py::test_commit_granular_output": 0.3346500999999762, "tests/func/test_commit.py::test_commit_granular_output_dir": 0.255196200000114, "tests/func/test_commit.py::test_commit_granular_output_file": 0.22752040000000306, "tests/func/test_commit.py::test_commit_no_exec": 0.2550777000000153, "tests/func/test_commit.py::test_commit_no_exec_missing_dep": 0.1423850000001039, "tests/func/test_commit.py::test_commit_no_exec_missing_out": 0.17701290000002246, "tests/func/test_commit.py::test_commit_pipeline_stage": 0.6073219999999537, "tests/func/test_commit.py::test_commit_preserve_fields": 0.30999370000006365, "tests/func/test_commit.py::test_commit_recursive": 0.3930149000000256, "tests/func/test_commit.py::test_commit_updates_to_cloud_versioning_dir": 0.2628995999999688, "tests/func/test_commit.py::test_commit_with_deps": 0.4309333000001061, "tests/func/test_commit.py::test_imported_entries_unchanged": 0.8517232999998896, "tests/func/test_config.py::test_config_gdrive_fields": 0.12703910000016094, "tests/func/test_config.py::test_config_get[args0-0-False]": 0.20948869999995168, "tests/func/test_config.py::test_config_get[args1-0-myremote]": 0.1829517000001033, "tests/func/test_config.py::test_config_get[args2-0-treeverse]": 0.19686669999998685, "tests/func/test_config.py::test_config_get[args3-0-treeverse]": 0.1675059000000374, "tests/func/test_config.py::test_config_get[args4-251-option 'profile' doesn't exist]": 0.18096200000002227, "tests/func/test_config.py::test_config_get[args5-0-gs://bucket/path]": 0.12368970000022728, "tests/func/test_config.py::test_config_get[args6-0-gs://bucket/path]": 0.13007389999995667, "tests/func/test_config.py::test_config_get[args7-251-remote 'other' doesn't exist]": 0.13832799999988765, "tests/func/test_config.py::test_config_get_in_non_dvc_repo[args0-251]": 0.014465299999983472, "tests/func/test_config.py::test_config_get_in_non_dvc_repo[args1-251]": 0.014442199999962213, "tests/func/test_config.py::test_config_get_in_non_dvc_repo[args2-0]": 0.013205699999957687, "tests/func/test_config.py::test_config_list": 0.13482399999986683, "tests/func/test_config.py::test_config_list_in_non_dvc_repo[args0-251]": 0.019574000000034175, "tests/func/test_config.py::test_config_list_in_non_dvc_repo[args1-251]": 0.01389150000011341, "tests/func/test_config.py::test_config_list_in_non_dvc_repo[args2-0]": 0.013700800000037816, "tests/func/test_config.py::test_config_loads_without_error_for_non_dvc_repo": 0.013231799999971372, "tests/func/test_config.py::test_config_remote": 0.15216689999999744, "tests/func/test_config.py::test_config_set": 0.17704680000008466, "tests/func/test_config.py::test_config_set_in_non_dvc_repo": 0.014170100000114871, "tests/func/test_config.py::test_config_set_local": 0.20866990000001806, "tests/func/test_config.py::test_config_show_origin_merged": 0.14643520000004173, "tests/func/test_config.py::test_config_show_origin_single": 0.15067039999996723, "tests/func/test_config.py::test_list_bad_args[args0]": 0.12268940000012662, "tests/func/test_config.py::test_list_bad_args[args1]": 0.14213120000010804, "tests/func/test_config.py::test_list_bad_args[args2]": 0.14091080000002876, "tests/func/test_config.py::test_load_relative_paths[cert_path-webdavs://example.com/files/USERNAME/]": 0.1395637999999053, "tests/func/test_config.py::test_load_relative_paths[credentialpath-gs://my-bucket/path]": 0.11936819999993986, "tests/func/test_config.py::test_load_relative_paths[credentialpath-s3://mybucket/my/path]": 0.12908759999993435, "tests/func/test_config.py::test_load_relative_paths[gdrive_service_account_json_file_path-gdrive://root/test]": 0.1351872000000185, "tests/func/test_config.py::test_load_relative_paths[gdrive_user_credentials_file-gdrive://root/test]": 0.12179250000008324, "tests/func/test_config.py::test_load_relative_paths[key_path-webdavs://example.com/files/USERNAME/]": 0.14102509999997892, "tests/func/test_config.py::test_load_relative_paths[keyfile-ssh://user@example.com:1234/path/to/dir]": 0.14036539999995057, "tests/func/test_config.py::test_merging_two_levels": 0.14326260000007096, "tests/func/test_config.py::test_set_invalid_key": 0.12056800000004841, "tests/func/test_daemon.py::test_analytics": 1.1433796000001166, "tests/func/test_daemon.py::test_updater": 2.4364567999999736, "tests/func/test_data_cloud.py::TestRemote::test": 0.6962589999999409, "tests/func/test_data_cloud.py::TestRemote::test_pull_00_prefix": 0.6842130000001134, "tests/func/test_data_cloud.py::TestRemote::test_pull_no_00_prefix": 0.8140448000000333, "tests/func/test_data_cloud.py::TestRemote::test_stage_cache_push_pull": 0.57795590000012, "tests/func/test_data_cloud.py::test_cloud_cli": 1.659253900000067, "tests/func/test_data_cloud.py::test_data_cloud_error_cli": 0.22858320000000276, "tests/func/test_data_cloud.py::test_dvc_pull_pipeline_stages": 3.110578300000043, "tests/func/test_data_cloud.py::test_fetch_stats[fs0-2 files fetched]": 0.6439170999998396, "tests/func/test_data_cloud.py::test_fetch_stats[fs1-1 file fetched]": 0.511205700000005, "tests/func/test_data_cloud.py::test_fetch_stats[fs2-Everything is up to date.]": 0.26188230000002477, "tests/func/test_data_cloud.py::test_hash_recalculation": 0.3639411999999993, "tests/func/test_data_cloud.py::test_missing_cache": 0.4893174999999701, "tests/func/test_data_cloud.py::test_output_remote": 1.5091685999999527, "tests/func/test_data_cloud.py::test_output_target_remote": 1.2829474000000118, "tests/func/test_data_cloud.py::test_pipeline_file_target_ops": 1.7815956999999116, "tests/func/test_data_cloud.py::test_pull_allow_missing": 0.6819165000000567, "tests/func/test_data_cloud.py::test_pull_external_dvc_imports": 1.9060864000000493, "tests/func/test_data_cloud.py::test_pull_external_dvc_imports_mixed": 1.6527059000000008, "tests/func/test_data_cloud.py::test_pull_git_imports[erepo_dir]": 1.5395055000000184, "tests/func/test_data_cloud.py::test_pull_git_imports[git_dir]": 1.045524300000011, "tests/func/test_data_cloud.py::test_pull_granular_excluding_import_that_cannot_be_pulled": 0.7391129000000092, "tests/func/test_data_cloud.py::test_pull_partial": 0.8865887999999131, "tests/func/test_data_cloud.py::test_pull_partial_import": 0.34923349999996844, "tests/func/test_data_cloud.py::test_pull_partial_import_missing": 0.25161370000012084, "tests/func/test_data_cloud.py::test_pull_partial_import_modified": 0.3184686000000738, "tests/func/test_data_cloud.py::test_pull_stats": 0.8137879000000794, "tests/func/test_data_cloud.py::test_push_pull_all[all_branches-3]": 1.3515395000001718, "tests/func/test_data_cloud.py::test_push_pull_all[all_commits-3]": 2.8969190000000253, "tests/func/test_data_cloud.py::test_push_pull_all[all_tags-2]": 1.2282873999999993, "tests/func/test_data_cloud.py::test_push_pull_fetch_pipeline_stages": 0.9839677999999594, "tests/func/test_data_cloud.py::test_push_stats[fs0-2 files pushed]": 0.5599261000000979, "tests/func/test_data_cloud.py::test_push_stats[fs1-1 file pushed]": 0.6247941999999966, "tests/func/test_data_cloud.py::test_push_stats[fs2-Everything is up to date]": 0.35563230000002477, "tests/func/test_data_cloud.py::test_target_remote": 0.8110535999999229, "tests/func/test_data_cloud.py::test_verify_hashes": 1.1686573000000635, "tests/func/test_data_cloud.py::test_warn_on_outdated_stage": 0.4580950000000712, "tests/func/test_data_status.py::test_directory": 0.7879010000000335, "tests/func/test_data_status.py::test_empty_dir": 0.4069728000000623, "tests/func/test_data_status.py::test_file": 0.6691374999999198, "tests/func/test_data_status.py::test_git_committed_missing_cache_missing_workspace": 0.8985119999998687, "tests/func/test_data_status.py::test_git_committed_missing_cache_workspace_exists": 0.6913467999999057, "tests/func/test_data_status.py::test_git_to_dvc_path_wdir_transformation[None]": 0.3991748999998208, "tests/func/test_data_status.py::test_git_to_dvc_path_wdir_transformation[path1]": 0.5411543999999822, "tests/func/test_data_status.py::test_missing_cache_missing_workspace": 0.593168799999944, "tests/func/test_data_status.py::test_missing_cache_workspace_exists": 0.5601576999999907, "tests/func/test_data_status.py::test_missing_dir_object_from_head": 0.669361800000047, "tests/func/test_data_status.py::test_missing_dir_object_from_index": 0.7362090000000308, "tests/func/test_data_status.py::test_missing_remote_cache": 0.9769824999999628, "tests/func/test_data_status.py::test_new_empty_git_repo": 0.39809409999998024, "tests/func/test_data_status.py::test_noscm_repo": 0.21185890000003837, "tests/func/test_data_status.py::test_outs_with_no_hashes": 0.43225139999992734, "tests/func/test_data_status.py::test_outs_with_no_hashes_and_with_uncommitted_files": 0.40048109999997905, "tests/func/test_data_status.py::test_partial_missing_cache": 0.49934910000001764, "tests/func/test_data_status.py::test_root_from_dir_to_file": 0.6534549999998944, "tests/func/test_data_status.py::test_root_from_file_to_dir": 0.46668609999994715, "tests/func/test_data_status.py::test_skip_uncached_pipeline_outputs": 0.40500140000006013, "tests/func/test_data_status.py::test_subdir": 1.0634731000000102, "tests/func/test_data_status.py::test_tracked_directory_deep": 0.6695379000001367, "tests/func/test_data_status.py::test_unchanged": 0.7081071999999722, "tests/func/test_data_status.py::test_untracked_newly_added_files": 0.4063917999999376, "tests/func/test_dataset.py::test_collect": 0.1674499000000651, "tests/func/test_dataset.py::test_dvc": 0.46001330000012786, "tests/func/test_dataset.py::test_dvc_dataset_pipeline": 0.7948393000000351, "tests/func/test_dataset.py::test_dvc_dump": 0.17996560000005957, "tests/func/test_dataset.py::test_datachain": 0.22482930000001033, "tests/func/test_dataset.py::test_datachain_dataset_pipeline": 0.43405649999999696, "tests/func/test_dataset.py::test_datachain_dump": 0.1858166000000665, "tests/func/test_dataset.py::test_invalidation": 0.16291839999996682, "tests/func/test_dataset.py::test_parametrized": 0.19277699999997822, "tests/func/test_dataset.py::test_pipeline_when_not_in_sync": 0.2063928999999689, "tests/func/test_dataset.py::test_url": 1.1613198999999668, "tests/func/test_dataset.py::test_url_dataset_pipeline": 0.7589528000000882, "tests/func/test_dataset.py::test_url_dump": 0.16424820000008822, "tests/func/test_diff.py::test_abs_target": 0.4775963000000729, "tests/func/test_diff.py::test_added": 0.4151034000000209, "tests/func/test_diff.py::test_added_deep": 0.46422310000002653, "tests/func/test_diff.py::test_deleted[False]": 0.683859100000177, "tests/func/test_diff.py::test_deleted[True]": 0.4685372000000143, "tests/func/test_diff.py::test_diff_add_similar_files[False]": 0.6157927000000427, "tests/func/test_diff.py::test_diff_add_similar_files[True]": 0.6788806999999224, "tests/func/test_diff.py::test_diff_dirty": 0.6926497000000609, "tests/func/test_diff.py::test_diff_granular": 0.8422219000000268, "tests/func/test_diff.py::test_diff_no_cache": 0.6685171999999966, "tests/func/test_diff.py::test_diff_rename_file[False]": 0.7659852000000456, "tests/func/test_diff.py::test_diff_rename_file[True]": 0.822601000000077, "tests/func/test_diff.py::test_diff_rename_folder[False]": 0.5709835999999768, "tests/func/test_diff.py::test_diff_rename_folder[True]": 0.6485969999998815, "tests/func/test_diff.py::test_directories": 1.1286296000000675, "tests/func/test_diff.py::test_modified": 0.6859245999999075, "tests/func/test_diff.py::test_modified_subrepo": 0.9839555999999448, "tests/func/test_diff.py::test_no_cache_entry": 0.7368651000000455, "tests/func/test_diff.py::test_no_changes": 0.6226969000000508, "tests/func/test_diff.py::test_no_commits": 0.5326039999998784, "tests/func/test_diff.py::test_no_scm": 0.253040399999918, "tests/func/test_diff.py::test_refs": 0.9594080000000531, "tests/func/test_diff.py::test_rename_multiple_files_same_hashes": 0.9475248000001102, "tests/func/test_diff.py::test_same_rev": 0.5410654000000932, "tests/func/test_diff.py::test_targets_file_and_dir": 0.9251517999999805, "tests/func/test_diff.py::test_targets_missing_path": 0.7832548999999744, "tests/func/test_diff.py::test_targets_single_dir": 0.947497799999951, "tests/func/test_diff.py::test_targets_single_dir_with_file": 0.9124318000000358, "tests/func/test_diff.py::test_targets_single_file": 0.7914005999999745, "tests/func/test_diff.py::test_targets_single_file_in_dir": 0.7911016000000473, "tests/func/test_diff.py::test_targets_single_file_in_dir_with_file": 0.9484240999998974, "tests/func/test_diff.py::test_targets_two_files_in_dir": 0.7935872000000472, "tests/func/test_download.py::test_lfs_prefetch_directory[escape-**]": 0.001256399999988389, "tests/func/test_download.py::test_lfs_prefetch_directory[escape-*]": 0.0013634000000593005, "tests/func/test_download.py::test_lfs_prefetch_directory[escape-?]": 0.001416800000015428, "tests/func/test_download.py::test_lfs_prefetch_directory[escape-[!seq]]": 0.43633040000008805, "tests/func/test_download.py::test_lfs_prefetch_directory[escape-[seq]]": 0.39428320000001804, "tests/func/test_download.py::test_lfs_prefetch_directory[plain]": 0.49833910000006654, "tests/func/test_download.py::test_lfs_prefetch_file[escape-**]": 0.001109700000029079, "tests/func/test_download.py::test_lfs_prefetch_file[escape-*]": 0.0011691999999356995, "tests/func/test_download.py::test_lfs_prefetch_file[escape-?]": 0.0011173999999982698, "tests/func/test_download.py::test_lfs_prefetch_file[escape-[!seq]]": 0.48147240000002967, "tests/func/test_download.py::test_lfs_prefetch_file[escape-[seq]]": 0.3986328999999387, "tests/func/test_download.py::test_lfs_prefetch_file[plain]": 0.40905340000006163, "tests/func/test_du.py::test_du": 2.0110667999999805, "tests/func/test_dvcfile.py::test_dvcfile_dos2unix": 0.15745239999989735, "tests/func/test_dvcfile.py::test_dvcfile_dump_preserves_comments": 0.1488390999999183, "tests/func/test_dvcfile.py::test_dvcfile_dump_preserves_desc": 0.38740600000005543, "tests/func/test_dvcfile.py::test_dvcfile_dump_preserves_meta": 0.36510500000008506, "tests/func/test_dvcfile.py::test_dvcfile_load_dump_stage_with_desc_meta": 0.18181300000003375, "tests/func/test_dvcfile.py::test_dvcfile_load_with_plots": 0.26786539999989145, "tests/func/test_dvcfile.py::test_dvcfile_try_dumping_parametrized_stage[data0-build-us]": 0.15425709999999526, "tests/func/test_dvcfile.py::test_dvcfile_try_dumping_parametrized_stage[data1-build@us]": 0.16851990000020578, "tests/func/test_dvcfile.py::test_has_stage_with_name": 0.33740469999986544, "tests/func/test_dvcfile.py::test_load_all_multistage": 0.5214114999999993, "tests/func/test_dvcfile.py::test_load_all_singlestage": 0.23141340000006494, "tests/func/test_dvcfile.py::test_remove_stage": 0.7379988999999796, "tests/func/test_dvcfile.py::test_remove_stage_dvcfiles": 0.2416733000000022, "tests/func/test_dvcfile.py::test_remove_stage_lockfile": 0.6938364000000092, "tests/func/test_dvcfile.py::test_remove_stage_on_lockfile_format_error": 0.39975270000002183, "tests/func/test_dvcfile.py::test_remove_stage_preserves_comment": 0.4730415000001358, "tests/func/test_dvcfile.py::test_remove_stage_removes_dvcfiles_if_no_stages_left": 0.3775637999999617, "tests/func/test_dvcfile.py::test_run_load_one_for_multistage": 0.502129600000103, "tests/func/test_dvcfile.py::test_run_load_one_for_multistage_non_existing": 0.2074472000000469, "tests/func/test_dvcfile.py::test_run_load_one_for_multistage_non_existing_stage_name": 0.34883259999980964, "tests/func/test_dvcfile.py::test_run_load_one_on_single_stage": 0.597080099999971, "tests/func/test_dvcfile.py::test_stage_collection": 0.44439489999990656, "tests/func/test_dvcfile.py::test_try_get_single_stage_from_pipeline_file": 0.2724720000001071, "tests/func/test_external_repo.py::test_cache_reused": 1.383084300000064, "tests/func/test_external_repo.py::test_external_repo": 1.2636050999999497, "tests/func/test_external_repo.py::test_known_sha": 0.35369119999995746, "tests/func/test_external_repo.py::test_pull_subdir_file": 0.5718703000000005, "tests/func/test_external_repo.py::test_relative_remote": 0.973195500000088, "tests/func/test_external_repo.py::test_shallow_clone_branch": 1.2217249000000265, "tests/func/test_external_repo.py::test_shallow_clone_tag": 1.015111999999931, "tests/func/test_external_repo.py::test_source_change": 0.7035343999998531, "tests/func/test_external_repo.py::test_subrepos_are_ignored": 1.3591140999999425, "tests/func/test_external_repo.py::test_subrepos_are_ignored_for_git_tracked_dirs": 1.0593133999998372, "tests/func/test_fs.py::test_cleanfs_subrepo": 0.46248530000002575, "tests/func/test_fs.py::test_walk_dont_ignore_subrepos": 0.6838972999998987, "tests/func/test_gc.py::test_all_commits": 2.156316600000082, "tests/func/test_gc.py::test_date": 2.269047599999908, "tests/func/test_gc.py::test_gc_all_experiments": 0.6611699000000044, "tests/func/test_gc.py::test_gc_api": 0.3851829999999836, "tests/func/test_gc.py::test_gc_branches_tags": 1.0996564000000717, "tests/func/test_gc.py::test_gc_cli": 0.41177300000003925, "tests/func/test_gc.py::test_gc_cloud_positive": 0.34791889999996783, "tests/func/test_gc.py::test_gc_cloud_remote_field": 0.795977999999991, "tests/func/test_gc.py::test_gc_cloud_remove_order": 0.8154675999999199, "tests/func/test_gc.py::test_gc_cloud_with_or_without_specifier": 0.933874499999888, "tests/func/test_gc.py::test_gc_dry": 0.32338210000000345, "tests/func/test_gc.py::test_gc_logging": 0.31315829999994094, "tests/func/test_gc.py::test_gc_multiple_dvc_repos": 0.8834275000000389, "tests/func/test_gc.py::test_gc_no_dir_cache": 0.3972282999999379, "tests/func/test_gc.py::test_gc_no_unpacked_dir": 0.23377059999995708, "tests/func/test_gc.py::test_gc_not_collect_pipeline_tracked_files": 0.39117349999992257, "tests/func/test_gc.py::test_gc_not_in_remote": 0.7354806999999255, "tests/func/test_gc.py::test_gc_not_in_remote_cloud": 0.18755820000001222, "tests/func/test_gc.py::test_gc_not_in_remote_remote_arg": 0.8360622999999805, "tests/func/test_gc.py::test_gc_not_in_remote_with_remote_field": 0.6703756999999086, "tests/func/test_gc.py::test_gc_rev_num": 0.7199834999998984, "tests/func/test_gc.py::test_gc_skip_failed": 0.1434530999998742, "tests/func/test_gc.py::test_gc_with_possible_args_positive": 0.3313971000000038, "tests/func/test_gc.py::test_gc_without_workspace[]": 0.2372054999999591, "tests/func/test_gc.py::test_gc_without_workspace[c]": 0.2266785000000482, "tests/func/test_gc.py::test_gc_without_workspace_on_tags_branches_commits": 0.20780869999998686, "tests/func/test_gc.py::test_gc_without_workspace_raises_error": 0.12934850000010556, "tests/func/test_get.py::test_absolute_file_outside_git_repo": 0.15017870000008315, "tests/func/test_get.py::test_absolute_file_outside_repo": 0.38033600000005663, "tests/func/test_get.py::test_cache_type_is_properly_overridden": 0.5857792000000472, "tests/func/test_get.py::test_get_a_dvc_file": 0.20116699999994125, "tests/func/test_get.py::test_get_complete_repo": 1.4647586999999476, "tests/func/test_get.py::test_get_file_from_dir": 0.9006957999998804, "tests/func/test_get.py::test_get_from_non_dvc_master": 0.6872383000001037, "tests/func/test_get.py::test_get_from_non_dvc_repo": 0.2128956000000244, "tests/func/test_get.py::test_get_from_subrepos[files0-False]": 0.7780077999999548, "tests/func/test_get.py::test_get_from_subrepos[files0-True]": 0.8611526999999342, "tests/func/test_get.py::test_get_from_subrepos[files1-False]": 0.7101842999999235, "tests/func/test_get.py::test_get_from_subrepos[files1-True]": 0.8807715999998891, "tests/func/test_get.py::test_get_git_dir[erepo_dir]": 0.38611629999991237, "tests/func/test_get.py::test_get_git_dir[git_dir]": 0.2643609000000424, "tests/func/test_get.py::test_get_git_file[erepo_dir]": 0.3733656000000565, "tests/func/test_get.py::test_get_git_file[git_dir]": 0.2132688000001508, "tests/func/test_get.py::test_get_mixed_dir": 0.5913230999999541, "tests/func/test_get.py::test_get_pipeline_tracked_outs": 1.2631304000001364, "tests/func/test_get.py::test_get_repo_broken_dir": 0.48770490000003974, "tests/func/test_get.py::test_get_repo_dir": 0.5975047000000586, "tests/func/test_get.py::test_get_repo_file": 0.5339506000000256, "tests/func/test_get.py::test_get_repo_file_no_override": 0.8450057000001152, "tests/func/test_get.py::test_get_repo_file_with_override": 0.9565097000000833, "tests/func/test_get.py::test_get_repo_rev": 0.47190690000013547, "tests/func/test_get.py::test_get_to_dir[.]": 0.7166565999999648, "tests/func/test_get.py::test_get_to_dir[dir/subdir]": 0.543013799999926, "tests/func/test_get.py::test_get_to_dir[dir]": 0.4927519000000302, "tests/func/test_get.py::test_get_url_git_only_repo": 0.20925550000004023, "tests/func/test_get.py::test_get_url_not_existing": 0.39218749999997726, "tests/func/test_get.py::test_get_url_positive": 0.6426764000000276, "tests/func/test_get.py::test_granular_get_from_subrepos": 1.2335647000001018, "tests/func/test_get.py::test_non_cached_output": 0.6284569000000602, "tests/func/test_get.py::test_unknown_path": 0.2856510999999955, "tests/func/test_get_url.py::TestGetUrl::test_get_dir": 0.02241720000006353, "tests/func/test_get_url.py::TestGetUrl::test_get_file": 0.025068900000064787, "tests/func/test_get_url.py::TestGetUrl::test_get_url_nonexistent": 0.012923699999987548, "tests/func/test_get_url.py::TestGetUrl::test_get_url_to_dir[.]": 0.025865899999871544, "tests/func/test_get_url.py::TestGetUrl::test_get_url_to_dir[dir/subdir]": 0.023055399999861947, "tests/func/test_get_url.py::TestGetUrl::test_get_url_to_dir[dir]": 0.0350884000000633, "tests/func/test_get_url.py::test_get_dir": 0.015264599999909478, "tests/func/test_get_url.py::test_get_file": 0.014133099999980914, "tests/func/test_get_url.py::test_get_file_conflict_and_override": 0.016250000000013642, "tests/func/test_get_url.py::test_get_url_config": 0.1669968000001063, "tests/func/test_get_url.py::test_get_url_nonexistent": 0.01504759999977523, "tests/func/test_get_url.py::test_get_url_to_dir[.]": 0.02255650000006426, "tests/func/test_get_url.py::test_get_url_to_dir[dir/subdir]": 0.021038400000179536, "tests/func/test_get_url.py::test_get_url_to_dir[dir]": 0.01743029999988721, "tests/func/test_ignore.py::test_dvcignore_in_out_dir": 0.15225010000006023, "tests/func/test_ignore.py::test_ignore[\\u0442\\u0435\\u0441\\u0442]": 0.14757190000000264, "tests/func/test_ignore.py::test_ignore[ignored]": 0.15114039999991746, "tests/func/test_ignore.py::test_ignore_blank_line": 0.18660330000000158, "tests/func/test_ignore.py::test_ignore_collecting_dvcignores[dir/subdir]": 0.16490030000011302, "tests/func/test_ignore.py::test_ignore_collecting_dvcignores[dir]": 0.14711049999993975, "tests/func/test_ignore.py::test_ignore_directory": 0.1992541000000756, "tests/func/test_ignore.py::test_ignore_external": 0.2136403000000655, "tests/func/test_ignore.py::test_ignore_file_in_parent_path[data_struct0-pattern_list0-result_set0]": 0.1942944999999554, "tests/func/test_ignore.py::test_ignore_file_in_parent_path[data_struct1-pattern_list1-result_set1]": 0.19079089999991083, "tests/func/test_ignore.py::test_ignore_file_in_parent_path[data_struct2-pattern_list2-result_set2]": 0.2009209999999939, "tests/func/test_ignore.py::test_ignore_in_added_dir": 0.3251916000000392, "tests/func/test_ignore.py::test_ignore_on_branch": 0.35599500000000717, "tests/func/test_ignore.py::test_ignore_resurface_subrepo": 0.6824492999999165, "tests/func/test_ignore.py::test_ignore_sub_directory": 0.20163170000012087, "tests/func/test_ignore.py::test_ignored_output": 0.48675440000010894, "tests/func/test_ignore.py::test_ignored_output_nested": 0.4683974000000717, "tests/func/test_ignore.py::test_match_nested": 0.1366146000000299, "tests/func/test_ignore.py::test_multi_ignore_file": 0.18268860000000586, "tests/func/test_ignore.py::test_pattern_trie_fs": 0.16440320000015163, "tests/func/test_ignore.py::test_pull_ignore": 0.7683907000000545, "tests/func/test_ignore.py::test_remove_file": 0.1357917999999927, "tests/func/test_ignore.py::test_remove_ignored_file": 0.1405205000000933, "tests/func/test_ignore.py::test_rename_file": 0.14469229999986055, "tests/func/test_ignore.py::test_rename_ignored_file": 0.14287149999984194, "tests/func/test_ignore.py::test_run_dvcignored_dep": 0.33406170000000657, "tests/func/test_ignore.py::test_walk": 0.16399349999994683, "tests/func/test_import.py::test_cache_type_is_properly_overridden": 0.9056994000000032, "tests/func/test_import.py::test_chained_import": 2.625762800000075, "tests/func/test_import.py::test_granular_import_from_subrepos": 1.4031246000000692, "tests/func/test_import.py::test_import": 0.8625809999999774, "tests/func/test_import.py::test_import_broken_dir": 0.7567731999999978, "tests/func/test_import.py::test_import_cached_file": 1.0863352999999734, "tests/func/test_import.py::test_import_complete_repo": 2.6308554000000868, "tests/func/test_import.py::test_import_configs[options0-def_repo0]": 0.5693571000001612, "tests/func/test_import.py::test_import_configs[options1-def_repo1]": 0.575264099999913, "tests/func/test_import.py::test_import_configs[options2-def_repo2]": 0.5618485999999621, "tests/func/test_import.py::test_import_configs[options3-def_repo3]": 0.5637469000000692, "tests/func/test_import.py::test_import_configs[options4-def_repo4]": 0.7436949999998888, "tests/func/test_import.py::test_import_dir": 0.9349176000000625, "tests/func/test_import.py::test_import_file_from_dir": 2.0776521000001367, "tests/func/test_import.py::test_import_file_from_dir_to_dir": 0.9712954999999965, "tests/func/test_import.py::test_import_from_bare_git_repo": 1.746106199999872, "tests/func/test_import.py::test_import_git_dir[False]": 0.5802926999999727, "tests/func/test_import.py::test_import_git_dir[True]": 0.9223047000000406, "tests/func/test_import.py::test_import_git_file[False]": 0.6169221000001244, "tests/func/test_import.py::test_import_git_file[True]": 0.9858597999998437, "tests/func/test_import.py::test_import_invalid_configs": 0.6348908999999594, "tests/func/test_import.py::test_import_mixed_dir": 1.0006189000000631, "tests/func/test_import.py::test_import_no_download": 0.8493882999999869, "tests/func/test_import.py::test_import_non_cached": 0.8062373000000207, "tests/func/test_import.py::test_import_non_existing": 0.5482246999999916, "tests/func/test_import.py::test_import_pipeline_tracked_outs": 1.8464855999999372, "tests/func/test_import.py::test_import_rev": 0.8083298000000241, "tests/func/test_import.py::test_import_subrepos[files0-False]": 1.3250576000000365, "tests/func/test_import.py::test_import_subrepos[files0-True]": 1.2777296000000433, "tests/func/test_import.py::test_import_subrepos[files1-False]": 1.2118335000001252, "tests/func/test_import.py::test_import_subrepos[files1-True]": 1.265125600000033, "tests/func/test_import.py::test_import_to_dir[.]": 1.1777158999999529, "tests/func/test_import.py::test_import_to_dir[dir/subdir]": 0.8869288999999299, "tests/func/test_import.py::test_import_to_dir[dir]": 0.7965009999999211, "tests/func/test_import.py::test_import_with_jobs": 0.8842647999999826, "tests/func/test_import.py::test_import_with_no_exec": 0.3832912999999962, "tests/func/test_import.py::test_local_import": 1.080212700000061, "tests/func/test_import.py::test_parameterized_repo[paths0]": 1.0523322999999891, "tests/func/test_import.py::test_parameterized_repo[paths1]": 0.9154290000000174, "tests/func/test_import.py::test_pull_import_no_download": 1.3039238999999725, "tests/func/test_import.py::test_pull_import_no_download_rev_lock": 1.1029234000000088, "tests/func/test_import.py::test_pull_imported_directory_stage[dir/]": 1.3592204999997648, "tests/func/test_import.py::test_pull_imported_directory_stage[dir]": 1.130154100000027, "tests/func/test_import.py::test_pull_imported_stage": 1.1966352000000597, "tests/func/test_import.py::test_pull_imported_stage_from_subrepos[files0-False]": 1.331404799999973, "tests/func/test_import.py::test_pull_imported_stage_from_subrepos[files0-True]": 1.6920185000000174, "tests/func/test_import.py::test_pull_imported_stage_from_subrepos[files1-False]": 1.4010470000000623, "tests/func/test_import.py::test_pull_imported_stage_from_subrepos[files1-True]": 1.5626003999999512, "tests/func/test_import.py::test_pull_no_rev_lock": 1.0278057000000445, "tests/func/test_import.py::test_pull_non_workspace": 1.6440565000000333, "tests/func/test_import.py::test_pull_wildcard_imported_directory_stage": 1.1825951000000714, "tests/func/test_import.py::test_push_wildcard_from_bare_git_repo": 1.8283545999998978, "tests/func/test_import.py::test_reimport": 1.1143974999999955, "tests/func/test_import_db.py::test[args0-results-csv]": 0.6439319000000978, "tests/func/test_import_db.py::test[args0-results-json]": 0.4460628000000497, "tests/func/test_import_db.py::test[args1-model-csv]": 0.4647165000001223, "tests/func/test_import_db.py::test[args1-model-json]": 0.46484750000001895, "tests/func/test_import_url.py::TestImport::test_import": 0.28322309999987283, "tests/func/test_import_url.py::TestImport::test_import_dir": 0.3263785999998845, "tests/func/test_import_url.py::TestImport::test_import_empty_dir": 0.2588596000000507, "tests/func/test_import_url.py::test_cmd_import": 0.243037500000014, "tests/func/test_import_url.py::test_cmd_unsupported_scheme": 0.1825516000000107, "tests/func/test_import_url.py::test_default_output": 0.25000760000011724, "tests/func/test_import_url.py::test_import_conflict_and_override": 0.29910240000015165, "tests/func/test_import_url.py::test_import_stage_accompanies_target": 0.7743165999999064, "tests/func/test_import_url.py::test_import_url_fs_config": 0.41629649999993035, "tests/func/test_import_url.py::test_import_url_no_download": 0.4691332999999531, "tests/func/test_import_url.py::test_import_url_nonexistent": 0.3444412999999713, "tests/func/test_import_url.py::test_import_url_preserve_fields": 0.2801150000001371, "tests/func/test_import_url.py::test_import_url_to_dir[.]": 0.3046689000000242, "tests/func/test_import_url.py::test_import_url_to_dir[dir/subdir]": 0.3088328000000047, "tests/func/test_import_url.py::test_import_url_to_dir[dir]": 0.2801137999998673, "tests/func/test_import_url.py::test_import_url_to_remote_absolute": 0.4061252000000195, "tests/func/test_import_url.py::test_import_url_to_remote_invalid_combinations": 0.1392080000000533, "tests/func/test_import_url.py::test_import_url_to_remote_status": 0.523811300000034, "tests/func/test_import_url.py::test_import_url_with_no_exec": 0.3659144999999171, "tests/func/test_import_url.py::test_partial_import_pull": 0.925487999999973, "tests/func/test_import_url.py::test_should_remove_outs_before_import": 0.4517859000000044, "tests/func/test_init.py::test_allow_init_dvc_subdir": 0.36744199999986904, "tests/func/test_init.py::test_api_init": 0.41764749999993, "tests/func/test_init.py::test_cli_init": 0.3148900999998432, "tests/func/test_init.py::test_double_init": 0.8229186999999456, "tests/func/test_init.py::test_gen_dvcignore": 0.25045269999986886, "tests/func/test_init.py::test_init_no_scm_api": 0.2666681000000608, "tests/func/test_init.py::test_init_no_scm_cli": 0.23497389999999996, "tests/func/test_init.py::test_init_no_scm_fail_api": 0.011122799999952804, "tests/func/test_init.py::test_init_no_scm_fail_cli": 0.026207399999975678, "tests/func/test_init.py::test_init_quiet_should_not_display_welcome_screen": 0.31500000000005457, "tests/func/test_init.py::test_init_when_ignored_by_git": 0.03822130000003199, "tests/func/test_init.py::test_subdir_init_no_option": 0.034765399999969304, "tests/func/test_install.py::TestInstall::test_create_hooks": 0.001248400000008587, "tests/func/test_install.py::TestInstall::test_fail_if_hook_exists": 0.0011312999999972817, "tests/func/test_install.py::TestInstall::test_install_pre_commit_tool": 0.0011799000000110027, "tests/func/test_install.py::TestInstall::test_post_checkout": 0.0011200999999800842, "tests/func/test_install.py::TestInstall::test_pre_commit_hook": 0.0011349999999765714, "tests/func/test_install.py::TestInstall::test_pre_push_hook": 0.0011102999999366148, "tests/func/test_install.py::test_merge_driver": 0.0011039000000891974, "tests/func/test_install.py::test_merge_driver_no_ancestor": 0.0011172000000669868, "tests/func/test_lock.py::test_cli": 0.30169069999999465, "tests/func/test_lock.py::test_unlock_lock_failed": 0.19527419999997164, "tests/func/test_lock.py::test_unlock_unlocked_raises": 0.0037138999999797306, "tests/func/test_lock.py::test_with": 0.19908450000014, "tests/func/test_lockfile.py::test_cmd_changes_other_orders_are_preserved": 0.7635403999998971, "tests/func/test_lockfile.py::test_deps_outs_are_sorted_by_path": 0.4513723000000027, "tests/func/test_lockfile.py::test_order_is_preserved_when_pipeline_order_changes": 1.3011747000000469, "tests/func/test_lockfile.py::test_params_dump": 1.2367351999999983, "tests/func/test_ls.py::test_broken_symlink": 0.23077140000009422, "tests/func/test_ls.py::test_ls_broken_dir": 0.8679249000001619, "tests/func/test_ls.py::test_ls_granular": 0.6666682000000037, "tests/func/test_ls.py::test_ls_not_existed_url": 0.04265199999997549, "tests/func/test_ls.py::test_ls_remote_git_only_repo_recursive": 0.44433429999992313, "tests/func/test_ls.py::test_ls_remote_repo": 0.9113675999999487, "tests/func/test_ls.py::test_ls_remote_repo_recursive": 0.8802007000000458, "tests/func/test_ls.py::test_ls_remote_repo_with_path_dir": 1.0943083999999317, "tests/func/test_ls.py::test_ls_remote_repo_with_rev": 0.8788874000000533, "tests/func/test_ls.py::test_ls_remote_repo_with_rev_recursive": 0.9485074999998915, "tests/func/test_ls.py::test_ls_repo": 0.8172812999999906, "tests/func/test_ls.py::test_ls_repo_dvc_only_recursive": 1.0351157000000057, "tests/func/test_ls.py::test_ls_repo_recursive": 0.8275060999998232, "tests/func/test_ls.py::test_ls_repo_with_file_path_fs": 0.8277243999998518, "tests/func/test_ls.py::test_ls_repo_with_missed_path": 0.8948088000001917, "tests/func/test_ls.py::test_ls_repo_with_missed_path_dvc_only": 0.873964800000067, "tests/func/test_ls.py::test_ls_repo_with_new_path_dir": 0.7521163999999771, "tests/func/test_ls.py::test_ls_repo_with_path_dir": 0.8435791999999083, "tests/func/test_ls.py::test_ls_repo_with_path_dir_dvc_only_empty": 1.5219220000000178, "tests/func/test_ls.py::test_ls_repo_with_path_file_out": 0.89468480000005, "tests/func/test_ls.py::test_ls_repo_with_path_subdir": 0.8051321000000371, "tests/func/test_ls.py::test_ls_repo_with_path_subdir_dvc_only": 0.9938705999999229, "tests/func/test_ls.py::test_ls_repo_with_path_subdir_dvc_only_recursive": 0.9960608000000093, "tests/func/test_ls.py::test_ls_repo_with_removed_dvc_dir": 0.849593900000059, "tests/func/test_ls.py::test_ls_repo_with_removed_dvc_dir_recursive": 1.0610984000001054, "tests/func/test_ls.py::test_ls_repo_with_removed_dvc_dir_with_path_dir": 0.8317214999999578, "tests/func/test_ls.py::test_ls_repo_with_removed_dvc_dir_with_path_file": 0.891010499999993, "tests/func/test_ls.py::test_ls_repo_with_rev": 0.8284595999999738, "tests/func/test_ls.py::test_ls_shows_pipeline_tracked_outs": 0.6767601999999897, "tests/func/test_ls.py::test_ls_target[False]": 1.0040828999999576, "tests/func/test_ls.py::test_ls_target[True]": 0.5304179000000886, "tests/func/test_ls.py::test_subrepo[False-git_dir]": 1.3562943999999106, "tests/func/test_ls.py::test_subrepo[True-erepo_dir]": 2.086549600000012, "tests/func/test_ls_url.py::TestLsUrl::test_dir": 0.015517799999884119, "tests/func/test_ls_url.py::TestLsUrl::test_file[dir/foo]": 0.010514699999930599, "tests/func/test_ls_url.py::TestLsUrl::test_file[foo.dvc]": 0.01171199999998862, "tests/func/test_ls_url.py::TestLsUrl::test_file[foo]": 0.012536199999999553, "tests/func/test_ls_url.py::TestLsUrl::test_nonexistent": 0.011345700000106262, "tests/func/test_ls_url.py::TestLsUrl::test_recursive": 0.021404200000006313, "tests/func/test_ls_url.py::test_ls_url_config": 0.2156835000000683, "tests/func/test_merge_driver.py::test_merge[None-None-their6-merged6]": 0.3963009000000284, "tests/func/test_merge_driver.py::test_merge[None-our5-their5-merged5]": 0.5082504000001791, "tests/func/test_merge_driver.py::test_merge[None-our7-None-merged7]": 0.38870360000009896, "tests/func/test_merge_driver.py::test_merge[ancestor0-our0-their0-merged0]": 0.8395247000000836, "tests/func/test_merge_driver.py::test_merge[ancestor1-our1-their1-merged1]": 0.6888646999999537, "tests/func/test_merge_driver.py::test_merge[ancestor10-our10-their10-merged10]": 0.7417891999999711, "tests/func/test_merge_driver.py::test_merge[ancestor2-our2-their2-merged2]": 0.6183836999998675, "tests/func/test_merge_driver.py::test_merge[ancestor3-our3-their3-merged3]": 0.5287539000000834, "tests/func/test_merge_driver.py::test_merge[ancestor4-our4-their4-merged4]": 0.5320171999998138, "tests/func/test_merge_driver.py::test_merge[ancestor8-our8-their8-merged8]": 0.6128427999999531, "tests/func/test_merge_driver.py::test_merge[ancestor9-our9-their9-merged9]": 0.6826347999999598, "tests/func/test_merge_driver.py::test_merge_conflict[ancestor0-our0-their0-unable to auto-merge the following paths:\\nfoo]": 0.4920667000000094, "tests/func/test_merge_driver.py::test_merge_conflict[ancestor1-our1-their1-unable to auto-merge the following paths:\\nboth deleted: ('foo',)]": 0.5235576999998557, "tests/func/test_merge_driver.py::test_merge_different_output_options": 0.23589609999999084, "tests/func/test_merge_driver.py::test_merge_file": 0.20629750000000513, "tests/func/test_merge_driver.py::test_merge_non_dvc_add": 0.2590516000001344, "tests/func/test_move.py::test_cmd_move": 0.4135996999999634, "tests/func/test_move.py::test_move": 0.29322739999986425, "tests/func/test_move.py::test_move_directory": 0.2985218999999688, "tests/func/test_move.py::test_move_directory_should_not_overwrite_existing": 0.4510453000001462, "tests/func/test_move.py::test_move_file_between_directories": 0.41026959999999235, "tests/func/test_move.py::test_move_file_inside_directory": 0.42602529999999206, "tests/func/test_move.py::test_move_file_to_directory": 0.38129300000002786, "tests/func/test_move.py::test_move_file_to_directory_without_specified_target_name": 0.3573622000000114, "tests/func/test_move.py::test_move_file_with_extension": 0.3254477000001543, "tests/func/test_move.py::test_move_gitignored": 0.2915448999998489, "tests/func/test_move.py::test_move_meta": 0.25579289999996035, "tests/func/test_move.py::test_move_non_existent_file": 0.13955350000003364, "tests/func/test_move.py::test_move_not_data_source": 0.42298670000002403, "tests/func/test_move.py::test_move_output_overlap": 0.2740764999999783, "tests/func/test_move.py::test_move_should_save_stage_info": 0.3627708999999868, "tests/func/test_move.py::test_should_move_to_dir_on_non_default_stage_file": 0.2742161000001033, "tests/func/test_odb.py::test_cache": 0.15525479999996605, "tests/func/test_odb.py::test_cache_link_type": 0.27838630000007925, "tests/func/test_odb.py::test_cache_load_bad_dir_cache": 0.14457310000011603, "tests/func/test_odb.py::test_cmd_cache_abs_path": 0.20145130000003064, "tests/func/test_odb.py::test_cmd_cache_dir": 0.17947869999989052, "tests/func/test_odb.py::test_cmd_cache_relative_path": 0.2748297000000548, "tests/func/test_odb.py::test_default_cache_type": 0.13929650000011407, "tests/func/test_odb.py::test_external_cache_dir": 0.31341150000002926, "tests/func/test_odb.py::test_shared_cache[False]": 0.0012287999999216481, "tests/func/test_odb.py::test_shared_cache[True]": 0.0011681999999382242, "tests/func/test_odb.py::test_shared_cache_dir": 0.8903651000000536, "tests/func/test_remote.py::test_dir_hash_should_be_key_order_agnostic": 0.12442099999987022, "tests/func/test_remote.py::test_modify_missing_remote": 0.14263769999990927, "tests/func/test_remote.py::test_partial_push_n_pull": 1.0375717000000577, "tests/func/test_remote.py::test_protect_local_remote": 0.558463000000188, "tests/func/test_remote.py::test_push_incomplete_dir": 0.5540922999999793, "tests/func/test_remote.py::test_push_order": 0.5294410999999855, "tests/func/test_remote.py::test_raise_on_too_many_open_files": 0.34681590000002416, "tests/func/test_remote.py::test_referencing_other_remotes": 0.20356249999997544, "tests/func/test_remote.py::test_remote": 0.2198851000000559, "tests/func/test_remote.py::test_remote_add_relative_path": 0.1899215999999342, "tests/func/test_remote.py::test_remote_default": 0.17432330000008278, "tests/func/test_remote.py::test_remote_default_cmd": 0.22403440000005048, "tests/func/test_remote.py::test_remote_duplicated": 0.16780879999998888, "tests/func/test_remote.py::test_remote_modify_default": 0.16813999999988027, "tests/func/test_remote.py::test_remote_modify_local_on_repo_config": 0.14979379999988396, "tests/func/test_remote.py::test_remote_modify_unset": 0.16284140000004754, "tests/func/test_remote.py::test_remote_modify_validation": 0.1460834000001796, "tests/func/test_remote.py::test_remote_overwrite": 0.19935130000010304, "tests/func/test_remote.py::test_remote_remove": 0.25832579999996597, "tests/func/test_remote.py::test_remote_rename": 0.16758230000004914, "tests/func/test_remote.py::test_remove_default": 0.22759759999996731, "tests/func/test_remote.py::test_show_default": 0.24933369999996557, "tests/func/test_remote.py::test_upper_case_remote": 0.7164872000000742, "tests/func/test_remove.py::test_cmd_remove": 0.4812683999999763, "tests/func/test_remove.py::test_cmd_remove_gitignore_multistage": 1.0105980000000727, "tests/func/test_remove.py::test_cmd_remove_gitignore_single_stage": 0.4817467000000306, "tests/func/test_remove.py::test_remove[False]": 0.8319298999999774, "tests/func/test_remove.py::test_remove[True]": 0.9560232000000042, "tests/func/test_remove.py::test_remove_broken_symlink": 0.2596629000000803, "tests/func/test_remove.py::test_remove_file_target": 0.2195297999999184, "tests/func/test_remove.py::test_remove_non_existent_file": 0.16874089999987518, "tests/func/test_repo.py::test_destroy": 0.9150323999999728, "tests/func/test_repo.py::test_open_bare": 1.818128500000057, "tests/func/test_repo_index.py::test_data_index": 2.5113304999999855, "tests/func/test_repo_index.py::test_deps_outs_getters": 0.6611544999999523, "tests/func/test_repo_index.py::test_ignored_dir_unignored_pattern": 0.3130208000000039, "tests/func/test_repo_index.py::test_index": 0.5706569999999829, "tests/func/test_repo_index.py::test_param_keys_no_params": 0.142780499999958, "tests/func/test_repo_index.py::test_param_keys_returns_default_file": 0.17251450000003388, "tests/func/test_repo_index.py::test_param_keys_top_level_params": 0.1507502999999133, "tests/func/test_repo_index.py::test_repr": 0.4476339000001417, "tests/func/test_repo_index.py::test_skip_graph_checks": 0.1436386999999968, "tests/func/test_repo_index.py::test_update": 0.1739161000000422, "tests/func/test_repo_index.py::test_used_objs": 0.914983799999959, "tests/func/test_repo_index.py::test_view_brancher": 0.4640120999999908, "tests/func/test_repo_index.py::test_view_combined_filter": 0.6019791999999597, "tests/func/test_repo_index.py::test_view_granular_dir": 0.6928808000000117, "tests/func/test_repo_index.py::test_view_onerror": 0.4158800999999812, "tests/func/test_repo_index.py::test_view_outs_filter": 0.7267402999998467, "tests/func/test_repo_index.py::test_view_stage_filter": 0.6276586000000179, "tests/func/test_repo_index.py::test_with_gitignore": 0.32279620000008435, "tests/func/test_root.py::test_root": 0.1449580999999398, "tests/func/test_root.py::test_root_locked": 0.16051739999988968, "tests/func/test_run.py::TestCmdRunWorkingDirectory::test_default_wdir_is_not_written": 0.35049709999998413, "tests/func/test_run.py::TestCmdRunWorkingDirectory::test_fname_changes_path_and_wdir": 0.28195549999998093, "tests/func/test_run.py::TestRunBadWdir::test": 0.18590370000003986, "tests/func/test_run.py::TestRunBadWdir::test_not_dir": 0.17233740000006037, "tests/func/test_run.py::TestRunBadWdir::test_not_found": 0.14417720000017198, "tests/func/test_run.py::TestRunBadWdir::test_same_prefix": 0.15853690000017195, "tests/func/test_run.py::TestRunCircularDependency::test": 0.21522169999991547, "tests/func/test_run.py::TestRunCircularDependency::test_graph": 0.5327369000000317, "tests/func/test_run.py::TestRunCircularDependency::test_non_normalized_paths": 0.19097459999989042, "tests/func/test_run.py::TestRunCircularDependency::test_outs_no_cache": 0.19103880000000117, "tests/func/test_run.py::TestRunDuplicatedArguments::test": 0.16231089999996584, "tests/func/test_run.py::TestRunDuplicatedArguments::test_non_normalized_paths": 0.17710330000011254, "tests/func/test_run.py::TestRunDuplicatedArguments::test_outs_no_cache": 0.16176649999999881, "tests/func/test_run.py::test_always_changed": 0.39973380000003544, "tests/func/test_run.py::test_dump_on_non_cached_outputs": 0.34675960000004125, "tests/func/test_run.py::test_graph": 0.5643173000000843, "tests/func/test_run.py::test_metrics_dir[metrics]": 0.5072695000001204, "tests/func/test_run.py::test_metrics_dir[metrics_no_cache]": 0.4531345999998848, "tests/func/test_run.py::test_rerun_callback": 0.22751670000002377, "tests/func/test_run.py::test_rerun_changed_dep": 0.5991066000000274, "tests/func/test_run.py::test_rerun_changed_out": 0.3850783999999976, "tests/func/test_run.py::test_rerun_changed_stage": 0.3589001999999937, "tests/func/test_run.py::test_rerun_deterministic": 0.6178350000001274, "tests/func/test_run.py::test_rerun_deterministic_ignore_cache": 0.5254332999998041, "tests/func/test_run.py::test_run": 0.44643459999997503, "tests/func/test_run.py::test_run_already_exists": 0.6263374000000113, "tests/func/test_run.py::test_run_cached": 0.6409001000001808, "tests/func/test_run.py::test_run_dump": 0.5559751000000688, "tests/func/test_run.py::test_run_empty": 0.17519049999998515, "tests/func/test_run.py::test_run_external_outputs": 0.2546858999999131, "tests/func/test_run.py::test_run_missing_dep": 0.16516739999997299, "tests/func/test_run.py::test_run_no_exec": 0.3877132999998594, "tests/func/test_run.py::test_run_overwrite_order": 0.8002424999999675, "tests/func/test_run.py::test_run_overwrite_preserves_meta_and_comment": 0.5934765999999172, "tests/func/test_run.py::test_run_params_custom_file": 0.23986200000001645, "tests/func/test_run.py::test_run_params_default": 0.2401186999999254, "tests/func/test_run.py::test_run_params_no_exec": 0.17146010000010392, "tests/func/test_run.py::test_run_remove_outs": 0.3511172999999417, "tests/func/test_run.py::test_run_repeat": 0.8495632000001478, "tests/func/test_run.py::test_run_with_invalid_stage_name[#]": 0.15131850000000213, "tests/func/test_run.py::test_run_with_invalid_stage_name[$]": 0.18822580000005473, "tests/func/test_run.py::test_run_with_invalid_stage_name[,]": 0.18252570000004198, "tests/func/test_run.py::test_run_with_invalid_stage_name[.]": 0.19337220000011257, "tests/func/test_run.py::test_run_with_invalid_stage_name[/]": 0.14692950000005567, "tests/func/test_run.py::test_run_with_invalid_stage_name[:]": 0.16086330000007365, "tests/func/test_run.py::test_run_with_invalid_stage_name[;]": 0.2369408999999223, "tests/func/test_run.py::test_run_with_invalid_stage_name[@:]": 0.15973589999998694, "tests/func/test_run.py::test_run_with_invalid_stage_name[\\\\]": 0.16169760000002498, "tests/func/test_run.py::test_run_with_name_having_hyphen_underscore": 0.47360779999996794, "tests/func/test_run.py::test_run_without_cmd[kwargs0]": 0.19577829999991536, "tests/func/test_run.py::test_run_without_cmd[kwargs1]": 0.1459709999999177, "tests/func/test_run.py::test_should_not_checkout_upon_corrupted_local_hardlink_cache": 0.4960602999999537, "tests/func/test_run.py::test_should_raise_on_overlapping_output_paths": 0.2538355000000365, "tests/func/test_run.py::test_with_wdir": 0.3469372999999223, "tests/func/test_run_cache.py::test_do_not_save_on_no_exec_and_dry": 0.2275765000000547, "tests/func/test_run_cache.py::test_memory_for_multiple_runs_of_same_stage": 0.8523804000000155, "tests/func/test_run_cache.py::test_memory_runs_of_multiple_stages": 0.8905641000001197, "tests/func/test_run_cache.py::test_newest_entry_is_loaded_for_non_deterministic_stage": 1.1082949999999983, "tests/func/test_run_cache.py::test_outs_no_cache_deactivate_run_cache[metrics_no_cache-True]": 0.4292524999999614, "tests/func/test_run_cache.py::test_outs_no_cache_deactivate_run_cache[outs_no_cache-False]": 0.3989267999999129, "tests/func/test_run_cache.py::test_outs_no_cache_deactivate_run_cache[plots_no_cache-True]": 0.4542271999998775, "tests/func/test_run_cache.py::test_push_pull": 0.8825567999999748, "tests/func/test_run_cache.py::test_push_pull_unsupported": 0.6354907000001049, "tests/func/test_run_cache.py::test_restore": 0.47588069999994786, "tests/func/test_run_cache.py::test_restore_pull": 0.7859493000000839, "tests/func/test_run_cache.py::test_save": 0.37583450000011, "tests/func/test_scm.py::test_init_git": 0.09183709999990697, "tests/func/test_scm.py::test_init_no_git": 0.018588600000043698, "tests/func/test_scm.py::test_init_none": 0.013314399999899251, "tests/func/test_scm.py::test_init_sub_dir": 0.10799759999997605, "tests/func/test_scm.py::test_lfs_prefetch": 0.3691949999998769, "tests/func/test_scm_context.py::test_scm_context_autostage": 0.30232489999991685, "tests/func/test_scm_context.py::test_scm_context_ignore": 0.27744780000011815, "tests/func/test_scm_context.py::test_scm_context_ignore_remove": 0.19912219999991976, "tests/func/test_scm_context.py::test_scm_context_no_track_on_ignore_remove": 0.19690459999992527, "tests/func/test_scm_context.py::test_scm_context_try_ignore_remove_non_existing_entry": 0.20904159999997773, "tests/func/test_scm_context.py::test_scm_context_when_already_ignored": 0.254342500000007, "tests/func/test_stage.py::test_cmd_obj": 0.005093600000009246, "tests/func/test_stage.py::test_collect_symlink[False]": 0.27943709999988187, "tests/func/test_stage.py::test_collect_symlink[True]": 0.22402759999999944, "tests/func/test_stage.py::test_default_wdir_ignored_in_checksum": 0.3386774000000514, "tests/func/test_stage.py::test_empty_list": 0.003349600000092323, "tests/func/test_stage.py::test_external_remote_dependency_resolution": 0.24288849999993545, "tests/func/test_stage.py::test_external_remote_output_resolution": 0.22982309999997597, "tests/func/test_stage.py::test_list": 0.0035652999999911117, "tests/func/test_stage.py::test_md5_ignores_annotations": 0.14674890000014784, "tests/func/test_stage.py::test_md5_ignores_comments": 0.2633077999998932, "tests/func/test_stage.py::test_meta_desc_is_preserved": 0.1833113999998659, "tests/func/test_stage.py::test_no_cmd": 0.003441100000031838, "tests/func/test_stage.py::test_none": 0.003471899999794914, "tests/func/test_stage.py::test_object": 0.0035700000000815635, "tests/func/test_stage.py::test_parent_repo_collect_stages": 0.9687402000001839, "tests/func/test_stage.py::test_reload": 0.22573539999996228, "tests/func/test_stage.py::test_stage_add_duplicated_output": 0.31772509999996146, "tests/func/test_stage.py::test_stage_on_no_path_string_repr": 0.19597939999994196, "tests/func/test_stage.py::test_stage_remove_pipeline_stage": 0.6968345000000227, "tests/func/test_stage.py::test_stage_remove_pointer_stage": 0.29759790000002795, "tests/func/test_stage.py::test_stage_strings_representation": 0.4293736000000763, "tests/func/test_stage_load.py::test_collect": 1.5442301999999017, "tests/func/test_stage_load.py::test_collect_dir_recursive": 0.5649249000000509, "tests/func/test_stage_load.py::test_collect_generated": 0.24801749999994627, "tests/func/test_stage_load.py::test_collect_glob": 0.9323076999999103, "tests/func/test_stage_load.py::test_collect_granular_collision_output_dir_stage_name": 0.4615868999999293, "tests/func/test_stage_load.py::test_collect_granular_not_existing_stage_name": 0.5574206000001141, "tests/func/test_stage_load.py::test_collect_granular_priority_on_collision": 0.43749460000003637, "tests/func/test_stage_load.py::test_collect_granular_same_output_name_stage_name": 0.4683784999999716, "tests/func/test_stage_load.py::test_collect_granular_with_deps": 0.9040660999999091, "tests/func/test_stage_load.py::test_collect_granular_with_no_target": 0.8537042000000383, "tests/func/test_stage_load.py::test_collect_granular_with_not_existing_output_or_stage_name": 0.12876589999984844, "tests/func/test_stage_load.py::test_collect_granular_with_target": 0.9354548000000023, "tests/func/test_stage_load.py::test_collect_not_a_group_stage_with_group_flag": 1.090573000000063, "tests/func/test_stage_load.py::test_collect_optimization": 0.21226439999998092, "tests/func/test_stage_load.py::test_collect_optimization_on_stage_name": 0.43537639999988187, "tests/func/test_stage_load.py::test_collect_repo_callback": 0.24589080000009744, "tests/func/test_stage_load.py::test_collect_with_not_existing_dvcfile[not_existing.dvc:stage_name]": 0.13259750000008808, "tests/func/test_stage_load.py::test_collect_with_not_existing_dvcfile[not_existing.dvc]": 0.13957369999991442, "tests/func/test_stage_load.py::test_collect_with_not_existing_dvcfile[not_existing/dvc.yaml:stage_name]": 0.1478920999999218, "tests/func/test_stage_load.py::test_collect_with_not_existing_dvcfile[not_existing/dvc.yaml]": 0.12979939999991075, "tests/func/test_stage_load.py::test_collect_with_not_existing_output_or_stage_name": 0.4114243000000215, "tests/func/test_stage_load.py::test_get_stage": 0.34875819999990654, "tests/func/test_stage_load.py::test_get_stage_single_stage_dvcfile": 0.2461819000000105, "tests/func/test_stage_load.py::test_get_stages": 0.6215028000000302, "tests/func/test_stage_load.py::test_get_stages_old_dvcfile": 0.21525209999992967, "tests/func/test_stage_load.py::test_gitignored_file_try_collect_granular_for_data_files": 0.31906579999997575, "tests/func/test_stage_load.py::test_gitignored_file_try_collect_granular_for_dvc_yaml_files": 1.5553847999999562, "tests/func/test_stage_load.py::test_stages": 0.414835900000071, "tests/func/test_state.py::test_get_unused_links": 0.29348780000009356, "tests/func/test_state.py::test_remove_links": 0.35063050000007934, "tests/func/test_state.py::test_state": 0.34103749999985666, "tests/func/test_state.py::test_state_overflow": 0.44685179999999036, "tests/func/test_status.py::test_implied_cloud": 1.3159074000000146, "tests/func/test_status.py::test_params_without_targets": 0.2553169999999909, "tests/func/test_status.py::test_quiet": 0.3903937000000042, "tests/func/test_status.py::test_status_before_and_after_dvc_init": 1.24051709999992, "tests/func/test_status.py::test_status_non_dvc_repo_import[False]": 0.5673391999998785, "tests/func/test_status.py::test_status_non_dvc_repo_import[True]": 0.6612268000000086, "tests/func/test_status.py::test_status_on_pipeline_stages": 0.551217299999962, "tests/func/test_status.py::test_status_outputs": 0.5847573000000921, "tests/func/test_status.py::test_status_recursive": 0.2683987000000343, "tests/func/test_unprotect.py::test_unprotect": 0.24031379999996716, "tests/func/test_update.py::test_update_before_and_after_dvc_init": 1.652384100000063, "tests/func/test_update.py::test_update_from_subrepos[False]": 1.5830997999999, "tests/func/test_update.py::test_update_from_subrepos[True]": 2.272872600000028, "tests/func/test_update.py::test_update_import[False]": 1.8188473000001295, "tests/func/test_update.py::test_update_import[True]": 2.7979914999999664, "tests/func/test_update.py::test_update_import_after_remote_updates_to_dvc": 1.569626900000003, "tests/func/test_update.py::test_update_import_to_remote": 0.7015065000000504, "tests/func/test_update.py::test_update_import_url": 0.39181920000009995, "tests/func/test_update.py::test_update_import_url_no_download[False]": 0.28972529999987273, "tests/func/test_update.py::test_update_import_url_no_download[True]": 0.36471770000002834, "tests/func/test_update.py::test_update_import_url_to_remote": 0.6202769999998736, "tests/func/test_update.py::test_update_import_url_to_remote_directory": 0.7887408000001415, "tests/func/test_update.py::test_update_import_url_to_remote_directory_changed_contents": 0.7646365000000515, "tests/func/test_update.py::test_update_import_url_to_remote_directory_same_hash": 0.7358169999998836, "tests/func/test_update.py::test_update_import_url_unchanged": 0.32728270000006887, "tests/func/test_update.py::test_update_no_download[False]": 1.2106467999999495, "tests/func/test_update.py::test_update_no_download[True]": 1.3192696999999498, "tests/func/test_update.py::test_update_recursive": 1.6255898999997953, "tests/func/test_update.py::test_update_rev": 1.0238027999998849, "tests/func/test_update.py::test_update_unchanged": 1.2584471000000121, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[.-.-dvc.yaml:train]": 0.43971429999999145, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[.-.-foo]": 0.40643180000006396, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[.-.-train]": 0.4276787000000013, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[.-sub-..\\\\dvc.yaml:train]": 0.42697390000000723, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[.-sub-..\\\\foo]": 0.4174022000000832, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-.-sub\\\\dvc.yaml:train]": 0.5342236999999841, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-.-sub\\\\foo]": 0.5391186000001653, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-dir-..\\\\sub\\\\dvc.yaml:train]": 0.44631729999991876, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-dir-..\\\\sub\\\\foo]": 0.40331539999999677, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-sub-dvc.yaml:train]": 0.4777887999999848, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-sub-foo]": 0.4485227999998642, "tests/func/test_used_objs.py::test_from_gitfs_when_pwd_not_in_root[sub-sub-train]": 0.4451402000000826, "tests/func/test_used_objs.py::test_used_objs_push": 0.3140799999999899, "tests/func/test_utils.py::test_boxify": 0.0037649999999302963, "tests/func/test_utils.py::test_dict_md5": 0.003655699999853823, "tests/func/test_utils.py::test_glob_no_match": 0.004886600000077124, "tests/func/test_version.py::test_": 1.3859016000001247, "tests/func/test_version.py::test_import_error": 0.365707499999985, "tests/func/test_virtual_directory.py::test_partial_checkout_and_update": 1.4939856999999392, "tests/func/test_virtual_directory.py::test_virtual_add": 0.9724830999999767, "tests/func/test_virtual_directory.py::test_virtual_remove": 0.9881833000000597, "tests/func/test_virtual_directory.py::test_virtual_update_dir": 0.8301616999998487, "tests/func/test_virtual_directory.py::test_virtual_update_file": 0.7492493000000877, "tests/func/test_virtual_directory.py::test_virtual_update_noop": 0.902233600000045, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides0-expected0-json]": 0.016757900000129666, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides0-expected0-toml]": 0.013149600000019745, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides0-expected0-yaml]": 0.026289499999961663, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides1-expected1-json]": 0.01717210000003888, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides1-expected1-toml]": 0.01372639999999592, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides1-expected1-yaml]": 0.023308899999960886, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides10-expected10-json]": 0.021389800000065406, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides10-expected10-toml]": 0.021289899999942463, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides10-expected10-yaml]": 0.029417499999908614, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides11-expected11-json]": 0.016622700000084478, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides11-expected11-toml]": 0.025770200000124532, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides11-expected11-yaml]": 0.03114780000009887, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides2-expected2-json]": 0.014930700000149955, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides2-expected2-toml]": 0.011712699999975484, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides2-expected2-yaml]": 0.023883599999976468, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides3-expected3-json]": 0.021143299999948795, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides3-expected3-toml]": 0.019983099999990372, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides3-expected3-yaml]": 0.024119600000062746, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides4-expected4-json]": 0.016237299999829702, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides4-expected4-toml]": 0.03111649999993915, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides4-expected4-yaml]": 0.02495239999984733, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides5-expected5-json]": 0.020187100000043756, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides5-expected5-toml]": 0.019237699999962388, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides5-expected5-yaml]": 0.032607999999981985, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides6-expected6-json]": 0.016924699999890436, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides6-expected6-toml]": 0.04386929999986933, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides6-expected6-yaml]": 0.024652899999978217, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides7-expected7-json]": 0.015520899999955873, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides7-expected7-toml]": 0.012692199999946752, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides7-expected7-yaml]": 0.030214099999966493, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides8-expected8-json]": 0.021859500000005028, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides8-expected8-toml]": 0.020292899999958536, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides8-expected8-yaml]": 0.033927000000062435, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides9-expected9-json]": 0.016962000000035005, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides9-expected9-toml]": 0.02381449999995766, "tests/func/utils/test_hydra.py::test_apply_overrides[overrides9-expected9-yaml]": 0.025491699999975026, "tests/func/utils/test_hydra.py::test_compose_and_dump_dir_module[None-None-None-error_context3]": 0.013406300000042393, "tests/func/utils/test_hydra.py::test_compose_and_dump_dir_module[None-hydra.test_utils.configs-config_content1-error_context1]": 0.1134221999999454, "tests/func/utils/test_hydra.py::test_compose_and_dump_dir_module[conf-None-config_content0-error_context0]": 0.11507209999990664, "tests/func/utils/test_hydra.py::test_compose_and_dump_dir_module[conf-hydra.test_utils.configs-config_content2-error_context2]": 0.11261070000000473, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides0-expected0-json]": 0.1281308000000081, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides0-expected0-toml]": 0.1236941999999317, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides0-expected0-yaml]": 0.12669659999994565, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides1-expected1-json]": 0.12357580000002599, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides1-expected1-toml]": 0.17739260000007562, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides1-expected1-yaml]": 0.12748369999997067, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides2-expected2-json]": 0.1338885999999775, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides2-expected2-toml]": 0.1365699999998924, "tests/func/utils/test_hydra.py::test_compose_and_dump_overrides[overrides2-expected2-yaml]": 0.1324849999999742, "tests/func/utils/test_hydra.py::test_compose_and_dump_plugins": 0.13925589999996646, "tests/func/utils/test_hydra.py::test_compose_and_dump_resolves_interpolation": 0.1168084999999337, "tests/func/utils/test_hydra.py::test_compose_and_dump_yaml_handles_string": 0.10991609999996399, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides0-expected0]": 0.006874799999877723, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides1-expected1]": 0.006828100000120685, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides2-expected2]": 0.005153599999971448, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides3-expected3]": 0.010010100000044986, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides4-expected4]": 0.005206800000109979, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides5-expected5]": 0.005195799999910378, "tests/func/utils/test_hydra.py::test_hydra_sweeps[overrides6-expected6]": 0.0055651999999781765, "tests/func/utils/test_hydra.py::test_invalid_overrides[overrides0]": 0.025969000000031883, "tests/func/utils/test_hydra.py::test_invalid_overrides[overrides1]": 0.026963600000044607, "tests/func/utils/test_hydra.py::test_invalid_overrides[overrides2]": 0.02018349999991642, "tests/func/utils/test_hydra.py::test_invalid_overrides[overrides3]": 0.021663399999965804, "tests/func/utils/test_hydra.py::test_invalid_sweep": 0.00546810000014375, "tests/func/utils/test_strict_yaml.py::test_exceptions[additional_key_on_outs]": 0.243435399999953, "tests/func/utils/test_strict_yaml.py::test_exceptions[deps_as_dict]": 0.2002921000000697, "tests/func/utils/test_strict_yaml.py::test_exceptions[duplicate_keys]": 0.2018291000000545, "tests/func/utils/test_strict_yaml.py::test_exceptions[empty_stage]": 0.19218150000006062, "tests/func/utils/test_strict_yaml.py::test_exceptions[foreach_do_do_null]": 0.1954337999999325, "tests/func/utils/test_strict_yaml.py::test_exceptions[foreach_do_missing_cmd]": 0.2215969999999743, "tests/func/utils/test_strict_yaml.py::test_exceptions[foreach_scalar]": 0.2090827999999192, "tests/func/utils/test_strict_yaml.py::test_exceptions[foreach_unknown_cmd_missing_do]": 0.19983810000007907, "tests/func/utils/test_strict_yaml.py::test_exceptions[mapping_values_not_allowed]": 0.21080290000008972, "tests/func/utils/test_strict_yaml.py::test_exceptions[merge_conflicts]": 0.18337130000008983, "tests/func/utils/test_strict_yaml.py::test_exceptions[missing_cmd]": 0.19634989999997288, "tests/func/utils/test_strict_yaml.py::test_exceptions[no_hyphen_block]": 0.19842909999999847, "tests/func/utils/test_strict_yaml.py::test_exceptions[not_a_dict]": 0.18917439999995622, "tests/func/utils/test_strict_yaml.py::test_exceptions[null_value_on_outs]": 0.19282620000001316, "tests/func/utils/test_strict_yaml.py::test_exceptions[outs_as_str]": 0.17304079999996702, "tests/func/utils/test_strict_yaml.py::test_exceptions[unclosed_scalar]": 0.19768529999998918, "tests/func/utils/test_strict_yaml.py::test_fallback_exception_message": 0.26093439999988277, "tests/func/utils/test_strict_yaml.py::test_make_relpath": 0.014381800000023759, "tests/func/utils/test_strict_yaml.py::test_on_revision[stages:\\n stage1:\\n cmd: python train.py\\n cmd: python train.py\\n-'./dvc.yaml' is invalid in revision '{short_rev}'.]": 0.5581684999998515, "tests/func/utils/test_strict_yaml.py::test_on_revision[stages:\\n stage1:\\n cmd: {}\\n-'./dvc.yaml' validation failed in revision '{short_rev}'.]": 0.5184321000000409, "tests/integration/plots/test_plots.py::test_config_output_dir": 0.29116190000002007, "tests/integration/plots/test_plots.py::test_nested_x_defn_collection": 0.5174432999999681, "tests/integration/plots/test_plots.py::test_no_plots": 0.2940975999999864, "tests/integration/plots/test_plots.py::test_plots_empty_directory": 0.5595962999999529, "tests/integration/plots/test_plots.py::test_repo_with_config_plots": 2.7835139000000026, "tests/integration/plots/test_plots.py::test_repo_with_dvclive_plots": 0.7092543999999634, "tests/integration/plots/test_plots.py::test_repo_with_plots": 3.33253650000006, "tests/integration/plots/test_plots.py::test_repo_with_removed_plots": 1.9890381000001298, "tests/integration/plots/test_repo_plots_api.py::test_api": 2.918742299999849, "tests/integration/plots/test_repo_plots_api.py::test_api_with_config_plots": 2.3034652999999707, "tests/integration/test_studio_live_experiments.py::test_monorepo_relpath": 0.849361300000055, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[DVC_EXP_GIT_REMOTE-False-False]": 1.1246794999999565, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[DVC_EXP_GIT_REMOTE-False-True]": 1.7383136000000832, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[DVC_EXP_GIT_REMOTE-True-False]": 1.0295220999998946, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[DVC_EXP_GIT_REMOTE-True-True]": 1.9327763000001141, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[None-False-False]": 1.1464447999999265, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[None-False-True]": 1.6287972000000082, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[None-True-False]": 1.0905978000000687, "tests/integration/test_studio_live_experiments.py::test_post_to_studio[None-True-True]": 1.934522399999878, "tests/integration/test_studio_live_experiments.py::test_post_to_studio_subdir[False]": 1.410834799999975, "tests/integration/test_studio_live_experiments.py::test_post_to_studio_subdir[True]": 1.9778683000000683, "tests/integration/test_studio_live_experiments.py::test_virtual_monorepo_relpath": 0.9138851999998678, "tests/unit/cli/test_main.py::test_ignore_in_collected_dir_error_is_logged": 0.017126100000041333, "tests/unit/cli/test_main.py::test_remote_missing_deps_are_correctly_reported[None-Please report this bug to]": 0.014922700000056466, "tests/unit/cli/test_main.py::test_remote_missing_deps_are_correctly_reported[conda-conda install -c conda-forge dvc-proto]": 0.015353699999991477, "tests/unit/cli/test_main.py::test_remote_missing_deps_are_correctly_reported[pip-pip install 'dvc[proto]']": 0.013537000000042099, "tests/unit/cli/test_main.py::test_state_pickle_errors_are_correctly_raised": 0.0165122999999312, "tests/unit/command/ls/test_ls.py::test_list": 0.006342400000107773, "tests/unit/command/ls/test_ls.py::test_list_alias": 0.0035484999999653155, "tests/unit/command/ls/test_ls.py::test_list_config": 0.005209800000216092, "tests/unit/command/ls/test_ls.py::test_list_git_ssh_rev": 0.00511940000001232, "tests/unit/command/ls/test_ls.py::test_list_outputs_only": 0.006585399999949004, "tests/unit/command/ls/test_ls.py::test_list_recursive": 0.005100900000002184, "tests/unit/command/ls/test_ls.py::test_list_targets": 0.005044999999995525, "tests/unit/command/ls/test_ls.py::test_show_colors": 0.004921199999898818, "tests/unit/command/ls/test_ls.py::test_show_json": 0.004522199999883014, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_dir": 0.003349100000036742, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_exec": 0.003280899999936082, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_ext": 0.003362700000025143, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_file": 0.003305399999931069, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_out_dir": 0.003481700000065757, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_out_exec": 0.0033405999998876723, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_out_ext": 0.0033998999998630097, "tests/unit/command/ls/test_ls_colors.py::test_ls_colors_out_file": 0.0033174999999801003, "tests/unit/command/ls/test_ls_colors.py::test_ls_repo_with_custom_color_env_defined": 0.0035155000001623193, "tests/unit/command/test_add.py::test_add": 0.20737009999982092, "tests/unit/command/test_add.py::test_add_to_cache_invalid_combinations": 0.2307676000000356, "tests/unit/command/test_add.py::test_add_to_remote": 0.23873700000001463, "tests/unit/command/test_add.py::test_add_to_remote_invalid_combinations": 0.21601970000006077, "tests/unit/command/test_cache.py::test_cache_dir_local": 0.16169510000008813, "tests/unit/command/test_checkout.py::test_checkout": 0.2004144999999653, "tests/unit/command/test_checkout.py::test_log_changes": 0.007630400000039117, "tests/unit/command/test_compat_flag.py::test_backward_compat_flags[exp-list-name_only]": 0.0038943000000699612, "tests/unit/command/test_compat_flag.py::test_backward_compat_flags[stage-list-name_only]": 0.0037500000000818545, "tests/unit/command/test_completion.py::test_completion[bash]": 0.01732660000004671, "tests/unit/command/test_completion.py::test_completion[zsh]": 0.04076810000003661, "tests/unit/command/test_config.py::test_config_bad_name[no_option]": 0.0055750999999872874, "tests/unit/command/test_config.py::test_config_bad_name[remote.way.too.long]": 0.004850099999998747, "tests/unit/command/test_config.py::test_config_bad_name[way.too.long]": 0.005234700000073644, "tests/unit/command/test_config.py::test_config_formatter": 0.0034963999999035877, "tests/unit/command/test_dag.py::test_build": 0.41772169999990183, "tests/unit/command/test_dag.py::test_build_full": 0.43086940000011964, "tests/unit/command/test_dag.py::test_build_full_outs[False]": 0.4505840999999009, "tests/unit/command/test_dag.py::test_build_full_outs[True]": 0.4292612999998937, "tests/unit/command/test_dag.py::test_build_granular_target_with_outs": 0.4434605000001284, "tests/unit/command/test_dag.py::test_build_target": 0.4442584999999326, "tests/unit/command/test_dag.py::test_build_target_with_outs": 0.4607635999998365, "tests/unit/command/test_dag.py::test_dag[--dot-_show_dot]": 0.2584747000000789, "tests/unit/command/test_dag.py::test_dag[--md-_show_mermaid]": 0.2575375000001259, "tests/unit/command/test_dag.py::test_dag[--mermaid-_show_mermaid]": 0.2538787000000866, "tests/unit/command/test_dag.py::test_dag[None-_show_ascii]": 0.2701758000000609, "tests/unit/command/test_dag.py::test_show_ascii": 0.47154680000005555, "tests/unit/command/test_dag.py::test_show_dot": 0.49623429999996915, "tests/unit/command/test_dag.py::test_show_dot_properly_escapes": 0.005304700000010598, "tests/unit/command/test_dag.py::test_show_mermaid": 0.506922099999997, "tests/unit/command/test_dag.py::test_show_mermaid_markdown": 0.46951670000021295, "tests/unit/command/test_data_status.py::test_cli": 0.15436669999996866, "tests/unit/command/test_data_status.py::test_empty_scm_repo": 0.44124859999988075, "tests/unit/command/test_data_status.py::test_json[args0-to_omit0]": 0.19605909999984306, "tests/unit/command/test_data_status.py::test_json[args1-to_omit1]": 0.18398960000013176, "tests/unit/command/test_data_status.py::test_json[args2-to_omit2]": 0.205250799999817, "tests/unit/command/test_data_status.py::test_no_changes_repo": 0.30644970000003013, "tests/unit/command/test_data_status.py::test_show_status[False-args0]": 0.2457772999999861, "tests/unit/command/test_data_status.py::test_show_status[False-args1]": 0.26650870000003124, "tests/unit/command/test_data_status.py::test_show_status[False-args2]": 0.2271581000001106, "tests/unit/command/test_data_status.py::test_show_status[True-args0]": 0.27466419999996106, "tests/unit/command/test_data_status.py::test_show_status[True-args1]": 0.2749612000001207, "tests/unit/command/test_data_status.py::test_show_status[True-args2]": 0.25732209999978295, "tests/unit/command/test_data_sync.py::test_fetch": 0.17609809999987647, "tests/unit/command/test_data_sync.py::test_pull": 0.17549940000003517, "tests/unit/command/test_data_sync.py::test_push": 0.16576090000000931, "tests/unit/command/test_dataset.py::test_add[spec0-lock0-Adding ds (url:/path @ main)\\n]": 0.22054290000005494, "tests/unit/command/test_dataset.py::test_add[spec1-lock1-Adding mydataset (dc://dataset @ v1)\\n]": 0.22979979999990974, "tests/unit/command/test_dataset.py::test_add[spec2-lock2-Adding mydataset (s3://bucket/path)\\n]": 0.20264819999988504, "tests/unit/command/test_dataset.py::test_add_already_exists": 0.2456899000001158, "tests/unit/command/test_dataset.py::test_update[spec0-old_lock0-new_lock0-expected_outputs0-missing]": 0.2354315999998562, "tests/unit/command/test_dataset.py::test_update[spec0-old_lock0-new_lock0-expected_outputs0-unchanged]": 0.23527079999996658, "tests/unit/command/test_dataset.py::test_update[spec0-old_lock0-new_lock0-expected_outputs0-updated]": 0.21899649999988924, "tests/unit/command/test_dataset.py::test_update[spec1-old_lock1-new_lock1-expected_outputs1-missing]": 0.18976390000011634, "tests/unit/command/test_dataset.py::test_update[spec1-old_lock1-new_lock1-expected_outputs1-unchanged]": 0.18847329999994145, "tests/unit/command/test_dataset.py::test_update[spec1-old_lock1-new_lock1-expected_outputs1-updated]": 0.17528420000007827, "tests/unit/command/test_dataset.py::test_update[spec2-old_lock2-new_lock2-expected_outputs2-missing]": 0.1846043999998983, "tests/unit/command/test_dataset.py::test_update[spec2-old_lock2-new_lock2-expected_outputs2-unchanged]": 0.2048106000000871, "tests/unit/command/test_dataset.py::test_update[spec2-old_lock2-new_lock2-expected_outputs2-updated]": 0.18596199999990404, "tests/unit/command/test_dataset.py::test_update[spec3-old_lock3-new_lock3-expected_outputs3-missing]": 0.17655880000006619, "tests/unit/command/test_dataset.py::test_update[spec3-old_lock3-new_lock3-expected_outputs3-unchanged]": 0.30956070000002, "tests/unit/command/test_dataset.py::test_update[spec3-old_lock3-new_lock3-expected_outputs3-updated]": 0.17832229999987703, "tests/unit/command/test_diff.py::test_default": 0.157224000000042, "tests/unit/command/test_diff.py::test_diff_show_markdown_and_hash[False]": 0.16265659999999116, "tests/unit/command/test_diff.py::test_diff_show_markdown_and_hash[None]": 0.21256189999996877, "tests/unit/command/test_diff.py::test_diff_show_markdown_and_hash[True]": 0.15831829999990532, "tests/unit/command/test_diff.py::test_digest[dict]": 0.0036724000000276646, "tests/unit/command/test_diff.py::test_digest[str]": 0.0036453000000165048, "tests/unit/command/test_diff.py::test_hide_missing": 0.2271087000000307, "tests/unit/command/test_diff.py::test_no_changes[show0--opts0]": 0.20476959999996325, "tests/unit/command/test_diff.py::test_no_changes[show0--opts1]": 0.1829457999999704, "tests/unit/command/test_diff.py::test_no_changes[show0--opts2]": 0.15757240000004913, "tests/unit/command/test_diff.py::test_no_changes[show0--opts3]": 0.21165159999998195, "tests/unit/command/test_diff.py::test_no_changes[show1-{}-opts0]": 0.17485999999996693, "tests/unit/command/test_diff.py::test_no_changes[show1-{}-opts1]": 0.16453910000007, "tests/unit/command/test_diff.py::test_no_changes[show1-{}-opts2]": 0.2937568000000965, "tests/unit/command/test_diff.py::test_no_changes[show1-{}-opts3]": 0.20795019999991382, "tests/unit/command/test_diff.py::test_no_changes[show2-| Status | Path |\\n|----------|--------|-opts0]": 0.2065845999998146, "tests/unit/command/test_diff.py::test_no_changes[show2-| Status | Path |\\n|----------|--------|-opts1]": 0.26602109999987533, "tests/unit/command/test_diff.py::test_no_changes[show2-| Status | Path |\\n|----------|--------|-opts2]": 0.1966783000000305, "tests/unit/command/test_diff.py::test_no_changes[show2-| Status | Path |\\n|----------|--------|-opts3]": 0.2248160999997708, "tests/unit/command/test_diff.py::test_show_hash": 0.18903350000005048, "tests/unit/command/test_diff.py::test_show_json": 0.1852141000000529, "tests/unit/command/test_diff.py::test_show_json_and_hash": 0.16317690000005314, "tests/unit/command/test_diff.py::test_show_json_hide_missing": 0.1684483999999884, "tests/unit/command/test_diff.py::test_show_markdown": 0.004335099999934755, "tests/unit/command/test_diff.py::test_show_markdown_hide_missing": 0.004313600000045881, "tests/unit/command/test_diff.py::test_show_markdown_with_hash": 0.004763400000115325, "tests/unit/command/test_du.py::test_du": 0.004861399999867899, "tests/unit/command/test_experiments.py::test_experiments_apply": 0.2363333999999213, "tests/unit/command/test_experiments.py::test_experiments_branch": 0.2514846999999918, "tests/unit/command/test_experiments.py::test_experiments_clean": 0.21406049999995957, "tests/unit/command/test_experiments.py::test_experiments_diff": 0.2540403000000424, "tests/unit/command/test_experiments.py::test_experiments_diff_revs": 0.194408400000043, "tests/unit/command/test_experiments.py::test_experiments_list": 0.2429000999999289, "tests/unit/command/test_experiments.py::test_experiments_list_format[args0-master:\\n\\tsha-a [exp-a]\\n]": 0.2363052000001744, "tests/unit/command/test_experiments.py::test_experiments_list_format[args1-exp-a\\n]": 0.23047929999984262, "tests/unit/command/test_experiments.py::test_experiments_list_format[args2-sha-a\\n]": 0.24126819999992222, "tests/unit/command/test_experiments.py::test_experiments_list_remote": 0.22307360000013432, "tests/unit/command/test_experiments.py::test_experiments_pull": 0.23942060000001675, "tests/unit/command/test_experiments.py::test_experiments_push": 0.25641060000009475, "tests/unit/command/test_experiments.py::test_experiments_remove_flag": 0.24051600000007056, "tests/unit/command/test_experiments.py::test_experiments_remove_invalid": 0.27601579999998194, "tests/unit/command/test_experiments.py::test_experiments_remove_special": 0.378145199999949, "tests/unit/command/test_experiments.py::test_experiments_rename_flag": 0.2838232000000289, "tests/unit/command/test_experiments.py::test_experiments_rename_invalid": 0.3273948000000928, "tests/unit/command/test_experiments.py::test_experiments_run": 0.26182230000006257, "tests/unit/command/test_experiments.py::test_experiments_run_message[--message]": 0.25680639999995947, "tests/unit/command/test_experiments.py::test_experiments_run_message[-M]": 0.2054465999999593, "tests/unit/command/test_experiments.py::test_experiments_run_message[-m]": 0.22659100000009857, "tests/unit/command/test_experiments.py::test_experiments_save": 0.34348650000004, "tests/unit/command/test_experiments.py::test_experiments_save_message[--message]": 0.2114745999999741, "tests/unit/command/test_experiments.py::test_experiments_save_message[-M]": 0.26990299999988565, "tests/unit/command/test_experiments.py::test_experiments_save_message[-m]": 0.24079059999996844, "tests/unit/command/test_experiments.py::test_experiments_show": 0.2314608000001499, "tests/unit/command/test_gc.py::test_": 0.31430200000011155, "tests/unit/command/test_get.py::test_get": 0.004811700000004748, "tests/unit/command/test_get.py::test_get_url": 0.004623800000103984, "tests/unit/command/test_get_url.py::test_get_url": 0.0063950999999633495, "tests/unit/command/test_git_hook.py::test_out_of_repo[post-checkout-CmdPostCheckout]": 0.01685439999994287, "tests/unit/command/test_git_hook.py::test_out_of_repo[pre-commit-CmdPreCommit]": 0.019848099999990154, "tests/unit/command/test_git_hook.py::test_out_of_repo[pre-push-CmdPrePush]": 0.016037099999948623, "tests/unit/command/test_help.py::test_help[add]": 0.00516990000005535, "tests/unit/command/test_help.py::test_help[artifacts-get]": 0.005396499999960724, "tests/unit/command/test_help.py::test_help[artifacts]": 0.004762099999993552, "tests/unit/command/test_help.py::test_help[cache-dir]": 0.005094600000120408, "tests/unit/command/test_help.py::test_help[cache-migrate]": 0.004777600000011262, "tests/unit/command/test_help.py::test_help[cache]": 0.004717299999924762, "tests/unit/command/test_help.py::test_help[check-ignore]": 0.004871100000173101, "tests/unit/command/test_help.py::test_help[checkout]": 0.005995600000005652, "tests/unit/command/test_help.py::test_help[commit]": 0.005087700000103723, "tests/unit/command/test_help.py::test_help[completion]": 0.004948499999954947, "tests/unit/command/test_help.py::test_help[config]": 0.0050775999999359556, "tests/unit/command/test_help.py::test_help[daemon-analytics]": 0.005583000000115135, "tests/unit/command/test_help.py::test_help[daemon-updater]": 0.004609500000015032, "tests/unit/command/test_help.py::test_help[dag]": 0.004961499999922125, "tests/unit/command/test_help.py::test_help[data-status]": 0.004912400000080197, "tests/unit/command/test_help.py::test_help[dataset-add]": 0.004888800000003357, "tests/unit/command/test_help.py::test_help[dataset-update]": 0.004693000000088432, "tests/unit/command/test_help.py::test_help[destroy]": 0.004675899999938338, "tests/unit/command/test_help.py::test_help[diff]": 0.005075299999930394, "tests/unit/command/test_help.py::test_help[doctor]": 0.004543700000112949, "tests/unit/command/test_help.py::test_help[ds-add]": 0.00488899999993464, "tests/unit/command/test_help.py::test_help[ds-update]": 0.0046986999998352985, "tests/unit/command/test_help.py::test_help[du]": 0.0050435999999081105, "tests/unit/command/test_help.py::test_help[dvc]": 0.005414900000005218, "tests/unit/command/test_help.py::test_help[exp-apply]": 0.004998699999987366, "tests/unit/command/test_help.py::test_help[exp-branch]": 0.004858499999954802, "tests/unit/command/test_help.py::test_help[exp-clean]": 0.005622000000016669, "tests/unit/command/test_help.py::test_help[exp-diff]": 0.005296399999906498, "tests/unit/command/test_help.py::test_help[exp-list]": 0.005151499999897169, "tests/unit/command/test_help.py::test_help[exp-ls]": 0.005351799999971263, "tests/unit/command/test_help.py::test_help[exp-pull]": 0.005486500000074557, "tests/unit/command/test_help.py::test_help[exp-push]": 0.005553100000156519, "tests/unit/command/test_help.py::test_help[exp-remove]": 0.00527179999994587, "tests/unit/command/test_help.py::test_help[exp-rename]": 0.004908799999839175, "tests/unit/command/test_help.py::test_help[exp-rm]": 0.005404200000157289, "tests/unit/command/test_help.py::test_help[exp-run]": 0.00624249999998483, "tests/unit/command/test_help.py::test_help[exp-save]": 0.0052524000000175874, "tests/unit/command/test_help.py::test_help[exp-show]": 0.006198300000050949, "tests/unit/command/test_help.py::test_help[exp]": 0.005255499999861968, "tests/unit/command/test_help.py::test_help[experiments-apply]": 0.004880999999954838, "tests/unit/command/test_help.py::test_help[experiments-branch]": 0.004828900000006797, "tests/unit/command/test_help.py::test_help[experiments-clean]": 0.005543899999906898, "tests/unit/command/test_help.py::test_help[experiments-diff]": 0.0051723999998785075, "tests/unit/command/test_help.py::test_help[experiments-list]": 0.005507799999804774, "tests/unit/command/test_help.py::test_help[experiments-ls]": 0.005242700000053446, "tests/unit/command/test_help.py::test_help[experiments-pull]": 0.005516199999988203, "tests/unit/command/test_help.py::test_help[experiments-push]": 0.005440700000008292, "tests/unit/command/test_help.py::test_help[experiments-remove]": 0.005233699999962482, "tests/unit/command/test_help.py::test_help[experiments-rename]": 0.005135099999961312, "tests/unit/command/test_help.py::test_help[experiments-rm]": 0.0052400999999235864, "tests/unit/command/test_help.py::test_help[experiments-run]": 0.00627030000009654, "tests/unit/command/test_help.py::test_help[experiments-save]": 0.005168700000012905, "tests/unit/command/test_help.py::test_help[experiments-show]": 0.006394000000000233, "tests/unit/command/test_help.py::test_help[experiments]": 0.005340799999885348, "tests/unit/command/test_help.py::test_help[fetch]": 0.0055118999999876905, "tests/unit/command/test_help.py::test_help[freeze]": 0.004637200000161101, "tests/unit/command/test_help.py::test_help[gc]": 0.00605360000008659, "tests/unit/command/test_help.py::test_help[get-url]": 0.005082600000037019, "tests/unit/command/test_help.py::test_help[get]": 0.006310499999926833, "tests/unit/command/test_help.py::test_help[git-hook-merge-driver]": 0.004797400000029484, "tests/unit/command/test_help.py::test_help[git-hook-post-checkout]": 0.004774100000076942, "tests/unit/command/test_help.py::test_help[git-hook-pre-commit]": 0.004705299999955059, "tests/unit/command/test_help.py::test_help[git-hook-pre-push]": 0.004717099999993479, "tests/unit/command/test_help.py::test_help[import-db]": 0.004886699999929078, "tests/unit/command/test_help.py::test_help[import-url]": 0.005191599999989194, "tests/unit/command/test_help.py::test_help[import]": 0.004990700000007564, "tests/unit/command/test_help.py::test_help[init]": 0.004769599999917773, "tests/unit/command/test_help.py::test_help[install]": 0.004509999999982028, "tests/unit/command/test_help.py::test_help[list-url]": 0.005079899999941517, "tests/unit/command/test_help.py::test_help[list]": 0.005139899999903719, "tests/unit/command/test_help.py::test_help[ls-url]": 0.0051078000000188695, "tests/unit/command/test_help.py::test_help[ls]": 0.005072499999982938, "tests/unit/command/test_help.py::test_help[metrics-diff]": 0.006496099999935723, "tests/unit/command/test_help.py::test_help[metrics-show]": 0.005230500000038774, "tests/unit/command/test_help.py::test_help[metrics]": 0.004968199999893841, "tests/unit/command/test_help.py::test_help[move]": 0.004605499999911444, "tests/unit/command/test_help.py::test_help[mv]": 0.004743300000086492, "tests/unit/command/test_help.py::test_help[params-diff]": 0.00525409999988824, "tests/unit/command/test_help.py::test_help[params]": 0.004771499999947082, "tests/unit/command/test_help.py::test_help[plots-diff]": 0.005646700000056626, "tests/unit/command/test_help.py::test_help[plots-modify]": 0.0052711999998109604, "tests/unit/command/test_help.py::test_help[plots-show]": 0.005484400000000278, "tests/unit/command/test_help.py::test_help[plots-templates]": 0.0047318000000586835, "tests/unit/command/test_help.py::test_help[plots]": 0.0047816000001148495, "tests/unit/command/test_help.py::test_help[pull]": 0.005406800000059775, "tests/unit/command/test_help.py::test_help[push]": 0.006573299999899973, "tests/unit/command/test_help.py::test_help[queue-kill]": 0.004956300000003466, "tests/unit/command/test_help.py::test_help[queue-logs]": 0.00587479999990137, "tests/unit/command/test_help.py::test_help[queue-remove]": 0.0048679000000220185, "tests/unit/command/test_help.py::test_help[queue-start]": 0.00466180000012173, "tests/unit/command/test_help.py::test_help[queue-status]": 0.004603199999792196, "tests/unit/command/test_help.py::test_help[queue-stop]": 0.004899899999941226, "tests/unit/command/test_help.py::test_help[queue]": 0.005185999999980595, "tests/unit/command/test_help.py::test_help[remote-add]": 0.005126499999960288, "tests/unit/command/test_help.py::test_help[remote-default]": 0.004988600000046972, "tests/unit/command/test_help.py::test_help[remote-list]": 0.0049685999999837804, "tests/unit/command/test_help.py::test_help[remote-modify]": 0.005088500000056229, "tests/unit/command/test_help.py::test_help[remote-remove]": 0.004826299999990624, "tests/unit/command/test_help.py::test_help[remote-rename]": 0.005236899999999878, "tests/unit/command/test_help.py::test_help[remote]": 0.004741699999954108, "tests/unit/command/test_help.py::test_help[remove]": 0.004911599999900318, "tests/unit/command/test_help.py::test_help[repro]": 0.005877499999996871, "tests/unit/command/test_help.py::test_help[rm]": 0.004688199999918652, "tests/unit/command/test_help.py::test_help[root]": 0.00459539999997105, "tests/unit/command/test_help.py::test_help[stage-add]": 0.005957599999987906, "tests/unit/command/test_help.py::test_help[stage-list]": 0.004868999999985135, "tests/unit/command/test_help.py::test_help[stage]": 0.005666300000143565, "tests/unit/command/test_help.py::test_help[status]": 0.005589900000018133, "tests/unit/command/test_help.py::test_help[studio-login]": 0.005103100000155791, "tests/unit/command/test_help.py::test_help[studio-logout]": 0.004475100000036036, "tests/unit/command/test_help.py::test_help[studio-token]": 0.004713700000024801, "tests/unit/command/test_help.py::test_help[studio]": 0.004740799999922274, "tests/unit/command/test_help.py::test_help[unfreeze]": 0.0046703999998953805, "tests/unit/command/test_help.py::test_help[unprotect]": 0.0046142999999574386, "tests/unit/command/test_help.py::test_help[update]": 0.0050053999999590815, "tests/unit/command/test_help.py::test_help[version]": 0.004662299999949937, "tests/unit/command/test_imp.py::test_import": 0.15950039999984256, "tests/unit/command/test_imp.py::test_import_no_download": 0.17638509999983398, "tests/unit/command/test_imp.py::test_import_no_exec": 0.16130900000018755, "tests/unit/command/test_imp_url.py::test_failed_import_url": 0.24874369999997725, "tests/unit/command/test_imp_url.py::test_import_url": 0.16240170000003218, "tests/unit/command/test_imp_url.py::test_import_url_no_exec_download_flags[--no-download-expected1]": 0.1616487999998526, "tests/unit/command/test_imp_url.py::test_import_url_no_exec_download_flags[--no-exec-expected0]": 0.15735030000007555, "tests/unit/command/test_imp_url.py::test_import_url_to_remote": 0.23831790000008368, "tests/unit/command/test_imp_url.py::test_import_url_to_remote_flag": 0.2676136000000042, "tests/unit/command/test_imp_url.py::test_import_url_to_remote_invalid_combination[--no-download]": 0.23121040000000903, "tests/unit/command/test_imp_url.py::test_import_url_to_remote_invalid_combination[--no-exec]": 0.22697579999999107, "tests/unit/command/test_imp_url.py::test_import_url_to_remote_invalid_combination[--version-aware]": 0.2488975000001119, "tests/unit/command/test_ls_url.py::test_ls_url": 0.007741799999962495, "tests/unit/command/test_ls_url.py::test_recursive": 0.007042000000069493, "tests/unit/command/test_metrics.py::test_metrics_diff": 0.17783269999983986, "tests/unit/command/test_metrics.py::test_metrics_diff_json": 0.16102879999982633, "tests/unit/command/test_metrics.py::test_metrics_show": 0.15935780000006616, "tests/unit/command/test_metrics.py::test_metrics_show_json": 0.19421349999993254, "tests/unit/command/test_params.py::test_params_diff": 0.1581121000000394, "tests/unit/command/test_params.py::test_params_diff_from_cli": 0.1667267999998785, "tests/unit/command/test_params.py::test_params_diff_show_json": 0.22336029999985385, "tests/unit/command/test_plots.py::test_plots_diff": 0.16223200000001725, "tests/unit/command/test_plots.py::test_plots_diff_json": 0.8370906000001241, "tests/unit/command/test_plots.py::test_plots_diff_open[False]": 0.20436099999983526, "tests/unit/command/test_plots.py::test_plots_diff_open[True]": 0.16055760000006103, "tests/unit/command/test_plots.py::test_plots_diff_open_failed": 0.18257810000011432, "tests/unit/command/test_plots.py::test_plots_diff_open_wsl": 0.16334660000006807, "tests/unit/command/test_plots.py::test_plots_diff_vega": 0.21606650000001082, "tests/unit/command/test_plots.py::test_plots_path_is_quoted_and_resolved_properly[quote]": 0.22137190000012197, "tests/unit/command/test_plots.py::test_plots_path_is_quoted_and_resolved_properly[resolve]": 0.16760520000002543, "tests/unit/command/test_plots.py::test_plots_show_vega": 0.20280970000021625, "tests/unit/command/test_plots.py::test_plots_templates[None-t1\\nt2-0]": 0.16750550000006115, "tests/unit/command/test_plots.py::test_plots_templates[t1-\"{'t1'}\"-0]": 0.14744550000011714, "tests/unit/command/test_plots.py::test_plots_templates[t3--1]": 0.19756789999996727, "tests/unit/command/test_plots.py::test_should_call_render[None]": 0.02213379999989229, "tests/unit/command/test_plots.py::test_should_call_render[some_out]": 0.02298040000016499, "tests/unit/command/test_plots.py::test_should_call_render[to\\\\subdir]": 0.021559099999990394, "tests/unit/command/test_plots.py::test_should_pass_template_dir": 0.20337180000001354, "tests/unit/command/test_plots.py::test_show_json[False]": 0.004578400000013971, "tests/unit/command/test_plots.py::test_show_json[True]": 0.004965399999946385, "tests/unit/command/test_plots.py::test_show_json_no_renderers": 0.0037462000000232365, "tests/unit/command/test_plots.py::test_show_json_with_error": 0.18920730000002095, "tests/unit/command/test_queue.py::test_experiments_kill": 0.2445196000001033, "tests/unit/command/test_queue.py::test_experiments_remove_flags": 0.31704769999998916, "tests/unit/command/test_queue.py::test_experiments_remove_invalid": 0.297946599999932, "tests/unit/command/test_queue.py::test_experiments_remove_name": 0.26617610000005243, "tests/unit/command/test_queue.py::test_experiments_start": 1.2269019999998818, "tests/unit/command/test_queue.py::test_experiments_status": 1.2477585000001454, "tests/unit/command/test_queue.py::test_experiments_stop": 0.27853619999996226, "tests/unit/command/test_queue.py::test_queue_logs": 0.2533302999999023, "tests/unit/command/test_queue.py::test_worker_status[worker_status0-Worker status: 0 active, 2 idle]": 0.2085013999999319, "tests/unit/command/test_queue.py::test_worker_status[worker_status1-Worker status: 2 active, 1 idle]": 0.21324529999992592, "tests/unit/command/test_queue.py::test_worker_status[worker_status2-Worker status: 1 active, 0 idle]": 0.26774479999983214, "tests/unit/command/test_repro.py::test_default_arguments": 0.24381379999999808, "tests/unit/command/test_repro.py::test_downstream": 0.2228683999999248, "tests/unit/command/test_stage.py::test_stage_add[command0-echo foo bar]": 0.232102399999917, "tests/unit/command/test_stage.py::test_stage_add[command1-echo \"foo bar\"]": 0.2880078999999114, "tests/unit/command/test_stage.py::test_stage_add[command2-echo \"foo bar\"]": 0.17658459999995557, "tests/unit/command/test_stage.py::test_stage_add[command3-cmd --flag \"\"]": 0.19729919999997492, "tests/unit/command/test_stage.py::test_stage_add_and_run": 0.17568000000005668, "tests/unit/command/test_status.py::test_cloud_status": 0.16782099999988986, "tests/unit/command/test_status.py::test_status_check_updates": 0.19725930000004155, "tests/unit/command/test_status.py::test_status_empty": 0.1967822999999953, "tests/unit/command/test_status.py::test_status_quiet[status0-0]": 0.19551589999991847, "tests/unit/command/test_status.py::test_status_quiet[status1-1]": 0.17035260000000108, "tests/unit/command/test_status.py::test_status_quiet[status2-1]": 0.19946329999993395, "tests/unit/command/test_status.py::test_status_show_json[status0]": 0.1761330999999018, "tests/unit/command/test_status.py::test_status_show_json[status1]": 0.17701260000001184, "tests/unit/command/test_status.py::test_status_show_json[status2]": 0.18058289999999033, "tests/unit/command/test_status.py::test_status_up_to_date[cloud_opts0-Cache and remote 'default' are in sync]": 0.17520509999997103, "tests/unit/command/test_status.py::test_status_up_to_date[cloud_opts1-Cache and remote 'remote1' are in sync]": 0.16241600000000744, "tests/unit/command/test_status.py::test_status_up_to_date[cloud_opts2-Data and pipelines are up to date]": 0.174744399999895, "tests/unit/command/test_studio.py::test_studio_login_arguments": 0.020730800000137606, "tests/unit/command/test_studio.py::test_studio_login_success": 0.1833499000001666, "tests/unit/command/test_studio.py::test_studio_login_token_check_failed": 0.016864599999962593, "tests/unit/command/test_studio.py::test_studio_logout": 0.16298749999998563, "tests/unit/command/test_studio.py::test_studio_token": 0.15698469999995268, "tests/unit/command/test_update.py::test_update": 0.17654290000007222, "tests/unit/command/test_update.py::test_update_to_remote": 0.15949060000002646, "tests/unit/data/db/test_local.py::test_is_protected[hardlink]": 0.14557190000004994, "tests/unit/data/db/test_local.py::test_is_protected[symlink]": 0.1829543000000058, "tests/unit/data/db/test_local.py::test_protect_ignore_errors[13]": 0.18708559999993213, "tests/unit/data/db/test_local.py::test_protect_ignore_errors[1]": 0.16553050000004532, "tests/unit/data/db/test_local.py::test_protect_ignore_errors[30]": 0.1776026999999658, "tests/unit/data/db/test_local.py::test_set_exec_ignore_errors[13]": 0.22822449999989658, "tests/unit/data/db/test_local.py::test_set_exec_ignore_errors[1]": 0.20305240000027425, "tests/unit/data/db/test_local.py::test_set_exec_ignore_errors[30]": 0.1831402000000253, "tests/unit/data/db/test_local.py::test_staging_dir": 0.230100199999697, "tests/unit/data/db/test_local.py::test_staging_file": 0.20912219999991066, "tests/unit/data/db/test_local.py::test_status_download_optimization": 0.14161040000010416, "tests/unit/dependency/test_dependency.py::test_save_missing": 0.19652719999999135, "tests/unit/dependency/test_params.py::test_dumpd_with_info": 0.15128699999991113, "tests/unit/dependency/test_params.py::test_dumpd_without_info": 0.16029950000029203, "tests/unit/dependency/test_params.py::test_get_hash_missing_config": 0.13132500000006075, "tests/unit/dependency/test_params.py::test_get_hash_missing_param": 0.1511273999997229, "tests/unit/dependency/test_params.py::test_loadd_from": 0.14914219999991474, "tests/unit/dependency/test_params.py::test_loads_params": 0.1819633000000067, "tests/unit/dependency/test_params.py::test_loads_params_without_any_specific_targets": 0.2397292999999081, "tests/unit/dependency/test_params.py::test_params_error[params0-Only list of str/dict is supported. Got: 'int']": 0.17743289999998524, "tests/unit/dependency/test_params.py::test_params_error[params1-Expected list of params for custom params file 'b_file', got 'str'.]": 0.14181680000001506, "tests/unit/dependency/test_params.py::test_params_py_tuple_status": 0.1323810000001231, "tests/unit/dependency/test_params.py::test_params_status_without_targets": 0.14940939999996772, "tests/unit/dependency/test_params.py::test_params_with_false_values[[]]": 0.14156870000010713, "tests/unit/dependency/test_params.py::test_params_with_false_values[]": 0.14010119999989, "tests/unit/dependency/test_params.py::test_params_with_false_values[false]": 0.145325400000047, "tests/unit/dependency/test_params.py::test_params_with_false_values[null]": 0.13275300000009338, "tests/unit/dependency/test_params.py::test_params_with_false_values[{}]": 0.13771410000003925, "tests/unit/dependency/test_params.py::test_read_params_default_loader": 0.1354366000000482, "tests/unit/dependency/test_params.py::test_read_params_nested": 0.14428989999987607, "tests/unit/dependency/test_params.py::test_read_params_nonexistent_file": 0.14137549999986732, "tests/unit/dependency/test_params.py::test_read_params_py": 0.15157290000001922, "tests/unit/dependency/test_params.py::test_read_params_toml": 0.1404378000001998, "tests/unit/dependency/test_params.py::test_read_params_unsupported_format": 0.1372903999999835, "tests/unit/dependency/test_params.py::test_read_params_wrong_suffix": 0.16509849999988546, "tests/unit/fs/test_base.py::test_missing_deps": 0.00495150000006106, "tests/unit/fs/test_data.py::test_exists": 0.35812570000030064, "tests/unit/fs/test_data.py::test_get_hash_dir": 0.3086691000000883, "tests/unit/fs/test_data.py::test_get_hash_dirty_dir": 0.43394499999999425, "tests/unit/fs/test_data.py::test_get_hash_dirty_file": 0.38452159999997093, "tests/unit/fs/test_data.py::test_get_hash_file": 0.2722163000003093, "tests/unit/fs/test_data.py::test_get_hash_granular": 0.3548885000000155, "tests/unit/fs/test_data.py::test_get_key[-key0]": 0.2359702999997353, "tests/unit/fs/test_data.py::test_get_key[.-key1]": 0.20508520000021235, "tests/unit/fs/test_data.py::test_get_key[/-key2]": 0.1873142999997981, "tests/unit/fs/test_data.py::test_get_key[dir/foo-key4]": 0.261411299999736, "tests/unit/fs/test_data.py::test_get_key[foo-key3]": 0.3334287999998651, "tests/unit/fs/test_data.py::test_isdir_isfile": 0.36860460000002604, "tests/unit/fs/test_data.py::test_isdir_mixed": 0.2752560999997513, "tests/unit/fs/test_data.py::test_open": 0.38896999999997206, "tests/unit/fs/test_data.py::test_open_dirty_hash": 0.3455529000000297, "tests/unit/fs/test_data.py::test_open_dirty_no_hash": 0.22985790000007, "tests/unit/fs/test_data.py::test_open_in_history": 0.5580856999999924, "tests/unit/fs/test_data.py::test_open_no_remote": 0.29373580000014954, "tests/unit/fs/test_data.py::test_walk": 0.45851840000000266, "tests/unit/fs/test_data.py::test_walk_dir": 0.3647290999999768, "tests/unit/fs/test_data.py::test_walk_missing": 0.21059100000024955, "tests/unit/fs/test_data.py::test_walk_not_a_dir": 0.28855810000004567, "tests/unit/fs/test_dvc.py::test_dvcfs_no_subrepos": 1.1262057000001278, "tests/unit/fs/test_dvc.py::test_exists": 0.4299327999999605, "tests/unit/fs/test_dvc.py::test_exists_isdir_isfile_dirty": 0.3719997999999123, "tests/unit/fs/test_dvc.py::test_fsid": 0.3600894999999582, "tests/unit/fs/test_dvc.py::test_fsid_noscm": 0.17050810000000638, "tests/unit/fs/test_dvc.py::test_fsid_url": 0.6390982999998869, "tests/unit/fs/test_dvc.py::test_get_hash_cached_dir": 0.3788449999997283, "tests/unit/fs/test_dvc.py::test_get_hash_cached_file": 0.2868271000002096, "tests/unit/fs/test_dvc.py::test_get_hash_cached_granular": 0.32177900000010595, "tests/unit/fs/test_dvc.py::test_get_hash_dirty_dir": 0.3100024000002577, "tests/unit/fs/test_dvc.py::test_get_hash_dirty_file": 0.27687379999997574, "tests/unit/fs/test_dvc.py::test_get_hash_mixed_dir": 0.44705369999996947, "tests/unit/fs/test_dvc.py::test_isdir_isfile": 0.48258069999997133, "tests/unit/fs/test_dvc.py::test_isdir_mixed": 0.28985499999998865, "tests/unit/fs/test_dvc.py::test_isdvc": 0.3862890000000334, "tests/unit/fs/test_dvc.py::test_ls_dir_empty": 0.2741804000002048, "tests/unit/fs/test_dvc.py::test_ls_dirty": 0.2980661000001419, "tests/unit/fs/test_dvc.py::test_ls_file_not_found": 0.2732452000000194, "tests/unit/fs/test_dvc.py::test_open": 0.39393840000002456, "tests/unit/fs/test_dvc.py::test_open_dirty_hash": 0.24628350000011778, "tests/unit/fs/test_dvc.py::test_open_dirty_no_hash": 0.1439026000002741, "tests/unit/fs/test_dvc.py::test_open_in_history": 0.5555142999999134, "tests/unit/fs/test_dvc.py::test_subrepo_walk[False-extra_expected0]": 1.4545625999999174, "tests/unit/fs/test_dvc.py::test_subrepo_walk[True-extra_expected1]": 1.7074651000002632, "tests/unit/fs/test_dvc.py::test_subrepos": 1.6347952000000987, "tests/unit/fs/test_dvc.py::test_walk[False-extra_expected0]": 0.3712035000000924, "tests/unit/fs/test_dvc.py::test_walk[True-extra_expected1]": 0.5252416000000721, "tests/unit/fs/test_dvc.py::test_walk_dirty": 0.43012769999995726, "tests/unit/fs/test_dvc.py::test_walk_dirty_cached_dir": 0.5374512999999297, "tests/unit/fs/test_dvc.py::test_walk_missing": 0.20010729999989962, "tests/unit/fs/test_dvc.py::test_walk_mixed_dir": 0.5005822000000535, "tests/unit/fs/test_dvc.py::test_walk_nested_subrepos[False]": 2.6429789000001165, "tests/unit/fs/test_dvc.py::test_walk_nested_subrepos[True]": 2.859540100000004, "tests/unit/fs/test_dvc.py::test_walk_not_a_dir": 0.2780836999997973, "tests/unit/fs/test_dvc_info.py::test_info_dvc_only_dirs[data/processed]": 0.6769035000002077, "tests/unit/fs/test_dvc_info.py::test_info_dvc_only_dirs[data/raw]": 0.7841137000002618, "tests/unit/fs/test_dvc_info.py::test_info_dvc_only_dirs[data]": 0.6757109000000128, "tests/unit/fs/test_dvc_info.py::test_info_dvc_tracked_file[data/processed/processed-1.csv]": 0.7904966999999488, "tests/unit/fs/test_dvc_info.py::test_info_dvc_tracked_file[data/processed/processed-2.csv]": 0.7899893000001157, "tests/unit/fs/test_dvc_info.py::test_info_dvc_tracked_file[data/raw/raw-1.csv]": 0.720624799999996, "tests/unit/fs/test_dvc_info.py::test_info_dvc_tracked_file[data/raw/raw-2.csv]": 0.6412256000003254, "tests/unit/fs/test_dvc_info.py::test_info_dvc_tracked_file[models/transform.pickle]": 0.6508121999997911, "tests/unit/fs/test_dvc_info.py::test_info_git_dvc_mixed_dirs[.]": 0.634685300000001, "tests/unit/fs/test_dvc_info.py::test_info_git_dvc_mixed_dirs[models]": 0.6856822000002012, "tests/unit/fs/test_dvc_info.py::test_info_git_only_dirs[src/utils]": 0.8510240000000522, "tests/unit/fs/test_dvc_info.py::test_info_git_only_dirs[src]": 0.7053726999999981, "tests/unit/fs/test_dvc_info.py::test_info_git_tracked_file[README.md]": 0.8011664999999084, "tests/unit/fs/test_dvc_info.py::test_info_git_tracked_file[models/test.py]": 0.7170016000000032, "tests/unit/fs/test_dvc_info.py::test_info_git_tracked_file[models/train.py]": 0.6278869000000213, "tests/unit/fs/test_dvc_info.py::test_info_git_tracked_file[src/utils/__init__.py]": 0.7002584999997907, "tests/unit/fs/test_dvc_info.py::test_info_git_tracked_file[src/utils/serve_model.py]": 0.737733500000104, "tests/unit/fs/test_dvc_info.py::test_info_not_existing": 0.7489877000000433, "tests/unit/fs/test_dvc_info.py::test_info_on_subrepos": 1.311515800000052, "tests/unit/fs/test_fs.py::test_get_cloud_fs": 0.003662800000029165, "tests/unit/fs/test_fs.py::test_get_fs_cls[../file-LocalFileSystem]": 0.003933200000119541, "tests/unit/fs/test_fs.py::test_get_fs_cls[..\\\\file-LocalFileSystem]": 0.0037267999998675805, "tests/unit/fs/test_fs.py::test_get_fs_cls[./file-LocalFileSystem]": 0.0037047000000711705, "tests/unit/fs/test_fs.py::test_get_fs_cls[.\\\\file-LocalFileSystem]": 0.0036365000000841974, "tests/unit/fs/test_fs.py::test_get_fs_cls[file-LocalFileSystem]": 0.0036200999998072803, "tests/unit/fs/test_fs.py::test_get_fs_cls[hdfs://example.com/dir/path-HDFSFileSystem]": 0.0038507000001573033, "tests/unit/fs/test_fs.py::test_get_fs_cls[http://example.com/path/to/file-HTTPFileSystem]": 0.0036757999998826563, "tests/unit/fs/test_fs.py::test_get_fs_cls[https://example.com/path/to/file-HTTPSFileSystem]": 0.0037765999998100597, "tests/unit/fs/test_fs.py::test_get_fs_cls[path/to/file-LocalFileSystem]": 0.0036463999999796215, "tests/unit/fs/test_fs.py::test_get_fs_cls[path\\\\to\\\\file-LocalFileSystem]": 0.0037243999997826904, "tests/unit/fs/test_fs.py::test_get_fs_cls[s3://bucket/path-S3FileSystem]": 0.004122800000004645, "tests/unit/fs/test_fs.py::test_get_fs_cls[ssh://example.com:/dir/path-SSHFileSystem]": 0.003962999999885142, "tests/unit/fs/test_fs.py::test_get_fs_cls[unknown://path-LocalFileSystem]": 0.0038380000000870496, "tests/unit/fs/test_fs.py::test_get_fs_config": 0.003567299999986062, "tests/unit/fs/test_fs.py::test_get_fs_config_error": 0.0034471999997549574, "tests/unit/fs/test_fs.py::test_remote_url": 0.0040197999999236345, "tests/unit/fs/test_tree.py::test_get_cloud_fs": 0.1809981000001244, "tests/unit/fs/test_tree.py::test_get_cloud_fs_validate": 0.1421276000000944, "tests/unit/output/test_annotations.py::test_annotation_to_dict[kwargs0]": 0.0043542000000798, "tests/unit/output/test_annotations.py::test_annotation_to_dict[kwargs1]": 0.0034908000002360495, "tests/unit/output/test_load.py::test_load_from_pipeline[metrics]": 0.14089249999983622, "tests/unit/output/test_load.py::test_load_from_pipeline[outs]": 0.1623079000000871, "tests/unit/output/test_load.py::test_load_from_pipeline[plots]": 0.1616214000000582, "tests/unit/output/test_load.py::test_load_from_pipeline_accumulates_flag": 0.13705239999990226, "tests/unit/output/test_load.py::test_load_from_pipeline_error_on_typ[None]": 0.14832630000023528, "tests/unit/output/test_load.py::test_load_from_pipeline_error_on_typ[]": 0.1467334999997547, "tests/unit/output/test_load.py::test_load_from_pipeline_error_on_typ[illegal]": 0.1416404000001421, "tests/unit/output/test_load.py::test_load_from_pipeline_illegal_type[3]": 0.14419900000007146, "tests/unit/output/test_load.py::test_load_from_pipeline_illegal_type[key1]": 0.1510142000001906, "tests/unit/output/test_load.py::test_load_remote": 0.1515172999997958, "tests/unit/output/test_load.py::test_load_remote_files_from_pipeline": 0.3239920999997139, "tests/unit/output/test_load.py::test_plots_load_from_pipeline": 0.1858439999998609, "tests/unit/output/test_local.py::test_return_0_on_no_cache": 0.18396800000004987, "tests/unit/output/test_local.py::test_return_1_on_single_file_cache": 0.18803580000030706, "tests/unit/output/test_local.py::test_return_multiple_for_dir": 0.17993090000004486, "tests/unit/output/test_local.py::test_str_on_external_absolute_path": 0.17777769999997872, "tests/unit/output/test_local.py::test_str_on_local_absolute_path": 0.21161090000009608, "tests/unit/output/test_local.py::test_str_workdir_inside_repo": 0.14259830000014517, "tests/unit/output/test_local.py::test_str_workdir_outside_repo": 0.19554309999989528, "tests/unit/output/test_output.py::test_checksum_schema[-None]": 0.005544099999497121, "tests/unit/output/test_output.py::test_checksum_schema[000002000000000000000000c16859d1d071c6b1ffc9c8557d4909f1-000002000000000000000000c16859d1d071c6b1ffc9c8557d4909f1]": 0.003528299999743467, "tests/unit/output/test_output.py::test_checksum_schema[11111-11111_0]": 0.0035367000000405824, "tests/unit/output/test_output.py::test_checksum_schema[11111-11111_1]": 0.003755199999886827, "tests/unit/output/test_output.py::test_checksum_schema[13393-13393]": 0.0037766000000374333, "tests/unit/output/test_output.py::test_checksum_schema[3cc286c534a71504476da009ed174423-3cc286c534a71504476da009ed174423]": 0.003689800000302057, "tests/unit/output/test_output.py::test_checksum_schema[676-676]": 0.0036434999997254636, "tests/unit/output/test_output.py::test_checksum_schema[None-None]": 0.003606799999715804, "tests/unit/output/test_output.py::test_checksum_schema[aAaBa-aaaba]": 0.0035385999999562046, "tests/unit/output/test_output.py::test_checksum_schema[d41d8cd98f00b204e9800998ecf8427e-38-d41d8cd98f00b204e9800998ecf8427e-38]": 0.0037460000000919536, "tests/unit/output/test_output.py::test_checksum_schema_fail[11]": 0.0037425999998959014, "tests/unit/output/test_output.py::test_checksum_schema_fail[1]": 0.003756699999939883, "tests/unit/output/test_output.py::test_checksum_schema_fail[value2]": 0.00356540000007044, "tests/unit/output/test_output.py::test_checksum_schema_fail[value3]": 0.0036418999998204526, "tests/unit/output/test_output.py::test_checksum_schema_fail[value4]": 0.0035010999999940395, "tests/unit/output/test_output.py::test_checksum_schema_fail[value5]": 0.0036368999999467633, "tests/unit/output/test_output.py::test_dumpd_cloud_versioning_dir": 0.013638500000070053, "tests/unit/output/test_output.py::test_get_used_objs[False-Output 'path'(stage: 'stage.dvc') is missing version info. Cache for it will not be collected. Use `dvc repro` to get your pipeline up to date.]": 0.013380899999901885, "tests/unit/output/test_output.py::test_get_used_objs[True-Output 'path'(stage: 'stage.dvc') is missing version info. Cache for it will not be collected. Use `dvc repro` to get your pipeline up to date.\\nYou can also use `dvc commit stage.dvc` to associate existing 'path' with stage: 'stage.dvc'.]": 0.013191500000175438, "tests/unit/output/test_output.py::test_hash_info_cloud_versioning_dir": 0.011704800000188698, "tests/unit/output/test_output.py::test_remote_missing_dependency_on_dir_pull": 0.4997587999998814, "tests/unit/output/test_output.py::test_save_missing": 0.17189609999991262, "tests/unit/output/test_output.py::test_version_aware_is_set_based_on_files": 0.013280800000302406, "tests/unit/remote/test_oss.py::test_init": 0.13651709999999184, "tests/unit/remote/test_remote.py::test_makedirs_not_create_for_top_level_path[GSFileSystem]": 0.14460880000001453, "tests/unit/remote/test_remote.py::test_makedirs_not_create_for_top_level_path[S3FileSystem]": 0.13261130000000776, "tests/unit/remote/test_remote.py::test_remote_with_hash_jobs": 0.15536950000000616, "tests/unit/remote/test_remote.py::test_remote_with_jobs": 0.16428399999995236, "tests/unit/remote/test_remote.py::test_remote_without_hash_jobs": 0.16145559999995385, "tests/unit/remote/test_remote.py::test_remote_without_hash_jobs_default": 0.1481607000000622, "tests/unit/remote/test_webdav.py::test_ask_password": 0.00495260000025155, "tests/unit/remote/test_webdav.py::test_ask_password_custom_auth_header": 0.00502760000017588, "tests/unit/remote/test_webdav.py::test_common": 0.004034600000068167, "tests/unit/remote/test_webdav.py::test_custom_auth_header": 0.0038762000001497654, "tests/unit/remote/test_webdav.py::test_password": 0.003827599999794984, "tests/unit/remote/test_webdav.py::test_remote_with_jobs[webdav://username@example.com/public.php/webdav-WebDAVFileSystem]": 0.15608989999986989, "tests/unit/remote/test_webdav.py::test_remote_with_jobs[webdavs://username@example.com/public.php/webdav-WebDAVSFileSystem]": 0.14663779999978033, "tests/unit/remote/test_webdav.py::test_ssl_verify_custom_cert": 0.00405799999998635, "tests/unit/remote/test_webdav.py::test_token": 0.003971099999944272, "tests/unit/remote/test_webdav.py::test_user": 0.003973999999971056, "tests/unit/remote/test_webhdfs.py::test_init": 0.14084939999997914, "tests/unit/remote/test_webhdfs.py::test_verify_ssl": 0.15593999999987318, "tests/unit/render/test_convert.py::test_to_json_image": 0.0036106000000017957, "tests/unit/render/test_convert.py::test_to_json_vega": 0.005109799999900133, "tests/unit/render/test_convert.py::test_to_json_vega_split": 0.004524400000036621, "tests/unit/render/test_image_converter.py::test_image_converter_no_out": 0.003433300000097006, "tests/unit/render/test_image_converter.py::test_image_converter_with_out": 0.015260500000067623, "tests/unit/render/test_image_converter.py::test_image_converter_with_slash_in_revision": 0.018313700000135213, "tests/unit/render/test_match.py::test_flat_datapoints_errors_are_caught": 0.004753199999640856, "tests/unit/render/test_match.py::test_group_definitions[all]": 0.003569299999753639, "tests/unit/render/test_match.py::test_group_definitions[multi_config]": 0.003538899999966816, "tests/unit/render/test_match.py::test_group_definitions[multi_rev]": 0.0034962000001996785, "tests/unit/render/test_match.py::test_group_definitions[multi_rev_multi_config]": 0.0036884000001009554, "tests/unit/render/test_match.py::test_group_definitions[simple]": 0.0035629999997581763, "tests/unit/render/test_match.py::test_match_renderers": 0.00402299999996103, "tests/unit/render/test_match.py::test_squash_plots_properties_config_files": 0.003502900000057707, "tests/unit/render/test_match.py::test_squash_plots_properties_revs": 0.003376799999841751, "tests/unit/render/test_vega_converter.py::test_convert[choose_x_y]": 0.003819599999815182, "tests/unit/render/test_vega_converter.py::test_convert[default_x_y]": 0.003854499999761174, "tests/unit/render/test_vega_converter.py::test_convert[find_in_nested_structure]": 0.003715999999712949, "tests/unit/render/test_vega_converter.py::test_convert[multi_file_json]": 0.0038222999999106833, "tests/unit/render/test_vega_converter.py::test_convert[multi_file_y_same_prefix]": 0.003748200000018187, "tests/unit/render/test_vega_converter.py::test_convert[multi_source_json]": 0.0037368000000697066, "tests/unit/render/test_vega_converter.py::test_convert[multi_source_y_single_x]": 0.003875499999821841, "tests/unit/render/test_vega_converter.py::test_convert[multiple_x_fields]": 0.004527599999846643, "tests/unit/render/test_vega_converter.py::test_convert[y_def_list]": 0.003832700000202749, "tests/unit/render/test_vega_converter.py::test_convert[y_list]": 0.0037419000000227243, "tests/unit/render/test_vega_converter.py::test_convert[y_list_x_dict]": 0.003806600000416438, "tests/unit/render/test_vega_converter.py::test_convert_fail[unequal_datapoints]": 0.003742300000112664, "tests/unit/render/test_vega_converter.py::test_convert_fail[unequal_x_y]": 0.0038218999998207437, "tests/unit/render/test_vega_converter.py::test_finding_lists[dictionary0-expected_result0]": 0.0035947999999734748, "tests/unit/render/test_vega_converter.py::test_finding_lists[dictionary1-expected_result1]": 0.003548999999793523, "tests/unit/render/test_vega_converter.py::test_finding_lists[dictionary2-expected_result2]": 0.0034938000001147884, "tests/unit/render/test_vega_converter.py::test_infer_x_label[properties0-actual]": 0.0036790000001474255, "tests/unit/render/test_vega_converter.py::test_infer_x_label[properties1-actual]": 0.0035590000002230227, "tests/unit/render/test_vega_converter.py::test_infer_x_label[properties2-x]": 0.003653600000006918, "tests/unit/repo/experiments/queue/test_celery.py::test_celery_queue_kill[False]": 3.2636135999998714, "tests/unit/repo/experiments/queue/test_celery.py::test_celery_queue_kill[True]": 3.247582599999987, "tests/unit/repo/experiments/queue/test_celery.py::test_celery_queue_kill_invalid[False]": 3.2468249000000924, "tests/unit/repo/experiments/queue/test_celery.py::test_celery_queue_kill_invalid[True]": 3.2016183999999157, "tests/unit/repo/experiments/queue/test_celery.py::test_post_run_after_kill": 5.27350279999996, "tests/unit/repo/experiments/queue/test_celery.py::test_queue_iter_done_task[FAILURE]": 3.3001954999999725, "tests/unit/repo/experiments/queue/test_celery.py::test_queue_iter_done_task[SUCCESS]": 3.2327950000001238, "tests/unit/repo/experiments/queue/test_celery.py::test_queue_status": 3.2498809999999594, "tests/unit/repo/experiments/queue/test_celery.py::test_shutdown": 3.241012300000193, "tests/unit/repo/experiments/queue/test_celery.py::test_shutdown_no_tasks": 3.236263000000008, "tests/unit/repo/experiments/queue/test_celery.py::test_shutdown_with_kill": 3.2628928999997697, "tests/unit/repo/experiments/queue/test_remove.py::test_remove_done": 3.258274300000039, "tests/unit/repo/experiments/queue/test_remove.py::test_remove_queued": 3.249447200000077, "tests/unit/repo/experiments/test_collect.py::test_collect_stable_sorting": 18.420879500000183, "tests/unit/repo/experiments/test_executor_status.py::test_celery_queue_failure_status": 3.197412799999938, "tests/unit/repo/experiments/test_executor_status.py::test_celery_queue_success_status": 5.281382499999836, "tests/unit/repo/experiments/test_executor_status.py::test_executor_status_compatibility": 0.003536400000029971, "tests/unit/repo/experiments/test_executor_status.py::test_workspace_executor_failed_status[tempdir_queue]": 1.1872725000000628, "tests/unit/repo/experiments/test_executor_status.py::test_workspace_executor_failed_status[workspace_queue]": 0.8289185000000998, "tests/unit/repo/experiments/test_executor_status.py::test_workspace_executor_success_status[tempdir_queue]": 1.6061510000001817, "tests/unit/repo/experiments/test_executor_status.py::test_workspace_executor_success_status[workspace_queue]": 1.1191812999998092, "tests/unit/repo/experiments/test_remove.py::test_remove_done_tasks": 3.204113199999938, "tests/unit/repo/experiments/test_utils.py::test_gen_random_name": 0.0036457000001064443, "tests/unit/repo/experiments/test_utils.py::test_resolve_exp_ref[False-False]": 0.5896682000000055, "tests/unit/repo/experiments/test_utils.py::test_resolve_exp_ref[False-True]": 0.5865679999999429, "tests/unit/repo/experiments/test_utils.py::test_resolve_exp_ref[True-False]": 0.4884703999998692, "tests/unit/repo/experiments/test_utils.py::test_resolve_exp_ref[True-True]": 0.4549055000002227, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[*-False]": 0.058686999999736145, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[:-False]": 0.03801729999986492, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[?-False]": 0.031393499999921914, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[@-result4]": 0.043861699999979464, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[^-False]": 0.03508149999970556, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[group/name-False]": 0.04892050000012205, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[invalid/.name-False]": 0.03710669999986749, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[na me-False]": 0.03663880000021891, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[name-True]": 0.03781759999992573, "tests/unit/repo/experiments/test_utils.py::test_run_check_ref_format[~-False]": 0.03606680000007145, "tests/unit/repo/experiments/test_utils.py::test_to_studio_params[params0-expected0]": 0.003655899999785106, "tests/unit/repo/experiments/test_utils.py::test_to_studio_params[params1-expected1]": 0.003651599999784594, "tests/unit/repo/experiments/test_utils.py::test_to_studio_params[params2-expected2]": 0.0035170999999536434, "tests/unit/repo/plots/test_diff.py::test_revisions[arg_revisions0-False-expected_revisions0]": 0.004743899999994028, "tests/unit/repo/plots/test_diff.py::test_revisions[arg_revisions1-True-expected_revisions1]": 0.004207899999983056, "tests/unit/repo/plots/test_diff.py::test_revisions[arg_revisions2-False-expected_revisions2]": 0.0041298000001006585, "tests/unit/repo/plots/test_diff.py::test_revisions[arg_revisions3-True-expected_revisions3]": 0.004053900000144495, "tests/unit/repo/plots/test_diff.py::test_revisions_experiment[arg_revisions0-v0-expected_revisions0]": 0.004405799999858573, "tests/unit/repo/plots/test_diff.py::test_revisions_experiment[arg_revisions1-None-expected_revisions1]": 0.004275099999858867, "tests/unit/repo/plots/test_diff.py::test_revisions_experiment[arg_revisions2-v0-expected_revisions2]": 0.004378200000246579, "tests/unit/repo/plots/test_diff.py::test_revisions_experiment[arg_revisions3-None-expected_revisions3]": 0.004301799999893774, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes0-False-expected_edges0]": 0.0039300999999341, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes1-False-expected_edges1]": 0.004124099999899045, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes10-True-expected_edges10]": 0.004557500000373693, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes11-True-expected_edges11]": 0.004562999999734529, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes12-True-expected_edges12]": 0.004001199999947858, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes13-True-expected_edges13]": 0.003916599999683967, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes2-False-expected_edges2]": 0.003934500000013941, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes3-False-expected_edges3]": 0.004986700000245037, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes4-False-expected_edges4]": 0.004723999999896478, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes5-False-expected_edges5]": 0.004219399999783491, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes6-False-expected_edges6]": 0.003915600000027553, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes7-True-expected_edges7]": 0.004030999999940832, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes8-True-expected_edges8]": 0.0038394000000607775, "tests/unit/repo/test_graph.py::test_subgraph_of_nodes[nodes9-True-expected_edges9]": 0.004678999999896405, "tests/unit/repo/test_open_repo.py::test_hook_is_called": 4.525591000000077, "tests/unit/repo/test_open_repo.py::test_subrepo_is_constructed_properly[False]": 0.9076153000000886, "tests/unit/repo/test_open_repo.py::test_subrepo_is_constructed_properly[True]": 1.2559671999999864, "tests/unit/repo/test_repo.py::test_branch_config": 0.638178200000084, "tests/unit/repo/test_repo.py::test_dynamic_cache_initialization": 0.5202628000001823, "tests/unit/repo/test_repo.py::test_find_outs_by_path[dir\\\\subdir\\\\file]": 0.22287480000022697, "tests/unit/repo/test_repo.py::test_find_outs_by_path[dir\\\\subdir]": 0.23052469999993264, "tests/unit/repo/test_repo.py::test_find_outs_by_path[dir]": 0.2600753999997778, "tests/unit/repo/test_repo.py::test_find_outs_by_path_does_graph_checks": 0.22581250000007458, "tests/unit/repo/test_repo.py::test_is_dvc_internal": 0.12822430000005625, "tests/unit/repo/test_repo.py::test_locked": 0.0072508999999172374, "tests/unit/repo/test_repo.py::test_skip_graph_checks": 0.8591042000000471, "tests/unit/repo/test_repo.py::test_used_objs[dir\\\\subdir\\\\file]": 0.23300220000010086, "tests/unit/repo/test_repo.py::test_used_objs[dir\\\\subdir]": 0.23801000000003114, "tests/unit/repo/test_reproduce.py::test_active_graph": 0.003997900000058507, "tests/unit/repo/test_reproduce.py::test_number_reproduces": 0.4025128999999197, "tests/unit/repo/test_reproduce.py::test_repro_plan": 0.004954800000177784, "tests/unit/repo/test_scm_context.py::test_ignore[no_scm]": 0.004981300000054034, "tests/unit/repo/test_scm_context.py::test_ignore[scm]": 0.005258500000081767, "tests/unit/repo/test_scm_context.py::test_ignore_remove[no_scm]": 0.005109800000127507, "tests/unit/repo/test_scm_context.py::test_ignore_remove[scm]": 0.0052145999998174375, "tests/unit/repo/test_scm_context.py::test_scm_context_autostage_changed_files[no_scm]": 0.0064303000001473265, "tests/unit/repo/test_scm_context.py::test_scm_context_autostage_changed_files[scm]": 0.005826300000080664, "tests/unit/repo/test_scm_context.py::test_scm_context_clears_ignores_on_error[no_scm]": 0.005321699999967677, "tests/unit/repo/test_scm_context.py::test_scm_context_clears_ignores_on_error[scm]": 0.0055414000000837405, "tests/unit/repo/test_scm_context.py::test_scm_context_decorator[no_scm]": 0.005799300000035146, "tests/unit/repo/test_scm_context.py::test_scm_context_decorator[scm]": 0.006207899999935762, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[no_scm-False-False]": 0.004690799999934825, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[no_scm-False-True]": 0.004631500000186861, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[no_scm-True-False]": 0.0046300999999857595, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[no_scm-True-True]": 0.004604500000141343, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[scm-False-False]": 0.004875800000036179, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[scm-False-True]": 0.004849700000249868, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[scm-True-False]": 0.0048351000000366184, "tests/unit/repo/test_scm_context.py::test_scm_context_on_no_files_to_track[scm-True-True]": 0.004896400000006906, "tests/unit/repo/test_scm_context.py::test_scm_context_remind_disable[no_scm]": 0.004462099999727798, "tests/unit/repo/test_scm_context.py::test_scm_context_remind_disable[scm]": 0.004766199999721721, "tests/unit/repo/test_scm_context.py::test_scm_context_remind_to_track[no_scm-False]": 0.004654299999856448, "tests/unit/repo/test_scm_context.py::test_scm_context_remind_to_track[no_scm-True]": 0.004695799999808514, "tests/unit/repo/test_scm_context.py::test_scm_context_remind_to_track[scm-False]": 0.006858499999907508, "tests/unit/repo/test_scm_context.py::test_scm_context_remind_to_track[scm-True]": 0.004867899999680958, "tests/unit/repo/test_scm_context.py::test_scm_context_reset_on_exit[no_scm]": 0.005056499999909647, "tests/unit/repo/test_scm_context.py::test_scm_context_reset_on_exit[scm]": 0.005627999999887834, "tests/unit/repo/test_scm_context.py::test_scm_track_changed_files[no_scm]": 0.005414800000380637, "tests/unit/repo/test_scm_context.py::test_scm_track_changed_files[scm]": 0.0056264999998347776, "tests/unit/repo/test_scm_context.py::test_scm_track_file[no_scm]": 0.005126499999960288, "tests/unit/repo/test_scm_context.py::test_scm_track_file[scm]": 0.0051109000000906235, "tests/unit/scm/test_scm.py::test_iter_revs": 1.9997329999998783, "tests/unit/stage/test_cache.py::test_shared_stage_cache": 0.32890530000008766, "tests/unit/stage/test_cache.py::test_stage_cache": 0.4478663999998389, "tests/unit/stage/test_cache.py::test_stage_cache_params": 0.4387864000002537, "tests/unit/stage/test_cache.py::test_stage_cache_wdir": 0.43086459999994986, "tests/unit/stage/test_cache.py::test_unhashable[kwargs0]": 0.13933509999992566, "tests/unit/stage/test_cache.py::test_unhashable[kwargs1]": 0.15753200000017387, "tests/unit/stage/test_cache.py::test_unhashable[kwargs2]": 0.1639799000001858, "tests/unit/stage/test_cache.py::test_unhashable[kwargs3]": 0.13701670000000377, "tests/unit/stage/test_cache.py::test_unhashable[kwargs4]": 0.18883580000010625, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_deps_outs": 0.1840856999999687, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_dos2unix": 0.16062810000016725, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_empty_data": 0.13230139999996027, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_missing_checksums": 0.13909800000010364, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_missing_params_section": 0.1985528999998678, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_outs_isexec": 0.17040280000014718, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_params": 0.19260850000000573, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_use_appropriate_checksum": 0.31557760000009694, "tests/unit/stage/test_loader_pipeline_file.py::test_fill_from_lock_with_missing_sections": 0.16610119999995732, "tests/unit/stage/test_loader_pipeline_file.py::test_load_changed_command": 0.12378579999995054, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage": 0.1506573000001481, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_cmd_with_list": 0.13581310000017766, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_mapping": 0.16256889999999657, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_no_lock": 0.15486989999999423, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_outs_with_flags": 0.15815199999974539, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_wdir_and_path_correctly": 0.1253830000000562, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_with_metrics_and_plots[metrics]": 0.14104959999986022, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_with_metrics_and_plots[plots]": 0.1346588999999767, "tests/unit/stage/test_loader_pipeline_file.py::test_load_stage_with_params": 0.13948459999983243, "tests/unit/stage/test_run.py::test_run_stage_dry[cmd1-expected1]": 0.13949279999997088, "tests/unit/stage/test_run.py::test_run_stage_dry[mycmd arg1 arg2-expected0]": 0.13452050000000781, "tests/unit/stage/test_serialize_pipeline_file.py::test_always_changed": 0.13004399999999805, "tests/unit/stage/test_serialize_pipeline_file.py::test_cmd": 0.14637320000019827, "tests/unit/stage/test_serialize_pipeline_file.py::test_deps_sorted": 0.13880129999984092, "tests/unit/stage/test_serialize_pipeline_file.py::test_frozen": 0.15286340000011478, "tests/unit/stage/test_serialize_pipeline_file.py::test_order": 0.159932900000058, "tests/unit/stage/test_serialize_pipeline_file.py::test_order_deps_outs[None]": 0.18510999999989508, "tests/unit/stage/test_serialize_pipeline_file.py::test_order_deps_outs[deps]": 0.22124350000012782, "tests/unit/stage/test_serialize_pipeline_file.py::test_order_deps_outs[metrics]": 0.1904506000003039, "tests/unit/stage/test_serialize_pipeline_file.py::test_order_deps_outs[outs]": 0.1972204999999576, "tests/unit/stage/test_serialize_pipeline_file.py::test_order_deps_outs[params]": 0.17652300000008836, "tests/unit/stage/test_serialize_pipeline_file.py::test_order_deps_outs[plots]": 0.21205989999975827, "tests/unit/stage/test_serialize_pipeline_file.py::test_outs_and_outs_flags_are_sorted[metrics-extra1]": 0.14520010000001093, "tests/unit/stage/test_serialize_pipeline_file.py::test_outs_and_outs_flags_are_sorted[outs-extra2]": 0.1622485999998844, "tests/unit/stage/test_serialize_pipeline_file.py::test_outs_and_outs_flags_are_sorted[plots-extra0]": 0.16353909999997995, "tests/unit/stage/test_serialize_pipeline_file.py::test_outs_sorted": 0.14247219999992922, "tests/unit/stage/test_serialize_pipeline_file.py::test_params_file_sorted": 0.1458096999999725, "tests/unit/stage/test_serialize_pipeline_file.py::test_params_file_without_targets": 0.16316560000018399, "tests/unit/stage/test_serialize_pipeline_file.py::test_params_sorted": 0.14448880000009012, "tests/unit/stage/test_serialize_pipeline_file.py::test_plot_props": 0.14348180000001776, "tests/unit/stage/test_serialize_pipeline_file.py::test_wdir": 0.13083659999983865, "tests/unit/stage/test_serialize_pipeline_lock.py::test_dump_nondefault_hash": 0.295127599999887, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock": 0.18278179999970234, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_deps": 0.1810011000002305, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_deps_order": 0.19974980000006326, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs[metrics]": 0.15444040000011228, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs[outs]": 0.13414199999965604, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs[plots]": 0.14159519999998338, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs_isexec[metrics]": 0.13434350000011364, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs_isexec[outs]": 0.14570949999983895, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs_isexec[plots]": 0.13978499999984706, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs_order[metrics]": 0.1530977999998413, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs_order[outs]": 0.15072440000017195, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_outs_order[plots]": 0.14244639999969877, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_params": 0.19224449999978788, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_params_file_sorted": 0.16011409999987336, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_params_no_values_filled": 0.14611429999990833, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_params_without_targets[None-expected0]": 0.17541849999997794, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_params_without_targets[info1-expected1]": 0.13082460000009632, "tests/unit/stage/test_serialize_pipeline_lock.py::test_lock_params_without_targets[info2-expected2]": 0.13176380000027166, "tests/unit/stage/test_serialize_pipeline_lock.py::test_order": 0.1418648999999732, "tests/unit/stage/test_serialize_pipeline_lock.py::test_to_lockfile": 0.16397269999993114, "tests/unit/stage/test_serialize_pipeline_lock.py::test_to_single_stage_lockfile_cloud_versioning_dir": 0.1574033000001691, "tests/unit/stage/test_stage.py::test_always_changed": 0.1821055000002616, "tests/unit/stage/test_stage.py::test_external_outs": 0.16749239999990095, "tests/unit/stage/test_stage.py::test_meta_ignored": 0.004416700000092533, "tests/unit/stage/test_stage.py::test_path_conversion": 0.13386209999998755, "tests/unit/stage/test_stage.py::test_stage_checksum": 0.004756299999826297, "tests/unit/stage/test_stage.py::test_stage_run_ignore_sigint": 0.15540309999983037, "tests/unit/stage/test_stage.py::test_stage_update": 0.16005749999999352, "tests/unit/stage/test_stage.py::test_wdir_default_ignored": 0.004468200000019351, "tests/unit/stage/test_stage.py::test_wdir_non_default_is_not_ignored": 0.004455800000187082, "tests/unit/stage/test_utils.py::test_get_stage_files": 0.43559189999996306, "tests/unit/stage/test_utils.py::test_get_stage_files_wdir": 0.36742880000019795, "tests/unit/stage/test_utils.py::test_resolve_paths": 0.003733799999963594, "tests/unit/test_analytics.py::test_collect_and_send_report": 0.033919500000138214, "tests/unit/test_analytics.py::test_is_enabled[config0-True]": 0.17716590000009091, "tests/unit/test_analytics.py::test_is_enabled[config1-False]": 0.1375153000001319, "tests/unit/test_analytics.py::test_is_enabled[config2-True]": 0.13800270000024284, "tests/unit/test_analytics.py::test_is_enabled[config3-True]": 0.12800289999995584, "tests/unit/test_analytics.py::test_is_enabled[config4-False]": 0.11623309999981757, "tests/unit/test_analytics.py::test_is_enabled_env_neg[None-None-True]": 0.1333523000000696, "tests/unit/test_analytics.py::test_is_enabled_env_neg[None-false-False]": 0.12022549999983312, "tests/unit/test_analytics.py::test_is_enabled_env_neg[None-true-False]": 0.12543059999984507, "tests/unit/test_analytics.py::test_is_enabled_env_neg[false-None-False]": 0.1427845000000616, "tests/unit/test_analytics.py::test_is_enabled_env_neg[false-false-False]": 0.13364479999995638, "tests/unit/test_analytics.py::test_is_enabled_env_neg[false-true-False]": 0.13754279999989194, "tests/unit/test_analytics.py::test_is_enabled_env_neg[true-None-True]": 0.13801170000010643, "tests/unit/test_analytics.py::test_is_enabled_env_neg[true-false-False]": 0.1709238999999343, "tests/unit/test_analytics.py::test_is_enabled_env_neg[true-true-False]": 0.12370190000001458, "tests/unit/test_analytics.py::test_runtime_info": 0.12920549999989817, "tests/unit/test_analytics.py::test_send": 0.10222620000013194, "tests/unit/test_analytics.py::test_system_info": 0.004068200000119759, "tests/unit/test_api.py::test_open_raises_error_if_no_context": 0.1751347999997961, "tests/unit/test_api.py::test_open_rev_raises_error_on_wrong_mode": 0.18360870000014984, "tests/unit/test_collect.py::test_collect_duplicates": 0.26829430000020693, "tests/unit/test_compare.py::test_diff_default": 0.004596500000161541, "tests/unit/test_compare.py::test_diff_falsey_values": 0.003511599999910686, "tests/unit/test_compare.py::test_diff_list[composite0-[2, 3]]": 0.0037557999999080494, "tests/unit/test_compare.py::test_diff_list[composite1-{'foo': 3, 'bar': 3}]": 0.0036715999999614723, "tests/unit/test_compare.py::test_diff_mocked[False]": 0.00486189999992348, "tests/unit/test_compare.py::test_diff_mocked[True]": 0.005840999999918495, "tests/unit/test_compare.py::test_diff_new": 0.003453799999988405, "tests/unit/test_compare.py::test_diff_old_deleted": 0.0035772999999608146, "tests/unit/test_compare.py::test_diff_sorted": 0.003653499999700216, "tests/unit/test_compare.py::test_diff_table[Metric]": 0.004011100000298029, "tests/unit/test_compare.py::test_diff_table[Param]": 0.0034849999999551073, "tests/unit/test_compare.py::test_diff_table_precision": 0.0033272000000579283, "tests/unit/test_compare.py::test_diff_table_rounding": 0.003433800000266274, "tests/unit/test_compare.py::test_diff_table_with_value_column": 0.0034550999998828047, "tests/unit/test_compare.py::test_diff_unsupported_diff_message[extra0-no diff]": 0.0036456999998790707, "tests/unit/test_compare.py::test_diff_unsupported_diff_message[extra1--]": 0.0036821000001054927, "tests/unit/test_compare.py::test_do_not_show_changes": 0.0034590999998727057, "tests/unit/test_compare.py::test_metrics_diff_md": 0.004767900000160807, "tests/unit/test_compare.py::test_metrics_show_default": 0.004823699999633391, "tests/unit/test_compare.py::test_metrics_show_markdown": 0.006294600000273931, "tests/unit/test_compare.py::test_metrics_show_mocked[False]": 0.0048413999998047075, "tests/unit/test_compare.py::test_metrics_show_mocked[True]": 0.0048140999999759515, "tests/unit/test_compare.py::test_metrics_show_precision": 0.003947599999719387, "tests/unit/test_compare.py::test_metrics_show_with_different_metrics_header": 0.0037142000003314024, "tests/unit/test_compare.py::test_metrics_show_with_multiple_revision": 0.0037491000000500208, "tests/unit/test_compare.py::test_metrics_show_with_no_revision": 0.003680699999904391, "tests/unit/test_compare.py::test_metrics_show_with_non_dict_values": 0.003496899999845482, "tests/unit/test_compare.py::test_metrics_show_with_one_revision_multiple_paths": 0.003716999999824111, "tests/unit/test_compare.py::test_metrics_show_with_valid_falsey_values": 0.0035393000000567554, "tests/unit/test_compare.py::test_no_path": 0.0033435000000281434, "tests/unit/test_config.py::test_feature_section_supports_arbitrary_values": 0.005893000000014581, "tests/unit/test_config.py::test_get_fs": 0.08485560000031, "tests/unit/test_config.py::test_load_configob_error": 0.151444900000115, "tests/unit/test_config.py::test_load_unicode_error": 0.20792520000009063, "tests/unit/test_config.py::test_resolve[../cache-D:\\\\a\\\\dvc\\\\dvc\\\\cache]": 0.0039029999998092535, "tests/unit/test_config.py::test_resolve[D:\\\\a\\\\dvc\\\\dvc-D:\\\\a\\\\dvc\\\\dvc]": 0.0036580000000867585, "tests/unit/test_config.py::test_resolve[cache-D:\\\\a\\\\dvc\\\\dvc\\\\conf_dir\\\\cache]": 0.003570000000308937, "tests/unit/test_config.py::test_resolve[dir/cache-D:\\\\a\\\\dvc\\\\dvc\\\\conf_dir\\\\dir\\\\cache]": 0.0036769000000731467, "tests/unit/test_config.py::test_resolve[ssh://some/path-ssh://some/path]": 0.0035961999999472027, "tests/unit/test_config.py::test_resolve_homedir": 0.0036099000001286186, "tests/unit/test_config.py::test_s3_ssl_verify": 0.14650280000000748, "tests/unit/test_config.py::test_to_relpath[..\\\\cache-../../cache]": 0.0038163999997777864, "tests/unit/test_config.py::test_to_relpath[D:\\\\a\\\\dvc\\\\dvc-D:\\\\a\\\\dvc\\\\dvc]": 0.003559499999937543, "tests/unit/test_config.py::test_to_relpath[cache-../cache]": 0.0038970000000517757, "tests/unit/test_config.py::test_to_relpath[ssh://some/path-ssh://some/path]": 0.003644000000122105, "tests/unit/test_context.py::test_clone": 0.005925200000092445, "tests/unit/test_context.py::test_context": 0.0037342000000535336, "tests/unit/test_context.py::test_context_dict_ignores_keys_except_str": 0.003621500000008382, "tests/unit/test_context.py::test_context_list": 0.0036347000002479035, "tests/unit/test_context.py::test_context_setitem_getitem": 0.004147799999827839, "tests/unit/test_context.py::test_load_from": 0.01075610000020788, "tests/unit/test_context.py::test_load_from_raises_if_file_is_directory": 0.12890109999989363, "tests/unit/test_context.py::test_load_from_raises_if_file_not_exist": 0.13567880000050536, "tests/unit/test_context.py::test_loop_context": 0.0036622000000079424, "tests/unit/test_context.py::test_merge_dict": 0.003959100000201943, "tests/unit/test_context.py::test_merge_list": 0.003910200000063924, "tests/unit/test_context.py::test_node_value": 0.004252100000030623, "tests/unit/test_context.py::test_overwrite_with_setitem": 0.003552399999989575, "tests/unit/test_context.py::test_repr": 0.003907500000195796, "tests/unit/test_context.py::test_resolve_resolves_boolean_value": 0.005912699999726101, "tests/unit/test_context.py::test_resolve_resolves_dict_keys": 0.00771279999980834, "tests/unit/test_context.py::test_select": 0.004463799999939511, "tests/unit/test_context.py::test_select_unwrap": 0.004021400000056019, "tests/unit/test_context.py::test_track": 0.021102499999869906, "tests/unit/test_context.py::test_track_from_multiple_files": 0.024009399999840753, "tests/unit/test_daemon.py::test_daemon": 0.0155182999999397, "tests/unit/test_daemon.py::test_no_recursive_spawn": 0.010640700000067227, "tests/unit/test_dirs.py::test_global_config_dir_respects_env_var": 0.0050538000000415195, "tests/unit/test_dvcfile.py::test_dump_stage": 0.1760260000000926, "tests/unit/test_dvcfile.py::test_dvcfile_encoding_error": 0.11111770000002252, "tests/unit/test_dvcfile.py::test_pipelines_file[../models/pipelines.yml]": 0.00363799999990988, "tests/unit/test_dvcfile.py::test_pipelines_file[custom-pipelines.yaml]": 0.003655600000229242, "tests/unit/test_dvcfile.py::test_pipelines_file[custom-pipelines.yml]": 0.003573400000050242, "tests/unit/test_dvcfile.py::test_pipelines_file[pipelines.yaml]": 0.004252900000210502, "tests/unit/test_dvcfile.py::test_pipelines_file[pipelines.yml]": 0.004090399999995498, "tests/unit/test_dvcfile.py::test_pipelines_single_stage_file[../models/stage.dvc]": 0.004619099999899845, "tests/unit/test_dvcfile.py::test_pipelines_single_stage_file[Dvcfile]": 0.0036266999998133542, "tests/unit/test_dvcfile.py::test_pipelines_single_stage_file[stage.dvc]": 0.00351099999966209, "tests/unit/test_dvcfile.py::test_stage_load_file_exists_but_dvcignored[dvc.yaml]": 0.17553799999996045, "tests/unit/test_dvcfile.py::test_stage_load_file_exists_but_dvcignored[stage.dvc]": 0.16315370000006624, "tests/unit/test_dvcfile.py::test_stage_load_on_invalid_data[dvc.yaml]": 0.1786199000000579, "tests/unit/test_dvcfile.py::test_stage_load_on_invalid_data[stage.dvc]": 0.17214519999970435, "tests/unit/test_dvcfile.py::test_stage_load_on_non_file[dvc.yaml]": 0.1911176999997224, "tests/unit/test_dvcfile.py::test_stage_load_on_non_file[stage.dvc]": 0.16595649999976558, "tests/unit/test_dvcfile.py::test_stage_load_on_not_existing_file[False-dvc.yaml]": 0.1650908999999956, "tests/unit/test_dvcfile.py::test_stage_load_on_not_existing_file[False-stage.dvc]": 0.17084939999972448, "tests/unit/test_dvcfile.py::test_stage_load_on_not_existing_file[True-dvc.yaml]": 0.17394500000000335, "tests/unit/test_dvcfile.py::test_stage_load_on_not_existing_file[True-stage.dvc]": 0.14360230000011143, "tests/unit/test_dvcfile.py::test_try_loading_dvcfile_that_is_gitignored[dvc.yaml]": 0.16512570000008964, "tests/unit/test_dvcfile.py::test_try_loading_dvcfile_that_is_gitignored[foo.dvc]": 0.14629939999986163, "tests/unit/test_hashinfo.py::test_as_raw": 0.0038465999998607003, "tests/unit/test_ignore.py::test_match_ignore_from_file[ to_ignore-patterns5-False]": 0.006561899999951493, "tests/unit/test_ignore.py::test_match_ignore_from_file[ to_ignore-patterns6-True]": 0.007623000000194224, "tests/unit/test_ignore.py::test_match_ignore_from_file[!to_ignore.txt-patterns10-True]": 0.007035800000039671, "tests/unit/test_ignore.py::test_match_ignore_from_file[#to_ignore-patterns3-True]": 0.007036199999674864, "tests/unit/test_ignore.py::test_match_ignore_from_file[#to_ignore-patterns4-False]": 0.006590999999843916, "tests/unit/test_ignore.py::test_match_ignore_from_file[.git\\\\file.txt-patterns25-True]": 0.00703879999991841, "tests/unit/test_ignore.py::test_match_ignore_from_file[2ile.txt-patterns32-False]": 0.006501600000092367, "tests/unit/test_ignore.py::test_match_ignore_from_file[\\\\full\\\\path\\\\to\\\\ignore\\\\file\\\\to_ignore-patterns15-True]": 0.0076676999997289386, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\.dvc\\\\file.txt-patterns26-True]": 0.00679479999985233, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\file-patterns12-False]": 0.007175299999971685, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\file-patterns13-True]": 0.007030900000017937, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\file.txt-patterns18-True]": 0.007021999999778927, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\file.txt-patterns20-True]": 0.0077042999998866435, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\file.txt-patterns46-True]": 0.006923100000221893, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\p\\\\file.txt-patterns47-False]": 0.00848039999982575, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\path-patterns24-False]": 0.008022099999834609, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\subdir\\\\file.txt-patterns19-True]": 0.00679809999974168, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\subdir\\\\file.txt-patterns21-True]": 0.00670669999999518, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\subdir\\\\file.txt-patterns22-True]": 0.006637000000182525, "tests/unit/test_ignore.py::test_match_ignore_from_file[data\\\\subdir\\\\file.txt-patterns23-False]": 0.006796199999826058, "tests/unit/test_ignore.py::test_match_ignore_from_file[dont_ignore.txt-patterns1-False]": 0.007163100000070699, "tests/unit/test_ignore.py::test_match_ignore_from_file[fi/e.txt-patterns30-False]": 0.00652780000018538, "tests/unit/test_ignore.py::test_match_ignore_from_file[file-patterns11-True]": 0.007933799999818802, "tests/unit/test_ignore.py::test_match_ignore_from_file[file.txt-patterns28-True]": 0.006892299999890383, "tests/unit/test_ignore.py::test_match_ignore_from_file[file.txt-patterns29-True]": 0.0077467999999498716, "tests/unit/test_ignore.py::test_match_ignore_from_file[file.txt-patterns31-True]": 0.006814599999870552, "tests/unit/test_ignore.py::test_match_ignore_from_file[other\\\\data\\\\file-patterns14-False]": 0.006615400000328009, "tests/unit/test_ignore.py::test_match_ignore_from_file[path\\\\to_ignore.txt-patterns17-False]": 0.006943200000023353, "tests/unit/test_ignore.py::test_match_ignore_from_file[path\\\\to_ignore.txt-patterns44-False]": 0.0071652999999969325, "tests/unit/test_ignore.py::test_match_ignore_from_file[path\\\\to_ignore.txt-patterns45-True]": 0.00705799999991541, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\p\\\\p2\\\\to_ignore-patterns33-True]": 0.007391700000198398, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\p\\\\p2\\\\to_ignore-patterns34-True]": 0.006901199999902019, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\p\\\\p2\\\\to_ignore-patterns36-True]": 0.00679960000002211, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\p\\\\p2\\\\to_ignore-patterns37-False]": 0.006791200000179742, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\p\\\\p2\\\\to_ignore-patterns40-True]": 0.006612099999983911, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\p\\\\to_ignore-patterns39-True]": 0.006811799999923096, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\path\\\\path2\\\\dont_ignore-patterns35-False]": 0.006664599999794518, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\path\\\\path2\\\\dont_ignore-patterns38-True]": 0.0074474000000464, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\path\\\\path2\\\\dont_ignore-patterns41-False]": 0.0064676999998027895, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\path\\\\path2\\\\dont_ignore-patterns42-False]": 0.007750099999611848, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\path\\\\path2\\\\to_ignore-patterns27-False]": 0.006933299999900555, "tests/unit/test_ignore.py::test_match_ignore_from_file[rel\\\\path\\\\path2\\\\to_ignore-patterns48-False]": 0.0072572999999920285, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore-patterns0-True]": 0.007687200000191297, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore-patterns2-True]": 0.00741150000021662, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore.txt-patterns16-True]": 0.007188699999915116, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore.txt-patterns43-True]": 0.007081200000357057, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore.txt-patterns7-True]": 0.006782300000168107, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore.txt-patterns8-False]": 0.008190399999648434, "tests/unit/test_ignore.py::test_match_ignore_from_file[to_ignore.txt-patterns9-True]": 0.007188999999698353, "tests/unit/test_ignore.py::test_should_ignore_dir[.dvc-]": 0.003738300000122763, "tests/unit/test_ignore.py::test_should_ignore_dir[.dvc-dir]": 0.0037137999997867155, "tests/unit/test_ignore.py::test_should_ignore_dir[.git-]": 0.004464200000256824, "tests/unit/test_ignore.py::test_should_ignore_dir[.git-dir]": 0.0037531999996645027, "tests/unit/test_ignore.py::test_should_ignore_dir[.hg-]": 0.0037776000001485954, "tests/unit/test_ignore.py::test_should_ignore_dir[.hg-dir]": 0.0037257000001318374, "tests/unit/test_imports.py::test_no_remote_imports": 0.09562540000001718, "tests/unit/test_info.py::test_caches": 0.2690287000002627, "tests/unit/test_info.py::test_fs_info_in_repo": 0.3141158000003088, "tests/unit/test_info.py::test_fs_info_outside_of_repo": 0.0716359000000466, "tests/unit/test_info.py::test_info_in_broken_git_repo": 0.2816538000001856, "tests/unit/test_info.py::test_info_in_repo[False]": 0.39633419999995567, "tests/unit/test_info.py::test_info_in_repo[True]": 1.6630297999997765, "tests/unit/test_info.py::test_info_in_subdir": 0.4202313000000686, "tests/unit/test_info.py::test_info_outside_of_repo": 0.07112589999974261, "tests/unit/test_info.py::test_plugin_versions": 0.24081580000006397, "tests/unit/test_info.py::test_remotes": 0.32117399999992813, "tests/unit/test_info.py::test_remotes_empty": 0.3108306999999968, "tests/unit/test_interpolate.py::test_escape[Great shot kid, that was \\\\${value} in a ${value}-Great shot kid, that was ${value} in a value]": 0.003911600000037652, "tests/unit/test_interpolate.py::test_escape[May the \\\\${value} be with you-May the ${value} be with you]": 0.0035144999997100967, "tests/unit/test_interpolate.py::test_escape[Month of \\\\${value}-Month of ${value}]": 0.003654400000186797, "tests/unit/test_interpolate.py::test_escape[\\\\${ value } days-${ value } days]": 0.0034967999997661536, "tests/unit/test_interpolate.py::test_escape[\\\\${ value }-${ value }]": 0.003624200000103883, "tests/unit/test_interpolate.py::test_escape[\\\\${value}-${value}]": 0.00351009999985763, "tests/unit/test_interpolate.py::test_resolve_collection": 0.006243999999924199, "tests/unit/test_interpolate.py::test_resolve_primitive_values[-${ item }-item]": 0.004020400000172231, "tests/unit/test_interpolate.py::test_resolve_primitive_values[-${value}-value]": 0.003885999999965861, "tests/unit/test_interpolate.py::test_resolve_primitive_values[0_0-${ item }-item]": 0.003973599999881117, "tests/unit/test_interpolate.py::test_resolve_primitive_values[0_0-${value}-value]": 0.004023799999686162, "tests/unit/test_interpolate.py::test_resolve_primitive_values[0_1-${ item }-item]": 0.004107700000076875, "tests/unit/test_interpolate.py::test_resolve_primitive_values[0_1-${value}-value]": 0.003916500000059386, "tests/unit/test_interpolate.py::test_resolve_primitive_values[12-${ item }-item]": 0.003985800000009476, "tests/unit/test_interpolate.py::test_resolve_primitive_values[12-${value}-value]": 0.004028799999787225, "tests/unit/test_interpolate.py::test_resolve_primitive_values[123-${ item }-item]": 0.0040129999999862775, "tests/unit/test_interpolate.py::test_resolve_primitive_values[123-${value}-value]": 0.004017700000076729, "tests/unit/test_interpolate.py::test_resolve_primitive_values[3.141592653589793-${ item }-item]": 0.003979100000151448, "tests/unit/test_interpolate.py::test_resolve_primitive_values[3.141592653589793-${value}-value]": 0.004051200000048993, "tests/unit/test_interpolate.py::test_resolve_primitive_values[30000.0-${ item }-item]": 0.004006899999922098, "tests/unit/test_interpolate.py::test_resolve_primitive_values[30000.0-${value}-value]": 0.004021100000045408, "tests/unit/test_interpolate.py::test_resolve_primitive_values[False-${ item }-item]": 0.003932200000008379, "tests/unit/test_interpolate.py::test_resolve_primitive_values[False-${value}-value]": 0.003958599999805301, "tests/unit/test_interpolate.py::test_resolve_primitive_values[Foobar-${ item }-item]": 0.004025900000215188, "tests/unit/test_interpolate.py::test_resolve_primitive_values[Foobar-${value}-value]": 0.004651299999977709, "tests/unit/test_interpolate.py::test_resolve_primitive_values[None-${ item }-item]": 0.004000000000132786, "tests/unit/test_interpolate.py::test_resolve_primitive_values[None-${value}-value]": 0.003897699999924953, "tests/unit/test_interpolate.py::test_resolve_primitive_values[True-${ item }-item]": 0.0040805000001000735, "tests/unit/test_interpolate.py::test_resolve_primitive_values[True-${value}-value]": 0.004538399999773901, "tests/unit/test_interpolate.py::test_resolve_primitive_values[inf-${ item }-item]": 0.003844300000309886, "tests/unit/test_interpolate.py::test_resolve_primitive_values[inf-${value}-value]": 0.004028599999855942, "tests/unit/test_interpolate.py::test_resolve_primitives_dict_access": 0.005663499999855048, "tests/unit/test_interpolate.py::test_resolve_primitives_list_access": 0.00799919999985832, "tests/unit/test_interpolate.py::test_resolve_str": 0.004223900000170033, "tests/unit/test_interpolate.py::test_resolve_unicode": 0.005988900000147623, "tests/unit/test_lockfile.py::test_load_when_lockfile_does_not_exist": 0.11878550000005816, "tests/unit/test_lockfile.py::test_load_when_lockfile_is_corrupted[corrupt_data0]": 0.11560540000004949, "tests/unit/test_lockfile.py::test_load_when_lockfile_is_corrupted[corrupt_data1]": 0.1336421999999402, "tests/unit/test_lockfile.py::test_load_when_lockfile_is_corrupted[corrupt_data2]": 0.12180469999998422, "tests/unit/test_lockfile.py::test_load_when_lockfile_is_corrupted[corrupt_data3]": 0.12833260000002156, "tests/unit/test_lockfile.py::test_stage_dump_no_outs_deps": 0.14247329999989233, "tests/unit/test_lockfile.py::test_stage_dump_when_already_exists": 0.15514020000023265, "tests/unit/test_lockfile.py::test_stage_dump_with_deps_and_outs": 0.14595160000021679, "tests/unit/test_lockfile.py::test_stage_overwrites_if_already_exists": 0.14148910000017167, "tests/unit/test_lockfile.py::test_try_loading_lockfile_that_is_gitignored[False-False]": 0.15414799999985007, "tests/unit/test_lockfile.py::test_try_loading_lockfile_that_is_gitignored[False-True]": 0.15343560000019352, "tests/unit/test_lockfile.py::test_try_loading_lockfile_that_is_gitignored[True-False]": 0.13935349999997015, "tests/unit/test_lockfile.py::test_try_loading_lockfile_that_is_gitignored[True-True]": 0.14020170000003418, "tests/unit/test_logger.py::TestColorFormatter::test_debug": 0.005059300000084477, "tests/unit/test_logger.py::TestColorFormatter::test_error": 0.003906399999777932, "tests/unit/test_logger.py::TestColorFormatter::test_exc_info_on_other_record_types": 0.005675999999994019, "tests/unit/test_logger.py::TestColorFormatter::test_exception": 0.004515699999956269, "tests/unit/test_logger.py::TestColorFormatter::test_exception_under_verbose": 0.004960199999914039, "tests/unit/test_logger.py::TestColorFormatter::test_exception_with_description_and_message": 0.0041831000000911445, "tests/unit/test_logger.py::TestColorFormatter::test_exception_with_description_and_without_message": 0.004184900000154812, "tests/unit/test_logger.py::TestColorFormatter::test_info": 0.00401119999992261, "tests/unit/test_logger.py::TestColorFormatter::test_nested_exceptions": 0.005140400000072987, "tests/unit/test_logger.py::TestColorFormatter::test_progress_awareness": 0.005746700000145211, "tests/unit/test_logger.py::TestColorFormatter::test_tb_only": 0.0048854000001483655, "tests/unit/test_logger.py::TestColorFormatter::test_warning": 0.004090800000085437, "tests/unit/test_logger.py::test_add_existing_level": 0.004684700000098019, "tests/unit/test_logger.py::test_handlers": 0.003505800000311865, "tests/unit/test_logger.py::test_info_with_debug_loglevel_shows_no_datetime": 0.0048177999997278675, "tests/unit/test_logger.py::test_logging_debug_with_datetime": 0.005303899999944406, "tests/unit/test_metrics.py::test_metrics_order": 0.2618385999999191, "tests/unit/test_params.py::test_params_order": 0.24566819999972722, "tests/unit/test_params.py::test_repro_unicode": 0.22142780000012863, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[ space-/dir-dir/**/space]": 0.01486069999987194, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[!include-/dir-!/dir/**/include]": 0.013259799999786992, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[#comment-/dir-#comment]": 0.016021900000168898, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[***/file.txt-/dir-dir/***/file.txt]": 0.012832699999989927, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[***file-/dir-dir/**/***file]": 0.013109799999710958, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[**/foo-/dir-dir/**/foo]": 0.013117799999918134, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[**/foo/bar-/dir-dir/**/foo/bar]": 0.01453029999993305, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[*aste*risk*-/dir-dir/**/*aste*risk*]": 0.013277600000037637, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[/***.txt-/dir-dir/***.txt]": 0.013214099999913742, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[/separator.txt-/dir-dir/separator.txt]": 0.012841600000001563, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[?fi?le?-/dir-dir/**/?fi?le?]": 0.013020799999821975, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[[a-zA-Z]file[a-zA-Z]-/dir-dir/**/[a-zA-Z]file[a-zA-Z]]": 0.01323380000008001, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[\\\\ space-/dir-dir/**/ space]": 0.013491599999724713, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[\\\\!important!.txt-/dir-dir/**/!important!.txt]": 0.013096599999926184, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[\\\\#hash-/#dir-#dir/**/#hash]": 0.016997200000105295, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[\\\\#hash-/dir-dir/**/#hash]": 0.014032099999894854, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[a/***/b-/dir-dir/a/***/b]": 0.014123800000106712, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[a/**/b-/dir-dir/a/**/b]": 0.013111100000060105, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[abc/**-/dir-dir/abc/**]": 0.013637900000276204, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[data/***-/dir-dir/data/***]": 0.012775599999940823, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[doc/fortz/-/dir-dir/doc/fortz/]": 0.016302199999927325, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[fortz/-/dir-dir/**/fortz/]": 0.013589400000000751, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[no_sep-/dir-dir/**/no_sep]": 0.01280029999998078, "tests/unit/test_pathspec_math.py::test_dvcignore_pattern_change_dir[subdir/separator.txt-/dir-dir/subdir/separator.txt]": 0.012839100000064718, "tests/unit/test_progress.py::test_default": 0.004811299999801122, "tests/unit/test_progress.py::test_quiet_logging": 0.004419799999823226, "tests/unit/test_progress.py::test_quiet_logging_disable_false": 0.004555699999855278, "tests/unit/test_progress.py::test_quiet_notty": 0.004390899999862086, "tests/unit/test_prompt.py::test_confirm_in_tty_if_stdin_is_closed": 0.0051822999998876185, "tests/unit/test_run.py::test_invalid_stage_names[copy$name]": 0.003373499999725027, "tests/unit/test_run.py::test_invalid_stage_names[copy-name?]": 0.0034620000001268636, "tests/unit/test_run.py::test_invalid_stage_names[copy-name@v1]": 0.0033856999998533865, "tests/unit/test_run.py::test_valid_stage_names[12]": 0.003457799999978306, "tests/unit/test_run.py::test_valid_stage_names[copy-name]": 0.003441499999780717, "tests/unit/test_run.py::test_valid_stage_names[copyName]": 0.003389200000128767, "tests/unit/test_run.py::test_valid_stage_names[copy_name]": 0.003440200000113691, "tests/unit/test_rwlock.py::test_broken_rwlock": 0.014477100000021892, "tests/unit/test_rwlock.py::test_corrupted_rwlock[False]": 0.01603619999991679, "tests/unit/test_rwlock.py::test_corrupted_rwlock[True]": 0.013812900000175432, "tests/unit/test_rwlock.py::test_rwlock": 0.020905200000242985, "tests/unit/test_rwlock.py::test_rwlock_edit_is_guarded": 0.09206210000024839, "tests/unit/test_rwlock.py::test_rwlock_reentrant": 0.022661599999764803, "tests/unit/test_rwlock.py::test_rwlock_subdirs": 0.023793199999772696, "tests/unit/test_scm.py::test_resolve_rev_empty_git_repo": 0.029855400000087684, "tests/unit/test_tabular_data.py::test_dict_like_interfaces": 0.0033276999999998225, "tests/unit/test_tabular_data.py::test_drop": 0.0033434999998007697, "tests/unit/test_tabular_data.py::test_drop_duplicates[cols-expected1-True]": 0.0036497000000963453, "tests/unit/test_tabular_data.py::test_drop_duplicates[cols-expected2-False]": 0.003721400000131325, "tests/unit/test_tabular_data.py::test_drop_duplicates[rows-expected0-True]": 0.004074500000115222, "tests/unit/test_tabular_data.py::test_drop_duplicates_invalid_axis": 0.003273099999887563, "tests/unit/test_tabular_data.py::test_drop_duplicates_rich_text": 0.003615700000182187, "tests/unit/test_tabular_data.py::test_drop_duplicates_subset[cols-subset2-expected2]": 0.0037198000002263143, "tests/unit/test_tabular_data.py::test_drop_duplicates_subset[rows-subset0-expected0]": 0.00396879999993871, "tests/unit/test_tabular_data.py::test_drop_duplicates_subset[rows-subset1-expected1]": 0.00402999999982967, "tests/unit/test_tabular_data.py::test_dropna[cols-all-data3-expected3]": 0.0043358999998872605, "tests/unit/test_tabular_data.py::test_dropna[cols-any-data2-expected2]": 0.003774799999746392, "tests/unit/test_tabular_data.py::test_dropna[rows-all-data1-expected1]": 0.0036873999997624196, "tests/unit/test_tabular_data.py::test_dropna[rows-any-data0-expected0]": 0.0037959999999657157, "tests/unit/test_tabular_data.py::test_dropna_invalid_axis": 0.00358570000025793, "tests/unit/test_tabular_data.py::test_dropna_subset[cols-expected0]": 0.003985100000363673, "tests/unit/test_tabular_data.py::test_dropna_subset[rows-expected1]": 0.003571299999975963, "tests/unit/test_tabular_data.py::test_fill_value": 0.0044410999998945044, "tests/unit/test_tabular_data.py::test_list_operations": 0.0036390999998729967, "tests/unit/test_tabular_data.py::test_protected": 0.0034229999998842686, "tests/unit/test_tabular_data.py::test_row_from_dict": 0.003386400000181311, "tests/unit/test_tabular_data.py::test_table_empty": 0.00446330000022499, "tests/unit/test_updater.py::test_check": 0.024595300000100906, "tests/unit/test_updater.py::test_check_fetches_on_invalid_data_format": 0.021974799999952666, "tests/unit/test_updater.py::test_check_refetches_each_day": 0.017732699999896795, "tests/unit/test_updater.py::test_check_update_respect_config[False]": 0.017301200000247263, "tests/unit/test_updater.py::test_check_update_respect_config[True]": 0.01794519999998556, "tests/unit/test_updater.py::test_check_updates[ahead]": 0.021424599999818383, "tests/unit/test_updater.py::test_check_updates[behind]": 0.0198830999997881, "tests/unit/test_updater.py::test_check_updates[uptodate]": 0.019249299999728464, "tests/unit/test_updater.py::test_fetch": 0.019140100000186067, "tests/unit/test_updater.py::test_is_enabled[config0-True]": 0.13130560000013247, "tests/unit/test_updater.py::test_is_enabled[config1-True]": 0.14342600000009043, "tests/unit/test_updater.py::test_is_enabled[config2-False]": 0.13593219999984285, "tests/unit/test_updater.py::test_notify_message[None-Find the latest release at https://github.com/treeverse/dvc/releases/latest.]": 0.014024399999925663, "tests/unit/test_updater.py::test_notify_message[binary-To upgrade, uninstall dvc and reinstall from https://dvc.org.]": 0.013217200000326557, "tests/unit/test_updater.py::test_notify_message[brew-To upgrade, run 'brew upgrade dvc'.]": 0.013467300000229443, "tests/unit/test_updater.py::test_notify_message[choco-To upgrade, run 'choco upgrade dvc'.]": 0.014645900000004985, "tests/unit/test_updater.py::test_notify_message[conda-To upgrade, run 'conda update dvc'.]": 0.01598150000017995, "tests/unit/test_updater.py::test_notify_message[deb-To upgrade, run 'apt-get install --only-upgrade dvc'.]": 0.014986099999987346, "tests/unit/test_updater.py::test_notify_message[exe-To upgrade, uninstall dvc and reinstall from https://dvc.org.]": 0.01401350000014645, "tests/unit/test_updater.py::test_notify_message[osxpkg-To upgrade, uninstall dvc and reinstall from https://dvc.org.]": 0.013980499999888707, "tests/unit/test_updater.py::test_notify_message[pip-To upgrade, run 'pip install --upgrade dvc'.]": 0.015155299999833005, "tests/unit/test_updater.py::test_notify_message[rpm-To upgrade, run 'yum update dvc'.]": 0.014036500000202068, "tests/unit/test_updater.py::test_notify_message[unknown-Find the latest release at https://github.com/treeverse/dvc/releases/latest.]": 0.01609110000003966, "tests/unit/ui/test_console.py::test_capsys_works": 0.003642499999841675, "tests/unit/ui/test_console.py::test_write": 0.004320600000255581, "tests/unit/ui/test_console.py::test_write_json[False-{\"hello\": \"world\", \"date\": \"1970-01-01 00:00:00\"}\\n]": 0.004433300000073359, "tests/unit/ui/test_console.py::test_write_json[True-{\\n \"hello\": \"world\",\\n \"date\": \"1970-01-01 00:00:00\"\\n}\\n]": 0.006361599999763712, "tests/unit/ui/test_pager.py::test_dvc_sets_default_options_on_less_without_less_env[DVC_PAGER]": 0.004813199999944118, "tests/unit/ui/test_pager.py::test_dvc_sets_default_options_on_less_without_less_env[None]": 0.004666300000053525, "tests/unit/ui/test_pager.py::test_dvc_sets_default_options_on_less_without_less_env[PAGER]": 0.005321299999877738, "tests/unit/ui/test_pager.py::test_dvc_sets_some_options_on_less_if_less_env_defined[DVC_PAGER]": 0.004765900000165857, "tests/unit/ui/test_pager.py::test_dvc_sets_some_options_on_less_if_less_env_defined[None]": 0.004783499999803098, "tests/unit/ui/test_pager.py::test_dvc_sets_some_options_on_less_if_less_env_defined[PAGER]": 0.005055099999935919, "tests/unit/ui/test_pager.py::test_find_pager_fails_to_find_any_pager": 0.005119300000160365, "tests/unit/ui/test_pager.py::test_find_pager_uses_custom_pager_when_dvc_pager_env_var_is_defined": 0.004193899999791029, "tests/unit/ui/test_pager.py::test_find_pager_uses_custom_pager_when_pager_env_is_defined": 0.004189700000324592, "tests/unit/ui/test_pager.py::test_find_pager_uses_default_pager_when_found": 0.004566800000020521, "tests/unit/ui/test_pager.py::test_find_pager_when_not_isatty": 0.0042246000000432105, "tests/unit/ui/test_pager.py::test_make_pager_when_no_pager_found": 0.003733799999963594, "tests/unit/ui/test_pager.py::test_pager": 0.005270399999744768, "tests/unit/ui/test_table.py::test_empty[False]": 0.003731199999947421, "tests/unit/ui/test_table.py::test_empty[True]": 0.004219100000000253, "tests/unit/ui/test_table.py::test_empty_markdown": 0.003875900000139154, "tests/unit/ui/test_table.py::test_plain": 0.004061899999896923, "tests/unit/ui/test_table.py::test_plain_headerless": 0.004709599999841885, "tests/unit/ui/test_table.py::test_plain_md": 0.003960700000334327, "tests/unit/ui/test_table.py::test_plain_pager": 0.004913799999940238, "tests/unit/ui/test_table.py::test_rich_border": 0.005841400000008434, "tests/unit/ui/test_table.py::test_rich_headerless": 0.005394500000193148, "tests/unit/ui/test_table.py::test_rich_pager": 0.0065830999999434425, "tests/unit/ui/test_table.py::test_rich_simple": 0.005705299999817726, "tests/unit/ui/test_table.py::test_rich_styles[extra_opts0]": 0.006005899999991016, "tests/unit/ui/test_table.py::test_rich_styles[extra_opts1]": 0.005567899999959991, "tests/unit/ui/test_table.py::test_rich_styles[extra_opts2]": 0.0056007999999110325, "tests/unit/utils/serialize/test_python.py::test_parse_invalid_types[CONSTRUCTOR = dict(a=1, b=2)]": 0.003520100000059756, "tests/unit/utils/serialize/test_python.py::test_parse_invalid_types[SUM = 1 + 2]": 0.003734900000381458, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[BOOL = True-result0]": 0.004876599999988684, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[DICT = {'a': 1, 'b': 2}-result4]": 0.0035950000001321314, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[FLOAT = 0.001-result2]": 0.0036241000002519286, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[INT = 5-result1]": 0.0037746000002698565, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[LIST = [1, 2, 3]-result5]": 0.0043877999999040185, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[NONE = None-result8]": 0.003579800000125033, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[SET = {1, 2, 3}-result6]": 0.003589599999713755, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[STR = 'abc'-result3]": 0.003801699999939956, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[TUPLE = (10, 100)-result7]": 0.003691700000217679, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[UNARY_OP = -1-result9]": 0.003852600000300299, "tests/unit/utils/serialize/test_python.py::test_parse_valid_types[class TrainConfig:\\n\\n EPOCHS = 70\\n\\n def __init__(self):\\n self.layers = 5\\n self.layers = 9 # TrainConfig.layers param will be 9\\n bar = 3 # Will NOT be found since it's locally scoped\\n -result10]": 0.0037390999998478947, "tests/unit/utils/serialize/test_toml.py::test_parse_toml_for_update": 0.004269399999657253, "tests/unit/utils/serialize/test_toml.py::test_parse_toml_type": 0.004482099999904676, "tests/unit/utils/serialize/test_toml.py::test_preserve_comments": 0.018339500000138287, "tests/unit/utils/serialize/test_yaml.py::test_parse_yaml_duplicate_key_error": 0.004337799999802883, "tests/unit/utils/serialize/test_yaml.py::test_parse_yaml_invalid_unicode": 0.017577299999857132, "tests/unit/utils/test_cli_parse.py::test_parse_params": 0.0034523000001627224, "tests/unit/utils/test_cli_parse.py::test_to_path_overrides[params0-expected0]": 0.003620999999839114, "tests/unit/utils/test_cli_parse.py::test_to_path_overrides[params1-expected1]": 0.0034564000004593254, "tests/unit/utils/test_cli_parse.py::test_to_path_overrides[params2-expected2]": 0.0035394000001360837, "tests/unit/utils/test_cli_parse.py::test_to_path_overrides[params3-expected3]": 0.003496000000041022, "tests/unit/utils/test_cli_parse.py::test_to_path_overrides[params4-expected4]": 0.0035584000002018, "tests/unit/utils/test_collections.py::test_apply_diff_is_inplace": 0.0033515000000079453, "tests/unit/utils/test_collections.py::test_apply_diff_mapping": 0.003440900000214242, "tests/unit/utils/test_collections.py::test_apply_diff_seq": 0.00329320000014377, "tests/unit/utils/test_collections.py::test_merge_dicts[changes0-expected0]": 0.004868100000294362, "tests/unit/utils/test_collections.py::test_merge_dicts[changes1-expected1]": 0.004610599999978149, "tests/unit/utils/test_collections.py::test_merge_dicts[changes2-expected2]": 0.00518589999978758, "tests/unit/utils/test_collections.py::test_merge_dicts[changes3-expected3]": 0.005508199999894714, "tests/unit/utils/test_collections.py::test_merge_dicts[changes4-expected4]": 0.005414699999846562, "tests/unit/utils/test_collections.py::test_merge_dicts[changes5-expected5]": 0.005224300000236326, "tests/unit/utils/test_collections.py::test_remove_missing_keys[changes0-expected0]": 0.004527299999836032, "tests/unit/utils/test_collections.py::test_remove_missing_keys[changes1-expected1]": 0.004726400000208741, "tests/unit/utils/test_collections.py::test_remove_missing_keys[changes2-expected2]": 0.004119200000104684, "tests/unit/utils/test_collections.py::test_to_omegaconf": 0.004031899999972666, "tests/unit/utils/test_executors.py::test_cancel_futures[False-False]": 2.7464563000000908, "tests/unit/utils/test_executors.py::test_cancel_futures[False-True]": 2.7359928000000764, "tests/unit/utils/test_executors.py::test_cancel_futures[True-False]": 0.11289850000025581, "tests/unit/utils/test_executors.py::test_cancel_futures[True-True]": 0.12021770000023935, "tests/unit/utils/test_executors.py::test_cancel_on_error_context_manager": 0.21685029999980543, "tests/unit/utils/test_fs.py::test_contains_symlink_case_sensitive_posix": 0.0011397000000670232, "tests/unit/utils/test_fs.py::test_contains_symlink_case_sensitive_win": 0.003489700000045559, "tests/unit/utils/test_fs.py::test_makedirs": 0.0147185000000718, "tests/unit/utils/test_fs.py::test_path_isin_case_sensitive": 0.0033009999997375417, "tests/unit/utils/test_fs.py::test_path_isin_on_common_substring_path": 0.003304300000309013, "tests/unit/utils/test_fs.py::test_path_isin_on_same_path": 0.00346199999989949, "tests/unit/utils/test_fs.py::test_path_isin_positive": 0.003388500000028216, "tests/unit/utils/test_fs.py::test_path_isin_with_absolute_path": 0.003385500000376851, "tests/unit/utils/test_fs.py::test_path_object_and_str_are_valid_arg_types": 0.004334300000209623, "tests/unit/utils/test_fs.py::test_relpath_windows_different_drives": 0.0035064999999576685, "tests/unit/utils/test_fs.py::test_remove": 0.01732960000026651, "tests/unit/utils/test_fs.py::test_should_call_recursive_on_no_condition_matched": 0.004912599999897793, "tests/unit/utils/test_fs.py::test_should_raise_exception_on_base_path_not_in_path": 0.0035533000000214088, "tests/unit/utils/test_fs.py::test_should_return_false_on_no_more_dirs_below_path": 0.004458399999975882, "tests/unit/utils/test_fs.py::test_should_return_false_on_path_eq_to_base_path": 0.0038337000000865373, "tests/unit/utils/test_fs.py::test_should_return_false_when_base_path_is_symlink": 0.0040107999998326704, "tests/unit/utils/test_fs.py::test_should_return_true_on_symlink_in_path": 0.00500249999981861, "tests/unit/utils/test_humanize.py::test_get_summary": 0.003476800000271396, "tests/unit/utils/test_humanize.py::test_truncate_text": 0.004332799999929193, "tests/unit/utils/test_humanize.py::test_truncate_text_smaller_than_max_length[False]": 0.0036585999996532337, "tests/unit/utils/test_humanize.py::test_truncate_text_smaller_than_max_length[True]": 0.0036007999999583262, "tests/unit/utils/test_plots.py::test_get_plot_id": 0.0035087999999632302, "tests/unit/utils/test_plots.py::test_group_definitions_by_id": 0.003671100000019578, "tests/unit/utils/test_studio.py::test_config_to_env": 0.0034047000001464767, "tests/unit/utils/test_studio.py::test_env_to_config": 0.0033028999998805375, "tests/unit/utils/test_studio.py::test_get_repo_url[None-None]": 1.1035554000002321, "tests/unit/utils/test_studio.py::test_get_repo_url[http://url-http://url]": 1.1347399999999652, "tests/unit/utils/test_studio.py::test_get_repo_url[origin-git@url]": 1.0518679999997858, "tests/unit/utils/test_studio.py::test_notify_refs[200-side_effect0]": 0.005626399999982823, "tests/unit/utils/test_studio.py::test_notify_refs[401-side_effect1]": 0.00575210000010884, "tests/unit/utils/test_studio.py::test_notify_refs[500-ValueError]": 0.005458200000020952, "tests/unit/utils/test_utils.py::test_dict_sha256[d0-f472eda60f09660a4750e8b3208cf90b3a3b24e5f42e0371d829710e9464d74a]": 0.004516400000284193, "tests/unit/utils/test_utils.py::test_dict_sha256[d1-a239b67073bd58affcdb81fff3305d1726c6e7f9c86f3d4fca0e92e8147dc7b0]": 81.51737459999981, "tests/unit/utils/test_utils.py::test_fix_env_pyenv[/orig/path1:/orig/path2-/orig/path1:/orig/path2]": 0.0011337999999341264, "tests/unit/utils/test_utils.py::test_fix_env_pyenv[/orig/path1:/orig/path2:/pyenv/bin:/pyenv/libexec-/orig/path1:/orig/path2:/pyenv/bin:/pyenv/libexec]": 0.0011357999997017032, "tests/unit/utils/test_utils.py::test_fix_env_pyenv[/pyenv/bin:/pyenv/libexec:/orig/path1:/orig/path2-/orig/path1:/orig/path2]": 0.0011476000001948705, "tests/unit/utils/test_utils.py::test_fix_env_pyenv[/pyenv/bin:/pyenv/libexec:/pyenv/plugins/plugin:/orig/path1:/orig/path2-/orig/path1:/orig/path2]": 0.0013505999997960316, "tests/unit/utils/test_utils.py::test_fix_env_pyenv[/pyenv/bin:/some/libexec:/pyenv/plugins/plugin:/orig/path1:/orig/path2-/orig/path1:/orig/path2]": 0.0011360999999396881, "tests/unit/utils/test_utils.py::test_hint_on_lockfile": 0.004755899999963731, "tests/unit/utils/test_utils.py::test_parse_target[../models/stage.dvc-out4-def]": 0.004768700000113313, "tests/unit/utils/test_utils.py::test_parse_target[../something.dvc:name-out7-None]": 0.003745400000070731, "tests/unit/utils/test_utils.py::test_parse_target[:build2@{'level': [1, 2, 3]}-out16-None]": 0.004095799999959127, "tests/unit/utils/test_utils.py::test_parse_target[:build@15-out11-None]": 0.0036861999999473483, "tests/unit/utils/test_utils.py::test_parse_target[:build@{'level': 35}-out12-None]": 0.0039848999999776424, "tests/unit/utils/test_utils.py::test_parse_target[:name-out2-None]": 0.003986399999803325, "tests/unit/utils/test_utils.py::test_parse_target[:name-out5-default]": 0.0037832000000435073, "tests/unit/utils/test_utils.py::test_parse_target[build2@{'level': [1, 2, 3]}-out15-None]": 0.003791099999943981, "tests/unit/utils/test_utils.py::test_parse_target[build@15-out9-None]": 0.003646100000196384, "tests/unit/utils/test_utils.py::test_parse_target[build@{'level': 35}-out10-None]": 0.003970599999775004, "tests/unit/utils/test_utils.py::test_parse_target[dvc.yaml-out0-None]": 0.004136300000027404, "tests/unit/utils/test_utils.py::test_parse_target[dvc.yaml:build2@{'level': [1, 2, 3]}-out17-None]": 0.004368599999907019, "tests/unit/utils/test_utils.py::test_parse_target[dvc.yaml:build@15-out13-None]": 0.00391149999973095, "tests/unit/utils/test_utils.py::test_parse_target[dvc.yaml:build@{'level': 35}-out14-None]": 0.0038666999998895335, "tests/unit/utils/test_utils.py::test_parse_target[dvc.yaml:name-out1-None]": 0.0038415000001350563, "tests/unit/utils/test_utils.py::test_parse_target[file-out8-None]": 0.003750200000240511, "tests/unit/utils/test_utils.py::test_parse_target[something.dvc:name-out6-None]": 0.003912399999990157, "tests/unit/utils/test_utils.py::test_parse_target[stage.dvc-out3-None]": 0.0037690999999995256, "tests/unit/utils/test_utils.py::test_relpath_windows": 0.0037197999999989406, "tests/unit/utils/test_utils.py::test_resolve_output[dir-None-False-dir]": 0.004356400000006033, "tests/unit/utils/test_utils.py::test_resolve_output[dir-other_dir-False-other_dir]": 0.004498799999737457, "tests/unit/utils/test_utils.py::test_resolve_output[dir-other_dir-True-other_dir\\\\dir]": 0.004664899999852423, "tests/unit/utils/test_utils.py::test_resolve_output[dir/-None-False-dir]": 0.004348000000163665, "tests/unit/utils/test_utils.py::test_resolve_output[target-None-False-target]": 0.004511699999738994, "tests/unit/utils/test_utils.py::test_resolve_output[target-dir-True-dir\\\\target]": 0.00443119999999908, "tests/unit/utils/test_utils.py::test_resolve_output[target-dir\\\\subdir-True-dir\\\\subdir\\\\target]": 0.004393299999946976, "tests/unit/utils/test_utils.py::test_resolve_output[target-file_target-False-file_target]": 0.0044926999996732775 } ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: "\U0001F41B Bug Report" about: Create a bug report to help us improve DVC --- # Bug Report ## Description ### Reproduce ### Expected ### Environment information **Output of `dvc doctor`:** ```console $ dvc doctor ``` **Additional Information (if any):** ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: "🤗 Need help?" url: https://dvc.org/chat about: If you have a question, ask us on Discord. Please join with this invite 👉 ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: "\U0001F680 Feature Request" about: Suggest an idea for this project --- ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ * [ ] ❗ I have followed the [Contributing to DVC](https://dvc.org/doc/user-guide/contributing/core) checklist. * [ ] 📖 If this PR requires [documentation](https://dvc.org/doc) updates, I have created a separate PR (or issue, at least) in [dvc.org](https://github.com/treeverse/dvc.org) and linked it here. Thank you for the contribution - we'll try to review it as soon as possible. 🙏 ================================================ FILE: .github/codecov.yml ================================================ codecov: notify: wait_for_ci: true coverage: status: project: default: target: auto threshold: 2% patch: off github_checks: annotations: false ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - directory: "/" package-ecosystem: "pip" schedule: interval: "daily" labels: - "maintenance" - directory: "/" package-ecosystem: "github-actions" schedule: interval: "daily" labels: - "maintenance" ================================================ FILE: .github/release.yml ================================================ changelog: exclude: labels: ["skip-changelog"] categories: - title: 🛠 Breaking Changes labels: ["breaking-change"] - title: 🚀 New Features and Enhancements labels: ["feature", "enhancement", "ui"] - title: ⚡ Optimizations labels: ["optimize", "performance"] - title: 🐛 Bug Fixes labels: ["bugfix", "bug"] - title: 🔨 Maintenance labels: ["maintenance", "refactoring", "chore", "build", "ci"] - title: Other Changes labels: ["*"] ================================================ FILE: .github/workflows/benchmarks.yaml ================================================ name: benchmarks on: [pull_request, workflow_dispatch] concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true env: FORCE_COLOR: "1" PY_COLORS: "1" jobs: bench: name: run benchmarks runs-on: ubuntu-latest steps: - uses: actions/setup-python@v6 with: python-version: "3.14" - uses: actions/checkout@v6 with: ref: ${{ github.event.pull_request.base.sha }} fetch-depth: 0 - uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: pyproject.toml - run: uv pip install '.[tests]' --system - name: run benchmarks on base branch run: pytest --benchmark-autosave dvc/testing/benchmarks/ -k 'test_init or test_help' - uses: actions/checkout@v6 with: fetch-depth: 0 clean: false - run: uv pip install '.[tests]' --system - name: run benchmarks for PR run: > pytest --benchmark-compare --benchmark-compare-fail=min:5% --benchmark-group-by name dvc/testing/benchmarks/ -k 'test_init or test_help' ================================================ FILE: .github/workflows/build.yaml ================================================ name: Build and upload package on: push: branches: - main release: types: - published workflow_dispatch: env: FORCE_COLOR: 1 permissions: contents: read jobs: build: name: Build & Verify package runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: actions/setup-python@v6 with: python-version: "3.14" - uses: astral-sh/setup-uv@v7 - name: Omit local version for Test PyPI upload if: github.event_name == 'push' && github.ref == 'refs/heads/main' run: echo SETUPTOOLS_SCM_OVERRIDES_FOR_DVC='{local_scheme="no-local-version"}' >> $GITHUB_ENV - name: Build Python Package run: | echo 'PKG = "pip"'>dvc/_build.py uv build - name: Check dist run: uv tool run twine check --strict dist/* - uses: actions/upload-artifact@v7 with: name: Packages path: dist/ if-no-files-found: error test-pypi-publish: name: Publish dev package to test.pypi.org runs-on: ubuntu-latest needs: build if: ${{ github.event.action == 'published' || (github.repository == 'treeverse/dvc' && github.event_name == 'push' && github.ref == 'refs/heads/main') }} environment: name: test-pypi url: https://test.pypi.org/p/dvc/${{ github.event.release.tag_name }} permissions: id-token: write steps: - uses: actions/download-artifact@v8 with: name: Packages path: dist - name: Upload package to Test PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/ skip-existing: true pypi-publish: name: Publish released package to pypi.org runs-on: ubuntu-latest needs: build if: github.event.action == 'published' environment: name: pypi url: https://pypi.org/p/dvc/${{ github.event.release.tag_name }} permissions: id-token: write steps: - uses: actions/download-artifact@v8 with: name: Packages path: dist - name: Upload package to PyPI uses: pypa/gh-action-pypi-publish@release/v1 ================================================ FILE: .github/workflows/codeql.yml ================================================ name: "CodeQL" on: push: branches: ["main"] pull_request: branches: ["main"] schedule: - cron: '32 19 * * 2' workflow_dispatch: permissions: contents: read jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: ['python'] steps: - name: Checkout repository uses: actions/checkout@v6 - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} queries: security-extended - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 ================================================ FILE: .github/workflows/plugin_tests.yaml ================================================ name: Remote Plugin Tests on: pull_request: workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true permissions: contents: read jobs: tests: timeout-minutes: 45 runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest] pyv: ["3.14"] plugin: ["dvc-s3"] steps: - uses: actions/checkout@v6 with: path: dvc - uses: actions/checkout@v6 with: repository: treeverse/${{ matrix.plugin }} ref: main path: ${{ matrix.plugin }} - name: Set up Python uses: actions/setup-python@v6 with: python-version: ${{ matrix.pyv }} - uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: "**/pyproject.toml" cache-suffix: ${{ matrix.pyv }} - name: Install plugin + DVC@PR run: | uv pip install "./dvc[testing]" --system uv pip install -e "./${{ matrix.plugin }}[tests]" --system - name: Run plugin tests timeout-minutes: 15 working-directory: ${{ matrix.plugin }} run: pytest -v -n=auto ================================================ FILE: .github/workflows/tests.yaml ================================================ name: Tests on: push: branches: [main] pull_request: schedule: - cron: '5 1 * * *' # every day at 01:05 workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true permissions: contents: read jobs: lint: timeout-minutes: 10 runs-on: ${{ matrix.os }} env: DVC_NO_ANALYTICS: true strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v6 with: python-version: '3.14' - uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: pyproject.toml - run: uv pip install -e ".[dev]" --system env: UV_LINK_MODE: ${{ runner.os == 'Windows' && 'symlink' || 'hardlink' }} - name: Cache mypy uses: actions/cache@v5 with: path: .mypy_cache key: mypy-${{ runner.os }}-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }} - uses: pre-commit/action@v3.0.1 tests: timeout-minutes: 20 runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest] pyv: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] include: - os: windows-latest pyv: "3.9" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" - os: windows-latest pyv: "3.9" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" - os: windows-latest pyv: "3.9" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" - os: windows-latest pyv: "3.9" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" - os: windows-latest pyv: "3.10" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" - os: windows-latest pyv: "3.10" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" - os: windows-latest pyv: "3.10" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" - os: windows-latest pyv: "3.10" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" - os: windows-latest pyv: "3.11" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" - os: windows-latest pyv: "3.11" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" - os: windows-latest pyv: "3.11" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" - os: windows-latest pyv: "3.11" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" - os: windows-latest pyv: "3.12" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" - os: windows-latest pyv: "3.12" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" - os: windows-latest pyv: "3.12" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" - os: windows-latest pyv: "3.12" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" - os: windows-latest pyv: "3.13" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" - os: windows-latest pyv: "3.13" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" - os: windows-latest pyv: "3.13" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" - os: windows-latest pyv: "3.13" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" - os: windows-latest pyv: "3.14" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 1" - os: windows-latest pyv: "3.14" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 2" - os: windows-latest pyv: "3.14" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 3" - os: windows-latest pyv: "3.14" pytestargs: "--splitting-algorithm=least_duration --splits 4 --group 4" steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v6 with: python-version: ${{ matrix.pyv }} - uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: pyproject.toml cache-suffix: ${{ matrix.pyv }} - run: uv pip install -e ".[dev]" pytest-split --system env: UV_LINK_MODE: ${{ runner.os == 'Windows' && 'symlink' || 'hardlink' }} - name: run tests timeout-minutes: 40 env: COVERAGE_CORE: sysmon PYTHONUTF8: 1 run: > pytest ${{ matrix.pytestargs }} -n=logical --dist=worksteal --timeout=300 --durations=0 --cov --cov-report=xml --cov-report=term --durations-path=./.github/.test_durations - name: upload coverage report uses: codecov/codecov-action@v5 check: if: always() needs: [tests] runs-on: ubuntu-latest steps: - uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }} notify: if: github.ref == 'refs/heads/main' && failure() needs: [tests] runs-on: ubuntu-latest steps: - name: Slack Notification uses: rtCamp/action-slack-notify@v2.3.3 env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} SLACK_COLOR: ${{ job.status }} SLACK_MESSAGE: 'CI Failed on main :boom:' SLACK_TITLE: CI Status SLACK_USERNAME: DVC-CI ================================================ FILE: .gitignore ================================================ __pycache__/ neatlynx.conf .idea /cache *.pyc .env*/ .venv env/ venv/ .python-version .dvc.conf.lock .DS_Store build/ dist/ *.egg-info/ .eggs hooks/*.pyc *.rpm *.deb innosetup/config.ini *.exe .coverage .coverage.* coverage.xml *.sw? pip-wheel-metadata/ .vscode/ azurite env.sh tests/remotes_env scripts/ci/gcp-creds.json .gcp-creds.json *~ /dvc/_version.py .mypy_cache/ .pytest_cache/ .nox/ .tox/ htmlcov/ ================================================ FILE: .mailmap ================================================ Paweł Redzyński Dmitry Petrov Earl Hathaway Nabanita Dash Kurian Benoy Sritanu Chakraborty ================================================ FILE: .pre-commit-config.yaml ================================================ default_language_version: python: python3 ci: skip: [mypy, dvc-pre-commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: - id: check-added-large-files - id: check-case-conflict - id: check-executables-have-shebangs - id: check-json - id: check-merge-conflict exclude: "tests/func/utils/test_strict_yaml.py" args: ['--assume-in-merge'] - id: check-toml - id: check-yaml - id: end-of-file-fixer - id: mixed-line-ending - id: sort-simple-yaml - id: trailing-whitespace - repo: https://github.com/astral-sh/ruff-pre-commit rev: 'v0.14.13' hooks: - id: ruff-check args: [--fix, --exit-non-zero-on-fix] - id: ruff-format - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - id: codespell additional_dependencies: ["tomli"] - repo: local hooks: - id: mypy name: mypy entry: mypy files: ^dvc/ language: system types: [python] require_serial: true - hooks: - args: - git-hook - pre-commit entry: dvc id: dvc-pre-commit language: system name: DVC pre-commit stages: - pre-commit verbose: true require_serial: true - args: - git-hook - pre-push entry: dvc id: dvc-pre-push language: system name: DVC pre-push stages: - pre-push require_serial: true - always_run: true args: - git-hook - post-checkout entry: dvc id: dvc-post-checkout language: system minimum_pre_commit_version: 2.2.0 name: DVC post-checkout stages: - post-checkout require_serial: true repo: local ================================================ FILE: .pre-commit-hooks.yaml ================================================ - args: - git-hook - pre-commit entry: dvc id: dvc-pre-commit language: python language_version: python3 name: DVC pre-commit require_serial: true stages: - pre-commit verbose: true - args: - git-hook - pre-push entry: dvc id: dvc-pre-push language: python language_version: python3 name: DVC pre-push require_serial: true stages: - pre-push - always_run: true args: - git-hook - post-checkout entry: dvc id: dvc-post-checkout language: python language_version: python3 minimum_pre_commit_version: 3.2.0 name: DVC post-checkout require_serial: true stages: - post-checkout ================================================ FILE: .zenodo.json ================================================ { "title": "DVC: Data Version Control - Git for Data & Models", "keywords": [ "data-science", "data-version-control", "machine-learning", "git", "developer-tools", "reproducibility", "collaboration", "ai", "python"], "contributors": [ {"name": "DVC team", "type": "Other", "affiliation": "Treeverse"}] } ================================================ FILE: CITATION.cff ================================================ cff-version: 1.2.0 title: 'DVC: Data Version Control - Git for Data & Models"' message: >- If you use this software as part of a publication and wish to cite it, please use the metadata from this file. type: software authors: - name: The DVC team and contributors website: 'https://github.com/treeverse' repository-code: 'https://github.com/treeverse/dvc' url: 'https://dvc.org' abstract: >- DVC is a tool for data science that takes advantage of existing software engineering toolset. It helps machine learning teams manage large datasets, make projects reproducible, and collaborate better. keywords: - ai - collaboration - data-science - data-version-control - developer-tools - git - machine-learning - python - reproducibility license: Apache-2.0 ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@dvc.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq ================================================ FILE: CONTRIBUTING.md ================================================ ### See our contribution guide at [dvc.org](https://dvc.org/doc/user-guide/contributing/core). ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright 2025 Treeverse. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: README.rst ================================================ |Banner| `Website `_ • `Docs `_ • `Blog `_ • `Tutorial `_ • `Related Technologies `_ • `How DVC works`_ • `VS Code Extension`_ • `Installation`_ • `Contributing`_ • `Community and Support`_ |CI| |Python Version| |Coverage| |VS Code| |DOI| |PyPI| |PyPI Downloads| |Packages| |Brew| |Conda| |Choco| |Snap| | **Data Version Control** or **DVC** is a command line tool and `VS Code Extension`_ to help you develop reproducible machine learning projects: #. **Version** your data and models. Store them in your cloud storage but keep their version info in your Git repo. #. **Iterate** fast with lightweight pipelines. When you make changes, only run the steps impacted by those changes. #. **Track** experiments in your local Git repo (no servers needed). #. **Compare** any data, code, parameters, model, or performance plots. #. **Share** experiments and automatically reproduce anyone's experiment. Quick start =========== Please read our `Command Reference `_ for a complete list. A common CLI workflow includes: +-----------------------------------+----------------------------------------------------------------------------------------------------+ | Task | Terminal | +===================================+====================================================================================================+ | Track data | | ``$ git add train.py params.yaml`` | | | | ``$ dvc add images/`` | +-----------------------------------+----------------------------------------------------------------------------------------------------+ | Connect code and data | | ``$ dvc stage add -n featurize -d images/ -o features/ python featurize.py`` | | | | ``$ dvc stage add -n train -d features/ -d train.py -o model.p -M metrics.json python train.py`` | +-----------------------------------+----------------------------------------------------------------------------------------------------+ | Make changes and experiment | | ``$ dvc exp run -n exp-baseline`` | | | | ``$ vi train.py`` | | | | ``$ dvc exp run -n exp-code-change`` | +-----------------------------------+----------------------------------------------------------------------------------------------------+ | Compare and select experiments | | ``$ dvc exp show`` | | | | ``$ dvc exp apply exp-baseline`` | +-----------------------------------+----------------------------------------------------------------------------------------------------+ | Share code | | ``$ git add .`` | | | | ``$ git commit -m 'The baseline model'`` | | | | ``$ git push`` | +-----------------------------------+----------------------------------------------------------------------------------------------------+ | Share data and ML models | | ``$ dvc remote add myremote -d s3://mybucket/image_cnn`` | | | | ``$ dvc push`` | +-----------------------------------+----------------------------------------------------------------------------------------------------+ How DVC works ============= We encourage you to read our `Get Started `_ docs to better understand what DVC does and how it can fit your scenarios. The closest *analogies* to describe the main DVC features are these: #. **Git for data**: Store and share data artifacts (like Git-LFS but without a server) and models, connecting them with a Git repository. Data management meets GitOps! #. **Makefiles** for ML: Describes how data or model artifacts are built from other data and code in a standard format. Now you can version your data pipelines with Git. #. Local **experiment tracking**: Turn your machine into an ML experiment management platform, and collaborate with others using existing Git hosting (Github, Gitlab, etc.). Git is employed as usual to store and version code (including DVC meta-files as placeholders for data). DVC `stores data and model files `_ seamlessly in a cache outside of Git, while preserving almost the same user experience as if they were in the repo. To share and back up the *data cache*, DVC supports multiple remote storage platforms - any cloud (S3, Azure, Google Cloud, etc.) or on-premise network storage (via SSH, for example). |Flowchart| `DVC pipelines `_ (computational graphs) connect code and data together. They specify all steps required to produce a model: input dependencies including code, data, commands to run; and output information to be saved. Last but not least, `DVC Experiment Versioning `_ lets you prepare and run a large number of experiments. Their results can be filtered and compared based on hyperparameters and metrics, and visualized with multiple plots. .. _`VS Code Extension`: VS Code Extension ================= |VS Code| To use DVC as a GUI right from your VS Code IDE, install the `DVC Extension `_ from the Marketplace. It currently features experiment tracking and data management, and more features (data pipeline support, etc.) are coming soon! |VS Code Extension Overview| Note: You'll have to install core DVC on your system separately (as detailed below). The Extension will guide you if needed. Installation ============ There are several ways to install DVC: in VS Code; using ``snap``, ``choco``, ``brew``, ``conda``, ``pip``; or with an OS-specific package. Full instructions are `available here `_. Snapcraft (Linux) ----------------- |Snap| .. code-block:: bash snap install dvc --classic This corresponds to the latest tagged release. Add ``--beta`` for the latest tagged release candidate, or ``--edge`` for the latest ``main`` version. Chocolatey (Windows) -------------------- |Choco| .. code-block:: bash choco install dvc Brew (mac OS) ------------- |Brew| .. code-block:: bash brew install dvc Anaconda (Any platform) ----------------------- |Conda| .. code-block:: bash conda install -c conda-forge mamba # installs much faster than conda mamba install -c conda-forge dvc Depending on the remote storage type you plan to use to keep and share your data, you might need to install optional dependencies: `dvc-s3`, `dvc-azure`, `dvc-gdrive`, `dvc-gs`, `dvc-oss`, `dvc-ssh`. PyPI (Python) ------------- |PyPI| .. code-block:: bash pip install dvc Depending on the remote storage type you plan to use to keep and share your data, you might need to specify one of the optional dependencies: ``s3``, ``gs``, ``azure``, ``oss``, ``ssh``. Or ``all`` to include them all. The command should look like this: ``pip install 'dvc[s3]'`` (in this case AWS S3 dependencies such as ``boto3`` will be installed automatically). To install the development version, run: .. code-block:: bash pip install "dvc @ git+https://github.com/treeverse/dvc" Package (Platform-specific) --------------------------- |Packages| Self-contained packages for Linux, Windows, and Mac are available. The latest version of the packages can be found on the GitHub `releases page `_. Ubuntu / Debian (deb) ^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash sudo wget https://dvc.org/deb/dvc.list -O /etc/apt/sources.list.d/dvc.list wget -qO - https://dvc.org/deb/iterative.asc | sudo apt-key add - sudo apt update sudo apt install dvc Fedora / CentOS (rpm) ^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash sudo wget https://dvc.org/rpm/dvc.repo -O /etc/yum.repos.d/dvc.repo sudo rpm --import https://dvc.org/rpm/iterative.asc sudo yum update sudo yum install dvc Contributing ============ Contributions are welcome! Please see our `Contributing Guide `_ for more details. Thanks to all our contributors! |Contribs| Community and Support ===================== * `Twitter `_ * `Forum `_ * `Discord Chat `_ * `Email `_ * `Mailing List `_ Copyright ========= This project is distributed under the Apache license version 2.0 (see the LICENSE file in the project root). By submitting a pull request to this project, you agree to license your contribution under the Apache license version 2.0 to this project. Citation ======== |DOI| Iterative, *DVC: Data Version Control - Git for Data & Models* (2020) `DOI:10.5281/zenodo.012345 `_. Barrak, A., Eghan, E.E. and Adams, B. `On the Co-evolution of ML Pipelines and Source Code - Empirical Study of DVC Projects `_ , in Proceedings of the 28th IEEE International Conference on Software Analysis, Evolution, and Reengineering, SANER 2021. Hawaii, USA. .. |Banner| image:: https://dvc.org/img/logo-github-readme.png :target: https://dvc.org :alt: DVC logo .. |VS Code Extension Overview| image:: https://raw.githubusercontent.com/treeverse/vscode-dvc/main/extension/docs/overview.gif :alt: DVC Extension for VS Code .. |CI| image:: https://github.com/treeverse/dvc/actions/workflows/tests.yaml/badge.svg :target: https://github.com/treeverse/dvc/actions/workflows/tests.yaml :alt: GHA Tests .. |Python Version| image:: https://img.shields.io/pypi/pyversions/dvc :target: https://pypi.org/project/dvc :alt: Python Version .. |Coverage| image:: https://codecov.io/gh/treeverse/dvc/branch/main/graph/badge.svg :target: https://codecov.io/gh/treeverse/dvc :alt: Codecov .. |Snap| image:: https://img.shields.io/badge/snap-install-82BEA0.svg?logo=snapcraft :target: https://snapcraft.io/dvc :alt: Snapcraft .. |Choco| image:: https://img.shields.io/chocolatey/v/dvc?label=choco :target: https://chocolatey.org/packages/dvc :alt: Chocolatey .. |Brew| image:: https://img.shields.io/homebrew/v/dvc?label=brew :target: https://formulae.brew.sh/formula/dvc :alt: Homebrew .. |Conda| image:: https://anaconda.org/conda-forge/dvc/badges/version.svg :target: https://anaconda.org/conda-forge/dvc :alt: Conda-forge .. |PyPI| image:: https://img.shields.io/pypi/v/dvc.svg?label=pip&logo=PyPI&logoColor=white :target: https://pypi.org/project/dvc :alt: PyPI .. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/dvc.svg?color=blue&label=Downloads&logo=pypi&logoColor=gold :target: https://pypi.org/project/dvc :alt: PyPI Downloads .. |Packages| image:: https://img.shields.io/badge/deb|pkg|rpm|exe-blue :target: https://dvc.org/doc/install :alt: deb|pkg|rpm|exe .. |DOI| image:: https://img.shields.io/badge/DOI-10.5281/zenodo.3677553-blue.svg :target: https://doi.org/10.5281/zenodo.3677553 :alt: DOI .. |Flowchart| image:: https://dvc.org/img/flow.gif :target: https://dvc.org/img/flow.gif :alt: how_dvc_works .. |Contribs| image:: https://contrib.rocks/image?repo=treeverse/dvc :target: https://github.com/treeverse/dvc/graphs/contributors :alt: Contributors .. |VS Code| image:: https://img.shields.io/visual-studio-marketplace/v/Iterative.dvc?color=blue&label=VSCode&logo=visualstudiocode&logoColor=blue :target: https://marketplace.visualstudio.com/items?itemName=Iterative.dvc :alt: VS Code Extension ================================================ FILE: dvc/__init__.py ================================================ """ DVC ---- Make your data science projects reproducible and shareable. """ import dvc.logger from dvc.build import PKG # noqa: F401 from dvc.version import __version__, version_tuple # noqa: F401 dvc.logger.setup() ================================================ FILE: dvc/__main__.py ================================================ """Main entry point for DVC command line tool.""" import sys from dvc.cli import main if __name__ == "__main__": sys.exit(main(sys.argv[1:])) ================================================ FILE: dvc/__pyinstaller/__init__.py ================================================ import os def get_hook_dirs(): return [os.path.dirname(__file__)] ================================================ FILE: dvc/__pyinstaller/hook-asyncssh.py ================================================ # ruff: noqa: N999 hiddenimports = ["win32timezone"] ================================================ FILE: dvc/__pyinstaller/hook-celery.py ================================================ # ruff: noqa: N999 from PyInstaller.utils.hooks import collect_submodules, is_module_or_submodule # Celery dynamically imports most celery internals at runtime # pyinstaller hook must expose all modules loaded by # kombu.utils.imports:symbol_by_name() _EXCLUDES = ("celery.bin", "celery.contrib") hiddenimports = collect_submodules( "celery", filter=lambda name: not any( is_module_or_submodule(name, module) for module in _EXCLUDES ), ) ================================================ FILE: dvc/__pyinstaller/hook-dvc.py ================================================ # ruff: noqa: N999 from PyInstaller.utils.hooks import copy_metadata # needed for `dvc doctor` to show dep versions datas = copy_metadata("adlfs", recursive=True) datas += copy_metadata("knack") datas += copy_metadata("gcsfs") datas += copy_metadata("pyarrow") datas += copy_metadata("pydrive2") datas += copy_metadata("s3fs", recursive=True) datas += copy_metadata("ossfs") datas += copy_metadata("sshfs") datas += copy_metadata("webdav4") datas += copy_metadata("aiohttp") datas += copy_metadata("aiohttp_retry") hiddenimports = [ "dvc_azure", "dvc_gdrive", "dvc_gs", "dvc_hdfs", "dvc_oss", "dvc_s3", "dvc_ssh", "dvc_webdav", "dvc_webhdfs", # https://github.com/pypa/setuptools/issues/1963 "pkg_resources.py2_warn", ] ================================================ FILE: dvc/__pyinstaller/hook-dvc.utils.flatten.py ================================================ # ruff: noqa: N999 from PyInstaller.utils.hooks import copy_metadata datas = copy_metadata("flatten-dict") ================================================ FILE: dvc/__pyinstaller/hook-dvc_task.py ================================================ # ruff: noqa: N999 from PyInstaller.utils.hooks import collect_submodules hiddenimports = collect_submodules("dvc_task") ================================================ FILE: dvc/__pyinstaller/hook-fsspec.py ================================================ # ruff: noqa: N999 hiddenimports = ["fsspec.implementations.memory"] ================================================ FILE: dvc/__pyinstaller/hook-pydrive2.py ================================================ # ruff: noqa: N999 from PyInstaller.utils.hooks import copy_metadata datas = copy_metadata("pydrive2") ================================================ FILE: dvc/_debug.py ================================================ from contextlib import ExitStack, contextmanager from datetime import datetime from typing import TYPE_CHECKING, Callable, Optional, Union if TYPE_CHECKING: from argparse import Namespace from types import FrameType @contextmanager def viztracer_profile( path: Union[Callable[[], str], str], depth: int = -1, log_async: bool = False, ): try: import viztracer # ty: ignore[unresolved-import] except ImportError: print("Failed to run profiler, viztracer is not installed") # noqa: T201 yield return tracer = viztracer.VizTracer(max_stack_depth=depth, log_async=log_async) tracer.start() try: yield finally: tracer.stop() tracer.save(path() if callable(path) else path) @contextmanager def yappi_profile( path: Optional[Union[Callable[[], str], str]] = None, wall_clock: Optional[bool] = True, separate_threads: Optional[bool] = False, ): try: import yappi # ty: ignore[unresolved-import] except ImportError: print("Failed to run profiler, yappi is not installed") # noqa: T201 yield return yappi.set_clock_type("wall" if wall_clock else "cpu") yappi.start() try: yield finally: yappi.stop() threads = yappi.get_thread_stats() stats = {} if separate_threads: for thread in threads: ctx_id = thread.id stats[ctx_id] = yappi.get_func_stats(ctx_id=ctx_id) else: stats[None] = yappi.get_func_stats() fpath = path() if callable(path) else path for ctx_id, st in stats.items(): if fpath: out = f"{fpath}-{ctx_id}" if ctx_id is not None else fpath st.save(out, type="callgrind") else: if ctx_id is not None: print(f"\nThread {ctx_id}") # noqa: T201 st.print_all() if ctx_id is None: threads.print_all() yappi.clear_stats() @contextmanager def instrument(html_output=False): """Run a statistical profiler""" try: from pyinstrument import Profiler # ty: ignore[unresolved-import] except ImportError: print("Failed to run profiler, pyinstrument is not installed") # noqa: T201 yield return profiler = Profiler() profiler.start() try: yield finally: profiler.stop() if html_output: profiler.open_in_browser() else: print(profiler.output_text(unicode=True, color=True)) # noqa: T201 @contextmanager def profile(dump_path: Optional[str] = None): """Run a cprofile""" import cProfile prof = cProfile.Profile() prof.enable() try: yield finally: prof.disable() if dump_path: prof.dump_stats(dump_path) else: prof.print_stats(sort="cumtime") @contextmanager def debug(): try: yield except Exception: try: import ipdb as pdb # noqa: T100 # ty: ignore[unresolved-import] except ImportError: import pdb # type: ignore[no-redef] # noqa: T100 pdb.post_mortem() raise # prevent from jumping ahead def _sigshow(_, frame: Optional["FrameType"]) -> None: import sys from shutil import get_terminal_size from traceback import format_stack lines = "\u2015" * get_terminal_size().columns stack = format_stack(frame) print(lines, "\n", *stack, lines, sep="", file=sys.stderr) # noqa: T201 @contextmanager def show_stack(): r"""Show stack trace on SIGQUIT (Ctrl-\) or SIGINFO (Ctrl-T on macOS).""" import signal import sys if sys.platform != "win32": signal.signal(signal.SIGQUIT, _sigshow) try: # only available on macOS signal.signal(signal.SIGINFO, _sigshow) # type: ignore[attr-defined] except AttributeError: pass yield def _get_path_func(tool: str, ext: str): fmt = f"{tool}.dvc-{{now:%Y%m%d}}_{{now:%H%M%S}}.{ext}" def func(now: Optional["datetime"] = None) -> str: return fmt.format(now=now or datetime.now()) # noqa: DTZ005 return func @contextmanager def debugtools(args: Optional["Namespace"] = None, **kwargs): kw = vars(args) if args else {} kw.update(kwargs) with ExitStack() as stack: if kw.get("pdb"): stack.enter_context(debug()) if kw.get("cprofile") or kw.get("cprofile_dump"): stack.enter_context(profile(kw.get("cprofile_dump"))) if kw.get("instrument") or kw.get("instrument_open"): stack.enter_context(instrument(kw.get("instrument_open", False))) if kw.get("show_stack", False): stack.enter_context(show_stack()) if kw.get("yappi"): path_func = _get_path_func("callgrind", "out") stack.enter_context( yappi_profile( path=path_func, separate_threads=kw.get("yappi_separate_threads"), ) ) if ( kw.get("viztracer") or kw.get("viztracer_depth") or kw.get("viztracer_async") ): path_func = _get_path_func("viztracer", "json") depth = kw.get("viztracer_depth") or -1 log_async = kw.get("viztracer_async") or False prof = viztracer_profile(path=path_func, depth=depth, log_async=log_async) stack.enter_context(prof) yield def add_debugging_flags(parser): from argparse import SUPPRESS # For detailed info see: # https://github.com/treeverse/dvc/wiki/Debugging,-Profiling-and-Benchmarking-DVC args, _ = parser.parse_known_args() verbose = args.verbose def debug_help(msg): if verbose: return msg return SUPPRESS parser = parser.add_argument_group("debug options") parser.add_argument( "--cprofile", action="store_true", default=False, help=debug_help("Generate cprofile data for tools like snakeviz / tuna"), ) parser.add_argument( "--cprofile-dump", help=debug_help("Location to dump cprofile file") ) parser.add_argument( "--yappi", action="store_true", default=False, help=debug_help( "Generate a callgrind file for use with tools like " "kcachegrind / qcachegrind" ), ) parser.add_argument( "--yappi-separate-threads", action="store_true", default=False, help=debug_help("Generate one callgrind file per thread"), ) parser.add_argument( "--viztracer", action="store_true", default=False, help=debug_help("Generate a viztracer file for use with vizviewer"), ) parser.add_argument( "--viztracer-depth", type=int, help=debug_help("Set viztracer maximum stack depth"), ) parser.add_argument( "--viztracer-async", action="store_true", default=False, help=debug_help("Treat async tasks as threads"), ) parser.add_argument( "--pdb", action="store_true", default=False, help=debug_help("Drop into the pdb/ipdb debugger on any exception"), ) parser.add_argument( "--instrument", action="store_true", default=False, help=debug_help("Use pyinstrument CLI profiler"), ) parser.add_argument( "--instrument-open", action="store_true", default=False, help=debug_help("Use pyinstrument web profiler"), ) parser.add_argument( "--show-stack", "--ss", action="store_true", default=False, help=debug_help( r"Use Ctrl+T on macOS or Ctrl+\ on Linux to print the stack " "frame currently executing. Unavailable on Windows." ), ) ================================================ FILE: dvc/analytics.py ================================================ import json import os from typing import TYPE_CHECKING, Optional from dvc.log import logger from .env import DVC_ANALYTICS_ENDPOINT, DVC_NO_ANALYTICS if TYPE_CHECKING: from dvc.scm import Base logger = logger.getChild(__name__) def collect_and_send_report(args=None, return_code=None): """ Collect information from the runtime/environment and the command being executed into a report and send it over the network. To prevent analytics from blocking the execution of the main thread, sending the report is done in a separate process. The inter-process communication happens through a file containing the report as a JSON, where the _collector_ generates it and the _sender_ removes it after sending it. """ import tempfile from dvc.daemon import daemon report = {} # Include command execution information on the report only when available. if args and hasattr(args, "func"): report.update({"cmd_class": args.func.__name__}) if return_code is not None: report.update({"cmd_return_code": return_code}) with tempfile.NamedTemporaryFile(delete=False, mode="w") as fobj: json.dump(report, fobj) logger.trace("Saving analytics report to %s", fobj.name) daemon(["analytics", fobj.name]) def is_enabled(): from dvc.config import Config, to_bool from dvc.utils import env2bool if env2bool("DVC_TEST"): return False enabled = not os.getenv(DVC_NO_ANALYTICS) if enabled: enabled = to_bool( Config.from_cwd(validate=False).get("core", {}).get("analytics", "true") ) logger.debug("Analytics is %sabled.", "en" if enabled else "dis") return enabled def send(path): """ Side effect: Removes the report after sending it. The report is generated and stored in a temporary file, see: `collect_and_send_report`. Sending happens on another process, thus, the need of removing such file afterwards. """ import requests from requests.exceptions import RequestException url = os.environ.get(DVC_ANALYTICS_ENDPOINT, "https://analytics.dvc.org") headers = {"content-type": "application/json"} with open(path, encoding="utf-8") as fobj: report = json.load(fobj) report.update(_runtime_info()) logger.debug("uploading report to %s", url) logger.trace("Sending %s to %s", report, url) try: requests.post(url, json=report, headers=headers, timeout=5) except RequestException as e: logger.trace("", exc_info=True) logger.debug("failed to send analytics report %s", str(e)) logger.trace("removing report %s", path) os.remove(path) def _git_remote_url(scm: Optional["Base"]) -> Optional[str]: from dvc.scm import Git if not isinstance(scm, Git): return None from dulwich.porcelain import get_remote_repo dulwich_repo = scm.dulwich.repo try: _remote, url = get_remote_repo(dulwich_repo) except IndexError: # IndexError happens when the head is detached _remote, url = get_remote_repo(dulwich_repo, b"origin") # Dulwich returns (None, "origin") if no remote set if (_remote, url) == (None, "origin"): return None return url def _scm_in_use(scm: Optional["Base"]) -> Optional[str]: return type(scm).__name__ if scm else None def _parse_git_remote_path(remote_url: str) -> str: from urllib.parse import urlparse from scmrepo.urls import is_scp_style_url parsed = urlparse(remote_url) # Windows Path also gets parsed with a drive letter as scheme # https://github.com/python/cpython/issues/86381 if parsed.scheme and parsed.scheme in ("http", "https", "git", "ssh"): return parsed.path.strip("/") if is_scp_style_url(remote_url): # handle scp-style URL parts = remote_url.split(":", 1) if len(parts) == 2: _, path = parts return path.rstrip("/") return remote_url def _git_remote_path_hash(scm: Optional["Base"]) -> Optional[str]: """Return a hash of the git remote path.""" import hashlib try: if remote_url := _git_remote_url(scm): path = _parse_git_remote_path(remote_url) h = hashlib.md5(path.encode("utf-8"), usedforsecurity=False) # for FIPS return h.hexdigest() except Exception: logger.debug("Failed to get git remote path", exc_info=True) return None def _runtime_info(): """ Gather information from the environment where DVC runs to fill a report. """ from iterative_telemetry import _generate_ci_id, find_or_create_user_id from dvc import __version__ from dvc.info import _get_remotes from dvc.repo import Repo from dvc.utils import is_binary ci_id = _generate_ci_id() if ci_id: group_id, user_id = ci_id else: group_id, user_id = None, find_or_create_user_id() scm = None remotes = None try: repo = Repo() scm = repo.scm remotes = _get_remotes(repo.config) except Exception as exc: # noqa: BLE001 logger.debug("failed to open repo: %s", exc) return { "dvc_version": __version__, "is_binary": is_binary(), "scm_class": _scm_in_use(scm), "system_info": _system_info(), "user_id": user_id, "group_id": group_id, "remotes": remotes, "git_remote_hash": _git_remote_path_hash(scm), } def _system_info(): import platform import sys import distro system = platform.system() if system == "Windows": version = sys.getwindowsversion() # type: ignore[attr-defined] return { "os": "windows", "windows_version_build": version.build, "windows_version_major": version.major, "windows_version_minor": version.minor, "windows_version_service_pack": version.service_pack, } if system == "Darwin": return {"os": "mac", "mac_version": platform.mac_ver()[0]} if system == "Linux": return { "os": "linux", "linux_distro": distro.id(), "linux_distro_like": distro.like(), "linux_distro_version": distro.version(), } # We don't collect data for any other system. raise NotImplementedError ================================================ FILE: dvc/annotations.py ================================================ from dataclasses import asdict, dataclass, field, fields from typing import Any, ClassVar, Optional from funcy import compact from voluptuous import Required @dataclass class Annotation: PARAM_DESC: ClassVar[str] = "desc" PARAM_TYPE: ClassVar[str] = "type" PARAM_LABELS: ClassVar[str] = "labels" PARAM_META: ClassVar[str] = "meta" desc: Optional[str] = None type: Optional[str] = None labels: list[str] = field(default_factory=list) meta: dict[str, Any] = field(default_factory=dict) def to_dict(self) -> dict[str, str]: return compact(asdict(self)) @dataclass class Artifact: PARAM_PATH: ClassVar[str] = "path" PARAM_DESC: ClassVar[str] = "desc" PARAM_TYPE: ClassVar[str] = "type" PARAM_LABELS: ClassVar[str] = "labels" PARAM_META: ClassVar[str] = "meta" path: str desc: Optional[str] = None type: Optional[str] = None labels: list[str] = field(default_factory=list) meta: dict[str, Any] = field(default_factory=dict) def to_dict(self) -> dict[str, str]: return compact(asdict(self)) ANNOTATION_FIELDS = [field.name for field in fields(Annotation)] ANNOTATION_SCHEMA = { Annotation.PARAM_DESC: str, Annotation.PARAM_TYPE: str, Annotation.PARAM_LABELS: [str], Annotation.PARAM_META: object, } ARTIFACT_SCHEMA: dict[Any, Any] = { Required(Artifact.PARAM_PATH): str, **ANNOTATION_SCHEMA, # type: ignore[arg-type] } ================================================ FILE: dvc/api/__init__.py ================================================ from dvc.fs.dvc import _DVCFileSystem as DVCFileSystem from .artifacts import artifacts_show from .data import get_url, open, read # noqa: A004 from .dataset import get as get_dataset from .experiments import exp_save, exp_show from .scm import all_branches, all_commits, all_tags from .show import metrics_show, params_show __all__ = [ "DVCFileSystem", "all_branches", "all_commits", "all_tags", "artifacts_show", "exp_save", "exp_show", "get_dataset", "get_url", "metrics_show", "open", "params_show", "read", ] ================================================ FILE: dvc/api/artifacts.py ================================================ import os from typing import Any, Optional from dvc.repo import Repo def artifacts_show( name: str, version: Optional[str] = None, stage: Optional[str] = None, repo: Optional[str] = None, ) -> dict[str, str]: """ Return path and Git revision for an artifact in a DVC project. The resulting path and revision can be used in conjunction with other dvc.api calls to open and read the artifact. Args: name (str): name of the artifact to open. version (str, optional): version of the artifact to open. Defaults to the latest version. stage (str, optional): name of the model registry stage. repo: (str, optional): path or URL for the DVC repo. Returns: Dictionary of the form: { "rev": ..., "path": ..., } Raises: dvc.exceptions.ArtifactNotFoundError: The specified artifact was not found in the repo. """ if version and stage: raise ValueError("Artifact version and stage are mutually exclusive.") from dvc.repo.artifacts import Artifacts from dvc.utils import as_posix repo_kwargs: dict[str, Any] = { "subrepos": True, "uninitialized": True, } dirname, _ = Artifacts.parse_path(name) with Repo.open(repo, **repo_kwargs) as _repo: rev = _repo.artifacts.get_rev(name, version=version, stage=stage) with _repo.switch(rev): root = _repo.fs.root_marker _dirname = _repo.fs.join(root, dirname) if dirname else root with Repo(_dirname, fs=_repo.fs, scm=_repo.scm) as r: path = r.artifacts.get_path(name) path = _repo.fs.join(_repo.fs.root_marker, as_posix(path)) parts = _repo.fs.relparts(path, _repo.root_dir) return {"rev": rev, "path": os.path.join(*parts)} ================================================ FILE: dvc/api/data.py ================================================ from contextlib import _GeneratorContextManager as GCM from contextlib import contextmanager from typing import Any, Optional from funcy import reraise from dvc.exceptions import FileMissingError, OutputNotFoundError, PathMissingError from dvc.repo import Repo @contextmanager def _wrap_exceptions(repo, url): from dvc.config import NoRemoteError from dvc.exceptions import NoOutputInExternalRepoError, NoRemoteInExternalRepoError try: yield except NoRemoteError as exc: raise NoRemoteInExternalRepoError(url) from exc except OutputNotFoundError as exc: if exc.repo is repo: raise NoOutputInExternalRepoError(exc.output, repo.root_dir, url) from exc raise except FileMissingError as exc: raise PathMissingError(exc.path, url) from exc def get_url( path: str, repo: Optional[str] = None, rev: Optional[str] = None, remote: Optional[str] = None, config: Optional[dict[str, Any]] = None, remote_config: Optional[dict[str, Any]] = None, ): """ Returns the URL to the storage location of a data file or directory tracked in a DVC repo. For Git repos, HEAD is used unless a rev argument is supplied. The default remote is tried unless a remote argument is supplied. Raises OutputNotFoundError if the file is not tracked by DVC. NOTE: This function does not check for the actual existence of the file or directory in the remote storage. Args: path (str): location and file name of the target, relative to the root of `repo`. repo (str, optional): location of the DVC project or Git Repo. Defaults to the current DVC project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). rev (str, optional): Any `Git revision`_ such as a branch or tag name, a commit hash or a dvc experiment name. Defaults to HEAD. If `repo` is not a Git repo, this option is ignored. remote (str, optional): Name of the `DVC remote`_ used to form the returned URL string. Defaults to the `default remote`_ of `repo`. For local projects, the cache is tried before the default remote. config(dict, optional): config to be passed to the DVC repository. Defaults to None. remote_config(dict, optional): remote config to be passed to the DVC repository. Defaults to None. Returns: str: URL to the file or directory. """ from dvc.config import NoRemoteError from dvc_data.index import StorageKeyError with Repo.open( repo, rev=rev, subrepos=True, uninitialized=True, remote=remote, config=config, remote_config=remote_config, ) as _repo: index, entry = _repo.get_data_index_entry(path) with reraise( (StorageKeyError, ValueError), NoRemoteError(f"no remote specified in {_repo}"), ): remote_fs, remote_path = index.storage_map.get_remote(entry) return remote_fs.unstrip_protocol(remote_path) class _OpenContextManager(GCM): def __init__(self, func, args, kwds): self.gen = func(*args, **kwds) self.func, self.args, self.kwds = (func, args, kwds) # type: ignore[assignment] def __getattr__(self, name): raise AttributeError("dvc.api.open() should be used in a with statement.") def open( # noqa: A001 path: str, repo: Optional[str] = None, rev: Optional[str] = None, remote: Optional[str] = None, mode: str = "r", encoding: Optional[str] = None, config: Optional[dict[str, Any]] = None, remote_config: Optional[dict[str, Any]] = None, ): """ Opens a file tracked in a DVC project. This function may only be used as a context manager (using the `with` keyword, as shown in the examples). This function makes a direct connection to the remote storage, so the file contents can be streamed. Your code can process the data buffer as it's streamed, which optimizes memory usage. Note: Use dvc.api.read() to load the complete file contents in a single function call, no context manager involved. Neither function utilizes disc space. Args: path (str): location and file name of the target to open, relative to the root of `repo`. repo (str, optional): location of the DVC project or Git Repo. Defaults to the current DVC project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). rev (str, optional): Any `Git revision`_ such as a branch or tag name, a commit hash or a dvc experiment name. Defaults to HEAD. If `repo` is not a Git repo, this option is ignored. remote (str, optional): Name of the `DVC remote`_ used to form the returned URL string. Defaults to the `default remote`_ of `repo`. For local projects, the cache is tried before the default remote. mode (str, optional): Specifies the mode in which the file is opened. Defaults to "r" (read). Mirrors the namesake parameter in builtin `open()`_. Only reading `mode` is supported. encoding(str, optional): `Codec`_ used to decode the file contents. Defaults to None. This should only be used in text mode. Mirrors the namesake parameter in builtin `open()`_. config(dict, optional): config to be passed to the DVC repository. Defaults to None. remote_config(dict, optional): remote config to be passed to the DVC repository. Defaults to None. Returns: _OpenContextManager: A context manager that generatse a corresponding `file object`_. The exact type of file object depends on the mode used. For more details, please refer to Python's `open()`_ built-in, which is used under the hood. Raises: AttributeError: If this method is not used as a context manager. ValueError: If non-read `mode` is used. Examples: - Use data or models from a DVC repository. Any file tracked in a DVC project (and stored remotely) can be processed directly in your Python code with this API. For example, an XML file tracked in a public DVC repo on GitHub can be processed like this: >>> from xml.sax import parse >>> import dvc.api >>> from mymodule import mySAXHandler >>> with dvc.api.open( ... 'get-started/data.xml', ... repo='https://github.com/iterative/dataset-registry' ... ) as fd: ... parse(fd, mySAXHandler) We use a SAX XML parser here because dvc.api.open() is able to stream the data from remote storage. The mySAXHandler object should handle the event-driven parsing of the document in this case. This increases the performance of the code (minimizing memory usage), and is typically faster than loading the whole data into memory. - Accessing private repos This is just a matter of using the right repo argument, for example an SSH URL (requires that the credentials are configured locally): >>> import dvc.api >>> with dvc.api.open( ... 'features.dat', ... repo='git@server.com:path/to/repo.git' ... ) as fd: ... # ... Process 'features' ... pass - Use different versions of data Any git revision (see `rev`) can be accessed programmatically. For example, if your DVC repo has tagged releases of a CSV dataset: >>> import csv >>> import dvc.api >>> with dvc.api.open( ... 'clean.csv', ... rev='v1.1.0' ... ) as fd: ... reader = csv.reader(fd) ... # ... Process 'clean' data from version 1.1.0 .. _Git revision: https://git-scm.com/docs/revisions .. _DVC remote: https://dvc.org/doc/command-reference/remote .. _default remote: https://dvc.org/doc/command-reference/remote/default .. _open(): https://docs.python.org/3/library/functions.html#open .. _Codec: https://docs.python.org/3/library/codecs.html#standard-encodings .. _file object: https://docs.python.org/3/glossary.html#term-file-object """ if "r" not in mode: raise ValueError("Only reading `mode` is supported.") args = (path,) kwargs = { "repo": repo, "remote": remote, "rev": rev, "mode": mode, "encoding": encoding, "config": config, "remote_config": remote_config, } return _OpenContextManager(_open, args, kwargs) def _open( path, repo=None, rev=None, remote=None, mode="r", encoding=None, config=None, remote_config=None, ): repo_kwargs: dict[str, Any] = { "subrepos": True, "uninitialized": True, "remote": remote, "config": config, "remote_config": remote_config, } with Repo.open(repo, rev=rev, **repo_kwargs) as _repo: with _wrap_exceptions(_repo, path): import os from typing import TYPE_CHECKING, Union from dvc.exceptions import IsADirectoryError as DvcIsADirectoryError from dvc.fs.data import DataFileSystem from dvc.fs.dvc import DVCFileSystem if TYPE_CHECKING: from dvc.fs import FileSystem fs: Union[FileSystem, DataFileSystem, DVCFileSystem] if os.path.isabs(path): fs = DataFileSystem(index=_repo.index.data["local"]) fs_path = path else: fs = DVCFileSystem(repo=_repo, subrepos=True) fs_path = fs.from_os_path(path) try: with fs.open(fs_path, mode=mode, encoding=encoding) as fobj: yield fobj except FileNotFoundError as exc: raise FileMissingError(path) from exc except IsADirectoryError as exc: raise DvcIsADirectoryError(f"'{path}' is a directory") from exc def read( path, repo=None, rev=None, remote=None, mode="r", encoding=None, config=None, remote_config=None, ): """ Returns the contents of a tracked file (by DVC or Git). For Git repos, HEAD is used unless a rev argument is supplied. The default remote is tried unless a remote argument is supplied. """ with open( path, repo=repo, rev=rev, remote=remote, mode=mode, encoding=encoding, config=config, remote_config=remote_config, ) as fd: return fd.read() ================================================ FILE: dvc/api/dataset.py ================================================ from typing import Literal, TypedDict, Union class DatachainDataset(TypedDict): type: Literal["dc"] name: str version: int class DVCDataset(TypedDict): type: Literal["dvc"] url: str path: str sha: str class URLDataset(TypedDict): type: Literal["url"] files: list[str] path: str def get(name: str) -> Union[DatachainDataset, DVCDataset, URLDataset]: from difflib import get_close_matches from dvc.fs import get_cloud_fs from dvc.repo import Repo, datasets repo = Repo() try: dataset = repo.datasets[name] except datasets.DatasetNotFoundError as e: add_note = getattr(e, "add_note", lambda _: None) if matches := get_close_matches(name, repo.datasets): add_note(f"Did you mean: {matches[0]!r}?") raise if dataset._invalidated: raise ValueError(f"dataset not in sync. Sync with 'dvc ds update {name}'.") if not dataset.lock: raise ValueError("missing lock information") if dataset.type == "dvc": return DVCDataset( type="dvc", url=dataset.lock.url, path=dataset.lock.path, sha=dataset.lock.rev_lock, ) if dataset.type == "dc": return DatachainDataset( type="dc", name=dataset.name_version[0], version=dataset.lock.version ) if dataset.type == "url": fs_cls, _, path = get_cloud_fs(repo.config, url=dataset.lock.url) assert fs_cls join_version = getattr(fs_cls, "join_version", lambda path, _: path) protocol = fs_cls.protocol versioned_path = join_version(path, dataset.lock.meta.version_id) versioned_path = f"{protocol}://{versioned_path}" files = [ join_version( fs_cls.join(versioned_path, file.relpath), file.meta.version_id ) for file in dataset.lock.files ] return URLDataset(type="url", files=files, path=versioned_path) raise AssertionError("unreachable") ================================================ FILE: dvc/api/experiments.py ================================================ from typing import Optional, Union from rich.text import Text from dvc.repo import Repo from dvc.repo.experiments.show import tabulate def exp_save( name: Optional[str] = None, force: bool = False, include_untracked: Optional[list[str]] = None, ): """ Create a new DVC experiment using `exp save`. See https://dvc.org/doc/command-reference/exp/save. Args: name (str, optional): specify a name for this experiment. If `None`, a default one will be generated, such as `urban-sign`. Defaults to `None`. force (bool): overwrite the experiment if an experiment with the same name already exists. Defaults to `False`. include_untracked (List[str], optional): specify untracked file(s) to be included in the saved experiment. Defaults to `None`. Returns: str: The `Git revision`_ of the created experiment. Raises: ExperimentExistsError: If an experiment with `name` already exists and `force=False`. .. _Git revision: https://git-scm.com/docs/revisions """ with Repo() as repo: return repo.experiments.save( name=name, force=force, include_untracked=include_untracked ) def _postprocess(exp_rows): for exp_row in exp_rows: for k, v in exp_row.items(): if isinstance(v, Text): v_str = str(v) try: exp_row[k] = float(v_str) except ValueError: exp_row[k] = v_str elif not exp_row[k]: exp_row[k] = None return exp_rows def exp_show( repo: Optional[str] = None, revs: Optional[Union[str, list[str]]] = None, num: int = 1, param_deps: bool = False, force: bool = False, config: Optional[dict] = None, ) -> list[dict]: """Get DVC experiments tracked in `repo`. Without arguments, this function will retrieve all experiments derived from the Git `HEAD`. See the options below to customize the experiments retrieved. Args: repo (str, optional): location of the DVC repository. Defaults to the current project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). revs (Union[str, List[str]], optional): Git revision(s) (e.g. branch, tag, SHA commit) to use as a reference point to start listing experiments. Defaults to `None`, which will use `HEAD` as starting point. num (int, optional): show experiments from the last `num` commits (first parents) starting from the `revs` baseline. Give a negative value to include all first-parent commits (similar to `git log -n`). Defaults to 1. param_deps (bool, optional): include only parameters that are stage dependencies. Defaults to `False`. force (bool, optional): force re-collection of experiments instead of loading from internal experiments cache. DVC caches `exp_show` data for completed experiments to improve performance of subsequent calls. When `force` is specified, DVC will reload all experiment data and ignore any previously cached results. Defaults to `False`. config (dict, optional): config to be passed through to DVC project. Defaults to `None`. Returns: List[Dict]: Each item in the list will contain a dictionary with the info for an individual experiment. See Examples below. """ with Repo.open(repo, config=config) as _repo: experiments = _repo.experiments.show( revs=revs, num=num, param_deps=param_deps, force=force, ) td, _ = tabulate(experiments, fill_value=None) return _postprocess(td.as_dict()) ================================================ FILE: dvc/api/scm.py ================================================ from typing import Optional from dvc.repo import Repo def all_branches(repo: Optional[str] = None) -> list[str]: """Get all Git branches in a DVC repository. Args: repo (str, optional): location of the DVC repository. Defaults to the current project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). Returns: List[str]: Names of the Git branches. """ with Repo.open(repo) as _repo: return _repo.scm.list_branches() def all_commits(repo: Optional[str] = None) -> list[str]: """Get all Git commits in a DVC repository. Args: repo (str, optional): location of the DVC repository. Defaults to the current project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). Returns: List[str]: SHAs of the Git commits. """ with Repo.open(repo) as _repo: return _repo.scm.list_all_commits() def all_tags(repo: Optional[str] = None) -> list[str]: """Get all Git tags in a DVC repository. Args: repo (str, optional): location of the DVC repository. Defaults to the current project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). Returns: List[str]: Names of the Git tags. """ with Repo.open(repo) as _repo: return _repo.scm.list_tags() ================================================ FILE: dvc/api/show.py ================================================ import typing from collections import Counter from collections.abc import Iterable from typing import Optional, Union from funcy import first from dvc.repo import Repo def _postprocess(results): processed: dict[str, dict] = {} for rev, rev_data in results.items(): if not rev_data: continue processed[rev] = {} counts: typing.Counter[str] = Counter() for file_data in rev_data["data"].values(): for k in file_data["data"]: counts[k] += 1 for file_name, file_data in rev_data["data"].items(): to_merge = { (k if counts[k] == 1 else f"{file_name}:{k}"): v for k, v in file_data["data"].items() } processed[rev] = processed[rev] | to_merge processed.pop("workspace", None) return processed def metrics_show( *targets: str, repo: Optional[str] = None, rev: Optional[str] = None, config: Optional[dict] = None, ) -> dict: """Get metrics tracked in `repo`. Without arguments, this function will retrieve all metrics from all tracked metric files, for the current working tree. See the options below to restrict the metrics retrieved. Args: *targets (str, optional): Names of the metric files to retrieve metrics from. For example, "classifier_eval.json, clustering_eval.json". If no `targets` are provided, all metric files tracked in `dvc.yaml` will be used. Note that targets don't necessarily have to be defined in `dvc.yaml`. repo (str, optional): Location of the DVC repository. Defaults to the current project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). rev (str, optional): Name of the `Git revision`_ to retrieve metrics from. Defaults to `None`. An example of git revision can be a branch or tag name, a commit hash or a dvc experiment name. If `repo` is not a Git repo, this option is ignored. If `None`, the current working tree will be used. config (dict, optional): config to be passed through to DVC project. Defaults to `None`. Returns: Dict: See Examples below. Examples: - No arguments. Working on https://github.com/iterative/example-get-started >>> import dvc.api >>> metrics = dvc.api.metrics_show() >>> print(json.dumps(metrics, indent=4)) { "avg_prec": 0.9249974999612706, "roc_auc": 0.9460213440787918 } --- - Using `rev`. Working on https://github.com/iterative/example-get-started >>> import json >>> import dvc.api >>> metrics = dvc.api.metrics_show(rev="tune-hyperparams") >>> print(json.dumps(metrics, indent=4)) { "avg_prec": 0.9268792615819422, "roc_auc": 0.945093365854111 } --- - Using `targets`. Working on https://github.com/iterative/example-get-started >>> import json >>> import dvc.api >>> metrics = dvc.api.metrics_show("evaluation.json") >>> print(json.dumps(metrics, indent=4)) { "avg_prec": 0.9249974999612706, "roc_auc": 0.9460213440787918 } --- - Git URL as `repo`. >>> import json >>> import dvc.api >>> metrics = dvc.api.metrics_show( ... repo="https://github.com/iterative/demo-fashion-mnist") >>> print(json.dumps(metrics, indent=4)) { "loss": 0.25284987688064575, "accuracy": 0.9071000218391418 } .. _Git revision: https://git-scm.com/docs/revisions """ from dvc.repo.metrics.show import to_relpath with Repo.open(repo, config=config) as _repo: metrics = _repo.metrics.show( targets=targets, revs=rev if rev is None else [rev], on_error="raise", ) metrics = { k: to_relpath(_repo.fs, _repo.root_dir, v) for k, v in metrics.items() } metrics = _postprocess(metrics) if not metrics: return {} return metrics[first(metrics)] def params_show( *targets: str, repo: Optional[str] = None, stages: Optional[Union[str, Iterable[str]]] = None, rev: Optional[str] = None, deps: bool = False, config: Optional[dict] = None, ) -> dict: """Get parameters tracked in `repo`. Without arguments, this function will retrieve all params from all tracked parameter files, for the current working tree. See the options below to restrict the parameters retrieved. Args: *targets (str, optional): Names of the parameter files to retrieve params from. For example, "params.py, myparams.toml". If no `targets` are provided, all parameter files tracked in `dvc.yaml` will be used. Note that targets don't necessarily have to be defined in `dvc.yaml`. repo (str, optional): location of the DVC repository. Defaults to the current project (found by walking up from the current working directory tree). It can be a URL or a file system path. Both HTTP and SSH protocols are supported for online Git repos (e.g. [user@]server:project.git). stages (Union[str, Iterable[str]], optional): Name or names of the stages to retrieve parameters from. Defaults to `None`. If `None`, all parameters from all stages will be retrieved. If this method is called from a different location to the one where the `dvc.yaml` is found, the relative path to the `dvc.yaml` must be provided as a prefix with the syntax `{relpath}:{stage}`. For example: `subdir/dvc.yaml:stage-0` or `../dvc.yaml:stage-1`. rev (str, optional): Name of the `Git revision`_ to retrieve parameters from. Defaults to `None`. An example of git revision can be a branch or tag name, a commit hash or a dvc experiment name. If `repo` is not a Git repo, this option is ignored. If `None`, the current working tree will be used. deps (bool, optional): Whether to retrieve only parameters that are stage dependencies or not. Defaults to `False`. config (dict, optional): config to be passed through to DVC project. Defaults to `None`. Returns: Dict: See Examples below. Examples: - No arguments. Working on https://github.com/iterative/example-get-started >>> import json >>> import dvc.api >>> params = dvc.api.params_show() >>> print(json.dumps(params, indent=4)) { "prepare": { "split": 0.2, "seed": 20170428 }, "featurize": { "max_features": 200, "ngrams": 2 }, "train": { "seed": 20170428, "n_est": 50, "min_split": 0.01 } } --- - Filtering with `stages`. Working on https://github.com/iterative/example-get-started `stages` can a single string: >>> import json >>> import dvc.api >>> params = dvc.api.params_show(stages="prepare") >>> print(json.dumps(params, indent=4)) { "prepare": { "split": 0.2, "seed": 20170428 } } Or an iterable of strings: >>> import json >>> import dvc.api >>> params = dvc.api.params_show(stages=["prepare", "train"]) >>> print(json.dumps(params, indent=4)) { "prepare": { "split": 0.2, "seed": 20170428 }, "train": { "seed": 20170428, "n_est": 50, "min_split": 0.01 } } --- - Using `rev`. Working on https://github.com/iterative/example-get-started >>> import json >>> import dvc.api >>> params = dvc.api.params_show(rev="tune-hyperparams") >>> print(json.dumps(params, indent=4)) { "prepare": { "split": 0.2, "seed": 20170428 }, "featurize": { "max_features": 200, "ngrams": 2 }, "train": { "seed": 20170428, "n_est": 100, "min_split": 8 } } --- - Using `targets`. Working on `multi-params-files` folder of https://github.com/iterative/pipeline-conifguration You can pass a single target: >>> import json >>> import dvc.api >>> params = dvc.api.params_show("params.yaml") >>> print(json.dumps(params, indent=4)) { "run_mode": "prod", "configs": { "dev": "configs/params_dev.yaml", "test": "configs/params_test.yaml", "prod": "configs/params_prod.yaml" }, "evaluate": { "dataset": "micro", "size": 5000, "metrics": ["f1", "roc-auc"], "metrics_file": "reports/metrics.json", "plots_cm": "reports/plot_confusion_matrix.png" } } Or multiple targets: >>> import json >>> import dvc.api >>> params = dvc.api.params_show( ... "configs/params_dev.yaml", "configs/params_prod.yaml") >>> print(json.dumps(params, indent=4)) { "configs/params_prod.yaml:run_mode": "prod", "configs/params_prod.yaml:config_file": "configs/params_prod.yaml", "configs/params_prod.yaml:data_load": { "dataset": "large", "sampling": { "enable": true, "size": 50000 } }, "configs/params_prod.yaml:train": { "epochs": 1000 }, "configs/params_dev.yaml:run_mode": "dev", "configs/params_dev.yaml:config_file": "configs/params_dev.yaml", "configs/params_dev.yaml:data_load": { "dataset": "development", "sampling": { "enable": true, "size": 1000 } }, "configs/params_dev.yaml:train": { "epochs": 10 } } --- - Git URL as `repo`. >>> import json >>> import dvc.api >>> params = dvc.api.params_show( ... repo="https://github.com/iterative/demo-fashion-mnist") { "train": { "batch_size": 128, "hidden_units": 64, "dropout": 0.4, "num_epochs": 10, "lr": 0.001, "conv_activation": "relu" } } .. _Git revision: https://git-scm.com/docs/revisions """ from dvc.repo.metrics.show import to_relpath if isinstance(stages, str): stages = [stages] with Repo.open(repo, config=config) as _repo: params = _repo.params.show( revs=rev if rev is None else [rev], targets=targets, deps_only=deps, on_error="raise", stages=stages, ) params = {k: to_relpath(_repo.fs, _repo.root_dir, v) for k, v in params.items()} params = _postprocess(params) if not params: return {} return params[first(params)] ================================================ FILE: dvc/build.py ================================================ from typing import Optional try: # file is created during dvc build from . import _build # type: ignore[attr-defined, import] PKG: Optional[str] = _build.PKG # type: ignore[assignment] except ImportError: PKG = None # type: ignore[assignment] ================================================ FILE: dvc/cachemgr.py ================================================ import os from typing import TYPE_CHECKING, Optional from dvc.fs import GitFileSystem, Schemes from dvc_data.hashfile.db import get_odb from dvc_data.hashfile.hash import DEFAULT_ALGORITHM if TYPE_CHECKING: from dvc.repo import Repo LEGACY_HASH_NAMES = {"md5-dos2unix", "params"} def _get_odb( repo, settings, fs=None, prefix: Optional[tuple[str, ...]] = None, hash_name: Optional[str] = None, **kwargs, ): from dvc.fs import get_cloud_fs if not settings: return None cls, config, fs_path = get_cloud_fs(repo.config, **settings) fs = fs or cls(**config) if prefix: fs_path = fs.join(fs_path, *prefix) if hash_name: config["hash_name"] = hash_name return get_odb(fs, fs_path, state=repo.state, **config) class CacheManager: CACHE_DIR = "cache" FILES_DIR = "files" FS_DIR = "fs" def __init__(self, repo): self._repo = repo self.config = config = repo.config["cache"] self._odb = {} local = config.get("local") default = self.default_local_cache_dir if local: settings = {"name": local} elif "dir" not in config and not default: settings = None else: from dvc.config_schema import LOCAL_COMMON url = config.get("dir") or default settings = {"url": url} for opt in LOCAL_COMMON: if opt in config: settings[str(opt)] = config.get(opt) kwargs = {} if not isinstance(repo.fs, GitFileSystem): kwargs["fs"] = repo.fs odb = _get_odb( repo, settings, prefix=(self.FILES_DIR, DEFAULT_ALGORITHM), **kwargs, ) self._odb["repo"] = odb self._odb[Schemes.LOCAL] = odb legacy_odb = _get_odb(repo, settings, hash_name="md5-dos2unix", **kwargs) self._odb["legacy"] = legacy_odb @property def fs_cache(self): """Filesystem-based cache. Currently used as a temporary location to download files that we don't yet have a regular oid (e.g. md5) for. """ from dvc_data.index import FileStorage return FileStorage( key=(), fs=self.local.fs, path=self.local.fs.join(self.local_cache_dir, self.FS_DIR), ) def _init_odb(self, schemes): for scheme in schemes: remote = self.config.get(scheme) settings = {"name": remote} if remote else None self._odb[scheme] = _get_odb( self._repo, settings, prefix=(self.FILES_DIR, DEFAULT_ALGORITHM), ) def __getattr__(self, name): try: return self._odb[name] except KeyError as exc: raise AttributeError from exc def by_scheme(self): yield from self._odb.items() @property def local_cache_dir(self) -> str: """Return base local cache directory without any prefixes. (i.e. `dvc cache dir`). """ return self.legacy.path @property def default_local_cache_dir(self) -> Optional[str]: repo = self._repo if repo and repo.local_dvc_dir: return os.path.join(repo.local_dvc_dir, self.CACHE_DIR) return None def migrate_2_to_3(repo: "Repo", dry: bool = False): """Migrate legacy 2.x objects to 3.x cache. Legacy 'md5-dos2unix' objects will be re-hashed with 'md5', added to 3.x cache, and then a link from the legacy 2.x location to the 3.x location will be created. """ from dvc.fs.callbacks import TqdmCallback from dvc.ui import ui from dvc_data.hashfile.db.migrate import migrate, prepare src = repo.cache.legacy dest = repo.cache.local if dry: oids = list(src._list_oids()) ui.write( f"{len(oids)} files will be re-hashed and migrated to the DVC 3.0 cache " "location." ) return with TqdmCallback(desc="Computing DVC 3.0 hashes", unit="files") as cb: migration = prepare(src, dest, callback=cb) with TqdmCallback(desc="Migrating to DVC 3.0 cache", unit="files") as cb: count = migrate(migration, callback=cb) ui.write(f"Migrated {count} files to DVC 3.0 cache location.") ================================================ FILE: dvc/cli/__init__.py ================================================ """This module provides an entrypoint to the dvc cli and parsing utils.""" import logging import sys from typing import Optional from dvc.log import logger # Workaround for CPython bug. See [1] and [2] for more info. # [1] https://github.com/aws/aws-cli/blob/1.16.277/awscli/clidriver.py#L55 # [2] https://bugs.python.org/issue29288 "".encode("idna") logger = logger.getChild(__name__) class DvcParserError(Exception): """Base class for CLI parser errors.""" def __init__(self): super().__init__("parser error") def parse_args(argv=None): """Parses CLI arguments. Args: argv: optional list of arguments to parse. sys.argv is used by default. Raises: DvcParserError: raised for argument parsing errors. """ from .parser import get_main_parser parser = get_main_parser() args = parser.parse_args(argv) args.parser = parser return args def _log_unknown_exceptions() -> None: from dvc.info import get_dvc_info from dvc.ui import ui from dvc.utils import colorize logger.exception("unexpected error") if logger.isEnabledFor(logging.DEBUG): logger.debug("Version info for developers:\n%s", get_dvc_info()) q = colorize("Having any troubles?", "yellow") link = colorize("https://dvc.org/support", "blue") footer = f"\n{q} Hit us up at {link}, we are always happy to help!" ui.error_write(footer) def _log_exceptions(exc: Exception) -> Optional[int]: """Try to log some known exceptions, that are not DVCExceptions.""" from dvc.utils import error_link, format_link if isinstance(exc, OSError): import errno if exc.errno == errno.EMFILE: logger.exception( ( "too many open files, please visit " "%s to see how to handle this problem" ), error_link("many-files"), extra={"tb_only": True}, ) else: _log_unknown_exceptions() return None from dvc.fs import AuthError, ConfigError, RemoteMissingDepsError if isinstance(exc, RemoteMissingDepsError): from dvc import PKG proto = exc.protocol by_pkg = { "pip": f"pip install 'dvc[{proto}]'", "conda": f"conda install -c conda-forge dvc-{proto}", } if PKG in by_pkg: link = format_link("https://dvc.org/doc/install") cmd = by_pkg.get(PKG) hint = ( "To install dvc with those dependencies, run:\n" "\n" f"\t{cmd}\n" "\n" f"See {link} for more info." ) else: link = format_link("https://github.com/treeverse/dvc/issues") hint = f"\nPlease report this bug to {link}. Thank you!" logger.exception( "URL '%s' is supported but requires these missing dependencies: %s. %s", exc.url, exc.missing_deps, hint, extra={"tb_only": True}, ) return None if isinstance(exc, (AuthError, ConfigError)): link = format_link("https://man.dvc.org/remote/modify") logger.exception("configuration error") logger.exception( "%s\nLearn more about configuration settings at %s.", exc, link, extra={"tb_only": True}, ) return 251 from dvc_data.hashfile.cache import DiskError if isinstance(exc, DiskError): from dvc.utils import relpath directory = relpath(exc.directory) logger.exception( ( "Could not open pickled '%s' cache.\n" "Remove the '%s' directory and then retry this command." "\nSee %s for more information." ), exc.type, directory, error_link("pickle"), extra={"tb_only": True}, ) return None from dvc_data.hashfile.build import IgnoreInCollectedDirError if isinstance(exc, IgnoreInCollectedDirError): logger.exception("") return None _log_unknown_exceptions() return None def main(argv=None): # noqa: C901, PLR0912, PLR0915 """Main entry point for dvc CLI. Args: argv: optional list of arguments to parse. sys.argv is used by default. Returns: int: command's return code. """ from contextlib import ExitStack from dvc._debug import debugtools from dvc.config import ConfigError from dvc.exceptions import DvcException, NotDvcRepoError from dvc.logger import set_loggers_level # NOTE: stderr/stdout may be closed if we are running from dvc.daemon. # On Linux we directly call cli.main after double forking and closing # the copied parent's standard file descriptors. If we make any logging # calls in this state it will cause an exception due to writing to a closed # file descriptor. if not sys.stderr or sys.stderr.closed: logging.disable() elif not sys.stdout or sys.stdout.closed: logging.disable(logging.INFO) args = None stack = ExitStack() try: args = parse_args(argv) level = None if args.quiet: level = logging.CRITICAL elif args.verbose == 1: level = logging.DEBUG elif args.verbose > 1: level = logging.TRACE # type: ignore[attr-defined] if level is not None: stack.enter_context(set_loggers_level(level)) if level and level <= logging.DEBUG: from platform import platform, python_implementation, python_version from dvc import PKG, __version__ pyv = f"{python_implementation()} {python_version()}" pkg = f" ({PKG})" if PKG else "" logger.debug("v%s%s, %s on %s", __version__, pkg, pyv, platform()) logger.debug("command: %s", " ".join(argv or sys.argv)) logger.trace(args) if sys.stdout and not sys.stdout.closed and not args.quiet: from dvc.ui import ui ui.enable() with debugtools(args): cmd = args.func(args) ret = cmd.do_run() except ConfigError: logger.exception("configuration error") ret = 251 except KeyboardInterrupt: logger.exception("interrupted by the user") ret = 252 except BrokenPipeError: import os # Python flushes standard streams on exit; redirect remaining output # to devnull to avoid another BrokenPipeError at shutdown # See: https://docs.python.org/3/library/signal.html#note-on-sigpipe devnull = os.open(os.devnull, os.O_WRONLY) os.dup2(devnull, sys.stdout.fileno()) ret = 141 # 128 + 13 (SIGPIPE) except NotDvcRepoError: logger.exception("") ret = 253 except DvcException: ret = 255 logger.exception("") except DvcParserError: ret = 254 except Exception as exc: # noqa: BLE001 ret = _log_exceptions(exc) or 255 try: import os from dvc import analytics if analytics.is_enabled(): analytics.collect_and_send_report(args, ret) logger.trace("Process %s exiting with %s", os.getpid(), ret) return ret finally: stack.close() from dvc.repo.open_repo import clean_repos # Remove cached repos in the end of the call, these are anonymous # so won't be reused by any other subsequent run anyway. clean_repos() ================================================ FILE: dvc/cli/command.py ================================================ import os from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Any from dvc.log import logger if TYPE_CHECKING: from dvc.config import Config logger = logger.getChild(__name__) class CmdBase(ABC): UNINITIALIZED = False def __init__(self, args: Any): from dvc.repo import Repo os.chdir(args.cd) self.repo: Repo = Repo( uninitialized=self.UNINITIALIZED, _wait_for_lock=args.wait_for_lock, ) self.config: Config = self.repo.config self.args = args def do_run(self): with self.repo: return self.run() @abstractmethod def run(self): pass class CmdBaseNoRepo(CmdBase): def __init__(self, args): self.args = args os.chdir(args.cd) def do_run(self): return self.run() ================================================ FILE: dvc/cli/completion.py ================================================ import shtab BASH_PREAMBLE = """ # $1=COMP_WORDS[1] _dvc_compgen_DVCFiles() { compgen -d -S '/' -- $1 # recurse into subdirs compgen -f -X '!*?.dvc' -- $1 compgen -f -X '!*Dvcfile' -- $1 compgen -f -X '!*dvc.yaml' -- $1 } _dvc_compgen_stages() { local _dvc_stages=($(dvc stage list -q --names-only)) compgen -W "${_dvc_stages[*]}" -- $1 } _dvc_compgen_stages_and_files() { _dvc_compgen_DVCFiles $1 _dvc_compgen_stages $1 } _dvc_compgen_exps() { local _dvc_exps=($(dvc exp list -q --all-commits --names-only)) compgen -W "${_dvc_exps[*]}" -- $1 } _dvc_compgen_remotes() { local _dvc_remotes=($(dvc remote list | cut -d' ' -f1)) compgen -W "${_dvc_remotes[*]}" -- $1 } _dvc_compgen_config_vars() { compgen -W "${_dvc_config_vars[*]}" -- $1 } """ ZSH_PREAMBLE = """ _dvc_compadd_DVCFiles() { _files -g '(*?.dvc|Dvcfile|dvc.yaml)' } _dvc_compadd_stages() { # this will also show up the description of the stages _describe 'stages' "($(_dvc_stages_output))" } _dvc_stages_output() { dvc stage list -q | awk '{ # escape possible `:` on the stage name sub(/:/, "\\\\\\\\:", $1); # read all of the columns except the first # reading `out` from $2, so as not to have a leading whitespace out=$2; for(i=3;i<=NF;i++){out=out" "$i}; # print key, ":" and then single-quote the description # colon is a delimiter used by `_describe` to separate field/description print $1":""\\047"out"\\047" # single quote -> \\047 }' } _dvc_compadd_stages_and_files() { _dvc_compadd_DVCFiles _dvc_compadd_stages } _dvc_compadd_exps() { _describe 'experiments' "($(dvc exp list -q --all-commits --names-only))" } _dvc_compadd_remotes() { _describe 'remotes' "($(dvc remote list | cut -d' ' -f1))" } _dvc_compadd_config_vars() { _describe 'config_vars' _dvc_config_vars } """ PREAMBLE = { "bash": BASH_PREAMBLE, "zsh": ZSH_PREAMBLE, } FILE = shtab.FILE DIR = shtab.DIRECTORY DVC_FILE = {"bash": "_dvc_compgen_DVCFiles", "zsh": "_dvc_compadd_DVCFiles"} STAGE = {"bash": "_dvc_compgen_stages", "zsh": "_dvc_compadd_stages"} DVCFILES_AND_STAGE = { "bash": "_dvc_compgen_stages_and_files", "zsh": "_dvc_compadd_stages_and_files", } EXPERIMENT = {"bash": "_dvc_compgen_exps", "zsh": "_dvc_compadd_exps"} REMOTE = {"bash": "_dvc_compgen_remotes", "zsh": "_dvc_compadd_remotes"} CONFIG_VARS = {"bash": "_dvc_compgen_config_vars", "zsh": "_dvc_compadd_config_vars"} def get_preamble() -> dict[str, str]: from dvc.config_schema import config_vars_for_completion ret: dict[str, str] = {} config_vars = list(config_vars_for_completion()) nl = "\n\t".expandtabs(4) config_vars_arr = f""" _dvc_config_vars=( {nl.join(config_vars)} ) """ for shell, preamble in PREAMBLE.items(): ret[shell] = config_vars_arr + preamble return ret ================================================ FILE: dvc/cli/formatter.py ================================================ import argparse class HelpFormatter(argparse.HelpFormatter): def _get_default_metavar_for_optional(self, action: argparse.Action) -> str: return action.dest class RawTextHelpFormatter(HelpFormatter, argparse.RawTextHelpFormatter): pass class RawDescriptionHelpFormatter(HelpFormatter, argparse.RawDescriptionHelpFormatter): pass ================================================ FILE: dvc/cli/parser.py ================================================ """Main parser for the dvc cli.""" import argparse import os from functools import lru_cache from dvc import __version__ from dvc.commands import ( add, artifacts, cache, check_ignore, checkout, commit, completion, config, daemon, dag, data, data_sync, dataset, destroy, diff, du, experiments, freeze, gc, get, get_url, git_hook, imp, imp_db, imp_url, init, install, ls, ls_url, metrics, move, params, plots, queue, remote, remove, repro, root, stage, studio, unprotect, update, version, ) from dvc.log import logger from . import DvcParserError, formatter logger = logger.getChild(__name__) COMMANDS = [ add, artifacts, cache, check_ignore, checkout, commit, completion, config, daemon, dag, data, data_sync, dataset, destroy, diff, du, experiments, freeze, gc, get, get_url, git_hook, imp, imp_db, imp_url, init, install, ls, ls_url, metrics, move, params, plots, queue, remote, remove, repro, root, stage, studio, unprotect, update, version, ] def _find_parser(parser, cmd_cls): defaults = parser._defaults if not cmd_cls or cmd_cls == defaults.get("func"): parser.print_help() raise DvcParserError actions = parser._actions for action in actions: if not isinstance(action.choices, dict): # NOTE: we are only interested in subparsers continue for subparser in action.choices.values(): _find_parser(subparser, cmd_cls) class DvcParser(argparse.ArgumentParser): """Custom parser class for dvc CLI.""" def error(self, message, cmd_cls=None): logger.error(message) _find_parser(self, cmd_cls) def parse_args(self, args=None, namespace=None): # NOTE: overriding to provide a more granular help message. # E.g. `dvc plots diff --bad-flag` would result in a `dvc plots diff` # help message instead of generic `dvc` usage. args, argv = self.parse_known_args(args, namespace) if argv: msg = "unrecognized arguments: %s" self.error(msg % " ".join(argv), getattr(args, "func", None)) return args def get_parent_parser(): """Create instances of a parser containing common arguments shared among all the commands. When overwriting `-q` or `-v`, you need to instantiate a new object in order to prevent some weird behavior. """ from dvc._debug import add_debugging_flags parent_parser = argparse.ArgumentParser(add_help=False) log_level_group = parent_parser.add_mutually_exclusive_group() log_level_group.add_argument( "-q", "--quiet", action="count", default=0, help="Be quiet." ) log_level_group.add_argument( "-v", "--verbose", action="count", default=0, help="Be verbose." ) add_debugging_flags(parent_parser) return parent_parser @lru_cache(maxsize=1) def get_main_parser(): parent_parser = get_parent_parser() # Main parser desc = "Data Version Control" parser = DvcParser( prog="dvc", description=desc, parents=[parent_parser], formatter_class=formatter.RawTextHelpFormatter, add_help=False, ) # NOTE: We are doing this to capitalize help message. # Unfortunately, there is no easier and clearer way to do it, # as adding this argument in get_parent_parser() either in # log_level_group or on parent_parser itself will cause unexpected error. parser.add_argument( "-h", "--help", action="help", default=argparse.SUPPRESS, help="Show this help message and exit.", ) parser.add_argument( "-V", "--version", action="version", version=__version__, help="Show program's version.", ) parser.add_argument( "--cd", default=os.path.curdir, metavar="", help="Change to directory before executing.", type=str, ) parser.add_argument( "--wait-for-lock", action="store_true", default=False, help="Wait for the lock if it is already held by another process, instead of" " failing immediately.", ) # Sub commands subparsers = parser.add_subparsers( title="Available Commands", metavar="command", dest="cmd", help="Use `dvc command --help` for command-specific help.", required=True, ) for cmd in COMMANDS: cmd.add_parser(subparsers, parent_parser) return parser ================================================ FILE: dvc/cli/utils.py ================================================ import argparse class DictAction(argparse.Action): def __init__(self, *args, **kwargs): kwargs.setdefault("metavar", "=") super().__init__(*args, **kwargs) def __call__(self, parser, args, values, option_string=None): # noqa: ARG002 d = getattr(args, self.dest) or {} if isinstance(values, list): kvs = values else: kvs = [values] for kv in kvs: key, value = kv.split("=", 1) if not value: raise argparse.ArgumentError( self, f'Could not parse argument "{values}" as k1=v1 k2=v2 ... format', ) d[key] = value setattr(args, self.dest, d) def append_doc_link(help_message, path): from dvc.utils import format_link if not path: return help_message doc_base = "https://man.dvc.org/" return f"{help_message}\nDocumentation: {format_link(doc_base + path)}" def hide_subparsers_from_help(subparsers): # metavar needs to be explicitly set in order to hide subcommands # from the 'positional arguments' choices list # see: https://bugs.python.org/issue22848 # Need to set `add_help=False`, but avoid setting `help` # (not even to `argparse.SUPPRESS`). # NOTE: The argument is the parent subparser, not the subcommand parser. cmds = [cmd for cmd, parser in subparsers.choices.items() if parser.add_help] subparsers.metavar = "{{{}}}".format(",".join(cmds)) ================================================ FILE: dvc/commands/__init__.py ================================================ ================================================ FILE: dvc/commands/add.py ================================================ from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger logger = logger.getChild(__name__) class CmdAdd(CmdBase): def validate_args(self) -> None: from dvc.exceptions import InvalidArgumentError args = self.args invalid_opt = None if args.to_remote or args.out: message = "{option} can't be used with " message += "--to-remote" if args.to_remote else "--out" if len(args.targets) != 1: invalid_opt = "multiple targets" elif args.glob: invalid_opt = "--glob option" elif args.no_commit: invalid_opt = "--no-commit option" else: message = "{option} can't be used without --to-remote" if args.remote: invalid_opt = "--remote" elif args.remote_jobs: invalid_opt = "--remote-jobs" if invalid_opt is not None: raise InvalidArgumentError(message.format(option=invalid_opt)) def run(self): from dvc.exceptions import DvcException, InvalidArgumentError try: self.validate_args() except InvalidArgumentError: logger.exception("") return 1 try: self.repo.add( self.args.targets, no_commit=self.args.no_commit, glob=self.args.glob, out=self.args.out, remote=self.args.remote, to_remote=self.args.to_remote, remote_jobs=self.args.remote_jobs, force=self.args.force, relink=self.args.relink, ) except FileNotFoundError: logger.exception("") return 1 except DvcException: logger.exception("") return 1 return 0 def add_parser(subparsers, parent_parser): ADD_HELP = "Track data files or directories with DVC." parser = subparsers.add_parser( "add", parents=[parent_parser], description=append_doc_link(ADD_HELP, "add"), help=ADD_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) parser.add_argument( "--no-commit", action="store_true", default=False, help="Don't put files/directories into cache.", ) parser.add_argument( "--glob", action="store_true", default=False, help="Allows targets containing shell-style wildcards.", ) parser.add_argument( "-o", "--out", help="Destination path to put files to.", metavar="", ) parser.add_argument( "--to-remote", action="store_true", default=False, help="Download it directly to the remote", ) parser.add_argument( "-r", "--remote", help="Remote storage to download to", metavar="", ).complete = completion.REMOTE parser.add_argument( "--remote-jobs", type=int, help=( "Only used along with '--to-remote'. " "Number of jobs to run simultaneously " "when pushing data to remote." "The default value is 4 * cpu_count(). " ), metavar="", ) parser.add_argument( "-f", "--force", action="store_true", default=False, help="Override local file or folder if exists.", ) parser.add_argument( "--no-relink", dest="relink", action="store_false", help="Don't recreate links from cache to workspace.", ) parser.set_defaults(relink=True) parser.add_argument( "targets", nargs="+", help="Input files/directories to add." ).complete = completion.FILE parser.set_defaults(func=CmdAdd) ================================================ FILE: dvc/commands/artifacts.py ================================================ from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import DictAction, append_doc_link from dvc.exceptions import DvcException from dvc.log import logger logger = logger.getChild(__name__) class CmdArtifactsGet(CmdBaseNoRepo): def run(self): from dvc.repo.artifacts import Artifacts from dvc.scm import CloneError from dvc.ui import ui if self.args.show_url: return self._show_url() try: count, out = Artifacts.get( self.args.url, name=self.args.name, version=self.args.rev, stage=self.args.stage, force=self.args.force, config=self.args.config, remote=self.args.remote, remote_config=self.args.remote_config, out=self.args.out, ) ui.write(f"Downloaded {count} file(s) to '{out}'") return 0 except CloneError: logger.exception("failed to get '%s'", self.args.name) return 1 except DvcException: logger.exception( "failed to get '%s' from '%s'", self.args.name, self.args.url ) return 1 def _show_url(self): from dvc.api import artifacts_show, get_url from dvc.ui import ui artifact = artifacts_show( self.args.name, version=self.args.rev, stage=self.args.stage, repo=self.args.url, ) url = get_url( artifact["path"], repo=self.args.url, rev=artifact["rev"], remote=self.args.remote, remote_config=self.args.remote_config, ) ui.write(url, force=True) return 0 def add_parser(subparsers, parent_parser): ARTIFACTS_HELP = "DVC model registry artifact commands." artifacts_parser = subparsers.add_parser( "artifacts", parents=[parent_parser], description=append_doc_link(ARTIFACTS_HELP, "artifacts"), help=ARTIFACTS_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) artifacts_subparsers = artifacts_parser.add_subparsers( dest="cmd", help="Use `dvc artifacts CMD --help` to display command-specific help.", required=True, ) ARTIFACTS_GET_HELP = "Download an artifact from a DVC project." get_parser = artifacts_subparsers.add_parser( "get", parents=[parent_parser], description=append_doc_link(ARTIFACTS_GET_HELP, "artifacts/get"), help=ARTIFACTS_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) get_parser.add_argument("url", help="Location of DVC repository to download from") get_parser.add_argument( "name", help="Name of artifact in the repository" ).complete = completion.FILE get_parser.add_argument( "--rev", nargs="?", help="Artifact version", metavar="", ) get_parser.add_argument( "--stage", nargs="?", help="Artifact stage", metavar="", ) get_parser.add_argument( "-o", "--out", nargs="?", help="Destination path to download artifact to", metavar="", ).complete = completion.DIR get_parser.add_argument( "--show-url", action="store_true", help=( "Print the storage location (URL) the target data would be " "downloaded from, and exit." ), ) get_parser.add_argument( "-j", "--jobs", type=int, help=( "Number of jobs to run simultaneously. " "The default value is 4 * cpu_count(). " ), metavar="", ) get_parser.add_argument( "-f", "--force", action="store_true", default=False, help="Override local file or folder if exists.", ) get_parser.add_argument( "--config", type=str, help=( "Path to a config file that will be merged with the config " "in the target repository." ), ) get_parser.add_argument( "--remote", type=str, help=( "Remote name to set as a default in the target repository " "(only applicable when downloading from DVC remote)." ), ).complete = completion.REMOTE get_parser.add_argument( "--remote-config", type=str, nargs="*", action=DictAction, help=( "Remote config options to merge with a remote's config (default or one " "specified by '--remote') in the target repository (only applicable " "when downloading from DVC remote)." ), ) get_parser.set_defaults(func=CmdArtifactsGet) ================================================ FILE: dvc/commands/cache.py ================================================ import argparse import os from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.commands.config import CmdConfig from dvc.ui import ui class CmdCacheDir(CmdConfig): def run(self): if self.args.value is None and not self.args.unset: from dvc.config import ConfigError if self.args.level: conf = self.config.read(level=self.args.level) else: # Use merged config with default values conf = self.config try: self._check(conf, False, "cache", "dir") path = conf["cache"]["dir"] except ConfigError: if not self.config.dvc_dir or self.args.level: raise path = os.path.join(self.config.dvc_dir, "cache") ui.write(path) return 0 with self.config.edit(level=self.args.level) as conf: if self.args.unset: self._check(conf, False, "cache", "dir") del conf["cache"]["dir"] else: self._check(conf, False, "cache") conf["cache"]["dir"] = self.args.value return 0 class CmdCacheMigrate(CmdBase): def run(self): from dvc.cachemgr import migrate_2_to_3 from dvc.repo.commit import commit_2_to_3 migrate_2_to_3(self.repo, dry=self.args.dry) if self.args.dvc_files: commit_2_to_3(self.repo, dry=self.args.dry) return 0 def add_parser(subparsers, parent_parser): from dvc.commands.config import parent_config_parser CACHE_HELP = "Manage cache settings." cache_parser = subparsers.add_parser( "cache", parents=[parent_parser], description=append_doc_link(CACHE_HELP, "cache"), help=CACHE_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) cache_subparsers = cache_parser.add_subparsers( dest="cmd", help="Use `dvc cache CMD --help` for command-specific help.", required=True, ) parent_cache_config_parser = argparse.ArgumentParser( add_help=False, parents=[parent_config_parser] ) CACHE_DIR_HELP = "Configure cache directory location." cache_dir_parser = cache_subparsers.add_parser( "dir", parents=[parent_parser, parent_cache_config_parser], description=append_doc_link(CACHE_HELP, "cache/dir"), help=CACHE_DIR_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) cache_dir_parser.add_argument( "-u", "--unset", default=False, action="store_true", help="Unset option.", ) cache_dir_parser.add_argument( "value", help=( "Path to cache directory. Relative paths are resolved relative " "to the current directory and saved to config relative to the " "config file location. If no path is provided, it returns the " "current cache directory." ), nargs="?", ).complete = completion.DIR cache_dir_parser.set_defaults(func=CmdCacheDir) CACHE_MIGRATE_HELP = "Migrate cached files to the DVC 3.0 cache location." cache_migrate_parser = cache_subparsers.add_parser( "migrate", parents=[parent_parser], description=append_doc_link(CACHE_HELP, "cache/migrate"), help=CACHE_MIGRATE_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) cache_migrate_parser.add_argument( "--dvc-files", help=( "Migrate entries in all existing DVC files in the repository " "to the DVC 3.0 format." ), action="store_true", ) cache_migrate_parser.add_argument( "--dry", help=( "Only print actions which would be taken without actually migrating " "any data." ), action="store_true", ) cache_migrate_parser.set_defaults(func=CmdCacheMigrate) ================================================ FILE: dvc/commands/check_ignore.py ================================================ from typing import TYPE_CHECKING from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.ui import ui if TYPE_CHECKING: from dvc.ignore import CheckIgnoreResult class CmdCheckIgnore(CmdBase): def __init__(self, args): super().__init__(args) self.ignore_filter = self.repo.dvcignore def _show_results(self, result: "CheckIgnoreResult"): if not result.match and not self.args.details: return None if self.args.details: pattern_infos = result.pattern_infos patterns = [str(pi) for pi in pattern_infos] if not patterns and self.args.non_matching: patterns = ["::"] if not self.args.all: patterns = patterns[-1:] for pattern in patterns: ui.write(pattern, result.file, sep="\t") else: ui.write(result.file) return bool(result.pattern_infos) def _check_one_file(self, target): result = self.ignore_filter.check_ignore(target) return bool(self._show_results(result)) def _interactive_mode(self): ret = 1 while True: try: target = input() except (KeyboardInterrupt, EOFError): break if not target: break if self._check_one_file(target): ret = 0 return ret def _normal_mode(self): ret = 1 for target in self.args.targets: if self._check_one_file(target): ret = 0 return ret def _check_args(self): from dvc.exceptions import DvcException if not self.args.stdin and not self.args.targets: raise DvcException("`targets` or `--stdin` needed") if self.args.stdin and self.args.targets: raise DvcException("cannot have both `targets` and `--stdin`") if self.args.non_matching and not self.args.details: raise DvcException("`--non-matching` is only valid with `--details`") if self.args.all and not self.args.details: raise DvcException("`--all` is only valid with `--details`") if self.args.quiet and self.args.details: raise DvcException("cannot use both `--details` and `--quiet`") def run(self): self._check_args() if self.args.stdin: return self._interactive_mode() return self._normal_mode() def add_parser(subparsers, parent_parser): import argparse ADD_HELP = "Check whether files or directories are excluded due to `.dvcignore`." parser = subparsers.add_parser( "check-ignore", parents=[parent_parser], description=append_doc_link(ADD_HELP, "check-ignore"), help=ADD_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) parser.add_argument( "-d", "--details", action="store_true", default=False, help="Show the exclude patterns along with each target path.", ) parser.add_argument( "-a", "--all", action="store_true", default=False, help=argparse.SUPPRESS ) parser.add_argument( "-n", "--non-matching", action="store_true", default=False, help=( "Include the target paths which don't match any pattern " "in the `--details` list." ), ) parser.add_argument( "--stdin", action="store_true", default=False, help="Read paths from standard input instead of providing `targets`.", ) parser.add_argument( "targets", nargs="*", help="File or directory paths to check" ).complete = completion.FILE parser.set_defaults(func=CmdCheckIgnore) ================================================ FILE: dvc/commands/checkout.py ================================================ from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.exceptions import CheckoutError from dvc.ui import ui def log_changes(stats): colors = { "modified": "yellow", "added": "green", "deleted": "red", } for state, color in colors.items(): entries = stats.get(state) if not entries: continue for entry in entries: ui.write(f"[{color}]{state[0].upper()}", entry, styled=True, sep="\t") class CmdCheckout(CmdBase): def run(self): from dvc.utils.humanize import get_summary stats, exc = None, None try: result = self.repo.checkout( targets=self.args.targets, with_deps=self.args.with_deps, force=self.args.force, relink=self.args.relink, recursive=self.args.recursive, allow_missing=self.args.allow_missing, ) except CheckoutError as _exc: exc = _exc result = exc.result if self.args.summary: default_message = "No changes." stats = result["stats"] assert isinstance(stats, dict) msg = get_summary(stats.items()) ui.write(msg or default_message) else: result.pop("stats", {}) log_changes(result) if exc: raise exc if self.args.relink: msg = "Relinked successfully" ui.write(msg) return 0 def add_parser(subparsers, parent_parser): CHECKOUT_HELP = "Checkout data files from cache." checkout_parser = subparsers.add_parser( "checkout", parents=[parent_parser], description=append_doc_link(CHECKOUT_HELP, "checkout"), help=CHECKOUT_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) checkout_parser.add_argument( "--summary", action="store_true", default=False, help="Show summary of the changes.", ) checkout_parser.add_argument( "-d", "--with-deps", action="store_true", default=False, help="Checkout all dependencies of the specified target.", ) checkout_parser.add_argument( "-R", "--recursive", action="store_true", default=False, help="Checkout all subdirectories of the specified directory.", ) checkout_parser.add_argument( "-f", "--force", action="store_true", default=False, help="Do not prompt when removing working directory files.", ) checkout_parser.add_argument( "--relink", action="store_true", default=False, help="Recreate links or copies from cache to workspace.", ) checkout_parser.add_argument( "--allow-missing", action="store_true", default=False, help="Ignore errors if some of the files or directories are missing.", ) checkout_parser.add_argument( "targets", nargs="*", help=( "Limit command scope to these tracked files/directories, " ".dvc files and stage names." ), ).complete = completion.DVC_FILE checkout_parser.set_defaults(func=CmdCheckout) ================================================ FILE: dvc/commands/commit.py ================================================ from dvc.cli import completion, formatter from dvc.cli.command import CmdBase from dvc.cli.utils import append_doc_link from dvc.log import logger logger = logger.getChild(__name__) class CmdCommit(CmdBase): def run(self): from dvc.exceptions import DvcException if not self.args.targets: self.args.targets = [None] for target in self.args.targets: try: self.repo.commit( target, with_deps=self.args.with_deps, recursive=self.args.recursive, force=self.args.force, relink=self.args.relink, ) except DvcException: logger.exception("failed to commit%s", (" " + target) if target else "") return 1 return 0 def add_parser(subparsers, parent_parser): COMMIT_HELP = ( "Record changes to files or directories tracked by DVC" " by storing the current versions in the cache." ) commit_parser = subparsers.add_parser( "commit", parents=[parent_parser], description=append_doc_link(COMMIT_HELP, "commit"), help=COMMIT_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) commit_parser.add_argument( "-f", "--force", action="store_true", default=False, help=( "Commit data even if hash values for dependencies or " "outputs did not change." ), ) commit_parser.add_argument( "-d", "--with-deps", action="store_true", default=False, help="Commit all dependencies of the specified target.", ) commit_parser.add_argument( "-R", "--recursive", action="store_true", default=False, help="Commit cache for subdirectories of the specified directory.", ) commit_parser.add_argument( "--no-relink", dest="relink", action="store_false", help="Don't recreate links from cache to workspace.", ) commit_parser.set_defaults(relink=True) commit_parser.add_argument( "targets", nargs="*", help=( "Limit command scope to these tracked files/directories, " ".dvc files and stage names." ), ).complete = completion.DVCFILES_AND_STAGE commit_parser.set_defaults(func=CmdCommit) ================================================ FILE: dvc/commands/completion.py ================================================ from dvc.cli import formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.completion import get_preamble from dvc.cli.utils import append_doc_link from dvc.log import logger from dvc.ui import ui logger = logger.getChild(__name__) SUPPORTED_SHELLS = ["bash", "zsh"] class CmdCompletion(CmdBaseNoRepo): def run(self): import shtab shell = self.args.shell parser = self.args.parser script = shtab.complete(parser, shell=shell, preamble=get_preamble()) ui.write(script, force=True) return 0 def add_parser(subparsers, parent_parser): COMPLETION_HELP = "Generate shell tab completion." COMPLETION_DESCRIPTION = "Prints out shell tab completion scripts." completion_parser = subparsers.add_parser( "completion", parents=[parent_parser], description=append_doc_link(COMPLETION_DESCRIPTION, "completion"), help=COMPLETION_HELP, formatter_class=formatter.RawDescriptionHelpFormatter, ) completion_parser.add_argument( "-s", "--shell", help="Shell syntax for completions.", default="bash", choices=SUPPORTED_SHELLS, ) completion_parser.set_defaults(func=CmdCompletion) ================================================ FILE: dvc/commands/config.py ================================================ import argparse import os from funcy import set_in from dvc.cli import completion, formatter from dvc.cli.command import CmdBaseNoRepo from dvc.cli.utils import append_doc_link from dvc.log import logger from dvc.ui import ui logger = logger.getChild(__name__) NAME_REGEX = r"^(?P(remote|db)\.)?(?P
[^\.]*)\.(?P