From 72066f233bf8dca9294d1489bf0733a5e4a32ac9 Mon Sep 17 00:00:00 2001 From: David de la Iglesia Castro Date: Wed, 27 Oct 2021 19:26:30 +0200 Subject: [PATCH] exp show: Add `--only-changed` option. Use TabularData `drop_duplicates` to only show metrics/params with values varying across the selected experiments. Fixes #5966 --- dvc/command/experiments.py | 13 +++++++++ tests/func/experiments/test_show.py | 44 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/dvc/command/experiments.py b/dvc/command/experiments.py index eb136f09c..c256b59ad 100644 --- a/dvc/command/experiments.py +++ b/dvc/command/experiments.py @@ -471,6 +471,9 @@ def show_experiments( } ) + if kwargs.get("only_changed", False): + td.drop_duplicates("cols") + td.render( pager=pager, borders=True, @@ -537,6 +540,7 @@ class CmdExperimentsShow(CmdBase): pager=not self.args.no_pager, csv=self.args.csv, markdown=self.args.markdown, + only_changed=self.args.only_changed, ) return 0 @@ -1033,6 +1037,15 @@ def add_parser(subparsers, parent_parser): ), metavar="", ) + experiments_show_parser.add_argument( + "--only-changed", + action="store_true", + default=False, + help=( + "Only show metrics/params with values varying " + "across the selected experiments." + ), + ) experiments_show_parser.set_defaults(func=CmdExperimentsShow) EXPERIMENTS_APPLY_HELP = ( diff --git a/tests/func/experiments/test_show.py b/tests/func/experiments/test_show.py index 2c36eb864..5a347f718 100644 --- a/tests/func/experiments/test_show.py +++ b/tests/func/experiments/test_show.py @@ -538,3 +538,47 @@ def test_show_csv(tmp_dir, scm, dvc, exp_stage, capsys): ) in cap.out ) + + +def test_show_only_changed(tmp_dir, dvc, scm, capsys): + tmp_dir.gen("copy.py", COPY_SCRIPT) + params_file = tmp_dir / "params.yaml" + params_data = { + "foo": 1, + "bar": 1, + } + (tmp_dir / params_file).dump(params_data) + + dvc.run( + cmd="python copy.py params.yaml metrics.yaml", + metrics_no_cache=["metrics.yaml"], + params=["foo", "bar"], + name="copy-file", + deps=["copy.py"], + ) + scm.add( + [ + "dvc.yaml", + "dvc.lock", + "copy.py", + "params.yaml", + "metrics.yaml", + ".gitignore", + ] + ) + scm.commit("init") + + dvc.experiments.run(params=["foo=2"]) + + capsys.readouterr() + assert main(["exp", "show"]) == 0 + cap = capsys.readouterr() + + print(cap) + assert "bar" in cap.out + + capsys.readouterr() + assert main(["exp", "show", "--only-changed"]) == 0 + cap = capsys.readouterr() + + assert "bar" not in cap.out