@explorable-viz/fluid 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/article/app.js +40580 -0
  4. package/dist/article/css/styles.css +191 -0
  5. package/dist/article/css/view-styles.css +141 -0
  6. package/dist/article/fluid/dataset/renewables-restricted.fld +139 -0
  7. package/dist/article/fluid/example/arithmetic.fld +1 -0
  8. package/dist/article/fluid/example/array.fld +2 -0
  9. package/dist/article/fluid/example/compose.fld +2 -0
  10. package/dist/article/fluid/example/desugar/list-comp-1.fld +1 -0
  11. package/dist/article/fluid/example/desugar/list-comp-10.fld +1 -0
  12. package/dist/article/fluid/example/desugar/list-comp-2.fld +1 -0
  13. package/dist/article/fluid/example/desugar/list-comp-3.fld +1 -0
  14. package/dist/article/fluid/example/desugar/list-comp-4.fld +1 -0
  15. package/dist/article/fluid/example/desugar/list-comp-5.fld +1 -0
  16. package/dist/article/fluid/example/desugar/list-comp-6.fld +1 -0
  17. package/dist/article/fluid/example/desugar/list-comp-7.fld +1 -0
  18. package/dist/article/fluid/example/desugar/list-comp-8.fld +1 -0
  19. package/dist/article/fluid/example/desugar/list-comp-9.fld +1 -0
  20. package/dist/article/fluid/example/desugar/list-enum.fld +1 -0
  21. package/dist/article/fluid/example/dicts.fld +11 -0
  22. package/dist/article/fluid/example/div-mod-quot-rem.fld +4 -0
  23. package/dist/article/fluid/example/factorial.fld +6 -0
  24. package/dist/article/fluid/example/filter.fld +1 -0
  25. package/dist/article/fluid/example/first-class-constr.fld +1 -0
  26. package/dist/article/fluid/example/flatten.fld +12 -0
  27. package/dist/article/fluid/example/foldr-sumSquares.fld +1 -0
  28. package/dist/article/fluid/example/graphics/background.fld +7 -0
  29. package/dist/article/fluid/example/graphics/grouped-bar-chart.fld +9 -0
  30. package/dist/article/fluid/example/graphics/line-chart.fld +13 -0
  31. package/dist/article/fluid/example/graphics/small-barchart.fld +5 -0
  32. package/dist/article/fluid/example/graphics/stacked-bar-chart.fld +3 -0
  33. package/dist/article/fluid/example/include-input-into-output.fld +1 -0
  34. package/dist/article/fluid/example/length.fld +1 -0
  35. package/dist/article/fluid/example/lexicalScoping.fld +3 -0
  36. package/dist/article/fluid/example/lib/some-constants.fld +1 -0
  37. package/dist/article/fluid/example/linked-inputs/energyscatter.fld +24 -0
  38. package/dist/article/fluid/example/linked-inputs/mini-energyscatter.fld +30 -0
  39. package/dist/article/fluid/example/linked-inputs/mini-non-renewables.fld +3 -0
  40. package/dist/article/fluid/example/linked-inputs/mini-renewables.fld +6 -0
  41. package/dist/article/fluid/example/linked-inputs/non-renewables.fld +67 -0
  42. package/dist/article/fluid/example/linked-inputs/renewables.fld +301 -0
  43. package/dist/article/fluid/example/linked-outputs/bar-chart-line-chart.expect.fld +0 -0
  44. package/dist/article/fluid/example/linked-outputs/bar-chart-line-chart.fld +26 -0
  45. package/dist/article/fluid/example/linked-outputs/convolution-data.fld +5 -0
  46. package/dist/article/fluid/example/linked-outputs/convolution.fld +12 -0
  47. package/dist/article/fluid/example/linked-outputs/line-chart.fld +13 -0
  48. package/dist/article/fluid/example/linked-outputs/moving-average-data.fld +9 -0
  49. package/dist/article/fluid/example/linked-outputs/moving-average.fld +15 -0
  50. package/dist/article/fluid/example/linked-outputs/pairs-data.fld +1 -0
  51. package/dist/article/fluid/example/linked-outputs/pairs.fld +3 -0
  52. package/dist/article/fluid/example/linked-outputs/renewables.fld +100 -0
  53. package/dist/article/fluid/example/linked-outputs/stacked-bar-chart-scatter-plot.fld +38 -0
  54. package/dist/article/fluid/example/lookup.fld +15 -0
  55. package/dist/article/fluid/example/map.fld +1 -0
  56. package/dist/article/fluid/example/mergeSort.fld +22 -0
  57. package/dist/article/fluid/example/normalise.fld +3 -0
  58. package/dist/article/fluid/example/nub.fld +1 -0
  59. package/dist/article/fluid/example/pattern-match.fld +12 -0
  60. package/dist/article/fluid/example/range.fld +4 -0
  61. package/dist/article/fluid/example/record-lookup.fld +3 -0
  62. package/dist/article/fluid/example/records.fld +11 -0
  63. package/dist/article/fluid/example/reverse.fld +1 -0
  64. package/dist/article/fluid/example/scratchpad.fld +6 -0
  65. package/dist/article/fluid/example/slicing/add.expect.fld +1 -0
  66. package/dist/article/fluid/example/slicing/add.fld +1 -0
  67. package/dist/article/fluid/example/slicing/array/array.expect.fld +2 -0
  68. package/dist/article/fluid/example/slicing/array/array.fld +4 -0
  69. package/dist/article/fluid/example/slicing/array/dims.expect.fld +3 -0
  70. package/dist/article/fluid/example/slicing/array/dims.fld +3 -0
  71. package/dist/article/fluid/example/slicing/array/lookup.expect.fld +3 -0
  72. package/dist/article/fluid/example/slicing/array/lookup.fld +5 -0
  73. package/dist/article/fluid/example/slicing/convolution/edgeDetect.expect.fld +1 -0
  74. package/dist/article/fluid/example/slicing/convolution/edgeDetect.fld +1 -0
  75. package/dist/article/fluid/example/slicing/convolution/emboss-wrap.fld +1 -0
  76. package/dist/article/fluid/example/slicing/convolution/emboss.expect.fld +1 -0
  77. package/dist/article/fluid/example/slicing/convolution/emboss.fld +1 -0
  78. package/dist/article/fluid/example/slicing/convolution/filter/edge-detect.fld +5 -0
  79. package/dist/article/fluid/example/slicing/convolution/filter/emboss.fld +5 -0
  80. package/dist/article/fluid/example/slicing/convolution/filter/gaussian.fld +5 -0
  81. package/dist/article/fluid/example/slicing/convolution/gaussian.expect.fld +1 -0
  82. package/dist/article/fluid/example/slicing/convolution/gaussian.fld +1 -0
  83. package/dist/article/fluid/example/slicing/convolution/test-image.fld +7 -0
  84. package/dist/article/fluid/example/slicing/dict/create.expect.fld +1 -0
  85. package/dist/article/fluid/example/slicing/dict/create.fld +1 -0
  86. package/dist/article/fluid/example/slicing/dict/difference.expect.fld +3 -0
  87. package/dist/article/fluid/example/slicing/dict/difference.fld +3 -0
  88. package/dist/article/fluid/example/slicing/dict/disjointUnion.expect.fld +1 -0
  89. package/dist/article/fluid/example/slicing/dict/disjointUnion.fld +1 -0
  90. package/dist/article/fluid/example/slicing/dict/foldl.expect.fld +1 -0
  91. package/dist/article/fluid/example/slicing/dict/foldl.fld +1 -0
  92. package/dist/article/fluid/example/slicing/dict/fromRecord.expect.fld +2 -0
  93. package/dist/article/fluid/example/slicing/dict/fromRecord.fld +1 -0
  94. package/dist/article/fluid/example/slicing/dict/get.expect.fld +3 -0
  95. package/dist/article/fluid/example/slicing/dict/get.fld +2 -0
  96. package/dist/article/fluid/example/slicing/dict/intersectionWith.expect.fld +2 -0
  97. package/dist/article/fluid/example/slicing/dict/intersectionWith.fld +4 -0
  98. package/dist/article/fluid/example/slicing/dict/map.expect.fld +6 -0
  99. package/dist/article/fluid/example/slicing/dict/map.fld +5 -0
  100. package/dist/article/fluid/example/slicing/divide.expect.fld +1 -0
  101. package/dist/article/fluid/example/slicing/divide.fld +1 -0
  102. package/dist/article/fluid/example/slicing/dtw/average-series.expect.fld +8 -0
  103. package/dist/article/fluid/example/slicing/dtw/average-series.fld +8 -0
  104. package/dist/article/fluid/example/slicing/dtw/compute-dtw.expect.fld +6 -0
  105. package/dist/article/fluid/example/slicing/dtw/compute-dtw.fld +6 -0
  106. package/dist/article/fluid/example/slicing/filter.expect.fld +4 -0
  107. package/dist/article/fluid/example/slicing/filter.fld +6 -0
  108. package/dist/article/fluid/example/slicing/intersperse-1.expect.fld +4 -0
  109. package/dist/article/fluid/example/slicing/intersperse-2.expect.fld +4 -0
  110. package/dist/article/fluid/example/slicing/intersperse.fld +5 -0
  111. package/dist/article/fluid/example/slicing/length.expect.fld +1 -0
  112. package/dist/article/fluid/example/slicing/length.fld +1 -0
  113. package/dist/article/fluid/example/slicing/linked-outputs/bar-chart-line-chart.expect.fld +0 -0
  114. package/dist/article/fluid/example/slicing/linked-outputs/bar-chart-line-chart.fld +26 -0
  115. package/dist/article/fluid/example/slicing/linked-outputs/renewables.fld +100 -0
  116. package/dist/article/fluid/example/slicing/linked-outputs/stacked-bar-scatter-plot.expect.fld +0 -0
  117. package/dist/article/fluid/example/slicing/linked-outputs/stacked-bar-scatter-plot.fld +38 -0
  118. package/dist/article/fluid/example/slicing/list-comp-1.expect.fld +6 -0
  119. package/dist/article/fluid/example/slicing/list-comp-2.expect.fld +6 -0
  120. package/dist/article/fluid/example/slicing/list-comp.fld +8 -0
  121. package/dist/article/fluid/example/slicing/lookup.expect.fld +6 -0
  122. package/dist/article/fluid/example/slicing/lookup.fld +14 -0
  123. package/dist/article/fluid/example/slicing/map.expect.fld +1 -0
  124. package/dist/article/fluid/example/slicing/map.fld +1 -0
  125. package/dist/article/fluid/example/slicing/matrix-update.expect.fld +5 -0
  126. package/dist/article/fluid/example/slicing/matrix-update.fld +10 -0
  127. package/dist/article/fluid/example/slicing/multiply.expect.fld +1 -0
  128. package/dist/article/fluid/example/slicing/multiply.fld +1 -0
  129. package/dist/article/fluid/example/slicing/nth.expect.fld +1 -0
  130. package/dist/article/fluid/example/slicing/nth.fld +1 -0
  131. package/dist/article/fluid/example/slicing/output-not-source.expect.fld +2 -0
  132. package/dist/article/fluid/example/slicing/output-not-source.fld +1 -0
  133. package/dist/article/fluid/example/slicing/section-5-example-1.expect.fld +10 -0
  134. package/dist/article/fluid/example/slicing/section-5-example-2.expect.fld +10 -0
  135. package/dist/article/fluid/example/slicing/section-5-example-3.expect.fld +10 -0
  136. package/dist/article/fluid/example/slicing/section-5-example.fld +14 -0
  137. package/dist/article/fluid/example/slicing/zeros-1.expect.fld +3 -0
  138. package/dist/article/fluid/example/slicing/zeros-2.expect.fld +3 -0
  139. package/dist/article/fluid/example/slicing/zeros.fld +4 -0
  140. package/dist/article/fluid/example/slicing/zipWith-1.expect.fld +4 -0
  141. package/dist/article/fluid/example/slicing/zipWith.fld +4 -0
  142. package/dist/article/fluid/example/text.fld +27 -0
  143. package/dist/article/fluid/lib/convolution.fld +16 -0
  144. package/dist/article/fluid/lib/dtw.fld +47 -0
  145. package/dist/article/fluid/lib/fnum.fld +22 -0
  146. package/dist/article/fluid/lib/graphics.fld +221 -0
  147. package/dist/article/fluid/lib/moving-average.fld +35 -0
  148. package/dist/article/fluid/lib/nombre.fld +14 -0
  149. package/dist/article/fluid/lib/prelude.fld +246 -0
  150. package/dist/article/index.html +44 -0
  151. package/fluid.js +46 -0
  152. package/package.json +80 -0
