From 8875fa77f2c0e3fb58c02c2c104b933e67e00157 Mon Sep 17 00:00:00 2001 From: Lijiaoa <61399850+Lijiaoa@users.noreply.github.com> Date: Wed, 15 Sep 2021 09:56:04 +0800 Subject: [PATCH] Improve trial intermediate result graph: trials have not intermediate default key (#4171) --- ts/webui/src/components/modals/Compare.tsx | 27 ++++-------- .../src/components/trial-detail/TableList.tsx | 43 +++++++++++++++++-- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/ts/webui/src/components/modals/Compare.tsx b/ts/webui/src/components/modals/Compare.tsx index ab059fe1b2..6d9248d2c6 100644 --- a/ts/webui/src/components/modals/Compare.tsx +++ b/ts/webui/src/components/modals/Compare.tsx @@ -55,6 +55,7 @@ interface CompareProps { trials: TableObj[]; title: string; showDetails: boolean; + intermediateKeyList?: string[]; onHideDialog: () => void; changeSelectTrialIds?: () => void; } @@ -68,7 +69,9 @@ class Compare extends React.Component { super(props); this.state = { - intermediateKey: 'default' + // intermediate result maybe don't have the 'default' key... + intermediateKey: + this.props.intermediateKeyList !== undefined ? this.props.intermediateKeyList[0] : 'default' }; } @@ -226,10 +229,9 @@ class Compare extends React.Component { }; render(): React.ReactNode { - const { trials, title, showDetails } = this.props; + const { trials, title, showDetails, intermediateKeyList } = this.props; const { intermediateKey } = this.state; - let intermediateAllKeysList: string[] = []; - + const intermediateAllKeysList: string[] = intermediateKeyList !== undefined ? intermediateKeyList : []; const flatten = (m: Map): Map => { return new Map(Array.from(m).map(([key, value]) => [key.baseName, value])); }; @@ -243,20 +245,6 @@ class Compare extends React.Component { intermediates: _parseIntermediates(trial, intermediateKey) })); - if (trials[0].intermediates !== undefined && trials[0].intermediates[0]) { - const parsedMetric = parseMetrics(trials[0].intermediates[0].data); - if (parsedMetric !== undefined && typeof parsedMetric === 'object') { - const allIntermediateKeys: string[] = []; - // just add type=number keys - for (const key in parsedMetric) { - if (typeof parsedMetric[key] === 'number') { - allIntermediateKeys.push(key); - } - } - intermediateAllKeysList = allIntermediateKeys; - } - } - return ( { onClick={this.closeCompareModal} /> - {intermediateAllKeysList.length > 1 ? ( + {intermediateAllKeysList.length > 1 || + (intermediateAllKeysList.length === 1 && intermediateAllKeysList !== ['default']) ? ( ; relation: Map; + intermediateKeyList: string[]; } class TableList extends React.Component { @@ -112,7 +113,8 @@ class TableList extends React.Component { copiedTrialId: undefined, sortInfo: { field: '', isDescend: true }, searchItems: [], - relation: parametersType() + relation: parametersType(), + intermediateKeyList: [] }; this._expandedTrialIds = new Set(); @@ -437,7 +439,11 @@ class TableList extends React.Component { onClick={(): void => { const { tableSource } = this.props; const trial = tableSource.find(trial => trial.id === record.id) as TableObj; - this.setState({ intermediateDialogTrial: trial }); + const intermediateKeyListResult = this.getIntermediateAllKeys(trial); + this.setState({ + intermediateDialogTrial: trial, + intermediateKeyList: intermediateKeyListResult + }); }} > {LineChart} @@ -469,6 +475,33 @@ class TableList extends React.Component { })); }; + private getIntermediateAllKeys = (intermediateDialogTrial: any): string[] => { + let intermediateAllKeysList: string[] = []; + if ( + intermediateDialogTrial!.intermediateMetrics !== undefined && + intermediateDialogTrial!.intermediateMetrics[0] + ) { + const parsedMetric = parseMetrics(intermediateDialogTrial!.intermediateMetrics[0].data); + if (parsedMetric !== undefined && typeof parsedMetric === 'object') { + const allIntermediateKeys: string[] = []; + // just add type=number keys + for (const key in parsedMetric) { + if (typeof parsedMetric[key] === 'number') { + allIntermediateKeys.push(key); + } + } + intermediateAllKeysList = allIntermediateKeys; + } + } + + if (intermediateAllKeysList.includes('default') && intermediateAllKeysList[0] !== 'default') { + intermediateAllKeysList = intermediateAllKeysList.filter(item => item !== 'default'); + intermediateAllKeysList.unshift('default'); + } + + return intermediateAllKeysList; + }; + componentDidUpdate(prevProps: TableListProps): void { if (this.props.tableSource !== prevProps.tableSource) { this._updateTableSource(); @@ -489,7 +522,8 @@ class TableList extends React.Component { selectedRowIds, intermediateDialogTrial, copiedTrialId, - searchItems + searchItems, + intermediateKeyList } = this.state; return ( @@ -564,6 +598,7 @@ class TableList extends React.Component { title='Intermediate results' showDetails={false} trials={[intermediateDialogTrial]} + intermediateKeyList={intermediateKeyList} onHideDialog={(): void => { this.setState({ intermediateDialogTrial: undefined }); }}