From 142e673ecad0367031cebe446eb7a044ac9ae98f Mon Sep 17 00:00:00 2001
From: STEVAN Antoine <antoine.stevan@isae-supaero.fr>
Date: Fri, 31 May 2024 08:27:29 +0000
Subject: [PATCH] add information about experiment to `inbreeding load`
 (dragoon/komodo!134)

this can be used by `plot` without passing extra arguments, i.e. the pipeline becomes
```bash
use bins/inbreeding

let experiment = "..."
```
```bash
inbreeding load $experiment | inbreeding plot
```
instead of having to know the value of `k` and do
```bash
inbreeding load $experiment | inbreeding plot --options { k: $k }
```
---
 bins/inbreeding/README.md |  2 +-
 bins/inbreeding/load.nu   | 26 +++++++++++++++++++++++---
 bins/inbreeding/plot.nu   | 20 +++++++++++---------
 3 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/bins/inbreeding/README.md b/bins/inbreeding/README.md
index 1b27f8c0..208f0e31 100644
--- a/bins/inbreeding/README.md
+++ b/bins/inbreeding/README.md
@@ -37,5 +37,5 @@ inbreeding run --options $OPTS --prng-seed $PRNG_SEED
 ```
 ```bash
 let experiment = $"($PRNG_SEED)-($OPTS.environment)-($OPTS.k)-($OPTS.n)-($OPTS.nb_bytes)"
-inbreeding load $experiment | inbreeding plot --options { k: $OPTS.k }
+inbreeding load $experiment | inbreeding plot
 ```
diff --git a/bins/inbreeding/load.nu b/bins/inbreeding/load.nu
index 3896ff4d..c14284c1 100644
--- a/bins/inbreeding/load.nu
+++ b/bins/inbreeding/load.nu
@@ -18,8 +18,18 @@ def get-experiments []: nothing -> list<string> {
 
 export def main [
     experiment: string@get-experiments,
-]: nothing -> table<strategy: string, diversity: table<x: int, y: float, e: float>> {
-    let exp = $experiment | parse --regex $consts.ARG_EXPERIMENT_FORMAT | into record
+]: [
+    nothing -> record<
+        experiment: record<k: int, n: int, nb_bytes: int, env: string>,
+        measurements: table<strategy: string, diversity: table<x: int, y: float, e: float>>,
+    >
+] {
+    let exp = $experiment
+        | parse --regex $consts.ARG_EXPERIMENT_FORMAT
+        | into record
+        | into int k
+        | into int n
+        | into int nb_bytes
     if $exp == {} {
         error throw {
             err: "invalid experiment",
@@ -45,7 +55,7 @@ export def main [
         }
     }
 
-    $experiment_files
+    let measurements = $experiment_files
         | select name
         | insert . { get name | remove-cache-prefix | parse --regex $consts.EXPERIMENT_FORMAT }
         | flatten --all
@@ -71,4 +81,14 @@ export def main [
             $d | skip 1 | reduce --fold $d.0 {|it, acc| $acc | append $it}
         }
         | rename --column { group: "strategy", items: "diversity" }
+
+    {
+        experiment: {
+            env: $exp.env,
+            k: $exp.k,
+            n: $exp.n,
+            nb_bytes: $exp.nb_bytes,
+        },
+        measurements: $measurements,
+    }
 }
diff --git a/bins/inbreeding/plot.nu b/bins/inbreeding/plot.nu
index abb10a24..6b267131 100644
--- a/bins/inbreeding/plot.nu
+++ b/bins/inbreeding/plot.nu
@@ -40,14 +40,16 @@ def get-color []: int -> string {
     }
 }
 
-export def main [
-    --save: path,
-    --options: record<k: int>
-]: table<strategy: string, diversity: table<x: int, y: float, e: float>> -> nothing {
-    let data = $in
-    let l = $data.diversity.0 | length
+export def main [ --save: path ]: [
+    record<
+        experiment: record<k: int, n: int, nb_bytes: int, env: string>,
+        measurements: table<strategy: string, diversity: table<x: int, y: float, e: float>>,
+    > -> nothing
+] {
+    let experiment = $in
+    let l = $experiment.measurements.diversity.0 | length
 
-    $data
+    $experiment.measurements
         | update strategy { parse strategy }
         | insert sort {|it|
             match $it.strategy.type {
@@ -61,10 +63,10 @@ export def main [
         | insert name {|it|
             match $it.strategy.type {
                 "single" => {
-                    let sigma = if $it.strategy.n == $options.k {
+                    let sigma = if $it.strategy.n == $experiment.experiment.k {
                         "k"
                     } else {
-                        $"k - ($options.k - $it.strategy.n)"
+                        $"k - ($experiment.experiment.k - $it.strategy.n)"
                     }
                     $"$\\sigma = ($sigma) = ($it.strategy.n)$"
                 }
-- 
GitLab