From 23793a9db1f52e13905dc163b7bbff943f69b4b7 Mon Sep 17 00:00:00 2001 From: Riley Jones Date: Tue, 2 May 2023 23:46:23 +0000 Subject: [PATCH 1/2] add new selector factory to get runs from experiment ids --- .../webapp/runs/store/runs_selectors.ts | 19 +++++++ .../webapp/runs/store/runs_selectors_test.ts | 51 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/tensorboard/webapp/runs/store/runs_selectors.ts b/tensorboard/webapp/runs/store/runs_selectors.ts index ce6f670bc6..185a5bc69f 100644 --- a/tensorboard/webapp/runs/store/runs_selectors.ts +++ b/tensorboard/webapp/runs/store/runs_selectors.ts @@ -79,6 +79,25 @@ export const getRuns = createSelector( } ); +export const getRunsFromExperimentIds = (experimentIds: string[]) => + createSelector( + getDataState, + (state: RunsDataState): Array => { + return experimentIds.reduce((runs, experimentId) => { + const runsIdsForExperiment = (state.runIds[experimentId] || []).filter( + (id) => Boolean(state.runMetadata[id]) + ); + runsIdsForExperiment.forEach((runId) => { + runs.push({ + ...state.runMetadata[runId], + experimentId, + }); + }); + return runs; + }, [] as Array); + } + ); + /** * Returns Observable that emits runs list for an experiment. */ diff --git a/tensorboard/webapp/runs/store/runs_selectors_test.ts b/tensorboard/webapp/runs/store/runs_selectors_test.ts index c99189b187..5b5797544a 100644 --- a/tensorboard/webapp/runs/store/runs_selectors_test.ts +++ b/tensorboard/webapp/runs/store/runs_selectors_test.ts @@ -176,6 +176,57 @@ describe('runs_selectors', () => { }); }); + describe('#getRunsFromExperimentIds', () => { + it('returns runs', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIds: { + eid: ['run1'], + }, + runMetadata: { + run1: buildRun({id: 'run1'}), + }, + }) + ); + expect(selectors.getRunsFromExperimentIds(['eid'])(state)).toEqual([ + { + ...buildRun({ + id: 'run1', + }), + experimentId: 'eid', + }, + ]); + }); + + it('returns runs for the ones that has metadata', () => { + const state = buildStateFromRunsState( + buildRunsState({ + runIds: { + eid: ['run1', 'run2'], + }, + runMetadata: { + run1: buildRun({id: 'run1'}), + }, + }) + ); + expect(selectors.getRunsFromExperimentIds(['eid'])(state)).toEqual([ + { + ...buildRun({ + id: 'run1', + }), + experimentId: 'eid', + }, + ]); + }); + + it('returns empty list if experiment id does not exist', () => { + const state = buildStateFromRunsState(buildRunsState()); + expect( + selectors.getRunsFromExperimentIds(['i_do_not_exist'])(state) + ).toEqual([]); + }); + }); + describe('#getRunIdsForExperiment', () => { beforeEach(() => { // Clear the memoization. From 6f7ff833c9a789e57bf67bbc1e776aa753e0583a Mon Sep 17 00:00:00 2001 From: Riley Jones Date: Wed, 3 May 2023 21:44:42 +0000 Subject: [PATCH 2/2] update formatting --- tensorboard/webapp/runs/store/runs_selectors.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/tensorboard/webapp/runs/store/runs_selectors.ts b/tensorboard/webapp/runs/store/runs_selectors.ts index 185a5bc69f..23ceea336d 100644 --- a/tensorboard/webapp/runs/store/runs_selectors.ts +++ b/tensorboard/webapp/runs/store/runs_selectors.ts @@ -84,15 +84,12 @@ export const getRunsFromExperimentIds = (experimentIds: string[]) => getDataState, (state: RunsDataState): Array => { return experimentIds.reduce((runs, experimentId) => { - const runsIdsForExperiment = (state.runIds[experimentId] || []).filter( - (id) => Boolean(state.runMetadata[id]) - ); - runsIdsForExperiment.forEach((runId) => { - runs.push({ - ...state.runMetadata[runId], - experimentId, + (state.runIds[experimentId] || []) + .filter((id) => Boolean(state.runMetadata[id])) + .forEach((runId) => { + runs.push({...state.runMetadata[runId], experimentId}); }); - }); + return runs; }, [] as Array); }