Skip to content

Commit 914f662

Browse files
authored
HParam UI: update ColumnHeader type (#6346)
## Motivation for features / changes The goals is to allow for dynamic HParam columns in the data table. This means that we cannot have an enum like ColumnHeaderType be the unique identifier for the column headers because we cannot encapsulate all possible hparams into an enum. ## Technical description of changes This change adds a name and displayName field to the ColumnHeader interface. The goal here is to make name be the unique identifier for columns. However, this PR does not use these fields at all. It simply adds them. THERE IS NO FUNCTIONAL CHANGE in this PR. Upcoming changes will switch the code over to start using the name as the unique identifier and display the displayName. (For POC to see how this change fits in googlers see cl/526767686) ## Screenshots of UI changes (or N/A) N/A ## Detailed steps to verify changes work correctly (as executed by you) POC works ## Alternate designs / implementations considered (or N/A) There were many alternatives considered. In fact I do not believe this is going to be the final structure. One option is to remove the type and add a category field export interface ColumnHeader { name: string; displayName: string; Category: ColumnCategory(STATIC, HPARAM, METRIC) enabled: boolean; } However, deciding how to calculate the value based on hardcoded name strings does not seem ideal. Another option is to have a hierarchy. I expect it to look like this: Interface ColumnHeaderBase { name: string; displayName: string; type: ColumnHeaderType; enabled: boolean; } export interface StaticColumnHeader extends ColumnHeaderBase{ category: “STATIC” } export interface HParamColumnHeader extends ColumnHeaderBase{ category: “HParam” source: enum(data, config,....); differs:boolean; } ColumnHeader = StaticColumnHeader | HParamColumnHeader This may be the final form that we go with however, we are not sure the source and differs attributes need to go here or somewhere else yet. All code which works with the type defined in this PR will work with this proposal as well. Lastly, there is the option which is the same as the hierarchy option above but with StaticColumnHeader being the only interface with a "type" attribute. This is a valid possibility but, I have decided that it just adds unnecessary complexity by requiring a type check in many more places.
1 parent 7e751fc commit 914f662

File tree

8 files changed

+1684
-287
lines changed

8 files changed

+1684
-287
lines changed

tensorboard/webapp/metrics/store/metrics_reducers.ts

Lines changed: 109 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -269,26 +269,116 @@ const {initialState, reducers: namespaceContextedReducer} =
269269
stepSelectorEnabled: false,
270270
rangeSelectionEnabled: false,
271271
singleSelectionHeaders: [
272-
{type: ColumnHeaderType.RUN, enabled: true},
273-
{type: ColumnHeaderType.SMOOTHED, enabled: true},
274-
{type: ColumnHeaderType.VALUE, enabled: true},
275-
{type: ColumnHeaderType.STEP, enabled: true},
276-
{type: ColumnHeaderType.RELATIVE_TIME, enabled: true},
272+
{
273+
type: ColumnHeaderType.RUN,
274+
name: 'run',
275+
displayName: 'Run',
276+
enabled: true,
277+
},
278+
{
279+
type: ColumnHeaderType.SMOOTHED,
280+
name: 'smoothed',
281+
displayName: 'Smoothed',
282+
enabled: true,
283+
},
284+
{
285+
type: ColumnHeaderType.VALUE,
286+
name: 'value',
287+
displayName: 'Value',
288+
enabled: true,
289+
},
290+
{
291+
type: ColumnHeaderType.STEP,
292+
name: 'step',
293+
displayName: 'Step',
294+
enabled: true,
295+
},
296+
{
297+
type: ColumnHeaderType.RELATIVE_TIME,
298+
name: 'relative',
299+
displayName: 'Relative',
300+
enabled: true,
301+
},
277302
],
278303
rangeSelectionHeaders: [
279-
{type: ColumnHeaderType.RUN, enabled: true},
280-
{type: ColumnHeaderType.MIN_VALUE, enabled: true},
281-
{type: ColumnHeaderType.MAX_VALUE, enabled: true},
282-
{type: ColumnHeaderType.START_VALUE, enabled: true},
283-
{type: ColumnHeaderType.END_VALUE, enabled: true},
284-
{type: ColumnHeaderType.VALUE_CHANGE, enabled: true},
285-
{type: ColumnHeaderType.PERCENTAGE_CHANGE, enabled: true},
286-
{type: ColumnHeaderType.START_STEP, enabled: true},
287-
{type: ColumnHeaderType.END_STEP, enabled: true},
288-
{type: ColumnHeaderType.STEP_AT_MAX, enabled: false},
289-
{type: ColumnHeaderType.STEP_AT_MIN, enabled: false},
290-
{type: ColumnHeaderType.MEAN, enabled: false},
291-
{type: ColumnHeaderType.RAW_CHANGE, enabled: false},
304+
{
305+
type: ColumnHeaderType.RUN,
306+
name: 'run',
307+
displayName: 'Run',
308+
enabled: true,
309+
},
310+
{
311+
type: ColumnHeaderType.MIN_VALUE,
312+
name: 'min',
313+
displayName: 'Min',
314+
enabled: true,
315+
},
316+
{
317+
type: ColumnHeaderType.MAX_VALUE,
318+
name: 'max',
319+
displayName: 'Max',
320+
enabled: true,
321+
},
322+
{
323+
type: ColumnHeaderType.START_VALUE,
324+
name: 'start',
325+
displayName: 'Start Value',
326+
enabled: true,
327+
},
328+
{
329+
type: ColumnHeaderType.END_VALUE,
330+
name: 'end',
331+
displayName: 'End Value',
332+
enabled: true,
333+
},
334+
{
335+
type: ColumnHeaderType.VALUE_CHANGE,
336+
name: 'valueChange',
337+
displayName: 'Value',
338+
enabled: true,
339+
},
340+
{
341+
type: ColumnHeaderType.PERCENTAGE_CHANGE,
342+
name: 'percentageChange',
343+
displayName: '%',
344+
enabled: true,
345+
},
346+
{
347+
type: ColumnHeaderType.START_STEP,
348+
name: 'startStep',
349+
displayName: 'Start Step',
350+
enabled: true,
351+
},
352+
{
353+
type: ColumnHeaderType.END_STEP,
354+
name: 'endStep',
355+
displayName: 'End Step',
356+
enabled: true,
357+
},
358+
{
359+
type: ColumnHeaderType.STEP_AT_MAX,
360+
name: 'stepAtMax',
361+
displayName: 'Step At Max',
362+
enabled: false,
363+
},
364+
{
365+
type: ColumnHeaderType.STEP_AT_MIN,
366+
name: 'stepAtMin',
367+
displayName: 'Step At Min',
368+
enabled: false,
369+
},
370+
{
371+
type: ColumnHeaderType.MEAN,
372+
name: 'mean',
373+
displayName: 'Mean',
374+
enabled: false,
375+
},
376+
{
377+
type: ColumnHeaderType.RAW_CHANGE,
378+
name: 'rawChange',
379+
displayName: 'Raw',
380+
enabled: false,
381+
},
292382
],
293383
filteredPluginTypes: new Set(),
294384
stepMinMax: {
@@ -1308,7 +1398,7 @@ const reducer = createReducer(
13081398
);
13091399

13101400
newHeaders[newToggledHeaderIndex] = {
1311-
type: newHeaders[newToggledHeaderIndex].type,
1401+
...newHeaders[newToggledHeaderIndex],
13121402
enabled: !newHeaders[newToggledHeaderIndex].enabled,
13131403
};
13141404

0 commit comments

Comments
 (0)