@explorable-viz/fluid 0.7.89 → 0.7.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +11 -6
  2. package/dist/fluid/fluid/lib/{convolution.fld → matrix.fld} +14 -4
  3. package/dist/fluid/fluid/lib/prelude.fld +2 -2
  4. package/dist/fluid/fluid/lib/stats.fld +21 -22
  5. package/dist/fluid/shared/fluid.mjs +2446 -4107
  6. package/dist/fluid/shared/load-figure.js +5728 -5392
  7. package/dist/fluid/shared/webtest-lib.js +16 -16
  8. package/package.json +6 -3
  9. package/script/bundle-website.sh +13 -2
  10. package/website/article/README.md +3 -0
  11. package/website/article/convolution/index.html +90 -0
  12. package/website/article/convolution/spec.json +9 -0
  13. package/website/article/fluid/convolution/emboss.fld +5 -0
  14. package/website/article/fluid/convolution/test-image.fld +7 -0
  15. package/website/article/fluid/convolution.fld +24 -0
  16. package/website/article/fluid/dataset/methane-emissions.fld +123 -0
  17. package/website/article/fluid/dataset/non-renewables.fld +67 -0
  18. package/website/article/fluid/dataset/renewables-new.fld +301 -0
  19. package/website/article/fluid/dataset/scigen/1805.02474v1-10.fld +17 -0
  20. package/website/article/fluid/moving-average.fld +19 -0
  21. package/website/article/fluid/non-renewables.fld +21 -0
  22. package/website/article/fluid/scigen.fld +50 -0
  23. package/website/article/fluid/util.fld +36 -0
  24. package/website/article/image/fluid-logo.png +0 -0
  25. package/website/article/image/iccs-full-logo.png +0 -0
  26. package/website/article/image/schmidtsciences_primary_color.png +0 -0
  27. package/website/article/index.html +26 -0
  28. package/website/article/moving-average/index.html +57 -0
  29. package/website/article/moving-average/spec.json +9 -0
  30. package/website/article/non-renewables/index.html +46 -0
  31. package/website/article/non-renewables/spec.json +9 -0
  32. package/website/article/test.mjs +10 -0
  33. package/.spago/aff/v7.0.0/.editorconfig +0 -13
  34. package/.spago/aff/v7.0.0/.eslintrc.json +0 -28
  35. package/.spago/aff/v7.0.0/.gitignore +0 -14
  36. package/.spago/aff/v7.0.0/.tidyrc.json +0 -10
  37. package/.spago/affjax/v13.0.0/.editorconfig +0 -13
  38. package/.spago/affjax/v13.0.0/.eslintrc.json +0 -28
  39. package/.spago/affjax/v13.0.0/.gitignore +0 -14
  40. package/.spago/affjax/v13.0.0/.tidyrc.json +0 -10
  41. package/.spago/affjax-web/v1.0.0/.editorconfig +0 -13
  42. package/.spago/affjax-web/v1.0.0/.eslintrc.json +0 -30
  43. package/.spago/affjax-web/v1.0.0/.gitignore +0 -14
  44. package/.spago/affjax-web/v1.0.0/.tidyrc.json +0 -10
  45. package/.spago/argonaut/v9.0.0/.editorconfig +0 -13
  46. package/.spago/argonaut/v9.0.0/.gitignore +0 -9
  47. package/.spago/argonaut/v9.0.0/.tidyrc.json +0 -10
  48. package/.spago/argonaut-codecs/v9.0.0/.editorconfig +0 -13
  49. package/.spago/argonaut-codecs/v9.0.0/.gitignore +0 -9
  50. package/.spago/argonaut-codecs/v9.0.0/.tidyrc.json +0 -10
  51. package/.spago/argonaut-core/v7.0.0/.editorconfig +0 -13
  52. package/.spago/argonaut-core/v7.0.0/.eslintrc.json +0 -29
  53. package/.spago/argonaut-core/v7.0.0/.gitignore +0 -14
  54. package/.spago/argonaut-core/v7.0.0/.tidyrc.json +0 -10
  55. package/.spago/argonaut-traversals/v10.0.0/.editorconfig +0 -13
  56. package/.spago/argonaut-traversals/v10.0.0/.gitignore +0 -9
  57. package/.spago/argonaut-traversals/v10.0.0/.tidyrc.json +0 -10
  58. package/.spago/arraybuffer-types/v3.0.2/.editorconfig +0 -13
  59. package/.spago/arraybuffer-types/v3.0.2/.gitignore +0 -9
  60. package/.spago/arraybuffer-types/v3.0.2/.tidyrc.json +0 -10
  61. package/.spago/arrays/v7.0.0/.eslintrc.json +0 -26
  62. package/.spago/arrays/v7.0.0/.gitignore +0 -9
  63. package/.spago/assert/v6.0.0/.eslintrc.json +0 -26
  64. package/.spago/assert/v6.0.0/.gitignore +0 -8
  65. package/.spago/avar/v5.0.0/.editorconfig +0 -13
  66. package/.spago/avar/v5.0.0/.eslintrc.json +0 -29
  67. package/.spago/avar/v5.0.0/.gitignore +0 -14
  68. package/.spago/avar/v5.0.0/.tidyrc.json +0 -10
  69. package/.spago/bifunctors/v6.0.0/.gitignore +0 -7
  70. package/.spago/catenable-lists/v7.0.0/.gitignore +0 -7
  71. package/.spago/console/v6.0.0/.eslintrc.json +0 -30
  72. package/.spago/console/v6.0.0/.gitignore +0 -9
  73. package/.spago/const/v6.0.0/.gitignore +0 -7
  74. package/.spago/contravariant/v6.0.0/.gitignore +0 -7
  75. package/.spago/control/v6.0.0/.gitignore +0 -7
  76. package/.spago/datetime/v6.1.0/.eslintrc.json +0 -26
  77. package/.spago/datetime/v6.1.0/.gitignore +0 -8
  78. package/.spago/debug/v6.0.0/.eslintrc.json +0 -36
  79. package/.spago/debug/v6.0.0/.gitignore +0 -8
  80. package/.spago/distributive/v6.0.0/.gitignore +0 -7
  81. package/.spago/effect/v4.0.0/.eslintrc.json +0 -26
  82. package/.spago/effect/v4.0.0/.gitignore +0 -8
  83. package/.spago/either/v6.1.0/.gitignore +0 -7
  84. package/.spago/enums/v6.0.0/.gitignore +0 -7
  85. package/.spago/exceptions/v6.0.0/.eslintrc.json +0 -26
  86. package/.spago/exceptions/v6.0.0/.gitignore +0 -8
  87. package/.spago/exists/v6.0.0/.gitignore +0 -7
  88. package/.spago/filterable/v5.0.0/.gitignore +0 -11
  89. package/.spago/foldable-traversable/v6.0.0/.eslintrc.json +0 -26
  90. package/.spago/foldable-traversable/v6.0.0/.gitignore +0 -8
  91. package/.spago/foreign/v7.0.0/.eslintrc.json +0 -26
  92. package/.spago/foreign/v7.0.0/.gitignore +0 -8
  93. package/.spago/foreign-object/v4.0.0/.eslintrc.json +0 -26
  94. package/.spago/foreign-object/v4.0.0/.gitignore +0 -8
  95. package/.spago/fork/v6.0.0/.editorconfig +0 -13
  96. package/.spago/fork/v6.0.0/.gitignore +0 -9
  97. package/.spago/fork/v6.0.0/.tidyrc.json +0 -10
  98. package/.spago/form-urlencoded/v7.0.0/.editorconfig +0 -13
  99. package/.spago/form-urlencoded/v7.0.0/.gitignore +0 -9
  100. package/.spago/form-urlencoded/v7.0.0/.tidyrc.json +0 -10
  101. package/.spago/free/v7.0.0/.gitignore +0 -8
  102. package/.spago/functions/v6.0.0/.eslintrc.json +0 -26
  103. package/.spago/functions/v6.0.0/.gitignore +0 -8
  104. package/.spago/functors/v5.0.0/.gitignore +0 -7
  105. package/.spago/gen/v4.0.0/.gitignore +0 -8
  106. package/.spago/graphs/v8.0.0/.gitignore +0 -7
  107. package/.spago/http-methods/v6.0.0/.editorconfig +0 -13
  108. package/.spago/http-methods/v6.0.0/.gitignore +0 -9
  109. package/.spago/http-methods/v6.0.0/.tidyrc.json +0 -10
  110. package/.spago/identity/v6.0.0/.gitignore +0 -7
  111. package/.spago/integers/v6.0.0/.eslintrc.json +0 -26
  112. package/.spago/integers/v6.0.0/.gitignore +0 -8
  113. package/.spago/invariant/v6.0.0/.gitignore +0 -7
  114. package/.spago/js-date/v8.0.0/.editorconfig +0 -13
  115. package/.spago/js-date/v8.0.0/.eslintrc.json +0 -29
  116. package/.spago/js-date/v8.0.0/.gitignore +0 -14
  117. package/.spago/js-date/v8.0.0/.tidyrc.json +0 -10
  118. package/.spago/js-uri/v3.0.0/.eslintrc.json +0 -30
  119. package/.spago/js-uri/v3.0.0/.gitignore +0 -14
  120. package/.spago/js-uri/v3.0.0/.tidyrc.json +0 -10
  121. package/.spago/lazy/v6.0.0/.eslintrc.json +0 -26
  122. package/.spago/lazy/v6.0.0/.gitignore +0 -8
  123. package/.spago/lcg/v4.0.0/.gitignore +0 -8
  124. package/.spago/lists/v7.0.0/.gitignore +0 -7
  125. package/.spago/maybe/v6.0.0/.gitignore +0 -7
  126. package/.spago/media-types/v6.0.0/.editorconfig +0 -13
  127. package/.spago/media-types/v6.0.0/.gitignore +0 -9
  128. package/.spago/media-types/v6.0.0/.tidyrc.json +0 -10
  129. package/.spago/newtype/v5.0.0/.gitignore +0 -7
  130. package/.spago/node-buffer/v8.0.0/.eslintrc.json +0 -26
  131. package/.spago/node-buffer/v8.0.0/.gitignore +0 -8
  132. package/.spago/node-child-process/v9.0.0/.eslintrc.json +0 -29
  133. package/.spago/node-child-process/v9.0.0/.gitignore +0 -8
  134. package/.spago/node-fs/v9.1.0/.eslintrc.json +0 -29
  135. package/.spago/node-fs/v9.1.0/.gitignore +0 -9
  136. package/.spago/node-http/v8.0.0/.eslintrc.json +0 -29
  137. package/.spago/node-http/v8.0.0/.gitignore +0 -8
  138. package/.spago/node-net/v4.0.0/.eslintrc.json +0 -29
  139. package/.spago/node-net/v4.0.0/.gitignore +0 -8
  140. package/.spago/node-path/v5.0.0/.eslintrc.json +0 -26
  141. package/.spago/node-path/v5.0.0/.gitignore +0 -8
  142. package/.spago/node-process/v10.0.0/.eslintrc.json +0 -29
  143. package/.spago/node-process/v10.0.0/.gitignore +0 -8
  144. package/.spago/node-process/v11.0.0/.eslintrc.json +0 -29
  145. package/.spago/node-process/v11.0.0/.gitignore +0 -8
  146. package/.spago/node-process/v11.1.0/.eslintrc.json +0 -29
  147. package/.spago/node-process/v11.1.0/.gitignore +0 -8
  148. package/.spago/node-process/v11.2.0/.eslintrc.json +0 -29
  149. package/.spago/node-process/v11.2.0/.gitignore +0 -8
  150. package/.spago/node-streams/v7.0.0/.eslintrc.json +0 -29
  151. package/.spago/node-streams/v7.0.0/.gitignore +0 -8
  152. package/.spago/node-url/v6.0.0/.eslintrc.json +0 -26
  153. package/.spago/node-url/v6.0.0/.gitignore +0 -8
  154. package/.spago/nonempty/v7.0.0/.gitignore +0 -7
  155. package/.spago/now/v6.0.0/.editorconfig +0 -13
  156. package/.spago/now/v6.0.0/.eslintrc.json +0 -29
  157. package/.spago/now/v6.0.0/.gitignore +0 -14
  158. package/.spago/now/v6.0.0/.tidyrc.json +0 -10
  159. package/.spago/nullable/v6.0.0/.editorconfig +0 -13
  160. package/.spago/nullable/v6.0.0/.eslintrc.json +0 -29
  161. package/.spago/nullable/v6.0.0/.gitignore +0 -14
  162. package/.spago/nullable/v6.0.0/.tidyrc.json +0 -10
  163. package/.spago/options/v7.0.0/.editorconfig +0 -13
  164. package/.spago/options/v7.0.0/.gitignore +0 -9
  165. package/.spago/options/v7.0.0/.tidyrc.json +0 -10
  166. package/.spago/optparse/v5.0.0/.gitignore +0 -8
  167. package/.spago/optparse/v5.0.0/.npmrc +0 -1
  168. package/.spago/optparse/v6.0.0/.gitignore +0 -8
  169. package/.spago/optparse/v6.0.0/.npmrc +0 -1
  170. package/.spago/ordered-collections/v3.0.0/.gitignore +0 -8
  171. package/.spago/orders/v6.0.0/.gitignore +0 -7
  172. package/.spago/parallel/v6.0.0/.gitignore +0 -7
  173. package/.spago/parsing/v10.0.0/.editorconfig +0 -13
  174. package/.spago/parsing/v10.0.0/.gitignore +0 -10
  175. package/.spago/parsing/v10.0.0/.tidyoperators +0 -231
  176. package/.spago/parsing/v10.0.0/.tidyrc.json +0 -10
  177. package/.spago/partial/v4.0.0/.eslintrc.json +0 -26
  178. package/.spago/partial/v4.0.0/.gitignore +0 -8
  179. package/.spago/posix-types/v6.0.0/.gitignore +0 -7
  180. package/.spago/prelude/v6.0.0/.eslintrc.json +0 -26
  181. package/.spago/prelude/v6.0.0/.gitignore +0 -8
  182. package/.spago/profunctor/v6.0.0/.gitignore +0 -7
  183. package/.spago/profunctor-lenses/v8.0.0/.editorconfig +0 -13
  184. package/.spago/profunctor-lenses/v8.0.0/.gitignore +0 -9
  185. package/.spago/profunctor-lenses/v8.0.0/.tidyrc.json +0 -10
  186. package/.spago/psci-support/v6.0.0/.eslintrc.json +0 -28
  187. package/.spago/psci-support/v6.0.0/.gitignore +0 -8
  188. package/.spago/quickcheck/v8.0.1/.eslintrc.json +0 -26
  189. package/.spago/quickcheck/v8.0.1/.gitignore +0 -8
  190. package/.spago/random/v6.0.0/.eslintrc.json +0 -26
  191. package/.spago/random/v6.0.0/.gitignore +0 -8
  192. package/.spago/record/v4.0.0/.eslintrc.json +0 -26
  193. package/.spago/record/v4.0.0/.gitignore +0 -8
  194. package/.spago/refs/v6.0.0/.eslintrc.json +0 -26
  195. package/.spago/refs/v6.0.0/.gitignore +0 -8
  196. package/.spago/st/v6.0.0/.eslintrc.json +0 -26
  197. package/.spago/st/v6.0.0/.gitignore +0 -8
  198. package/.spago/strings/v6.0.0/.eslintrc.json +0 -26
  199. package/.spago/strings/v6.0.0/.gitignore +0 -8
  200. package/.spago/tailrec/v6.0.0/.gitignore +0 -7
  201. package/.spago/transformers/v6.0.0/.gitignore +0 -7
  202. package/.spago/tuples/v7.0.0/.gitignore +0 -7
  203. package/.spago/type-equality/v4.0.1/.gitignore +0 -7
  204. package/.spago/typelevel-prelude/v7.0.0/.gitignore +0 -8
  205. package/.spago/unfoldable/v6.0.0/.eslintrc.json +0 -26
  206. package/.spago/unfoldable/v6.0.0/.gitignore +0 -8
  207. package/.spago/unicode/v6.0.0/.editorconfig +0 -13
  208. package/.spago/unicode/v6.0.0/.gitattributes +0 -2
  209. package/.spago/unicode/v6.0.0/.gitignore +0 -19
  210. package/.spago/unicode/v6.0.0/.tidyrc.json +0 -10
  211. package/.spago/unsafe-coerce/v6.0.0/.eslintrc.json +0 -26
  212. package/.spago/unsafe-coerce/v6.0.0/.gitignore +0 -8
  213. package/.spago/web-dom/v6.0.0/.eslintrc.json +0 -29
  214. package/.spago/web-dom/v6.0.0/.gitignore +0 -9
  215. package/.spago/web-events/v4.0.0/.eslintrc.json +0 -29
  216. package/.spago/web-events/v4.0.0/.gitignore +0 -8
  217. package/.spago/web-file/v4.0.0/.eslintrc.json +0 -29
  218. package/.spago/web-file/v4.0.0/.gitignore +0 -8
  219. package/.spago/web-html/v4.0.0/.eslintrc.json +0 -29
  220. package/.spago/web-html/v4.0.0/.gitignore +0 -8
  221. package/.spago/web-storage/v5.0.0/.eslintrc.json +0 -29
  222. package/.spago/web-storage/v5.0.0/.gitignore +0 -8
  223. package/.spago/web-xhr/v5.0.0/.eslintrc.json +0 -29
  224. package/.spago/web-xhr/v5.0.0/.gitignore +0 -8
