diff --git a/extension/src/experiments/columns/model.test.ts b/extension/src/experiments/columns/model.test.ts index d5f0ac3fd7..4927a303d0 100644 --- a/extension/src/experiments/columns/model.test.ts +++ b/extension/src/experiments/columns/model.test.ts @@ -258,7 +258,7 @@ describe('ColumnsModel', () => { expect(model.getColumnOrder()).toStrictEqual(persistedState) }) - it('should return the first three none hidden columns (minus created) from the persisted state', async () => { + it('should return the first three visible columns for both metrics and params from the persisted state', async () => { const persistedState = [ 'id', 'Created', @@ -266,6 +266,8 @@ describe('ColumnsModel', () => { 'params:params.yaml:process.threshold', 'params:params.yaml:process.test_arg', 'params:params.yaml:dropout', + 'metrics:summary.json:loss', + 'metrics:summary.json:accuracy', 'deps:src/prepare.py', 'deps:src/featurization.py' ] @@ -280,18 +282,26 @@ describe('ColumnsModel', () => { ) await model.transformAndSet(outputFixture) - expect(model.getFirstThreeColumnOrder()).toStrictEqual( - persistedState.slice(2, 5) - ) + expect(model.getSummaryColumnOrder()).toStrictEqual([ + 'params:params.yaml:dvc_logs_dir', + 'params:params.yaml:process.threshold', + 'params:params.yaml:process.test_arg', + 'metrics:summary.json:loss', + 'metrics:summary.json:accuracy' + ]) model.toggleStatus('params:params.yaml:dvc_logs_dir') - expect(model.getFirstThreeColumnOrder()).toStrictEqual( - persistedState.slice(3, 6) - ) + expect(model.getSummaryColumnOrder()).toStrictEqual([ + 'params:params.yaml:process.threshold', + 'params:params.yaml:process.test_arg', + 'params:params.yaml:dropout', + 'metrics:summary.json:loss', + 'metrics:summary.json:accuracy' + ]) }) - it('should return the first three none hidden columns (minus created) collected from data if state is empty', async () => { + it('should return the first three metric and param columns (none hidden) collected from data if state is empty', async () => { const model = new ColumnsModel( exampleDvcRoot, buildMockMemento(), @@ -299,15 +309,21 @@ describe('ColumnsModel', () => { ) await model.transformAndSet(outputFixture) - expect(model.getFirstThreeColumnOrder()).toStrictEqual([ + expect(model.getSummaryColumnOrder()).toStrictEqual([ + 'params:params.yaml:code_names', + 'params:params.yaml:epochs', + 'params:params.yaml:learning_rate', 'metrics:summary.json:loss', 'metrics:summary.json:accuracy', 'metrics:summary.json:val_loss' ]) - model.toggleStatus('Created') + model.toggleStatus('params:params.yaml:code_names') - expect(model.getFirstThreeColumnOrder()).toStrictEqual([ + expect(model.getSummaryColumnOrder()).toStrictEqual([ + 'params:params.yaml:epochs', + 'params:params.yaml:learning_rate', + 'params:params.yaml:dvc_logs_dir', 'metrics:summary.json:loss', 'metrics:summary.json:accuracy', 'metrics:summary.json:val_loss' diff --git a/extension/src/experiments/columns/model.ts b/extension/src/experiments/columns/model.ts index a4707c46b0..712bc8e46d 100644 --- a/extension/src/experiments/columns/model.ts +++ b/extension/src/experiments/columns/model.ts @@ -6,6 +6,7 @@ import { collectParamsFiles } from './collect' import { EXPERIMENT_COLUMN_ID, timestampColumn } from './constants' +import { SummaryAcc, collectFromColumnOrder } from './util' import { Column, ColumnType } from '../webview/contract' import { ExpShowOutput } from '../../cli/dvc/contract' import { PersistenceKey } from '../../persistence/constants' @@ -44,13 +45,21 @@ export class ColumnsModel extends PathSelectionModel { return this.columnOrderState } - public getFirstThreeColumnOrder(): string[] { - return this.columnOrderState - .filter( - path => - this.status[path] && this.status[path] === 2 && path !== 'Created' - ) - .slice(0, 3) + public getSummaryColumnOrder(): string[] { + const acc: SummaryAcc = { metrics: [], params: [] } + for (const path of this.columnOrderState) { + const reachedMaxSummaryOrderLength = + acc.metrics.length >= 3 && acc.params.length >= 3 + if ( + this.status[path] !== Status.SELECTED || + reachedMaxSummaryOrderLength + ) { + continue + } + collectFromColumnOrder(path, acc) + } + + return [...acc.params.slice(0, 3), ...acc.metrics.slice(0, 3)] } public getColumnWidths(): Record { diff --git a/extension/src/experiments/columns/util.ts b/extension/src/experiments/columns/util.ts new file mode 100644 index 0000000000..d021e49c50 --- /dev/null +++ b/extension/src/experiments/columns/util.ts @@ -0,0 +1,14 @@ +import { ColumnType } from '../webview/contract' + +export type SummaryAcc = { + metrics: string[] + params: string[] +} + +export const collectFromColumnOrder = (path: string, acc: SummaryAcc) => { + if (path.startsWith(ColumnType.METRICS)) { + acc.metrics.push(path) + } else if (path.startsWith(ColumnType.PARAMS)) { + acc.params.push(path) + } +} diff --git a/extension/src/experiments/index.ts b/extension/src/experiments/index.ts index 547a13c09a..31fcdf66a8 100644 --- a/extension/src/experiments/index.ts +++ b/extension/src/experiments/index.ts @@ -340,7 +340,7 @@ export class Experiments extends BaseRepository { const selected = await pickExperimentsToPlot( experiments, - this.columns.getFirstThreeColumnOrder() + this.columns.getSummaryColumnOrder() ) if (!selected) { return @@ -365,14 +365,14 @@ export class Experiments extends BaseRepository { public pickCommitOrExperiment() { return pickExperiment( this.experiments.getCommitsAndExperiments(), - this.getFirstThreeColumnOrder() + this.getSummaryColumnOrder() ) } public pickRunningExperiments() { return pickExperiments( this.experiments.getRunningExperiments(), - this.getFirstThreeColumnOrder(), + this.getSummaryColumnOrder(), Title.SELECT_EXPERIMENTS_STOP ) } @@ -380,7 +380,7 @@ export class Experiments extends BaseRepository { public pickExperimentsToRemove() { return pickExperiments( this.experiments.getExperimentsAndQueued(), - this.getFirstThreeColumnOrder(), + this.getSummaryColumnOrder(), Title.SELECT_EXPERIMENTS_REMOVE ) } @@ -388,7 +388,7 @@ export class Experiments extends BaseRepository { public pickExperimentsToPush() { return pickExperiments( this.experiments.getExperiments(), - this.getFirstThreeColumnOrder(), + this.getSummaryColumnOrder(), Title.SELECT_EXPERIMENTS_PUSH ) } @@ -502,8 +502,8 @@ export class Experiments extends BaseRepository { return this.experiments.getCliError() } - public getFirstThreeColumnOrder() { - return this.columns.getFirstThreeColumnOrder() + public getSummaryColumnOrder() { + return this.columns.getSummaryColumnOrder() } public getColumnTerminalNodes() { @@ -584,7 +584,7 @@ export class Experiments extends BaseRepository { return await pickExperiment( this.experiments.getCombinedList(), - this.getFirstThreeColumnOrder(), + this.getSummaryColumnOrder(), Title.SELECT_BASE_EXPERIMENT ) } diff --git a/extension/src/experiments/model/quickPick.ts b/extension/src/experiments/model/quickPick.ts index 5a831d98de..582ba1cb63 100644 --- a/extension/src/experiments/model/quickPick.ts +++ b/extension/src/experiments/model/quickPick.ts @@ -20,18 +20,18 @@ type QuickPickItemAccumulator = { const getItem = ( experiment: Experiment, - firstThreeColumnOrder: string[] + summaryColumnOrder: string[] ): QuickPickItemWithValue => ({ - detail: getColumnPathsQuickPickDetail(experiment, firstThreeColumnOrder), + detail: getColumnPathsQuickPickDetail(experiment, summaryColumnOrder), label: experiment.label, value: experiment }) const getItemWithDescription = ( experiment: Experiment, - firstThreeColumnOrder: string[] + summaryColumnOrder: string[] ) => { - const item = getItem(experiment, firstThreeColumnOrder) + const item = getItem(experiment, summaryColumnOrder) if (experiment.description) { item.description = `${experiment.commit ? '$(git-commit)' : ''}${ experiment.description @@ -43,10 +43,10 @@ const getItemWithDescription = ( const collectItem = ( acc: QuickPickItemAccumulator, experiment: Experiment, - firstThreeColumnOrder: string[], + summaryColumnOrder: string[], transformer = getItem ) => { - const item = transformer(experiment, firstThreeColumnOrder) + const item = transformer(experiment, summaryColumnOrder) acc.items.push(item) if (experiment.selected) { acc.selectedItems.push(item) @@ -56,7 +56,7 @@ const collectItem = ( const collectItems = ( experiments: Experiment[], - firstThreeColumnOrder: string[] + summaryColumnOrder: string[] ) => { const acc: QuickPickItemAccumulator = { items: [], @@ -64,7 +64,7 @@ const collectItems = ( } for (const experiment of experiments) { - collectItem(acc, experiment, firstThreeColumnOrder, getItemWithDescription) + collectItem(acc, experiment, summaryColumnOrder, getItemWithDescription) } return acc @@ -72,16 +72,13 @@ const collectItems = ( export const pickExperimentsToPlot = ( experiments: Experiment[], - firstThreeColumnOrder: string[] + summaryColumnOrder: string[] ): Promise => { if (!definedAndNonEmpty(experiments)) { return Toast.showError(noExperimentsToSelect) } - const { items, selectedItems } = collectItems( - experiments, - firstThreeColumnOrder - ) + const { items, selectedItems } = collectItems(experiments, summaryColumnOrder) return quickPickLimitedValues( items, @@ -101,14 +98,14 @@ type ExperimentItem = { const getExperimentItems = ( experiments: Experiment[], - firstThreeColumnOrder: string[] + summaryColumnOrder: string[] ): ExperimentItem[] => experiments.map(experiment => { const { label, id, description, commit } = experiment return { description: description && `${commit ? '$(git-commit)' : ''}${description}`, - detail: getColumnPathsQuickPickDetail(experiment, firstThreeColumnOrder), + detail: getColumnPathsQuickPickDetail(experiment, summaryColumnOrder), label, value: id } @@ -121,7 +118,7 @@ const pickExperimentOrExperiments = < T extends QuickPickExperiment | QuickPickExperiments >( experiments: Experiment[], - firstThreeColumnOrder: string[], + summaryColumnOrder: string[], title: Title, quickPick: T ): ReturnType | Promise => { @@ -129,7 +126,7 @@ const pickExperimentOrExperiments = < return Toast.showError(noExperimentsToSelect) } - const items = getExperimentItems(experiments, firstThreeColumnOrder) + const items = getExperimentItems(experiments, summaryColumnOrder) return quickPick(items, { matchOnDescription: true, @@ -140,24 +137,24 @@ const pickExperimentOrExperiments = < export const pickExperiment = ( experiments: Experiment[], - firstThreeColumnOrder: string[], + summaryColumnOrder: string[], title: Title = Title.SELECT_EXPERIMENT ): Thenable => pickExperimentOrExperiments( experiments, - firstThreeColumnOrder, + summaryColumnOrder, title, quickPickValue ) export const pickExperiments = ( experiments: Experiment[], - firstThreeColumnOrder: string[], + summaryColumnOrder: string[], title: Title = Title.SELECT_EXPERIMENTS ): Thenable => pickExperimentOrExperiments( experiments, - firstThreeColumnOrder, + summaryColumnOrder, title, quickPickManyValues ) diff --git a/extension/src/experiments/model/tree.test.ts b/extension/src/experiments/model/tree.test.ts index 193f03560e..4295cd4088 100644 --- a/extension/src/experiments/model/tree.test.ts +++ b/extension/src/experiments/model/tree.test.ts @@ -35,7 +35,7 @@ const { mockedGetCommitExperiments, mockedGetCliError, mockedGetDvcRoots, - mockedGetFirstThreeColumnOrder, + mockedGetSummaryColumnOrder, mockedGetWorkspaceAndCommits } = buildMockedExperiments() @@ -179,7 +179,7 @@ describe('ExperimentsTree', () => { .mockReturnValueOnce(experiments) mockedGetDvcRoots.mockReturnValueOnce(['repo']) - mockedGetFirstThreeColumnOrder.mockReturnValue([]) + mockedGetSummaryColumnOrder.mockReturnValue([]) const children = await experimentsTree.getChildren() @@ -294,7 +294,7 @@ describe('ExperimentsTree', () => { } ] mockedGetCommitExperiments.mockReturnValueOnce(experimentsByCommit) - mockedGetFirstThreeColumnOrder.mockReturnValue([]) + mockedGetSummaryColumnOrder.mockReturnValue([]) const children = await experimentsTree.getChildren(commit) @@ -391,9 +391,8 @@ describe('ExperimentsTree', () => { .mockReturnValueOnce(experiments) .mockReturnValueOnce(experiments) mockedGetDvcRoots.mockReturnValueOnce(['repo']) - mockedGetFirstThreeColumnOrder.mockReturnValue([ + mockedGetSummaryColumnOrder.mockReturnValue([ 'params:params.yaml:epochs', - 'deps:data/data.xml', 'params:params.yaml:featurize.random_value' ]) @@ -413,7 +412,7 @@ describe('ExperimentsTree', () => { id: 'exp-123', label: 'a123', tooltip: - '|||\n|:--|--|\n| params.yaml:epochs | 16 |\n| data/data.xml | 22a1a29 |\n| ...ms.yaml:featurize.random_value | - |\n', + '|||\n|:--|--|\n| params.yaml:epochs | 16 |\n| ...ms.yaml:featurize.random_value | - |\n', type: ExperimentType.EXPERIMENT }, { @@ -429,7 +428,7 @@ describe('ExperimentsTree', () => { id: 'exp-456', label: 'b456', tooltip: - '|||\n|:--|--|\n| params.yaml:epochs | 10 |\n| data/data.xml | 22a1a29 |\n| ...ms.yaml:featurize.random_value | [rbf,linear] |\n', + '|||\n|:--|--|\n| params.yaml:epochs | 10 |\n| ...ms.yaml:featurize.random_value | [rbf,linear] |\n', type: ExperimentType.EXPERIMENT }, { @@ -445,7 +444,7 @@ describe('ExperimentsTree', () => { id: 'exp-789', label: 'c789', tooltip: - '|||\n|:--|--|\n| params.yaml:epochs | 29 |\n| data/data.xml | 22a1a29 |\n| ...ms.yaml:featurize.random_value | false |\n', + '|||\n|:--|--|\n| params.yaml:epochs | 29 |\n| ...ms.yaml:featurize.random_value | false |\n', type: ExperimentType.EXPERIMENT } ]) @@ -470,7 +469,7 @@ describe('ExperimentsTree', () => { .mockReturnValueOnce(experiments) .mockReturnValueOnce(experiments) mockedGetDvcRoots.mockReturnValueOnce(['repo']) - mockedGetFirstThreeColumnOrder.mockReturnValue([]) + mockedGetSummaryColumnOrder.mockReturnValue([]) const experimentsTree = new ExperimentsTree( mockedExperiments, diff --git a/extension/src/experiments/model/tree.ts b/extension/src/experiments/model/tree.ts index 1284a0a320..7d9f2dfe18 100644 --- a/extension/src/experiments/model/tree.ts +++ b/extension/src/experiments/model/tree.ts @@ -236,7 +236,7 @@ export class ExperimentsTree tooltip: this.getTooltip( experiment.error, experiment, - this.experiments.getRepository(dvcRoot).getFirstThreeColumnOrder() + this.experiments.getRepository(dvcRoot).getSummaryColumnOrder() ), type: experiment.type } @@ -343,8 +343,8 @@ export class ExperimentsTree return [...this.view.selection] } - private getTooltipTable(experiment: Experiment, firstThreeColumns: string[]) { - const data = getDataFromColumnPaths(experiment, firstThreeColumns) + private getTooltipTable(experiment: Experiment, summaryColumns: string[]) { + const data = getDataFromColumnPaths(experiment, summaryColumns) .map( ({ truncatedValue: value, columnPath }) => `| ${truncateFromLeft(columnPath, 30)} | ${value} |\n` @@ -356,14 +356,14 @@ export class ExperimentsTree private getTooltip( error: string | undefined, experiment: Experiment, - firstThreeColumns: string[] + summaryColumns: string[] ) { if (!error) { - if (firstThreeColumns.length === 0) { + if (summaryColumns.length === 0) { return } - return this.getTooltipTable(experiment, firstThreeColumns) + return this.getTooltipTable(experiment, summaryColumns) } return getErrorTooltip(error) diff --git a/extension/src/plots/model/index.test.ts b/extension/src/plots/model/index.test.ts index 815533b63d..1beda6f213 100644 --- a/extension/src/plots/model/index.test.ts +++ b/extension/src/plots/model/index.test.ts @@ -34,15 +34,15 @@ describe('plotsModel', () => { DEFAULT_SECTION_NB_ITEMS_PER_ROW_OR_WIDTH }) const mockedGetSelectedRevisions = jest.fn() - const mockedGetFirstThreeColumnOrder = jest.fn() - mockedGetFirstThreeColumnOrder.mockReturnValue([]) + const mockedGetSummaryColumnOrder = jest.fn() + mockedGetSummaryColumnOrder.mockReturnValue([]) beforeEach(() => { model = new PlotsModel( exampleDvcRoot, { - getFirstThreeColumnOrder: mockedGetFirstThreeColumnOrder, getSelectedRevisions: mockedGetSelectedRevisions, + getSummaryColumnOrder: mockedGetSummaryColumnOrder, isReady: () => Promise.resolve(undefined) } as unknown as Experiments, { @@ -68,8 +68,8 @@ describe('plotsModel', () => { model = new PlotsModel( exampleDvcRoot, { - getFirstThreeColumnOrder: mockedGetFirstThreeColumnOrder, getSelectedRevisions: mockedGetSelectedRevisions, + getSummaryColumnOrder: mockedGetSummaryColumnOrder, isReady: () => Promise.resolve(undefined) } as unknown as Experiments, { getImageErrors: () => undefined } as unknown as ErrorsModel, diff --git a/extension/src/plots/model/index.ts b/extension/src/plots/model/index.ts index 6e564ecb81..b16c291e75 100644 --- a/extension/src/plots/model/index.ts +++ b/extension/src/plots/model/index.ts @@ -12,7 +12,7 @@ import { collectImageUrl, collectIdShas } from './collect' -import { getRevisionFirstThreeColumns } from './util' +import { getRevisionSummaryColumns } from './util' import { checkForCustomPlotOptions, cleanupOldOrderValue, @@ -206,12 +206,12 @@ export class PlotsModel extends ModelWithPersistence { displayColor, errors: this.errors.getRevisionErrors(id), fetched: this.fetchedRevs.has(id), - firstThreeColumns: getRevisionFirstThreeColumns( - this.experiments.getFirstThreeColumnOrder(), - experiment - ), id, - label + label, + summaryColumns: getRevisionSummaryColumns( + this.experiments.getSummaryColumnOrder(), + experiment + ) } if (commit) { diff --git a/extension/src/plots/model/util.ts b/extension/src/plots/model/util.ts index f4b5f81e96..d9e3c03db5 100644 --- a/extension/src/plots/model/util.ts +++ b/extension/src/plots/model/util.ts @@ -1,12 +1,12 @@ import { getDataFromColumnPaths } from '../../experiments/model/util' import { Experiment } from '../../experiments/webview/contract' -import { RevisionFirstThreeColumns } from '../webview/contract' +import { RevisionSummaryColumns } from '../webview/contract' -export const getRevisionFirstThreeColumns = ( - firstThreeColumns: string[], +export const getRevisionSummaryColumns = ( + summaryColumns: string[], experiment: Experiment -): RevisionFirstThreeColumns => - getDataFromColumnPaths(experiment, firstThreeColumns).map( +): RevisionSummaryColumns => + getDataFromColumnPaths(experiment, summaryColumns).map( ({ columnPath: path, value, type }) => ({ path, type, diff --git a/extension/src/plots/webview/contract.ts b/extension/src/plots/webview/contract.ts index 854af2691a..f9a922f878 100644 --- a/extension/src/plots/webview/contract.ts +++ b/extension/src/plots/webview/contract.ts @@ -49,7 +49,7 @@ export type ComparisonPlots = { revisions: ComparisonRevisionData }[] -export type RevisionFirstThreeColumns = Array<{ +export type RevisionSummaryColumns = Array<{ path: string value: string | number type: string @@ -60,7 +60,7 @@ export type Revision = { displayColor: Color errors?: string[] fetched: boolean - firstThreeColumns: RevisionFirstThreeColumns + summaryColumns: RevisionSummaryColumns description: string | undefined id: string label: string diff --git a/extension/src/test/fixtures/plotsDiff/index.ts b/extension/src/test/fixtures/plotsDiff/index.ts index d13f6a399d..88472a1cec 100644 --- a/extension/src/test/fixtures/plotsDiff/index.ts +++ b/extension/src/test/fixtures/plotsDiff/index.ts @@ -531,7 +531,22 @@ export const getRevisions = (): Revision[] => { displayColor: workspace, errors: undefined, fetched: true, - firstThreeColumns: [ + summaryColumns: [ + { + path: 'params.yaml:code_names', + type: ColumnType.PARAMS, + value: '[0,1]' + }, + { + path: 'params.yaml:epochs', + type: ColumnType.PARAMS, + value: 5 + }, + { + path: 'params.yaml:learning_rate', + type: ColumnType.PARAMS, + value: 2.1e-7 + }, { type: ColumnType.METRICS, path: 'summary.json:loss', @@ -553,7 +568,22 @@ export const getRevisions = (): Revision[] => { commit: 'Update version and CHANGELOG for release (#4022) ...', errors: undefined, fetched: true, - firstThreeColumns: [ + summaryColumns: [ + { + path: 'params.yaml:code_names', + type: ColumnType.PARAMS, + value: '[0,1]' + }, + { + path: 'params.yaml:epochs', + type: ColumnType.PARAMS, + value: 5 + }, + { + path: 'params.yaml:learning_rate', + type: ColumnType.PARAMS, + value: 2.1e-7 + }, { path: 'summary.json:loss', type: ColumnType.METRICS, @@ -578,7 +608,22 @@ export const getRevisions = (): Revision[] => { { errors: undefined, fetched: true, - firstThreeColumns: [ + summaryColumns: [ + { + path: 'params.yaml:code_names', + type: ColumnType.PARAMS, + value: '[0,1]' + }, + { + path: 'params.yaml:epochs', + type: ColumnType.PARAMS, + value: 2 + }, + { + path: 'params.yaml:learning_rate', + type: ColumnType.PARAMS, + value: 2e-12 + }, { type: ColumnType.METRICS, path: 'summary.json:loss', @@ -603,7 +648,22 @@ export const getRevisions = (): Revision[] => { { errors: undefined, fetched: true, - firstThreeColumns: [ + summaryColumns: [ + { + path: 'params.yaml:code_names', + type: ColumnType.PARAMS, + value: '[0,1]' + }, + { + path: 'params.yaml:epochs', + type: ColumnType.PARAMS, + value: 2 + }, + { + path: 'params.yaml:learning_rate', + type: ColumnType.PARAMS, + value: 2.2e-7 + }, { type: ColumnType.METRICS, path: 'summary.json:loss', @@ -628,7 +688,22 @@ export const getRevisions = (): Revision[] => { { errors: undefined, fetched: true, - firstThreeColumns: [ + summaryColumns: [ + { + path: 'params.yaml:code_names', + type: ColumnType.PARAMS, + value: '[0,1]' + }, + { + path: 'params.yaml:epochs', + type: ColumnType.PARAMS, + value: 5 + }, + { + path: 'params.yaml:learning_rate', + type: ColumnType.PARAMS, + value: 2.1e-7 + }, { type: ColumnType.METRICS, path: 'summary.json:loss', diff --git a/extension/src/test/suite/experiments/workspace.test.ts b/extension/src/test/suite/experiments/workspace.test.ts index 2ac989fe36..bf7a3a8aff 100644 --- a/extension/src/test/suite/experiments/workspace.test.ts +++ b/extension/src/test/suite/experiments/workspace.test.ts @@ -467,13 +467,15 @@ suite('Workspace Experiments Test Suite', () => { [ { description: '[exp-e7a67]', - detail: 'loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2e-12, loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', label: '4fb124a', value: queueTaskId }, { description: '[exp-83425]', - detail: 'loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', label: 'workspace', value: 'exp-83425' } @@ -561,57 +563,66 @@ suite('Workspace Experiments Test Suite', () => { { description: '$(git-commit)Update version and CHANGELOG for release (#4022) ...', - detail: 'loss:2.0488560, accuracy:0.34848332, val_loss:1.9979370', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:2.0488560, accuracy:0.34848332, val_loss:1.9979370', label: 'main', value: 'main' }, { description: '[exp-e7a67]', - detail: 'loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2e-12, loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', label: '4fb124a', value: 'exp-e7a67' }, { description: '[test-branch]', - detail: 'loss:1.9293040, accuracy:0.46680000, val_loss:1.8770883', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2.2e-7, loss:1.9293040, accuracy:0.46680000, val_loss:1.8770883', label: '42b8736', value: 'test-branch' }, { description: '[exp-83425]', - detail: 'loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', label: 'workspace', value: 'exp-83425' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:-, epochs:-, learning_rate:-, loss:-, accuracy:-, val_loss:-', label: '489fd8b', value: '489fd8b' }, { description: '[exp-f13bca]', - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: 'f0f9186', value: 'exp-f13bca' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,2], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: '55d492c', value: '55d492c' }, { description: '$(git-commit)Improve "Get Started" walkthrough (#4020) ...', - detail: 'loss:2.0488560, accuracy:0.34848332, val_loss:1.9979370', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:2.0488560, accuracy:0.34848332, val_loss:1.9979370', label: 'fe2919b', value: 'fe2919b' }, { description: '$(git-commit)Add capabilities to text mentioning storage provider extensions (#4015)', - detail: 'loss:2.0488560, accuracy:0.34848332, val_loss:1.9979370', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:2.0488560, accuracy:0.34848332, val_loss:1.9979370', label: '7df876c', value: '7df876c' } @@ -705,37 +716,43 @@ suite('Workspace Experiments Test Suite', () => { [ { description: '[exp-e7a67]', - detail: 'loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2e-12, loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', label: '4fb124a', value: 'exp-e7a67' }, { description: '[test-branch]', - detail: 'loss:1.9293040, accuracy:0.46680000, val_loss:1.8770883', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2.2e-7, loss:1.9293040, accuracy:0.46680000, val_loss:1.8770883', label: '42b8736', value: 'test-branch' }, { description: '[exp-83425]', - detail: 'loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', label: EXPERIMENT_WORKSPACE_ID, value: 'exp-83425' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:-, epochs:-, learning_rate:-, loss:-, accuracy:-, val_loss:-', label: '489fd8b', value: '489fd8b' }, { description: '[exp-f13bca]', - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: 'f0f9186', value: 'exp-f13bca' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,2], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: '55d492c', value: '55d492c' } @@ -799,43 +816,50 @@ suite('Workspace Experiments Test Suite', () => { [ { description: '[exp-e7a67]', - detail: 'loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2e-12, loss:2.0205045, accuracy:0.37241668, val_loss:1.9979371', label: '4fb124a', value: 'exp-e7a67' }, { description: '[test-branch]', - detail: 'loss:1.9293040, accuracy:0.46680000, val_loss:1.8770883', + detail: + 'code_names:[0,1], epochs:2, learning_rate:2.2e-7, loss:1.9293040, accuracy:0.46680000, val_loss:1.8770883', label: '42b8736', value: 'test-branch' }, { description: '[exp-83425]', - detail: 'loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:1.7750162, accuracy:0.59265000, val_loss:1.7233840', label: EXPERIMENT_WORKSPACE_ID, value: 'exp-83425' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:-, epochs:-, learning_rate:-, loss:-, accuracy:-, val_loss:-', label: '489fd8b', value: '489fd8b' }, { description: '[exp-f13bca]', - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: 'f0f9186', value: 'exp-f13bca' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,1], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: '90aea7f', value: '90aea7f' }, { description: undefined, - detail: 'loss:-, accuracy:-, val_loss:-', + detail: + 'code_names:[0,2], epochs:5, learning_rate:2.1e-7, loss:-, accuracy:-, val_loss:-', label: '55d492c', value: '55d492c' } diff --git a/extension/src/test/util/jest/index.ts b/extension/src/test/util/jest/index.ts index c24540e9a7..a4b1ee5036 100644 --- a/extension/src/test/util/jest/index.ts +++ b/extension/src/test/util/jest/index.ts @@ -39,7 +39,7 @@ export const buildMockedExperiments = () => { const mockedGetSorts = jest.fn() const mockedGetSelectedRevisions = jest.fn() const mockedGetCommitExperiments = jest.fn() - const mockedGetFirstThreeColumnOrder = jest.fn() + const mockedGetSummaryColumnOrder = jest.fn() const mockedExperiments = { columnsChanged: mockedColumnsChanged, experimentsChanged: mockedExperimentsChanged, @@ -51,9 +51,9 @@ export const buildMockedExperiments = () => { getCommitExperiments: mockedGetCommitExperiments, getFilter: mockedGetFilter, getFilters: mockedGetFilters, - getFirstThreeColumnOrder: mockedGetFirstThreeColumnOrder, getSelectedRevisions: mockedGetSelectedRevisions, getSorts: mockedGetSorts, + getSummaryColumnOrder: mockedGetSummaryColumnOrder, getWorkspaceAndCommits: mockedGetWorkspaceAndCommits } as unknown as Experiments), isReady: () => true @@ -70,9 +70,9 @@ export const buildMockedExperiments = () => { mockedGetDvcRoots, mockedGetFilter, mockedGetFilters, - mockedGetFirstThreeColumnOrder, mockedGetSelectedRevisions, mockedGetSorts, + mockedGetSummaryColumnOrder, mockedGetWorkspaceAndCommits } } diff --git a/webview/src/plots/components/App.test.tsx b/webview/src/plots/components/App.test.tsx index b79f99f218..c7ba3d1e9f 100644 --- a/webview/src/plots/components/App.test.tsx +++ b/webview/src/plots/components/App.test.tsx @@ -243,9 +243,9 @@ describe('App', () => { description: '[exp-a270a]', displayColor: '#945dd6', fetched: false, - firstThreeColumns: [], id: 'ad2b5ec', - label: 'ad2b5ec' + label: 'ad2b5ec', + summaryColumns: [] } ], width: DEFAULT_NB_ITEMS_PER_ROW @@ -259,9 +259,9 @@ describe('App', () => { description: '[exp-a270a]', displayColor: '#945dd6', fetched: false, - firstThreeColumns: [], id: 'ad2b5ec', - label: 'ad2b5ec' + label: 'ad2b5ec', + summaryColumns: [] } ], template: null diff --git a/webview/src/plots/components/comparisonTable/ComparisonTable.test.tsx b/webview/src/plots/components/comparisonTable/ComparisonTable.test.tsx index eb404b4f74..74807a107f 100644 --- a/webview/src/plots/components/comparisonTable/ComparisonTable.test.tsx +++ b/webview/src/plots/components/comparisonTable/ComparisonTable.test.tsx @@ -289,9 +289,9 @@ describe('ComparisonTable', () => { description: undefined, displayColor: '#f56565', fetched: true, - firstThreeColumns: [], id: 'noData', - label: revisionWithNoData + label: revisionWithNoData, + summaryColumns: [] } ] }) @@ -322,9 +322,9 @@ describe('ComparisonTable', () => { description: undefined, displayColor: '#f56565', fetched: true, - firstThreeColumns: [], id: revisionWithNoData, - label: 'noData' + label: 'noData', + summaryColumns: [] } ] }) diff --git a/webview/src/plots/components/ribbon/RibbonBlock.tsx b/webview/src/plots/components/ribbon/RibbonBlock.tsx index e527a73a04..1b22bfcf98 100644 --- a/webview/src/plots/components/ribbon/RibbonBlock.tsx +++ b/webview/src/plots/components/ribbon/RibbonBlock.tsx @@ -36,7 +36,7 @@ export const RibbonBlock: React.FC = ({ displayColor, errors, fetched, - firstThreeColumns, + summaryColumns, id, label } = revision @@ -78,7 +78,7 @@ export const RibbonBlock: React.FC = ({ ) - return firstThreeColumns.length === 0 && !commit ? ( + return summaryColumns.length === 0 && !commit ? ( mainContent ) : ( {mainContent} diff --git a/webview/src/plots/components/ribbon/RibbonBlockTooltip.tsx b/webview/src/plots/components/ribbon/RibbonBlockTooltip.tsx index ddacec00fc..a8e0768487 100644 --- a/webview/src/plots/components/ribbon/RibbonBlockTooltip.tsx +++ b/webview/src/plots/components/ribbon/RibbonBlockTooltip.tsx @@ -13,7 +13,7 @@ export const RibbonBlockTooltip: React.FC<{ revision: Revision children: ReactElement }> = ({ revision, children }) => { - const { firstThreeColumns, commit, errors } = revision + const { summaryColumns, commit, errors } = revision const tooltipContent = (
@@ -24,7 +24,7 @@ export const RibbonBlockTooltip: React.FC<{ )} - {firstThreeColumns.map(({ path, value, type }) => ( + {summaryColumns.map(({ path, value, type }) => (
{path} @@ -44,14 +44,14 @@ export const RibbonBlockTooltip: React.FC<{

- Reflects the first three columns (excluding Created) in the experiments - table. + Reflects the first three columns for both metrics and params in the + experiments table.

{commit && (

0 && styles.addTopBorder + summaryColumns.length > 0 && styles.addTopBorder )} >