pragmastat 3.2.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -5
- package/dist/estimators.d.ts +19 -0
- package/dist/estimators.d.ts.map +1 -1
- package/dist/estimators.js +48 -0
- package/dist/estimators.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/pairwiseMargin.d.ts +20 -0
- package/dist/pairwiseMargin.d.ts.map +1 -0
- package/dist/pairwiseMargin.js +324 -0
- package/dist/pairwiseMargin.js.map +1 -0
- package/dist/utils.d.ts +0 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +0 -17
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
This is a TypeScript implementation of 'Pragmastat: Pragmatic Statistical Toolkit', which presents a toolkit of statistical procedures that provide reliable results across diverse real-world distributions, with ready-to-use implementations and detailed explanations.
|
|
4
4
|
|
|
5
|
-
- PDF manual for this version: [pragmastat-
|
|
6
|
-
- Markdown manual for this version: [pragmastat-
|
|
7
|
-
- Source code for this version: [pragmastat/ts/
|
|
5
|
+
- PDF manual for this version: [pragmastat-v4.0.0.pdf](https://github.com/AndreyAkinshin/pragmastat/releases/download/v4.0.0/pragmastat-v4.0.0.pdf)
|
|
6
|
+
- Markdown manual for this version: [pragmastat-v4.0.0.md](https://github.com/AndreyAkinshin/pragmastat/releases/download/v4.0.0/pragmastat-v4.0.0.md)
|
|
7
|
+
- Source code for this version: [pragmastat/ts/v4.0.0](https://github.com/AndreyAkinshin/pragmastat/tree/v4.0.0/ts)
|
|
8
8
|
- Latest online manual: https://pragmastat.dev
|
|
9
9
|
- Manual DOI: [10.5281/zenodo.17236778](https://doi.org/10.5281/zenodo.17236778)
|
|
10
10
|
|
|
@@ -13,13 +13,13 @@ This is a TypeScript implementation of 'Pragmastat: Pragmatic Statistical Toolki
|
|
|
13
13
|
Install from npm:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm i pragmastat@
|
|
16
|
+
npm i pragmastat@4.0.0
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Demo
|
|
20
20
|
|
|
21
21
|
```typescript
|
|
22
|
-
import { center, spread, relSpread, shift, ratio, avgSpread, disparity } from '../src';
|
|
22
|
+
import { center, spread, relSpread, shift, ratio, avgSpread, disparity, shiftBounds, pairwiseMargin } from '../src';
|
|
23
23
|
|
|
24
24
|
function main() {
|
|
25
25
|
let x = [0, 2, 4, 6, 8];
|
|
@@ -65,6 +65,21 @@ function main() {
|
|
|
65
65
|
console.log(disparity(x.map(v => v + 5), y.map(v => v + 5))); // 0.4
|
|
66
66
|
console.log(disparity(x.map(v => v * 2), y.map(v => v * 2))); // 0.4
|
|
67
67
|
console.log(disparity(y, x)); // -0.4
|
|
68
|
+
|
|
69
|
+
x = Array.from({ length: 30 }, (_, i) => i + 1);
|
|
70
|
+
y = Array.from({ length: 30 }, (_, i) => i + 21);
|
|
71
|
+
|
|
72
|
+
console.log(pairwiseMargin(30, 30, 1e-6)); // 276
|
|
73
|
+
console.log(pairwiseMargin(30, 30, 1e-5)); // 328
|
|
74
|
+
console.log(pairwiseMargin(30, 30, 1e-4)); // 390
|
|
75
|
+
console.log(pairwiseMargin(30, 30, 1e-3)); // 464
|
|
76
|
+
|
|
77
|
+
console.log(shift(x, y)); // -20
|
|
78
|
+
|
|
79
|
+
console.log(shiftBounds(x, y, 1e-6)); // [-33, -7]
|
|
80
|
+
console.log(shiftBounds(x, y, 1e-5)); // [-32, -8]
|
|
81
|
+
console.log(shiftBounds(x, y, 1e-4)); // [-30, -10]
|
|
82
|
+
console.log(shiftBounds(x, y, 1e-3)); // [-28, -12]
|
|
68
83
|
}
|
|
69
84
|
|
|
70
85
|
main();
|
package/dist/estimators.d.ts
CHANGED
|
@@ -50,4 +50,23 @@ export declare function avgSpread(x: number[], y: number[]): number;
|
|
|
50
50
|
* @returns The disparity estimate
|
|
51
51
|
*/
|
|
52
52
|
export declare function disparity(x: number[], y: number[]): number;
|
|
53
|
+
/**
|
|
54
|
+
* Represents an interval with lower and upper bounds
|
|
55
|
+
*/
|
|
56
|
+
export interface Bounds {
|
|
57
|
+
lower: number;
|
|
58
|
+
upper: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Provides bounds on the Shift estimator with specified misclassification rate (ShiftBounds)
|
|
62
|
+
*
|
|
63
|
+
* The misrate represents the probability that the true shift falls outside the computed bounds.
|
|
64
|
+
* This is a pragmatic alternative to traditional confidence intervals for the Hodges-Lehmann estimator.
|
|
65
|
+
*
|
|
66
|
+
* @param x First sample
|
|
67
|
+
* @param y Second sample
|
|
68
|
+
* @param misrate Misclassification rate (probability that true shift falls outside bounds)
|
|
69
|
+
* @returns An object containing the lower and upper bounds
|
|
70
|
+
*/
|
|
71
|
+
export declare function shiftBounds(x: number[], y: number[], misrate: number): Bounds;
|
|
53
72
|
//# sourceMappingURL=estimators.d.ts.map
|
package/dist/estimators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimators.d.ts","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"estimators.d.ts","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAK1C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAK1C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAa7C;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAStD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBtD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoC7E"}
|
package/dist/estimators.js
CHANGED
|
@@ -10,10 +10,12 @@ exports.shift = shift;
|
|
|
10
10
|
exports.ratio = ratio;
|
|
11
11
|
exports.avgSpread = avgSpread;
|
|
12
12
|
exports.disparity = disparity;
|
|
13
|
+
exports.shiftBounds = shiftBounds;
|
|
13
14
|
const utils_1 = require("./utils");
|
|
14
15
|
const fastCenter_1 = require("./fastCenter");
|
|
15
16
|
const fastSpread_1 = require("./fastSpread");
|
|
16
17
|
const fastShift_1 = require("./fastShift");
|
|
18
|
+
const pairwiseMargin_1 = require("./pairwiseMargin");
|
|
17
19
|
/**
|
|
18
20
|
* Calculate the Center - median of all pairwise averages (x[i] + x[j])/2
|
|
19
21
|
* Uses fast O(n log n) algorithm.
|
|
@@ -21,6 +23,9 @@ const fastShift_1 = require("./fastShift");
|
|
|
21
23
|
* @returns The center estimate
|
|
22
24
|
*/
|
|
23
25
|
function center(x) {
|
|
26
|
+
if (x.length === 0) {
|
|
27
|
+
throw new Error('Input array cannot be empty');
|
|
28
|
+
}
|
|
24
29
|
return (0, fastCenter_1.fastCenter)(x);
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
@@ -30,6 +35,9 @@ function center(x) {
|
|
|
30
35
|
* @returns The spread estimate
|
|
31
36
|
*/
|
|
32
37
|
function spread(x) {
|
|
38
|
+
if (x.length === 0) {
|
|
39
|
+
throw new Error('Input array cannot be empty');
|
|
40
|
+
}
|
|
33
41
|
return (0, fastSpread_1.fastSpread)(x);
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
@@ -121,4 +129,44 @@ function disparity(x, y) {
|
|
|
121
129
|
}
|
|
122
130
|
return shiftVal / combinedSpread;
|
|
123
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Provides bounds on the Shift estimator with specified misclassification rate (ShiftBounds)
|
|
134
|
+
*
|
|
135
|
+
* The misrate represents the probability that the true shift falls outside the computed bounds.
|
|
136
|
+
* This is a pragmatic alternative to traditional confidence intervals for the Hodges-Lehmann estimator.
|
|
137
|
+
*
|
|
138
|
+
* @param x First sample
|
|
139
|
+
* @param y Second sample
|
|
140
|
+
* @param misrate Misclassification rate (probability that true shift falls outside bounds)
|
|
141
|
+
* @returns An object containing the lower and upper bounds
|
|
142
|
+
*/
|
|
143
|
+
function shiftBounds(x, y, misrate) {
|
|
144
|
+
if (x.length === 0 || y.length === 0) {
|
|
145
|
+
throw new Error('Input arrays cannot be empty');
|
|
146
|
+
}
|
|
147
|
+
const n = x.length;
|
|
148
|
+
const m = y.length;
|
|
149
|
+
// Sort both arrays
|
|
150
|
+
const xs = [...x].sort((a, b) => a - b);
|
|
151
|
+
const ys = [...y].sort((a, b) => a - b);
|
|
152
|
+
const total = n * m;
|
|
153
|
+
// Special case: when there's only one pairwise difference, bounds collapse to a single value
|
|
154
|
+
if (total === 1) {
|
|
155
|
+
const value = xs[0] - ys[0];
|
|
156
|
+
return { lower: value, upper: value };
|
|
157
|
+
}
|
|
158
|
+
const margin = (0, pairwiseMargin_1.pairwiseMargin)(n, m, misrate);
|
|
159
|
+
const halfMargin = Math.min(Math.floor(margin / 2), Math.floor((total - 1) / 2));
|
|
160
|
+
const kLeft = halfMargin;
|
|
161
|
+
const kRight = total - 1 - halfMargin;
|
|
162
|
+
// Compute quantile positions
|
|
163
|
+
const denominator = total - 1 || 1;
|
|
164
|
+
const pLeft = kLeft / denominator;
|
|
165
|
+
const pRight = kRight / denominator;
|
|
166
|
+
// Use fastShift to compute quantiles of pairwise differences
|
|
167
|
+
const [left, right] = (0, fastShift_1.fastShift)(xs, ys, [pLeft, pRight], true);
|
|
168
|
+
const lower = Math.min(left, right);
|
|
169
|
+
const upper = Math.max(left, right);
|
|
170
|
+
return { lower, upper };
|
|
171
|
+
}
|
|
124
172
|
//# sourceMappingURL=estimators.js.map
|
package/dist/estimators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimators.js","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"estimators.js","sourceRoot":"","sources":["../src/estimators.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A collection of robust statistical estimators for real-world data analysis.
|
|
5
5
|
*/
|
|
6
|
-
export { center, spread, relSpread, shift, ratio, avgSpread, disparity } from './estimators';
|
|
7
|
-
export {
|
|
6
|
+
export { center, spread, relSpread, shift, ratio, avgSpread, disparity, shiftBounds, type Bounds, } from './estimators';
|
|
7
|
+
export { pairwiseMargin } from './pairwiseMargin';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,KAAK,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,KAAK,MAAM,GACZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* A collection of robust statistical estimators for real-world data analysis.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.
|
|
8
|
+
exports.pairwiseMargin = exports.shiftBounds = exports.disparity = exports.avgSpread = exports.ratio = exports.shift = exports.relSpread = exports.spread = exports.center = void 0;
|
|
9
9
|
var estimators_1 = require("./estimators");
|
|
10
10
|
Object.defineProperty(exports, "center", { enumerable: true, get: function () { return estimators_1.center; } });
|
|
11
11
|
Object.defineProperty(exports, "spread", { enumerable: true, get: function () { return estimators_1.spread; } });
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "shift", { enumerable: true, get: function () { r
|
|
|
14
14
|
Object.defineProperty(exports, "ratio", { enumerable: true, get: function () { return estimators_1.ratio; } });
|
|
15
15
|
Object.defineProperty(exports, "avgSpread", { enumerable: true, get: function () { return estimators_1.avgSpread; } });
|
|
16
16
|
Object.defineProperty(exports, "disparity", { enumerable: true, get: function () { return estimators_1.disparity; } });
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
Object.defineProperty(exports, "shiftBounds", { enumerable: true, get: function () { return estimators_1.shiftBounds; } });
|
|
18
|
+
var pairwiseMargin_1 = require("./pairwiseMargin");
|
|
19
|
+
Object.defineProperty(exports, "pairwiseMargin", { enumerable: true, get: function () { return pairwiseMargin_1.pairwiseMargin; } });
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2CAUsB;AATpB,oGAAA,MAAM,OAAA;AACN,oGAAA,MAAM,OAAA;AACN,uGAAA,SAAS,OAAA;AACT,mGAAA,KAAK,OAAA;AACL,mGAAA,KAAK,OAAA;AACL,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,yGAAA,WAAW,OAAA;AAIb,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PairwiseMargin function for computing confidence bound margins
|
|
3
|
+
*
|
|
4
|
+
* Determines how many extreme pairwise differences to exclude when constructing bounds
|
|
5
|
+
* based on the distribution of dominance statistics.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* PairwiseMargin determines how many extreme pairwise differences to exclude
|
|
9
|
+
* when constructing bounds based on the distribution of dominance statistics.
|
|
10
|
+
* Uses exact calculation for small samples (n+m <= 400) and Edgeworth
|
|
11
|
+
* approximation for larger samples.
|
|
12
|
+
*
|
|
13
|
+
* @param n Sample size of first sample (must be positive)
|
|
14
|
+
* @param m Sample size of second sample (must be positive)
|
|
15
|
+
* @param misrate Misclassification rate (must be in [0, 1])
|
|
16
|
+
* @returns Integer representing the total margin split between lower and upper tails
|
|
17
|
+
* @throws Error if n <= 0, m <= 0, or misrate is outside [0, 1]
|
|
18
|
+
*/
|
|
19
|
+
export declare function pairwiseMargin(n: number, m: number, misrate: number): number;
|
|
20
|
+
//# sourceMappingURL=pairwiseMargin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairwiseMargin.d.ts","sourceRoot":"","sources":["../src/pairwiseMargin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgB5E"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PairwiseMargin function for computing confidence bound margins
|
|
4
|
+
*
|
|
5
|
+
* Determines how many extreme pairwise differences to exclude when constructing bounds
|
|
6
|
+
* based on the distribution of dominance statistics.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.pairwiseMargin = pairwiseMargin;
|
|
10
|
+
const MAX_EXACT_SIZE = 400;
|
|
11
|
+
const MAX_ACCEPTABLE_BINOM_N = 65;
|
|
12
|
+
/**
|
|
13
|
+
* PairwiseMargin determines how many extreme pairwise differences to exclude
|
|
14
|
+
* when constructing bounds based on the distribution of dominance statistics.
|
|
15
|
+
* Uses exact calculation for small samples (n+m <= 400) and Edgeworth
|
|
16
|
+
* approximation for larger samples.
|
|
17
|
+
*
|
|
18
|
+
* @param n Sample size of first sample (must be positive)
|
|
19
|
+
* @param m Sample size of second sample (must be positive)
|
|
20
|
+
* @param misrate Misclassification rate (must be in [0, 1])
|
|
21
|
+
* @returns Integer representing the total margin split between lower and upper tails
|
|
22
|
+
* @throws Error if n <= 0, m <= 0, or misrate is outside [0, 1]
|
|
23
|
+
*/
|
|
24
|
+
function pairwiseMargin(n, m, misrate) {
|
|
25
|
+
if (n <= 0) {
|
|
26
|
+
throw new Error('n must be positive');
|
|
27
|
+
}
|
|
28
|
+
if (m <= 0) {
|
|
29
|
+
throw new Error('m must be positive');
|
|
30
|
+
}
|
|
31
|
+
if (misrate < 0 || misrate > 1) {
|
|
32
|
+
throw new Error('misrate must be in range [0, 1]');
|
|
33
|
+
}
|
|
34
|
+
if (n + m <= MAX_EXACT_SIZE) {
|
|
35
|
+
return pairwiseMarginExact(n, m, misrate);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return pairwiseMarginApprox(n, m, misrate);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Uses the exact distribution based on Loeffler's recurrence
|
|
43
|
+
*/
|
|
44
|
+
function pairwiseMarginExact(n, m, misrate) {
|
|
45
|
+
return pairwiseMarginExactRaw(n, m, misrate / 2) * 2;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Uses Edgeworth approximation for large samples
|
|
49
|
+
*/
|
|
50
|
+
function pairwiseMarginApprox(n, m, misrate) {
|
|
51
|
+
return pairwiseMarginApproxRaw(n, m, misrate / 2) * 2;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Inversed implementation of Andreas Löffler's (1982)
|
|
55
|
+
* "Über eine Partition der nat. Zahlen und ihre Anwendung beim U-Test"
|
|
56
|
+
*/
|
|
57
|
+
function pairwiseMarginExactRaw(n, m, p) {
|
|
58
|
+
const total = n + m < MAX_ACCEPTABLE_BINOM_N
|
|
59
|
+
? binomialCoefficient(n + m, m)
|
|
60
|
+
: binomialCoefficientFloat(n + m, m);
|
|
61
|
+
const pmf = [1]; // pmf[0] = 1
|
|
62
|
+
const sigma = [0]; // sigma[0] is unused
|
|
63
|
+
let u = 0;
|
|
64
|
+
let cdf = 1.0 / total;
|
|
65
|
+
if (cdf >= p) {
|
|
66
|
+
return 0;
|
|
67
|
+
}
|
|
68
|
+
while (true) {
|
|
69
|
+
u++;
|
|
70
|
+
// Ensure sigma has entry for u
|
|
71
|
+
if (sigma.length <= u) {
|
|
72
|
+
let value = 0;
|
|
73
|
+
for (let d = 1; d <= n; d++) {
|
|
74
|
+
if (u % d === 0 && u >= d) {
|
|
75
|
+
value += d;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
for (let d = m + 1; d <= m + n; d++) {
|
|
79
|
+
if (u % d === 0 && u >= d) {
|
|
80
|
+
value -= d;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
sigma.push(value);
|
|
84
|
+
}
|
|
85
|
+
// Compute pmf[u] using Loeffler recurrence
|
|
86
|
+
let sum = 0.0;
|
|
87
|
+
for (let i = 0; i < u; i++) {
|
|
88
|
+
sum += pmf[i] * sigma[u - i];
|
|
89
|
+
}
|
|
90
|
+
sum /= u;
|
|
91
|
+
pmf.push(sum);
|
|
92
|
+
cdf += sum / total;
|
|
93
|
+
if (cdf >= p) {
|
|
94
|
+
return u;
|
|
95
|
+
}
|
|
96
|
+
if (sum === 0) {
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return pmf.length - 1;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Inverse Edgeworth Approximation
|
|
104
|
+
*/
|
|
105
|
+
function pairwiseMarginApproxRaw(n, m, misrate) {
|
|
106
|
+
let a = 0;
|
|
107
|
+
let b = n * m;
|
|
108
|
+
while (a < b - 1) {
|
|
109
|
+
const c = Math.floor((a + b) / 2);
|
|
110
|
+
const p = edgeworthCdf(n, m, c);
|
|
111
|
+
if (p < misrate) {
|
|
112
|
+
a = c;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
b = c;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return edgeworthCdf(n, m, b) < misrate ? b : a;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Computes the CDF using Edgeworth expansion
|
|
122
|
+
*/
|
|
123
|
+
function edgeworthCdf(n, m, u) {
|
|
124
|
+
const mu = (n * m) / 2.0;
|
|
125
|
+
const su = Math.sqrt((n * m * (n + m + 1)) / 12.0);
|
|
126
|
+
const z = (u - mu - 0.5) / su;
|
|
127
|
+
// Standard normal PDF and CDF
|
|
128
|
+
const phi = Math.exp((-z * z) / 2) / Math.sqrt(2 * Math.PI);
|
|
129
|
+
const bigPhi = gauss(z);
|
|
130
|
+
// Pre-compute powers of n and m for efficiency
|
|
131
|
+
const n2 = n * n;
|
|
132
|
+
const n3 = n2 * n;
|
|
133
|
+
const n4 = n2 * n2;
|
|
134
|
+
const m2 = m * m;
|
|
135
|
+
const m3 = m2 * m;
|
|
136
|
+
const m4 = m2 * m2;
|
|
137
|
+
// Compute moments
|
|
138
|
+
const mu2 = (n * m * (n + m + 1)) / 12.0;
|
|
139
|
+
const mu4 = (n * m * (n + m + 1) * (5 * m * n * (m + n) - 2 * (m2 + n2) + 3 * m * n - 2 * (n + m))) / 240.0;
|
|
140
|
+
const mu6 = (n *
|
|
141
|
+
m *
|
|
142
|
+
(n + m + 1) *
|
|
143
|
+
(35 * m2 * n2 * (m2 + n2) +
|
|
144
|
+
70 * m3 * n3 -
|
|
145
|
+
42 * m * n * (m3 + n3) -
|
|
146
|
+
14 * m2 * n2 * (n + m) +
|
|
147
|
+
16 * (n4 + m4) -
|
|
148
|
+
52 * n * m * (n2 + m2) -
|
|
149
|
+
43 * n2 * m2 +
|
|
150
|
+
32 * (m3 + n3) +
|
|
151
|
+
14 * m * n * (n + m) +
|
|
152
|
+
8 * (n2 + m2) +
|
|
153
|
+
16 * n * m -
|
|
154
|
+
8 * (n + m))) /
|
|
155
|
+
4032.0;
|
|
156
|
+
// Pre-compute powers of mu2 and related terms
|
|
157
|
+
const mu2_2 = mu2 * mu2;
|
|
158
|
+
const mu2_3 = mu2_2 * mu2;
|
|
159
|
+
const mu4_mu2_2 = mu4 / mu2_2;
|
|
160
|
+
// Factorial constants: 4! = 24, 6! = 720, 8! = 40320
|
|
161
|
+
const e3 = (mu4_mu2_2 - 3) / 24.0;
|
|
162
|
+
const e5 = (mu6 / mu2_3 - 15 * mu4_mu2_2 + 30) / 720.0;
|
|
163
|
+
const e7 = (35 * (mu4_mu2_2 - 3) * (mu4_mu2_2 - 3)) / 40320.0;
|
|
164
|
+
// Pre-compute powers of z for Hermite polynomials
|
|
165
|
+
const z2 = z * z;
|
|
166
|
+
const z3 = z2 * z;
|
|
167
|
+
const z5 = z3 * z2;
|
|
168
|
+
const z7 = z5 * z2;
|
|
169
|
+
// Hermite polynomial derivatives: f_n = -phi * H_n(z)
|
|
170
|
+
const f3 = -phi * (z3 - 3 * z);
|
|
171
|
+
const f5 = -phi * (z5 - 10 * z3 + 15 * z);
|
|
172
|
+
const f7 = -phi * (z7 - 21 * z5 + 105 * z3 - 105 * z);
|
|
173
|
+
// Edgeworth expansion
|
|
174
|
+
const edgeworth = bigPhi + e3 * f3 + e5 * f5 + e7 * f7;
|
|
175
|
+
// Clamp to [0, 1]
|
|
176
|
+
return Math.max(0, Math.min(1, edgeworth));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Computes the standard normal CDF using ACM Algorithm 209
|
|
180
|
+
*
|
|
181
|
+
* Calculates (1/sqrt(2*pi)) * integral from -infinity to x of e^(-u^2/2) du
|
|
182
|
+
* by means of polynomial approximations due to A. M. Murray of Aberdeen University.
|
|
183
|
+
*
|
|
184
|
+
* See: http://dl.acm.org/citation.cfm?id=367664
|
|
185
|
+
*
|
|
186
|
+
* @param x -infinity..+infinity
|
|
187
|
+
* @returns Area under the Standard Normal Curve from -infinity to x
|
|
188
|
+
*/
|
|
189
|
+
function gauss(x) {
|
|
190
|
+
let z;
|
|
191
|
+
if (Math.abs(x) < 1e-9) {
|
|
192
|
+
z = 0.0;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
let y = Math.abs(x) / 2;
|
|
196
|
+
if (y >= 3.0) {
|
|
197
|
+
z = 1.0;
|
|
198
|
+
}
|
|
199
|
+
else if (y < 1.0) {
|
|
200
|
+
const w = y * y;
|
|
201
|
+
z =
|
|
202
|
+
((((((((0.000124818987 * w - 0.001075204047) * w + 0.005198775019) * w - 0.019198292004) *
|
|
203
|
+
w +
|
|
204
|
+
0.059054035642) *
|
|
205
|
+
w -
|
|
206
|
+
0.151968751364) *
|
|
207
|
+
w +
|
|
208
|
+
0.319152932694) *
|
|
209
|
+
w -
|
|
210
|
+
0.5319230073) *
|
|
211
|
+
w +
|
|
212
|
+
0.797884560593) *
|
|
213
|
+
y *
|
|
214
|
+
2.0;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
y = y - 2.0;
|
|
218
|
+
z =
|
|
219
|
+
(((((((((((((-0.000045255659 * y + 0.00015252929) * y - 0.000019538132) * y -
|
|
220
|
+
0.000676904986) *
|
|
221
|
+
y +
|
|
222
|
+
0.001390604284) *
|
|
223
|
+
y -
|
|
224
|
+
0.00079462082) *
|
|
225
|
+
y -
|
|
226
|
+
0.002034254874) *
|
|
227
|
+
y +
|
|
228
|
+
0.006549791214) *
|
|
229
|
+
y -
|
|
230
|
+
0.010557625006) *
|
|
231
|
+
y +
|
|
232
|
+
0.011630447319) *
|
|
233
|
+
y -
|
|
234
|
+
0.009279453341) *
|
|
235
|
+
y +
|
|
236
|
+
0.005353579108) *
|
|
237
|
+
y -
|
|
238
|
+
0.002141268741) *
|
|
239
|
+
y +
|
|
240
|
+
0.000535310849) *
|
|
241
|
+
y +
|
|
242
|
+
0.999936657524;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return x > 0.0 ? (z + 1.0) / 2 : (1.0 - z) / 2;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Computes binomial coefficient C(n, k) using integer arithmetic
|
|
249
|
+
*/
|
|
250
|
+
function binomialCoefficient(n, k) {
|
|
251
|
+
if (k > n) {
|
|
252
|
+
return 0;
|
|
253
|
+
}
|
|
254
|
+
if (k === 0 || k === n) {
|
|
255
|
+
return 1;
|
|
256
|
+
}
|
|
257
|
+
k = Math.min(k, n - k); // Take advantage of symmetry
|
|
258
|
+
let result = 1;
|
|
259
|
+
for (let i = 0; i < k; i++) {
|
|
260
|
+
result = (result * (n - i)) / (i + 1);
|
|
261
|
+
}
|
|
262
|
+
return result;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Computes binomial coefficient using floating-point logarithms for large values
|
|
266
|
+
*/
|
|
267
|
+
function binomialCoefficientFloat(n, k) {
|
|
268
|
+
if (k > n) {
|
|
269
|
+
return 0;
|
|
270
|
+
}
|
|
271
|
+
if (k === 0 || k === n) {
|
|
272
|
+
return 1;
|
|
273
|
+
}
|
|
274
|
+
k = Math.min(k, n - k); // Take advantage of symmetry
|
|
275
|
+
// Use log-factorial function: C(n, k) = exp(log(n!) - log(k!) - log((n-k)!))
|
|
276
|
+
const logResult = logFactorial(n) - logFactorial(k) - logFactorial(n - k);
|
|
277
|
+
return Math.exp(logResult);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Computes the natural logarithm of n!
|
|
281
|
+
*/
|
|
282
|
+
function logFactorial(n) {
|
|
283
|
+
if (n === 0 || n === 1) {
|
|
284
|
+
return 0;
|
|
285
|
+
}
|
|
286
|
+
const x = n + 1; // n! = Gamma(n+1)
|
|
287
|
+
if (x < 1e-5) {
|
|
288
|
+
return 0;
|
|
289
|
+
}
|
|
290
|
+
// DONT TOUCH: Stirling's approximation is inaccurate for small x.
|
|
291
|
+
// Use Gamma recurrence: Gamma(x) = Gamma(x+k) / (x*(x+1)*...*(x+k-1))
|
|
292
|
+
// These branches appear unreachable in current usage (n+m >= 65), but
|
|
293
|
+
// are retained for correctness if the function is used in other contexts.
|
|
294
|
+
if (x < 1) {
|
|
295
|
+
return stirlingApproxLog(x + 3) - Math.log(x * (x + 1) * (x + 2));
|
|
296
|
+
}
|
|
297
|
+
if (x < 2) {
|
|
298
|
+
return stirlingApproxLog(x + 2) - Math.log(x * (x + 1));
|
|
299
|
+
}
|
|
300
|
+
if (x < 3) {
|
|
301
|
+
return stirlingApproxLog(x + 1) - Math.log(x);
|
|
302
|
+
}
|
|
303
|
+
return stirlingApproxLog(x);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Stirling's approximation with Bernoulli correction
|
|
307
|
+
*/
|
|
308
|
+
function stirlingApproxLog(x) {
|
|
309
|
+
let result = x * Math.log(x) - x + Math.log((2 * Math.PI) / x) / 2;
|
|
310
|
+
// Bernoulli correction series
|
|
311
|
+
const B2 = 1.0 / 6.0;
|
|
312
|
+
const B4 = -1.0 / 30.0;
|
|
313
|
+
const B6 = 1.0 / 42.0;
|
|
314
|
+
const B8 = -1.0 / 30.0;
|
|
315
|
+
const B10 = 5.0 / 66.0;
|
|
316
|
+
const x2 = x * x;
|
|
317
|
+
const x3 = x2 * x;
|
|
318
|
+
const x5 = x3 * x2;
|
|
319
|
+
const x7 = x5 * x2;
|
|
320
|
+
const x9 = x7 * x2;
|
|
321
|
+
result += B2 / (2 * x) + B4 / (12 * x3) + B6 / (30 * x5) + B8 / (56 * x7) + B10 / (90 * x9);
|
|
322
|
+
return result;
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=pairwiseMargin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairwiseMargin.js","sourceRoot":"","sources":["../src/pairwiseMargin.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiBH,wCAgBC;AA/BD,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,SAAgB,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,OAAe;IAClE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5B,OAAO,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAE,OAAe;IAChE,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,OAAe;IACjE,OAAO,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC7D,MAAM,KAAK,GACT,CAAC,GAAG,CAAC,GAAG,sBAAsB;QAC5B,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;IACxC,MAAM,KAAK,GAAa,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB;IAElD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;IAEtB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,CAAC,EAAE,CAAC;QAEJ,+BAA+B;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,2CAA2C;QAC3C,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,GAAG,IAAI,CAAC,CAAC;QACT,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEd,GAAG,IAAI,GAAG,GAAG,KAAK,CAAC;QACnB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,CAAS,EAAE,CAAS,EAAE,OAAe;IACpE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;YAChB,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;aAAM,CAAC;YACN,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACnD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAE9B,8BAA8B;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,+CAA+C;IAC/C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,kBAAkB;IAClB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzC,MAAM,GAAG,GACP,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAElG,MAAM,GAAG,GACP,CAAC,CAAC;QACA,CAAC;QACD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACX,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACvB,EAAE,GAAG,EAAE,GAAG,EAAE;YACZ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACtB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACtB,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACd,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACtB,EAAE,GAAG,EAAE,GAAG,EAAE;YACZ,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACd,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,EAAE,GAAG,CAAC,GAAG,CAAC;YACV,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC;IAET,8CAA8C;IAC9C,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;IAC1B,MAAM,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC;IAE9B,qDAAqD;IACrD,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;IACvD,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAE9D,kDAAkD;IAClD,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,sDAAsD;IACtD,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAEtD,sBAAsB;IACtB,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEvD,kBAAkB;IAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,KAAK,CAAC,CAAS;IACtB,IAAI,CAAS,CAAC;IACd,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;QACvB,CAAC,GAAG,GAAG,CAAC;IACV,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACb,CAAC,GAAG,GAAG,CAAC;QACV,CAAC;aAAM,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;gBACC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;oBACtF,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,YAAY,CAAC;oBACb,CAAC;oBACD,cAAc,CAAC;oBACjB,CAAC;oBACD,GAAG,CAAC;QACR,CAAC;aAAM,CAAC;YACN,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACZ,CAAC;gBACC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC;oBACzE,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,aAAa,CAAC;oBACd,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACD,cAAc,CAAC;oBACf,CAAC;oBACH,cAAc,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,CAAS,EAAE,CAAS;IAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B;IACrD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,CAAS,EAAE,CAAS;IACpD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,6BAA6B;IAErD,6EAA6E;IAC7E,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB;IAEnC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,kEAAkE;IAClE,sEAAsE;IACtE,sEAAsE;IACtE,0EAA0E;IAC1E,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,CAAS;IAClC,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnE,8BAA8B;IAC9B,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;IAEvB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAE5F,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -7,11 +7,4 @@
|
|
|
7
7
|
* @returns The median value
|
|
8
8
|
*/
|
|
9
9
|
export declare function median(values: number[]): number;
|
|
10
|
-
/**
|
|
11
|
-
* Generate all pairwise combinations of indices
|
|
12
|
-
* @param n Number of elements
|
|
13
|
-
* @param includeDiagonal Whether to include pairs (i, i)
|
|
14
|
-
* @returns Array of index pairs [i, j]
|
|
15
|
-
*/
|
|
16
|
-
export declare function getPairs(n: number, includeDiagonal?: boolean): [number, number][];
|
|
17
10
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAa/C
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAa/C"}
|
package/dist/utils.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.median = median;
|
|
7
|
-
exports.getPairs = getPairs;
|
|
8
7
|
/**
|
|
9
8
|
* Calculate the median of an array of numbers
|
|
10
9
|
* @param values Array of numbers
|
|
@@ -23,20 +22,4 @@ function median(values) {
|
|
|
23
22
|
return sorted[mid];
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Generate all pairwise combinations of indices
|
|
28
|
-
* @param n Number of elements
|
|
29
|
-
* @param includeDiagonal Whether to include pairs (i, i)
|
|
30
|
-
* @returns Array of index pairs [i, j]
|
|
31
|
-
*/
|
|
32
|
-
function getPairs(n, includeDiagonal = true) {
|
|
33
|
-
const pairs = [];
|
|
34
|
-
for (let i = 0; i < n; i++) {
|
|
35
|
-
const startJ = includeDiagonal ? i : i + 1;
|
|
36
|
-
for (let j = startJ; j < n; j++) {
|
|
37
|
-
pairs.push([i, j]);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return pairs;
|
|
41
|
-
}
|
|
42
25
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,wBAaC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,wBAaC;AAlBD;;;;GAIG;AACH,SAAgB,MAAM,CAAC,MAAgB;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC"}
|