@@ -0,0 +1,15 @@
1
+ let lookup k Empty = None;
2
+ lookup k (NonEmpty t1 (key, val) t2) =
3
+ match compare k key as {
4
+ LT -> lookup k t1;
5
+ EQ -> Some val;
6
+ GT -> lookup k t2
7
+ }
8
+ in
9
+ lookup
10
+ 6
11
+ (NonEmpty
12
+ (NonEmpty Empty (3, "simon") Empty)
13
+ (4, "john")
14
+ (NonEmpty (NonEmpty Empty (6, "sarah") Empty) (7, "claire") Empty)
15
+ )
@@ -0,0 +1 @@
1
+ map ((+) 1) [4, 6, 12, 14, 3, 2, -4]
@@ -0,0 +1,22 @@
1
+ let split [] = ([], []);
2
+ split (x : xs) =
3
+ let (ys, zs) = split xs in (x : zs, ys);
4
+
5
+ merge xs ys =
6
+ match (xs, ys) as {
7
+ ([], _) -> ys;
8
+ (x : xs', []) -> xs;
9
+ (x : xs', y : ys') ->
10
+ if x < y
11
+ then x : merge xs' ys
12
+ else y : merge xs ys'
13
+ };
14
+
15
+ mergesort xs =
16
+ if length xs < 2
17
+ then xs
18
+ else
19
+ let (ys, zs) = split xs in
20
+ merge (mergesort ys) (mergesort zs)
21
+ in
22
+ mergesort [3, 1, 2]
@@ -0,0 +1,3 @@
1
+ let (x, y) = (6.0, 12.0);
2
+ sum = x + y in
3
+ (floor (x * 100.0 / sum), floor (y * 100 / sum))
@@ -0,0 +1 @@
1
+ nub [1, 2, 3, 3, 4]
@@ -0,0 +1,12 @@
1
+ -- Silly test of pattern-matching for list notation
2
+ let
3
+ zip3 [] [] = [];
4
+ zip3 [x1] [y1] = (x1, y1) : zip3 [] [];
5
+ zip3 [x1, x2] [y1, y2] =
6
+ (x1, y1) : zip3 [x2] [y2];
7
+ zip3 [x1, x2, x3] [y1, y2, y3] =
8
+ (x1 , y1) : zip3 [x2, x3] [y2, y3];
9
+ zip3 (x1 : x2 : x3 : x4 : xs) (y1 : y2 : y3 : y4 : ys) =
10
+ (x1, y1) : (x2, y2) : (x3, y3) : (x4, y4) : zip3 xs ys
11
+ in
12
+ length (zip3 [3, 4, 5, 6] [5, 6, 7, 8])
@@ -0,0 +1,4 @@
1
+ let range1 (m, n) = [m..n];
2
+ range2 ((m1, n1), (m2, n2)) =
3
+ [ (i1, i2) | i1 <- range1 (m1, m2), i2 <- range1 (n1, n2)]
4
+ in range2 ((0, 0), (1, 1))
@@ -0,0 +1,3 @@
1
+ let city = { name: "Germany" };
2
+ country = { cities: [ "Germany" ] }
3
+ in city.name `elem` country.cities
@@ -0,0 +1,11 @@
1
+ let f {fst: x, snd: []} = x;
2
+ f {fst: x, snd: (y: xs)} = y;
3
+
4
+ g {} = 7
5
+ in {
6
+ a: f {snd: [], fst: 2},
7
+ b: f {fst: 4, snd: [6, 7]},
8
+ c: g {unused: 22},
9
+ d: [ x | {fst: x, snd: []} <- [{fst: 5, third: "hello", snd: []}, {fst: 6, snd: [7, 8]}] ],
10
+ e: {a: 4, h: {i: 6, j: 7}}.h.j
11
+ }
@@ -0,0 +1 @@
1
+ reverse [1, 2]
@@ -0,0 +1,6 @@
1
+ let nth2 i j xs = nth (i - 1) (nth (j - 1) xs) in
2
+ let xs = [[1, 4, 8],
3
+ [3, 2, 17],
4
+ [0, 14, 6]];
5
+ ys = [| nth2 i j xs | (i, j) in (3, 3) |]
6
+ in ys ! (3, 2)
@@ -0,0 +1 @@
1
+ ⸨5⸩ + (⸨0⸩ + ⸨3⸩)
@@ -0,0 +1 @@
1
+ 5 + (0 + 3)
@@ -0,0 +1,2 @@
1
+ let xs = [[1, 4, 8], [3, _2_, 17], [0, 14, 6]]
2
+ in [| nth2 i j xs | (i, j) in (3, 3) |]
@@ -0,0 +1,4 @@
1
+ let xs = [[1, 4, 8],
2
+ [3, 2, 17],
3
+ [0, 14, 6]]
4
+ in [| nth2 i j xs | (i, j) in (3, 3) |]
@@ -0,0 +1,3 @@
1
+ let (x, y) = ⸨(⸨3⸩, ⸨3⸩)⸩;
2
+ yss = ⸨[|0|(i, j) in (x, y)|]⸩ in
3
+ dims yss
@@ -0,0 +1,3 @@
1
+ let (x, y) = (3, 3);
2
+ yss = [| 0 | (i, j) in (x, y) |]
3
+ in dims yss
@@ -0,0 +1,3 @@
1
+ let xs = [[1, 4, 8], [3, 2, 17], [0, ⸨14⸩, 6]];
2
+ ys = [|nth2 i j xs|(i, j) in (3, 3)|] in
3
+ ys ! ((3, 2))
@@ -0,0 +1,5 @@
1
+ let xs = [[1, 4, 8],
2
+ [3, 2, 17],
3
+ [0, 14, 6]];
4
+ ys = [| nth2 i j xs | (i, j) in (3, 3) |]
5
+ in ys ! (3, 2)
@@ -0,0 +1 @@
1
+ convolve input_image filter extend
@@ -0,0 +1 @@
1
+ convolve input_image filter extend
@@ -0,0 +1 @@
1
+ convolve input_image filter wrap
@@ -0,0 +1 @@
1
+ convolve input_image filter zero
@@ -0,0 +1 @@
1
+ convolve input_image filter zero
@@ -0,0 +1,5 @@
1
+ let filter =
2
+ let edgeDetect = [[0, 1, 0],
3
+ [1, -4, 1],
4
+ [0, 1, 0]] in
5
+ [| nth2 i j edgeDetect | (i, j) in (3, 3) |];
@@ -0,0 +1,5 @@
1
+ let filter =
2
+ let emboss = [[-2, -1, 0],
3
+ [-1, 1, 1],
4
+ [ 0, 1, 2]] in
5
+ [| nth2 i j emboss | (i, j) in (3, 3) |];
@@ -0,0 +1,5 @@
1
+ let filter =
2
+ let gaussian = [[1, 4, 1],
3
+ [4, 16, 4],
4
+ [1, 4, 1]] in
5
+ [| nth2 i j gaussian | (i, j) in (3, 3) |];
@@ -0,0 +1 @@
1
+ convolve input_image filter zero
@@ -0,0 +1 @@
1
+ convolve input_image filter zero
@@ -0,0 +1,7 @@
1
+ let input_image =
2
+ let image = [[15, 13, 6, 9, 16],
3
+ [12, 5, 15, 4, 13],
4
+ [14, 9, 20, 8, 1],
5
+ [ 4, 10, 3, 7, 19],
6
+ [ 3, 11, 15, 2, 9]] in
7
+ [| nth2 i j image | (i, j) in (5, 5) |];
@@ -0,0 +1 @@
1
+ {|"a" := 5, ⸨"a"⸩ ++ ⸨"b"⸩ := 6|}
@@ -0,0 +1 @@
1
+ {| "a" := 5, "a" ++ "b" := 6 |}
@@ -0,0 +1,3 @@
1
+ let e = ⸨{|"a" := 5, "a" ++ "b" := 6|}⸩;
2
+ f = ⸨{|"ab" := 12|}⸩ in
3
+ dict_difference e f
@@ -0,0 +1,3 @@
1
+ let e = {| "a" := 5, "a" ++ "b" := 6 |};
2
+ f = {| "ab" := 12 |}
3
+ in dict_difference e f
@@ -0,0 +1 @@
1
+ {|⸨"a"⸩ := 5, "b" := 6|} `dict_disjointUnion` {|"c" := ⸨7⸩|}
@@ -0,0 +1 @@
1
+ {| "a" := 5, "b" := 6 |} `dict_disjointUnion` {| "c" := 7 |}
@@ -0,0 +1 @@
1
+ foldl (*) 1 (dict_foldl concat2 [] {|"a" := [5, 6], "b" := [⸨0⸩, 10], "c" := [3, 4]|})
@@ -0,0 +1 @@
1
+ foldl (*) 1 (dict_foldl concat2 [] {| "a" := [5, 6], "b" := [0, 10], "c" := [3, 4] |})
@@ -0,0 +1,2 @@
1
+ dict_fromRecord ⸨{a : 5,
2
+ ab : 6}⸩
@@ -0,0 +1 @@
1
+ dict_fromRecord { a: 5, ab: 6 }
@@ -0,0 +1,3 @@
1
+ let d = {|"a" := 5, "a" ++ "b" := {fst : 6,
2
+ snd : ⸨0⸩}|} in
3
+ dict_get "a" d * (dict_get "ab" d).snd
@@ -0,0 +1,2 @@
1
+ let d = {| "a" := 5, "a" ++ "b" := {fst: 6, snd: 0} |}
2
+ in dict_get "a" d * (dict_get "ab" d).snd
@@ -0,0 +1,2 @@
1
+ dict_intersectionWith (let x = ⸨2⸩ in
2
+ (fun n m = (n + m) * x)) {|"a" := 5, "b" := ⸨6⸩, "c" := ⸨3⸩|} {|"b" := ⸨-6⸩, "c" := ⸨7⸩|}
@@ -0,0 +1,4 @@
1
+ dict_intersectionWith
2
+ (let x = 2 in (fun n m = (( n + m ) * x )) )
3
+ {| "a" := 5, "b" := 6, "c" := 3 |}
4
+ {| "b" := -6, "c" := 7 |}
@@ -0,0 +1,6 @@
1
+ let incHead = let x = ⸨3⸩ in
2
+ (fun xs = head xs + x);
3
+ d = {|"a" := [⸨5⸩, 6], "b" := [⸨9⸩, 10], "c" := [3, 4]|};
4
+ e = {|"c" := []|};
5
+ d' = dict_map incHead (dict_difference d e) in
6
+ dict_get "a" d' + dict_get "b" d'
@@ -0,0 +1,5 @@
1
+ let incHead = let x = 3 in fun xs -> head xs + x;
2
+ d = {| "a" := [5, 6], "b" := [9, 10], "c" := [3, 4] |};
3
+ e = {| "c" := [] |};
4
+ d' = dict_map incHead (dict_difference d e)
5
+ in dict_get "a" d' + dict_get "b" d'
@@ -0,0 +1 @@
1
+ ⸨362⸩ / ⸨9⸩
@@ -0,0 +1 @@
1
+ 362 / 9
@@ -0,0 +1,8 @@
1
+ let d x y = (x - y) * (x - y) in
2
+ let avg x y = (x + y) / ⸨2⸩ in
3
+ let avgSeq seq1 seq2 f = map (fun (i, j) = f (nth (i - 1) seq1) (nth (j - 1) seq2)) in
4
+ let seq1 = [3, ⸨1⸩, 2, 2, 1];
5
+ seq2 = [2, 0, ⸨0⸩, 3, 3, 1, 0];
6
+ window = 2;
7
+ (costs, matched) = computeDTW seq1 seq2 d window in
8
+ avgSeq seq1 seq2 avg matched
@@ -0,0 +1,8 @@
1
+ let d x y = (x - y) * (x - y);
2
+ let avg x y = (x + y) / 2;
3
+ let avgSeq seq1 seq2 f = map (fun (i, j) -> f (nth (i - 1) seq1) (nth (j - 1) seq2));
4
+ let seq1 = [3,1,2,2,1];
5
+ seq2 = [2,0,0,3,3,1,0];
6
+ window = 2;
7
+ (costs, matched) = computeDTW seq1 seq2 d window
8
+ in avgSeq seq1 seq2 avg matched
@@ -0,0 +1,6 @@
1
+ let d x y = (x - y) * (x - y) in
2
+ let seq1 = ⸨[⸩ ⸨3⸩ ⸨,⸩ ⸨1⸩ ⸨,⸩ 2 ⸨,⸩ 2 ⸨,⸩ 1 ⸨]⸩;
3
+ seq2 = ⸨[⸩ ⸨2⸩ ⸨,⸩ ⸨0⸩ ⸨,⸩ ⸨0⸩ ⸨,⸩ 3 ⸨,⸩ 3 ⸨,⸩ 1 ⸨,⸩ 0 ⸨]⸩;
4
+ window = ⸨2⸩;
5
+ (costs, matched) = computeDTW seq1 seq2 d window in
6
+ matched
@@ -0,0 +1,6 @@
1
+ let d x y = (x - y) * (x - y) in
2
+ let seq1 = [3, 1, 2, 2, 1];
3
+ seq2 = [2, 0, 0, 3, 3, 1, 0];
4
+ window = 2;
5
+ (costs, matched) = computeDTW seq1 seq2 d window in
6
+ matched
@@ -0,0 +1,4 @@
1
+ let filter p [] = [];
2
+ filter p (x : xs) = let ys = filter p xs in
3
+ if p x then ⸨(x : ys)⸩ else ys in
4
+ filter ((<) ⸨5⸩) [⸨8⸩, 4, 7, 3]
@@ -0,0 +1,6 @@
1
+ let filter p [] = [];
2
+ filter p (x : xs) =
3
+ let ys = filter p xs in
4
+ if p x then x : ys else ys
5
+ in
6
+ filter ((<) 5) [8, 4, 7, 3]
@@ -0,0 +1,4 @@
1
+ let intersperse [] _ = [];
2
+ intersperse [x] _ = [x];
3
+ intersperse (x : (y : ys)) sep = (x : ⸨(sep : intersperse ((y : ys)) sep)⸩) in
4
+ intersperse ⸨[⸩ 1 ⸨,⸩ 2, 3] 0
@@ -0,0 +1,4 @@
1
+ let intersperse [] _ = [];
2
+ intersperse [x] _ = [x];
3
+ intersperse (x : (y : ys)) sep = ⸨(x : (sep : intersperse (⸨(y : ys)⸩) sep))⸩ in
4
+ intersperse ⸨[⸩ 1 ⸨,⸩ 2 ⸨,⸩ 3] 0
@@ -0,0 +1,5 @@
1
+ let intersperse [] _ = [];
2
+ intersperse [x] _ = [x];
3
+ intersperse (x : y : ys) sep = x : sep : intersperse (y : ys) sep
4
+ in
5
+ intersperse [1, 2, 3] 0
@@ -0,0 +1 @@
1
+ length ⸨[⸩ 1 ⸨,⸩ 2 ⸨,⸩ 3 ⸨,⸩ 4 ⸨,⸩ 5 ⸨]⸩
@@ -0,0 +1 @@
1
+ length [1, 2, 3, 4, 5]
@@ -0,0 +1,26 @@
1
+ MultiView {|
2
+ "bar-chart" :=
3
+ let totalFor c rows =
4
+ sum [ row.output | row <- rows, row.country == c ];
5
+ let data2015 = [ row | row <- renewables, row.year == 2015 ];
6
+ countryData = [ { x: c, bars: [ { y: "output", z: totalFor c data2015 } ] }
7
+ | c <- ["China", "USA", "Germany"] ]
8
+ in BarChart {
9
+ caption: "Total output by country",
10
+ data: countryData
11
+ },
12
+ "line-chart" :=
13
+ let series type country = [
14
+ { x: row.year, y: row.output }
15
+ | year <- [2013..2018], row <- renewables,
16
+ row.year == year, row.energyType == type, row.country == country
17
+ ] in LineChart {
18
+ caption: "Output of USA relative to China",
19
+ plots: [
20
+ LinePlot { name: type, data: plot }
21
+ | type <- ["Bio", "Hydro", "Solar", "Wind"],
22
+ let plot = zipWith (fun p1 p2 -> { x: p1.x, y: p1.y / p2.y })
23
+ (series type "USA") (series type "China")
24
+ ]
25
+ }
26
+ |}
@@ -0,0 +1,100 @@
1
+ -- The original dataset sometimes has '~0' instead of '0'.
2
+ -- Including only 3 countries here. Also, have reduced the Hydro value for China 2015 from 296 to 96 (ouch)
3
+ -- to make the charts fit nicely into grant proposal. Fix this once proposal submitted!
4
+ [
5
+ -- https://www.ren21.net/wp-content/uploads/2019/05/GSR2014_Full-Report_English.pdf
6
+ { year: 2013, country: "China", energyType: "Bio", output: 6.2 },
7
+ { year: 2013, country: "China", energyType: "Hydro", output: 260 },
8
+ { year: 2013, country: "China", energyType: "Solar", output: 19.9 },
9
+ { year: 2013, country: "China", energyType: "Wind", output: 91 },
10
+
11
+ { year: 2013, country: "USA", energyType: "Bio", output: 15.8 },
12
+ { year: 2013, country: "USA", energyType: "Hydro", output: 78 },
13
+ { year: 2013, country: "USA", energyType: "Solar", output: 12.1 },
14
+ { year: 2013, country: "USA", energyType: "Wind", output: 61 },
15
+
16
+ { year: 2013, country: "Germany", energyType: "Bio", output: 8.1 },
17
+ { year: 2013, country: "Germany", energyType: "Hydro", output: 5.6 },
18
+ { year: 2013, country: "Germany", energyType: "Solar", output: 36 },
19
+ { year: 2013, country: "Germany", energyType: "Wind", output: 34 },
20
+
21
+ -- https://www.ren21.net/wp-content/uploads/2019/05/GSR2015_Full-Report_English.pdf
22
+ { year: 2014, country: "China", energyType: "Bio", output: 10 },
23
+ { year: 2014, country: "China", energyType: "Hydro", output: 280 },
24
+ { year: 2014, country: "China", energyType: "Solar", output: 28 },
25
+ { year: 2014, country: "China", energyType: "Wind", output: 115 },
26
+
27
+ { year: 2014, country: "USA", energyType: "Bio", output: 16.1 },
28
+ { year: 2014, country: "USA", energyType: "Hydro", output: 79 },
29
+ { year: 2014, country: "USA", energyType: "Solar", output: 18 },
30
+ { year: 2014, country: "USA", energyType: "Wind", output: 66 },
31
+
32
+ { year: 2014, country: "Germany", energyType: "Bio", output: 8.8 },
33
+ { year: 2014, country: "Germany", energyType: "Hydro", output: 5.6 },
34
+ { year: 2014, country: "Germany", energyType: "Solar", output: 38 },
35
+ { year: 2014, country: "Germany", energyType: "Wind", output: 39 },
36
+
37
+ -- https://www.ren21.net/gsr-2016/00-Reference-Tables.php
38
+ { year: 2015, country: "China", energyType: "Bio", output: 10.3 },
39
+ { year: 2015, country: "China", energyType: "Hydro", output: 96 },
40
+ { year: 2015, country: "China", energyType: "Solar", output: 44 },
41
+ { year: 2015, country: "China", energyType: "Wind", output: 145 },
42
+
43
+ { year: 2015, country: "USA", energyType: "Bio", output: 16.7 },
44
+ { year: 2015, country: "USA", energyType: "Hydro", output: 80 },
45
+ { year: 2015, country: "USA", energyType: "Solar", output: 26 },
46
+ { year: 2015, country: "USA", energyType: "Wind", output: 74 },
47
+
48
+ { year: 2015, country: "Germany", energyType: "Bio", output: 7.1 },
49
+ { year: 2015, country: "Germany", energyType: "Hydro", output: 5.6 },
50
+ { year: 2015, country: "Germany", energyType: "Solar", output: 40 },
51
+ { year: 2015, country: "Germany", energyType: "Wind", output: 45 },
52
+
53
+ -- https://www.ren21.net/gsr-2017/pages/tables/tables/#table-R2
54
+ { year: 2016, country: "China", energyType: "Bio", output: 12 },
55
+ { year: 2016, country: "China", energyType: "Hydro", output: 305 },
56
+ { year: 2016, country: "China", energyType: "Solar", output: 77 },
57
+ { year: 2016, country: "China", energyType: "Wind", output: 169 },
58
+
59
+ { year: 2016, country: "USA", energyType: "Bio", output: 16.8 },
60
+ { year: 2016, country: "USA", energyType: "Hydro", output: 80 },
61
+ { year: 2016, country: "USA", energyType: "Solar", output: 41 },
62
+ { year: 2016, country: "USA", energyType: "Wind", output: 82 },
63
+
64
+ { year: 2016, country: "Germany", energyType: "Bio", output: 7.6 },
65
+ { year: 2016, country: "Germany", energyType: "Hydro", output: 5.6 },
66
+ { year: 2016, country: "Germany", energyType: "Solar", output: 41 },
67
+ { year: 2016, country: "Germany", energyType: "Wind", output: 50 },
68
+
69
+ -- https://www.ren21.net/gsr-2018/pages/tables/tables/#Table_R2
70
+ { year: 2017, country: "China", energyType: "Bio", output: 14.9 },
71
+ { year: 2017, country: "China", energyType: "Hydro", output: 313 },
72
+ { year: 2017, country: "China", energyType: "Solar", output: 131 },
73
+ { year: 2017, country: "China", energyType: "Wind", output: 188},
74
+
75
+ { year: 2017, country: "USA", energyType: "Bio", output: 16.7 },
76
+ { year: 2017, country: "USA", energyType: "Hydro", output: 80 },
77
+ { year: 2017, country: "USA", energyType: "Solar", output: 51 },
78
+ { year: 2017, country: "USA", energyType: "Wind", output: 89 },
79
+
80
+ { year: 2017, country: "Germany", energyType: "Bio", output: 8 },
81
+ { year: 2017, country: "Germany", energyType: "Hydro", output: 5.6 },
82
+ { year: 2017, country: "Germany", energyType: "Solar", output: 42 },
83
+ { year: 2017, country: "Germany", energyType: "Wind", output: 56 },
84
+
85
+ -- https://www.ren21.net/gsr-2019/tables/table_02/table_02/
86
+ { year: 2018, country: "China", energyType: "Bio", output: 17.8 },
87
+ { year: 2018, country: "China", energyType: "Hydro", output: 322 },
88
+ { year: 2018, country: "China", energyType: "Solar", output: 176 },
89
+ { year: 2018, country: "China", energyType: "Wind", output: 210 },
90
+
91
+ { year: 2018, country: "USA", energyType: "Bio", output: 16.2 },
92
+ { year: 2018, country: "USA", energyType: "Hydro", output: 80 },
93
+ { year: 2018, country: "USA", energyType: "Solar", output: 62 },
94
+ { year: 2018, country: "USA", energyType: "Wind", output: 96 },
95
+
96
+ { year: 2018, country: "Germany", energyType: "Bio", output: 8.4 },
97
+ { year: 2018, country: "Germany", energyType: "Hydro", output: 5.6 },
98
+ { year: 2018, country: "Germany", energyType: "Solar", output: 45 },
99
+ { year: 2018, country: "Germany", energyType: "Wind", output: 59 }
100
+ ]
@@ -0,0 +1,38 @@
1
+ MultiView {|
2
+ "stacked-bar-chart" :=
3
+ let totalFor year country rows =
4
+ let [ row ] = [ row | row <- rows, row.year == year, row.country == country ]
5
+ in row.nuclearOut + row.gasOut + row.coalOut + row.petrolOut;
6
+ let stack year = [ { y: country, z: totalFor year country nonRenewables }
7
+ | country <- ["BRA", "EGY", "IND", "JPN"] ]
8
+ in BarChart {
9
+ caption: "Non-renewables by country",
10
+ data: [ { x: numToStr year, bars: stack year }
11
+ | year <- [2014..2018] ]
12
+ },
13
+ "scatter-plot" :=
14
+ let isCountry name x = name == x.country;
15
+ isYear year x = year == x.year;
16
+
17
+ let plot year countries =
18
+ let rens = filter (isYear year) renewables;
19
+ nonRens = filter (isYear year) nonRenewables;
20
+ let plotCountry country =
21
+ let rens' = filter (isCountry country) rens;
22
+ rensOut = sum (map (fun x -> x.output) rens');
23
+ rensCap = sum (map (fun x -> x.capacity) rens');
24
+ x = head (filter (isCountry country) nonRens);
25
+ nonRensCap = x.nuclearCap + x.petrolCap + x.gasCap + x.coalCap
26
+ in {
27
+ x: rensCap / (rensCap + nonRensCap),
28
+ y: (rensOut + x.nuclearOut) / (rensCap + x.nuclearCap)
29
+ }
30
+ in map plotCountry countries
31
+
32
+ in ScatterPlot {
33
+ caption: "Clean energy efficiency vs proportion of renewable energy capacity",
34
+ data: plot 2018 [ "BRA", "CHN", "DEU", "FRA", "EGY", "IND", "JPN", "MEX", "NGA", "USA" ],
35
+ xlabel: "Renewables/TotalEnergyCap",
36
+ ylabel: "Clean Capacity Factor"
37
+ }
38
+ |}
@@ -0,0 +1,6 @@
1
+ let data = [{year : 2013, country : "China", energyType : "Bio", output : 6.2}
2
+ , {year : 2013, country : "China", energyType : ⸨"Hydro"⸩, output : 260}
3
+ , {year : 2013, country : "China", energyType : "Solar", output : 19.9}
4
+ , {year : 2013, country : "China", energyType : "Wind", output : 91}
5
+ ] in
6
+ ⸨[row.output|type <- ["Bio", ⸨"Hydro"⸩, "Solar", "Wind"], row <- data, row.energyType == type]⸩
@@ -0,0 +1,6 @@
1
+ let data = [{year : 2013, country : "China", energyType : "Bio", output : 6.2}
2
+ , {year : 2013, country : "China", energyType : "Hydro", output : 260}
3
+ , {year : 2013, country : "China", energyType : ⸨"Solar"⸩, output : 19.9}
4
+ , {year : 2013, country : "China", energyType : "Wind", output : 91}
5
+ ] in
6
+ ⸨[row.output|type <- ["Bio", "Hydro", ⸨"Solar"⸩, "Wind"], row <- data, row.energyType == type]⸩
@@ -0,0 +1,8 @@
1
+ let data = [
2
+ { year: 2013, country: "China", energyType: "Bio", output: 6.2 },
3
+ { year: 2013, country: "China", energyType: "Hydro", output: 260 },
4
+ { year: 2013, country: "China", energyType: "Solar", output: 19.9 },
5
+ { year: 2013, country: "China", energyType: "Wind", output: 91 }
6
+ ] in
7
+ [ row.output | type <- ["Bio", "Hydro", "Solar", "Wind"],
8
+ row <- data, row.energyType == type ]
@@ -0,0 +1,6 @@
1
+ let lookup k (Empty) = None;
2
+ lookup k (NonEmpty t1 (key, val) t2) = match compare k key as
3
+ {(LT) -> lookup k t1;
4
+ (EQ) -> ⸨Some val⸩;
5
+ (GT) -> lookup k t2} in
6
+ lookup ⸨6⸩ (NonEmpty (NonEmpty (Empty) ((3, "USA")) (Empty)) ((4, "China")) (NonEmpty (⸨NonEmpty (Empty) (⸨(⸨6⸩, "Germany")⸩) (Empty)⸩) ((7, "UK")) (Empty)))
@@ -0,0 +1,14 @@
1
+ let lookup k Empty = None;
2
+ lookup k (NonEmpty t1 (key, val) t2) =
3
+ match compare k key as {
4
+ LT -> lookup k t1;
5
+ EQ -> Some val;
6
+ GT -> lookup k t2
7
+ }
8
+ in
9
+ lookup 6
10
+ (NonEmpty
11
+ (NonEmpty Empty (3, "USA") Empty)
12
+ (4, "China")
13
+ (NonEmpty (NonEmpty Empty (6, "Germany") Empty) (7, "UK") Empty)
14
+ )
@@ -0,0 +1 @@
1
+ map ((+) 2) ⸨[⸩ 3 ⸨,⸩ 4]
@@ -0,0 +1 @@
1
+ map ((+) 2) [3, 4]
@@ -0,0 +1,5 @@
1
+ let image' = [[15, 13, 6, 9, 16], [12, 5, 15, 4, 13], [14, 9, 20, 8, 1], [4, 10, 3, 7, 19], [3, 11, 15, 2, 9]];
2
+ image = [|nth2 i j image'|(i, j) in (5, 5)|];
3
+ index = (2, 2);
4
+ pair = ⸨4000⸩ in
5
+ matrixUpdate image index pair
@@ -0,0 +1,10 @@
1
+ let image' = [[15, 13, 6, 9, 16],
2
+ [12, 5, 15, 4, 13],
3
+ [14, 9, 20, 8, 1],
4
+ [ 4, 10, 3, 7, 19],
5
+ [ 3, 11, 15, 2, 9]];
6
+ image = [| nth2 i j image'
7
+ | (i, j) in (5, 5) |];
8
+ index = (2, 2);
9
+ pair = 4000
10
+ in matrixUpdate image index pair
@@ -0,0 +1 @@
1
+ 5 * (⸨0⸩ * 3)
@@ -0,0 +1 @@
1
+ 5 * (0 * 3)
@@ -0,0 +1 @@
1
+ nth 1 [3, ⸨4⸩, 5]
@@ -0,0 +1 @@
1
+ nth 1 [3, 4, 5]
@@ -0,0 +1,2 @@
1
+ let x = ⸨3⸩ in
2
+ (x, x < ⸨5⸩)
@@ -0,0 +1 @@
1
+ let x = 3 in (x, x < 5)