@hpcc-js/dataflow 9.2.0 → 9.2.1
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/LICENSE +43 -43
- package/README.md +530 -530
- package/dist/index.js +557 -1
- package/dist/index.js.map +1 -7
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/lib-es6/__package__.js +4 -0
- package/lib-es6/__package__.js.map +1 -0
- package/lib-es6/__tests__/chain.js +49 -0
- package/lib-es6/__tests__/chain.js.map +1 -0
- package/lib-es6/__tests__/concat.js +17 -0
- package/lib-es6/__tests__/concat.js.map +1 -0
- package/lib-es6/__tests__/count.js +19 -0
- package/lib-es6/__tests__/count.js.map +1 -0
- package/lib-es6/__tests__/data.js +56 -0
- package/lib-es6/__tests__/data.js.map +1 -0
- package/lib-es6/__tests__/deviation.js +13 -0
- package/lib-es6/__tests__/deviation.js.map +1 -0
- package/lib-es6/__tests__/distribution.js +19 -0
- package/lib-es6/__tests__/distribution.js.map +1 -0
- package/lib-es6/__tests__/each.js +12 -0
- package/lib-es6/__tests__/each.js.map +1 -0
- package/lib-es6/__tests__/entries.js +13 -0
- package/lib-es6/__tests__/entries.js.map +1 -0
- package/lib-es6/__tests__/extent.js +19 -0
- package/lib-es6/__tests__/extent.js.map +1 -0
- package/lib-es6/__tests__/filter.js +14 -0
- package/lib-es6/__tests__/filter.js.map +1 -0
- package/lib-es6/__tests__/first.js +14 -0
- package/lib-es6/__tests__/first.js.map +1 -0
- package/lib-es6/__tests__/generate.js +8 -0
- package/lib-es6/__tests__/generate.js.map +1 -0
- package/lib-es6/__tests__/group.js +18 -0
- package/lib-es6/__tests__/group.js.map +1 -0
- package/lib-es6/__tests__/histogram.js +42 -0
- package/lib-es6/__tests__/histogram.js.map +1 -0
- package/lib-es6/__tests__/index.js +28 -0
- package/lib-es6/__tests__/index.js.map +1 -0
- package/lib-es6/__tests__/join.js +16 -0
- package/lib-es6/__tests__/join.js.map +1 -0
- package/lib-es6/__tests__/map.js +14 -0
- package/lib-es6/__tests__/map.js.map +1 -0
- package/lib-es6/__tests__/max.js +30 -0
- package/lib-es6/__tests__/max.js.map +1 -0
- package/lib-es6/__tests__/mean.js +10 -0
- package/lib-es6/__tests__/mean.js.map +1 -0
- package/lib-es6/__tests__/median.js +13 -0
- package/lib-es6/__tests__/median.js.map +1 -0
- package/lib-es6/__tests__/min.js +30 -0
- package/lib-es6/__tests__/min.js.map +1 -0
- package/lib-es6/__tests__/normalize.js +12 -0
- package/lib-es6/__tests__/normalize.js.map +1 -0
- package/lib-es6/__tests__/quartile.js +12 -0
- package/lib-es6/__tests__/quartile.js.map +1 -0
- package/lib-es6/__tests__/readme.js +96 -0
- package/lib-es6/__tests__/readme.js.map +1 -0
- package/lib-es6/__tests__/reduce.js +15 -0
- package/lib-es6/__tests__/reduce.js.map +1 -0
- package/lib-es6/__tests__/skip.js +14 -0
- package/lib-es6/__tests__/skip.js.map +1 -0
- package/lib-es6/__tests__/sort.js +19 -0
- package/lib-es6/__tests__/sort.js.map +1 -0
- package/lib-es6/__tests__/variance.js +13 -0
- package/lib-es6/__tests__/variance.js.map +1 -0
- package/lib-es6/activities/activity.js +4 -0
- package/lib-es6/activities/activity.js.map +1 -0
- package/lib-es6/activities/concat.js +10 -0
- package/lib-es6/activities/concat.js.map +1 -0
- package/lib-es6/activities/each.js +14 -0
- package/lib-es6/activities/each.js.map +1 -0
- package/lib-es6/activities/entries.js +13 -0
- package/lib-es6/activities/entries.js.map +1 -0
- package/lib-es6/activities/filter.js +15 -0
- package/lib-es6/activities/filter.js.map +1 -0
- package/lib-es6/activities/first.js +18 -0
- package/lib-es6/activities/first.js.map +1 -0
- package/lib-es6/activities/group.js +21 -0
- package/lib-es6/activities/group.js.map +1 -0
- package/lib-es6/activities/histogram.js +64 -0
- package/lib-es6/activities/histogram.js.map +1 -0
- package/lib-es6/activities/join.js +14 -0
- package/lib-es6/activities/join.js.map +1 -0
- package/lib-es6/activities/map.js +13 -0
- package/lib-es6/activities/map.js.map +1 -0
- package/lib-es6/activities/normalize.js +18 -0
- package/lib-es6/activities/normalize.js.map +1 -0
- package/lib-es6/activities/skip.js +15 -0
- package/lib-es6/activities/skip.js.map +1 -0
- package/lib-es6/activities/sort.js +10 -0
- package/lib-es6/activities/sort.js.map +1 -0
- package/lib-es6/index.js +28 -0
- package/lib-es6/index.js.map +1 -0
- package/lib-es6/observers/count.js +13 -0
- package/lib-es6/observers/count.js.map +1 -0
- package/lib-es6/observers/deviation.js +18 -0
- package/lib-es6/observers/deviation.js.map +1 -0
- package/lib-es6/observers/distribution.js +36 -0
- package/lib-es6/observers/distribution.js.map +1 -0
- package/lib-es6/observers/extent.js +18 -0
- package/lib-es6/observers/extent.js.map +1 -0
- package/lib-es6/observers/max.js +19 -0
- package/lib-es6/observers/max.js.map +1 -0
- package/lib-es6/observers/mean.js +21 -0
- package/lib-es6/observers/mean.js.map +1 -0
- package/lib-es6/observers/median.js +26 -0
- package/lib-es6/observers/median.js.map +1 -0
- package/lib-es6/observers/min.js +19 -0
- package/lib-es6/observers/min.js.map +1 -0
- package/lib-es6/observers/observer.js +35 -0
- package/lib-es6/observers/observer.js.map +1 -0
- package/lib-es6/observers/quartile.js +38 -0
- package/lib-es6/observers/quartile.js.map +1 -0
- package/lib-es6/observers/reduce.js +18 -0
- package/lib-es6/observers/reduce.js.map +1 -0
- package/lib-es6/observers/variance.js +23 -0
- package/lib-es6/observers/variance.js.map +1 -0
- package/lib-es6/utils/generate.js +7 -0
- package/lib-es6/utils/generate.js.map +1 -0
- package/lib-es6/utils/pipe.js +32 -0
- package/lib-es6/utils/pipe.js.map +1 -0
- package/package.json +37 -28
- package/src/__package__.ts +3 -3
- package/src/__tests__/chain.ts +85 -0
- package/src/__tests__/concat.ts +18 -0
- package/src/__tests__/count.ts +25 -0
- package/src/__tests__/data.ts +64 -0
- package/src/__tests__/deviation.ts +14 -0
- package/src/__tests__/distribution.ts +21 -0
- package/src/__tests__/each.ts +13 -0
- package/src/__tests__/entries.ts +14 -0
- package/src/__tests__/extent.ts +25 -0
- package/src/__tests__/filter.ts +16 -0
- package/src/__tests__/first.ts +15 -0
- package/src/__tests__/generate.ts +9 -0
- package/src/__tests__/group.ts +19 -0
- package/src/__tests__/histogram.ts +47 -0
- package/src/__tests__/index.ts +27 -0
- package/src/__tests__/join.ts +20 -0
- package/src/__tests__/map.ts +16 -0
- package/src/__tests__/max.ts +42 -0
- package/src/__tests__/mean.ts +11 -0
- package/src/__tests__/median.ts +14 -0
- package/src/__tests__/min.ts +42 -0
- package/src/__tests__/normalize.ts +14 -0
- package/src/__tests__/quartile.ts +14 -0
- package/src/__tests__/readme.ts +113 -0
- package/src/__tests__/reduce.ts +17 -0
- package/src/__tests__/skip.ts +15 -0
- package/src/__tests__/sort.ts +21 -0
- package/src/__tests__/variance.ts +14 -0
- package/src/activities/activity.ts +8 -8
- package/src/activities/concat.ts +14 -14
- package/src/activities/each.ts +19 -19
- package/src/activities/entries.ts +17 -17
- package/src/activities/filter.ts +20 -20
- package/src/activities/first.ts +20 -20
- package/src/activities/group.ts +27 -27
- package/src/activities/histogram.ts +78 -78
- package/src/activities/join.ts +19 -19
- package/src/activities/map.ts +18 -18
- package/src/activities/normalize.ts +21 -21
- package/src/activities/skip.ts +18 -18
- package/src/activities/sort.ts +16 -16
- package/src/index.ts +27 -27
- package/src/observers/count.ts +15 -15
- package/src/observers/deviation.ts +24 -24
- package/src/observers/distribution.ts +51 -51
- package/src/observers/extent.ts +24 -24
- package/src/observers/max.ts +24 -24
- package/src/observers/mean.ts +26 -26
- package/src/observers/median.ts +30 -30
- package/src/observers/min.ts +24 -24
- package/src/observers/observer.ts +52 -52
- package/src/observers/quartile.ts +43 -43
- package/src/observers/reduce.ts +22 -22
- package/src/observers/variance.ts +29 -29
- package/src/utils/generate.ts +6 -6
- package/src/utils/pipe.ts +74 -74
- package/types/__package__.d.ts +4 -0
- package/types/__package__.d.ts.map +1 -0
- package/types/__tests__/chain.d.ts +2 -0
- package/types/__tests__/chain.d.ts.map +1 -0
- package/types/__tests__/concat.d.ts +2 -0
- package/types/__tests__/concat.d.ts.map +1 -0
- package/types/__tests__/count.d.ts +2 -0
- package/types/__tests__/count.d.ts.map +1 -0
- package/types/__tests__/data.d.ts +62 -0
- package/types/__tests__/data.d.ts.map +1 -0
- package/types/__tests__/deviation.d.ts +2 -0
- package/types/__tests__/deviation.d.ts.map +1 -0
- package/types/__tests__/distribution.d.ts +2 -0
- package/types/__tests__/distribution.d.ts.map +1 -0
- package/types/__tests__/each.d.ts +2 -0
- package/types/__tests__/each.d.ts.map +1 -0
- package/types/__tests__/entries.d.ts +2 -0
- package/types/__tests__/entries.d.ts.map +1 -0
- package/types/__tests__/extent.d.ts +2 -0
- package/types/__tests__/extent.d.ts.map +1 -0
- package/types/__tests__/filter.d.ts +2 -0
- package/types/__tests__/filter.d.ts.map +1 -0
- package/types/__tests__/first.d.ts +2 -0
- package/types/__tests__/first.d.ts.map +1 -0
- package/types/__tests__/generate.d.ts +2 -0
- package/types/__tests__/generate.d.ts.map +1 -0
- package/types/__tests__/group.d.ts +2 -0
- package/types/__tests__/group.d.ts.map +1 -0
- package/types/__tests__/histogram.d.ts +2 -0
- package/types/__tests__/histogram.d.ts.map +1 -0
- package/types/__tests__/index.d.ts +28 -0
- package/types/__tests__/index.d.ts.map +1 -0
- package/types/__tests__/join.d.ts +2 -0
- package/types/__tests__/join.d.ts.map +1 -0
- package/types/__tests__/map.d.ts +2 -0
- package/types/__tests__/map.d.ts.map +1 -0
- package/types/__tests__/max.d.ts +2 -0
- package/types/__tests__/max.d.ts.map +1 -0
- package/types/__tests__/mean.d.ts +2 -0
- package/types/__tests__/mean.d.ts.map +1 -0
- package/types/__tests__/median.d.ts +2 -0
- package/types/__tests__/median.d.ts.map +1 -0
- package/types/__tests__/min.d.ts +2 -0
- package/types/__tests__/min.d.ts.map +1 -0
- package/types/__tests__/normalize.d.ts +2 -0
- package/types/__tests__/normalize.d.ts.map +1 -0
- package/types/__tests__/quartile.d.ts +2 -0
- package/types/__tests__/quartile.d.ts.map +1 -0
- package/types/__tests__/readme.d.ts +2 -0
- package/types/__tests__/readme.d.ts.map +1 -0
- package/types/__tests__/reduce.d.ts +2 -0
- package/types/__tests__/reduce.d.ts.map +1 -0
- package/types/__tests__/skip.d.ts +2 -0
- package/types/__tests__/skip.d.ts.map +1 -0
- package/types/__tests__/sort.d.ts +2 -0
- package/types/__tests__/sort.d.ts.map +1 -0
- package/types/__tests__/variance.d.ts +2 -0
- package/types/__tests__/variance.d.ts.map +1 -0
- package/types/activities/activity.d.ts +1 -0
- package/types/activities/activity.d.ts.map +1 -0
- package/types/activities/concat.d.ts +2 -1
- package/types/activities/concat.d.ts.map +1 -0
- package/types/activities/each.d.ts +2 -1
- package/types/activities/each.d.ts.map +1 -0
- package/types/activities/entries.d.ts +2 -1
- package/types/activities/entries.d.ts.map +1 -0
- package/types/activities/filter.d.ts +2 -1
- package/types/activities/filter.d.ts.map +1 -0
- package/types/activities/first.d.ts +2 -1
- package/types/activities/first.d.ts.map +1 -0
- package/types/activities/group.d.ts +2 -1
- package/types/activities/group.d.ts.map +1 -0
- package/types/activities/histogram.d.ts +2 -1
- package/types/activities/histogram.d.ts.map +1 -0
- package/types/activities/join.d.ts +2 -1
- package/types/activities/join.d.ts.map +1 -0
- package/types/activities/map.d.ts +2 -1
- package/types/activities/map.d.ts.map +1 -0
- package/types/activities/normalize.d.ts +2 -1
- package/types/activities/normalize.d.ts.map +1 -0
- package/types/activities/skip.d.ts +2 -1
- package/types/activities/skip.d.ts.map +1 -0
- package/types/activities/sort.d.ts +2 -1
- package/types/activities/sort.d.ts.map +1 -0
- package/types/index.d.ts +28 -27
- package/types/index.d.ts.map +1 -0
- package/types/observers/count.d.ts +2 -1
- package/types/observers/count.d.ts.map +1 -0
- package/types/observers/deviation.d.ts +2 -1
- package/types/observers/deviation.d.ts.map +1 -0
- package/types/observers/distribution.d.ts +2 -1
- package/types/observers/distribution.d.ts.map +1 -0
- package/types/observers/extent.d.ts +2 -1
- package/types/observers/extent.d.ts.map +1 -0
- package/types/observers/max.d.ts +2 -1
- package/types/observers/max.d.ts.map +1 -0
- package/types/observers/mean.d.ts +2 -1
- package/types/observers/mean.d.ts.map +1 -0
- package/types/observers/median.d.ts +2 -1
- package/types/observers/median.d.ts.map +1 -0
- package/types/observers/min.d.ts +2 -1
- package/types/observers/min.d.ts.map +1 -0
- package/types/observers/observer.d.ts +3 -2
- package/types/observers/observer.d.ts.map +1 -0
- package/types/observers/quartile.d.ts +2 -1
- package/types/observers/quartile.d.ts.map +1 -0
- package/types/observers/reduce.d.ts +2 -1
- package/types/observers/reduce.d.ts.map +1 -0
- package/types/observers/variance.d.ts +2 -1
- package/types/observers/variance.d.ts.map +1 -0
- package/types/utils/generate.d.ts +1 -0
- package/types/utils/generate.d.ts.map +1 -0
- package/types/utils/pipe.d.ts +2 -1
- package/types/utils/pipe.d.ts.map +1 -0
- package/types-3.4/__package__.d.ts +4 -0
- package/types-3.4/__tests__/chain.d.ts +2 -0
- package/types-3.4/__tests__/concat.d.ts +2 -0
- package/types-3.4/__tests__/count.d.ts +2 -0
- package/types-3.4/__tests__/data.d.ts +62 -0
- package/types-3.4/__tests__/deviation.d.ts +2 -0
- package/types-3.4/__tests__/distribution.d.ts +2 -0
- package/types-3.4/__tests__/each.d.ts +2 -0
- package/types-3.4/__tests__/entries.d.ts +2 -0
- package/types-3.4/__tests__/extent.d.ts +2 -0
- package/types-3.4/__tests__/filter.d.ts +2 -0
- package/types-3.4/__tests__/first.d.ts +2 -0
- package/types-3.4/__tests__/generate.d.ts +2 -0
- package/types-3.4/__tests__/group.d.ts +2 -0
- package/types-3.4/__tests__/histogram.d.ts +2 -0
- package/types-3.4/__tests__/index.d.ts +28 -0
- package/types-3.4/__tests__/join.d.ts +2 -0
- package/types-3.4/__tests__/map.d.ts +2 -0
- package/types-3.4/__tests__/max.d.ts +2 -0
- package/types-3.4/__tests__/mean.d.ts +2 -0
- package/types-3.4/__tests__/median.d.ts +2 -0
- package/types-3.4/__tests__/min.d.ts +2 -0
- package/types-3.4/__tests__/normalize.d.ts +2 -0
- package/types-3.4/__tests__/quartile.d.ts +2 -0
- package/types-3.4/__tests__/readme.d.ts +2 -0
- package/types-3.4/__tests__/reduce.d.ts +2 -0
- package/types-3.4/__tests__/skip.d.ts +2 -0
- package/types-3.4/__tests__/sort.d.ts +2 -0
- package/types-3.4/__tests__/variance.d.ts +2 -0
- package/types-3.4/activities/activity.d.ts +6 -0
- package/types-3.4/activities/concat.d.ts +4 -0
- package/types-3.4/activities/each.d.ts +5 -0
- package/types-3.4/activities/entries.d.ts +10 -0
- package/types-3.4/activities/filter.d.ts +5 -0
- package/types-3.4/activities/first.d.ts +4 -0
- package/types-3.4/activities/group.d.ts +9 -0
- package/types-3.4/activities/histogram.d.ts +18 -0
- package/types-3.4/activities/join.d.ts +5 -0
- package/types-3.4/activities/map.d.ts +5 -0
- package/types-3.4/activities/normalize.d.ts +4 -0
- package/types-3.4/activities/skip.d.ts +4 -0
- package/types-3.4/activities/sort.d.ts +5 -0
- package/types-3.4/index.d.ts +28 -0
- package/types-3.4/observers/count.d.ts +3 -0
- package/types-3.4/observers/deviation.d.ts +5 -0
- package/types-3.4/observers/distribution.d.ts +13 -0
- package/types-3.4/observers/extent.d.ts +11 -0
- package/types-3.4/observers/max.d.ts +5 -0
- package/types-3.4/observers/mean.d.ts +5 -0
- package/types-3.4/observers/median.d.ts +5 -0
- package/types-3.4/observers/min.d.ts +5 -0
- package/types-3.4/observers/observer.d.ts +14 -0
- package/types-3.4/observers/quartile.d.ts +12 -0
- package/types-3.4/observers/reduce.d.ts +4 -0
- package/types-3.4/observers/variance.d.ts +5 -0
- package/types-3.4/utils/generate.d.ts +2 -0
- package/types-3.4/utils/pipe.d.ts +42 -0
package/src/activities/group.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { IterableActivity, Source, isSource } from "./activity
|
|
2
|
-
|
|
3
|
-
export type GroupFn<T> = (row: T, index: number) => number | string;
|
|
4
|
-
export type GroupRow<T> = { key: string, value: T[] };
|
|
5
|
-
|
|
6
|
-
function groupGen<T = any>(groupFn: GroupFn<T>): IterableActivity<T, GroupRow<T>> {
|
|
7
|
-
return function* (source: Source<T>) {
|
|
8
|
-
let i = -1;
|
|
9
|
-
const group: { [key: string]: T[] } = {};
|
|
10
|
-
for (const row of source) {
|
|
11
|
-
const key = groupFn(row, ++i);
|
|
12
|
-
if (!group[key]) {
|
|
13
|
-
group[key] = [];
|
|
14
|
-
}
|
|
15
|
-
group[key].push(row);
|
|
16
|
-
}
|
|
17
|
-
for (const key in group) {
|
|
18
|
-
yield { key, value: group[key] };
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export function group<T>(groupByFn: GroupFn<T>): IterableActivity<T, GroupRow<T>>;
|
|
24
|
-
export function group<T>(source: Source<T>, groupByFn: GroupFn<T>): IterableIterator<GroupRow<T>>;
|
|
25
|
-
export function group<T>(s_or_gbf: Source<T> | GroupFn<T>, groupByFn?: GroupFn<T>): IterableActivity<T, GroupRow<T>> | IterableIterator<GroupRow<T>> {
|
|
26
|
-
return isSource(s_or_gbf) ? groupGen<T>(groupByFn!)(s_or_gbf) : groupGen<T>(s_or_gbf);
|
|
27
|
-
}
|
|
1
|
+
import { IterableActivity, Source, isSource } from "./activity";
|
|
2
|
+
|
|
3
|
+
export type GroupFn<T> = (row: T, index: number) => number | string;
|
|
4
|
+
export type GroupRow<T> = { key: string, value: T[] };
|
|
5
|
+
|
|
6
|
+
function groupGen<T = any>(groupFn: GroupFn<T>): IterableActivity<T, GroupRow<T>> {
|
|
7
|
+
return function* (source: Source<T>) {
|
|
8
|
+
let i = -1;
|
|
9
|
+
const group: { [key: string]: T[] } = {};
|
|
10
|
+
for (const row of source) {
|
|
11
|
+
const key = groupFn(row, ++i);
|
|
12
|
+
if (!group[key]) {
|
|
13
|
+
group[key] = [];
|
|
14
|
+
}
|
|
15
|
+
group[key].push(row);
|
|
16
|
+
}
|
|
17
|
+
for (const key in group) {
|
|
18
|
+
yield { key, value: group[key] };
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function group<T>(groupByFn: GroupFn<T>): IterableActivity<T, GroupRow<T>>;
|
|
24
|
+
export function group<T>(source: Source<T>, groupByFn: GroupFn<T>): IterableIterator<GroupRow<T>>;
|
|
25
|
+
export function group<T>(s_or_gbf: Source<T> | GroupFn<T>, groupByFn?: GroupFn<T>): IterableActivity<T, GroupRow<T>> | IterableIterator<GroupRow<T>> {
|
|
26
|
+
return isSource(s_or_gbf) ? groupGen<T>(groupByFn!)(s_or_gbf) : groupGen<T>(s_or_gbf);
|
|
27
|
+
}
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { IterableActivity, Source, isSource } from "./activity
|
|
2
|
-
import { extent } from "../observers/extent
|
|
3
|
-
import { scalar } from "../observers/observer
|
|
4
|
-
|
|
5
|
-
export type HistogramFn<T> = (row: T) => number;
|
|
6
|
-
export type HistogramRow<T> = { from: number, to: number, value: T[] };
|
|
7
|
-
export type OptionA = { buckets: number };
|
|
8
|
-
export type OptionB = { min: number, range: number };
|
|
9
|
-
export type Options = OptionA | OptionB;
|
|
10
|
-
|
|
11
|
-
function isOptionA(_: Options): _ is OptionA {
|
|
12
|
-
return (_ as OptionA).buckets !== undefined;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function histogramGen<T = any>(callbackFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>> {
|
|
16
|
-
return function* (_source: Source<T>) {
|
|
17
|
-
let min: number;
|
|
18
|
-
let bucketSize: number;
|
|
19
|
-
|
|
20
|
-
let source;
|
|
21
|
-
if (isOptionA(options)) {
|
|
22
|
-
source = Array.isArray(_source) ? _source : [..._source];
|
|
23
|
-
const minMax = scalar(extent(callbackFn))(source);
|
|
24
|
-
if (minMax === undefined) {
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
27
|
-
min = minMax[0];
|
|
28
|
-
const max = minMax[1];
|
|
29
|
-
const buckets = options.buckets;
|
|
30
|
-
bucketSize = (max - min) / buckets;
|
|
31
|
-
} else {
|
|
32
|
-
source = _source;
|
|
33
|
-
min = options.min;
|
|
34
|
-
bucketSize = options.range;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const histogram: { [key: number]: T[] } = {};
|
|
38
|
-
|
|
39
|
-
let maxBucketID = 0;
|
|
40
|
-
for (const row of source) {
|
|
41
|
-
const value = callbackFn(row);
|
|
42
|
-
const bucketID = Math.floor((value - min) / bucketSize);
|
|
43
|
-
if (maxBucketID < bucketID) {
|
|
44
|
-
maxBucketID = bucketID;
|
|
45
|
-
}
|
|
46
|
-
if (histogram[bucketID] === undefined) {
|
|
47
|
-
histogram[bucketID] = [];
|
|
48
|
-
}
|
|
49
|
-
histogram[bucketID].push(row);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const lastBucket = histogram[maxBucketID];
|
|
53
|
-
const from = min + maxBucketID * bucketSize;
|
|
54
|
-
|
|
55
|
-
for (let i = 0; i <= maxBucketID; ++i) {
|
|
56
|
-
// If all items in the last bucket match the "to" of the previous bucket, put them in there...
|
|
57
|
-
if (i === maxBucketID - 1 && lastBucket.every(row => from === callbackFn(row))) {
|
|
58
|
-
yield {
|
|
59
|
-
from: min + i * bucketSize,
|
|
60
|
-
to: min + (i + 1) * bucketSize,
|
|
61
|
-
value: [...(histogram[i] || []), ...lastBucket]
|
|
62
|
-
};
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
yield {
|
|
66
|
-
from: min + i * bucketSize,
|
|
67
|
-
to: min + (i + 1) * bucketSize,
|
|
68
|
-
value: histogram[i] || []
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function histogram<T>(histogramByFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>>;
|
|
75
|
-
export function histogram<T>(source: Source<T>, histogramByFn: HistogramFn<T>, options: Options): IterableIterator<HistogramRow<T>>;
|
|
76
|
-
export function histogram<T>(s_or_hf: Source<T> | HistogramFn<T>, hf_or_b: HistogramFn<T> | Options, options?: Options): IterableActivity<T, HistogramRow<T>> | IterableIterator<HistogramRow<T>> {
|
|
77
|
-
return isSource(s_or_hf) ? histogramGen<T>(hf_or_b as HistogramFn<T>, options!)(s_or_hf) : histogramGen<T>(s_or_hf as HistogramFn<T>, hf_or_b as Options);
|
|
78
|
-
}
|
|
1
|
+
import { IterableActivity, Source, isSource } from "./activity";
|
|
2
|
+
import { extent } from "../observers/extent";
|
|
3
|
+
import { scalar } from "../observers/observer";
|
|
4
|
+
|
|
5
|
+
export type HistogramFn<T> = (row: T) => number;
|
|
6
|
+
export type HistogramRow<T> = { from: number, to: number, value: T[] };
|
|
7
|
+
export type OptionA = { buckets: number };
|
|
8
|
+
export type OptionB = { min: number, range: number };
|
|
9
|
+
export type Options = OptionA | OptionB;
|
|
10
|
+
|
|
11
|
+
function isOptionA(_: Options): _ is OptionA {
|
|
12
|
+
return (_ as OptionA).buckets !== undefined;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function histogramGen<T = any>(callbackFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>> {
|
|
16
|
+
return function* (_source: Source<T>) {
|
|
17
|
+
let min: number;
|
|
18
|
+
let bucketSize: number;
|
|
19
|
+
|
|
20
|
+
let source;
|
|
21
|
+
if (isOptionA(options)) {
|
|
22
|
+
source = Array.isArray(_source) ? _source : [..._source];
|
|
23
|
+
const minMax = scalar(extent(callbackFn))(source);
|
|
24
|
+
if (minMax === undefined) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
min = minMax[0];
|
|
28
|
+
const max = minMax[1];
|
|
29
|
+
const buckets = options.buckets;
|
|
30
|
+
bucketSize = (max - min) / buckets;
|
|
31
|
+
} else {
|
|
32
|
+
source = _source;
|
|
33
|
+
min = options.min;
|
|
34
|
+
bucketSize = options.range;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const histogram: { [key: number]: T[] } = {};
|
|
38
|
+
|
|
39
|
+
let maxBucketID = 0;
|
|
40
|
+
for (const row of source) {
|
|
41
|
+
const value = callbackFn(row);
|
|
42
|
+
const bucketID = Math.floor((value - min) / bucketSize);
|
|
43
|
+
if (maxBucketID < bucketID) {
|
|
44
|
+
maxBucketID = bucketID;
|
|
45
|
+
}
|
|
46
|
+
if (histogram[bucketID] === undefined) {
|
|
47
|
+
histogram[bucketID] = [];
|
|
48
|
+
}
|
|
49
|
+
histogram[bucketID].push(row);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const lastBucket = histogram[maxBucketID];
|
|
53
|
+
const from = min + maxBucketID * bucketSize;
|
|
54
|
+
|
|
55
|
+
for (let i = 0; i <= maxBucketID; ++i) {
|
|
56
|
+
// If all items in the last bucket match the "to" of the previous bucket, put them in there...
|
|
57
|
+
if (i === maxBucketID - 1 && lastBucket.every(row => from === callbackFn(row))) {
|
|
58
|
+
yield {
|
|
59
|
+
from: min + i * bucketSize,
|
|
60
|
+
to: min + (i + 1) * bucketSize,
|
|
61
|
+
value: [...(histogram[i] || []), ...lastBucket]
|
|
62
|
+
};
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
yield {
|
|
66
|
+
from: min + i * bucketSize,
|
|
67
|
+
to: min + (i + 1) * bucketSize,
|
|
68
|
+
value: histogram[i] || []
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function histogram<T>(histogramByFn: HistogramFn<T>, options: Options): IterableActivity<T, HistogramRow<T>>;
|
|
75
|
+
export function histogram<T>(source: Source<T>, histogramByFn: HistogramFn<T>, options: Options): IterableIterator<HistogramRow<T>>;
|
|
76
|
+
export function histogram<T>(s_or_hf: Source<T> | HistogramFn<T>, hf_or_b: HistogramFn<T> | Options, options?: Options): IterableActivity<T, HistogramRow<T>> | IterableIterator<HistogramRow<T>> {
|
|
77
|
+
return isSource(s_or_hf) ? histogramGen<T>(hf_or_b as HistogramFn<T>, options!)(s_or_hf) : histogramGen<T>(s_or_hf as HistogramFn<T>, hf_or_b as Options);
|
|
78
|
+
}
|
package/src/activities/join.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { IterableActivity, Source, isSource } from "./activity
|
|
2
|
-
|
|
3
|
-
export type JoinCallback<T, U, V> = (rowT: T, rowU: U, index: number) => V;
|
|
4
|
-
|
|
5
|
-
function joinGen<T = any, U = any, V = any>(_sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V> {
|
|
6
|
-
const sourceB = Array.isArray(_sourceU) ? _sourceU[Symbol.iterator]() : _sourceU;
|
|
7
|
-
return function* (sourceT: Source<T>) {
|
|
8
|
-
let i = -1;
|
|
9
|
-
for (const item of sourceT) {
|
|
10
|
-
yield callbackFn(item, sourceB.next().value, ++i);
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V>;
|
|
16
|
-
export function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableIterator<V>;
|
|
17
|
-
export function join<T, U, V>(sT_or_sU: Source<T> | Source<U>, sU_or_cb: Source<U> | JoinCallback<T, U, V>, callbackFn?: JoinCallback<T, U, V>): IterableActivity<T, V> | IterableIterator<V> {
|
|
18
|
-
return isSource(sU_or_cb) ? joinGen(sU_or_cb, callbackFn!)(sT_or_sU as Source<T>) : joinGen(sT_or_sU as Source<U>, sU_or_cb);
|
|
19
|
-
}
|
|
1
|
+
import { IterableActivity, Source, isSource } from "./activity";
|
|
2
|
+
|
|
3
|
+
export type JoinCallback<T, U, V> = (rowT: T, rowU: U, index: number) => V;
|
|
4
|
+
|
|
5
|
+
function joinGen<T = any, U = any, V = any>(_sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V> {
|
|
6
|
+
const sourceB = Array.isArray(_sourceU) ? _sourceU[Symbol.iterator]() : _sourceU;
|
|
7
|
+
return function* (sourceT: Source<T>) {
|
|
8
|
+
let i = -1;
|
|
9
|
+
for (const item of sourceT) {
|
|
10
|
+
yield callbackFn(item, sourceB.next().value, ++i);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableActivity<T, V>;
|
|
16
|
+
export function join<T, U, V>(sourceU: Source<U>, callbackFn: JoinCallback<T, U, V>): IterableIterator<V>;
|
|
17
|
+
export function join<T, U, V>(sT_or_sU: Source<T> | Source<U>, sU_or_cb: Source<U> | JoinCallback<T, U, V>, callbackFn?: JoinCallback<T, U, V>): IterableActivity<T, V> | IterableIterator<V> {
|
|
18
|
+
return isSource(sU_or_cb) ? joinGen(sU_or_cb, callbackFn!)(sT_or_sU as Source<T>) : joinGen(sT_or_sU as Source<U>, sU_or_cb);
|
|
19
|
+
}
|
package/src/activities/map.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { IterableActivity, Source, isSource } from "./activity
|
|
2
|
-
|
|
3
|
-
export type MapCallback<T, U> = (row: T, index: number) => U;
|
|
4
|
-
|
|
5
|
-
function mapGen<T = any, U = any>(callbackFn: MapCallback<T, U>): IterableActivity<T, U> {
|
|
6
|
-
return function* (source: Source<T>) {
|
|
7
|
-
let i = -1;
|
|
8
|
-
for (const item of source) {
|
|
9
|
-
yield callbackFn(item, ++i);
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function map<T, U>(callbackFn: MapCallback<T, U>): IterableActivity<T, U>;
|
|
15
|
-
export function map<T, U>(source: Source<T>, callbackFn: MapCallback<T, U>): IterableIterator<U>;
|
|
16
|
-
export function map<T, U>(s_or_cb: Source<T> | MapCallback<T, U>, callbackFn?: MapCallback<T, U>): IterableActivity<T, U> | IterableIterator<U> {
|
|
17
|
-
return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb);
|
|
18
|
-
}
|
|
1
|
+
import { IterableActivity, Source, isSource } from "./activity";
|
|
2
|
+
|
|
3
|
+
export type MapCallback<T, U> = (row: T, index: number) => U;
|
|
4
|
+
|
|
5
|
+
function mapGen<T = any, U = any>(callbackFn: MapCallback<T, U>): IterableActivity<T, U> {
|
|
6
|
+
return function* (source: Source<T>) {
|
|
7
|
+
let i = -1;
|
|
8
|
+
for (const item of source) {
|
|
9
|
+
yield callbackFn(item, ++i);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function map<T, U>(callbackFn: MapCallback<T, U>): IterableActivity<T, U>;
|
|
15
|
+
export function map<T, U>(source: Source<T>, callbackFn: MapCallback<T, U>): IterableIterator<U>;
|
|
16
|
+
export function map<T, U>(s_or_cb: Source<T> | MapCallback<T, U>, callbackFn?: MapCallback<T, U>): IterableActivity<T, U> | IterableIterator<U> {
|
|
17
|
+
return isSource(s_or_cb) ? mapGen(callbackFn!)(s_or_cb) : mapGen(s_or_cb);
|
|
18
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { Source, IterableActivity, isSource } from "./activity
|
|
2
|
-
import { extent } from "../observers/extent
|
|
3
|
-
import { scalar } from "../observers/observer
|
|
4
|
-
import { map } from "./map
|
|
5
|
-
|
|
6
|
-
function normalizeGen(): IterableActivity<number> {
|
|
7
|
-
const calcExtent = scalar(extent());
|
|
8
|
-
return function* (_source: Source<number>) {
|
|
9
|
-
const source = Array.isArray(_source) ? _source : [..._source];
|
|
10
|
-
const range = calcExtent(source);
|
|
11
|
-
const divisor = (range[1] - range[0]) || 1;
|
|
12
|
-
const normalizeMap = map((row: number) => (row - range[0]) / divisor);
|
|
13
|
-
return yield* normalizeMap(source);
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function normalize(): IterableActivity<number>;
|
|
18
|
-
export function normalize(source: Source<number>): IterableIterator<number>;
|
|
19
|
-
export function normalize(s_or_undef?: Source<number>): IterableActivity<number> | IterableIterator<number> {
|
|
20
|
-
return isSource(s_or_undef) ? normalizeGen()(s_or_undef) : normalizeGen();
|
|
21
|
-
}
|
|
1
|
+
import { Source, IterableActivity, isSource } from "./activity";
|
|
2
|
+
import { extent } from "../observers/extent";
|
|
3
|
+
import { scalar } from "../observers/observer";
|
|
4
|
+
import { map } from "./map";
|
|
5
|
+
|
|
6
|
+
function normalizeGen(): IterableActivity<number> {
|
|
7
|
+
const calcExtent = scalar(extent());
|
|
8
|
+
return function* (_source: Source<number>) {
|
|
9
|
+
const source = Array.isArray(_source) ? _source : [..._source];
|
|
10
|
+
const range = calcExtent(source);
|
|
11
|
+
const divisor = (range[1] - range[0]) || 1;
|
|
12
|
+
const normalizeMap = map((row: number) => (row - range[0]) / divisor);
|
|
13
|
+
return yield* normalizeMap(source);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function normalize(): IterableActivity<number>;
|
|
18
|
+
export function normalize(source: Source<number>): IterableIterator<number>;
|
|
19
|
+
export function normalize(s_or_undef?: Source<number>): IterableActivity<number> | IterableIterator<number> {
|
|
20
|
+
return isSource(s_or_undef) ? normalizeGen()(s_or_undef) : normalizeGen();
|
|
21
|
+
}
|
package/src/activities/skip.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { IterableActivity, Source, isSource } from "./activity
|
|
2
|
-
|
|
3
|
-
function skipGen<T = any>(n: number): IterableActivity<T, T> {
|
|
4
|
-
return function* (source: Source<T>) {
|
|
5
|
-
let i = -1;
|
|
6
|
-
for (const item of source) {
|
|
7
|
-
if (++i >= n) {
|
|
8
|
-
yield item;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function skip<T = any>(n: number): IterableActivity<T, T>;
|
|
15
|
-
export function skip<T>(source: Source<T>, n: number): IterableIterator<T>;
|
|
16
|
-
export function skip<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {
|
|
17
|
-
return isSource(s_or_n) ? skipGen<T>(n!)(s_or_n) : skipGen<T>(s_or_n);
|
|
18
|
-
}
|
|
1
|
+
import { IterableActivity, Source, isSource } from "./activity";
|
|
2
|
+
|
|
3
|
+
function skipGen<T = any>(n: number): IterableActivity<T, T> {
|
|
4
|
+
return function* (source: Source<T>) {
|
|
5
|
+
let i = -1;
|
|
6
|
+
for (const item of source) {
|
|
7
|
+
if (++i >= n) {
|
|
8
|
+
yield item;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function skip<T = any>(n: number): IterableActivity<T, T>;
|
|
15
|
+
export function skip<T>(source: Source<T>, n: number): IterableIterator<T>;
|
|
16
|
+
export function skip<T = any>(s_or_n: Source<T> | number, n?: number): IterableActivity<T, T> | IterableIterator<T> {
|
|
17
|
+
return isSource(s_or_n) ? skipGen<T>(n!)(s_or_n) : skipGen<T>(s_or_n);
|
|
18
|
+
}
|
package/src/activities/sort.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { IterableActivity, Source, isSource } from "./activity
|
|
2
|
-
|
|
3
|
-
export type SortCallback<T> = (a: T, b: T) => number;
|
|
4
|
-
|
|
5
|
-
function sortGen<T = any>(compareFn?: SortCallback<T>): IterableActivity<T> {
|
|
6
|
-
return function* (source: Source<T>) {
|
|
7
|
-
yield* (Array.isArray(source) ? source : [...source]).sort(compareFn);
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function sort<T = any>(callbackFn: SortCallback<T>): IterableActivity<T>;
|
|
12
|
-
export function sort<T = any>(source: Source<T>, callbackFn: SortCallback<T>): IterableIterator<T>;
|
|
13
|
-
export function sort<T = any>(s_or_cb: Source<T> | SortCallback<T>, callbackFn?: SortCallback<T>): IterableActivity<T> | IterableIterator<T> {
|
|
14
|
-
return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb);
|
|
15
|
-
}
|
|
16
|
-
|
|
1
|
+
import { IterableActivity, Source, isSource } from "./activity";
|
|
2
|
+
|
|
3
|
+
export type SortCallback<T> = (a: T, b: T) => number;
|
|
4
|
+
|
|
5
|
+
function sortGen<T = any>(compareFn?: SortCallback<T>): IterableActivity<T> {
|
|
6
|
+
return function* (source: Source<T>) {
|
|
7
|
+
yield* (Array.isArray(source) ? source : [...source]).sort(compareFn);
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function sort<T = any>(callbackFn: SortCallback<T>): IterableActivity<T>;
|
|
12
|
+
export function sort<T = any>(source: Source<T>, callbackFn: SortCallback<T>): IterableIterator<T>;
|
|
13
|
+
export function sort<T = any>(s_or_cb: Source<T> | SortCallback<T>, callbackFn?: SortCallback<T>): IterableActivity<T> | IterableIterator<T> {
|
|
14
|
+
return isSource(s_or_cb) ? sortGen(callbackFn!)(s_or_cb) : sortGen(s_or_cb);
|
|
15
|
+
}
|
|
16
|
+
|
package/src/index.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
export * from "./activities/activity
|
|
2
|
-
export * from "./activities/concat
|
|
3
|
-
export * from "./activities/each
|
|
4
|
-
export * from "./activities/entries
|
|
5
|
-
export * from "./activities/filter
|
|
6
|
-
export * from "./activities/first
|
|
7
|
-
export * from "./activities/group
|
|
8
|
-
export * from "./activities/histogram
|
|
9
|
-
export * from "./activities/join
|
|
10
|
-
export * from "./activities/map
|
|
11
|
-
export * from "./activities/normalize
|
|
12
|
-
export * from "./activities/skip
|
|
13
|
-
export * from "./activities/sort
|
|
14
|
-
export * from "./observers/count
|
|
15
|
-
export * from "./observers/deviation
|
|
16
|
-
export * from "./observers/distribution
|
|
17
|
-
export * from "./observers/extent
|
|
18
|
-
export * from "./observers/observer
|
|
19
|
-
export * from "./observers/max
|
|
20
|
-
export * from "./observers/mean
|
|
21
|
-
export * from "./observers/median
|
|
22
|
-
export * from "./observers/min
|
|
23
|
-
export * from "./observers/quartile
|
|
24
|
-
export * from "./observers/reduce
|
|
25
|
-
export * from "./observers/variance
|
|
26
|
-
export * from "./utils/generate
|
|
27
|
-
export * from "./utils/pipe
|
|
1
|
+
export * from "./activities/activity";
|
|
2
|
+
export * from "./activities/concat";
|
|
3
|
+
export * from "./activities/each";
|
|
4
|
+
export * from "./activities/entries";
|
|
5
|
+
export * from "./activities/filter";
|
|
6
|
+
export * from "./activities/first";
|
|
7
|
+
export * from "./activities/group";
|
|
8
|
+
export * from "./activities/histogram";
|
|
9
|
+
export * from "./activities/join";
|
|
10
|
+
export * from "./activities/map";
|
|
11
|
+
export * from "./activities/normalize";
|
|
12
|
+
export * from "./activities/skip";
|
|
13
|
+
export * from "./activities/sort";
|
|
14
|
+
export * from "./observers/count";
|
|
15
|
+
export * from "./observers/deviation";
|
|
16
|
+
export * from "./observers/distribution";
|
|
17
|
+
export * from "./observers/extent";
|
|
18
|
+
export * from "./observers/observer";
|
|
19
|
+
export * from "./observers/max";
|
|
20
|
+
export * from "./observers/mean";
|
|
21
|
+
export * from "./observers/median";
|
|
22
|
+
export * from "./observers/min";
|
|
23
|
+
export * from "./observers/quartile";
|
|
24
|
+
export * from "./observers/reduce";
|
|
25
|
+
export * from "./observers/variance";
|
|
26
|
+
export * from "./utils/generate";
|
|
27
|
+
export * from "./utils/pipe";
|
package/src/observers/count.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { Observer } from "./observer
|
|
2
|
-
|
|
3
|
-
export function count<T = any>(): Observer<T, number> {
|
|
4
|
-
let count: number;
|
|
5
|
-
|
|
6
|
-
return {
|
|
7
|
-
observe: (value: T, idx: number) => {
|
|
8
|
-
if (idx === 0) {
|
|
9
|
-
count = 0;
|
|
10
|
-
}
|
|
11
|
-
++count;
|
|
12
|
-
},
|
|
13
|
-
peek: () => count
|
|
14
|
-
};
|
|
15
|
-
}
|
|
1
|
+
import { Observer } from "./observer";
|
|
2
|
+
|
|
3
|
+
export function count<T = any>(): Observer<T, number> {
|
|
4
|
+
let count: number;
|
|
5
|
+
|
|
6
|
+
return {
|
|
7
|
+
observe: (value: T, idx: number) => {
|
|
8
|
+
if (idx === 0) {
|
|
9
|
+
count = 0;
|
|
10
|
+
}
|
|
11
|
+
++count;
|
|
12
|
+
},
|
|
13
|
+
peek: () => count
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { variance } from "./variance
|
|
2
|
-
import { AccessorT, Observer, Accessor } from "./observer
|
|
3
|
-
|
|
4
|
-
function _deviation(): Observer<number, number | undefined> {
|
|
5
|
-
const v = variance();
|
|
6
|
-
|
|
7
|
-
return {
|
|
8
|
-
observe: (value: number, idx: number) => {
|
|
9
|
-
v.observe(value, idx);
|
|
10
|
-
},
|
|
11
|
-
peek: () => {
|
|
12
|
-
const variance = v.peek();
|
|
13
|
-
return variance !== undefined ? Math.sqrt(variance) : variance;
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export type DeviationAccessor<T> = AccessorT<T, number>;
|
|
19
|
-
|
|
20
|
-
export function deviation(): Observer<number, number | undefined>;
|
|
21
|
-
export function deviation<T = any>(callbackFn: DeviationAccessor<T>): Observer<T, number | undefined>;
|
|
22
|
-
export function deviation<T = any>(callbackFn?: DeviationAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {
|
|
23
|
-
return callbackFn ? Accessor(_deviation, callbackFn) : _deviation();
|
|
24
|
-
}
|
|
1
|
+
import { variance } from "./variance";
|
|
2
|
+
import { AccessorT, Observer, Accessor } from "./observer";
|
|
3
|
+
|
|
4
|
+
function _deviation(): Observer<number, number | undefined> {
|
|
5
|
+
const v = variance();
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
observe: (value: number, idx: number) => {
|
|
9
|
+
v.observe(value, idx);
|
|
10
|
+
},
|
|
11
|
+
peek: () => {
|
|
12
|
+
const variance = v.peek();
|
|
13
|
+
return variance !== undefined ? Math.sqrt(variance) : variance;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type DeviationAccessor<T> = AccessorT<T, number>;
|
|
19
|
+
|
|
20
|
+
export function deviation(): Observer<number, number | undefined>;
|
|
21
|
+
export function deviation<T = any>(callbackFn: DeviationAccessor<T>): Observer<T, number | undefined>;
|
|
22
|
+
export function deviation<T = any>(callbackFn?: DeviationAccessor<T>): Observer<number, number | undefined> | Observer<T, number | undefined> {
|
|
23
|
+
return callbackFn ? Accessor(_deviation, callbackFn) : _deviation();
|
|
24
|
+
}
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { max } from "./max
|
|
2
|
-
import { min } from "./min
|
|
3
|
-
import { mean } from "./mean
|
|
4
|
-
import { variance } from "./variance
|
|
5
|
-
import { Observer, Accessor } from "./observer
|
|
6
|
-
|
|
7
|
-
export type DistributionCallback<T> = (row: T, currentIndex: number) => number;
|
|
8
|
-
|
|
9
|
-
export type DistributionT = {
|
|
10
|
-
min: number,
|
|
11
|
-
mean: number,
|
|
12
|
-
max: number,
|
|
13
|
-
deviation: number | undefined,
|
|
14
|
-
variance: number | undefined
|
|
15
|
-
} | undefined;
|
|
16
|
-
|
|
17
|
-
function _distribution(): Observer<number, DistributionT> {
|
|
18
|
-
const minFO = min();
|
|
19
|
-
const maxFO = max();
|
|
20
|
-
const meanFO = mean();
|
|
21
|
-
const varianceFO = variance();
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
observe: (value: number, idx: number) => {
|
|
25
|
-
minFO.observe(value, idx);
|
|
26
|
-
maxFO.observe(value, idx);
|
|
27
|
-
meanFO.observe(value, idx);
|
|
28
|
-
varianceFO.observe(value, idx);
|
|
29
|
-
},
|
|
30
|
-
peek: () => {
|
|
31
|
-
const minResult = minFO.peek();
|
|
32
|
-
if (minResult === undefined) return undefined;
|
|
33
|
-
const varianceResult = varianceFO.peek();
|
|
34
|
-
return {
|
|
35
|
-
min: minResult,
|
|
36
|
-
max: maxFO.peek(),
|
|
37
|
-
mean: meanFO.peek(),
|
|
38
|
-
variance: varianceResult,
|
|
39
|
-
deviation: varianceResult !== undefined ? Math.sqrt(varianceResult) : undefined
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export type DistributionAccessor<T> = (row: T, currentIndex: number) => number;
|
|
46
|
-
|
|
47
|
-
export function distribution(): Observer<number, DistributionT>;
|
|
48
|
-
export function distribution<T = any>(callbackFn: DistributionAccessor<T>): Observer<T, DistributionT>;
|
|
49
|
-
export function distribution<T = any>(callbackFn?: DistributionAccessor<T>): Observer<number, DistributionT> | Observer<T, DistributionT> {
|
|
50
|
-
return callbackFn ? Accessor(_distribution, callbackFn) : _distribution();
|
|
51
|
-
}
|
|
1
|
+
import { max } from "./max";
|
|
2
|
+
import { min } from "./min";
|
|
3
|
+
import { mean } from "./mean";
|
|
4
|
+
import { variance } from "./variance";
|
|
5
|
+
import { Observer, Accessor } from "./observer";
|
|
6
|
+
|
|
7
|
+
export type DistributionCallback<T> = (row: T, currentIndex: number) => number;
|
|
8
|
+
|
|
9
|
+
export type DistributionT = {
|
|
10
|
+
min: number,
|
|
11
|
+
mean: number,
|
|
12
|
+
max: number,
|
|
13
|
+
deviation: number | undefined,
|
|
14
|
+
variance: number | undefined
|
|
15
|
+
} | undefined;
|
|
16
|
+
|
|
17
|
+
function _distribution(): Observer<number, DistributionT> {
|
|
18
|
+
const minFO = min();
|
|
19
|
+
const maxFO = max();
|
|
20
|
+
const meanFO = mean();
|
|
21
|
+
const varianceFO = variance();
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
observe: (value: number, idx: number) => {
|
|
25
|
+
minFO.observe(value, idx);
|
|
26
|
+
maxFO.observe(value, idx);
|
|
27
|
+
meanFO.observe(value, idx);
|
|
28
|
+
varianceFO.observe(value, idx);
|
|
29
|
+
},
|
|
30
|
+
peek: () => {
|
|
31
|
+
const minResult = minFO.peek();
|
|
32
|
+
if (minResult === undefined) return undefined;
|
|
33
|
+
const varianceResult = varianceFO.peek();
|
|
34
|
+
return {
|
|
35
|
+
min: minResult,
|
|
36
|
+
max: maxFO.peek(),
|
|
37
|
+
mean: meanFO.peek(),
|
|
38
|
+
variance: varianceResult,
|
|
39
|
+
deviation: varianceResult !== undefined ? Math.sqrt(varianceResult) : undefined
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export type DistributionAccessor<T> = (row: T, currentIndex: number) => number;
|
|
46
|
+
|
|
47
|
+
export function distribution(): Observer<number, DistributionT>;
|
|
48
|
+
export function distribution<T = any>(callbackFn: DistributionAccessor<T>): Observer<T, DistributionT>;
|
|
49
|
+
export function distribution<T = any>(callbackFn?: DistributionAccessor<T>): Observer<number, DistributionT> | Observer<T, DistributionT> {
|
|
50
|
+
return callbackFn ? Accessor(_distribution, callbackFn) : _distribution();
|
|
51
|
+
}
|