Skip to content

Commit 5f778fe

Browse files
committed
Adds hparam column persistence
1 parent 4453c80 commit 5f778fe

File tree

5 files changed

+116
-1
lines changed

5 files changed

+116
-1
lines changed

tensorboard/webapp/hparams/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ tf_ng_module(
3737
"//tensorboard/webapp/hparams/_redux:hparams_actions",
3838
"//tensorboard/webapp/hparams/_redux:hparams_module",
3939
"//tensorboard/webapp/hparams/_redux:hparams_selectors",
40+
"//tensorboard/webapp/persistent_settings:config_module",
4041
"@npm//@angular/core",
42+
"@npm//@ngrx/store",
4143
],
4244
)
4345

tensorboard/webapp/hparams/hparams_module.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,26 @@ See the License for the specific language governing permissions and
1313
limitations under the License.
1414
==============================================================================*/
1515
import {NgModule} from '@angular/core';
16+
import {createSelector} from '@ngrx/store';
17+
import {PersistentSettingsConfigModule} from '../persistent_settings/persistent_settings_config_module';
1618
import {HparamsModule as ReduxModule} from './_redux/hparams_module';
19+
import {getDashboardDisplayedHparamColumns} from './_redux/hparams_selectors';
20+
21+
export function getRunsTableHeadersFactory() {
22+
return createSelector(
23+
getDashboardDisplayedHparamColumns,
24+
(dashboardDisplayedHparamColumns) => {
25+
return {dashboardDisplayedHparamColumns};
26+
}
27+
);
28+
}
1729

1830
@NgModule({
19-
imports: [ReduxModule],
31+
imports: [
32+
ReduxModule,
33+
PersistentSettingsConfigModule.defineGlobalSetting(
34+
getRunsTableHeadersFactory
35+
),
36+
],
2037
})
2138
export class HparamsModule {}

tensorboard/webapp/persistent_settings/_data_source/persistent_settings_data_source.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ export class OSSSettingsConverter extends SettingsConverter<
102102
serializableSettings.rangeSelectionHeaders =
103103
settings.rangeSelectionHeaders;
104104
}
105+
if (settings.dashboardDisplayedHparamColumns !== undefined) {
106+
serializableSettings.dashboardDisplayedHparamColumns =
107+
settings.dashboardDisplayedHparamColumns;
108+
}
105109
return serializableSettings;
106110
}
107111

@@ -236,6 +240,11 @@ export class OSSSettingsConverter extends SettingsConverter<
236240
settings.rangeSelectionHeaders = backendSettings.rangeSelectionHeaders;
237241
}
238242

243+
if (Array.isArray(backendSettings.dashboardDisplayedHparamColumns)) {
244+
settings.dashboardDisplayedHparamColumns =
245+
backendSettings.dashboardDisplayedHparamColumns;
246+
}
247+
239248
return settings;
240249
}
241250
}

tensorboard/webapp/persistent_settings/_data_source/persistent_settings_data_source_test.ts

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,46 @@ describe('persistent_settings data_source test', () => {
420420

421421
expect(actual).toEqual({});
422422
});
423+
424+
it('properly converts dashboardDisplayedHparamColumns', async () => {
425+
getItemSpy.withArgs(TEST_ONLY.GLOBAL_LOCAL_STORAGE_KEY).and.returnValue(
426+
JSON.stringify({
427+
dashboardDisplayedHparamColumns: [
428+
{
429+
type: ColumnHeaderType.HPARAM,
430+
name: 'conv_layers',
431+
displayName: 'Conv Layers',
432+
enabled: true,
433+
},
434+
{
435+
type: ColumnHeaderType.HPARAM,
436+
name: 'conv_kernel_size',
437+
displayName: 'Conv Kernel Size',
438+
enabled: true,
439+
},
440+
],
441+
})
442+
);
443+
444+
const actual = await firstValueFrom(dataSource.getSettings());
445+
446+
expect(actual).toEqual({
447+
dashboardDisplayedHparamColumns: [
448+
{
449+
type: ColumnHeaderType.HPARAM,
450+
name: 'conv_layers',
451+
displayName: 'Conv Layers',
452+
enabled: true,
453+
},
454+
{
455+
type: ColumnHeaderType.HPARAM,
456+
name: 'conv_kernel_size',
457+
displayName: 'Conv Kernel Size',
458+
enabled: true,
459+
},
460+
],
461+
});
462+
});
423463
});
424464

425465
describe('#setSettings', () => {
@@ -503,6 +543,51 @@ describe('persistent_settings data_source test', () => {
503543
})
504544
);
505545
});
546+
547+
it('properly converts dashboardDisplayedHparamColumns', async () => {
548+
getItemSpy
549+
.withArgs(TEST_ONLY.GLOBAL_LOCAL_STORAGE_KEY)
550+
.and.returnValue(null);
551+
552+
await firstValueFrom(
553+
dataSource.setSettings({
554+
dashboardDisplayedHparamColumns: [
555+
{
556+
type: ColumnHeaderType.HPARAM,
557+
name: 'conv_layers',
558+
displayName: 'Conv Layers',
559+
enabled: true,
560+
},
561+
{
562+
type: ColumnHeaderType.HPARAM,
563+
name: 'conv_kernel_size',
564+
displayName: 'Conv Kernel Size',
565+
enabled: true,
566+
},
567+
],
568+
})
569+
);
570+
571+
expect(setItemSpy).toHaveBeenCalledOnceWith(
572+
TEST_ONLY.GLOBAL_LOCAL_STORAGE_KEY,
573+
JSON.stringify({
574+
dashboardDisplayedHparamColumns: [
575+
{
576+
type: ColumnHeaderType.HPARAM,
577+
name: 'conv_layers',
578+
displayName: 'Conv Layers',
579+
enabled: true,
580+
},
581+
{
582+
type: ColumnHeaderType.HPARAM,
583+
name: 'conv_kernel_size',
584+
displayName: 'Conv Kernel Size',
585+
enabled: true,
586+
},
587+
],
588+
})
589+
);
590+
});
506591
});
507592

508593
describe('settings migration', () => {

tensorboard/webapp/persistent_settings/_data_source/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export declare interface BackendSettings {
4646
linkedTimeEnabled?: boolean;
4747
singleSelectionHeaders?: ColumnHeader[];
4848
rangeSelectionHeaders?: ColumnHeader[];
49+
dashboardDisplayedHparamColumns?: ColumnHeader[];
4950
}
5051

5152
/**
@@ -70,4 +71,5 @@ export interface PersistableSettings {
7071
linkedTimeEnabled?: boolean;
7172
singleSelectionHeaders?: ColumnHeader[];
7273
rangeSelectionHeaders?: ColumnHeader[];
74+
dashboardDisplayedHparamColumns?: ColumnHeader[];
7375
}

0 commit comments

Comments
 (0)