haskell-te: 0b37d9f5c35c987bf7b1227923df9f0f1fd41a39

     1: { jq, lib, lzip, runCommand }:
     2: 
     3: with builtins;
     4: with lib;
     5: with rec {
     6:   sampleFiles = [
     7:     "b1247807-nix-py-dirnull.json.lz"  # Even numbered sizes
     8:     "bdea634a-nix-py-dirnull.json.lz"  # Odd  numbered sizes
     9:     "a531ce8f-nix-py-dirnull.json.lz"  # Rep 30
    10:   ];
    11: 
    12:   samplesFrom = file: runCommand "samples.json"
    13:     {
    14:       buildInputs = [ jq lzip ];
    15:       file        = ./results/desktop + "/${file}";
    16:     }
    17:     ''
    18:       echo "Pulling samples out of '$file'" 1>&2
    19:       mkdir "$out"
    20:       cd "$out"
    21:       lzip -d < "$file" | jq '.results | .["quickspectip.track_data"] |
    22:                               .result  | .[0]                         |
    23:                               map_values(.reps |
    24:                                          map_values(.sample))' > data.json
    25:       echo 'with builtins; fromJSON (readFile ./data.json)' > default.nix
    26:     '';
    27: 
    28:   pieces = map (f: import (samplesFrom f)) sampleFiles;
    29: 
    30:   distinct = xs: ys: all (x: !(elem x ys)) xs && all (y: !(elem y xs)) ys;
    31: 
    32:   mergeSizes = xs: ys: ys // mapAttrs (size: reps:
    33:                                         if hasAttr size ys
    34:                                            then mergeReps reps (getAttr size ys)
    35:                                            else reps)
    36:                                       xs;
    37: 
    38:   mergeReps = xs: ys: assert distinct (attrNames xs) (attrNames ys) ||
    39:                        abort { inherit xs ys; msg = "Reps overlap"; };
    40:                       xs // ys;
    41: 
    42:   err = msg: abort (toJSON { inherit msg result; });
    43: 
    44:   result = fold mergeSizes {} pieces;
    45: };
    46: 
    47: assert all (s: with { size = toString s; };
    48:                hasAttr size result || err "No size ${size}")
    49:            (range 1 20) || err "Missing sizes";
    50: assert all (s: all (r: with { rep = toString r; };
    51:                        hasAttr rep (getAttr s result) ||
    52:                        err "Size ${s} missing rep ${rep}")
    53:                    (range 0 30))
    54:            (attrNames result) || err "Missing reps";
    55: assert all (s: with { x = getAttr s result; };
    56:                all (r: length (getAttr r x) == fromJSON s ||
    57:                        err "Size ${s} rep ${r} wrong size")
    58:                    (attrNames x))
    59:            (attrNames result) || err "Wrong size sample";
    60: {
    61:   removeOverrides = true;
    62:   value           = result;
    63: }

Generated by git2html.