@datagrok-libraries/statistics 1.2.12 → 1.3.0
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/.eslintrc.json +1 -0
- package/CHANGELOG.md +21 -0
- package/README.md +0 -1
- package/package.json +1 -1
- package/src/correlation-coefficient.d.ts.map +1 -1
- package/src/correlation-coefficient.js +1 -1
- package/src/fit/fit-curve.d.ts +36 -67
- package/src/fit/fit-curve.d.ts.map +1 -1
- package/src/fit/fit-curve.js +160 -184
- package/src/fit/fit-data.d.ts +0 -4
- package/src/fit/fit-data.d.ts.map +1 -1
- package/src/fit/fit-data.js +22 -22
- package/src/fit/fitting-algorithm/optimizer-misc.d.ts +19 -0
- package/src/fit/fitting-algorithm/optimizer-misc.d.ts.map +1 -0
- package/src/fit/fitting-algorithm/optimizer-misc.js +7 -0
- package/src/fit/fitting-algorithm/optimizer-nelder-mead.d.ts +25 -0
- package/src/fit/fitting-algorithm/optimizer-nelder-mead.d.ts.map +1 -0
- package/src/fit/fitting-algorithm/optimizer-nelder-mead.js +156 -0
- package/src/fit/fitting-algorithm/optimizer-sampler.d.ts +2 -0
- package/src/fit/fitting-algorithm/optimizer-sampler.d.ts.map +1 -0
- package/src/fit/fitting-algorithm/optimizer-sampler.js +28 -0
- package/src/fit/fitting-algorithm/optimizer.d.ts +4 -0
- package/src/fit/fitting-algorithm/optimizer.d.ts.map +1 -0
- package/src/fit/fitting-algorithm/optimizer.js +48 -0
- package/lbfgs/lbfgs.d.ts +0 -1
- package/lbfgs/lbfgs.js +0 -316
package/src/fit/fit-data.d.ts
CHANGED
|
@@ -6,10 +6,6 @@ export declare type LogOptions = {
|
|
|
6
6
|
};
|
|
7
7
|
/** Creates default {@link IFitChartData} object */
|
|
8
8
|
export declare function createDefaultChartData(): IFitChartData;
|
|
9
|
-
/** Returns existing, or creates new dataframe default chart options. */
|
|
10
|
-
export declare function getDataFrameChartOptions(df: DG.DataFrame): IFitChartData;
|
|
11
|
-
/** Returns existing, or creates new column default chart options. */
|
|
12
|
-
export declare function getColumnChartOptions(column: DG.Column): IFitChartData;
|
|
13
9
|
/** Returns points arrays from {@link IFitPoint} array */
|
|
14
10
|
export declare function getPointsArrays(points: IFitPoint[]): {
|
|
15
11
|
xs: number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,
|
|
1
|
+
{"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAMX,MAAM,aAAa,CAAC;AAErB,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AAwED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,CAehE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAIxF;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAOrG;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAClF,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAa1E;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,aAAa,CAUpH"}
|
package/src/fit/fit-data.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable valid-jsdoc */
|
|
2
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
|
-
import { FitErrorModel, fitData, getCurveConfidenceIntervals, getStatistics, getFittedCurve, getOrCreateFitFunction, fitSeriesProperties, fitChartDataProperties,
|
|
3
|
+
import { FitErrorModel, fitData, getCurveConfidenceIntervals, getStatistics, getFittedCurve, getOrCreateFitFunction, fitSeriesProperties, fitChartDataProperties, } from './fit-curve';
|
|
4
4
|
/** Creates new object with the default values specified in {@link properties} */
|
|
5
5
|
function createFromProperties(properties) {
|
|
6
6
|
const o = {};
|
|
@@ -18,18 +18,6 @@ export function createDefaultChartData() {
|
|
|
18
18
|
seriesOptions: createFromProperties(fitSeriesProperties),
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
/** Returns existing, or creates new dataframe default chart options. */
|
|
22
|
-
export function getDataFrameChartOptions(df) {
|
|
23
|
-
var _a;
|
|
24
|
-
var _b;
|
|
25
|
-
return JSON.parse((_a = (_b = df.tags)[TAG_FIT]) !== null && _a !== void 0 ? _a : (_b[TAG_FIT] = JSON.stringify(createDefaultChartData())));
|
|
26
|
-
}
|
|
27
|
-
/** Returns existing, or creates new column default chart options. */
|
|
28
|
-
export function getColumnChartOptions(column) {
|
|
29
|
-
var _a;
|
|
30
|
-
var _b;
|
|
31
|
-
return JSON.parse((_a = (_b = column.tags)[TAG_FIT]) !== null && _a !== void 0 ? _a : (_b[TAG_FIT] = JSON.stringify(createDefaultChartData())));
|
|
32
|
-
}
|
|
33
21
|
/** Returns points arrays from {@link IFitPoint} array */
|
|
34
22
|
export function getPointsArrays(points) {
|
|
35
23
|
const xs = [];
|
|
@@ -127,7 +115,10 @@ export function getSeriesFitFunction(series) {
|
|
|
127
115
|
}
|
|
128
116
|
/** Returns a curve function, either using the pre-computed parameters or by fitting on-the-fly */
|
|
129
117
|
export function getCurve(series, fitFunc) {
|
|
130
|
-
|
|
118
|
+
var _a;
|
|
119
|
+
const params = new Float32Array((_a = series.parameters) === null || _a === void 0 ? void 0 : _a.length);
|
|
120
|
+
params.set(series.parameters);
|
|
121
|
+
return getFittedCurve(fitFunc.y, params);
|
|
131
122
|
}
|
|
132
123
|
/** Fits the series data according to the series fitting settings */
|
|
133
124
|
export function fitSeries(series, fitFunc, logOptions) {
|
|
@@ -140,21 +131,30 @@ export function fitSeries(series, fitFunc, logOptions) {
|
|
|
140
131
|
}
|
|
141
132
|
/** Returns series confidence interval functions */
|
|
142
133
|
export function getSeriesConfidenceInterval(series, fitFunc, userParamsFlag, logOptions) {
|
|
143
|
-
var _a;
|
|
134
|
+
var _a, _b;
|
|
144
135
|
const data = userParamsFlag ? { x: series.points.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
|
|
145
136
|
y: series.points.map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) } :
|
|
146
137
|
{ x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
|
|
147
138
|
y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
|
|
148
|
-
if (!series.parameters)
|
|
149
|
-
|
|
150
|
-
|
|
139
|
+
if (!series.parameters) {
|
|
140
|
+
const params = fitSeries(series, fitFunc).parameters;
|
|
141
|
+
series.parameters = [...params];
|
|
142
|
+
}
|
|
143
|
+
const params = new Float32Array((_a = series.parameters) === null || _a === void 0 ? void 0 : _a.length);
|
|
144
|
+
params.set(series.parameters);
|
|
145
|
+
return getCurveConfidenceIntervals(data, params, fitFunc.y, 0.05, (_b = series.errorModel) !== null && _b !== void 0 ? _b : FitErrorModel.CONSTANT);
|
|
151
146
|
}
|
|
152
147
|
/** Returns series statistics */
|
|
153
148
|
export function getSeriesStatistics(series, fitFunc, logOptions) {
|
|
149
|
+
var _a;
|
|
154
150
|
const data = { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
|
|
155
151
|
y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
|
|
156
|
-
if (!series.parameters)
|
|
157
|
-
|
|
158
|
-
|
|
152
|
+
if (!series.parameters) {
|
|
153
|
+
const params = fitSeries(series, fitFunc).parameters;
|
|
154
|
+
series.parameters = [...params];
|
|
155
|
+
}
|
|
156
|
+
const params = new Float32Array((_a = series.parameters) === null || _a === void 0 ? void 0 : _a.length);
|
|
157
|
+
params.set(series.parameters);
|
|
158
|
+
return getStatistics(data, params, fitFunc.y, true);
|
|
159
159
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBSVIsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsRUFBZ0I7OztJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLGFBQUMsRUFBRSxDQUFDLElBQUksRUFBQyxPQUFPLHdDQUFQLE9BQU8sSUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLHFCQUFxQixDQUFD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QUFVLHVCQUFWLFVBQVUsQ0FBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN4RSxFQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlGLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUNyRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDcEIsTUFBTSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUM1RCxPQUFPLDJCQUEyQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUN6RSxNQUFBLE1BQU0sQ0FBQyxVQUFVLG1DQUFJLGFBQWEsQ0FBQyxRQUE2QixDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELGdDQUFnQztBQUNoQyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBa0IsRUFBRSxPQUFvQixFQUFFLFVBQXVCO0lBQ25HLE1BQU0sSUFBSSxHQUFHLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQ25HLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNwQixNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1xuICBGaXRFcnJvck1vZGVsLFxuICBmaXREYXRhLFxuICBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIGdldFN0YXRpc3RpY3MsXG4gIEZpdEZ1bmN0aW9uLFxuICBnZXRGaXR0ZWRDdXJ2ZSxcbiAgRml0U3RhdGlzdGljcyxcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyxcbiAgRml0Q3VydmUsXG4gIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24sXG4gIElGaXRQb2ludCxcbiAgSUZpdENoYXJ0RGF0YSxcbiAgSUZpdFNlcmllcyxcbiAgZml0U2VyaWVzUHJvcGVydGllcyxcbiAgZml0Q2hhcnREYXRhUHJvcGVydGllcyxcbiAgVEFHX0ZJVCxcbiAgRml0UGFyYW1Cb3VuZHMsXG4gIElGaXRDaGFydE9wdGlvbnMsXG4gIEZpdEVycm9yTW9kZWxUeXBlLFxufSBmcm9tICcuL2ZpdC1jdXJ2ZSc7XG5cbmV4cG9ydCB0eXBlIExvZ09wdGlvbnMgPSB7XG4gIGxvZ1g6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIGxvZ1k6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn07XG5cblxuLyoqIENyZWF0ZXMgbmV3IG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBzcGVjaWZpZWQgaW4ge0BsaW5rIHByb3BlcnRpZXN9ICovXG5mdW5jdGlvbiBjcmVhdGVGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdKTogYW55IHtcbiAgY29uc3QgbzogYW55ID0ge307XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZGVmYXVsdFZhbHVlICE9PSBudWxsKVxuICAgICAgb1twLm5hbWVdID0gcC5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbi8vIFRPRE86IHNldCBjb2x1bW4gd2l0aCBmaXQgcmVhZG9ubHkgdmFsdWUgKGluIGRldGVjdG9ycykgLSB0cnkgdG8gb25seSBzaG93IGNoYXJ0IC0gcmVtb3ZlIGVkaXRhYmxlIG9yIHByZXZlbnQgaXQ/P1xuLyoqIENyZWF0ZXMgZGVmYXVsdCB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBjaGFydE9wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdENoYXJ0RGF0YVByb3BlcnRpZXMpLFxuICAgIHNlcmllc09wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdFNlcmllc1Byb3BlcnRpZXMpLFxuICB9O1xufVxuXG4vKiogUmV0dXJucyBleGlzdGluZywgb3IgY3JlYXRlcyBuZXcgZGF0YWZyYW1lIGRlZmF1bHQgY2hhcnQgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhRnJhbWVDaGFydE9wdGlvbnMoZGY6IERHLkRhdGFGcmFtZSk6IElGaXRDaGFydERhdGEge1xuICByZXR1cm4gSlNPTi5wYXJzZShkZi50YWdzW1RBR19GSVRdID8/PSBKU09OLnN0cmluZ2lmeShjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCkpKTtcbn1cblxuLyoqIFJldHVybnMgZXhpc3RpbmcsIG9yIGNyZWF0ZXMgbmV3IGNvbHVtbiBkZWZhdWx0IGNoYXJ0IG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ2hhcnRPcHRpb25zKGNvbHVtbjogREcuQ29sdW1uKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGNvbHVtbi50YWdzW1RBR19GSVRdID8/PSBKU09OLnN0cmluZ2lmeShjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCkpKTtcbn1cblxuLyoqIFJldHVybnMgcG9pbnRzIGFycmF5cyBmcm9tIHtAbGluayBJRml0UG9pbnR9IGFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRzQXJyYXlzKHBvaW50czogSUZpdFBvaW50W10pOiB7eHM6IG51bWJlcltdLCB5czogbnVtYmVyW119IHtcbiAgY29uc3QgeHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHlzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHhzW2ldID0gcG9pbnRzW2ldLng7XG4gICAgeXNbaV0gPSBwb2ludHNbaV0ueTtcbiAgfVxuICByZXR1cm4ge3hzOiB4cywgeXM6IHlzfTtcbn1cblxuLyoqIFJldHVybnMgbWVkaWFuIGZyb20gd2l0aGluIG11bHRpcGxlIHBvaW50cyAqL1xuZnVuY3Rpb24gZ2V0TWVkaWFuKHBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKHBvaW50cy55Lmxlbmd0aCAvIDIpO1xuICBjb25zdCBzb3J0ZWRQb2ludHMgPSBwb2ludHMueS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIGNvbnN0IG1lZGlhbiA9IHNvcnRlZFBvaW50cy5sZW5ndGggJSAyID09PSAwID8gKHNvcnRlZFBvaW50c1ttaWQgLSAxXSArIHNvcnRlZFBvaW50c1ttaWRdKSAvIDIgOiBzb3J0ZWRQb2ludHNbbWlkXTtcbiAgcmV0dXJuIG1lZGlhbjtcbn1cblxuLyoqIFJldHVybnMgbWVkaWFuIHBvaW50cyBmcm9tIHdpdGhpbiBtdWx0aXBsZSBwb2ludHMgd2l0aCB0aGUgc2FtZSB4LiAqL1xuZnVuY3Rpb24gZ2V0TWVkaWFuUG9pbnRzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0ge1xuICBjb25zdCBtZWRpYW5Qb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119ID0ge3g6IFtdLCB5OiBbXX07XG4gIGNvbnN0IGN1cnJlbnRQb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119ID0ge3g6IFtkYXRhLnhbMF1dLCB5OiBbZGF0YS55WzBdXX07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRhdGEueFtpXSA9PT0gY3VycmVudFBvaW50cy54WzBdKSB7XG4gICAgICBjdXJyZW50UG9pbnRzLnhbY3VycmVudFBvaW50cy54Lmxlbmd0aF0gPSBkYXRhLnhbaV07XG4gICAgICBjdXJyZW50UG9pbnRzLnlbY3VycmVudFBvaW50cy55Lmxlbmd0aF0gPSBkYXRhLnlbaV07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbWVkaWFuID0gZ2V0TWVkaWFuKGN1cnJlbnRQb2ludHMpO1xuICAgIG1lZGlhblBvaW50cy54W21lZGlhblBvaW50cy54Lmxlbmd0aF0gPSBjdXJyZW50UG9pbnRzLnhbMF07XG4gICAgbWVkaWFuUG9pbnRzLnlbbWVkaWFuUG9pbnRzLnkubGVuZ3RoXSA9IG1lZGlhbjtcbiAgICBjdXJyZW50UG9pbnRzLnggPSBbZGF0YS54W2ldXTtcbiAgICBjdXJyZW50UG9pbnRzLnkgPSBbZGF0YS55W2ldXTtcbiAgfVxuICBjb25zdCBtZWRpYW4gPSBnZXRNZWRpYW4oY3VycmVudFBvaW50cyk7XG4gIG1lZGlhblBvaW50cy54W21lZGlhblBvaW50cy54Lmxlbmd0aF0gPSBjdXJyZW50UG9pbnRzLnhbMF07XG4gIG1lZGlhblBvaW50cy55W21lZGlhblBvaW50cy55Lmxlbmd0aF0gPSBtZWRpYW47XG5cbiAgcmV0dXJuIG1lZGlhblBvaW50cztcbn1cblxuLyoqIFJldHVybnMgbG9nYXJpdGhtaWMgSUM1MCBwYXJhbWV0ZXIgYm91bmRzLiAqL1xuZnVuY3Rpb24gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhpYzUwQm91bmRzOiBGaXRQYXJhbUJvdW5kcyk6IEZpdFBhcmFtQm91bmRzIHtcbiAgaWYgKGljNTBCb3VuZHMpIHtcbiAgICBpZiAoaWM1MEJvdW5kcy5tYXggIT09IHVuZGVmaW5lZClcbiAgICAgIGljNTBCb3VuZHMubWF4ID0gTWF0aC5sb2cxMChpYzUwQm91bmRzLm1heCk7XG4gICAgaWYgKGljNTBCb3VuZHMubWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGljNTBCb3VuZHMubWluID0gaWM1MEJvdW5kcy5taW4gPT09IDAgP1xuICAgICAgICAtTnVtYmVyLk1BWF9WQUxVRSA6IE1hdGgubG9nMTAoaWM1MEJvdW5kcy5taW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaWM1MEJvdW5kcztcbn1cblxuZnVuY3Rpb24gY2hhbmdlQm91bmRzKGJvdW5kczogREcuUmVjdCwgY2hhcnRPcHRpb25zOiBJRml0Q2hhcnRPcHRpb25zKTogREcuUmVjdCB7XG4gIGxldCB4ID0gYm91bmRzLng7XG4gIGxldCB5ID0gYm91bmRzLnk7XG4gIGxldCB3aWR0aCA9IGJvdW5kcy53aWR0aDtcbiAgbGV0IGhlaWdodCA9IGJvdW5kcy5oZWlnaHQ7XG5cbiAgaWYgKGNoYXJ0T3B0aW9ucy5taW5YICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1pblggIT09IG51bGwgJiZcbiAgICAoKCFjaGFydE9wdGlvbnMubG9nWCkgfHwgKGNoYXJ0T3B0aW9ucy5sb2dYICYmIGNoYXJ0T3B0aW9ucy5taW5YID4gMCkpKSB7XG4gICAgd2lkdGggKz0geCAtIGNoYXJ0T3B0aW9ucy5taW5YO1xuICAgIHggPSBjaGFydE9wdGlvbnMubWluWDtcbiAgfVxuICBpZiAoY2hhcnRPcHRpb25zLm1heFggIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWF4WCAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dYKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1ggJiYgY2hhcnRPcHRpb25zLm1heFggPiAwKSkpXG4gICAgd2lkdGggKz0gY2hhcnRPcHRpb25zLm1heFggLSAoeCArIHdpZHRoKTtcbiAgaWYgKGNoYXJ0T3B0aW9ucy5taW5ZICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1pblkgIT09IG51bGwgJiZcbiAgICAoKCFjaGFydE9wdGlvbnMubG9nWSkgfHwgKGNoYXJ0T3B0aW9ucy5sb2dZICYmIGNoYXJ0T3B0aW9ucy5taW5ZID4gMCkpKSB7XG4gICAgaGVpZ2h0ICs9IHkgLSBjaGFydE9wdGlvbnMubWluWTtcbiAgICB5ID0gY2hhcnRPcHRpb25zLm1pblk7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhZICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1heFkgIT09IG51bGwgJiZcbiAgICAoKCFjaGFydE9wdGlvbnMubG9nWSkgfHwgKGNoYXJ0T3B0aW9ucy5sb2dZICYmIGNoYXJ0T3B0aW9ucy5tYXhZID4gMCkpKVxuICAgIGhlaWdodCArPSBjaGFydE9wdGlvbnMubWF4WSAtICh5ICsgaGVpZ2h0KTtcblxuICByZXR1cm4gbmV3IERHLlJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4ge0BsaW5rIElGaXRDaGFydERhdGF9IG9iamVjdCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJ0Qm91bmRzKGNoYXJ0RGF0YTogSUZpdENoYXJ0RGF0YSk6IERHLlJlY3Qge1xuICBjb25zdCBvID0gY2hhcnREYXRhLmNoYXJ0T3B0aW9ucztcbiAgaWYgKCFjaGFydERhdGEuc2VyaWVzPy5sZW5ndGggfHwgY2hhcnREYXRhLnNlcmllcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG5ldyBERy5SZWN0KDAsIDAsIDEsIDEpO1xuICBlbHNlIHtcbiAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzWzBdLnBvaW50cyk7XG4gICAgbGV0IGJvdW5kcyA9IERHLlJlY3QuZnJvbVhZQXJyYXlzKHhzLCB5cyk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGFydERhdGEuc2VyaWVzIS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qge3hzLCB5c30gPSBnZXRQb2ludHNBcnJheXMoY2hhcnREYXRhLnNlcmllc1tpXS5wb2ludHMpO1xuICAgICAgaWYgKHhzLnNvbWUoKHgpID0+IHggPT09IHVuZGVmaW5lZCkgfHwgeXMuc29tZSgoeSkgPT4geSA9PT0gdW5kZWZpbmVkKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBib3VuZHMgPSBib3VuZHMudW5pb24oREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvID8gY2hhbmdlQm91bmRzKGJvdW5kcywgbyEpOiBib3VuZHM7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGZpdCBmdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0ZpdEZ1bmN0aW9uKHNlcmllczogSUZpdFNlcmllcyk6IEZpdEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24oc2VyaWVzLmZpdEZ1bmN0aW9uISk7XG59XG5cbi8qKiBSZXR1cm5zIGEgY3VydmUgZnVuY3Rpb24sIGVpdGhlciB1c2luZyB0aGUgcHJlLWNvbXB1dGVkIHBhcmFtZXRlcnMgb3IgYnkgZml0dGluZyBvbi10aGUtZmx5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmUoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6ICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiBnZXRGaXR0ZWRDdXJ2ZShmaXRGdW5jLnksIHNlcmllcy5wYXJhbWV0ZXJzISk7XG59XG5cbi8qKiBGaXRzIHRoZSBzZXJpZXMgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHNlcmllcyBmaXR0aW5nIHNldHRpbmdzICovXG5leHBvcnQgZnVuY3Rpb24gZml0U2VyaWVzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q3VydmUge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbiAgaWYgKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMgJiYgbG9nT3B0aW9ucz8ubG9nWClcbiAgICBzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdID0gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdKTtcbiAgcmV0dXJuIGZpdERhdGEoZ2V0TWVkaWFuUG9pbnRzKGRhdGEpLCBmaXRGdW5jLCBzZXJpZXMuZXJyb3JNb2RlbCA/PyBGaXRFcnJvck1vZGVsLkNPTlNUQU5UIGFzIEZpdEVycm9yTW9kZWxUeXBlLFxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNDb25maWRlbmNlSW50ZXJ2YWwoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbixcbiAgdXNlclBhcmFtc0ZsYWc6IGJvb2xlYW4sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IGRhdGEgPSB1c2VyUGFyYW1zRmxhZyA/IHt4OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfSA6XG4gICAge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCAwLjA1LFxuICAgIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgc3RhdGlzdGljcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc1N0YXRpc3RpY3Moc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRTdGF0aXN0aWNzIHtcbiAgY29uc3QgZGF0YSA9IHt4OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dYID8gTWF0aC5sb2cxMChwLngpIDogcC54KSxcbiAgICB5OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dZID8gTWF0aC5sb2cxMChwLnkpIDogcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpXG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICByZXR1cm4gZ2V0U3RhdGlzdGljcyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixHQUl2QixNQUFNLGFBQWEsQ0FBQztBQVFyQixpRkFBaUY7QUFDakYsU0FBUyxvQkFBb0IsQ0FBQyxVQUF5QjtJQUNyRCxNQUFNLENBQUMsR0FBUSxFQUFFLENBQUM7SUFDbEIsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDMUIsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUk7WUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0tBQzlCO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQscUhBQXFIO0FBQ3JILG1EQUFtRDtBQUNuRCxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU87UUFDTCxZQUFZLEVBQUUsb0JBQW9CLENBQUMsc0JBQXNCLENBQUM7UUFDMUQsYUFBYSxFQUFFLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDO0tBQ3pELENBQUM7QUFDSixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBbUI7SUFDakQsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFD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Q0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3hFLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUYsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQ3JHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBQSxNQUFNLENBQUMsVUFBVSwwQ0FBRSxNQUFPLENBQUMsQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQztJQUMvQixPQUFPLDJCQUEyQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQzlELE1BQUEsTUFBTSxDQUFDLFVBQVUsbUNBQUksYUFBYSxDQUFDLFFBQTZCLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsZ0NBQWdDO0FBQ2hDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFrQixFQUFFLE9BQW9CLEVBQUUsVUFBdUI7O0lBQ25HLE1BQU0sSUFBSSxHQUFHLEVBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0csQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQ25HLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBQSxNQUFNLENBQUMsVUFBVSwwQ0FBRSxNQUFPLENBQUMsQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQztJQUMvQixPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1xuICBGaXRFcnJvck1vZGVsLFxuICBmaXREYXRhLFxuICBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIGdldFN0YXRpc3RpY3MsXG4gIEZpdEZ1bmN0aW9uLFxuICBnZXRGaXR0ZWRDdXJ2ZSxcbiAgRml0U3RhdGlzdGljcyxcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyxcbiAgRml0Q3VydmUsXG4gIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24sXG4gIElGaXRQb2ludCxcbiAgSUZpdENoYXJ0RGF0YSxcbiAgSUZpdFNlcmllcyxcbiAgZml0U2VyaWVzUHJvcGVydGllcyxcbiAgZml0Q2hhcnREYXRhUHJvcGVydGllcyxcbiAgRml0UGFyYW1Cb3VuZHMsXG4gIElGaXRDaGFydE9wdGlvbnMsXG4gIEZpdEVycm9yTW9kZWxUeXBlLFxufSBmcm9tICcuL2ZpdC1jdXJ2ZSc7XG5cbmV4cG9ydCB0eXBlIExvZ09wdGlvbnMgPSB7XG4gIGxvZ1g6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIGxvZ1k6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn07XG5cblxuLyoqIENyZWF0ZXMgbmV3IG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBzcGVjaWZpZWQgaW4ge0BsaW5rIHByb3BlcnRpZXN9ICovXG5mdW5jdGlvbiBjcmVhdGVGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdKTogYW55IHtcbiAgY29uc3QgbzogYW55ID0ge307XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZGVmYXVsdFZhbHVlICE9PSBudWxsKVxuICAgICAgb1twLm5hbWVdID0gcC5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbi8vIFRPRE86IHNldCBjb2x1bW4gd2l0aCBmaXQgcmVhZG9ubHkgdmFsdWUgKGluIGRldGVjdG9ycykgLSB0cnkgdG8gb25seSBzaG93IGNoYXJ0IC0gcmVtb3ZlIGVkaXRhYmxlIG9yIHByZXZlbnQgaXQ/P1xuLyoqIENyZWF0ZXMgZGVmYXVsdCB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBjaGFydE9wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdENoYXJ0RGF0YVByb3BlcnRpZXMpLFxuICAgIHNlcmllc09wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdFNlcmllc1Byb3BlcnRpZXMpLFxuICB9O1xufVxuXG4vKiogUmV0dXJucyBwb2ludHMgYXJyYXlzIGZyb20ge0BsaW5rIElGaXRQb2ludH0gYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludHNBcnJheXMocG9pbnRzOiBJRml0UG9pbnRbXSk6IHt4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXX0ge1xuICBjb25zdCB4czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgeXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgeHNbaV0gPSBwb2ludHNbaV0ueDtcbiAgICB5c1tpXSA9IHBvaW50c1tpXS55O1xuICB9XG4gIHJldHVybiB7eHM6IHhzLCB5czogeXN9O1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gZnJvbSB3aXRoaW4gbXVsdGlwbGUgcG9pbnRzICovXG5mdW5jdGlvbiBnZXRNZWRpYW4ocG9pbnRzOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IocG9pbnRzLnkubGVuZ3RoIC8gMik7XG4gIGNvbnN0IHNvcnRlZFBvaW50cyA9IHBvaW50cy55LnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgY29uc3QgbWVkaWFuID0gc29ydGVkUG9pbnRzLmxlbmd0aCAlIDIgPT09IDAgPyAoc29ydGVkUG9pbnRzW21pZCAtIDFdICsgc29ydGVkUG9pbnRzW21pZF0pIC8gMiA6IHNvcnRlZFBvaW50c1ttaWRdO1xuICByZXR1cm4gbWVkaWFuO1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gcG9pbnRzIGZyb20gd2l0aGluIG11bHRpcGxlIHBvaW50cyB3aXRoIHRoZSBzYW1lIHguICovXG5mdW5jdGlvbiBnZXRNZWRpYW5Qb2ludHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSB7XG4gIGNvbnN0IG1lZGlhblBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW10sIHk6IFtdfTtcbiAgY29uc3QgY3VycmVudFBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW2RhdGEueFswXV0sIHk6IFtkYXRhLnlbMF1dfTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGF0YS54W2ldID09PSBjdXJyZW50UG9pbnRzLnhbMF0pIHtcbiAgICAgIGN1cnJlbnRQb2ludHMueFtjdXJyZW50UG9pbnRzLngubGVuZ3RoXSA9IGRhdGEueFtpXTtcbiAgICAgIGN1cnJlbnRQb2ludHMueVtjdXJyZW50UG9pbnRzLnkubGVuZ3RoXSA9IGRhdGEueVtpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtZWRpYW4gPSBnZXRNZWRpYW4oY3VycmVudFBvaW50cyk7XG4gICAgbWVkaWFuUG9pbnRzLnhbbWVkaWFuUG9pbnRzLngubGVuZ3RoXSA9IGN1cnJlbnRQb2ludHMueFswXTtcbiAgICBtZWRpYW5Qb2ludHMueVttZWRpYW5Qb2ludHMueS5sZW5ndGhdID0gbWVkaWFuO1xuICAgIGN1cnJlbnRQb2ludHMueCA9IFtkYXRhLnhbaV1dO1xuICAgIGN1cnJlbnRQb2ludHMueSA9IFtkYXRhLnlbaV1dO1xuICB9XG4gIGNvbnN0IG1lZGlhbiA9IGdldE1lZGlhbihjdXJyZW50UG9pbnRzKTtcbiAgbWVkaWFuUG9pbnRzLnhbbWVkaWFuUG9pbnRzLngubGVuZ3RoXSA9IGN1cnJlbnRQb2ludHMueFswXTtcbiAgbWVkaWFuUG9pbnRzLnlbbWVkaWFuUG9pbnRzLnkubGVuZ3RoXSA9IG1lZGlhbjtcblxuICByZXR1cm4gbWVkaWFuUG9pbnRzO1xufVxuXG4vKiogUmV0dXJucyBsb2dhcml0aG1pYyBJQzUwIHBhcmFtZXRlciBib3VuZHMuICovXG5mdW5jdGlvbiBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKGljNTBCb3VuZHM6IEZpdFBhcmFtQm91bmRzKTogRml0UGFyYW1Cb3VuZHMge1xuICBpZiAoaWM1MEJvdW5kcykge1xuICAgIGlmIChpYzUwQm91bmRzLm1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgaWM1MEJvdW5kcy5tYXggPSBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWF4KTtcbiAgICBpZiAoaWM1MEJvdW5kcy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWM1MEJvdW5kcy5taW4gPSBpYzUwQm91bmRzLm1pbiA9PT0gMCA/XG4gICAgICAgIC1OdW1iZXIuTUFYX1ZBTFVFIDogTWF0aC5sb2cxMChpYzUwQm91bmRzLm1pbik7XG4gICAgfVxuICB9XG4gIHJldHVybiBpYzUwQm91bmRzO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VCb3VuZHMoYm91bmRzOiBERy5SZWN0LCBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMpOiBERy5SZWN0IHtcbiAgbGV0IHggPSBib3VuZHMueDtcbiAgbGV0IHkgPSBib3VuZHMueTtcbiAgbGV0IHdpZHRoID0gYm91bmRzLndpZHRoO1xuICBsZXQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodDtcblxuICBpZiAoY2hhcnRPcHRpb25zLm1pblggIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWCAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dYKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1ggJiYgY2hhcnRPcHRpb25zLm1pblggPiAwKSkpIHtcbiAgICB3aWR0aCArPSB4IC0gY2hhcnRPcHRpb25zLm1pblg7XG4gICAgeCA9IGNoYXJ0T3B0aW9ucy5taW5YO1xuICB9XG4gIGlmIChjaGFydE9wdGlvbnMubWF4WCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5tYXhYICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1gpIHx8IChjaGFydE9wdGlvbnMubG9nWCAmJiBjaGFydE9wdGlvbnMubWF4WCA+IDApKSlcbiAgICB3aWR0aCArPSBjaGFydE9wdGlvbnMubWF4WCAtICh4ICsgd2lkdGgpO1xuICBpZiAoY2hhcnRPcHRpb25zLm1pblkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1pblkgPiAwKSkpIHtcbiAgICBoZWlnaHQgKz0geSAtIGNoYXJ0T3B0aW9ucy5taW5ZO1xuICAgIHkgPSBjaGFydE9wdGlvbnMubWluWTtcbiAgfVxuICBpZiAoY2hhcnRPcHRpb25zLm1heFkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWF4WSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1heFkgPiAwKSkpXG4gICAgaGVpZ2h0ICs9IGNoYXJ0T3B0aW9ucy5tYXhZIC0gKHkgKyBoZWlnaHQpO1xuXG4gIHJldHVybiBuZXcgREcuUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAoIWNoYXJ0RGF0YS5zZXJpZXM/Lmxlbmd0aCB8fCBjaGFydERhdGEuc2VyaWVzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbmV3IERHLlJlY3QoMCwgMCwgMSwgMSk7XG4gIGVsc2Uge1xuICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbMF0ucG9pbnRzKTtcbiAgICBsZXQgYm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYXJ0RGF0YS5zZXJpZXMhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzW2ldLnBvaW50cyk7XG4gICAgICBpZiAoeHMuc29tZSgoeCkgPT4geCA9PT0gdW5kZWZpbmVkKSB8fCB5cy5zb21lKCh5KSA9PiB5ID09PSB1bmRlZmluZWQpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGJvdW5kcyA9IGJvdW5kcy51bmlvbihERy5SZWN0LmZyb21YWUFycmF5cyh4cywgeXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG8gPyBjaGFuZ2VCb3VuZHMoYm91bmRzLCBvISk6IGJvdW5kcztcbiAgfVxufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgZml0IGZ1bmN0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWVzRml0RnVuY3Rpb24oc2VyaWVzOiBJRml0U2VyaWVzKTogRml0RnVuY3Rpb24ge1xuICByZXR1cm4gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXMuZml0RnVuY3Rpb24hKTtcbn1cblxuLyoqIFJldHVybnMgYSBjdXJ2ZSBmdW5jdGlvbiwgZWl0aGVyIHVzaW5nIHRoZSBwcmUtY29tcHV0ZWQgcGFyYW1ldGVycyBvciBieSBmaXR0aW5nIG9uLXRoZS1mbHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZShzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uKTogKHg6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheShzZXJpZXMucGFyYW1ldGVycz8ubGVuZ3RoISk7XG4gIHBhcmFtcy5zZXQoc2VyaWVzLnBhcmFtZXRlcnMhKTtcbiAgcmV0dXJuIGdldEZpdHRlZEN1cnZlKGZpdEZ1bmMueSwgcGFyYW1zKTtcbn1cblxuLyoqIEZpdHMgdGhlIHNlcmllcyBkYXRhIGFjY29yZGluZyB0byB0aGUgc2VyaWVzIGZpdHRpbmcgc2V0dGluZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXRTZXJpZXMoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGRhdGEgPSB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoc2VyaWVzLnBhcmFtZXRlckJvdW5kcyAmJiBsb2dPcHRpb25zPy5sb2dYKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHNbMl0gPSBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHNbMl0pO1xuICByZXR1cm4gZml0RGF0YShnZXRNZWRpYW5Qb2ludHMoZGF0YSksIGZpdEZ1bmMsIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUsXG4gICAgc2VyaWVzLnBhcmFtZXRlckJvdW5kcyk7XG59XG5cbi8qKiBSZXR1cm5zIHNlcmllcyBjb25maWRlbmNlIGludGVydmFsIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0NvbmZpZGVuY2VJbnRlcnZhbChzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uLFxuICB1c2VyUGFyYW1zRmxhZzogYm9vbGVhbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgY29uc3QgZGF0YSA9IHVzZXJQYXJhbXNGbGFnID8ge3g6IHNlcmllcy5wb2ludHMubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dYID8gTWF0aC5sb2cxMChwLngpIDogcC54KSxcbiAgICB5OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9IDpcbiAgICB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgICB5OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dZID8gTWF0aC5sb2cxMChwLnkpIDogcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gWy4uLnBhcmFtc107XG4gIH1cbiAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheShzZXJpZXMucGFyYW1ldGVycz8ubGVuZ3RoISk7XG4gIHBhcmFtcy5zZXQoc2VyaWVzLnBhcmFtZXRlcnMhKTtcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBwYXJhbXMsIGZpdEZ1bmMueSwgMC4wNSxcbiAgICBzZXJpZXMuZXJyb3JNb2RlbCA/PyBGaXRFcnJvck1vZGVsLkNPTlNUQU5UIGFzIEZpdEVycm9yTW9kZWxUeXBlKTtcbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIHN0YXRpc3RpY3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNTdGF0aXN0aWNzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0U3RhdGlzdGljcyB7XG4gIGNvbnN0IGRhdGEgPSB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGFyYW1zID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgICBzZXJpZXMucGFyYW1ldGVycyA9IFsuLi5wYXJhbXNdO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoc2VyaWVzLnBhcmFtZXRlcnM/Lmxlbmd0aCEpO1xuICBwYXJhbXMuc2V0KHNlcmllcy5wYXJhbWV0ZXJzISk7XG4gIHJldHVybiBnZXRTdGF0aXN0aWNzKGRhdGEsIHBhcmFtcywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
export declare type Extremum = {
|
|
3
|
+
point: Float32Array;
|
|
4
|
+
cost: number;
|
|
5
|
+
iterCosts: number[];
|
|
6
|
+
iterCount: number;
|
|
7
|
+
};
|
|
8
|
+
export declare type OptimizationResult = {
|
|
9
|
+
extremums: Extremum[];
|
|
10
|
+
fails: DG.DataFrame | null;
|
|
11
|
+
};
|
|
12
|
+
export interface IOptimizer {
|
|
13
|
+
(objectiveFunc: (x: Float32Array) => number, paramsInitial: Float32Array, settings: any, restrictionsBottom: Float32Array, restrictionsTop: Float32Array): Extremum;
|
|
14
|
+
}
|
|
15
|
+
/** Inconsistent tables error */
|
|
16
|
+
export declare class InconsistentTables extends Error {
|
|
17
|
+
constructor(msg: string);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=optimizer-misc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer-misc.d.ts","sourceRoot":"","sources":["optimizer-misc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,oBAAY,QAAQ,GAAG;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,MAAM,EAC3C,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,GAAG,EACb,kBAAkB,EAAE,YAAY,EAChC,eAAe,EAAE,YAAY,GAAG,QAAQ,CAAC;CAC1C;AAED,gCAAgC;AAChC,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,GAAG,EAAE,MAAM;CAGxB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Inconsistent tables error */
|
|
2
|
+
export class InconsistentTables extends Error {
|
|
3
|
+
constructor(msg) {
|
|
4
|
+
super(msg);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLW1pc2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZXItbWlzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QkEsZ0NBQWdDO0FBQ2hDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksR0FBVztRQUNyQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBPcHRpbWl6ZXIgcm91dGluZVxuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuXG5leHBvcnQgdHlwZSBFeHRyZW11bSA9IHtcbiAgcG9pbnQ6IEZsb2F0MzJBcnJheSxcbiAgY29zdDogbnVtYmVyLFxuICBpdGVyQ29zdHM6IG51bWJlcltdLFxuICBpdGVyQ291bnQ6IG51bWJlcixcbn1cblxuZXhwb3J0IHR5cGUgT3B0aW1pemF0aW9uUmVzdWx0ID0ge1xuICBleHRyZW11bXM6IEV4dHJlbXVtW10sXG4gIGZhaWxzOiBERy5EYXRhRnJhbWUgfCBudWxsLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJT3B0aW1pemVyIHtcbiAgKG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IG51bWJlcixcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICBzZXR0aW5nczogYW55LFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBFeHRyZW11bTtcbn1cblxuLyoqIEluY29uc2lzdGVudCB0YWJsZXMgZXJyb3IgKi9cbmV4cG9ydCBjbGFzcyBJbmNvbnNpc3RlbnRUYWJsZXMgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XG4gICAgc3VwZXIobXNnKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IOptimizer } from './optimizer-misc';
|
|
2
|
+
/** The Nelder-Mead method settings */
|
|
3
|
+
export declare type NelderMeadSettings = {
|
|
4
|
+
tolerance: number;
|
|
5
|
+
maxIter: number;
|
|
6
|
+
nonZeroParam: number;
|
|
7
|
+
initialScale: number;
|
|
8
|
+
scaleReflection: number;
|
|
9
|
+
scaleExpansion: number;
|
|
10
|
+
scaleContraction: number;
|
|
11
|
+
};
|
|
12
|
+
/** Default values for the Nelder-Mead method */
|
|
13
|
+
export declare enum NELDER_MEAD_DEFAULTS {
|
|
14
|
+
TOLERANCE = 0.01,
|
|
15
|
+
MAX_ITER = 20,
|
|
16
|
+
NON_ZERO_PARAM = 0.0001,
|
|
17
|
+
INITIAL_SCALE = 0.02,
|
|
18
|
+
SCALE_REFLECTION = 1,
|
|
19
|
+
SCALE_EXPANSION = 2,
|
|
20
|
+
SCALE_CONTRACTION = -0.5
|
|
21
|
+
}
|
|
22
|
+
/** Captions for the Nelder-Mead method settings */
|
|
23
|
+
export declare const nelderMeadCaptions: Map<string, string>;
|
|
24
|
+
export declare const optimizeNM: IOptimizer;
|
|
25
|
+
//# sourceMappingURL=optimizer-nelder-mead.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer-nelder-mead.d.ts","sourceRoot":"","sources":["optimizer-nelder-mead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAGtD,sCAAsC;AACtC,oBAAY,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,gDAAgD;AAChD,oBAAY,oBAAoB;IAC9B,SAAS,OAAO;IAChB,QAAQ,KAAK;IACb,cAAc,SAAS;IACvB,aAAa,OAAO;IACpB,gBAAgB,IAAI;IACpB,eAAe,IAAI;IACnB,iBAAiB,OAAO;CACzB;AAED,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,qBAQ7B,CAAC;AAkEH,eAAO,MAAM,UAAU,EAAE,UA2HxB,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/** Default values for the Nelder-Mead method */
|
|
2
|
+
export var NELDER_MEAD_DEFAULTS;
|
|
3
|
+
(function (NELDER_MEAD_DEFAULTS) {
|
|
4
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["TOLERANCE"] = 0.01] = "TOLERANCE";
|
|
5
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["MAX_ITER"] = 20] = "MAX_ITER";
|
|
6
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["NON_ZERO_PARAM"] = 0.0001] = "NON_ZERO_PARAM";
|
|
7
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["INITIAL_SCALE"] = 0.02] = "INITIAL_SCALE";
|
|
8
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["SCALE_REFLECTION"] = 1] = "SCALE_REFLECTION";
|
|
9
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["SCALE_EXPANSION"] = 2] = "SCALE_EXPANSION";
|
|
10
|
+
NELDER_MEAD_DEFAULTS[NELDER_MEAD_DEFAULTS["SCALE_CONTRACTION"] = -0.5] = "SCALE_CONTRACTION";
|
|
11
|
+
})(NELDER_MEAD_DEFAULTS || (NELDER_MEAD_DEFAULTS = {}));
|
|
12
|
+
/** Captions for the Nelder-Mead method settings */
|
|
13
|
+
export const nelderMeadCaptions = new Map([
|
|
14
|
+
['tolerance', 'Tolerance'],
|
|
15
|
+
['maxIter', 'Max iterations'],
|
|
16
|
+
['nonZeroParam', 'Non-zero param'],
|
|
17
|
+
['initialScale', 'Initial scale'],
|
|
18
|
+
['scaleReflection', 'Scale reflection'],
|
|
19
|
+
['scaleExpansion', 'Scale expansion'],
|
|
20
|
+
['scaleContraction', 'Scale contraction'],
|
|
21
|
+
]);
|
|
22
|
+
function getInitialParams(objectiveFunc, settings, paramsInitial, restrictionsBottom, restrictionsTop) {
|
|
23
|
+
const dim = paramsInitial.length + 1;
|
|
24
|
+
const dimParams = paramsInitial.length;
|
|
25
|
+
const nonZeroParam = settings.nonZeroParam;
|
|
26
|
+
const initScale = settings.initialScale;
|
|
27
|
+
const optParams = new Array(dim);
|
|
28
|
+
const pointObjectives = new Array(dim);
|
|
29
|
+
for (let i = 0; i < dim; i++) {
|
|
30
|
+
optParams[i] = new Float32Array(dimParams);
|
|
31
|
+
for (let j = 0; j < dimParams; j++) {
|
|
32
|
+
optParams[i][j] = paramsInitial[j];
|
|
33
|
+
if (i !== 0 && i - 1 === j) {
|
|
34
|
+
if (paramsInitial[j] === 0)
|
|
35
|
+
optParams[i][j] = nonZeroParam;
|
|
36
|
+
else
|
|
37
|
+
optParams[i][j] += initScale * paramsInitial[i - 1];
|
|
38
|
+
if (optParams[i][j] < restrictionsBottom[j])
|
|
39
|
+
optParams[i][j] = restrictionsBottom[j];
|
|
40
|
+
else if (optParams[i][j] > restrictionsTop[j])
|
|
41
|
+
optParams[i][j] = restrictionsTop[j];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
pointObjectives[i] = objectiveFunc(optParams[i]);
|
|
45
|
+
}
|
|
46
|
+
return [optParams, pointObjectives];
|
|
47
|
+
}
|
|
48
|
+
function fillCentroid(centroid, dimParams, lastIndex, optParams) {
|
|
49
|
+
for (let i = 0; i < dimParams; i++) {
|
|
50
|
+
let val = 0;
|
|
51
|
+
for (let j = 0; j < dimParams + 1; j++) {
|
|
52
|
+
if (j !== lastIndex)
|
|
53
|
+
val += optParams[j][i];
|
|
54
|
+
}
|
|
55
|
+
centroid[i] = val / dimParams;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function fillPoint(centroid, point, lastIndex, optParams, scale, dimParams, restrictionsBottom, restrictionsTop) {
|
|
59
|
+
for (let i = 0; i < dimParams; i++) {
|
|
60
|
+
point[i] = centroid[i];
|
|
61
|
+
point[i] += scale * (centroid[i] - optParams[lastIndex][i]);
|
|
62
|
+
if (point[i] < restrictionsBottom[i])
|
|
63
|
+
point[i] = restrictionsBottom[i];
|
|
64
|
+
else if (point[i] > restrictionsTop[i])
|
|
65
|
+
point[i] = restrictionsTop[i];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export const optimizeNM = function (objectiveFunc, paramsInitial, settings, restrictionsBottom, restrictionsTop) {
|
|
69
|
+
// Settings initialization
|
|
70
|
+
const tolerance = settings.tolerance;
|
|
71
|
+
const maxIter = settings.maxIter;
|
|
72
|
+
const scaleReflection = settings.scaleReflection;
|
|
73
|
+
const scaleExpansion = settings.scaleExpansion;
|
|
74
|
+
const scaleContraction = settings.scaleContraction;
|
|
75
|
+
const dim = paramsInitial.length + 1;
|
|
76
|
+
const dimParams = paramsInitial.length;
|
|
77
|
+
const [optParams, pointObjectives] = getInitialParams(objectiveFunc, settings, paramsInitial, restrictionsBottom, restrictionsTop);
|
|
78
|
+
const indexes = new Array(dim);
|
|
79
|
+
for (let i = 0; i < dim; i++)
|
|
80
|
+
indexes[i] = i;
|
|
81
|
+
const lastIndex = indexes.length - 1;
|
|
82
|
+
let iteration = 0;
|
|
83
|
+
let best = 0;
|
|
84
|
+
let previousBest = 0;
|
|
85
|
+
let noImprovement = 0;
|
|
86
|
+
const centroid = new Float32Array(dimParams);
|
|
87
|
+
const reflectionPoint = new Float32Array(dimParams);
|
|
88
|
+
const expansionPoint = new Float32Array(dimParams);
|
|
89
|
+
const contractionPoint = new Float32Array(dimParams);
|
|
90
|
+
const costs = new Array(maxIter);
|
|
91
|
+
if (dim > 1) {
|
|
92
|
+
while (true) {
|
|
93
|
+
indexes.sort((a, b) => {
|
|
94
|
+
return pointObjectives[a] - pointObjectives[b];
|
|
95
|
+
});
|
|
96
|
+
if (iteration > maxIter)
|
|
97
|
+
break;
|
|
98
|
+
if (iteration === 0) {
|
|
99
|
+
best = pointObjectives[0];
|
|
100
|
+
previousBest = 2 * pointObjectives[indexes[0]];
|
|
101
|
+
}
|
|
102
|
+
costs[iteration] = best;
|
|
103
|
+
++iteration;
|
|
104
|
+
best = pointObjectives[indexes[0]];
|
|
105
|
+
if (previousBest - best > tolerance)
|
|
106
|
+
noImprovement = 0;
|
|
107
|
+
else {
|
|
108
|
+
++noImprovement;
|
|
109
|
+
if (noImprovement > 2 * dim)
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
previousBest = best;
|
|
113
|
+
// centroid
|
|
114
|
+
fillCentroid(centroid, dimParams, indexes[lastIndex], optParams);
|
|
115
|
+
// reflection
|
|
116
|
+
fillPoint(centroid, reflectionPoint, indexes[lastIndex], optParams, scaleReflection, dimParams, restrictionsBottom, restrictionsTop);
|
|
117
|
+
const reflectionScore = objectiveFunc(reflectionPoint);
|
|
118
|
+
// expansion
|
|
119
|
+
if (reflectionScore < pointObjectives[indexes[lastIndex]]) {
|
|
120
|
+
fillPoint(centroid, expansionPoint, indexes[lastIndex], optParams, scaleExpansion, dimParams, restrictionsBottom, restrictionsTop);
|
|
121
|
+
const expansionScore = objectiveFunc(expansionPoint);
|
|
122
|
+
if (expansionScore < reflectionScore) {
|
|
123
|
+
pointObjectives[indexes[lastIndex]] = expansionScore;
|
|
124
|
+
for (let i = 0; i < dimParams; i++)
|
|
125
|
+
optParams[indexes[lastIndex]][i] = expansionPoint[i];
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
pointObjectives[indexes[lastIndex]] = reflectionScore;
|
|
130
|
+
for (let i = 0; i < dimParams; i++)
|
|
131
|
+
optParams[indexes[lastIndex]][i] = reflectionPoint[i];
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Contraction
|
|
136
|
+
fillPoint(centroid, contractionPoint, indexes[lastIndex], optParams, scaleContraction, dimParams, restrictionsBottom, restrictionsTop);
|
|
137
|
+
const contractionScore = objectiveFunc(contractionPoint);
|
|
138
|
+
if (contractionScore < pointObjectives[indexes[lastIndex]]) {
|
|
139
|
+
pointObjectives[indexes[lastIndex]] = contractionScore;
|
|
140
|
+
for (let i = 0; i < dimParams; i++)
|
|
141
|
+
optParams[indexes[lastIndex]][i] = contractionPoint[i];
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
for (let i = iteration; i < maxIter; i++)
|
|
147
|
+
costs[i] = pointObjectives[indexes[0]];
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
point: optParams[indexes[0]],
|
|
151
|
+
cost: pointObjectives[indexes[0]],
|
|
152
|
+
iterCosts: costs,
|
|
153
|
+
iterCount: iteration - 1,
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLW5lbGRlci1tZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3B0aW1pemVyLW5lbGRlci1tZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLGdEQUFnRDtBQUNoRCxNQUFNLENBQU4sSUFBWSxvQkFRWDtBQVJELFdBQVksb0JBQW9CO0lBQzlCLDRFQUFnQixDQUFBO0lBQ2hCLHdFQUFhLENBQUE7SUFDYix3RkFBdUIsQ0FBQTtJQUN2QixvRkFBb0IsQ0FBQTtJQUNwQix1RkFBb0IsQ0FBQTtJQUNwQixxRkFBbUIsQ0FBQTtJQUNuQiw0RkFBd0IsQ0FBQTtBQUMxQixDQUFDLEVBUlcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQVEvQjtBQUVELG1EQUFtRDtBQUNuRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7SUFDMUIsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7SUFDN0IsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUM7SUFDbEMsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLENBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkMsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQztJQUNyQyxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDO0NBQzFDLENBQUMsQ0FBQztBQUVILFNBQVMsZ0JBQWdCLENBQ3ZCLGFBQTBDLEVBQzFDLFFBQTRCLEVBQzVCLGFBQTJCLEVBQzNCLGtCQUFnQyxFQUNoQyxlQUE2QjtJQUM3QixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDM0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFlB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LEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsT0FBTztRQUNMLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFNBQVMsRUFBRSxTQUFTLEdBQUcsQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFeHRyZW11bSwgSU9wdGltaXplcn0gZnJvbSAnLi9vcHRpbWl6ZXItbWlzYyc7XG5cblxuLyoqIFRoZSBOZWxkZXItTWVhZCBtZXRob2Qgc2V0dGluZ3MgKi9cbmV4cG9ydCB0eXBlIE5lbGRlck1lYWRTZXR0aW5ncyA9IHtcbiAgdG9sZXJhbmNlOiBudW1iZXIsXG4gIG1heEl0ZXI6IG51bWJlcixcbiAgbm9uWmVyb1BhcmFtOiBudW1iZXIsXG4gIGluaXRpYWxTY2FsZTogbnVtYmVyLFxuICBzY2FsZVJlZmxlY3Rpb246IG51bWJlcixcbiAgc2NhbGVFeHBhbnNpb246IG51bWJlcixcbiAgc2NhbGVDb250cmFjdGlvbjogbnVtYmVyLFxufTtcblxuLyoqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgTmVsZGVyLU1lYWQgbWV0aG9kICovXG5leHBvcnQgZW51bSBORUxERVJfTUVBRF9ERUZBVUxUUyB7XG4gIFRPTEVSQU5DRSA9IDAuMDEsXG4gIE1BWF9JVEVSID0gMjAsXG4gIE5PTl9aRVJPX1BBUkFNID0gMC4wMDAxLFxuICBJTklUSUFMX1NDQUxFID0gMC4wMixcbiAgU0NBTEVfUkVGTEVDVElPTiA9IDEsXG4gIFNDQUxFX0VYUEFOU0lPTiA9IDIsXG4gIFNDQUxFX0NPTlRSQUNUSU9OID0gLTAuNSxcbn1cblxuLyoqIENhcHRpb25zIGZvciB0aGUgTmVsZGVyLU1lYWQgbWV0aG9kIHNldHRpbmdzICovXG5leHBvcnQgY29uc3QgbmVsZGVyTWVhZENhcHRpb25zID0gbmV3IE1hcChbXG4gIFsndG9sZXJhbmNlJywgJ1RvbGVyYW5jZSddLFxuICBbJ21heEl0ZXInLCAnTWF4IGl0ZXJhdGlvbnMnXSxcbiAgWydub25aZXJvUGFyYW0nLCAnTm9uLXplcm8gcGFyYW0nXSxcbiAgWydpbml0aWFsU2NhbGUnLCAnSW5pdGlhbCBzY2FsZSddLFxuICBbJ3NjYWxlUmVmbGVjdGlvbicsICdTY2FsZSByZWZsZWN0aW9uJ10sXG4gIFsnc2NhbGVFeHBhbnNpb24nLCAnU2NhbGUgZXhwYW5zaW9uJ10sXG4gIFsnc2NhbGVDb250cmFjdGlvbicsICdTY2FsZSBjb250cmFjdGlvbiddLFxuXSk7XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxQYXJhbXMoXG4gIG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IG51bWJlcixcbiAgc2V0dGluZ3M6IE5lbGRlck1lYWRTZXR0aW5ncyxcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBbRmxvYXQzMkFycmF5W10sIG51bWJlcltdXSB7XG4gIGNvbnN0IGRpbSA9IHBhcmFtc0luaXRpYWwubGVuZ3RoICsgMTtcbiAgY29uc3QgZGltUGFyYW1zID0gcGFyYW1zSW5pdGlhbC5sZW5ndGg7XG4gIGNvbnN0IG5vblplcm9QYXJhbSA9IHNldHRpbmdzLm5vblplcm9QYXJhbTtcbiAgY29uc3QgaW5pdFNjYWxlID0gc2V0dGluZ3MuaW5pdGlhbFNjYWxlO1xuXG4gIGNvbnN0IG9wdFBhcmFtcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGRpbSk7XG4gIGNvbnN0IHBvaW50T2JqZWN0aXZlcyA9IG5ldyBBcnJheTxudW1iZXI+KGRpbSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07IGkrKykge1xuICAgIG9wdFBhcmFtc1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZGltUGFyYW1zKTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbVBhcmFtczsgaisrKSB7XG4gICAgICBvcHRQYXJhbXNbaV1bal0gPSBwYXJhbXNJbml0aWFsW2pdO1xuICAgICAgaWYgKGkgIT09IDAgJiYgaSAtIDEgPT09IGopIHtcbiAgICAgICAgaWYgKHBhcmFtc0luaXRpYWxbal0gPT09IDApXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gbm9uWmVyb1BhcmFtO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdICs9IGluaXRTY2FsZSAqIHBhcmFtc0luaXRpYWxbaSAtIDFdO1xuXG4gICAgICAgIGlmIChvcHRQYXJhbXNbaV1bal0gPCByZXN0cmljdGlvbnNCb3R0b21bal0pXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gcmVzdHJpY3Rpb25zQm90dG9tW2pdO1xuICAgICAgICBlbHNlIGlmIChvcHRQYXJhbXNbaV1bal0gPiByZXN0cmljdGlvbnNUb3Bbal0pXG4gICAgICAgICAgb3B0UGFyYW1zW2ldW2pdID0gcmVzdHJpY3Rpb25zVG9wW2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBwb2ludE9iamVjdGl2ZXNbaV0gPSBvYmplY3RpdmVGdW5jKG9wdFBhcmFtc1tpXSk7XG4gIH1cblxuICByZXR1cm4gW29wdFBhcmFtcywgcG9pbnRPYmplY3RpdmVzXTtcbn1cblxuZnVuY3Rpb24gZmlsbENlbnRyb2lkKGNlbnRyb2lkOiBGbG9hdDMyQXJyYXksIGRpbVBhcmFtczogbnVtYmVyLCBsYXN0SW5kZXg6IG51bWJlciwgb3B0UGFyYW1zOiBGbG9hdDMyQXJyYXlbXSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbVBhcmFtczsgaSsrKSB7XG4gICAgbGV0IHZhbCA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1QYXJhbXMgKyAxOyBqKyspIHtcbiAgICAgIGlmIChqICE9PSBsYXN0SW5kZXgpXG4gICAgICAgIHZhbCArPSBvcHRQYXJhbXNbal1baV07XG4gICAgfVxuICAgIGNlbnRyb2lkW2ldID0gdmFsIC8gZGltUGFyYW1zO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbGxQb2ludChcbiAgY2VudHJvaWQ6IEZsb2F0MzJBcnJheSwgcG9pbnQ6IEZsb2F0MzJBcnJheSxcbiAgbGFzdEluZGV4OiBudW1iZXIsIG9wdFBhcmFtczogRmxvYXQzMkFycmF5W10sXG4gIHNjYWxlOiBudW1iZXIsIGRpbVBhcmFtczogbnVtYmVyLFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1QYXJhbXM7IGkrKykge1xuICAgIHBvaW50W2ldID0gY2VudHJvaWRbaV07XG4gICAgcG9pbnRbaV0gKz0gc2NhbGUgKiAoY2VudHJvaWRbaV0gLSBvcHRQYXJhbXNbbGFzdEluZGV4XVtpXSk7XG5cbiAgICBpZiAocG9pbnRbaV0gPCByZXN0cmljdGlvbnNCb3R0b21baV0pXG4gICAgICBwb2ludFtpXSA9IHJlc3RyaWN0aW9uc0JvdHRvbVtpXTtcbiAgICBlbHNlIGlmIChwb2ludFtpXSA+IHJlc3RyaWN0aW9uc1RvcFtpXSlcbiAgICAgIHBvaW50W2ldID0gcmVzdHJpY3Rpb25zVG9wW2ldO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBvcHRpbWl6ZU5NOiBJT3B0aW1pemVyID0gZnVuY3Rpb24oXG4gIG9iamVjdGl2ZUZ1bmM6ICh4OiBGbG9hdDMyQXJyYXkpID0+IG51bWJlcixcbiAgcGFyYW1zSW5pdGlhbDogRmxvYXQzMkFycmF5LFxuICBzZXR0aW5nczogTmVsZGVyTWVhZFNldHRpbmdzLFxuICByZXN0cmljdGlvbnNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcmVzdHJpY3Rpb25zVG9wOiBGbG9hdDMyQXJyYXkpOiBFeHRyZW11bSB7XG4gIC8vIFNldHRpbmdzIGluaXRpYWxpemF0aW9uXG4gIGNvbnN0IHRvbGVyYW5jZSA9IHNldHRpbmdzLnRvbGVyYW5jZTtcbiAgY29uc3QgbWF4SXRlciA9IHNldHRpbmdzLm1heEl0ZXI7XG5cbiAgY29uc3Qgc2NhbGVSZWZsZWN0aW9uID0gc2V0dGluZ3Muc2NhbGVSZWZsZWN0aW9uO1xuICBjb25zdCBzY2FsZUV4cGFuc2lvbiA9IHNldHRpbmdzLnNjYWxlRXhwYW5zaW9uO1xuICBjb25zdCBzY2FsZUNvbnRyYWN0aW9uID0gc2V0dGluZ3Muc2NhbGVDb250cmFjdGlvbjtcbiAgY29uc3QgZGltID0gcGFyYW1zSW5pdGlhbC5sZW5ndGggKyAxO1xuICBjb25zdCBkaW1QYXJhbXMgPSBwYXJhbXNJbml0aWFsLmxlbmd0aDtcblxuICBjb25zdCBbb3B0UGFyYW1zLCBwb2ludE9iamVjdGl2ZXNdID1cbiAgICBnZXRJbml0aWFsUGFyYW1zKG9iamVjdGl2ZUZ1bmMsIHNldHRpbmdzLCBwYXJhbXNJbml0aWFsLCByZXN0cmljdGlvbnNCb3R0b20sIHJlc3RyaWN0aW9uc1RvcCk7XG5cbiAgY29uc3QgaW5kZXhlcyA9IG5ldyBBcnJheTxudW1iZXI+KGRpbSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGltOyBpKyspXG4gICAgaW5kZXhlc1tpXSA9IGk7XG5cbiAgY29uc3QgbGFzdEluZGV4ID0gaW5kZXhlcy5sZW5ndGggLSAxO1xuICBsZXQgaXRlcmF0aW9uID0gMDtcbiAgbGV0IGJlc3QgPSAwO1xuICBsZXQgcHJldmlvdXNCZXN0ID0gMDtcbiAgbGV0IG5vSW1wcm92ZW1lbnQgPSAwO1xuXG4gIGNvbnN0IGNlbnRyb2lkID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCByZWZsZWN0aW9uUG9pbnQgPSBuZXcgRmxvYXQzMkFycmF5KGRpbVBhcmFtcyk7XG4gIGNvbnN0IGV4cGFuc2lvblBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCBjb250cmFjdGlvblBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShkaW1QYXJhbXMpO1xuICBjb25zdCBjb3N0cyA9IG5ldyBBcnJheTxudW1iZXI+KG1heEl0ZXIpO1xuXG4gIGlmIChkaW0gPiAxKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGluZGV4ZXMuc29ydCgoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHBvaW50T2JqZWN0aXZlc1thXSAtIHBvaW50T2JqZWN0aXZlc1tiXTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGl0ZXJhdGlvbiA+IG1heEl0ZXIpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBpZiAoaXRlcmF0aW9uID09PSAwKSB7XG4gICAgICAgIGJlc3QgPSBwb2ludE9iamVjdGl2ZXNbMF07XG4gICAgICAgIHByZXZpb3VzQmVzdCA9IDIgKiBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV07XG4gICAgICB9XG4gICAgICBjb3N0c1tpdGVyYXRpb25dID0gYmVzdDtcblxuICAgICAgKytpdGVyYXRpb247XG5cbiAgICAgIGJlc3QgPSBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV07XG4gICAgICBpZiAocHJldmlvdXNCZXN0IC0gYmVzdCA+IHRvbGVyYW5jZSlcbiAgICAgICAgbm9JbXByb3ZlbWVudCA9IDA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgKytub0ltcHJvdmVtZW50O1xuICAgICAgICBpZiAobm9JbXByb3ZlbWVudCA+IDIgKiBkaW0pXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzQmVzdCA9IGJlc3Q7XG5cbiAgICAgIC8vIGNlbnRyb2lkXG4gICAgICBmaWxsQ2VudHJvaWQoY2VudHJvaWQsIGRpbVBhcmFtcywgaW5kZXhlc1tsYXN0SW5kZXhdLCBvcHRQYXJhbXMpO1xuXG4gICAgICAvLyByZWZsZWN0aW9uXG4gICAgICBmaWxsUG9pbnQoY2VudHJvaWQsIHJlZmxlY3Rpb25Qb2ludCwgaW5kZXhlc1tsYXN0SW5kZXhdLFxuICAgICAgICBvcHRQYXJhbXMsIHNjYWxlUmVmbGVjdGlvbiwgZGltUGFyYW1zLCByZXN0cmljdGlvbnNCb3R0b20sIHJlc3RyaWN0aW9uc1RvcCk7XG4gICAgICBjb25zdCByZWZsZWN0aW9uU2NvcmUgPSBvYmplY3RpdmVGdW5jKHJlZmxlY3Rpb25Qb2ludCk7XG5cbiAgICAgIC8vIGV4cGFuc2lvblxuICAgICAgaWYgKHJlZmxlY3Rpb25TY29yZSA8IHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dKSB7XG4gICAgICAgIGZpbGxQb2ludChjZW50cm9pZCwgZXhwYW5zaW9uUG9pbnQsIGluZGV4ZXNbbGFzdEluZGV4XSxcbiAgICAgICAgICBvcHRQYXJhbXMsIHNjYWxlRXhwYW5zaW9uLCBkaW1QYXJhbXMsIHJlc3RyaWN0aW9uc0JvdHRvbSwgcmVzdHJpY3Rpb25zVG9wKTtcblxuICAgICAgICBjb25zdCBleHBhbnNpb25TY29yZSA9IG9iamVjdGl2ZUZ1bmMoZXhwYW5zaW9uUG9pbnQpO1xuXG4gICAgICAgIGlmIChleHBhbnNpb25TY29yZSA8IHJlZmxlY3Rpb25TY29yZSkge1xuICAgICAgICAgIHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dID0gZXhwYW5zaW9uU2NvcmU7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbVBhcmFtczsgaSsrKVxuICAgICAgICAgICAgb3B0UGFyYW1zW2luZGV4ZXNbbGFzdEluZGV4XV1baV0gPSBleHBhbnNpb25Qb2ludFtpXTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHBvaW50T2JqZWN0aXZlc1tpbmRleGVzW2xhc3RJbmRleF1dID0gcmVmbGVjdGlvblNjb3JlO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1QYXJhbXM7IGkrKylcbiAgICAgICAgICAgIG9wdFBhcmFtc1tpbmRleGVzW2xhc3RJbmRleF1dW2ldID0gcmVmbGVjdGlvblBvaW50W2ldO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ29udHJhY3Rpb25cbiAgICAgIGZpbGxQb2ludChjZW50cm9pZCwgY29udHJhY3Rpb25Qb2ludCwgaW5kZXhlc1tsYXN0SW5kZXhdLFxuICAgICAgICBvcHRQYXJhbXMsIHNjYWxlQ29udHJhY3Rpb24sIGRpbVBhcmFtcywgcmVzdHJpY3Rpb25zQm90dG9tLCByZXN0cmljdGlvbnNUb3ApO1xuXG4gICAgICBjb25zdCBjb250cmFjdGlvblNjb3JlID0gb2JqZWN0aXZlRnVuYyhjb250cmFjdGlvblBvaW50KTtcblxuICAgICAgaWYgKGNvbnRyYWN0aW9uU2NvcmUgPCBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1tsYXN0SW5kZXhdXSkge1xuICAgICAgICBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1tsYXN0SW5kZXhdXSA9IGNvbnRyYWN0aW9uU2NvcmU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1QYXJhbXM7IGkrKylcbiAgICAgICAgICBvcHRQYXJhbXNbaW5kZXhlc1tsYXN0SW5kZXhdXVtpXSA9IGNvbnRyYWN0aW9uUG9pbnRbaV07XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBpdGVyYXRpb247IGkgPCBtYXhJdGVyOyBpKyspXG4gICAgICBjb3N0c1tpXSA9IHBvaW50T2JqZWN0aXZlc1tpbmRleGVzWzBdXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcG9pbnQ6IG9wdFBhcmFtc1tpbmRleGVzWzBdXSxcbiAgICBjb3N0OiBwb2ludE9iamVjdGl2ZXNbaW5kZXhlc1swXV0sXG4gICAgaXRlckNvc3RzOiBjb3N0cyxcbiAgICBpdGVyQ291bnQ6IGl0ZXJhdGlvbiAtIDEsXG4gIH07XG59O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer-sampler.d.ts","sourceRoot":"","sources":["optimizer-sampler.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE,CAmB1G"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function sampleUniform(samplesCount, top, bottom) {
|
|
2
|
+
const scale = top - bottom;
|
|
3
|
+
const sample = new Array(samplesCount);
|
|
4
|
+
for (let i = 0; i < samplesCount; i++) {
|
|
5
|
+
const r = Math.random();
|
|
6
|
+
sample[i] = bottom + r * scale;
|
|
7
|
+
}
|
|
8
|
+
return sample;
|
|
9
|
+
}
|
|
10
|
+
export function sampleParams(samplesCount, top, bottom) {
|
|
11
|
+
const dim = top.length;
|
|
12
|
+
const params = new Array(samplesCount);
|
|
13
|
+
for (let i = 0; i < samplesCount; i++)
|
|
14
|
+
params[i] = new Float32Array(dim);
|
|
15
|
+
for (let i = 0; i < dim; i++) {
|
|
16
|
+
if (top[i] === bottom[i]) {
|
|
17
|
+
for (let j = 0; j < samplesCount; j++)
|
|
18
|
+
params[j][i] = top[i];
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const paramVariations = sampleUniform(samplesCount, top[i], bottom[i]);
|
|
22
|
+
for (let j = 0; j < samplesCount; j++)
|
|
23
|
+
params[j][i] = paramVariations[j];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return params;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLXNhbXBsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcHRpbWl6ZXItc2FtcGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLGFBQWEsQ0FBQyxZQUFvQixFQUFFLEdBQVcsRUFBRSxNQUFjO0lBQ3RFLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQVMsWUFBWSxDQUFDLENBQUM7SUFFL0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUcsRUFBRTtRQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQ2hDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsWUFBb0IsRUFBRSxHQUFpQixFQUFFLE1BQW9CO0lBQ3hGLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQWUsWUFBWSxDQUFDLENBQUM7SUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUc7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXBDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFHLEVBQUU7UUFDN0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFHO2dCQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pCO2FBQ0k7WUFDSCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRztnQkFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQztLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHNhbXBsZVVuaWZvcm0oc2FtcGxlc0NvdW50OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcik6IG51bWJlcltdIHtcbiAgY29uc3Qgc2NhbGUgPSB0b3AgLSBib3R0b207XG4gIGNvbnN0IHNhbXBsZSA9IG5ldyBBcnJheTxudW1iZXI+KHNhbXBsZXNDb3VudCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVzQ291bnQ7IGkgKyspIHtcbiAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKTtcbiAgICBzYW1wbGVbaV0gPSBib3R0b20gKyByICogc2NhbGU7XG4gIH1cblxuICByZXR1cm4gc2FtcGxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FtcGxlUGFyYW1zKHNhbXBsZXNDb3VudDogbnVtYmVyLCB0b3A6IEZsb2F0MzJBcnJheSwgYm90dG9tOiBGbG9hdDMyQXJyYXkpOiBGbG9hdDMyQXJyYXlbXSB7XG4gIGNvbnN0IGRpbSA9IHRvcC5sZW5ndGg7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KHNhbXBsZXNDb3VudCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyBpICsrKVxuICAgIHBhcmFtc1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZGltKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbTsgaSArKykge1xuICAgIGlmICh0b3BbaV0gPT09IGJvdHRvbVtpXSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzYW1wbGVzQ291bnQ7IGogKyspXG4gICAgICAgIHBhcmFtc1tqXVtpXSA9IHRvcFtpXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBwYXJhbVZhcmlhdGlvbnMgPSBzYW1wbGVVbmlmb3JtKHNhbXBsZXNDb3VudCwgdG9wW2ldLCBib3R0b21baV0pO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzYW1wbGVzQ291bnQ7IGogKyspXG4gICAgICAgIHBhcmFtc1tqXVtpXSA9IHBhcmFtVmFyaWF0aW9uc1tqXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { OptimizationResult } from './optimizer-misc';
|
|
2
|
+
import { NelderMeadSettings } from './optimizer-nelder-mead';
|
|
3
|
+
export declare function performNelderMeadOptimization(objectiveFunc: (x: Float32Array) => number, paramsBottom: Float32Array, paramsTop: Float32Array, settings: NelderMeadSettings, samplesCount?: number, initialValues?: Float32Array | null, infiniteFirst?: boolean): OptimizationResult;
|
|
4
|
+
//# sourceMappingURL=optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["optimizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAa,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAIvE,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,MAAM,EAC1C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,GAAE,MAAU,EACxB,aAAa,GAAE,YAAY,GAAG,IAAW,EACzC,aAAa,GAAE,OAAc,GAC5B,kBAAkB,CA8CpB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** the Nelder-Mead optimizer */
|
|
2
|
+
import * as DG from 'datagrok-api/dg';
|
|
3
|
+
import { InconsistentTables } from './optimizer-misc';
|
|
4
|
+
import { optimizeNM } from './optimizer-nelder-mead';
|
|
5
|
+
import { sampleParams } from './optimizer-sampler';
|
|
6
|
+
export function performNelderMeadOptimization(objectiveFunc, paramsBottom, paramsTop, settings, samplesCount = 1, initialValues = null, infiniteFirst = true) {
|
|
7
|
+
const params = sampleParams(samplesCount, paramsTop, paramsBottom);
|
|
8
|
+
if (initialValues !== null)
|
|
9
|
+
params[0] = initialValues;
|
|
10
|
+
const extremums = [];
|
|
11
|
+
const warnings = [];
|
|
12
|
+
const failedInitPoint = [];
|
|
13
|
+
let failsCount = 0;
|
|
14
|
+
let failsDF = null;
|
|
15
|
+
let i;
|
|
16
|
+
for (i = 0; i < samplesCount; ++i) {
|
|
17
|
+
try {
|
|
18
|
+
if (i === 0 && infiniteFirst) {
|
|
19
|
+
const paramsB = new Float32Array(initialValues.length).map((_) => -Infinity);
|
|
20
|
+
const paramsT = new Float32Array(initialValues.length).map((_) => +Infinity);
|
|
21
|
+
extremums.push(optimizeNM(objectiveFunc, params[i], settings, paramsB, paramsT));
|
|
22
|
+
}
|
|
23
|
+
else
|
|
24
|
+
extremums.push(optimizeNM(objectiveFunc, params[i], settings, paramsBottom, paramsTop));
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
if (e instanceof InconsistentTables)
|
|
28
|
+
throw new Error(`Inconsistent dataframes: ${e.message}`);
|
|
29
|
+
++failsCount;
|
|
30
|
+
warnings.push((e instanceof Error) ? e.message : 'Platform issue');
|
|
31
|
+
failedInitPoint.push(params[i]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (failsCount > 0) {
|
|
35
|
+
const dim = paramsTop.length;
|
|
36
|
+
const raw = new Array(dim);
|
|
37
|
+
for (let i = 0; i < dim; ++i)
|
|
38
|
+
raw[i] = new Float32Array(failsCount);
|
|
39
|
+
failedInitPoint.forEach((point, idx) => point.forEach((val, jdx) => raw[jdx][idx] = val));
|
|
40
|
+
failsDF = DG.DataFrame.fromColumns(raw.map((arr, idx) => DG.Column.fromFloat32Array(`arg${idx}`, arr)));
|
|
41
|
+
failsDF.columns.add(DG.Column.fromStrings('Issue', warnings));
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
extremums: extremums,
|
|
45
|
+
fails: failsDF,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW1pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsib3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBK0Isa0JBQWtCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRixPQUFPLEVBQUMsVUFBVSxFQUFxQixNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLGFBQTBDLEVBQzFDLFlBQTBCLEVBQzFCLFNBQXVCLEVBQ3ZCLFFBQTRCLEVBQzVCLGVBQXVCLENBQUMsRUFDeEIsZ0JBQXFDLElBQUksRUFDekMsZ0JBQXlCLElBQUk7SUFFN0IsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkUsSUFBSSxhQUFhLEtBQUssSUFBSTtRQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBRTVCLE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsTUFBTSxlQUFlLEdBQW1CLEVBQUUsQ0FBQztJQUMzQyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxPQUFPLEdBQXdCLElBQUksQ0FBQztJQUN4QyxJQUFJLENBQVMsQ0FBQztJQUVkLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2pDLElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxFQUFFO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNsRjs7Z0JBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDM0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxZQUFZLGtCQUFrQjtnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFM0QsRUFBRSxVQUFVLENBQUM7WUFDYixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25FLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakM7S0FDRjtJQUVELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFlLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUVELE9BQU87UUFDTCxTQUFTLEVBQUUsU0FBUztRQUNwQixLQUFLLEVBQUUsT0FBTztLQUNmLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIHRoZSBOZWxkZXItTWVhZCBvcHRpbWl6ZXIgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0V4dHJlbXVtLCBPcHRpbWl6YXRpb25SZXN1bHQsIEluY29uc2lzdGVudFRhYmxlc30gZnJvbSAnLi9vcHRpbWl6ZXItbWlzYyc7XG5pbXBvcnQge29wdGltaXplTk0sIE5lbGRlck1lYWRTZXR0aW5nc30gZnJvbSAnLi9vcHRpbWl6ZXItbmVsZGVyLW1lYWQnO1xuaW1wb3J0IHtzYW1wbGVQYXJhbXN9IGZyb20gJy4vb3B0aW1pemVyLXNhbXBsZXInO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwZXJmb3JtTmVsZGVyTWVhZE9wdGltaXphdGlvbihcbiAgb2JqZWN0aXZlRnVuYzogKHg6IEZsb2F0MzJBcnJheSkgPT4gbnVtYmVyLFxuICBwYXJhbXNCb3R0b206IEZsb2F0MzJBcnJheSxcbiAgcGFyYW1zVG9wOiBGbG9hdDMyQXJyYXksXG4gIHNldHRpbmdzOiBOZWxkZXJNZWFkU2V0dGluZ3MsXG4gIHNhbXBsZXNDb3VudDogbnVtYmVyID0gMSxcbiAgaW5pdGlhbFZhbHVlczogRmxvYXQzMkFycmF5IHwgbnVsbCA9IG51bGwsXG4gIGluZmluaXRlRmlyc3Q6IGJvb2xlYW4gPSB0cnVlLFxuKTogT3B0aW1pemF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcGFyYW1zID0gc2FtcGxlUGFyYW1zKHNhbXBsZXNDb3VudCwgcGFyYW1zVG9wLCBwYXJhbXNCb3R0b20pO1xuICBpZiAoaW5pdGlhbFZhbHVlcyAhPT0gbnVsbClcbiAgICBwYXJhbXNbMF0gPSBpbml0aWFsVmFsdWVzO1xuXG4gIGNvbnN0IGV4dHJlbXVtczogRXh0cmVtdW1bXSA9IFtdO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkSW5pdFBvaW50OiBGbG9hdDMyQXJyYXlbXSA9IFtdO1xuICBsZXQgZmFpbHNDb3VudCA9IDA7XG4gIGxldCBmYWlsc0RGOiBERy5EYXRhRnJhbWUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGk6IG51bWJlcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc2FtcGxlc0NvdW50OyArK2kpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPT09IDAgJiYgaW5maW5pdGVGaXJzdCkge1xuICAgICAgICBjb25zdCBwYXJhbXNCID0gbmV3IEZsb2F0MzJBcnJheShpbml0aWFsVmFsdWVzIS5sZW5ndGgpLm1hcCgoXykgPT4gLUluZmluaXR5KTtcbiAgICAgICAgY29uc3QgcGFyYW1zVCA9IG5ldyBGbG9hdDMyQXJyYXkoaW5pdGlhbFZhbHVlcyEubGVuZ3RoKS5tYXAoKF8pID0+ICtJbmZpbml0eSk7XG4gICAgICAgIGV4dHJlbXVtcy5wdXNoKG9wdGltaXplTk0ob2JqZWN0aXZlRnVuYywgcGFyYW1zW2ldLCBzZXR0aW5ncywgcGFyYW1zQiwgcGFyYW1zVCkpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGV4dHJlbXVtcy5wdXNoKG9wdGltaXplTk0ob2JqZWN0aXZlRnVuYywgcGFyYW1zW2ldLCBzZXR0aW5ncywgcGFyYW1zQm90dG9tLCBwYXJhbXNUb3ApKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEluY29uc2lzdGVudFRhYmxlcylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbmNvbnNpc3RlbnQgZGF0YWZyYW1lczogJHtlLm1lc3NhZ2V9YCk7XG5cbiAgICAgICsrZmFpbHNDb3VudDtcbiAgICAgIHdhcm5pbmdzLnB1c2goKGUgaW5zdGFuY2VvZiBFcnJvcikgPyBlLm1lc3NhZ2UgOiAnUGxhdGZvcm0gaXNzdWUnKTtcbiAgICAgIGZhaWxlZEluaXRQb2ludC5wdXNoKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZhaWxzQ291bnQgPiAwKSB7XG4gICAgY29uc3QgZGltID0gcGFyYW1zVG9wLmxlbmd0aDtcbiAgICBjb25zdCByYXcgPSBuZXcgQXJyYXk8RmxvYXQzMkFycmF5PihkaW0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW07ICsraSlcbiAgICAgIHJhd1tpXSA9IG5ldyBGbG9hdDMyQXJyYXkoZmFpbHNDb3VudCk7XG5cbiAgICBmYWlsZWRJbml0UG9pbnQuZm9yRWFjaCgocG9pbnQsIGlkeCkgPT4gcG9pbnQuZm9yRWFjaCgodmFsLCBqZHgpID0+IHJhd1tqZHhdW2lkeF0gPSB2YWwpKTtcbiAgICBmYWlsc0RGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKHJhdy5tYXAoKGFyciwgaWR4KSA9PiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheShgYXJnJHtpZHh9YCwgYXJyKSkpO1xuICAgIGZhaWxzREYuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZyb21TdHJpbmdzKCdJc3N1ZScsIHdhcm5pbmdzKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4dHJlbXVtczogZXh0cmVtdW1zLFxuICAgIGZhaWxzOiBmYWlsc0RGLFxuICB9O1xufVxuIl19
|
package/lbfgs/lbfgs.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function limitedMemoryBFGS(optimizable: any, parameters: any): any;
|