aboutsummaryrefslogtreecommitdiffstats
path: root/web/nms.gathering.org/speedometer/d3-master/src/arrays
diff options
context:
space:
mode:
authorKristian Lyngstol <kristian@bohemians.org>2015-04-02 19:24:45 +0200
committerKristian Lyngstol <kristian@bohemians.org>2015-04-02 19:24:45 +0200
commit0d8bba263dc195147d6fdb09662e7926f0a58b3e (patch)
tree4c570b4376c323e585120e7695b8715be7aa8881 /web/nms.gathering.org/speedometer/d3-master/src/arrays
parente4354b47bd8891c5b1ee591fdf74b3ca67eee461 (diff)
Bump lots of changes
Diffstat (limited to 'web/nms.gathering.org/speedometer/d3-master/src/arrays')
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js36
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js3
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js6
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js21
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js25
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js84
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js14
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js15
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js16
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js21
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js14
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js97
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js8
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js26
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js27
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js9
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js14
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js5
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js29
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js15
26 files changed, 515 insertions, 0 deletions
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js
new file mode 100644
index 0000000..067c17a
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js
@@ -0,0 +1,5 @@
+d3.ascending = d3_ascending;
+
+function d3_ascending(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js
new file mode 100644
index 0000000..fbe3a73
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js
@@ -0,0 +1,36 @@
+import "ascending";
+
+function d3_bisector(compare) {
+ return {
+ left: function(a, x, lo, hi) {
+ if (arguments.length < 3) lo = 0;
+ if (arguments.length < 4) hi = a.length;
+ while (lo < hi) {
+ var mid = lo + hi >>> 1;
+ if (compare(a[mid], x) < 0) lo = mid + 1;
+ else hi = mid;
+ }
+ return lo;
+ },
+ right: function(a, x, lo, hi) {
+ if (arguments.length < 3) lo = 0;
+ if (arguments.length < 4) hi = a.length;
+ while (lo < hi) {
+ var mid = lo + hi >>> 1;
+ if (compare(a[mid], x) > 0) hi = mid;
+ else lo = mid + 1;
+ }
+ return lo;
+ }
+ };
+}
+
+var d3_bisect = d3_bisector(d3_ascending);
+d3.bisectLeft = d3_bisect.left;
+d3.bisect = d3.bisectRight = d3_bisect.right;
+
+d3.bisector = function(f) {
+ return d3_bisector(f.length === 1
+ ? function(d, x) { return d3_ascending(f(d), x); }
+ : f);
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js
new file mode 100644
index 0000000..0503458
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js
@@ -0,0 +1,3 @@
+d3.descending = function(a, b) {
+ return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js
new file mode 100644
index 0000000..16663e3
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js
@@ -0,0 +1,6 @@
+import "variance";
+
+d3.deviation = function() {
+ var v = d3.variance.apply(this, arguments);
+ return v ? Math.sqrt(v) : v;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js
new file mode 100644
index 0000000..4ce014b
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js
@@ -0,0 +1,5 @@
+d3.entries = function(map) {
+ var entries = [];
+ for (var key in map) entries.push({key: key, value: map[key]});
+ return entries;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js
new file mode 100644
index 0000000..7584658
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js
@@ -0,0 +1,21 @@
+d3.extent = function(array, f) {
+ var i = -1,
+ n = array.length,
+ a,
+ b,
+ c;
+ if (arguments.length === 1) {
+ while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
+ while (++i < n) if ((b = array[i]) != null) {
+ if (a > b) a = b;
+ if (c < b) c = b;
+ }
+ } else {
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { a = c = b; break; }
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
+ if (a > b) a = b;
+ if (c < b) c = b;
+ }
+ }
+ return [a, c];
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js
new file mode 100644
index 0000000..c29fb24
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js
@@ -0,0 +1,25 @@
+import "ascending";
+import "descending";
+import "min";
+import "max";
+import "extent";
+import "sum";
+import "mean";
+import "median";
+import "quantile";
+import "variance";
+import "deviation";
+import "bisect";
+import "shuffle";
+import "permute";
+import "pairs";
+import "zip";
+import "transpose";
+import "keys";
+import "values";
+import "entries";
+import "merge";
+import "range";
+import "nest";
+import "map";
+import "set";
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js
new file mode 100644
index 0000000..c83ec8e
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js
@@ -0,0 +1,5 @@
+d3.keys = function(map) {
+ var keys = [];
+ for (var key in map) keys.push(key);
+ return keys;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js
new file mode 100644
index 0000000..4ba7f3d
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js
@@ -0,0 +1,84 @@
+import "../core/class";
+
+d3.map = function(object, f) {
+ var map = new d3_Map;
+ if (object instanceof d3_Map) {
+ object.forEach(function(key, value) { map.set(key, value); });
+ } else if (Array.isArray(object)) {
+ var i = -1,
+ n = object.length,
+ o;
+ if (arguments.length === 1) while (++i < n) map.set(i, object[i]);
+ else while (++i < n) map.set(f.call(object, o = object[i], i), o);
+ } else {
+ for (var key in object) map.set(key, object[key]);
+ }
+ return map;
+};
+
+function d3_Map() {
+ this._ = Object.create(null);
+}
+
+var d3_map_proto = "__proto__",
+ d3_map_zero = "\0";
+
+d3_class(d3_Map, {
+ has: d3_map_has,
+ get: function(key) {
+ return this._[d3_map_escape(key)];
+ },
+ set: function(key, value) {
+ return this._[d3_map_escape(key)] = value;
+ },
+ remove: d3_map_remove,
+ keys: d3_map_keys,
+ values: function() {
+ var values = [];
+ for (var key in this._) values.push(this._[key]);
+ return values;
+ },
+ entries: function() {
+ var entries = [];
+ for (var key in this._) entries.push({key: d3_map_unescape(key), value: this._[key]});
+ return entries;
+ },
+ size: d3_map_size,
+ empty: d3_map_empty,
+ forEach: function(f) {
+ for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);
+ }
+});
+
+function d3_map_escape(key) {
+ return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;
+}
+
+function d3_map_unescape(key) {
+ return (key += "")[0] === d3_map_zero ? key.slice(1) : key;
+}
+
+function d3_map_has(key) {
+ return d3_map_escape(key) in this._;
+}
+
+function d3_map_remove(key) {
+ return (key = d3_map_escape(key)) in this._ && delete this._[key];
+}
+
+function d3_map_keys() {
+ var keys = [];
+ for (var key in this._) keys.push(d3_map_unescape(key));
+ return keys;
+}
+
+function d3_map_size() {
+ var size = 0;
+ for (var key in this._) ++size;
+ return size;
+}
+
+function d3_map_empty() {
+ for (var key in this._) return false;
+ return true;
+}
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js
new file mode 100644
index 0000000..5aec78d
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js
@@ -0,0 +1,14 @@
+d3.max = function(array, f) {
+ var i = -1,
+ n = array.length,
+ a,
+ b;
+ if (arguments.length === 1) {
+ while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+ while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+ } else {
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { a = b; break; }
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
+ }
+ return a;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js
new file mode 100644
index 0000000..ab91ae8
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js
@@ -0,0 +1,15 @@
+import "../math/number";
+
+d3.mean = function(array, f) {
+ var s = 0,
+ n = array.length,
+ a,
+ i = -1,
+ j = n;
+ if (arguments.length === 1) {
+ while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;
+ } else {
+ while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;
+ }
+ if (j) return s / j;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js
new file mode 100644
index 0000000..63c2696
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js
@@ -0,0 +1,16 @@
+import "../math/number";
+import "ascending";
+import "quantile";
+
+d3.median = function(array, f) {
+ var numbers = [],
+ n = array.length,
+ a,
+ i = -1;
+ if (arguments.length === 1) {
+ while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);
+ } else {
+ while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);
+ }
+ if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js
new file mode 100644
index 0000000..53c992d
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js
@@ -0,0 +1,21 @@
+d3.merge = function(arrays) {
+ var n = arrays.length,
+ m,
+ i = -1,
+ j = 0,
+ merged,
+ array;
+
+ while (++i < n) j += arrays[i].length;
+ merged = new Array(j);
+
+ while (--n >= 0) {
+ array = arrays[n];
+ m = array.length;
+ while (--m >= 0) {
+ merged[--j] = array[m];
+ }
+ }
+
+ return merged;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js
new file mode 100644
index 0000000..c48a49d
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js
@@ -0,0 +1,14 @@
+d3.min = function(array, f) {
+ var i = -1,
+ n = array.length,
+ a,
+ b;
+ if (arguments.length === 1) {
+ while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+ while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+ } else {
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) { a = b; break; }
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
+ }
+ return a;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js
new file mode 100644
index 0000000..859add7
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js
@@ -0,0 +1,97 @@
+import "map";
+
+d3.nest = function() {
+ var nest = {},
+ keys = [],
+ sortKeys = [],
+ sortValues,
+ rollup;
+
+ function map(mapType, array, depth) {
+ if (depth >= keys.length) return rollup
+ ? rollup.call(nest, array) : (sortValues
+ ? array.sort(sortValues)
+ : array);
+
+ var i = -1,
+ n = array.length,
+ key = keys[depth++],
+ keyValue,
+ object,
+ setter,
+ valuesByKey = new d3_Map,
+ values;
+
+ while (++i < n) {
+ if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
+ values.push(object);
+ } else {
+ valuesByKey.set(keyValue, [object]);
+ }
+ }
+
+ if (mapType) {
+ object = mapType();
+ setter = function(keyValue, values) {
+ object.set(keyValue, map(mapType, values, depth));
+ };
+ } else {
+ object = {};
+ setter = function(keyValue, values) {
+ object[keyValue] = map(mapType, values, depth);
+ };
+ }
+
+ valuesByKey.forEach(setter);
+ return object;
+ }
+
+ function entries(map, depth) {
+ if (depth >= keys.length) return map;
+
+ var array = [],
+ sortKey = sortKeys[depth++];
+
+ map.forEach(function(key, keyMap) {
+ array.push({key: key, values: entries(keyMap, depth)});
+ });
+
+ return sortKey
+ ? array.sort(function(a, b) { return sortKey(a.key, b.key); })
+ : array;
+ }
+
+ nest.map = function(array, mapType) {
+ return map(mapType, array, 0);
+ };
+
+ nest.entries = function(array) {
+ return entries(map(d3.map, array, 0), 0);
+ };
+
+ nest.key = function(d) {
+ keys.push(d);
+ return nest;
+ };
+
+ // Specifies the order for the most-recently specified key.
+ // Note: only applies to entries. Map keys are unordered!
+ nest.sortKeys = function(order) {
+ sortKeys[keys.length - 1] = order;
+ return nest;
+ };
+
+ // Specifies the order for leaf values.
+ // Applies to both maps and entries array.
+ nest.sortValues = function(order) {
+ sortValues = order;
+ return nest;
+ };
+
+ nest.rollup = function(f) {
+ rollup = f;
+ return nest;
+ };
+
+ return nest;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js
new file mode 100644
index 0000000..e270f95
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js
@@ -0,0 +1,5 @@
+d3.pairs = function(array) {
+ var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
+ while (i < n) pairs[i] = [p0 = p1, p1 = array[++i]];
+ return pairs;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js
new file mode 100644
index 0000000..f27d2c9
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js
@@ -0,0 +1,5 @@
+d3.permute = function(array, indexes) {
+ var i = indexes.length, permutes = new Array(i);
+ while (i--) permutes[i] = array[indexes[i]];
+ return permutes;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js
new file mode 100644
index 0000000..67fe9fd
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js
@@ -0,0 +1,8 @@
+// R-7 per <http://en.wikipedia.org/wiki/Quantile>
+d3.quantile = function(values, p) {
+ var H = (values.length - 1) * p + 1,
+ h = Math.floor(H),
+ v = +values[h - 1],
+ e = H - h;
+ return e ? v + e * (values[h] - v) : v;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js
new file mode 100644
index 0000000..2fd6a1e
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js
@@ -0,0 +1,26 @@
+import "../math/abs";
+
+d3.range = function(start, stop, step) {
+ if (arguments.length < 3) {
+ step = 1;
+ if (arguments.length < 2) {
+ stop = start;
+ start = 0;
+ }
+ }
+ if ((stop - start) / step === Infinity) throw new Error("infinite range");
+ var range = [],
+ k = d3_range_integerScale(abs(step)),
+ i = -1,
+ j;
+ start *= k, stop *= k, step *= k;
+ if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k);
+ else while ((j = start + step * ++i) < stop) range.push(j / k);
+ return range;
+};
+
+function d3_range_integerScale(x) {
+ var k = 1;
+ while (x * k % 1) k *= 10;
+ return k;
+}
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js
new file mode 100644
index 0000000..de4dbd4
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js
@@ -0,0 +1,27 @@
+import "../core/class";
+import "map";
+
+d3.set = function(array) {
+ var set = new d3_Set;
+ if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
+ return set;
+};
+
+function d3_Set() {
+ this._ = Object.create(null);
+}
+
+d3_class(d3_Set, {
+ has: d3_map_has,
+ add: function(key) {
+ this._[d3_map_escape(key += "")] = true;
+ return key;
+ },
+ remove: d3_map_remove,
+ values: d3_map_keys,
+ size: d3_map_size,
+ empty: d3_map_empty,
+ forEach: function(f) {
+ for (var key in this._) f.call(this, d3_map_unescape(key));
+ }
+});
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js
new file mode 100644
index 0000000..dbe36bd
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js
@@ -0,0 +1,9 @@
+d3.shuffle = function(array, i0, i1) {
+ if ((m = arguments.length) < 3) { i1 = array.length; if (m < 2) i0 = 0; }
+ var m = i1 - i0, t, i;
+ while (m) {
+ i = Math.random() * m-- | 0;
+ t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;
+ }
+ return array;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js
new file mode 100644
index 0000000..1e179bc
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js
@@ -0,0 +1,14 @@
+import "../math/number";
+
+d3.sum = function(array, f) {
+ var s = 0,
+ n = array.length,
+ a,
+ i = -1;
+ if (arguments.length === 1) {
+ while (++i < n) if (d3_numeric(a = +array[i])) s += a; // zero and null are equivalent
+ } else {
+ while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;
+ }
+ return s;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js
new file mode 100644
index 0000000..999c543
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js
@@ -0,0 +1,5 @@
+import "zip";
+
+d3.transpose = function(matrix) {
+ return d3.zip.apply(d3, matrix);
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js
new file mode 100644
index 0000000..299d304
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js
@@ -0,0 +1,5 @@
+d3.values = function(map) {
+ var values = [];
+ for (var key in map) values.push(map[key]);
+ return values;
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js
new file mode 100644
index 0000000..70da168
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js
@@ -0,0 +1,29 @@
+import "../math/number";
+
+d3.variance = function(array, f) {
+ var n = array.length,
+ m = 0,
+ a,
+ d,
+ s = 0,
+ i = -1,
+ j = 0;
+ if (arguments.length === 1) {
+ while (++i < n) {
+ if (d3_numeric(a = d3_number(array[i]))) {
+ d = a - m;
+ m += d / ++j;
+ s += d * (a - m);
+ }
+ }
+ } else {
+ while (++i < n) {
+ if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {
+ d = a - m;
+ m += d / ++j;
+ s += d * (a - m);
+ }
+ }
+ }
+ if (j > 1) return s / (j - 1);
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js b/web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js
new file mode 100644
index 0000000..302ec4a
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js
@@ -0,0 +1,15 @@
+import "min";
+
+d3.zip = function() {
+ if (!(n = arguments.length)) return [];
+ for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
+ for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
+ zip[j] = arguments[j][i];
+ }
+ }
+ return zips;
+};
+
+function d3_zipLength(d) {
+ return d.length;
+}