@datagrok-libraries/statistics 1.1.8 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.json CHANGED
@@ -20,7 +20,12 @@
20
20
  120
21
21
  ],
22
22
  "require-jsdoc": "off",
23
- "spaced-comment": "off"
23
+ "spaced-comment": "off",
24
+ "linebreak-style": "off",
25
+ "curly": [
26
+ "error",
27
+ "multi-or-nest"
28
+ ]
24
29
  },
25
30
  "parser": "@typescript-eslint/parser",
26
31
  "plugins": [
package/CHANGELOG.md ADDED
@@ -0,0 +1,49 @@
1
+ # statistics changelog
2
+
3
+ ## 1.2.1 (2023-08-02)
4
+
5
+ This release focuses on adding new functionality and improving stability.
6
+
7
+ *Dependency: datagrok-api >= 1.16.0*
8
+
9
+ ### Features
10
+
11
+ * [#2101](https://github.com/datagrok-ai/public/issues/2101): Improved curves properties and rendering:
12
+ * Added points log in fit
13
+ * Added droplines calculation for IC50
14
+ * Don't render confidence intervals by default
15
+ * [#2106](https://github.com/datagrok-ai/public/issues/2106): Wrote TS docs for the code
16
+
17
+ ## 1.2.0 (2023-07-21)
18
+
19
+ This release focuses on adding new functionality and improving stability.
20
+
21
+ *Dependency: datagarok-api >= 1.16.0*
22
+
23
+ ### Features
24
+
25
+ * Added fit function determination.
26
+ * Added the capability to run user-defined Javascript fitting functions with caching.
27
+ * Added box plot statistics.
28
+ * Added `candlesticks` and `both` render parameter types.
29
+ * Added different marker types.
30
+ * [#2101](https://github.com/datagrok-ai/public/issues/2101): Improved curves properties and rendering:
31
+ * Added interface for custom parameters.
32
+ * Added the capability to control parameter bounds.
33
+
34
+ ### Bug Fixes
35
+
36
+ * Fixed inputs in the property panel.
37
+ * Fixed confidence intervals and statistics methods.
38
+ * Fixed confidence interval stroke color opacity.
39
+ * Fixed fit function creation.
40
+
41
+ ## 1.1.8 (2023-05-21)
42
+
43
+ This release focuses on adding new functionality.
44
+
45
+ *Dependency: datagarok-api >= 1.13.11*
46
+
47
+ ### Features
48
+
49
+ * Exposed AUC and R2 functions.
package/package.json CHANGED
@@ -4,14 +4,14 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "statistics",
7
- "version": "1.1.8",
7
+ "version": "1.2.1",
8
8
  "description": "",
9
9
  "dependencies": {
10
- "datagrok-api": "^1.13.11",
11
- "@datagrok-libraries/utils": "^4",
10
+ "datagrok-api": "^1.16.0",
11
+ "@datagrok-libraries/utils": "^4.0.0",
12
12
  "cash-dom": "latest",
13
13
  "jstat": "latest",
14
- "dayjs": "latest"
14
+ "dayjs": "^1.11.7"
15
15
  },
16
16
  "devDependencies": {
17
17
  "ts-loader": "^9.2.6",
@@ -0,0 +1,9 @@
1
+ export declare type BoxPlotStatistics = {
2
+ q1: number;
3
+ q2: number;
4
+ q3: number;
5
+ lowerAdjacentValue: number;
6
+ upperAdjacentValue: number;
7
+ };
8
+ export declare function calculateBoxPlotStatistics(values: number[]): BoxPlotStatistics;
9
+ //# sourceMappingURL=box-plot-statistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box-plot-statistics.d.ts","sourceRoot":"","sources":["box-plot-statistics.ts"],"names":[],"mappings":"AACA,oBAAY,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAGF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAiC9E"}
@@ -0,0 +1,57 @@
1
+ export function calculateBoxPlotStatistics(values) {
2
+ values.sort();
3
+ const q1 = values[Math.trunc(values.length / 4)];
4
+ const q2 = values.length % 2 === 0 ?
5
+ (values[Math.trunc(values.length / 2)] + values[Math.trunc(values.length / 2) - 1]) / 2 :
6
+ values[Math.trunc(values.length / 2)];
7
+ const q3 = values[Math.trunc(values.length * 3 / 4)];
8
+ const hSpread = q3 - q1;
9
+ const step = hSpread * 1.5;
10
+ let upperIdx = arrayBinarySearch(values, q3 + step);
11
+ if (upperIdx < 0)
12
+ upperIdx = ~upperIdx;
13
+ let upperAdjacentValue = values[Math.max(0, upperIdx - 1)];
14
+ if (upperAdjacentValue < q3)
15
+ upperAdjacentValue = q3;
16
+ let lowerIdx = arrayBinarySearch(values, q1 - step);
17
+ if (lowerIdx < 0)
18
+ lowerIdx = ~lowerIdx;
19
+ let lowerAdjacentValue = values[lowerIdx];
20
+ if (lowerAdjacentValue > q1)
21
+ lowerAdjacentValue = q1;
22
+ return {
23
+ q1: q1,
24
+ q2: q2,
25
+ q3: q3,
26
+ lowerAdjacentValue: lowerAdjacentValue,
27
+ upperAdjacentValue: upperAdjacentValue,
28
+ };
29
+ }
30
+ function arrayBinarySearch(items, value, left = 0, right) {
31
+ if (items.length === 0)
32
+ return -1; //~0;
33
+ if (right === undefined)
34
+ right = items.length - 1;
35
+ if (value < items[left])
36
+ return -1; //~left;
37
+ if (value > items[right])
38
+ return -(right + 1); //~(right+1);
39
+ while (right - left > 1) {
40
+ const mid = Math.trunc((right + left) / 2);
41
+ if (value === items[mid])
42
+ return mid;
43
+ if (value < items[mid])
44
+ right = mid;
45
+ else
46
+ left = mid;
47
+ }
48
+ if (items[left] === value)
49
+ return left;
50
+ if (items[right] === 0)
51
+ return right;
52
+ // no match - returning inverted index
53
+ if (value < items[left])
54
+ return -(left + 1); //~left;
55
+ return -(right + 1); //~right;
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LXBsb3Qtc3RhdGlzdGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJveC1wbG90LXN0YXRpc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE1BQWdCO0lBQ3pELE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVkLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFckQsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN4QixNQUFNLElBQUksR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBRTNCLElBQUksUUFBUSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBSSxRQUFRLEdBQUcsQ0FBQztRQUNkLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN2QixJQUFJLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLGtCQUFrQixHQUFHLEVBQUU7UUFDekIsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBRTFCLElBQUksUUFBUSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBSSxRQUFRLEdBQUcsQ0FBQztRQUNkLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN2QixJQUFJLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxJQUFJLGtCQUFrQixHQUFHLEVBQUU7UUFDekIsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBRTFCLE9BQU87UUFDTCxFQUFFLEVBQUUsRUFBRTtRQUNOLEVBQUUsRUFBRSxFQUFFO1FBQ04sRUFBRSxFQUFFLEVBQUU7UUFDTixrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsa0JBQWtCLEVBQUUsa0JBQWtCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFlLEVBQUUsS0FBYSxFQUFFLE9BQWUsQ0FBQyxFQUFFLEtBQWM7SUFDekYsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDcEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7SUFFbEIsSUFBSSxLQUFLLEtBQUssU0FBUztRQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFM0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNyQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtJQUNyQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7SUFFcEMsT0FBTyxLQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRTtRQUN4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3BCLEtBQUssR0FBRyxHQUFHLENBQUM7O1lBRVosSUFBSSxHQUFHLEdBQUcsQ0FBQztLQUNkO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFFZixzQ0FBc0M7SUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNyQixPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO0lBQzlCLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXRhYnMgKi9cbmV4cG9ydCB0eXBlIEJveFBsb3RTdGF0aXN0aWNzID0ge1xuICBxMTogbnVtYmVyLFxuXHRxMjogbnVtYmVyLFxuXHRxMzogbnVtYmVyLFxuXHRsb3dlckFkamFjZW50VmFsdWU6IG51bWJlcixcblx0dXBwZXJBZGphY2VudFZhbHVlOiBudW1iZXIsXG59O1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVCb3hQbG90U3RhdGlzdGljcyh2YWx1ZXM6IG51bWJlcltdKTogQm94UGxvdFN0YXRpc3RpY3Mge1xuICB2YWx1ZXMuc29ydCgpO1xuXG4gIGNvbnN0IHExID0gdmFsdWVzW01hdGgudHJ1bmModmFsdWVzLmxlbmd0aCAvIDQpXTtcbiAgY29uc3QgcTIgPSB2YWx1ZXMubGVuZ3RoICUgMiA9PT0gMCA/XG4gICAgKHZhbHVlc1tNYXRoLnRydW5jKHZhbHVlcy5sZW5ndGggLyAyKV0gKyB2YWx1ZXNbTWF0aC50cnVuYyh2YWx1ZXMubGVuZ3RoIC8gMikgLSAxXSkgLyAyIDpcbiAgICB2YWx1ZXNbTWF0aC50cnVuYyh2YWx1ZXMubGVuZ3RoIC8gMildO1xuICBjb25zdCBxMyA9IHZhbHVlc1tNYXRoLnRydW5jKHZhbHVlcy5sZW5ndGggKiAzIC8gNCldO1xuXG4gIGNvbnN0IGhTcHJlYWQgPSBxMyAtIHExO1xuICBjb25zdCBzdGVwID0gaFNwcmVhZCAqIDEuNTtcblxuICBsZXQgdXBwZXJJZHggPSBhcnJheUJpbmFyeVNlYXJjaCh2YWx1ZXMsIHEzICsgc3RlcCk7XG4gIGlmICh1cHBlcklkeCA8IDApXG4gICAgdXBwZXJJZHggPSB+dXBwZXJJZHg7XG4gIGxldCB1cHBlckFkamFjZW50VmFsdWUgPSB2YWx1ZXNbTWF0aC5tYXgoMCwgdXBwZXJJZHggLSAxKV07XG4gIGlmICh1cHBlckFkamFjZW50VmFsdWUgPCBxMylcbiAgICB1cHBlckFkamFjZW50VmFsdWUgPSBxMztcblxuICBsZXQgbG93ZXJJZHggPSBhcnJheUJpbmFyeVNlYXJjaCh2YWx1ZXMsIHExIC0gc3RlcCk7XG4gIGlmIChsb3dlcklkeCA8IDApXG4gICAgbG93ZXJJZHggPSB+bG93ZXJJZHg7XG4gIGxldCBsb3dlckFkamFjZW50VmFsdWUgPSB2YWx1ZXNbbG93ZXJJZHhdO1xuICBpZiAobG93ZXJBZGphY2VudFZhbHVlID4gcTEpXG4gICAgbG93ZXJBZGphY2VudFZhbHVlID0gcTE7XG5cbiAgcmV0dXJuIHtcbiAgICBxMTogcTEsXG4gICAgcTI6IHEyLFxuICAgIHEzOiBxMyxcbiAgICBsb3dlckFkamFjZW50VmFsdWU6IGxvd2VyQWRqYWNlbnRWYWx1ZSxcbiAgICB1cHBlckFkamFjZW50VmFsdWU6IHVwcGVyQWRqYWNlbnRWYWx1ZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXJyYXlCaW5hcnlTZWFyY2goaXRlbXM6IG51bWJlcltdLCB2YWx1ZTogbnVtYmVyLCBsZWZ0OiBudW1iZXIgPSAwLCByaWdodD86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIC0xOyAvL34wO1xuXG4gIGlmIChyaWdodCA9PT0gdW5kZWZpbmVkKVxuICAgIHJpZ2h0ID0gaXRlbXMubGVuZ3RoIC0gMTtcblxuICBpZiAodmFsdWUgPCBpdGVtc1tsZWZ0XSlcbiAgICByZXR1cm4gLTE7IC8vfmxlZnQ7XG4gIGlmICh2YWx1ZSA+IGl0ZW1zW3JpZ2h0XSlcbiAgICByZXR1cm4gLShyaWdodCArIDEpOyAvL34ocmlnaHQrMSk7XG5cbiAgd2hpbGUgKHJpZ2h0ISAtIGxlZnQgPiAxKSB7XG4gICAgY29uc3QgbWlkID0gTWF0aC50cnVuYygocmlnaHQgKyBsZWZ0KSAvIDIpO1xuICAgIGlmICh2YWx1ZSA9PT0gaXRlbXNbbWlkXSlcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgaWYgKHZhbHVlIDwgaXRlbXNbbWlkXSlcbiAgICAgIHJpZ2h0ID0gbWlkO1xuICAgIGVsc2VcbiAgICAgIGxlZnQgPSBtaWQ7XG4gIH1cblxuICBpZiAoaXRlbXNbbGVmdF0gPT09IHZhbHVlKVxuICAgIHJldHVybiBsZWZ0O1xuICBpZiAoaXRlbXNbcmlnaHRdID09PSAwKVxuICAgIHJldHVybiByaWdodDtcblxuICAvLyBubyBtYXRjaCAtIHJldHVybmluZyBpbnZlcnRlZCBpbmRleFxuICBpZiAodmFsdWUgPCBpdGVtc1tsZWZ0XSlcbiAgICByZXR1cm4gLShsZWZ0ICsgMSk7IC8vfmxlZnQ7XG4gIHJldHVybiAtKHJpZ2h0ICsgMSk7IC8vfnJpZ2h0O1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Options } from '../../utils/src/type-declarations';
1
+ import { Options } from '@datagrok-libraries/utils/src/type-declarations';
2
2
  /**
3
3
  * Calculates Kendall's tau, a correlation measure for ordinal data, and an associated p-value.
4
4
  * Returns: Kendall's tau, two-tailed p-value.
@@ -1 +1 @@
1
- {"version":3,"file":"correlation-coefficient.d.ts","sourceRoot":"","sources":["correlation-coefficient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,mCAAmC,CAAC;AAwD1D;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAiC7D"}
1
+ {"version":3,"file":"correlation-coefficient.d.ts","sourceRoot":"","sources":["correlation-coefficient.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,iDAAiD,CAAC;AAuDxE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAiC7D"}
@@ -1,4 +1,3 @@
1
- //import {Options} from '@datagrok-libraries/utils/src/type-declarations';
2
1
  /**
3
2
  * Returns the error function erf(x).
4
3
  *
@@ -97,4 +96,4 @@ export function kendallsTau(x, y) {
97
96
  const prob = erfc(Math.abs(z) / 1.4142136);
98
97
  return { test: tau, z: z, prob: prob };
99
98
  }
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24tY29lZmZpY2llbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb3JyZWxhdGlvbi1jb2VmZmljaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSwwRUFBMEU7QUFFMUU7Ozs7OztHQU1HO0FBQ0gsU0FBUyxHQUFHLENBQUMsQ0FBUztJQUNwQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCO1FBQzVFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUI7UUFDaEUsa0JBQWtCLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLGlCQUFpQjtRQUMzRCxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsQ0FBQyxlQUFlO1FBQ3BELGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxjQUFjO1FBQy9DLENBQUMsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZO1FBQzVDLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXO1FBQ3ZDLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTO1FBQ2pDLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVE7UUFDOUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNaLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWCxJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7SUFBQyxJQUFJLEVBQUUsR0FBVyxDQUFDLENBQUM7SUFBQyxJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFBQyxJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFFaEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ1QsQ0FBQyxHQUFHLENBQUMs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QUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbi8vaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmKHgpLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEFuIGFyZ3VtZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvNjVjZTA5NmE5OWY3NTNkNmEyMjQ4MmU1ZTc0YWNjYmZjMWMzMzc2Ny9kaXN0L2pzdGF0LmpzI0wxNTYyXG4gKi9cbmZ1bmN0aW9uIGVyZih4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBjb2YgPSBbLTEuMzAyNjUzNzE5NzgxNzA5NCwgNi40MTk2OTc5MjM1NjQ5MDI2ZS0xLCAxLjk0NzY0NzMyMDQxODU4MzZlLTIsXG4gICAgLTkuNTYxNTE0Nzg2ODA4NjMxZS0zLCAtOS40NjU5NTM0NDQ4MjAzNmUtNCwgMy42NjgzOTQ5Nzg1Mjc2MWUtNCxcbiAgICA0LjI1MjMzMjQ4MDY5MDdlLTUsIC0yLjAyNzg1NzgxMTI1MzRlLTUsIC0xLjYyNDI5MDAwNDY0N2UtNixcbiAgICAxLjMwMzY1NTgzNTU4MGUtNiwgMS41NjI2NDQxNzIyZS04LCAtOC41MjM4MDk1OTE1ZS04LFxuICAgIDYuNTI5MDU0NDM5ZS05LCA1LjA1OTM0MzQ5NWUtOSwgLTkuOTEzNjQxNTZlLTEwLFxuICAgIC0yLjI3MzY1MTIyZS0xMCwgOS42NDY3OTExZS0xMSwgMi4zOTQwMzhlLTEyLFxuICAgIC02Ljg4NjAyN2UtMTIsIDguOTQ0ODdlLTEzLCAzLjEzMDkyZS0xMyxcbiAgICAtMS4xMjcwOGUtMTMsIDMuODFlLTE2LCA3LjEwNmUtMTUsXG4gICAgLTEuNTIzZS0xNSwgLTkuNGUtMTcsIDEuMjFlLTE2LFxuICAgIC0yLjhlLTE3XTtcbiAgbGV0IGogPSBjb2YubGVuZ3RoIC0gMTtcbiAgbGV0IGlzbmVnID0gZmFsc2U7XG4gIGxldCBkID0gMDtcbiAgbGV0IGRkID0gMDtcbiAgbGV0IHQ6IG51bWJlciA9IDA7IGxldCB0eTogbnVtYmVyID0gMDsgbGV0IHRtcDogbnVtYmVyID0gMDsgbGV0IHJlczogbnVtYmVyID0gMDtcblxuICBpZiAoeCA8IDApIHtcbiAgICB4ID0gLXg7XG4gICAgaXNuZWcgPSB0cnVlO1xuICB9XG5cbiAgdCA9IDIgLyAoMiArIHgpO1xuICB0eSA9IDQgKiB0IC0gMjtcblxuICBmb3IgKDsgaiA+IDA7IGotLSkge1xuICAgIHRtcCA9IGQ7XG4gICAgZCA9IHR5ICogZCAtIGRkICsgY29mW2pdO1xuICAgIGRkID0gdG1wO1xuICB9XG5cbiAgcmVzID0gdCAqIE1hdGguZXhwKC14ICogeCArIDAuNSAqIChjb2ZbMF0gKyB0eSAqIGQpIC0gZGQpO1xuICByZXR1cm4gaXNuZWcgPyByZXMgLSAxIDogMSAtIHJlcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wbG1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gZXJmYyh4KVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEFuIGFyZ3VtZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvNjVjZTA5NmE5OWY3NTNkNmEyMjQ4MmU1ZTc0YWNjYmZjMWMzMzc2Ny9kaXN0L2pzdGF0LmpzI0wxNTk5XG4gKi9cbmZ1bmN0aW9uIGVyZmMoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDEgLSBlcmYoeCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBLZW5kYWxsJ3MgdGF1LCBhIGNvcnJlbGF0aW9uIG1lYXN1cmUgZm9yIG9yZGluYWwgZGF0YSwgYW5kIGFuIGFzc29jaWF0ZWQgcC12YWx1ZS5cbiAqIFJldHVybnM6IEtlbmRhbGwncyB0YXUsIHR3by10YWlsZWQgcC12YWx1ZS5cbiAqIERlcml2ZWQgZnJvbSBvbGRlciBTY2lQeTogaHR0cDovL3dlYi5taXQuZWR1LzYuODYzL3NwcmluZzIwMTEvcGFja2FnZXMvc2NpcHlfc3JjL3NjaXB5L3N0YXRzL3N0YXRzLnB5XG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJbXX0geCBUaGUgZmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcltdfSB5IFRoZSBzZWNvbmQgYXJyYXkuXG4gKiBAcmV0dXJuIHtPcHRpb25zfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BkZmVybmhvdXQvbmFycmFmaXJtYS9ibG9iL1xuICogYzljMTIyZDU3N2E0Yjg4NjhjZTYwM2JhZGFiYmI3ZDEwZjQ1NzQwYy93ZWJhcHAvc291cmNlL3N0YXRpc3RpY3Mva2VuZGFsbHNUYXUudHMjTDhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlbmRhbGxzVGF1KHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IE9wdGlvbnMge1xuICBsZXQgbjEgPSAwO1xuICBsZXQgbjIgPSAwO1xuICBsZXQgaXNzID0gMDtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB4Lmxlbmd0aCAtIDE7IGorKykge1xuICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHkubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGExID0geFtqXSAtIHhba107XG4gICAgICBjb25zdCBhMiA9IHlbal0gLSB5W2tdO1xuICAgICAgY29uc3QgYWEgPSBhMSAqIGEyO1xuICAgICAgaWYgKGFhKSB7XG4gICAgICAgIC8vIG5laXRoZXIgYXJyYXkgaGFzIGEgdGllXG4gICAgICAgIG4xID0gbjEgKyAxO1xuICAgICAgICBuMiA9IG4yICsgMTtcbiAgICAgICAgaWYgKGFhID4gMCkge1xuICAgICAgICAgIGlzcyA9IGlzcyArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNzID0gaXNzIC0gMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGExKSB7XG4gICAgICAgICAgbjEgPSBuMSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEyKSB7XG4gICAgICAgICAgbjIgPSBuMiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgdGF1ID0gaXNzIC8gTWF0aC5zcXJ0KG4xICogbjIpO1xuICBjb25zdCBzdmFyID0gKDQuMCAqIHgubGVuZ3RoICsgMTAuMCkgLyAoOS4wICogeC5sZW5ndGggKiAoeC5sZW5ndGggLSAxKSk7XG4gIGNvbnN0IHogPSB0YXUgLyBNYXRoLnNxcnQoc3Zhcik7XG4gIGNvbnN0IHByb2IgPSBlcmZjKE1hdGguYWJzKHopIC8gMS40MTQyMTM2KTtcbiAgcmV0dXJuIHt0ZXN0OiB0YXUsIHo6IHosIHByb2I6IHByb2J9O1xufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24tY29lZmZpY2llbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb3JyZWxhdGlvbi1jb2VmZmljaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7Ozs7O0dBTUc7QUFDSCxTQUFTLEdBQUcsQ0FBQyxDQUFTO0lBQ3BCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7UUFDNUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQjtRQUNoRSxrQkFBa0IsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsaUJBQWlCO1FBQzNELGlCQUFpQixFQUFFLGVBQWUsRUFBRSxDQUFDLGVBQWU7UUFDcEQsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFDLGNBQWM7UUFDL0MsQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVk7UUFDNUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVc7UUFDdkMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVM7UUFDakMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUTtRQUM5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNYLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksRUFBRSxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztJQUFDLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztJQUVoRixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFD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LElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUMzQyxPQUFPLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IHtPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmKHgpLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEFuIGFyZ3VtZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvNjVjZTA5NmE5OWY3NTNkNmEyMjQ4MmU1ZTc0YWNjYmZjMWMzMzc2Ny9kaXN0L2pzdGF0LmpzI0wxNTYyXG4gKi9cbmZ1bmN0aW9uIGVyZih4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBjb2YgPSBbLTEuMzAyNjUzNzE5NzgxNzA5NCwgNi40MTk2OTc5MjM1NjQ5MDI2ZS0xLCAxLjk0NzY0NzMyMDQxODU4MzZlLTIsXG4gICAgLTkuNTYxNTE0Nzg2ODA4NjMxZS0zLCAtOS40NjU5NTM0NDQ4MjAzNmUtNCwgMy42NjgzOTQ5Nzg1Mjc2MWUtNCxcbiAgICA0LjI1MjMzMjQ4MDY5MDdlLTUsIC0yLjAyNzg1NzgxMTI1MzRlLTUsIC0xLjYyNDI5MDAwNDY0N2UtNixcbiAgICAxLjMwMzY1NTgzNTU4MGUtNiwgMS41NjI2NDQxNzIyZS04LCAtOC41MjM4MDk1OTE1ZS04LFxuICAgIDYuNTI5MDU0NDM5ZS05LCA1LjA1OTM0MzQ5NWUtOSwgLTkuOTEzNjQxNTZlLTEwLFxuICAgIC0yLjI3MzY1MTIyZS0xMCwgOS42NDY3OTExZS0xMSwgMi4zOTQwMzhlLTEyLFxuICAgIC02Ljg4NjAyN2UtMTIsIDguOTQ0ODdlLTEzLCAzLjEzMDkyZS0xMyxcbiAgICAtMS4xMjcwOGUtMTMsIDMuODFlLTE2LCA3LjEwNmUtMTUsXG4gICAgLTEuNTIzZS0xNSwgLTkuNGUtMTcsIDEuMjFlLTE2LFxuICAgIC0yLjhlLTE3XTtcbiAgbGV0IGogPSBjb2YubGVuZ3RoIC0gMTtcbiAgbGV0IGlzbmVnID0gZmFsc2U7XG4gIGxldCBkID0gMDtcbiAgbGV0IGRkID0gMDtcbiAgbGV0IHQ6IG51bWJlciA9IDA7IGxldCB0eTogbnVtYmVyID0gMDsgbGV0IHRtcDogbnVtYmVyID0gMDsgbGV0IHJlczogbnVtYmVyID0gMDtcblxuICBpZiAoeCA8IDApIHtcbiAgICB4ID0gLXg7XG4gICAgaXNuZWcgPSB0cnVlO1xuICB9XG5cbiAgdCA9IDIgLyAoMiArIHgpO1xuICB0eSA9IDQgKiB0IC0gMjtcblxuICBmb3IgKDsgaiA+IDA7IGotLSkge1xuICAgIHRtcCA9IGQ7XG4gICAgZCA9IHR5ICogZCAtIGRkICsgY29mW2pdO1xuICAgIGRkID0gdG1wO1xuICB9XG5cbiAgcmVzID0gdCAqIE1hdGguZXhwKC14ICogeCArIDAuNSAqIChjb2ZbMF0gKyB0eSAqIGQpIC0gZGQpO1xuICByZXR1cm4gaXNuZWcgPyByZXMgLSAxIDogMSAtIHJlcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb21wbG1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gZXJmYyh4KVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IEFuIGFyZ3VtZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2pzdGF0L2pzdGF0L2Jsb2IvNjVjZTA5NmE5OWY3NTNkNmEyMjQ4MmU1ZTc0YWNjYmZjMWMzMzc2Ny9kaXN0L2pzdGF0LmpzI0wxNTk5XG4gKi9cbmZ1bmN0aW9uIGVyZmMoeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDEgLSBlcmYoeCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBLZW5kYWxsJ3MgdGF1LCBhIGNvcnJlbGF0aW9uIG1lYXN1cmUgZm9yIG9yZGluYWwgZGF0YSwgYW5kIGFuIGFzc29jaWF0ZWQgcC12YWx1ZS5cbiAqIFJldHVybnM6IEtlbmRhbGwncyB0YXUsIHR3by10YWlsZWQgcC12YWx1ZS5cbiAqIERlcml2ZWQgZnJvbSBvbGRlciBTY2lQeTogaHR0cDovL3dlYi5taXQuZWR1LzYuODYzL3NwcmluZzIwMTEvcGFja2FnZXMvc2NpcHlfc3JjL3NjaXB5L3N0YXRzL3N0YXRzLnB5XG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJbXX0geCBUaGUgZmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcltdfSB5IFRoZSBzZWNvbmQgYXJyYXkuXG4gKiBAcmV0dXJuIHtPcHRpb25zfSBUaGUgcmVzdWx0LlxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BkZmVybmhvdXQvbmFycmFmaXJtYS9ibG9iL1xuICogYzljMTIyZDU3N2E0Yjg4NjhjZTYwM2JhZGFiYmI3ZDEwZjQ1NzQwYy93ZWJhcHAvc291cmNlL3N0YXRpc3RpY3Mva2VuZGFsbHNUYXUudHMjTDhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtlbmRhbGxzVGF1KHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IE9wdGlvbnMge1xuICBsZXQgbjEgPSAwO1xuICBsZXQgbjIgPSAwO1xuICBsZXQgaXNzID0gMDtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCB4Lmxlbmd0aCAtIDE7IGorKykge1xuICAgIGZvciAobGV0IGsgPSBqICsgMTsgayA8IHkubGVuZ3RoOyBrKyspIHtcbiAgICAgIGNvbnN0IGExID0geFtqXSAtIHhba107XG4gICAgICBjb25zdCBhMiA9IHlbal0gLSB5W2tdO1xuICAgICAgY29uc3QgYWEgPSBhMSAqIGEyO1xuICAgICAgaWYgKGFhKSB7XG4gICAgICAgIC8vIG5laXRoZXIgYXJyYXkgaGFzIGEgdGllXG4gICAgICAgIG4xID0gbjEgKyAxO1xuICAgICAgICBuMiA9IG4yICsgMTtcbiAgICAgICAgaWYgKGFhID4gMCkge1xuICAgICAgICAgIGlzcyA9IGlzcyArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNzID0gaXNzIC0gMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGExKSB7XG4gICAgICAgICAgbjEgPSBuMSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEyKSB7XG4gICAgICAgICAgbjIgPSBuMiArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgdGF1ID0gaXNzIC8gTWF0aC5zcXJ0KG4xICogbjIpO1xuICBjb25zdCBzdmFyID0gKDQuMCAqIHgubGVuZ3RoICsgMTAuMCkgLyAoOS4wICogeC5sZW5ndGggKiAoeC5sZW5ndGggLSAxKSk7XG4gIGNvbnN0IHogPSB0YXUgLyBNYXRoLnNxcnQoc3Zhcik7XG4gIGNvbnN0IHByb2IgPSBlcmZjKE1hdGguYWJzKHopIC8gMS40MTQyMTM2KTtcbiAgcmV0dXJuIHt0ZXN0OiB0YXUsIHo6IHosIHByb2I6IHByb2J9O1xufVxuIl19
@@ -0,0 +1,213 @@
1
+ import { Property } from 'datagrok-api/src/entities';
2
+ export declare enum FitErrorModel {
3
+ Constant = 0,
4
+ Proportional = 1
5
+ }
6
+ export declare type FitParamBounds = {
7
+ minBound?: number;
8
+ maxBound?: number;
9
+ };
10
+ /** Fit function description. Applies to custom user fit functions.
11
+ * Requires JS arrow functions for the fit functions and initial parameters. */
12
+ export interface IFitFunctionDescription {
13
+ name: string;
14
+ function: string;
15
+ getInitialParameters: string;
16
+ parameterNames: string[];
17
+ }
18
+ export declare type FitCurve = {
19
+ fittedCurve: (x: number) => number;
20
+ parameters: number[];
21
+ };
22
+ export declare type FitConfidenceIntervals = {
23
+ confidenceTop: (x: number) => number;
24
+ confidenceBottom: (x: number) => number;
25
+ };
26
+ export declare type FitStatistics = {
27
+ rSquared?: number;
28
+ auc?: number;
29
+ interceptX: number;
30
+ interceptY: number;
31
+ slope: number;
32
+ top: number;
33
+ bottom: number;
34
+ };
35
+ export declare type FitInvertedFunctions = {
36
+ inverted: (y: number) => number;
37
+ invertedTop: (y: number) => number;
38
+ invertedBottom: (y: number) => number;
39
+ };
40
+ /**
41
+ * Datagrok curve fitting
42
+ *
43
+ * - Fitting: computing parameters of the specified function to best fit the data
44
+ * - Uses BFGS optimization algorithm (multi-threading for performance).
45
+ * For dose-response curves, we are typically fitting the sigmoid function
46
+ * - Ability to dynamically register custom fitting functions
47
+ * - Automatic fit function determination
48
+ * - Caching of custom fitting functions
49
+ * - Ability to get fitting performance characteristics (r-squared, classification, etc)
50
+ * - Deep integration with the Datagrok grid
51
+ * - Either fitting on the fly, or using the supplied function + parameters
52
+ * - Multiple series in one cell
53
+ * - Candlesticks, confidence intervals, and droplines drawing
54
+ * - Ability to define chart, marker, or fitting options (such as fit function or marker color)
55
+ * on the column level, with the ability to override it on a grid cell or point level
56
+ * - Clicking a point in a chart within a grid makes it an outlier -> curve is re-fitted on the fly
57
+ * - Ability to specify a chart as "reference" so that it is shown on every other chart for comparison
58
+ * - Ability to overlay curves from multiple grid cells (special viewer)
59
+ * - Work with series stored in multiple formats (binary for performance, json for flexibility, etc)
60
+ */
61
+ export declare const FIT_SEM_TYPE = "fit";
62
+ export declare const FIT_CELL_TYPE = "fit";
63
+ export declare const TAG_FIT = ".fit";
64
+ export declare const CONFIDENCE_INTERVAL_STROKE_COLOR = "rgba(255,191,63,0.4)";
65
+ export declare const CONFIDENCE_INTERVAL_FILL_COLOR = "rgba(255,238,204,0.3)";
66
+ export declare const CURVE_CONFIDENCE_INTERVAL_BOUNDS: {
67
+ TOP: string;
68
+ BOTTOM: string;
69
+ };
70
+ export declare const DROPLINES: string[];
71
+ export declare type FitMarkerType = 'asterisk' | 'circle' | 'cross border' | 'diamond' | 'square' | 'star' | 'triangle bottom' | 'triangle left' | 'triangle right' | 'triangle top';
72
+ /** A point in the fit series. Only x and y are required. Can override some fields defined in IFitSeriesOptions. */
73
+ export interface IFitPoint {
74
+ x: number;
75
+ y: number;
76
+ outlier?: boolean;
77
+ minY?: number;
78
+ maxY?: number;
79
+ marker?: FitMarkerType;
80
+ color?: string;
81
+ }
82
+ /** A series consists of points, has a name, and options.
83
+ * If defined, seriesOptions are merged with {@link IFitChartData.seriesOptions} */
84
+ export interface IFitSeries extends IFitSeriesOptions {
85
+ points: IFitPoint[];
86
+ }
87
+ /** Chart labels options. Controls the chart labels. */
88
+ export interface IFitChartLabelOptions {
89
+ visible: boolean;
90
+ color: string;
91
+ name: string;
92
+ }
93
+ /** Chart options. For fitted curves, this object is stored in the grid column tags and is used by the renderer. */
94
+ export interface IFitChartOptions {
95
+ minX?: number;
96
+ minY?: number;
97
+ maxX?: number;
98
+ maxY?: number;
99
+ xAxisName?: string;
100
+ yAxisName?: string;
101
+ logX?: boolean;
102
+ logY?: boolean;
103
+ showStatistics?: string[];
104
+ labelOptions?: IFitChartLabelOptions[];
105
+ }
106
+ /** Data for the fit chart. */
107
+ export interface IFitChartData {
108
+ chartOptions?: IFitChartOptions;
109
+ seriesOptions?: IFitSeriesOptions;
110
+ series?: IFitSeries[];
111
+ }
112
+ /** Class that implements {@link IFitChartData} interface */
113
+ export declare class FitChartData implements IFitChartData {
114
+ chartOptions: IFitChartOptions;
115
+ seriesOptions: IFitSeriesOptions;
116
+ series: IFitSeries[];
117
+ }
118
+ /** Series options can be either applied globally on a column level, or partially overridden in particular series */
119
+ export interface IFitSeriesOptions {
120
+ name?: string;
121
+ fitFunction?: string | IFitFunctionDescription;
122
+ parameters?: number[];
123
+ parameterBounds?: FitParamBounds[];
124
+ markerType?: FitMarkerType;
125
+ pointColor?: string;
126
+ fitLineColor?: string;
127
+ confidenceIntervalColor?: string;
128
+ showFitLine?: boolean;
129
+ showPoints?: string;
130
+ showCurveConfidenceInterval?: boolean;
131
+ clickToToggle?: boolean;
132
+ labels?: {
133
+ [key: string]: string | number | boolean;
134
+ };
135
+ droplines?: string[];
136
+ }
137
+ /** Properties that describe {@link FitStatistics}. Useful for editing, initialization, transformations, etc. */
138
+ export declare const statisticsProperties: Property[];
139
+ /** Properties that describe {@link IFitChartOptions}. Useful for editing, initialization, transformations, etc. */
140
+ export declare const fitChartDataProperties: Property[];
141
+ /** Properties that describe {@link IFitSeriesOptions}. Useful for editing, initialization, transformations, etc. */
142
+ export declare const fitSeriesProperties: Property[];
143
+ export declare const FIT_FUNCTION_SIGMOID = "sigmoid";
144
+ export declare const FIT_FUNCTION_LINEAR = "linear";
145
+ export declare const FIT_STATS_RSQUARED = "rSquared";
146
+ export declare const FIT_STATS_AUC = "auc";
147
+ /** Class for the fit functions */
148
+ export declare abstract class FitFunction {
149
+ abstract get name(): string;
150
+ abstract get parameterNames(): string[];
151
+ abstract y(params: number[], x: number): number;
152
+ abstract getInitialParameters(x: number[], y: number[]): number[];
153
+ }
154
+ /** Class that implements the linear function */
155
+ export declare class LinearFunction extends FitFunction {
156
+ get name(): string;
157
+ get parameterNames(): string[];
158
+ y(params: number[], x: number): number;
159
+ getInitialParameters(x: number[], y: number[]): number[];
160
+ }
161
+ /** Class that implements the sigmoid function */
162
+ export declare class SigmoidFunction extends FitFunction {
163
+ get name(): string;
164
+ get parameterNames(): string[];
165
+ y(params: number[], x: number): number;
166
+ getInitialParameters(x: number[], y: number[]): number[];
167
+ }
168
+ /** Class that implements user JS functions */
169
+ export declare class JsFunction extends FitFunction {
170
+ private _name;
171
+ private _parameterNames;
172
+ constructor(name: string, yFunc: (params: number[], x: number) => number, getInitParamsFunc: (x: number[], y: number[]) => number[], parameterNames: string[]);
173
+ get name(): string;
174
+ get parameterNames(): string[];
175
+ y(params: number[], x: number): number;
176
+ getInitialParameters(x: number[], y: number[]): number[];
177
+ }
178
+ export declare const fitFunctions: {
179
+ [index: string]: FitFunction;
180
+ };
181
+ export interface IFitOptions {
182
+ errorModel: FitErrorModel;
183
+ confidenceLevel: number;
184
+ statistics: boolean;
185
+ }
186
+ export declare function getOrCreateFitFunction(seriesFitFunc: string | IFitFunctionDescription): FitFunction;
187
+ export declare function fitData(data: {
188
+ x: number[];
189
+ y: number[];
190
+ }, fitFunction: FitFunction, errorModel: FitErrorModel, parameterBounds?: FitParamBounds[]): FitCurve;
191
+ export declare function getFittedCurve(curveFunction: (params: number[], x: number) => number, paramValues: number[]): (x: number) => number;
192
+ export declare function getCurveConfidenceIntervals(data: {
193
+ x: number[];
194
+ y: number[];
195
+ }, paramValues: number[], curveFunction: (params: number[], x: number) => number, confidenceLevel: number | undefined, errorModel: FitErrorModel): FitConfidenceIntervals;
196
+ export declare function getStatistics(data: {
197
+ x: number[];
198
+ y: number[];
199
+ }, paramValues: number[], curveFunction: (params: number[], x: number) => number, statistics?: boolean): FitStatistics;
200
+ export declare function getInvertedFunctions(data: {
201
+ x: number[];
202
+ y: number[];
203
+ }, paramValues: number[], confidenceLevel?: number, statistics?: boolean): FitInvertedFunctions | null;
204
+ export declare function sigmoid(params: number[], x: number): number;
205
+ export declare function getAuc(fittedCurve: (x: number) => number, data: {
206
+ x: number[];
207
+ y: number[];
208
+ }): number;
209
+ export declare function getDetCoeff(fittedCurve: (x: number) => number, data: {
210
+ x: number[];
211
+ y: number[];
212
+ }): number;
213
+ //# sourceMappingURL=fit-curve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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"}