@explorable-viz/fluid 0.11.0 → 0.11.2
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.
- package/.spago/aff/v7.1.0/.editorconfig +13 -0
- package/.spago/aff/v7.1.0/.eslintrc.json +28 -0
- package/.spago/aff/v7.1.0/.gitignore +14 -0
- package/.spago/aff/v7.1.0/.tidyrc.json +10 -0
- package/.spago/argonaut-codecs/v9.1.0/.editorconfig +13 -0
- package/.spago/argonaut-codecs/v9.1.0/.gitignore +9 -0
- package/.spago/argonaut-codecs/v9.1.0/.tidyrc.json +10 -0
- package/.spago/arrays/v7.2.1/.eslintrc.json +26 -0
- package/.spago/arrays/v7.2.1/.gitignore +9 -0
- package/.spago/console/v6.1.0/.eslintrc.json +30 -0
- package/.spago/console/v6.1.0/.gitignore +9 -0
- package/.spago/debug/v6.0.2/.eslintrc.json +36 -0
- package/.spago/debug/v6.0.2/.gitignore +8 -0
- package/.spago/enums/v6.0.1/.gitignore +7 -0
- package/.spago/foreign-object/v4.1.0/.eslintrc.json +26 -0
- package/.spago/foreign-object/v4.1.0/.gitignore +8 -0
- package/.spago/free/v7.1.0/.gitignore +8 -0
- package/.spago/graphs/v8.1.0/.gitignore +7 -0
- package/.spago/js-uri/v3.1.0/.eslintrc.json +30 -0
- package/.spago/js-uri/v3.1.0/.gitignore +14 -0
- package/.spago/js-uri/v3.1.0/.tidyrc.json +10 -0
- package/.spago/node-buffer/v9.0.0/.eslintrc.json +26 -0
- package/.spago/node-buffer/v9.0.0/.gitignore +8 -0
- package/.spago/node-process/v11.2.0/.eslintrc.json +29 -0
- package/.spago/node-process/v11.2.0/.gitignore +8 -0
- package/.spago/node-streams/v9.0.0/.eslintrc.json +29 -0
- package/.spago/node-streams/v9.0.0/.gitignore +8 -0
- package/.spago/optparse/v6.0.0/.gitignore +8 -0
- package/.spago/optparse/v6.0.0/.npmrc +1 -0
- package/.spago/ordered-collections/v3.1.1/.gitignore +8 -0
- package/.spago/parallel/v7.0.0/.gitignore +7 -0
- package/.spago/parsing/v10.3.1/.editorconfig +13 -0
- package/.spago/parsing/v10.3.1/.gitignore +12 -0
- package/.spago/parsing/v10.3.1/.tidyoperators +231 -0
- package/.spago/parsing/v10.3.1/.tidyrc.json +10 -0
- package/.spago/prelude/v6.0.1/.eslintrc.json +26 -0
- package/.spago/prelude/v6.0.1/.gitignore +8 -0
- package/.spago/st/v6.2.0/.eslintrc.json +26 -0
- package/.spago/st/v6.2.0/.gitignore +8 -0
- package/.spago/strings/v6.0.1/.eslintrc.json +26 -0
- package/.spago/strings/v6.0.1/.gitignore +8 -0
- package/.spago/tailrec/v6.1.0/.gitignore +7 -0
- package/.spago/web-html/v4.1.0/.eslintrc.json +29 -0
- package/.spago/web-html/v4.1.0/.gitignore +8 -0
- package/.spago/web-xhr/v5.0.1/.eslintrc.json +29 -0
- package/.spago/web-xhr/v5.0.1/.gitignore +8 -0
- package/dist/fluid/fluid/lib/graphics.fld +50 -50
- package/dist/fluid/fluid/lib/matrix.fld +1 -1
- package/dist/fluid/fluid/lib/prelude.fld +50 -12
- package/dist/fluid/fluid/lib/stats.fld +6 -6
- package/dist/fluid/shared/fluid.mjs +21485 -26040
- package/dist/fluid/shared/load-figure.js +30132 -29586
- package/dist/fluid/shared/webtest-lib.js +3385 -3389
- package/package.json +1 -1
- package/website/article/.DS_Store +0 -0
- package/website/article/convolution/index.html +1 -1
- package/website/article/css/styles.css +4 -0
- package/website/article/css/view-styles.css +9 -2
- package/website/article/dataset/.DS_Store +0 -0
- package/website/article/energy-scatter/index.html +1 -1
- package/website/article/fluid/1805.02474v1-10.fld +21 -21
- package/website/article/fluid/bar-chart-line-chart.fld +7 -5
- package/website/article/fluid/convolution.fld +1 -1
- package/website/article/fluid/moving-average.fld +4 -4
- package/website/article/fluid/non-renewables.fld +7 -5
- package/website/article/index.html +19 -7
- package/website/article/methane/index.html +1 -1
- package/website/article/moving-average/index.html +1 -1
- package/website/article/non-renewables/index.html +1 -1
- package/website/article/publications.html +44 -0
- package/website/article/renewables-linked/index.html +1 -1
- package/website/article/scigen-1805.02474v1-10/index.html +1 -1
- package/website/article/test.mjs +5 -5
- package/dist/fluid/fluid/lib/pi.fld +0 -1
- package/website/article/dataset/annual-temp-anomaly.json +0 -413
- package/website/article/dataset/ccra3-risks.json +0 -2015
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@explorable-viz/fluid",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"description": "A functional programming language which integrates a bidirectional dynamic analysis, connecting 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": {
|
|
Binary file
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
font-size: 9pt;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
.table-caption {
|
|
17
|
+
border-bottom: 0.5px solid lightgray;
|
|
18
|
+
}
|
|
19
|
+
|
|
16
20
|
.table-view th {
|
|
17
21
|
font-size: 11px;
|
|
18
22
|
text-align: left;
|
|
@@ -32,7 +36,6 @@ table {
|
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
thead {
|
|
35
|
-
border-top: 0.5px solid lightgray;
|
|
36
39
|
}
|
|
37
40
|
|
|
38
41
|
.table-cell {
|
|
@@ -57,7 +60,6 @@ td.table-cell {
|
|
|
57
60
|
|
|
58
61
|
.table-cell.selected-primary-transient {
|
|
59
62
|
color: blue;
|
|
60
|
-
font-weight: 600;
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
.table-cell.selected-secondary-transient {
|
|
@@ -72,6 +74,11 @@ td.table-cell {
|
|
|
72
74
|
visibility: collapse;
|
|
73
75
|
}
|
|
74
76
|
|
|
77
|
+
/* To hide a column, add 'hidden' to every cell in the column. visibility: collapse doesn't work here. */
|
|
78
|
+
.table-cell.hidden {
|
|
79
|
+
display: none;
|
|
80
|
+
}
|
|
81
|
+
|
|
75
82
|
/* hack to match Safari-only */
|
|
76
83
|
@supports (hanging-punctuation: first) and (font: -apple-system-body) and (-webkit-appearance: none) {
|
|
77
84
|
.table-row.hidden {
|
|
Binary file
|
|
@@ -12,35 +12,35 @@ def model_3_stacked_CNN: model("3 stacked CNN", tableData)
|
|
|
12
12
|
def mostEfficient:
|
|
13
13
|
findWithKey_("time_s", minimum(map(lambda y: y.time_s, tableData)), tableData)
|
|
14
14
|
|
|
15
|
-
"""As shown in Table 3, BiLSTM gives significantly
|
|
16
|
-
|
|
15
|
+
f"""As shown in Table 3, BiLSTM gives significantly
|
|
16
|
+
{trendWord(model_BiLSTM.acc, model_LSTM.acc, betterWorse)}
|
|
17
17
|
accuracies compared to uni-directional LSTM2, with the training time per epoch
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Stacking 2 layers of BiLSTM gives
|
|
21
|
-
to development results, with a
|
|
22
|
-
time of
|
|
23
|
-
|
|
24
|
-
In contrast, S-LSTM gives a development result of
|
|
25
|
-
|
|
18
|
+
{trendWord(model_BiLSTM.time_s, model_LSTM.time_s, growShrink)} from
|
|
19
|
+
{model_LSTM.time_s} seconds to {model_BiLSTM.time_s} seconds.
|
|
20
|
+
Stacking 2 layers of BiLSTM gives {trendWord(model_2_stacked_BiLSTM.acc, model_BiLSTM.acc, improvements)}
|
|
21
|
+
to development results, with a {trendWord(model_2_stacked_BiLSTM.time_s, model_BiLSTM.time_s, smallerHigher)}
|
|
22
|
+
time of {model_2_stacked_BiLSTM.time_s} seconds. 3 layers of stacked BiLSTM
|
|
23
|
+
{trendWord(model_3_stacked_BiLSTM.acc, model_BiLSTM.acc, improve)} the results.
|
|
24
|
+
In contrast, S-LSTM gives a development result of {model_S_LSTM.acc}%, which is significantly
|
|
25
|
+
{trendWord(model_S_LSTM.acc, model_2_stacked_BiLSTM.acc, betterWorse)}
|
|
26
26
|
compared to 2-layer stacked BiLSTM, with a
|
|
27
|
-
|
|
27
|
+
{trendWord(model_S_LSTM.param, model_2_stacked_BiLSTM.param, smallerHigher)}
|
|
28
28
|
number of model parameters and a
|
|
29
|
-
|
|
30
|
-
time of
|
|
29
|
+
{trendWord(model_S_LSTM.time_s, model_2_stacked_BiLSTM.time_s, shorterLonger)}
|
|
30
|
+
time of {model_S_LSTM.time_s} seconds. We additionally make comparisons with
|
|
31
31
|
stacked CNNs and hierarchical attention (Vaswani et al., 2017), shown in Table 3 (the CNN and Transformer rows),
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
{mostEfficient.model} is the
|
|
33
|
+
{rankLabel("most efficient", findIndex("model", "CNN", insertionSort(lambda a, b: a.time_s < b.time_s, tableData)))}
|
|
34
34
|
among all models compared, with the
|
|
35
|
-
|
|
35
|
+
{rankLabel("smallest", findIndex("model", "CNN", insertionSort(lambda a, b: a.param < b.param, tableData)))}
|
|
36
36
|
model size. On the other hand, a 3-layer stacked CNN gives an accuracy of
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
{numToStr(model_3_stacked_CNN.acc)}%, which is also the
|
|
38
|
+
{rankLabel("lowest", findIndex("model", "CNN", insertionSort(lambda a, b: a.time_s < b.time_s, tableData)))}
|
|
39
39
|
compared with BiLSTM, hierarchical attention and S-LSTM. The
|
|
40
|
-
|
|
40
|
+
{rankLabel("best", findIndex("model", "S-LSTM+Attention", insertionSort(lambda a, b: b.acc < a.acc, tableData)))}
|
|
41
41
|
performance of hierarchical attention is obtained by S-LSTM+Attention in terms of both accuracy and efficiency.
|
|
42
|
-
S-LSTM gives significantly
|
|
42
|
+
S-LSTM gives significantly {trendWord(model_S_LSTM.acc, model_CNN.acc, betterWorse)}
|
|
43
43
|
accuracies compared with both CNN and hierarchical attention. Table 3 additionally shows the results of
|
|
44
44
|
BiLSTM and S-LSTM when external attention is used Attention leads to improved accuracies for both BiLSTM and
|
|
45
45
|
S-LSTM in classification, with S-LSTM still
|
|
46
|
-
|
|
46
|
+
{trendWord(model_S_LSTM.acc, model_BiLSTM.acc, underOverPerforming)} BiLSTM significantly."""
|
|
@@ -15,13 +15,15 @@ def series(energyType, country):
|
|
|
15
15
|
if row.year == year if row.energyType == energyType if row.country == country
|
|
16
16
|
]
|
|
17
17
|
|
|
18
|
-
MultiView(
|
|
19
|
-
|
|
18
|
+
MultiView([
|
|
19
|
+
BarChart({
|
|
20
20
|
caption: "Total renewables output by country",
|
|
21
21
|
size: { width: 275, height: 185 },
|
|
22
|
-
|
|
22
|
+
tickLabels: { x: Default, y: Default },
|
|
23
|
+
stackedBars: countryData,
|
|
24
|
+
legend: True
|
|
23
25
|
}),
|
|
24
|
-
|
|
26
|
+
LineChart({
|
|
25
27
|
tickLabels: { x: Default, y: Default },
|
|
26
28
|
size: { width: 330, height: 285 },
|
|
27
29
|
caption: "Renewables output of USA relative to China",
|
|
@@ -34,4 +36,4 @@ MultiView({
|
|
|
34
36
|
for (usa, china) in [(series(energyType, "USA"), series(energyType, "China"))]
|
|
35
37
|
]
|
|
36
38
|
})
|
|
37
|
-
|
|
39
|
+
])
|
|
@@ -19,7 +19,7 @@ def convolve(image, kernel):
|
|
|
19
19
|
def area: i * j
|
|
20
20
|
|
|
21
21
|
def interMatrix(m_, n_):
|
|
22
|
-
# @doc("""average these values to compute element""")
|
|
22
|
+
# @doc(f"""average these values to compute element""")
|
|
23
23
|
[| kernel!(i_, j_) *
|
|
24
24
|
lookup(m_ + i_ - 1 - half_i, n_ + j_ - 1 - half_j, image)
|
|
25
25
|
for (i_, j_) in (i, j) |]
|
|
@@ -4,11 +4,11 @@ def nthPad(n, xs):
|
|
|
4
4
|
nth(min(max(n, 0), length(xs) - 1), xs)
|
|
5
5
|
def movingAvg(ys, window):
|
|
6
6
|
[sum([nthPad(n, ys) for n in [i - window .. i + window]]) / (1 + 2 * window) for i in [0 .. length(ys) - 1]]
|
|
7
|
-
def
|
|
8
|
-
zipWith(
|
|
7
|
+
def movingAvg_(rs, window):
|
|
8
|
+
zipWith(lambda x, y: { x: x, y: y }, map(lambda r: r.x, rs), movingAvg(map(lambda r: r.y, rs), window))
|
|
9
9
|
|
|
10
10
|
def points:
|
|
11
|
-
[{ x: r.year, y: r.emissions } for r in methane if r.type == "Agriculture"]
|
|
11
|
+
[{ x: r.year, y: r.emissions } for r in methane if r.type == "Agriculture"]
|
|
12
12
|
|
|
13
13
|
LineChart({
|
|
14
14
|
tickLabels: { x: Rotated, y: Default },
|
|
@@ -17,7 +17,7 @@ LineChart({
|
|
|
17
17
|
plots: [
|
|
18
18
|
LinePlot({
|
|
19
19
|
name: "Moving average",
|
|
20
|
-
points:
|
|
20
|
+
points: movingAvg_(points, 1)
|
|
21
21
|
}),
|
|
22
22
|
LinePlot({ name: "Original curve", points: points })
|
|
23
23
|
]
|
|
@@ -14,13 +14,15 @@ def stack(year):
|
|
|
14
14
|
def yearData(year):
|
|
15
15
|
[row for row in nonRenewables if row.year == year if row.country |elem| countries]
|
|
16
16
|
|
|
17
|
-
MultiView(
|
|
18
|
-
|
|
17
|
+
MultiView([
|
|
18
|
+
BarChart({
|
|
19
19
|
caption: "Non-renewables output",
|
|
20
20
|
size: { width: 275, height: 185 },
|
|
21
|
-
|
|
21
|
+
tickLabels: { x: Default, y: Default },
|
|
22
|
+
stackedBars: [{ x: numToStr(year), segments: stack(year) } for year in [2014 .. 2018]],
|
|
23
|
+
legend: True
|
|
22
24
|
}),
|
|
23
|
-
|
|
25
|
+
ScatterPlot({
|
|
24
26
|
caption: "",
|
|
25
27
|
points: [{
|
|
26
28
|
x: sum([row.nuclearOut for row in yearData(year)]),
|
|
@@ -28,4 +30,4 @@ MultiView({
|
|
|
28
30
|
} for year in [2014 .. 2018]],
|
|
29
31
|
labels: { x: "Nuclear capacity", y: "Nuclear output" }
|
|
30
32
|
})
|
|
31
|
-
|
|
33
|
+
])
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
7
|
-
<title>Fluid
|
|
7
|
+
<title>Fluid Demos</title>
|
|
8
8
|
<link href="css/styles.css" rel="stylesheet" type="text/css">
|
|
9
9
|
<script src="https://kit.fontawesome.com/20cf8b42c0.js" crossorigin="anonymous"></script>
|
|
10
10
|
</head>
|
|
@@ -15,13 +15,25 @@
|
|
|
15
15
|
<div></div>
|
|
16
16
|
<div class="flex-left-align">
|
|
17
17
|
<div></div>
|
|
18
|
-
<h2>Fluid
|
|
18
|
+
<h2>Fluid: Transparent Research Outputs</h2>
|
|
19
19
|
|
|
20
|
-
<a href="
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
<a href="renewables-linked">Transparent visualisations</a><br>
|
|
21
|
+
<ul>
|
|
22
|
+
<li>Linking visualisations to data</li>
|
|
23
|
+
<li>Transparent brushing-and-linking</li>
|
|
24
|
+
</ul>
|
|
25
|
+
<br>
|
|
26
|
+
<a href="convolution">Infrastructure for explorable explanations</a><br>
|
|
27
|
+
<ul>
|
|
28
|
+
<li>Visualising intermediate values</li>
|
|
29
|
+
<li>Literate execution</li>
|
|
30
|
+
</ul>
|
|
31
|
+
<br>
|
|
32
|
+
<a href="scigen-1805.02474v1-10">Transparent text</a><br>
|
|
33
|
+
<ul>
|
|
34
|
+
<li>Linking natural language to data</li>
|
|
35
|
+
<li>AI-assisted authoring tool</li>
|
|
36
|
+
</ul>
|
|
25
37
|
</div>
|
|
26
38
|
</div>
|
|
27
39
|
</body>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
7
|
+
<title>Some publications</title>
|
|
8
|
+
<link href="css/styles.css" rel="stylesheet" type="text/css">
|
|
9
|
+
<script src="https://kit.fontawesome.com/20cf8b42c0.js" crossorigin="anonymous"></script>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
|
|
13
|
+
<div class="grid-container double-size">
|
|
14
|
+
<div></div>
|
|
15
|
+
<div></div>
|
|
16
|
+
<div class="flex-left-align">
|
|
17
|
+
<div></div>
|
|
18
|
+
<h2>Preprints</h2>
|
|
19
|
+
|
|
20
|
+
<a href="https://dynamicaspects.org/papers/authoring-assistant.pdf">AI-Assisted Authoring for Transparent, Data-Driven Documents</a>
|
|
21
|
+
Alfonso Piscitelli, Cristina David, Mattia De Rosa, Ali Muhammad, Federico Nanni, Jacob Pake, Roly Perera, Jessy Sodimu, Chenyiqiu Zheng
|
|
22
|
+
<br>(Under review)
|
|
23
|
+
<br><br>
|
|
24
|
+
<a href="https://bentnib.org/galois-autodiff.pdf">
|
|
25
|
+
<strong>Galois Slicing as Automatic Differentiation</strong>
|
|
26
|
+
</a>
|
|
27
|
+
Robert Atkey, Roly Perera
|
|
28
|
+
<br>(Under review)
|
|
29
|
+
|
|
30
|
+
<h2>Recent papers</h2>
|
|
31
|
+
<a href="https://link.springer.com/chapter/10.1007/978-3-031-91118-7_6">
|
|
32
|
+
Cognacy Queries over Dependence Graphs for Transparent Visualisations
|
|
33
|
+
</a>
|
|
34
|
+
Joseph Bond, Cristina David, Minh Nguyen, Dominic Orchard, Roly Perera
|
|
35
|
+
<br>European Symposium on Programming (ESOP 2025)
|
|
36
|
+
<br><br>
|
|
37
|
+
<a href="https://arxiv.org/abs/2109.00445">Linked Visualisations via Galois Dependencies</a>
|
|
38
|
+
Roly Perera, Minh Nguyen, Tomas Petricek, Meng Wang
|
|
39
|
+
<br>
|
|
40
|
+
ACM SIGPLAN Conference on Principles of Programming Languages (POPL 2022)
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</body>
|
|
44
|
+
</html>
|
package/website/article/test.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { runTests, testURL, waitFor } from "./shared/webtest-lib.js"
|
|
2
2
|
|
|
3
3
|
export const main = async () => {
|
|
4
4
|
await runTests(testURL("convolution")([ page => waitFor("svg#fig-output")(page) ]))()
|
|
5
5
|
const point = "div#fig .scatterplot-point"
|
|
6
|
-
await runTests(testURL("methane")([ page => waitFor("#fig
|
|
6
|
+
await runTests(testURL("methane")([ page => waitFor("#fig svg:nth-of-type(1)")(page) ]))()
|
|
7
7
|
await runTests(testURL("moving-average")([ page => waitFor("svg")(page) ]))()
|
|
8
8
|
await runTests(testURL("non-renewables")([
|
|
9
|
-
page => waitFor("#fig-output > svg:nth-
|
|
10
|
-
page => waitFor("#fig-output > svg:nth-
|
|
9
|
+
page => waitFor("#fig-output > svg:nth-of-type(1)")(page),
|
|
10
|
+
page => waitFor("#fig-output > svg:nth-of-type(2)")(page),
|
|
11
11
|
]))()
|
|
12
|
-
await runTests(testURL("renewables-linked")([page => waitFor("#fig-output > svg:nth-
|
|
12
|
+
await runTests(testURL("renewables-linked")([page => waitFor("#fig-output > svg:nth-of-type(1)")(page)]))()
|
|
13
13
|
await runTests(testURL("scigen-1805.02474v1-10")([ page => waitFor("div#fig-output")(page) ]))()
|
|
14
14
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
def pi: 3
|