1+ import { join } from 'path'
12import { Disposable , Disposer } from '@hediet/std/disposable'
23import { ColumnsModel } from './model'
34import { appendColumnToPath , buildMetricOrParamPath } from './paths'
4- import { timestampColumn } from './constants'
5+ import { EXPERIMENT_COLUMN_ID , timestampColumn } from './constants'
56import { buildMockMemento } from '../../test/util'
67import { generateTestExpShowOutput } from '../../test/util/experiments'
78import { Status } from '../../path/selection/model'
@@ -258,7 +259,7 @@ describe('ColumnsModel', () => {
258259 expect ( model . getColumnOrder ( ) ) . toStrictEqual ( persistedState )
259260 } )
260261
261- it ( 'should return the first three visible columns for both metrics and params from the persisted state' , async ( ) => {
262+ it ( 'should return the first three visible columns for both metrics and params from the persisted state (first) ' , async ( ) => {
262263 const persistedState = [
263264 'id' ,
264265 'Created' ,
@@ -287,7 +288,8 @@ describe('ColumnsModel', () => {
287288 'params:params.yaml:process.threshold' ,
288289 'params:params.yaml:process.test_arg' ,
289290 'metrics:summary.json:loss' ,
290- 'metrics:summary.json:accuracy'
291+ 'metrics:summary.json:accuracy' ,
292+ 'metrics:summary.json:val_accuracy'
291293 ] )
292294
293295 model . toggleStatus ( 'params:params.yaml:dvc_logs_dir' )
@@ -297,10 +299,65 @@ describe('ColumnsModel', () => {
297299 'params:params.yaml:process.test_arg' ,
298300 'params:params.yaml:dropout' ,
299301 'metrics:summary.json:loss' ,
300- 'metrics:summary.json:accuracy'
302+ 'metrics:summary.json:accuracy' ,
303+ 'metrics:summary.json:val_accuracy'
304+ ] )
305+ } )
306+
307+ it ( 'should not add a param that is no longer present to the summary column order' , async ( ) => {
308+ const persistedState = [
309+ 'id' ,
310+ 'Created' ,
311+ 'params:params.yaml:an-old-params'
312+ ]
313+
314+ const model = new ColumnsModel (
315+ exampleDvcRoot ,
316+ buildMockMemento ( {
317+ [ PersistenceKey . METRICS_AND_PARAMS_COLUMN_ORDER + exampleDvcRoot ] :
318+ persistedState
319+ } ) ,
320+ mockedColumnsOrderOrStatusChanged
321+ )
322+ model . toggleStatus ( 'params:params.yaml:an-old-params' )
323+ await model . transformAndSet ( outputFixture )
324+
325+ expect ( model . getSummaryColumnOrder ( ) ) . toStrictEqual ( [
326+ join ( 'params:nested' , 'params.yaml:test' ) ,
327+ 'params:params.yaml:code_names' ,
328+ 'params:params.yaml:dropout' ,
329+ 'metrics:summary.json:accuracy' ,
330+ 'metrics:summary.json:loss' ,
331+ 'metrics:summary.json:val_accuracy'
301332 ] )
302333 } )
303334
335+ it ( 'should add to the persisted state when there are columns that were not found' , async ( ) => {
336+ const persistedState = [ 'params:params.yaml:dvc_logs_dir' ]
337+
338+ const model = new ColumnsModel (
339+ exampleDvcRoot ,
340+ buildMockMemento ( {
341+ [ PersistenceKey . METRICS_AND_PARAMS_COLUMN_ORDER + exampleDvcRoot ] :
342+ persistedState
343+ } ) ,
344+ mockedColumnsOrderOrStatusChanged
345+ )
346+ await model . transformAndSet ( outputFixture )
347+
348+ expect ( model . getSummaryColumnOrder ( ) ) . toStrictEqual ( [
349+ 'params:params.yaml:dvc_logs_dir' ,
350+ join ( 'params:nested' , 'params.yaml:test' ) ,
351+ 'params:params.yaml:code_names' ,
352+ 'metrics:summary.json:accuracy' ,
353+ 'metrics:summary.json:loss' ,
354+ 'metrics:summary.json:val_accuracy'
355+ ] )
356+
357+ const [ id ] = model . getColumnOrder ( )
358+ expect ( id ) . toStrictEqual ( EXPERIMENT_COLUMN_ID )
359+ } )
360+
304361 it ( 'should return the first three metric and param columns (none hidden) collected from data if state is empty' , async ( ) => {
305362 const model = new ColumnsModel (
306363 exampleDvcRoot ,
@@ -310,23 +367,23 @@ describe('ColumnsModel', () => {
310367 await model . transformAndSet ( outputFixture )
311368
312369 expect ( model . getSummaryColumnOrder ( ) ) . toStrictEqual ( [
370+ join ( 'params:nested' , 'params.yaml:test' ) ,
313371 'params:params.yaml:code_names' ,
314- 'params:params.yaml:epochs' ,
315- 'params:params.yaml:learning_rate' ,
316- 'metrics:summary.json:loss' ,
372+ 'params:params.yaml:dropout' ,
317373 'metrics:summary.json:accuracy' ,
318- 'metrics:summary.json:val_loss'
374+ 'metrics:summary.json:loss' ,
375+ 'metrics:summary.json:val_accuracy'
319376 ] )
320377
321378 model . toggleStatus ( 'params:params.yaml:code_names' )
322379
323380 expect ( model . getSummaryColumnOrder ( ) ) . toStrictEqual ( [
324- 'params:params.yaml:epochs' ,
325- 'params:params.yaml:learning_rate ' ,
381+ join ( 'params:nested' , ' params.yaml:test' ) ,
382+ 'params:params.yaml:dropout ' ,
326383 'params:params.yaml:dvc_logs_dir' ,
327- 'metrics:summary.json:loss' ,
328384 'metrics:summary.json:accuracy' ,
329- 'metrics:summary.json:val_loss'
385+ 'metrics:summary.json:loss' ,
386+ 'metrics:summary.json:val_accuracy'
330387 ] )
331388 } )
332389
0 commit comments