stream-charts 1.0.1 → 1.1.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/README.md +757 -342
- package/changes.md +11 -0
- package/dist/src/app/charts/Chart.d.ts +116 -87
- package/dist/src/app/charts/Chart.js +96 -101
- package/dist/src/app/charts/Chart.js.map +1 -1
- package/dist/src/app/charts/axes/AxesState.d.ts +64 -0
- package/dist/src/app/charts/axes/AxesState.js +97 -0
- package/dist/src/app/charts/axes/AxesState.js.map +1 -0
- package/dist/src/app/charts/axes/AxesState.test.js +30 -0
- package/dist/src/app/charts/axes/AxesState.test.js.map +1 -0
- package/dist/src/app/charts/axes/AxisInterval.d.ts +92 -0
- package/dist/src/app/charts/axes/AxisInterval.js +126 -0
- package/dist/src/app/charts/axes/AxisInterval.js.map +1 -0
- package/dist/src/app/charts/axes/AxisInterval.test.js +120 -0
- package/dist/src/app/charts/axes/AxisInterval.test.js.map +1 -0
- package/dist/src/app/charts/axes/BaseAxisRange.d.ts +83 -0
- package/dist/src/app/charts/axes/BaseAxisRange.js +58 -0
- package/dist/src/app/charts/axes/BaseAxisRange.js.map +1 -0
- package/dist/src/app/charts/axes/ContinuousAxis.d.ts +22 -0
- package/dist/src/app/charts/axes/ContinuousAxis.js +96 -0
- package/dist/src/app/charts/axes/ContinuousAxis.js.map +1 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.d.ts +59 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.js +84 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.js.map +1 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.test.js +47 -0
- package/dist/src/app/charts/axes/ContinuousAxisRange.test.js.map +1 -0
- package/dist/src/app/charts/axes/OrdinalAxis.d.ts +23 -0
- package/dist/src/app/charts/axes/OrdinalAxis.js +124 -0
- package/dist/src/app/charts/axes/OrdinalAxis.js.map +1 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.d.ts +69 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.js +100 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.js.map +1 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.test.js +48 -0
- package/dist/src/app/charts/axes/OrdinalAxisRange.test.js.map +1 -0
- package/dist/src/app/charts/axes/axes.d.ts +391 -0
- package/dist/src/app/charts/axes/axes.js +1046 -0
- package/dist/src/app/charts/axes/axes.js.map +1 -0
- package/dist/src/app/charts/d3types.d.ts +10 -10
- package/dist/src/app/charts/filters/regexFilter.d.ts +9 -0
- package/dist/src/app/charts/filters/regexFilter.js +18 -0
- package/dist/src/app/charts/filters/regexFilter.js.map +1 -0
- package/dist/src/app/charts/filters/regexFilter.test.d.ts +1 -0
- package/dist/src/app/charts/filters/regexFilter.test.js +11 -0
- package/dist/src/app/charts/filters/regexFilter.test.js.map +1 -0
- package/dist/src/app/charts/hooks/useAxes.d.ts +144 -0
- package/dist/src/app/charts/hooks/useAxes.js +187 -0
- package/dist/src/app/charts/hooks/useAxes.js.map +1 -0
- package/dist/src/app/charts/hooks/useChart.d.ts +30 -201
- package/dist/src/app/charts/hooks/useChart.js +33 -134
- package/dist/src/app/charts/hooks/useChart.js.map +1 -1
- package/dist/src/app/charts/hooks/useDataObservable.d.ts +74 -0
- package/dist/src/app/charts/hooks/useDataObservable.js +76 -0
- package/dist/src/app/charts/hooks/useDataObservable.js.map +1 -0
- package/dist/src/app/charts/hooks/useInitialData.d.ts +38 -0
- package/dist/src/app/charts/hooks/useInitialData.js +29 -0
- package/dist/src/app/charts/hooks/useInitialData.js.map +1 -0
- package/dist/src/app/charts/hooks/useMouse.d.ts +53 -0
- package/dist/src/app/charts/hooks/useMouse.js +65 -0
- package/dist/src/app/charts/hooks/useMouse.js.map +1 -0
- package/dist/src/app/charts/hooks/usePlotDimensions.d.ts +34 -0
- package/dist/src/app/charts/hooks/usePlotDimensions.js +73 -0
- package/dist/src/app/charts/hooks/usePlotDimensions.js.map +1 -0
- package/dist/src/app/charts/hooks/useTooltip.d.ts +64 -0
- package/dist/src/app/charts/hooks/useTooltip.js +52 -0
- package/dist/src/app/charts/hooks/useTooltip.js.map +1 -0
- package/dist/src/app/charts/observables/ChartData.d.ts +23 -0
- package/dist/src/app/charts/observables/ChartData.js +20 -0
- package/dist/src/app/charts/observables/ChartData.js.map +1 -0
- package/dist/src/app/charts/observables/iterates.d.ts +52 -0
- package/dist/src/app/charts/observables/iterates.js +121 -0
- package/dist/src/app/charts/observables/iterates.js.map +1 -0
- package/dist/src/app/charts/observables/iterates.test.d.ts +1 -0
- package/dist/src/app/charts/observables/iterates.test.js +180 -0
- package/dist/src/app/charts/observables/iterates.test.js.map +1 -0
- package/dist/src/app/charts/observables/ordinals.d.ts +75 -0
- package/dist/src/app/charts/observables/ordinals.js +141 -0
- package/dist/src/app/charts/observables/ordinals.js.map +1 -0
- package/dist/src/app/charts/observables/ordinals.test.d.ts +1 -0
- package/dist/src/app/charts/observables/ordinals.test.js +102 -0
- package/dist/src/app/charts/observables/ordinals.test.js.map +1 -0
- package/dist/src/app/charts/plots/BarPlot.d.ts +81 -0
- package/dist/src/app/charts/plots/BarPlot.js +557 -0
- package/dist/src/app/charts/plots/BarPlot.js.map +1 -0
- package/dist/src/app/charts/plots/PoincarePlot.d.ts +78 -0
- package/dist/src/app/charts/plots/PoincarePlot.js +504 -0
- package/dist/src/app/charts/plots/PoincarePlot.js.map +1 -0
- package/dist/src/app/charts/{RasterPlot.d.ts → plots/RasterPlot.d.ts} +1 -1
- package/dist/src/app/charts/{RasterPlot.js → plots/RasterPlot.js} +152 -133
- package/dist/src/app/charts/plots/RasterPlot.js.map +1 -0
- package/dist/src/app/charts/{ScatterPlot.d.ts → plots/ScatterPlot.d.ts} +10 -8
- package/dist/src/app/charts/plots/ScatterPlot.js +379 -0
- package/dist/src/app/charts/plots/ScatterPlot.js.map +1 -0
- package/dist/src/app/charts/{plot.d.ts → plots/plot.d.ts} +12 -14
- package/dist/src/app/charts/{plot.js → plots/plot.js} +19 -17
- package/dist/src/app/charts/plots/plot.js.map +1 -0
- package/dist/src/app/charts/series/baseSeries.d.ts +38 -0
- package/dist/src/app/charts/series/baseSeries.js +36 -0
- package/dist/src/app/charts/series/baseSeries.js.map +1 -0
- package/dist/src/app/charts/series/datumSeries.test.d.ts +1 -0
- package/dist/src/app/charts/series/datumSeries.test.js +50 -0
- package/dist/src/app/charts/series/datumSeries.test.js.map +1 -0
- package/dist/src/app/charts/series/iterateSeries.d.ts +42 -0
- package/dist/src/app/charts/series/iterateSeries.js +34 -0
- package/dist/src/app/charts/series/iterateSeries.js.map +1 -0
- package/dist/src/app/charts/series/ordinalSeries.d.ts +54 -0
- package/dist/src/app/charts/series/ordinalSeries.js +98 -0
- package/dist/src/app/charts/series/ordinalSeries.js.map +1 -0
- package/dist/src/app/charts/series/timeSeries.d.ts +30 -0
- package/dist/src/app/charts/series/timeSeries.js +19 -0
- package/dist/src/app/charts/series/timeSeries.js.map +1 -0
- package/dist/src/app/charts/{chartData.d.ts → series/timeSeriesChartData.d.ts} +11 -6
- package/dist/src/app/charts/series/timeSeriesChartData.js +32 -0
- package/dist/src/app/charts/series/timeSeriesChartData.js.map +1 -0
- package/dist/src/app/charts/styling/barPlotStyle.d.ts +41 -0
- package/dist/src/app/charts/styling/barPlotStyle.js +84 -0
- package/dist/src/app/charts/styling/barPlotStyle.js.map +1 -0
- package/dist/src/app/charts/{margins.d.ts → styling/margins.d.ts} +7 -5
- package/dist/src/app/charts/{margins.js → styling/margins.js} +19 -9
- package/dist/src/app/charts/styling/margins.js.map +1 -0
- package/dist/src/app/charts/styling/margins.test.d.ts +1 -0
- package/dist/src/app/charts/styling/margins.test.js +19 -0
- package/dist/src/app/charts/styling/margins.test.js.map +1 -0
- package/dist/src/app/charts/styling/svgStyle.d.ts +76 -0
- package/dist/src/app/charts/styling/svgStyle.js +84 -0
- package/dist/src/app/charts/styling/svgStyle.js.map +1 -0
- package/dist/src/app/charts/subscriptions/subscription.test.d.ts +1 -0
- package/dist/src/app/charts/subscriptions/subscription.test.js +395 -0
- package/dist/src/app/charts/subscriptions/subscription.test.js.map +1 -0
- package/dist/src/app/charts/subscriptions/subscriptions.d.ts +100 -0
- package/dist/src/app/charts/subscriptions/subscriptions.js +449 -0
- package/dist/src/app/charts/subscriptions/subscriptions.js.map +1 -0
- package/dist/src/app/charts/tooltips/BarPlotTooltipContent.d.ts +90 -0
- package/dist/src/app/charts/tooltips/BarPlotTooltipContent.js +302 -0
- package/dist/src/app/charts/tooltips/BarPlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.d.ts +100 -0
- package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.js +190 -0
- package/dist/src/app/charts/tooltips/PoincarePlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/{RasterPlotTooltipContent.js → tooltips/RasterPlotTooltipContent.js} +40 -44
- package/dist/src/app/charts/tooltips/RasterPlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/tooltips/ScatterPlotTooltipContent.js +154 -0
- package/dist/src/app/charts/tooltips/ScatterPlotTooltipContent.js.map +1 -0
- package/dist/src/app/charts/{Tooltip.d.ts → tooltips/Tooltip.d.ts} +4 -2
- package/dist/src/app/charts/{Tooltip.js → tooltips/Tooltip.js} +23 -28
- package/dist/src/app/charts/tooltips/Tooltip.js.map +1 -0
- package/dist/src/app/charts/{tooltipUtils.d.ts → tooltips/tooltipUtils.d.ts} +11 -6
- package/dist/src/app/charts/{tooltipUtils.js → tooltips/tooltipUtils.js} +33 -17
- package/dist/src/app/charts/tooltips/tooltipUtils.js.map +1 -0
- package/dist/src/app/charts/{Tracker.d.ts → trackers/Tracker.d.ts} +6 -5
- package/dist/src/app/charts/trackers/Tracker.js +60 -0
- package/dist/src/app/charts/trackers/Tracker.js.map +1 -0
- package/dist/src/app/charts/{trackerUtils.d.ts → trackers/trackerUtils.d.ts} +13 -8
- package/dist/src/app/charts/trackers/trackerUtils.js +359 -0
- package/dist/src/app/charts/trackers/trackerUtils.js.map +1 -0
- package/dist/src/app/charts/utils.d.ts +22 -32
- package/dist/src/app/charts/utils.js +36 -37
- package/dist/src/app/charts/utils.js.map +1 -1
- package/dist/src/index.d.ts +48 -15
- package/dist/src/index.js +71 -15
- package/dist/src/index.js.map +1 -1
- package/package.json +30 -20
- package/src/app/charts/Chart.tsx +334 -0
- package/src/app/charts/axes/AxesState.test.ts +34 -0
- package/src/app/charts/axes/AxesState.ts +112 -0
- package/src/app/charts/axes/AxisInterval.test.ts +143 -0
- package/src/app/charts/axes/AxisInterval.ts +139 -0
- package/src/app/charts/axes/BaseAxisRange.ts +113 -0
- package/src/app/charts/axes/ContinuousAxis.tsx +192 -0
- package/src/app/charts/axes/ContinuousAxisRange.test.ts +55 -0
- package/src/app/charts/axes/ContinuousAxisRange.ts +96 -0
- package/src/app/charts/axes/OrdinalAxis.tsx +223 -0
- package/src/app/charts/axes/OrdinalAxisRange.test.ts +55 -0
- package/src/app/charts/axes/OrdinalAxisRange.ts +112 -0
- package/src/app/charts/axes/axes.ts +1569 -0
- package/src/app/charts/d3types.ts +16 -0
- package/src/app/charts/filters/regexFilter.test.ts +13 -0
- package/src/app/charts/filters/regexFilter.ts +17 -0
- package/src/app/charts/hooks/useAxes.tsx +341 -0
- package/src/app/charts/hooks/useChart.tsx +159 -0
- package/src/app/charts/hooks/useDataObservable.tsx +175 -0
- package/src/app/charts/hooks/useInitialData.tsx +65 -0
- package/src/app/charts/hooks/useMouse.tsx +125 -0
- package/src/app/charts/hooks/usePlotDimensions.tsx +120 -0
- package/src/app/charts/hooks/useTooltip.tsx +112 -0
- package/src/app/charts/observables/ChartData.ts +31 -0
- package/src/app/charts/observables/iterates.test.ts +201 -0
- package/src/app/charts/observables/iterates.ts +203 -0
- package/src/app/charts/observables/ordinals.test.ts +135 -0
- package/src/app/charts/observables/ordinals.ts +248 -0
- package/src/app/charts/plots/BarPlot.tsx +1088 -0
- package/src/app/charts/plots/PoincarePlot.tsx +832 -0
- package/src/app/charts/plots/RasterPlot.tsx +676 -0
- package/src/app/charts/plots/ScatterPlot.tsx +653 -0
- package/src/app/charts/plots/plot.ts +75 -0
- package/src/app/charts/series/baseSeries.ts +52 -0
- package/src/app/charts/series/datumSeries.test.ts +60 -0
- package/src/app/charts/series/iterateSeries.ts +56 -0
- package/src/app/charts/series/ordinalSeries.ts +164 -0
- package/src/app/charts/series/timeSeries.ts +40 -0
- package/src/app/charts/series/timeSeriesChartData.ts +68 -0
- package/src/app/charts/styling/barPlotStyle.ts +126 -0
- package/src/app/charts/styling/margins.test.ts +22 -0
- package/src/app/charts/styling/margins.ts +58 -0
- package/src/app/charts/styling/svgStyle.ts +118 -0
- package/src/app/charts/subscriptions/subscription.test.ts +499 -0
- package/src/app/charts/subscriptions/subscriptions.ts +635 -0
- package/src/app/charts/tooltips/BarPlotTooltipContent.tsx +440 -0
- package/src/app/charts/tooltips/PoincarePlotTooltipContent.tsx +352 -0
- package/src/app/charts/tooltips/RasterPlotTooltipContent.tsx +274 -0
- package/src/app/charts/tooltips/ScatterPlotTooltipContent.tsx +319 -0
- package/src/app/charts/tooltips/Tooltip.tsx +148 -0
- package/src/app/charts/tooltips/tooltipUtils.ts +216 -0
- package/src/app/charts/trackers/Tracker.tsx +129 -0
- package/src/app/charts/trackers/trackerUtils.ts +494 -0
- package/src/app/charts/utils.ts +109 -0
- package/dist/src/app/charts/CategoryAxis.d.ts +0 -20
- package/dist/src/app/charts/CategoryAxis.js +0 -112
- package/dist/src/app/charts/CategoryAxis.js.map +0 -1
- package/dist/src/app/charts/ContinuousAxis.d.ts +0 -16
- package/dist/src/app/charts/ContinuousAxis.js +0 -186
- package/dist/src/app/charts/ContinuousAxis.js.map +0 -1
- package/dist/src/app/charts/RasterPlot.js.map +0 -1
- package/dist/src/app/charts/RasterPlotTooltipContent.js.map +0 -1
- package/dist/src/app/charts/ScatterPlot.js +0 -351
- package/dist/src/app/charts/ScatterPlot.js.map +0 -1
- package/dist/src/app/charts/ScatterPlotTooltipContent.js +0 -163
- package/dist/src/app/charts/ScatterPlotTooltipContent.js.map +0 -1
- package/dist/src/app/charts/Tooltip.js.map +0 -1
- package/dist/src/app/charts/Tracker.js +0 -65
- package/dist/src/app/charts/Tracker.js.map +0 -1
- package/dist/src/app/charts/axes.d.ts +0 -132
- package/dist/src/app/charts/axes.js +0 -265
- package/dist/src/app/charts/axes.js.map +0 -1
- package/dist/src/app/charts/chartData.js +0 -32
- package/dist/src/app/charts/chartData.js.map +0 -1
- package/dist/src/app/charts/continuousAxisRangeFor.d.ts +0 -20
- package/dist/src/app/charts/continuousAxisRangeFor.js +0 -68
- package/dist/src/app/charts/continuousAxisRangeFor.js.map +0 -1
- package/dist/src/app/charts/datumSeries.d.ts +0 -59
- package/dist/src/app/charts/datumSeries.js +0 -55
- package/dist/src/app/charts/datumSeries.js.map +0 -1
- package/dist/src/app/charts/datumSeries.test.js +0 -50
- package/dist/src/app/charts/datumSeries.test.js.map +0 -1
- package/dist/src/app/charts/hooks/AxesState.d.ts +0 -37
- package/dist/src/app/charts/hooks/AxesState.js +0 -44
- package/dist/src/app/charts/hooks/AxesState.js.map +0 -1
- package/dist/src/app/charts/margins.js.map +0 -1
- package/dist/src/app/charts/margins.test.js +0 -14
- package/dist/src/app/charts/margins.test.js.map +0 -1
- package/dist/src/app/charts/plot.js.map +0 -1
- package/dist/src/app/charts/regexFilter.d.ts +0 -9
- package/dist/src/app/charts/regexFilter.js +0 -17
- package/dist/src/app/charts/regexFilter.js.map +0 -1
- package/dist/src/app/charts/regexFilter.test.js +0 -11
- package/dist/src/app/charts/regexFilter.test.js.map +0 -1
- package/dist/src/app/charts/subscriptions.d.ts +0 -43
- package/dist/src/app/charts/subscriptions.js +0 -213
- package/dist/src/app/charts/subscriptions.js.map +0 -1
- package/dist/src/app/charts/svgStyle.d.ts +0 -27
- package/dist/src/app/charts/svgStyle.js +0 -32
- package/dist/src/app/charts/svgStyle.js.map +0 -1
- package/dist/src/app/charts/timeRange.test.js +0 -54
- package/dist/src/app/charts/timeRange.test.js.map +0 -1
- package/dist/src/app/charts/tooltipUtils.js.map +0 -1
- package/dist/src/app/charts/trackerUtils.js +0 -130
- package/dist/src/app/charts/trackerUtils.js.map +0 -1
- /package/dist/src/app/charts/{datumSeries.test.d.ts → axes/AxesState.test.d.ts} +0 -0
- /package/dist/src/app/charts/{margins.test.d.ts → axes/AxisInterval.test.d.ts} +0 -0
- /package/dist/src/app/charts/{regexFilter.test.d.ts → axes/ContinuousAxisRange.test.d.ts} +0 -0
- /package/dist/src/app/charts/{timeRange.test.d.ts → axes/OrdinalAxisRange.test.d.ts} +0 -0
- /package/dist/src/app/charts/{RasterPlotTooltipContent.d.ts → tooltips/RasterPlotTooltipContent.d.ts} +0 -0
- /package/dist/src/app/charts/{ScatterPlotTooltipContent.d.ts → tooltips/ScatterPlotTooltipContent.d.ts} +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { filter, map, scan } from "rxjs/operators";
|
|
2
|
+
import { emptyDatum } from "../series/timeSeries";
|
|
3
|
+
import { emptyIterateDatum, iterateDatumOf, nonEmptyIterateDatum } from "../series/iterateSeries";
|
|
4
|
+
import { copyChartData, defaultChartData } from "./ChartData";
|
|
5
|
+
const emptyIterateData = () => (Object.assign(Object.assign({}, defaultChartData()), { minIterate: emptyIterateDatum, maxIterate: emptyIterateDatum, minIterates: new Map(), maxIterates: new Map(), newPoints: new Map() }));
|
|
6
|
+
/**
|
|
7
|
+
* Makes a deep copy of the iterate chart data
|
|
8
|
+
* @param data The iterate chart data to copy
|
|
9
|
+
*/
|
|
10
|
+
export const copyIterateDataFrom = (data) => (Object.assign(Object.assign({}, copyChartData(data)), { minIterate: data.minIterate, maxIterate: data.maxIterate, minIterates: new Map(data.minIterates), maxIterates: new Map(data.maxIterates), newPoints: new Map(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])) }));
|
|
11
|
+
const initialAccumulate = (n) => ({ n, previous: new Map(), accumulated: emptyIterateData() });
|
|
12
|
+
/**
|
|
13
|
+
* Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link IterateChartData}
|
|
14
|
+
* for the specified n-iterate. suppose that `f[0](x) = x`, `f[1](x) = f(x)`, `f[2](x) = f(f(x))`,
|
|
15
|
+
* `f[3](x) = f(f(f(x)))`, and `f[m](x) = f(f(f....(x)))`, where the function is applied `m` times. Given this,
|
|
16
|
+
* then an iterate (Poincare) plot shows points `(f[m](x), f[m+1](x))`, which is a 1-iterate. Plots of
|
|
17
|
+
* points `(f[m](x), f[m+n](x))` are n-iterates.
|
|
18
|
+
* @param dataObservable The observable over {@link TimeSeriesChartData}
|
|
19
|
+
* @param [n=1] The iterate distance
|
|
20
|
+
* @return An over {@link IterateChartData} holding the n-iterate for the incoming chart data
|
|
21
|
+
*/
|
|
22
|
+
export function iteratesObservable(dataObservable, n = 1) {
|
|
23
|
+
return dataObservable
|
|
24
|
+
.pipe(
|
|
25
|
+
// calculate the iterates for each series in the chart data
|
|
26
|
+
scan(({ n, previous, accumulated }, current) => {
|
|
27
|
+
// make a deep copy of the accumulated data (because the accumulated data object
|
|
28
|
+
// holds references to maps)
|
|
29
|
+
const accum = copyIterateDataFrom(accumulated);
|
|
30
|
+
// for each series, add the new points to the accumulated data
|
|
31
|
+
Array
|
|
32
|
+
.from(current.newPoints.entries())
|
|
33
|
+
.forEach(([name, series]) => {
|
|
34
|
+
// grab the points from the previous incoming data and add the new
|
|
35
|
+
// data to its end (when the updated data didn't yet exist, add it
|
|
36
|
+
// to the map holding the previous series)
|
|
37
|
+
const updated = (previous.get(name) || []);
|
|
38
|
+
if (updated.length === 0) {
|
|
39
|
+
previous.set(name, updated);
|
|
40
|
+
}
|
|
41
|
+
updated.push(...series);
|
|
42
|
+
// we may have multiple new data points for this series, so we may need to
|
|
43
|
+
// calculate multiple iterates
|
|
44
|
+
while (updated.length > n) {
|
|
45
|
+
// grab the start and end of the n-iterate interval
|
|
46
|
+
const last = updated[n];
|
|
47
|
+
const first = updated.shift() || emptyDatum();
|
|
48
|
+
// set the updated new points for the series for the next
|
|
49
|
+
// iteration of the while-loop
|
|
50
|
+
previous.set(name, updated);
|
|
51
|
+
// create the new iterate
|
|
52
|
+
const iterate = iterateDatumOf(first.time, first.value, last.value);
|
|
53
|
+
// update the min, max values for all the series
|
|
54
|
+
accum.minIterate = minIterateFor(iterate, accum.minIterate);
|
|
55
|
+
accum.maxIterate = maxIterateFor(iterate, accum.maxIterate);
|
|
56
|
+
// update the min, max values for the current series
|
|
57
|
+
accum.minIterates.set(name, minIterateFor(iterate, accum.minIterates.get(name)));
|
|
58
|
+
accum.maxIterates.set(name, maxIterateFor(iterate, accum.maxIterates.get(name)));
|
|
59
|
+
// add the newly calculated iterate, and then trim from the
|
|
60
|
+
// head of the array to a size n. For the iterates, we only need
|
|
61
|
+
// to keep enough to create points (x(j), x(j+n))
|
|
62
|
+
const updatedPoints = accum.newPoints.get(name) || [];
|
|
63
|
+
if (updatedPoints.length === 0) {
|
|
64
|
+
accum.newPoints.set(name, updatedPoints);
|
|
65
|
+
}
|
|
66
|
+
updatedPoints.push(iterate);
|
|
67
|
+
if (updatedPoints.length > series.length) {
|
|
68
|
+
updatedPoints.shift();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return { n, previous, accumulated: accum };
|
|
73
|
+
}, initialAccumulate(n)),
|
|
74
|
+
// remove new points from the map that are empty
|
|
75
|
+
filter(accum => !isNaN(accum.accumulated.minIterate.iterateN) && !isNaN(accum.accumulated.minIterate.iterateN_1)), map(accum => removeEmptyNewPoints(accum)), map(accum => accum.accumulated === undefined ? emptyIterateData() : accum.accumulated));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Calculates and returns the minimum values for the specified iterate and the current minimum
|
|
79
|
+
* @param iterate The iterate to compare against the minimum
|
|
80
|
+
* @param minIterate The minimum values for the iterate. Generally, this will be the accumulated
|
|
81
|
+
* values
|
|
82
|
+
* @return the minimum values for the specified iterate and the current minimum
|
|
83
|
+
*/
|
|
84
|
+
function minIterateFor(iterate, minIterate = emptyIterateDatum) {
|
|
85
|
+
const minN = isNaN(minIterate.iterateN) ? iterate.iterateN : Math.min(iterate.iterateN, minIterate.iterateN);
|
|
86
|
+
const minN_1 = isNaN(minIterate.iterateN_1) ? iterate.iterateN_1 : Math.min(iterate.iterateN_1, minIterate.iterateN_1);
|
|
87
|
+
const minTime = (iterate.iterateN <= minN || iterate.iterateN_1 <= minN_1) ? iterate.time : minIterate.time;
|
|
88
|
+
return {
|
|
89
|
+
time: minTime,
|
|
90
|
+
iterateN: minN,
|
|
91
|
+
iterateN_1: minN_1
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Calculates and returns the maximum values for the specified iterate and the current maximum
|
|
96
|
+
* @param iterate The iterate to compare against the maximum
|
|
97
|
+
* @param maxIterate The maximum values for the iterate. Generally, this will be the accumulated
|
|
98
|
+
* values
|
|
99
|
+
* @return the maximum values for the specified iterate and the current maximum
|
|
100
|
+
*/
|
|
101
|
+
function maxIterateFor(iterate, maxIterate = emptyIterateDatum) {
|
|
102
|
+
const maxN = isNaN(maxIterate.iterateN) ? iterate.iterateN : Math.max(iterate.iterateN, maxIterate.iterateN);
|
|
103
|
+
const maxN_1 = isNaN(maxIterate.iterateN_1) ? iterate.iterateN_1 : Math.max(iterate.iterateN_1, maxIterate.iterateN_1);
|
|
104
|
+
const maxTime = (iterate.iterateN >= maxN || iterate.iterateN_1 >= maxN_1) ? iterate.time : maxIterate.time;
|
|
105
|
+
return {
|
|
106
|
+
time: maxTime,
|
|
107
|
+
iterateN: maxN,
|
|
108
|
+
iterateN_1: maxN_1
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function removeEmptyNewPoints(accum) {
|
|
112
|
+
const newPoints = new Map(Array
|
|
113
|
+
.from(accum.accumulated.newPoints.entries())
|
|
114
|
+
.map(([name, points]) => [name, points.filter(point => nonEmptyIterateDatum(point))]));
|
|
115
|
+
return {
|
|
116
|
+
n: accum.n,
|
|
117
|
+
previous: accum.previous,
|
|
118
|
+
accumulated: Object.assign(Object.assign({}, accum.accumulated), { newPoints })
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=iterates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterates.js","sourceRoot":"","sources":["../../../../../src/app/charts/observables/iterates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { scan } from 'rxjs/operators';
|
|
2
|
+
import { range } from 'rxjs';
|
|
3
|
+
import { initialTimeSeriesChartData } from "../series/timeSeriesChartData";
|
|
4
|
+
import { datumOf } from "../series/timeSeries";
|
|
5
|
+
import { seriesFrom } from "../series/baseSeries";
|
|
6
|
+
/**
|
|
7
|
+
* Higher-order function that forms a closure on the tent-map parameter, mu,
|
|
8
|
+
* and returns a tent-map function that accepts time and an iterate value. The
|
|
9
|
+
* time is only used for chart information, and not in the calculation of the
|
|
10
|
+
* next iterate.
|
|
11
|
+
* <pre>f[n+1](x) = mu * min(f[n](x), 1 - f[n](x))</pre>
|
|
12
|
+
* @param mu The "slope" of the tent function
|
|
13
|
+
* @return A datum, (t, f[n+1](x)) holding the informational time, and the
|
|
14
|
+
* value of the next iterate
|
|
15
|
+
*/
|
|
16
|
+
function tentMapFn(mu) {
|
|
17
|
+
const cleanMu = Math.max(0, Math.min(mu, 2));
|
|
18
|
+
// the time is just the data collection time and does not factor int
|
|
19
|
+
// the tent map calculation.
|
|
20
|
+
return (time, xn) => {
|
|
21
|
+
const xn1 = cleanMu * Math.min(xn, 1 - xn);
|
|
22
|
+
return datumOf(time, xn1);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Higher-order function that forms a closure on the update-period of the incoming data.
|
|
27
|
+
* This function returns an accumulator function that uses the previous iterate (time-series
|
|
28
|
+
* chart-data) to calculate the next iterate (time-series chart-data).
|
|
29
|
+
* @param updatePeriod The update period, in milliseconds, forming the processing
|
|
30
|
+
* windows of the graph
|
|
31
|
+
* @return A function returns an accumulator function that uses the previous iterate (time-series
|
|
32
|
+
* chart-data) to calculate the next iterate (time-series chart-data).
|
|
33
|
+
*/
|
|
34
|
+
function accumulateTentDataAt(updatePeriod) {
|
|
35
|
+
/**
|
|
36
|
+
* Calculates the next iterate, given the previous iterate, by applying the
|
|
37
|
+
* specified `tentMap` function
|
|
38
|
+
* @param previous The previous iterate
|
|
39
|
+
* @param iterateNum The iterate
|
|
40
|
+
* @param tentMap The function to calculate the tent-map
|
|
41
|
+
* @return The next iterate
|
|
42
|
+
*/
|
|
43
|
+
return (previous, iterateNum, tentMap) => {
|
|
44
|
+
// make a copy of the current max times, which we'll update with new points
|
|
45
|
+
const maxTimes = new Map(previous.maxTimes.entries());
|
|
46
|
+
previous.newPoints.forEach((datum, name) => {
|
|
47
|
+
maxTimes.set(name, (datum[datum.length - 1].time + updatePeriod));
|
|
48
|
+
});
|
|
49
|
+
// deep copy of the previous data points, and calculate the next point
|
|
50
|
+
const newPoints = new Map(Array.from(previous.newPoints.entries())
|
|
51
|
+
.map(([name, data]) => [name, data.slice()]));
|
|
52
|
+
newPoints.forEach((data, _) => {
|
|
53
|
+
const lastDatum = data[data.length - 1];
|
|
54
|
+
const newDatum = tentMap(lastDatum.time + updatePeriod, lastDatum.value);
|
|
55
|
+
data.shift();
|
|
56
|
+
data.push(newDatum);
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
seriesNames: new Set(previous.newPoints.keys()),
|
|
60
|
+
maxTime: previous.maxTime + updatePeriod,
|
|
61
|
+
maxTimes,
|
|
62
|
+
newPoints,
|
|
63
|
+
currentTime: (previous.currentTime || 0) + updatePeriod
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Calculates and returns a time-series of iterates of the tent-map function.
|
|
69
|
+
* @param numPoints The number of iterates to calculate
|
|
70
|
+
* @param mu The slope of the tent-map function
|
|
71
|
+
* @param series The initial series
|
|
72
|
+
* @param updatePeriod The update period (chart-window processing)
|
|
73
|
+
* @return An observable of time-series chart-data holding the iterates
|
|
74
|
+
*/
|
|
75
|
+
function tentMapTimeSeriesObservable(numPoints = 10, mu, series, updatePeriod = 25) {
|
|
76
|
+
const maxTime = series
|
|
77
|
+
.map(srs => srs.last().map(datum => datum.time).getOrElse(0))
|
|
78
|
+
.reduce((tMax, tCurr) => (tCurr > tMax) ? tCurr : tMax, -Infinity);
|
|
79
|
+
const initialData = initialTimeSeriesChartData(series, maxTime);
|
|
80
|
+
const tentMap = tentMapFn(mu);
|
|
81
|
+
const accumulateFn = accumulateTentDataAt(updatePeriod);
|
|
82
|
+
return range(series.length, numPoints).pipe(scan((prev, sequence) => accumulateFn(prev, sequence + 1, tentMap), initialData));
|
|
83
|
+
}
|
|
84
|
+
describe('when calculating tent-map iterates', () => {
|
|
85
|
+
const expected = [
|
|
86
|
+
{
|
|
87
|
+
seriesNames: new Set(["test1"]),
|
|
88
|
+
maxTime: 26,
|
|
89
|
+
maxTimes: new Map([["test1", 26]]),
|
|
90
|
+
newPoints: new Map([["test1", [datumOf(26, 0.578)]]]),
|
|
91
|
+
currentTime: 26
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
seriesNames: new Set(["test1"]),
|
|
95
|
+
maxTime: 51,
|
|
96
|
+
maxTimes: new Map([["test1", 51]]),
|
|
97
|
+
newPoints: new Map([["test1", [datumOf(51, 0.7174)]]]),
|
|
98
|
+
currentTime: 51
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
seriesNames: new Set(["test1"]),
|
|
102
|
+
maxTime: 76,
|
|
103
|
+
maxTimes: new Map([["test1", 76]]),
|
|
104
|
+
newPoints: new Map([["test1", [datumOf(76, 0.48042)]]]),
|
|
105
|
+
currentTime: 76
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
seriesNames: new Set(["test1"]),
|
|
109
|
+
maxTime: 101,
|
|
110
|
+
maxTimes: new Map([["test1", 101]]),
|
|
111
|
+
newPoints: new Map([["test1", [datumOf(101, 0.816714)]]]),
|
|
112
|
+
currentTime: 101
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
seriesNames: new Set(["test1"]),
|
|
116
|
+
maxTime: 126,
|
|
117
|
+
maxTimes: new Map([["test1", 126]]),
|
|
118
|
+
newPoints: new Map([["test1", [datumOf(126, 0.3115862)]]]),
|
|
119
|
+
currentTime: 126
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
seriesNames: new Set(["test1"]),
|
|
123
|
+
maxTime: 151,
|
|
124
|
+
maxTimes: new Map([["test1", 151]]),
|
|
125
|
+
newPoints: new Map([["test1", [datumOf(151, 0.52969654)]]]),
|
|
126
|
+
currentTime: 151
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
seriesNames: new Set(["test1"]),
|
|
130
|
+
maxTime: 176,
|
|
131
|
+
maxTimes: new Map([["test1", 176]]),
|
|
132
|
+
newPoints: new Map([["test1", [datumOf(176, 0.799515882)]]]),
|
|
133
|
+
currentTime: 176
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
seriesNames: new Set(["test1"]),
|
|
137
|
+
maxTime: 201,
|
|
138
|
+
maxTimes: new Map([["test1", 201]]),
|
|
139
|
+
newPoints: new Map([["test1", [datumOf(201, 0.3408230006)]]]),
|
|
140
|
+
currentTime: 201
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
seriesNames: new Set(["test1"]),
|
|
144
|
+
maxTime: 226,
|
|
145
|
+
maxTimes: new Map([["test1", 226]]),
|
|
146
|
+
newPoints: new Map([["test1", [datumOf(226, 0.5793991)]]]),
|
|
147
|
+
currentTime: 226
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
seriesNames: new Set(["test1"]),
|
|
151
|
+
maxTime: 251,
|
|
152
|
+
maxTimes: new Map([["test1", 251]]),
|
|
153
|
+
newPoints: new Map([["test1", [datumOf(251, 0.7150215282659962)]]]),
|
|
154
|
+
currentTime: 251
|
|
155
|
+
},
|
|
156
|
+
];
|
|
157
|
+
function assertChartDataEqual(expected, actual) {
|
|
158
|
+
expect(actual.maxTime).toEqual(expected.maxTime);
|
|
159
|
+
expect(actual.maxTimes).toEqual(expected.maxTimes);
|
|
160
|
+
Array.from(actual.newPoints.entries())
|
|
161
|
+
.forEach(([name, data], index) => {
|
|
162
|
+
data.forEach(actualDatum => {
|
|
163
|
+
const expectedDatum = expected.newPoints.get(name)[index];
|
|
164
|
+
expect(actualDatum.time).toEqual(expectedDatum.time);
|
|
165
|
+
expect(actualDatum.value).toBeCloseTo(expectedDatum.value, 6);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
test('should be able to calculate the tent-map iterates', done => {
|
|
170
|
+
let results = [];
|
|
171
|
+
const initialData = [seriesFrom("test1", [datumOf(1, 0.66)])];
|
|
172
|
+
tentMapTimeSeriesObservable(10, 1.7, initialData).subscribe(chartData => results.push(chartData));
|
|
173
|
+
done();
|
|
174
|
+
expect(results).toHaveLength(10);
|
|
175
|
+
results.forEach((result, index) => {
|
|
176
|
+
assertChartDataEqual(expected[index], result);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=iterates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterates.test.js","sourceRoot":"","sources":["../../../../../src/app/charts/observables/iterates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts an observable of {@link TimeSeriesChartData} into an observable of {@link OrdinalChartData} for
|
|
3
|
+
* plotting categorical data.
|
|
4
|
+
* 1. Convert series to chart data observable in the usual way
|
|
5
|
+
* 2. Accepts that chart-data observable and converts that observable to an ordinal-chart-data observable
|
|
6
|
+
*/
|
|
7
|
+
import { Observable } from "rxjs";
|
|
8
|
+
import { TimeSeriesChartData } from "../series/timeSeriesChartData";
|
|
9
|
+
import { OrdinalDatum } from "../series/ordinalSeries";
|
|
10
|
+
import { ChartData } from "./ChartData";
|
|
11
|
+
export interface OrdinalChartData extends ChartData {
|
|
12
|
+
/**
|
|
13
|
+
* Statistics for the chart. Holds the overall minimum and maximum (across all
|
|
14
|
+
* the series), and statistics for each individual series.
|
|
15
|
+
*/
|
|
16
|
+
stats: OrdinalStats;
|
|
17
|
+
/**
|
|
18
|
+
* Map holding the name of the series (the time-series identifier) and the associated
|
|
19
|
+
* data points for that time-series (`map(series_name -> array(datum))`)
|
|
20
|
+
*/
|
|
21
|
+
newPoints: Map<string, Array<OrdinalDatum>>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Statistics for the chart. Holds the overall minimum and maximum (across all
|
|
25
|
+
* the series), and statistics for each individual series.
|
|
26
|
+
*/
|
|
27
|
+
export interface OrdinalStats {
|
|
28
|
+
/**
|
|
29
|
+
* The min values for (time, value) for the data in the newPoints map
|
|
30
|
+
*/
|
|
31
|
+
minDatum: OrdinalDatumExtremum;
|
|
32
|
+
/**
|
|
33
|
+
* The max values for (time, iterate n, and iterate n+1) for the data in the newPoints map
|
|
34
|
+
*/
|
|
35
|
+
maxDatum: OrdinalDatumExtremum;
|
|
36
|
+
/**
|
|
37
|
+
* A map associating each series to stats about that series (e.g. map(series_name -> stats))
|
|
38
|
+
*/
|
|
39
|
+
valueStatsForSeries: Map<string, OrdinalValueStats>;
|
|
40
|
+
}
|
|
41
|
+
export type OrdinalValueStats = {
|
|
42
|
+
min: OrdinalDatum;
|
|
43
|
+
max: OrdinalDatum;
|
|
44
|
+
count: number;
|
|
45
|
+
sum: number;
|
|
46
|
+
sumSquared: number;
|
|
47
|
+
mean: number;
|
|
48
|
+
};
|
|
49
|
+
export type OrdinalDatumExtremum = {
|
|
50
|
+
time: OrdinalDatum;
|
|
51
|
+
value: OrdinalDatum;
|
|
52
|
+
};
|
|
53
|
+
export declare const initialMinValueDatum: () => OrdinalDatum;
|
|
54
|
+
export declare const initialMaxValueDatum: () => OrdinalDatum;
|
|
55
|
+
export declare const initialMinTimeDatum: () => OrdinalDatum;
|
|
56
|
+
export declare const initialMaxTimeDatum: () => OrdinalDatum;
|
|
57
|
+
export declare function valueStatusDatumOfDefault(datum: OrdinalDatum | undefined): OrdinalDatum;
|
|
58
|
+
export declare function isDefaultValueStatsDatum(datum: OrdinalDatum): boolean;
|
|
59
|
+
export declare function copyOrdinalDatumExtremum(datum: OrdinalDatumExtremum): OrdinalDatumExtremum;
|
|
60
|
+
export declare const defaultOrdinalStats: () => OrdinalStats;
|
|
61
|
+
export declare const defaultOrdinalValueStats: () => OrdinalValueStats;
|
|
62
|
+
export declare function copyOrdinalValueStats(data: OrdinalValueStats): OrdinalValueStats;
|
|
63
|
+
export declare function copyValueStatsForSeries(valueStats: Map<string, OrdinalValueStats>): Map<string, OrdinalValueStats>;
|
|
64
|
+
export declare const copyOrdinalStats: (data: OrdinalStats) => OrdinalStats;
|
|
65
|
+
/**
|
|
66
|
+
* Makes a deep copy of the ordinal chart data
|
|
67
|
+
* @param data The ordinal chart data to copy
|
|
68
|
+
*/
|
|
69
|
+
export declare const copyOrdinalDataFrom: (data: OrdinalChartData) => OrdinalChartData;
|
|
70
|
+
/**
|
|
71
|
+
* Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link OrdinalChartData}.
|
|
72
|
+
* @param dataObservable The observable over {@link TimeSeriesChartData}
|
|
73
|
+
* @return An observable of {@link OrdinalChartData} holding the series for the incoming chart data
|
|
74
|
+
*/
|
|
75
|
+
export declare function ordinalsObservable(dataObservable: Observable<TimeSeriesChartData>): Observable<OrdinalChartData>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { map, scan } from "rxjs/operators";
|
|
2
|
+
import { copyOrdinalDatum, nonEmptyOrdinalDatum, ordinalDatumOf } from "../series/ordinalSeries";
|
|
3
|
+
import { copyChartData, defaultChartData } from "./ChartData";
|
|
4
|
+
export const initialMinValueDatum = () => ordinalDatumOf(NaN, "", Infinity);
|
|
5
|
+
export const initialMaxValueDatum = () => ordinalDatumOf(NaN, "", -Infinity);
|
|
6
|
+
export const initialMinTimeDatum = () => ordinalDatumOf(Infinity, "", NaN);
|
|
7
|
+
export const initialMaxTimeDatum = () => ordinalDatumOf(-Infinity, "", NaN);
|
|
8
|
+
export function valueStatusDatumOfDefault(datum) {
|
|
9
|
+
return (datum === undefined) ? ordinalDatumOf(NaN, "", NaN) : datum;
|
|
10
|
+
}
|
|
11
|
+
export function isDefaultValueStatsDatum(datum) {
|
|
12
|
+
return isNaN(datum.time) && datum.ordinal === "" && isNaN(datum.value);
|
|
13
|
+
}
|
|
14
|
+
const initialMinOrdinalDatum = () => ({
|
|
15
|
+
time: ordinalDatumOf(Infinity, "", NaN),
|
|
16
|
+
value: initialMinValueDatum()
|
|
17
|
+
});
|
|
18
|
+
const initialMaxOrdinalDatum = () => ({
|
|
19
|
+
time: ordinalDatumOf(-Infinity, "", NaN),
|
|
20
|
+
value: initialMaxValueDatum()
|
|
21
|
+
});
|
|
22
|
+
export function copyOrdinalDatumExtremum(datum) {
|
|
23
|
+
return {
|
|
24
|
+
time: copyOrdinalDatum(datum.time),
|
|
25
|
+
value: copyOrdinalDatum(datum.value)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export const defaultOrdinalStats = () => ({
|
|
29
|
+
minDatum: initialMinOrdinalDatum(),
|
|
30
|
+
maxDatum: initialMaxOrdinalDatum(),
|
|
31
|
+
valueStatsForSeries: new Map()
|
|
32
|
+
});
|
|
33
|
+
export const defaultOrdinalValueStats = () => ({
|
|
34
|
+
min: initialMinValueDatum(),
|
|
35
|
+
max: initialMaxValueDatum(),
|
|
36
|
+
count: 0,
|
|
37
|
+
sum: 0,
|
|
38
|
+
mean: NaN,
|
|
39
|
+
sumSquared: 0,
|
|
40
|
+
});
|
|
41
|
+
export function copyOrdinalValueStats(data) {
|
|
42
|
+
return Object.assign(Object.assign({}, data), { min: copyOrdinalDatum(data.min), max: copyOrdinalDatum(data.max) });
|
|
43
|
+
}
|
|
44
|
+
export function copyValueStatsForSeries(valueStats) {
|
|
45
|
+
return new Map(Array.from(valueStats.entries())
|
|
46
|
+
.map(([seriesName, valueStats]) => [seriesName, copyOrdinalValueStats(valueStats)]));
|
|
47
|
+
}
|
|
48
|
+
export const copyOrdinalStats = (data) => ({
|
|
49
|
+
minDatum: copyOrdinalDatumExtremum(data.minDatum),
|
|
50
|
+
maxDatum: copyOrdinalDatumExtremum(data.maxDatum),
|
|
51
|
+
valueStatsForSeries: copyValueStatsForSeries(data.valueStatsForSeries),
|
|
52
|
+
});
|
|
53
|
+
const emptyOrdinalData = () => (Object.assign(Object.assign({}, defaultChartData()), { stats: defaultOrdinalStats(), newPoints: new Map() }));
|
|
54
|
+
/**
|
|
55
|
+
* Makes a deep copy of the ordinal chart data
|
|
56
|
+
* @param data The ordinal chart data to copy
|
|
57
|
+
*/
|
|
58
|
+
export const copyOrdinalDataFrom = (data) => (Object.assign(Object.assign({}, copyChartData(data)), { stats: copyOrdinalStats(data.stats), newPoints: new Map(Array.from(data.newPoints.entries()).map(([name, points]) => [name, points.slice()])) }));
|
|
59
|
+
const initialAccumulate = () => ({ previous: new Map(), accumulated: emptyOrdinalData() });
|
|
60
|
+
/**
|
|
61
|
+
* Accepts a {@link TimeSeriesChartData} observable and converts it to an observable of {@link OrdinalChartData}.
|
|
62
|
+
* @param dataObservable The observable over {@link TimeSeriesChartData}
|
|
63
|
+
* @return An observable of {@link OrdinalChartData} holding the series for the incoming chart data
|
|
64
|
+
*/
|
|
65
|
+
export function ordinalsObservable(dataObservable) {
|
|
66
|
+
return dataObservable
|
|
67
|
+
.pipe(
|
|
68
|
+
// calculate the iterates for each series in the chart data
|
|
69
|
+
scan(({ previous, accumulated }, current) => {
|
|
70
|
+
// make a deep copy of the accumulated data (because the accumulated data object
|
|
71
|
+
// holds references to maps)
|
|
72
|
+
const accum = copyOrdinalDataFrom(accumulated);
|
|
73
|
+
// for each series, add the new points to the accumulated data
|
|
74
|
+
Array
|
|
75
|
+
.from(current.newPoints.entries())
|
|
76
|
+
.forEach(([name, series]) => {
|
|
77
|
+
// grab the points from the previous incoming data and add the new
|
|
78
|
+
// data to the end of the previous data (when the updated data
|
|
79
|
+
// didn't yet exist, add it to the map holding the previous series)
|
|
80
|
+
const updated = (previous.get(name) || []);
|
|
81
|
+
if (updated.length === 0) {
|
|
82
|
+
previous.set(name, updated);
|
|
83
|
+
}
|
|
84
|
+
updated.push(...series);
|
|
85
|
+
// add the series name to the list of all
|
|
86
|
+
accum.seriesNames.add(name);
|
|
87
|
+
// calculate the max-time, min-time, max-value, and min-value for
|
|
88
|
+
// all the data series
|
|
89
|
+
series.forEach(({ time, value }) => {
|
|
90
|
+
// calculate the min and max times over all series
|
|
91
|
+
if (time < accum.stats.minDatum.time.time) {
|
|
92
|
+
accum.stats.minDatum.time = ordinalDatumOf(time, name, value);
|
|
93
|
+
}
|
|
94
|
+
else if (time > accum.stats.maxDatum.time.time) {
|
|
95
|
+
accum.stats.maxDatum.time = ordinalDatumOf(time, name, value);
|
|
96
|
+
}
|
|
97
|
+
// calculate the min and max values over all series
|
|
98
|
+
if (value < accum.stats.minDatum.value.value) {
|
|
99
|
+
accum.stats.minDatum.value = ordinalDatumOf(time, name, value);
|
|
100
|
+
}
|
|
101
|
+
else if (value > accum.stats.maxDatum.value.value) {
|
|
102
|
+
accum.stats.maxDatum.value = ordinalDatumOf(time, name, value);
|
|
103
|
+
}
|
|
104
|
+
// calculate the min, max of the time and value for each series
|
|
105
|
+
let valueStats = accum.stats.valueStatsForSeries.get(name) || defaultOrdinalValueStats();
|
|
106
|
+
const minValue = (value < valueStats.min.value) ?
|
|
107
|
+
ordinalDatumOf(time, name, value) :
|
|
108
|
+
copyOrdinalDatum(valueStats.min);
|
|
109
|
+
const maxValue = (value > valueStats.max.value) ?
|
|
110
|
+
ordinalDatumOf(time, name, value) :
|
|
111
|
+
copyOrdinalDatum(valueStats.max);
|
|
112
|
+
const count = valueStats.count + 1;
|
|
113
|
+
const sum = valueStats.sum + value;
|
|
114
|
+
valueStats = {
|
|
115
|
+
min: minValue,
|
|
116
|
+
max: maxValue,
|
|
117
|
+
count,
|
|
118
|
+
sum,
|
|
119
|
+
sumSquared: isNaN(valueStats.sumSquared) ? value * value : valueStats.sumSquared + value * value,
|
|
120
|
+
mean: sum / count
|
|
121
|
+
};
|
|
122
|
+
accum.stats.valueStatsForSeries.set(name, valueStats);
|
|
123
|
+
});
|
|
124
|
+
// convert the new points to ordinal datum
|
|
125
|
+
accum.newPoints.set(name, series.map(({ time, value }) => ordinalDatumOf(time, name, value)));
|
|
126
|
+
});
|
|
127
|
+
return { previous, accumulated: accum };
|
|
128
|
+
}, initialAccumulate()),
|
|
129
|
+
// remove new points from the map that are empty
|
|
130
|
+
map(accum => removeEmptyNewPoints(accum)), map(accum => accum.accumulated === undefined ? emptyOrdinalData() : accum.accumulated));
|
|
131
|
+
}
|
|
132
|
+
function removeEmptyNewPoints(accum) {
|
|
133
|
+
const newPoints = new Map(Array
|
|
134
|
+
.from(accum.accumulated.newPoints.entries())
|
|
135
|
+
.map(([name, points]) => [name, points.filter(point => nonEmptyOrdinalDatum(point))]));
|
|
136
|
+
return {
|
|
137
|
+
previous: accum.previous,
|
|
138
|
+
accumulated: Object.assign(Object.assign({}, accum.accumulated), { newPoints })
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=ordinals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordinals.js","sourceRoot":"","sources":["../../../../../src/app/charts/observables/ordinals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function sinFn(x: number, period: number): number;
|