@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.
@@ -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,EAOX,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,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,aAAa,CAExE;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,aAAa,CAEtE;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,CAExF;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,CAS1E;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,aAAa,CAMpH"}
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"}
@@ -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, TAG_FIT, } from './fit-curve';
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
- return getFittedCurve(fitFunc.y, series.parameters);
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
- series.parameters = fitSeries(series, fitFunc).parameters;
150
- return getCurveConfidenceIntervals(data, series.parameters, fitFunc.y, 0.05, (_a = series.errorModel) !== null && _a !== void 0 ? _a : FitErrorModel.CONSTANT);
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
- series.parameters = fitSeries(series, fitFunc).parameters;
158
- return getStatistics(data, series.parameters, fitFunc.y, true);
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,2 @@
1
+ export declare function sampleParams(samplesCount: number, top: Float32Array, bottom: Float32Array): Float32Array[];
2
+ //# sourceMappingURL=optimizer-sampler.d.ts.map
@@ -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;