@@ -21307,8 +21307,8 @@ var init_ExposedFunction = __esm({
21307
21307
  return e.name = "SuppressedError", e.error = error3, e.suppressed = suppressed, e;
21308
21308
  });
21309
21309
  ExposeableFunction = class {
21310
- static async from(frame, name2, apply4, isolate = false) {
21311
- const func = new ExposeableFunction(frame, name2, apply4, isolate);
21310
+ static async from(frame, name2, apply3, isolate = false) {
21311
+ const func = new ExposeableFunction(frame, name2, apply3, isolate);
21312
21312
  await func.#initialize();
21313
21313
  return func;
21314
21314
  }
@@ -21319,10 +21319,10 @@ var init_ExposedFunction = __esm({
21319
21319
  #channel;
21320
21320
  #scripts = [];
21321
21321
  #disposables = new DisposableStack();
21322
- constructor(frame, name2, apply4, isolate = false) {
21322
+ constructor(frame, name2, apply3, isolate = false) {
21323
21323
  this.#frame = frame;
21324
21324
  this.name = name2;
21325
- this.#apply = apply4;
21325
+ this.#apply = apply3;
21326
21326
  this.#isolate = isolate;
21327
21327
  this.#channel = `__puppeteer__${this.#frame._id}_page_exposeFunction_${this.name}`;
21328
21328
  }
@@ -22794,11 +22794,11 @@ var init_Frame2 = __esm({
22794
22794
  return this.browsingContext.closed;
22795
22795
  }
22796
22796
  #exposedFunctions = /* @__PURE__ */ new Map();
22797
- async exposeFunction(name2, apply4) {
22797
+ async exposeFunction(name2, apply3) {
22798
22798
  if (this.#exposedFunctions.has(name2)) {
22799
22799
  throw new Error(`Failed to add page binding with name ${name2}: globalThis['${name2}'] already exists!`);
22800
22800
  }
22801
- const exposeable = await ExposeableFunction.from(this, name2, apply4);
22801
+ const exposeable = await ExposeableFunction.from(this, name2, apply3);
22802
22802
  this.#exposedFunctions.set(name2, exposeable);
22803
22803
  }
22804
22804
  async removeExposedFunction(name2) {
@@ -266734,7 +266734,7 @@ var traverseArrayImpl = function() {
266734
266734
  return xs.concat(ys);
266735
266735
  };
266736
266736
  }
266737
- return function(apply4) {
266737
+ return function(apply3) {
266738
266738
  return function(map3) {
266739
266739
  return function(pure) {
266740
266740
  return function(f) {
@@ -266746,12 +266746,12 @@ var traverseArrayImpl = function() {
266746
266746
  case 1:
266747
266747
  return map3(array1)(f(array[bot]));
266748
266748
  case 2:
266749
- return apply4(map3(array2)(f(array[bot])))(f(array[bot + 1]));
266749
+ return apply3(map3(array2)(f(array[bot])))(f(array[bot + 1]));
266750
266750
  case 3:
266751
- return apply4(apply4(map3(array3)(f(array[bot])))(f(array[bot + 1])))(f(array[bot + 2]));
266751
+ return apply3(apply3(map3(array3)(f(array[bot])))(f(array[bot + 1])))(f(array[bot + 2]));
266752
266752
  default:
266753
266753
  var pivot = bot + Math.floor((top2 - bot) / 4) * 2;
266754
- return apply4(map3(concat22)(go(bot, pivot)))(go(pivot, top2));
266754
+ return apply3(map3(concat22)(go(bot, pivot)))(go(pivot, top2));
266755
266755
  }
266756
266756
  }
266757
266757
  return go(0, array.length);
@@ -266905,11 +266905,11 @@ var traverse1Impl = function() {
266905
266905
  }
266906
266906
  return arr;
266907
266907
  }
266908
- return function(apply4) {
266908
+ return function(apply3) {
266909
266909
  return function(map3) {
266910
266910
  return function(f) {
266911
266911
  var buildFrom = function(x, ys) {
266912
- return apply4(map3(consList)(f(x)))(ys);
266912
+ return apply3(map3(consList)(f(x)))(ys);
266913
266913
  };
266914
266914
  var go = function(acc, currentLen, xs) {
266915
266915
  if (currentLen === 0) {
@@ -278702,7 +278702,7 @@ var waitFor = (selector2) => (page2) => {
278702
278702
  visible: true
278703
278703
  })(page2)))(() => _bind(_liftEffect(log2("-> found")))(() => report(true)("exists"))))((e) => report(false)(showErrorImpl(e))));
278704
278704
  };
278705
- var waitForFigure = (page2) => (id) => waitFor("svg#" + id)(page2);
278705
+ var waitForFigure = (page2) => (selector2) => waitFor("svg" + selector2)(page2);
278706
278706
  var waitForHidden = (selector2) => (page2) => _bind(_liftEffect(log2("Waiting for " + selector2)))(() => _bind(_map((v) => {
278707
278707
  })(runPromiseAffE3(_pageWaitForSelector)(selector2)({
278708
278708
  timeout: 24e4,
@@ -278716,9 +278716,9 @@ var $$goto = (v) => (page2) => _bind(_liftEffect(log2("Going to " + showStringIm
278716
278716
  var getAttributeValue = (page2) => (selector2) => (attribute) => _bind(runPromiseAffE3(_unsafePageEval)(selector2)("element => element.getAttribute('" + attribute + "')")(page2))((attrValue) => _pure(attrValue));
278717
278717
  var defaultViewport = { deviceScaleFactor: 1, hasTouch: false, height: 800, isLandscape: false, isMobile: false, width: 1200 };
278718
278718
  var click = (element) => (page2) => _bind(_bind(_liftEffect(_click(element, page2)))(toAff$p(coerce)))(() => testCondition2(element)(true)("click"));
278719
- var clickToggle = (page2) => (id) => {
278720
- const toggle = "div#" + id + " + div .toggle-button";
278721
- return _bind(waitFor(toggle)(page2))(() => click(toggle)(page2));
278719
+ var clickToggle = (page2) => (figId) => {
278720
+ const toggle = "div#" + figId + "-data-pane + div .toggle-button";
278721
+ return _bind(waitFor(toggle)(page2))(() => _bind(click(toggle)(page2))(() => waitFor("div#" + figId + "-data-pane")(page2)));
278722
278722
  };
278723
278723
  var checkTextContent = (page2) => (selector2) => (expected) => _bind(waitFor(selector2)(page2))(() => _bind(textContentValue(page2)(selector2))((text2) => _bind(testCondition2(selector2)(text2 === expected)("text == " + showStringImpl(expected)))(() => _pure())));
278724
278724
  var checkAttributeContains = (page2) => (sel) => (attr) => (expected) => _bind(getAttributeValue(page2)(sel)(attr))((found) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explorable-viz/fluid",
3
- "version": "0.7.89",
3
+ "version": "0.7.91",
4
4
  "description": "Fluid is an experimental programming language which integrates a bidirectional dynamic analysis to connect outputs to data sources in a fine-grained way. Fluid is implemented in PureScript and runs in the browser.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -23,13 +23,15 @@
23
23
  "script/bundle-website.sh",
24
24
  "script/bundle-page.sh",
25
25
  "script/util/clean.sh",
26
- "script/util/lisp-case.sh"
26
+ "script/util/lisp-case.sh",
27
+ "website/article"
27
28
  ],
28
29
  "scripts": {
29
30
  "benchmark": "./script/benchmark.sh",
30
31
  "build": "./script/build.sh",
31
32
  "build-test": "./script/build-test.sh",
32
33
  "bundle-fluid": "./script/bundle-fluid.sh",
34
+ "bundle-serve": "sh -c './script/bundle-website.sh -w \"$@\" && ./script/serve.sh \"$1\"' _",
33
35
  "bundle-website": "./script/bundle-website.sh",
34
36
  "fluid": "node ./dist/fluid/shared/fluid.mjs",
35
37
  "npm-publish": "./script/npm-publish.sh",
@@ -40,7 +42,8 @@
40
42
  "test-page": "./script/test-page.sh",
41
43
  "test-website": "./script/test-website.sh",
42
44
  "test-website-all": "./script/test-website-all.sh",
43
- "tidy": "./script/tidy.sh"
45
+ "tidy": "./script/tidy.sh",
46
+ "serve-article": "./script/serve-article.sh"
44
47
  },
45
48
  "dependencies": {
46
49
  "@codemirror/commands": "6.2.2",
@@ -3,13 +3,24 @@ set -xeu
3
3
 
4
4
  PREFIX=""
5
5
 
6
- while getopts "w:l" opt; do
6
+ while getopts "l" opt; do
7
7
  case $opt in
8
- w) WEBSITE="$OPTARG";;
9
8
  l) PREFIX=node_modules/@explorable-viz/fluid;;
10
9
  esac
11
10
  done
12
11
 
12
+ shift $((OPTIND - 1))
13
+ WEBSITE="${WEBSITE:-$1}"
14
+ if [ -z "$WEBSITE" ]; then
15
+ echo "Usage: $0 [-l] <website-name>" >&2
16
+ exit 1
17
+ fi
18
+
19
+ if [ ! -d "website/$WEBSITE" ]; then
20
+ echo "Error: Directory 'website/$WEBSITE' does not exist." >&2
21
+ exit 1
22
+ fi
23
+
13
24
  PREFIX_=${PREFIX:+$PREFIX/}
14
25
  echo "Cleaning dist/$WEBSITE"
15
26
  . "${PREFIX_}script/util/clean.sh" $WEBSITE
@@ -0,0 +1,3 @@
1
+ # README
2
+
3
+ - This is the "dev" version of the `article` website in the `fluid-article` template repo
@@ -0,0 +1,90 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <link rel="icon" href="/favicon.ico" type="image/x-icon">
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
8
+ <title>Fluid: Data-Linked Visualisations</title>
9
+ <link href="../css/styles.css" rel="stylesheet" type="text/css">
10
+ <link href="../css/view-styles.css" rel="stylesheet" type="text/css">
11
+ <script src="https://kit.fontawesome.com/20cf8b42c0.js" crossorigin="anonymous"></script>
12
+ <script src="../shared/util.js"></script>
13
+ <style>
14
+ .grid-container, .grid-container.data-pane-hidden {
15
+ grid-template-columns: 0.8fr var(--toggle-button-width) var(--text-pane-width);
16
+ }
17
+
18
+ .when-data-pane-visible {
19
+ font-size: 10pt;
20
+ }
21
+
22
+ .grid-container.data-pane-hidden.when-data-pane-visible {
23
+ display: none;
24
+ }
25
+
26
+ .data-pane {
27
+ display: grid;
28
+ grid-template-columns: min-content min-content;
29
+ vertical-align: top;
30
+ justify-content: end;
31
+ }
32
+
33
+ .data-pane * {
34
+ font-size: 9pt; /* otherwise interferes with .para-text */
35
+ }
36
+
37
+ .para-text {
38
+ margin-left: 5pt;
39
+ margin-right: 3pt;
40
+ }
41
+
42
+ .intermediates:has(> *) {
43
+ border-right: 1px dotted #CCCCCC;
44
+ }
45
+
46
+ .matrix-cell.selected-primary-persistent {
47
+ fill: rgb(214, 240, 214)
48
+ }
49
+
50
+ .matrix-cell-text.selected-primary-persistent:not(.matrix-cell-text.selected-primary-transient) {
51
+ color: green
52
+ }
53
+ </style>
54
+ </head>
55
+ <body>
56
+ <div id="grid" class="grid-container data-pane-hidden">
57
+ <div></div>
58
+ <div></div>
59
+ <div class="flex-left-align">
60
+ <h4>Matrix convolution</h4>
61
+ </div>
62
+
63
+ <div id="fig-data-pane" class="data-pane">
64
+ <div id="fig-input" class="flex-right-align data-pane-column"></div>
65
+ <div id="fig-intermediate" class="flex-right-align intermediates"></div>
66
+ </div>
67
+ <div onclick="toggleDataPane('grid')">
68
+ <i class="data-pane-button toggle-button fa-solid fa-eye-slash"></i>
69
+ </div>
70
+ <div class="flex-left-align">
71
+ <div class="flex-top-align">
72
+ <div id="fig">
73
+ <div class="fig-loading">loading figure(s)</div>
74
+ </div>
75
+ <div></div>
76
+ </div>
77
+ <details>
78
+ <summary>matrix.fld</summary>
79
+ <div id="codemirror-matrix"></div>
80
+ </details>
81
+ </div>
82
+ </div>
83
+
84
+ <script type="module">
85
+ import { loadFigure, drawCode } from "../shared/load-figure.js"
86
+ drawCode("../fluid/lib")("matrix")()
87
+ loadFigure("spec.json")()
88
+ </script>
89
+ </body>
90
+ </html>
@@ -0,0 +1,9 @@
1
+ {
2
+ "fluidSrcPath": ["../fluid"],
3
+ "file": "convolution",
4
+ "imports": [ "convolution/test-image", "convolution/emboss" ],
5
+ "datasets": [],
6
+ "inputs": [ "inputImage", "filter" ],
7
+ "query": true,
8
+ "linking": false
9
+ }
@@ -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,7 @@
1
+ let inputImage =
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,24 @@
1
+ let lookup m n image =
2
+ let (m_max, n_max) = dims image
3
+ -- in image!(((m - 1) `mod` m_max) + 1, ((n - 1) `mod` n_max) + 1);
4
+ in if (m >= 1) `and` (m <= m_max) `and` (n >= 1) `and` (n <= n_max)
5
+ then image!(m, n)
6
+ else 0;
7
+
8
+ let matrixSum matr =
9
+ let (m, n) = dims matr
10
+ in foldl (+) 0 [ matr!(i, j) | (i, j) <- range (1, 1) (m, n) ];
11
+
12
+ let convolve image kernel =
13
+ let ((m, n), (i, j)) = (dims image, dims kernel);
14
+ (half_i, half_j) = (i `quot` 2, j `quot` 2);
15
+ area = i * j
16
+ in [| let interMatrix =
17
+ [| let x = m' + i' - 1 - half_i;
18
+ y = n' + j' - 1 - half_j in
19
+ lookup x y image * kernel!(i', j')
20
+ | (i', j') in (i, j) |]
21
+ in matrixSum interMatrix `quot` area
22
+ | (m', n') in (m, n) |]
23
+ in
24
+ convolve inputImage filter
@@ -0,0 +1,123 @@
1
+ -- This dataset contains methane emissions for the region of Africa and the Middle East.
2
+ -- Model: REMIND; Scenario: MAGPIE-SSP5-8.5
3
+ [
4
+ -- 2015
5
+ { year: 2015, type: "total", emissions: 64.82295407 },
6
+ { year: 2015, type: "Agricultural Waste Burning", emissions: 0.41125300 },
7
+ { year: 2015, type: "Agriculture", emissions: 18.17094166 },
8
+ { year: 2015, type: "Energy Sector", emissions: 29.76188165 },
9
+ { year: 2015, type: "Forest Burning", emissions: 0.51736129 },
10
+ { year: 2015, type: "Grassland Burning", emissions: 4.12193675 },
11
+ { year: 2015, type: "Industrial Sector", emissions: 0.09559156 },
12
+ { year: 2015, type: "Residential Commercial Other", emissions: 2.69146350 },
13
+ { year: 2015, type: "Transportation Sector", emissions: 0.06519554 },
14
+ { year: 2015, type: "Waste", emissions: 8.98732911 },
15
+
16
+ -- 2020
17
+ { year: 2020, type: "total", emissions: 78.43285535 },
18
+ { year: 2020, type: "Agricultural Waste Burning", emissions: 0.54358088 },
19
+ { year: 2020, type: "Agriculture", emissions: 22.13282073 },
20
+ { year: 2020, type: "Energy Sector", emissions: 38.81883821 },
21
+ { year: 2020, type: "Forest Burning", emissions: 0.51329337 },
22
+ { year: 2020, type: "Grassland Burning", emissions: 3.95741764 },
23
+ { year: 2020, type: "Industrial Sector", emissions: 0.09594071},
24
+ { year: 2020, type: "Residential Commercial Other", emissions: 2.56548807 },
25
+ { year: 2020, type: "Transportation Sector", emissions: 0.06546724 },
26
+ { year: 2020, type: "Waste", emissions: 9.74000850 },
27
+
28
+ -- 2030
29
+ { year: 2030, type: "total", emissions: 121.57147078 },
30
+ { year: 2030, type: "Agricultural Waste Burning", emissions: 0.84583739 },
31
+ { year: 2030, type: "Agriculture", emissions: 37.74454937 },
32
+ { year: 2030, type: "Energy Sector", emissions: 64.18597740 },
33
+ { year: 2030, type: "Forest Burning", emissions: 0.80870342 },
34
+ { year: 2030, type: "Grassland Burning", emissions: 4.02610215 },
35
+ { year: 2030, type: "Industrial Sector", emissions: 0.09598039 },
36
+ { year: 2030, type: "Residential Commercial Other", emissions: 1.97035231 },
37
+ { year: 2030, type: "Transportation Sector", emissions: 0.06571693 },
38
+ { year: 2030, type: "Waste", emissions: 11.82825140 },
39
+
40
+ -- 2040
41
+ { year: 2040, type: "total", emissions: 179.45174841 },
42
+ { year: 2040, type: "Agricultural Waste Burning", emissions: 1.19171607 },
43
+ { year: 2040, type: "Agriculture", emissions: 61.27090324 },
44
+ { year: 2040, type: "Energy Sector", emissions: 97.37841569 },
45
+ { year: 2040, type: "Forest Burning", emissions: 0.66064656 },
46
+ { year: 2040, type: "Grassland Burning", emissions: 3.84519255 },
47
+ { year: 2040, type: "Industrial Sector", emissions: 0.09689225 },
48
+ { year: 2040, type: "Residential Commercial Other", emissions: 1.33010499 },
49
+ { year: 2040, type: "Transportation Sector", emissions: 0.06631730 },
50
+ { year: 2040, type: "Waste", emissions: 13.61155975 },
51
+
52
+ -- 2050
53
+ { year: 2050, type: "total", emissions: 219.38894442 },
54
+ { year: 2050, type: "Agricultural Waste Burning", emissions: 1.60321718 },
55
+ { year: 2050, type: "Agriculture", emissions: 90.85759433 },
56
+ { year: 2050, type: "Energy Sector", emissions: 107.15311705 },
57
+ { year: 2050, type: "Forest Burning", emissions: 0.52749839 },
58
+ { year: 2050, type: "Grassland Burning", emissions: 3.76717842 },
59
+ { year: 2050, type: "Industrial Sector", emissions: 0.09848635 },
60
+ { year: 2050, type: "Residential Commercial Other", emissions: 0.82742253 },
61
+ { year: 2050, type: "Transportation Sector", emissions: 0.06709878 },
62
+ { year: 2050, type: "Waste", emissions: 14.48733139 },
63
+
64
+ -- 2060
65
+ { year: 2060, type: "total", emissions: 242.63229347 },
66
+ { year: 2060, type: "Agricultural Waste Burning", emissions: 1.93557102 },
67
+ { year: 2060, type: "Agriculture", emissions: 104.69106253 },
68
+ { year: 2060, type: "Energy Sector", emissions: 116.74729530 },
69
+ { year: 2060, type: "Forest Burning", emissions: 0.46539144 },
70
+ { year: 2060, type: "Grassland Burning", emissions: 3.66022062 },
71
+ { year: 2060, type: "Industrial Sector", emissions: 0.09971953 },
72
+ { year: 2060, type: "Residential Commercial Other", emissions: 0.46752611 },
73
+ { year: 2060, type: "Transportation Sector", emissions: 0.06781869 },
74
+ { year: 2060, type: "Waste", emissions: 14.49768823 },
75
+
76
+ -- 2070
77
+ { year: 2070, type: "total", emissions: 255.90313098 },
78
+ { year: 2070, type: "Agricultural Waste Burning", emissions: 2.08050211 },
79
+ { year: 2070, type: "Agriculture", emissions: 109.93855666 },
80
+ { year: 2070, type: "Energy Sector", emissions: 125.14149136 },
81
+ { year: 2070, type: "Forest Burning", emissions: 0.45346383 },
82
+ { year: 2070, type: "Grassland Burning", emissions: 3.52716441 },
83
+ { year: 2070, type: "Industrial Sector", emissions: 0.10005683 },
84
+ { year: 2070, type: "Residential Commercial Other", emissions: 0.21893571 },
85
+ { year: 2070, type: "Transportation Sector", emissions: 0.06817304 },
86
+ { year: 2070, type: "Waste", emissions: 14.37478702 },
87
+
88
+ -- 2080
89
+ { year: 2080, type: "total", emissions: 249.84379933 },
90
+ { year: 2080, type: "Agricultural Waste Burning", emissions: 2.15889057 },
91
+ { year: 2080, type: "Agriculture", emissions: 110.07024720 },
92
+ { year: 2080, type: "Energy Sector", emissions: 119.99949417 },
93
+ { year: 2080, type: "Forest Burning", emissions: 0.45790596 },
94
+ { year: 2080, type: "Grassland Burning", emissions: 3.37155974 },
95
+ { year: 2080, type: "Industrial Sector", emissions: 0.09982383 },
96
+ { year: 2080, type: "Residential Commercial Other", emissions: 0.11500102 },
97
+ { year: 2080, type: "Transportation Sector", emissions: 0.06831200 },
98
+ { year: 2080, type: "Waste", emissions: 13.50256483 },
99
+
100
+ -- 2090
101
+ { year: 2090, type: "total", emissions: 209.67760329 },
102
+ { year: 2090, type: "Agricultural Waste Burning", emissions: 2.25135814 },
103
+ { year: 2090, type: "Agriculture", emissions: 100.25638786 },
104
+ { year: 2090, type: "Energy Sector", emissions: 90.74292491 },
105
+ { year: 2090, type: "Forest Burning", emissions: 0.47913947 },
106
+ { year: 2090, type: "Grassland Burning", emissions: 3.01972800 },
107
+ { year: 2090, type: "Industrial Sector", emissions: 0.09911105 },
108
+ { year: 2090, type: "Residential Commercial Other", emissions: 0.06762289 },
109
+ { year: 2090, type: "Transportation Sector", emissions: 0.06829208 },
110
+ { year: 2090, type: "Waste", emissions: 12.69303888 },
111
+
112
+ -- 2100
113
+ { year: 2100, type: "total", emissions: 187.43439917 },
114
+ { year: 2100, type: "Agricultural Waste Burning", emissions: 2.27400509 },
115
+ { year: 2100, type: "Agriculture", emissions: 84.57857015 },
116
+ { year: 2100, type: "Energy Sector", emissions: 82.87915239 },
117
+ { year: 2100, type: "Forest Burning", emissions: 0.47888571 },
118
+ { year: 2100, type: "Grassland Burning", emissions: 2.92857597 },
119
+ { year: 2100, type: "Industrial Sector", emissions: 0.09806927 },
120
+ { year: 2100, type: "Residential Commercial Other", emissions: 0.04356964 },
121
+ { year: 2100, type: "Transportation Sector", emissions: 0.06813231 },
122
+ { year: 2100, type: "Waste", emissions: 14.08543862 }
123
+ ]
@@ -0,0 +1,67 @@
1
+ [
2
+ { country: "BRA", year: 2013, nuclearOut: 14.65, nuclearCap: 17.43, gasOut: 66.14, gasCap: 81.99, coalOut: 21.06, coalCap: 29.35, petrolOut: 24.79, petrolCap: 32.67},
3
+ { country: "CHN", year: 2013, nuclearOut: 111.5, nuclearCap: 128.42, gasOut: 116.39, gasCap: 371.60, coalOut: 4077.37, coalCap: 6895.70, petrolOut: 33.0, petrolCap: 66.58},
4
+ { country: "DEU", year: 2013, nuclearOut: 97.29, nuclearCap: 105.73, gasOut: 67.0, gasCap: 236.34, coalOut: 288.2, coalCap: 444.31, petrolOut: 25.25, petrolCap: 14.63},
5
+ { country: "FRA", year: 2013, nuclearOut: 423.68, nuclearCap: 553.02, gasOut: 18.39, gasCap: 69.29, coalOut: 23.84, coalCap: 55.28, petrolOut: 11.41, petrolCap: 15.07},
6
+ { country: "EGY", year: 2013, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 125.91, gasCap: 214.36, coalOut: 0.0, coalCap: 0.00, petrolOut: 27.66, petrolCap: 0.00},
7
+ { country: "IND", year: 2013, nuclearOut: 33.31, nuclearCap: 41.87, gasOut: 66.31, gasCap: 180.89, coalOut: 847.97, coalCap: 1317.68, petrolOut: 10.65, petrolCap: 6.31},
8
+ { country: "JPN", year: 2013, nuclearOut: 14.6, nuclearCap: 387.72, gasOut: 423.58, gasCap: 630.72, coalOut: 362.55, coalCap: 398.14, petrolOut: 166.48, petrolCap: 249.40},
9
+ { country: "MEX", year: 2013, nuclearOut: 11.38, nuclearCap: 14.10, gasOut: 155.78, gasCap: 249.31, coalOut: 29.87, coalCap: 47.13, petrolOut: 45.6, petrolCap: 50.46},
10
+ { country: "NGA", year: 2013, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 21.4, gasCap: 72.18, coalOut: 0.74, coalCap: 2.45, petrolOut: 0.0, petrolCap: 0.00},
11
+ { country: "USA", year: 2013, nuclearOut: 789.02, nuclearCap: 869.34, gasOut: 1124.84, gasCap: 3821.81, coalOut: 1581.11, coalCap: 2880.03, petrolOut: 40.26, petrolCap: 409.62},
12
+
13
+ { country: "BRA", year: 2014, nuclearOut: 14.46, nuclearCap: 17.43, gasOut: 77.75, gasCap: 86.64, coalOut: 25.8, coalCap: 29.35, petrolOut: 33.04, petrolCap: 32.67},
14
+ { country: "CHN", year: 2014, nuclearOut: 133.22, nuclearCap: 175.90, gasOut: 133.28, gasCap: 486.88, coalOut: 4203.06, coalCap: 7168.92, petrolOut: 35.66, petrolCap: 61.41},
15
+ { country: "DEU", year: 2014, nuclearOut: 97.13, nuclearCap: 105.73, gasOut: 60.61, gasCap: 238.36, coalOut: 274.41, coalCap: 438.88, petrolOut: 24.67, petrolCap: 14.63},
16
+ { country: "FRA", year: 2014, nuclearOut: 436.48, nuclearCap: 553.02, gasOut: 13.16, gasCap: 69.29, coalOut: 11.26, coalCap: 50.81, petrolOut: 11.34, petrolCap: 16.21},
17
+ { country: "EGY", year: 2014, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 127.39, gasCap: 220.93, coalOut: 0.0, coalCap: 0.00, petrolOut: 32.54, petrolCap: 0.00},
18
+ { country: "IND", year: 2014, nuclearOut: 34.69, nuclearCap: 50.63, gasOut: 64.01, gasCap: 208.49, coalOut: 949.93, coalCap: 1496.91, petrolOut: 11.55, petrolCap: 6.31},
19
+ { country: "JPN", year: 2014, nuclearOut: 0.0, nuclearCap: 387.72, gasOut: 450.88, gasCap: 679.60, coalOut: 355.6, coalCap: 398.14, petrolOut: 122.34, petrolCap: 249.40},
20
+ { country: "MEX", year: 2014, nuclearOut: 9.3, nuclearCap: 14.10, gasOut: 161.38, gasCap: 258.68, coalOut: 31.32, coalCap: 47.13, petrolOut: 30.73, petrolCap: 50.46},
21
+ { country: "NGA", year: 2014, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 24.42, gasCap: 72.18, coalOut: 0.84, coalCap: 2.45, petrolOut: 0.0, petrolCap: 0.00},
22
+ { country: "USA", year: 2014, nuclearOut: 797.17, nuclearCap: 863.47, gasOut: 1126.61, gasCap: 3920.71, coalOut: 1581.71, coalCap: 2840.52, petrolOut: 43.69, petrolCap: 392.80},
23
+
24
+ { country: "BRA", year: 2015, nuclearOut: 13.91, nuclearCap: 17.43, gasOut: 75.76, gasCap: 88.74, coalOut: 25.72, coalCap: 29.35, petrolOut: 27.37, petrolCap: 34.43},
25
+ { country: "CHN", year: 2015, nuclearOut: 171.38, nuclearCap: 238.01, gasOut: 166.91, gasCap: 562.04, coalOut: 4046.17, coalCap: 7691.02, petrolOut: 36.46, petrolCap: 58.52},
26
+ { country: "DEU", year: 2015, nuclearOut: 91.79, nuclearCap: 94.61, gasOut: 61.47, gasCap: 240.99, coalOut: 272.2, coalCap: 459.02, petrolOut: 25.57, petrolCap: 14.80},
27
+ { country: "FRA", year: 2015, nuclearOut: 437.43, nuclearCap: 553.02, gasOut: 21.14, gasCap: 70.87, coalOut: 11.89, coalCap: 32.76, petrolOut: 11.81, petrolCap: 16.56},
28
+ { country: "EGY", year: 2015, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 133.29, gasCap: 257.63, coalOut: 0.0, coalCap: 0.00, petrolOut: 37.39, petrolCap: 3.07},
29
+ { country: "IND", year: 2015, nuclearOut: 38.31, nuclearCap: 50.63, gasOut: 64.77, gasCap: 227.15, coalOut: 1006.55, coalCap: 1677.63, petrolOut: 9.26, petrolCap: 6.31},
30
+ { country: "JPN", year: 2015, nuclearOut: 4.52, nuclearCap: 368.36, gasOut: 417.5, gasCap: 694.67, coalOut: 349.64, coalCap: 398.84, petrolOut: 104.44, petrolCap: 249.40},
31
+ { country: "MEX", year: 2015, nuclearOut: 11.18, nuclearCap: 14.10, gasOut: 173.69, gasCap: 265.87, coalOut: 31.48, coalCap: 47.13, petrolOut: 29.11, petrolCap: 50.46},
32
+ { country: "NGA", year: 2015, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 24.4, gasCap: 88.13, coalOut: 0.69, coalCap: 2.45, petrolOut: 0.0, petrolCap: 0.00},
33
+ { country: "USA", year: 2015, nuclearOut: 797.18, nuclearCap: 864.35, gasOut: 1333.48, gasCap: 4019.70, coalOut: 1352.4, coalCap: 2650.69, petrolOut: 44.44, petrolCap: 345.32},
34
+
35
+ { country: "BRA", year: 2016, nuclearOut: 14.97, nuclearCap: 17.43, gasOut: 54.07, gasCap: 93.29, coalOut: 24.58, coalCap: 28.73, petrolOut: 14.41, petrolCap: 34.43},
36
+ { country: "CHN", year: 2016, nuclearOut: 213.18, nuclearCap: 294.69, gasOut: 188.28, gasCap: 585.61, coalOut: 4156.35, coalCap: 8071.99, petrolOut: 52.56, petrolCap: 43.45},
37
+ { country: "DEU", year: 2016, nuclearOut: 84.63, nuclearCap: 94.61, gasOut: 80.62, gasCap: 256.49, coalOut: 261.75, coalCap: 453.07, petrolOut: 25.39, petrolCap: 14.80},
38
+ { country: "FRA", year: 2016, nuclearOut: 403.2, nuclearCap: 553.02, gasOut: 34.97, gasCap: 75.95, coalOut: 10.23, coalCap: 32.76, petrolOut: 11.4, petrolCap: 16.56},
39
+ { country: "EGY", year: 2016, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 139.85, gasCap: 260.52, coalOut: 0.0, coalCap: 0.00, petrolOut: 34.23, petrolCap: 5.61},
40
+ { country: "IND", year: 2016, nuclearOut: 37.9, nuclearCap: 50.63, gasOut: 72.62, gasCap: 235.38, coalOut: 1073.6, coalCap: 1830.66, petrolOut: 9.41, petrolCap: 6.31},
41
+ { country: "JPN", year: 2016, nuclearOut: 17.68, nuclearCap: 363.36, gasOut: 421.84, gasCap: 723.31, coalOut: 345.24, coalCap: 400.42, petrolOut: 98.57, petrolCap: 249.40},
42
+ { country: "MEX", year: 2016, nuclearOut: 10.27, nuclearCap: 14.10, gasOut: 177.08, gasCap: 283.56, coalOut: 31.78, coalCap: 47.13, petrolOut: 30.92, petrolCap: 50.46},
43
+ { country: "NGA", year: 2016, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 23.24, gasCap: 89.18, coalOut: 0.65, coalCap: 2.45, petrolOut: 0.0, petrolCap: 0.00},
44
+ { country: "USA", year: 2016, nuclearOut: 805.69, nuclearCap: 872.15, gasOut: 1378.31, gasCap: 4127.36, coalOut: 1239.15, coalCap: 2510.88, petrolOut: 39.5, petrolCap: 323.42},
45
+
46
+ { country: "BRA", year: 2017, nuclearOut: 14.86, nuclearCap: 17.43, gasOut: 62.72, gasCap: 98.46, coalOut: 21.85, coalCap: 24.79, petrolOut: 17.33, petrolCap: 34.43},
47
+ { country: "CHN", year: 2017, nuclearOut: 248.1, nuclearCap: 313.78, gasOut: 203.2, gasCap: 638.60, coalOut: 4430.03, coalCap: 8356.16, petrolOut: 56.05, petrolCap: 49.14},
48
+ { country: "DEU", year: 2017, nuclearOut: 76.32, nuclearCap: 94.61, gasOut: 86.04, gasCap: 258.42, coalOut: 241.26, coalCap: 423.72, petrolOut: 25.16, petrolCap: 14.80},
49
+ { country: "FRA", year: 2017, nuclearOut: 398.36, nuclearCap: 553.02, gasOut: 40.5, gasCap: 75.95, coalOut: 12.81, coalCap: 32.76, petrolOut: 12.12, petrolCap: 16.56},
50
+ { country: "EGY", year: 2017, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 155.01, gasCap: 288.55, coalOut: 0.0, coalCap: 0.00, petrolOut: 26.3, petrolCap: 5.61},
51
+ { country: "IND", year: 2017, nuclearOut: 37.41, nuclearCap: 59.39, gasOut: 74.99, gasCap: 237.05, coalOut: 1115.24, coalCap: 1878.93, petrolOut: 8.79, petrolCap: 6.31},
52
+ { country: "JPN", year: 2017, nuclearOut: 29.07, nuclearCap: 342.78, gasOut: 428.92, gasCap: 733.74, coalOut: 342.88, coalCap: 403.92, petrolOut: 74.45, petrolCap: 249.40},
53
+ { country: "MEX", year: 2017, nuclearOut: 10.57, nuclearCap: 14.10, gasOut: 179.25, gasCap: 298.28, coalOut: 28.12, coalCap: 47.13, petrolOut: 35.42, petrolCap: 50.46},
54
+ { country: "NGA", year: 2017, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 24.38, gasCap: 89.18, coalOut: 0.68, coalCap: 2.45, petrolOut: 0.0, petrolCap: 0.00},
55
+ { country: "USA", year: 2017, nuclearOut: 804.95, nuclearCap: 872.76, gasOut: 1296.44, gasCap: 4229.68, coalOut: 1205.84, coalCap: 2433.18, petrolOut: 37.89, petrolCap: 320.62},
56
+
57
+ { country: "BRA", year: 2018, nuclearOut: 14.79, nuclearCap: 17.43, gasOut: 52.36, gasCap: 98.46, coalOut: 19.94, coalCap: 24.79, petrolOut: 14.39, petrolCap: 34.43},
58
+ { country: "CHN", year: 2018, nuclearOut: 295.0, nuclearCap: 391.22, gasOut: 215.5, gasCap: 710.70, coalOut: 4763.92, coalCap: 8555.54, petrolOut: 56.4, petrolCap: 55.19},
59
+ { country: "DEU", year: 2018, nuclearOut: 76.0, nuclearCap: 94.61, gasOut: 81.56, gasCap: 259.21, coalOut: 228.16, coalCap: 414.52, petrolOut: 23.63, petrolCap: 14.80},
60
+ { country: "FRA", year: 2018, nuclearOut: 412.94, nuclearCap: 553.02, gasOut: 30.61, gasCap: 75.95, coalOut: 8.31, coalCap: 32.76, petrolOut: 10.56, petrolCap: 16.56},
61
+ { country: "EGY", year: 2018, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 166.61, gasCap: 425.65, coalOut: 0.0, coalCap: 0.00, petrolOut: 15.7, petrolCap: 5.61},
62
+ { country: "IND", year: 2018, nuclearOut: 39.05, nuclearCap: 59.39, gasOut: 71.26, gasCap: 237.66, coalOut: 1198.86, coalCap: 1927.29, petrolOut: 6.4, petrolCap: 6.31},
63
+ { country: "JPN", year: 2018, nuclearOut: 49.11, nuclearCap: 333.23, gasOut: 425.37, gasCap: 747.84, coalOut: 345.13, coalCap: 405.50, petrolOut: 53.78, petrolCap: 241.69},
64
+ { country: "MEX", year: 2018, nuclearOut: 13.32, nuclearCap: 14.10, gasOut: 200.38, gasCap: 308.88, coalOut: 27.0, coalCap: 47.13, petrolOut: 33.19, petrolCap: 50.46},
65
+ { country: "NGA", year: 2018, nuclearOut: 0.0, nuclearCap: 0.00, gasOut: 23.49, gasCap: 94.26, coalOut: 0.62, coalCap: 2.45, petrolOut: 0.0, petrolCap: 0.00},
66
+ { country: "USA", year: 2018, nuclearOut: 807.08, nuclearCap: 871.01, gasOut: 1469.13, gasCap: 4431.51, coalOut: 1149.49, coalCap: 2293.89, petrolOut: 42.68, petrolCap: 304.67}
67
+ ]