pik-piam/modelstats

wish list for the model tests …

Closed this issue · 5 comments

From @0UmfHxcvx5J7JoaOhFSs5mncnisTJJ6q:

  • It would be really useful to have an overview table (say a .csv file) with the run name (e.g. SSP2EU-AMT-NDC), the date, and the RunStatus (maybe for good measure also the commit hash) to figure out since when certain runs fail in order to narrow down which changes might have caused this. Current example would be SSP2EU-AMT-NDC failing since some time. -> #59
  • (Bit of a pet peeve) The test run output directories are partly truncated in the README.md (e.g. SSP2EU-AMT-calibrate_2022-11-26_00 instead of SSP2EU-AMT-calibrate_2022-11-26_00.07.54) which is a nuisance when looking up results. -> #22

While the rs2 features are certainly useful and have their applications, they do not address the heart of this issue.
The intention was specifically to have a table that can be read programmatically, not just manually, to filter for specific run types when looking into problems.
The output of rs2 is anything but machine-readable:

  • it looks like somebody discovered ANSI codes for the first time and decided to use them all
  • fields are not delimited by an explicit character, so field widths would have to be laboriously parsed
  • the run time given in either minutes, hours, or days, is a pain to work with
  • and for good measure it contains some useless ad blurb
$ rs2 -t SSP2EU-Base | cat -A | sed 's/\$$//'
Loading modelstats...   Did you know? Show results from specific folders with: rs2 folder1,folder2
Results from /p/projects/remind/modeltests/remind/output/ 
# Color code: ^[[33mpending^[[39m/^[[33mstartup^[[39m, ^[[36mrunning^[[39m, ^[[4m^[[32mconverged^[[39m^[[24m, ^[[34mconverged (had INFES)^[[39m, ^[[32mfinished^[[39m, ^[[31merror^[[39m.

^[[4mFolder                               Runtime      inSlurm   RunType      RunStatus          Iter              Conv                   modelstat              Mif  AppResults^[[24m 
^[[4m^[[32mSSP2EU-Base-AMT_2023-08-04_22.08.55  3.2 hours    no        nash         Normal completion  31/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-07-28_22.13.59  3 hours      no        nash         Normal completion  31/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-07-21_22.07.42  3.2 hours    no        nash         Normal completion  31/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-07-14_22.07.41  3.1 hours    no        nash         Normal completion  31/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-07-10_13.07.37  3.4 hours    no        nash         Normal completion  41/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-07-07_22.07.59  3.2 hours    no        nash         Normal completion  35/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[31mSSP2EU-Base-AMT_2023-06-30_22.07.45  NA           no        nash         full.log missing   NA                NA                     NA                     no   no
^[[39m^[[4m^[[32mSSP2EU-Base-AMT_2023-06-23_22.16.19  3.3 hours    no        nash         Normal completion  41/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-06-16_22.10.29  3.8 hours    no        nash         Normal completion  43/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-06-09_22.08.24  3.6 hours    no        nash         Normal completion  45/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-06-02_22.07.57  3.2 hours    no        nash         Normal completion  43/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-05-23_16.06.55  3.7 hours    no        nash         Normal completion  45/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[31mSSP2EU-Base-AMT_2023-05-23_14.07.00  NA           no        nash         full.log missing   NA                NA                     NA                     no   no
^[[39m^[[4m^[[32mSSP2EU-Base-AMT_2023-05-16_14.07.39  3.1 hours    no        nash         Normal completion  38/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-05-06_00.08.25  3.1 hours    no        nash         Normal completion  40/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[4m^[[32mSSP2EU-Base-AMT_2023-04-22_00.07.52  3.1 hours    no        nash         Normal completion  38/100            converged              2: Locally Optimal     yes  yes
^[[39m^[[24m^[[34mSSP2EU-Base-AMT_2023-03-30_16.07.44  3.7 hours    no        nash         Normal completion  50/100            converged (had INFES)  2: Locally Optimal     yes  yes
^[[39m^[[31mSSP2EU-Base-AMT_2023-03-21_00.07.38  6.8 hours    no        nash         Normal completion  100/100           not_converged          2: Locally Optimal     yes  yes
^[[39m^[[31mAMT-SSP2EU-Base_2023-03-16_15.23.45  NA           no        nash         Run interrupted    2/100             227222222222           2: Locally Optimal     no   no
^[[39m^[[31mAMT-SSP2EU-Base_2023-03-16_15.01.59  NA           no        nash         Run interrupted    1/100             NA                     NA                     no   no

The commit hash is missing, and rs2 is slow – getting an entire listing (which is what one would do when having no clear idea where to start looking and is what a static .csv file would provide) takes 20 minutes.

It is OK to decide to not implement something. But do not pretend that something was addressed when it was not.


P.S.: Just adding more space to the static columns [↑] works for now, but might as well break next week if somebody comes up with new scenario names. Why not use of-the-shelve solutions?

> format(knitr::kable(head(mtcars), 'simple'))
[1] "                      mpg   cyl   disp    hp   drat      wt    qsec   vs   am   gear   carb"
[2] "------------------  -----  ----  -----  ----  -----  ------  ------  ---  ---  -----  -----"
[3] "Mazda RX4            21.0     6    160   110   3.90   2.620   16.46    0    1      4      4"
[4] "Mazda RX4 Wag        21.0     6    160   110   3.90   2.875   17.02    0    1      4      4"
[5] "Datsun 710           22.8     4    108    93   3.85   2.320   18.61    1    1      4      1"
[6] "Hornet 4 Drive       21.4     6    258   110   3.08   3.215   19.44    1    0      3      1"
[7] "Hornet Sportabout    18.7     8    360   175   3.15   3.440   17.02    0    0      3      2"
[8] "Valiant              18.1     6    225   105   2.76   3.460   20.22    1    0      3      1"

Not sure if things have changed in the meantime, and what exactly is looked for here - but just in case people are not aware of it: running modelstats::getRunStatus() in R is supposed to return a data frame with the run information, which can be further processed. As described also here: https://pik-piam.r-universe.dev/articles/modelstats/rs2.html

However it is done, ideally it should be done once when the runs are processed and then stored, not ad-hoc every time the information is of interest.

@0UmfHxcvx5J7JoaOhFSs5mncnisTJJ6q: Are you aware of:

data <- readRDS("/p/projects/remind/modeltests/remind/output/gRS.rds")

@0UmfHxcvx5J7JoaOhFSs5mncnisTJJ6q: Are you aware of:

data <- readRDS("/p/projects/remind/modeltests/remind/output/gRS.rds")

I was not.

👍