- Jul 05, 2024
-
-
STEVAN Antoine authored
adds a `.env.nu` file to load Nushell modules automatically thanks to the `nuenv` hook from the `nu-hooks` package.
-
STEVAN Antoine authored
- show the log of the degree for high values - don't show the "time" Y label because the units are in the times values - don't rotate the X tick labels ## results  
-
- Jun 07, 2024
-
-
STEVAN Antoine authored
-
STEVAN Antoine authored
see [`dragoon/nc-diversity`](https://gitlab.isae-supaero.fr/dragoon/nc-diversity)
-
STEVAN Antoine authored
-
STEVAN Antoine authored
this will - recode for $\#steps \in [10, 20, 100]$ - at $t = 0$, $k$ random shards among the $n$ encoded will be selected at random - at $t \geq 1$, all $k$ shards will be used to recode $k$ brand new shards - make sure the last set of $k$ shards recoded $\#steps$ together can decode the data ## example with $(k, n) = (3, 5)$ and $\#steps = 3$ - $(s_i)_{1 \leq i \leq k}$ are the $k$ source shards - $(e_j)_{1 \leq j \leq n}$ are the $n$ encoded shards - $(m_i)_{1 \leq i \leq k}$ are the $k$ randomly selected shards - $(n_i)_{1 \leq i \leq k}$ are the shards after step $1$ - $(o_i)_{1 \leq i \leq k}$ are the shards after step $2$ - $(p_i)_{1 \leq i \leq k}$ are the shards after step $3$ - the $(p_i)_{1 \leq i \leq k}$ will be used for decoding ```mermaid graph TD; s1 --> e1; s1 --> e2; s1 --> e3; s1 --> e4; s1 --> e5; s2 --> e1; s2 --> e2; s2 --> e3; s2 --> e4; s2 --> e5; s3 --> e1; s3 --> e2; s3 --> e3; s3 --> e4; s3 --> e5; e1 --> m1; e3 --> m2; e4 --> m3; m1 --> n1; m1 --> n2; m1 --> n3; m2 --> n1; m2 --> n2; m2 --> n3; m3 --> n1; m3 --> n2; m3 --> n3; n1 --> o1; n1 --> o2; n1 --> o3; n2 --> o1; n2 --> o2; n2 --> o3; n3 --> o1; n3 --> o2; n3 --> o3; o1 --> p1; o1 --> p2; o1 --> p3; o2 --> p1; o2 --> p2; o2 --> p3; o3 --> p1; o3 --> p2; o3 --> p3; ```
-
STEVAN Antoine authored
- pass `n` to `try_all_decoding_combinations` and don't try to decode when shards have been recoded ($\#shards > n$) and there are no recoded shards in the $k$ combination under review ($\max(is) < n$) - pass `recoding_steps` and `should_not_be_decodable` as arguments to `end_to_end_with_recoding_template` - fix $n = 5$ => this leads to tests that run in less than 10sec again - add $(k, n) = (8, 10)$ => tests still run in less than 13sec - split recoding scenarii into "_simple_" and "_chain_" - show indices in a "_pretty_" format, i.e. showing indices greater than $n$ as `(n)`, `(n + 1)`, ...
-
- Jun 06, 2024
-
-
STEVAN Antoine authored
- `komodo::linalg::Matrix::random` is tested - `komodo::linalg::Matrix::inverse` is tested on more matrix sizes, from $1$ to $20$ random matrices - `komodo::field` tests have been double-checked - pure "recoding" tests from `komodo::fec` have been double-checked - `end_to_end` and `end_to_end_with_recoding` now runs for $k \in [3, 5]$ and $\rho \in [\frac{1}{2}, \frac{1}{3}]$ with $n = \lfloor \frac{k}{\rho} \rfloor$ - all "_$k$ among $n + t$_" combinations are tested with `try_all_decoding_combinations`, possibly with some removals in case recoding is involved with `is_inside` >
❗ **Important** > on my machine, `make test` goes from less than 8sec on latest `main` to around 40sec with this MR -
STEVAN Antoine authored
they have been moved to [dragoon/binaries](https://gitlab.isae-supaero.fr/dragoon/binaries).
-
- Jun 05, 2024
-
-
STEVAN Antoine authored
this is the trivial case where it is always possible to decode the original data, so there is no need to have it here.
-
- Jun 03, 2024
-
-
STEVAN Antoine authored
this MR - moves the Nushell modules from `bins/inbreeding/` to `bins/inbreeding/src/.nushell/` - creates a `NUSHELL` constant in `consts.nu` to allow the following more robust construct ```bash use consts.nu use $consts.NUSHELL ... ``` - updates the README
-
STEVAN Antoine authored
-
STEVAN Antoine authored
this simply makes "parsing" in the inbreeding modules more robust and centralized.
-
STEVAN Antoine authored
-
- May 31, 2024
-
-
STEVAN Antoine authored
- early return when format is bad twice - refactor
-
STEVAN Antoine authored
wait for - !134 ## description assuming !134 has been merged, this MR allows to run something like ```bash inbreeding list | input list --fuzzy | inbreeding load $in | inbreeding plot ``` which will fuzzy find the available experiments and then plot it after load
👌 -
STEVAN Antoine authored
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 } ```
-
STEVAN Antoine authored
- addresses #9 - needed !133 to work this MR simply adds `+ Clone` to `rng` and removes the `mut` from the `rng` of the `measure_inbreeding` function. running the same snippet of code from #9 yields the following two images with a schedule of $1$ and $5$ respectively   we see that all measurements on $t$ where $t = 0 \mod 5$ are the same in both images
🎉
-
- May 30, 2024
-
-
STEVAN Antoine authored
related to - #9 in order for the measurements not to influence the experiment, the seeds passed to the runs need to not include the _measurement schedule_ parameters! EDIT: in the end, it's more than that, we want to only include things related to the environment in its hash, nothing related to the measurements, i.e. we want to either - exclude `strategies`, `nb_scenarii`, `measurement_schedule`, `measurement_schedule_start`, `nb_measurements` and `max_t` - include `nb_bytes`, `k`, `n` and `environment`
-
STEVAN Antoine authored
## output sample let's say the current seed is `"b239e48345ac457b492cc164f58c010d07292c88e4791e607d91796baec7f334"` and the experiment has ID `fixed:0-single:3-5-50-10240`, and that we are watching both the creation of the first experiment and a few runs, e.g. - `002d8de28913efbf7dbd111b817ae901fee2d47882ba7aa76d293c2d95d9652c` - `015672b37c9cf1a6b475937987294f9a503a922ffbcfdfc5d18ef839fac91b8c` - `080a51a17ac43fcbdf08f77f3bc993983fef589bd9672f04382af4b16dd09b13` then the output would look like ``` b239e48 fixed:0-single:3-5-50-10240 at 2024-05-30 15:24:12 b239e48 fixed:0-single:3-5-50-10240 002d8de at 2024-05-30 15:24:14 b239e48 fixed:0-single:3-5-50-10240 015672b at 2024-05-30 15:24:16 b239e48 fixed:0-single:3-5-50-10240 080a51a at 2024-05-30 15:24:18 ```
-
STEVAN Antoine authored
we are switching - _naive recoding_ to _$(k, 1)$-re-encoding_ - _true recoding_ to _$k$-recoding_
-
STEVAN Antoine authored
this is to have a complete identifier for each run, which does not depend at all on the time at which the experiment runs.
-
STEVAN Antoine authored
related to - !122 ## description !122 introduced a `draw_unique_indices` function which uses a `HashSet` to accumulate unique indices in the range `0..<len`. however, a `HashSet` does not preserve the order of insertion when iterating over the elements of the set... which results in apparent randomness, even though the RNG seed is the same
😮 this MR switches back to using `shuffle` which used to work, even though a bit less performant👌 it's basically a revert of !122, while keeping the refactoring into `random.rs`. ## measuring the performance i did run the same timing experiment from !122 but with `main` on `bb55005f` and the MR on `fix-shuffle` | env | main | mr | improvement | | ------- | ---------------------- | ----------------------- | ------------------- | | fixed:0 | 6sec 244ms 238µs 45ns | 8sec 734ms 929µs 328ns | -39.88783363238997 | | fixed:1 | 639ms 720µs 39ns | 731ms 360µs 261ns | -14.325051024390373 | we loose a bit -
STEVAN Antoine authored
- add optional `$.help` to argument `err` of `error throw` - parse `prng_seed: [u8; 32]` in `rng` and `inbreeding` - compute the "_local_" seed by hashing the "_global_" seed, the strategy and the iteration index - pass `--prng-seed: string`, a 64-char long seed to `inbreeding run`
-
- May 29, 2024
-
-
STEVAN Antoine authored
because the "_environment_" can contain an experiment separator, e.g. `random-fixed`, more powerful `parse` patterns needs to be used.
-
STEVAN Antoine authored
* 7b44a886 refactor constants from `inbreeding load` * 64e446f7 move `remove-cache-prefix` to new `path.nu` * 822b03fd add `inbreeding inspect`
-
STEVAN Antoine authored
in order to add more information in the experiment names, e.g. $k$, $n$ and $\#\text{bytes}$, this MR changes the cache files format from ``` {seed}/{timestamp}/{env}/{strategy}/... ``` to ``` {seed}/{timestamp}-{env}-{strategy}-{k}-{n}-{nb_bytes}/... ```
-
STEVAN Antoine authored
this MR turns `./.nushell/` into a directory module by - adding `mod.nu` - exporting all the modules all uses of `.nushell/` have been fixed to not mention `.nu` internal modules anymore. >
💡 **Note** > the `.nushell venv` module has been removed because, when the `$venv.VENV` activation script is not there, Nushell can't parse the whole `.nushell` module, which is very annoying to have to rely of the state of the external filesystem to be able to simply parse a module... -
STEVAN Antoine authored
-
STEVAN Antoine authored
this also bumps Nushell to 0.93.0 to include the "extra" command `fmt`, see [Nushell 0.92.0](https://www.nushell.sh/blog/2024-04-02-nushell_0_92_0.html#incorporating-the-extra-feature-by-default-toc)
-
STEVAN Antoine authored
in `./bins/inbreeding/`, this MR does - refactor the "list item drawing" from `environment.rs` and `strategy.rs` into the `draw_unique_elements` function of new `random.rs` module - use a `HashSet` to draw unique indices in the slice of "things" to draw from and then extracts the items corresponding to these indices ## results ```bash use ./bins/inbreeding use std bench const PRNG_SEED = 0 const OPTS = { nb_bytes: (10 * 1_024), k: 10, n: 20, nb_measurements: 100, nb_scenarii: 10, measurement_schedule: 1, measurement_schedule_start: 2_000, max_t: 2_000, strategies: [ "single:5" ], environment: null, } def run [rev: string] { git co $rev inbreeding build let a = bench --rounds 5 { inbreeding run --options ($OPTS | update environment "fixed:0") --prng-seed $PRNG_SEED } let b = bench --rounds 5 { inbreeding run --options ($OPTS | update environment "fixed:1") --prng-seed $PRNG_SEED } { 0: $a, 1: $b, } } let main = run a29b511d let mr = run fix-shuffle ``` ```bash let table = [ [env, main, mr, improvement]; ["fixed:0", $main."0".mean, $mr."0".mean, (($main."0".mean - $mr."0".mean) / $main."0".mean * 100)], ["fixed:1", $main."1".mean, $mr."1".mean, (($main."1".mean - $mr."1".mean) / $main."1".mean * 100)], ] $table | to md --pretty ``` | env | main | mr | improvement | | ------- | ----------------------- | ----------------------- | ------------------ | | fixed:0 | 8sec 504ms 794µs 784ns | 6sec 353ms 206µs 645ns | 25.298530930431912 | | fixed:1 | 727ms 648µs 292ns | 639ms 443µs 782ns | 12.12186037811795 | the improvement is quite nice, even though not huge, but the code is cleaner anyways
🙏
-
- May 28, 2024
-
-
STEVAN Antoine authored
this adds `$.diversity.e` to the output of `inbreeding load` and input of `inbreeding plot` to show errors bars in the final plot. these can be discarded by running something similar to ```bash inbreeding load $experiment | reject diversity.e | inbreeding plot --options { k: $OPTS.k } ```
-
STEVAN Antoine authored
plotting "inbreeding" results is now done in two steps - `load` the data from raw experiment files with `inbreeding load` - `plot` the results by piping this data into `inbreeding plot`
-
STEVAN Antoine authored
## new structure for the repository - benchmarks are in `./benchmarks/` and can be run with either `cargo run --package benchmarks --bin <bench>` or the commands in `./benchmarks/README.md` ``` ├── Cargo.toml ├── README.md └── src └── bin ├── commit.rs ├── fec.rs ├── linalg.rs ├── operations │ ├── curve_group.rs │ └── field.rs ├── recoding.rs ├── setup.rs └── setup_size.rs ``` - examples are now in `./bins/` as standalone binaries and can be run either with `cargo run --package <pkg>` or with the help of the `cargo bin` command from `.nushell/cargo.nu` ``` ├── curves │ ├── Cargo.toml │ ├── README.md │ └── src │ └── main.rs ├── inbreeding │ ├── build.nu │ ├── Cargo.toml │ ├── consts.nu │ ├── mod.nu │ ├── plot.nu │ ├── README.md │ ├── run.nu │ └── src │ ├── environment.rs │ ├── main.rs │ └── strategy.rs ├── rank │ ├── Cargo.toml │ └── src │ └── main.rs └── rng ├── Cargo.toml └── src └── main.rs ``` - Nushell modules are now located in `./.nushell/` ## changelog apart from the changes to the general structure of the repo: - `binary.nu` -> `.nushell/binary.nu` - new `cargo bin` command from `.nushell/cargo.nu` - `error throw` is now defined in `.nushell/error.nu` - main TOML has been greatly simplified because the dependencies of "examples" have been moved to the associated crates - the rest is basically the same but in the new structure
-
STEVAN Antoine authored
related to - dragoon/komodo!113 this MR makes sure that the seeds given to each "strategy + scenario" loop are different by generating a bunch of unique seeds per strategy.
-
STEVAN Antoine authored
this will make `inbreeding run` dump all the data as-is to files on disk. data will be arranged in the following way - the `$CACHE` is `~/.cache/komodo/inbreeding/` - each seed will have its own directory: `$CACHE/<seed>/` - each strategy and environment will have their own directory: `$CACHE/<seed>/<date>/<env>/<strat>/` - finally each recoding scenario will go to its own subdirectory: `$CACHE/<seed>/<date>/<env>/<strat>/<i>` >
❗ **Important** > the plotting pipeline is broken for now but will be fixed in later MRs soon...
-
- May 27, 2024
-
-
STEVAN Antoine authored
-
STEVAN Antoine authored
- add `--prng-seed: u8` to fix the random number generator seed ## example by running the following snippet, we get - `first.123.png` and `second.123.png` with `--prng-seed 123` which are the same - `first.111.png` and `second.111.png` with `--prng-seed 111` which are the same - `first.111.png` and `first.123.png` are different ```bash use ./scripts/inbreeding const OPTS = { nb_bytes: (10 * 1_024), k: 10, n: 20, nb_scenarii: 10, nb_measurements: 10, measurement_schedule: 1, measurement_schedule_start: 0, max_t: 50, strategies: [ "single:1", "double:0.5:1:2", "single:2" "double:0.5:2:3", "single:3" "single:5" "single:10", ], environment: "random-fixed:0.5:1", } inbreeding build inbreeding run --options $OPTS --prng-seed 123 --output /tmp/first.123.nuon inbreeding plot /tmp/first.123.nuon --options { k: $OPTS.k } --save /tmp/first.123.png inbreeding run --options $OPTS --prng-seed 123 --output /tmp/second.123.nuon inbreeding plot /tmp/second.123.nuon --options { k: $OPTS.k } --save /tmp/second.123.png inbreeding run --options $OPTS --prng-seed 111 --output /tmp/first.111.nuon inbreeding plot /tmp/first.111.nuon --options { k: $OPTS.k } --save /tmp/first.111.png inbreeding run --options $OPTS --prng-seed 111 --output /tmp/second.111.nuon inbreeding plot /tmp/second.111.nuon --options { k: $OPTS.k } --save /tmp/second.111.png ``` | seed | first | second | | ---- | ----- | ------ | | 123 |  |  | | 111 |  |  |
-
STEVAN Antoine authored
- define `scripts/color.nu` to manipulate RGB colors, especially mix two colors together - compute the color of _hybrid recoding strategies_ as a weighted sum of the two _simple recoding strategies_ involved, e.g. if the strategy is "10% of the time recode 2 shards and 90% of the time recode 3", then the color of that curve will be 10% the color of the simple strategy recoding 2 shards and 90% the color of the other simple strategy recoding 3 shards - make the _hybrid_ curves transparent and dashed ## example 
-
STEVAN Antoine authored
- add a timestamp to all the measurements of the _diversity_ from `inbreeding/mod.rs` - allow to delay the measurement starts with `--measurement-schedule-start`, to help completing already existing measurements >
❗ **Important** > existing measurement files will have to change shape from > ``` > table<strategy: string, diversity: list<float>> > ``` > to > ``` > table<strategy: string, diversity: table<t: int, diversity: float>> > ```
-