mathjs 11.10.1 → 11.11.1
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +21 -2
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +4 -4
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesCorr.generated.js +36 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesPrintTransform.generated.js +24 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesCorr.generated.js +36 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +48 -35
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +17 -16
- package/lib/cjs/entry/pureFunctionsAny.generated.js +101 -76
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -28
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/statistics/corr.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/utils/print.js +1 -1
- package/lib/cjs/expression/node/FunctionNode.js +3 -1
- package/lib/cjs/expression/transform/print.transform.js +47 -0
- package/lib/cjs/expression/transform/quantileSeq.transform.js +27 -5
- package/lib/cjs/factoriesAny.js +15 -1
- package/lib/cjs/factoriesNumber.js +10 -4
- package/lib/cjs/function/algebra/simplify/util.js +2 -2
- package/lib/cjs/function/arithmetic/gcd.js +40 -4
- package/lib/cjs/function/arithmetic/mod.js +32 -3
- package/lib/cjs/function/numeric/solveODE.js +2 -2
- package/lib/cjs/function/statistics/corr.js +85 -0
- package/lib/cjs/function/statistics/quantileSeq.js +90 -167
- package/lib/cjs/function/string/print.js +5 -1
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/plain/number/arithmetic.js +4 -12
- package/lib/cjs/type/unit/Unit.js +2 -2
- package/lib/cjs/utils/print.js +8 -0
- package/lib/cjs/utils/snapshot.js +8 -8
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesCorr.generated.js +28 -0
- package/lib/esm/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesPrintTransform.generated.js +16 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesCorr.generated.js +28 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +49 -36
- package/lib/esm/entry/impureFunctionsNumber.generated.js +19 -18
- package/lib/esm/entry/pureFunctionsAny.generated.js +85 -61
- package/lib/esm/entry/pureFunctionsNumber.generated.js +39 -22
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/statistics/corr.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/utils/print.js +1 -1
- package/lib/esm/expression/node/FunctionNode.js +3 -1
- package/lib/esm/expression/transform/print.transform.js +42 -0
- package/lib/esm/expression/transform/quantileSeq.transform.js +23 -5
- package/lib/esm/factoriesAny.js +3 -1
- package/lib/esm/factoriesNumber.js +1 -0
- package/lib/esm/function/algebra/simplify/util.js +2 -2
- package/lib/esm/function/arithmetic/gcd.js +40 -4
- package/lib/esm/function/arithmetic/mod.js +32 -3
- package/lib/esm/function/numeric/solveODE.js +2 -2
- package/lib/esm/function/statistics/corr.js +74 -0
- package/lib/esm/function/statistics/quantileSeq.js +82 -165
- package/lib/esm/function/string/print.js +5 -1
- package/lib/esm/plain/number/arithmetic.js +4 -12
- package/lib/esm/type/unit/Unit.js +2 -2
- package/lib/esm/utils/print.js +1 -0
- package/lib/esm/utils/snapshot.js +2 -2
- package/lib/esm/version.js +1 -1
- package/package.json +21 -21
- package/types/index.d.ts +8 -0
package/lib/esm/factoriesAny.js
CHANGED
@@ -237,6 +237,7 @@ export { createMad } from './function/statistics/mad.js';
|
|
237
237
|
export { createVariance } from './function/statistics/variance.js';
|
238
238
|
export { createQuantileSeq } from './function/statistics/quantileSeq.js';
|
239
239
|
export { createStd } from './function/statistics/std.js';
|
240
|
+
export { createCorr } from './function/statistics/corr.js';
|
240
241
|
export { createCombinations } from './function/probability/combinations.js';
|
241
242
|
export { createCombinationsWithRep } from './function/probability/combinationsWithRep.js';
|
242
243
|
export { createGamma } from './function/probability/gamma.js';
|
@@ -286,4 +287,5 @@ export { createStdTransform } from './expression/transform/std.transform.js';
|
|
286
287
|
export { createSumTransform } from './expression/transform/sum.transform.js';
|
287
288
|
export { createQuantileSeqTransform } from './expression/transform/quantileSeq.transform.js';
|
288
289
|
export { createCumSumTransform } from './expression/transform/cumsum.transform.js';
|
289
|
-
export { createVarianceTransform } from './expression/transform/variance.transform.js';
|
290
|
+
export { createVarianceTransform } from './expression/transform/variance.transform.js';
|
291
|
+
export { createPrintTransform } from './expression/transform/print.transform.js';
|
@@ -175,6 +175,7 @@ export { createMad } from './function/statistics/mad.js';
|
|
175
175
|
export { createVariance } from './function/statistics/variance.js';
|
176
176
|
export { createQuantileSeq } from './function/statistics/quantileSeq.js';
|
177
177
|
export { createStd } from './function/statistics/std.js';
|
178
|
+
export { createCorr } from './function/statistics/corr.js';
|
178
179
|
|
179
180
|
// string
|
180
181
|
export { createFormat } from './function/string/format.js';
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
-
function ownKeys(
|
3
|
-
function _objectSpread(
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
4
4
|
import { isFunctionNode, isOperatorNode, isParenthesisNode } from '../../../utils/is.js';
|
5
5
|
import { factory } from '../../../utils/factory.js';
|
6
6
|
import { hasOwnProperty } from '../../../utils/object.js';
|
@@ -1,12 +1,13 @@
|
|
1
|
+
import { isInteger } from '../../utils/number.js';
|
1
2
|
import { factory } from '../../utils/factory.js';
|
3
|
+
import { createMod } from './mod.js';
|
2
4
|
import { createMatAlgo01xDSid } from '../../type/matrix/utils/matAlgo01xDSid.js';
|
3
5
|
import { createMatAlgo04xSidSid } from '../../type/matrix/utils/matAlgo04xSidSid.js';
|
4
6
|
import { createMatAlgo10xSids } from '../../type/matrix/utils/matAlgo10xSids.js';
|
5
7
|
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
6
|
-
import { gcdNumber } from '../../plain/number/index.js';
|
7
8
|
import { ArgumentsError } from '../../error/ArgumentsError.js';
|
8
9
|
var name = 'gcd';
|
9
|
-
var dependencies = ['typed', 'matrix', 'equalScalar', 'BigNumber', 'DenseMatrix', 'concat'];
|
10
|
+
var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix', 'concat'];
|
10
11
|
var gcdTypes = 'number | BigNumber | Fraction | Matrix | Array';
|
11
12
|
var gcdManyTypesSignature = "".concat(gcdTypes, ", ").concat(gcdTypes, ", ...").concat(gcdTypes);
|
12
13
|
function is1d(array) {
|
@@ -16,11 +17,24 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
16
17
|
var {
|
17
18
|
typed,
|
18
19
|
matrix,
|
20
|
+
config,
|
21
|
+
round,
|
19
22
|
equalScalar,
|
23
|
+
zeros,
|
20
24
|
BigNumber,
|
21
25
|
DenseMatrix,
|
22
26
|
concat
|
23
27
|
} = _ref;
|
28
|
+
var mod = createMod({
|
29
|
+
typed,
|
30
|
+
config,
|
31
|
+
round,
|
32
|
+
matrix,
|
33
|
+
equalScalar,
|
34
|
+
zeros,
|
35
|
+
DenseMatrix,
|
36
|
+
concat
|
37
|
+
});
|
24
38
|
var matAlgo01xDSid = createMatAlgo01xDSid({
|
25
39
|
typed
|
26
40
|
});
|
@@ -64,7 +78,7 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
64
78
|
* @return {number | BigNumber | Fraction | Array | Matrix} The greatest common divisor
|
65
79
|
*/
|
66
80
|
return typed(name, {
|
67
|
-
'number, number':
|
81
|
+
'number, number': _gcdNumber,
|
68
82
|
'BigNumber, BigNumber': _gcdBigNumber,
|
69
83
|
'Fraction, Fraction': (x, y) => x.gcd(y)
|
70
84
|
}, matrixAlgorithmSuite({
|
@@ -93,6 +107,28 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
93
107
|
})
|
94
108
|
});
|
95
109
|
|
110
|
+
/**
|
111
|
+
* Calculate gcd for numbers
|
112
|
+
* @param {number} a
|
113
|
+
* @param {number} b
|
114
|
+
* @returns {number} Returns the greatest common denominator of a and b
|
115
|
+
* @private
|
116
|
+
*/
|
117
|
+
function _gcdNumber(a, b) {
|
118
|
+
if (!isInteger(a) || !isInteger(b)) {
|
119
|
+
throw new Error('Parameters in function gcd must be integer numbers');
|
120
|
+
}
|
121
|
+
|
122
|
+
// https://en.wikipedia.org/wiki/Euclidean_algorithm
|
123
|
+
var r;
|
124
|
+
while (b !== 0) {
|
125
|
+
r = mod(a, b);
|
126
|
+
a = b;
|
127
|
+
b = r;
|
128
|
+
}
|
129
|
+
return a < 0 ? -a : a;
|
130
|
+
}
|
131
|
+
|
96
132
|
/**
|
97
133
|
* Calculate gcd for BigNumbers
|
98
134
|
* @param {BigNumber} a
|
@@ -108,7 +144,7 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
108
144
|
// https://en.wikipedia.org/wiki/Euclidean_algorithm
|
109
145
|
var zero = new BigNumber(0);
|
110
146
|
while (!b.isZero()) {
|
111
|
-
var r =
|
147
|
+
var r = mod(a, b);
|
112
148
|
a = b;
|
113
149
|
b = r;
|
114
150
|
}
|
@@ -1,21 +1,33 @@
|
|
1
1
|
import { factory } from '../../utils/factory.js';
|
2
|
+
import { createFloor } from './floor.js';
|
2
3
|
import { createMatAlgo02xDS0 } from '../../type/matrix/utils/matAlgo02xDS0.js';
|
3
4
|
import { createMatAlgo03xDSf } from '../../type/matrix/utils/matAlgo03xDSf.js';
|
4
5
|
import { createMatAlgo05xSfSf } from '../../type/matrix/utils/matAlgo05xSfSf.js';
|
5
6
|
import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
|
6
7
|
import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
|
7
|
-
import { modNumber } from '../../plain/number/index.js';
|
8
8
|
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
9
9
|
var name = 'mod';
|
10
|
-
var dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix', 'concat'];
|
10
|
+
var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix', 'concat'];
|
11
11
|
export var createMod = /* #__PURE__ */factory(name, dependencies, _ref => {
|
12
12
|
var {
|
13
13
|
typed,
|
14
|
+
config,
|
15
|
+
round,
|
14
16
|
matrix,
|
15
17
|
equalScalar,
|
18
|
+
zeros,
|
16
19
|
DenseMatrix,
|
17
20
|
concat
|
18
21
|
} = _ref;
|
22
|
+
var floor = createFloor({
|
23
|
+
typed,
|
24
|
+
config,
|
25
|
+
round,
|
26
|
+
matrix,
|
27
|
+
equalScalar,
|
28
|
+
zeros,
|
29
|
+
DenseMatrix
|
30
|
+
});
|
19
31
|
var matAlgo02xDS0 = createMatAlgo02xDS0({
|
20
32
|
typed,
|
21
33
|
equalScalar
|
@@ -77,7 +89,7 @@ export var createMod = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
77
89
|
* @return {number | BigNumber | Fraction | Array | Matrix} Returns the remainder of `x` divided by `y`.
|
78
90
|
*/
|
79
91
|
return typed(name, {
|
80
|
-
'number, number':
|
92
|
+
'number, number': _modNumber,
|
81
93
|
'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
|
82
94
|
if (y.isNeg()) {
|
83
95
|
throw new Error('Cannot calculate mod for a negative divisor');
|
@@ -98,4 +110,21 @@ export var createMod = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
98
110
|
Ss: matAlgo11xS0s,
|
99
111
|
sS: matAlgo12xSfs
|
100
112
|
}));
|
113
|
+
|
114
|
+
/**
|
115
|
+
* Calculate the modulus of two numbers
|
116
|
+
* @param {number} x
|
117
|
+
* @param {number} y
|
118
|
+
* @returns {number} res
|
119
|
+
* @private
|
120
|
+
*/
|
121
|
+
function _modNumber(x, y) {
|
122
|
+
// We don't use JavaScript's % operator here as this doesn't work
|
123
|
+
// correctly for x < 0 and x === 0
|
124
|
+
// see https://en.wikipedia.org/wiki/Modulo_operation
|
125
|
+
|
126
|
+
// We use mathjs floor to handle errors associated with
|
127
|
+
// precision float approximation
|
128
|
+
return y === 0 ? x : x - y * floor(x / y);
|
129
|
+
}
|
101
130
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
-
function ownKeys(
|
3
|
-
function _objectSpread(
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
4
4
|
import { isUnit, isNumber, isBigNumber } from '../../utils/is.js';
|
5
5
|
import { factory } from '../../utils/factory.js';
|
6
6
|
var name = 'solveODE';
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import { factory } from '../../utils/factory.js';
|
2
|
+
var name = 'corr';
|
3
|
+
var dependencies = ['typed', 'matrix', 'mean', 'sqrt', 'sum', 'add', 'subtract', 'multiply', 'pow', 'divide'];
|
4
|
+
export var createCorr = /* #__PURE__ */factory(name, dependencies, _ref => {
|
5
|
+
var {
|
6
|
+
typed,
|
7
|
+
matrix,
|
8
|
+
sqrt,
|
9
|
+
sum,
|
10
|
+
add,
|
11
|
+
subtract,
|
12
|
+
multiply,
|
13
|
+
pow,
|
14
|
+
divide
|
15
|
+
} = _ref;
|
16
|
+
/**
|
17
|
+
* Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.
|
18
|
+
*
|
19
|
+
* Syntax:
|
20
|
+
*
|
21
|
+
* math.corr(A, B)
|
22
|
+
*
|
23
|
+
* Examples:
|
24
|
+
*
|
25
|
+
* math.corr([1, 2, 3, 4, 5], [4, 5, 6, 7, 8]) // returns 1
|
26
|
+
* math.corr([1, 2.2, 3, 4.8, 5], [4, 5.3, 6.6, 7, 8]) // returns 0.9569941688503644
|
27
|
+
* math.corr(math.matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), math.matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]])) // returns DenseMatrix [0.9569941688503644, 1]
|
28
|
+
*
|
29
|
+
* See also:
|
30
|
+
*
|
31
|
+
* median, mean, min, max, sum, prod, std, variance
|
32
|
+
*
|
33
|
+
* @param {Array | Matrix} A The first array or matrix to compute correlation coefficient
|
34
|
+
* @param {Array | Matrix} B The second array or matrix to compute correlation coefficient
|
35
|
+
* @return {*} The correlation coefficient
|
36
|
+
*/
|
37
|
+
return typed(name, {
|
38
|
+
'Array, Array': function ArrayArray(A, B) {
|
39
|
+
return _corr(A, B);
|
40
|
+
},
|
41
|
+
'Matrix, Matrix': function MatrixMatrix(xMatrix, yMatrix) {
|
42
|
+
return matrix(_corr(xMatrix.toArray(), yMatrix.toArray()));
|
43
|
+
}
|
44
|
+
});
|
45
|
+
/**
|
46
|
+
* Calculate the correlation coefficient between two arrays or matrices.
|
47
|
+
* @param {Array | Matrix} A
|
48
|
+
* @param {Array | Matrix} B
|
49
|
+
* @return {*} correlation coefficient
|
50
|
+
* @private
|
51
|
+
*/
|
52
|
+
function _corr(A, B) {
|
53
|
+
if (Array.isArray(A[0]) && Array.isArray(B[0])) {
|
54
|
+
var correlations = [];
|
55
|
+
for (var i = 0; i < A.length; i++) {
|
56
|
+
correlations.push(correlation(A[i], B[i]));
|
57
|
+
}
|
58
|
+
return correlations;
|
59
|
+
} else {
|
60
|
+
return correlation(A, B);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
function correlation(A, B) {
|
64
|
+
var n = A.length;
|
65
|
+
var sumX = sum(A);
|
66
|
+
var sumY = sum(B);
|
67
|
+
var sumXY = A.reduce((acc, x, index) => add(acc, multiply(x, B[index])), 0);
|
68
|
+
var sumXSquare = sum(A.map(x => pow(x, 2)));
|
69
|
+
var sumYSquare = sum(B.map(y => pow(y, 2)));
|
70
|
+
var numerator = subtract(multiply(n, sumXY), multiply(sumX, sumY));
|
71
|
+
var denominator = sqrt(multiply(subtract(multiply(n, sumXSquare), pow(sumX, 2)), subtract(multiply(n, sumYSquare), pow(sumY, 2))));
|
72
|
+
return divide(numerator, denominator);
|
73
|
+
}
|
74
|
+
});
|
@@ -1,18 +1,29 @@
|
|
1
|
-
import {
|
1
|
+
import { isNumber } from '../../utils/is.js';
|
2
2
|
import { flatten } from '../../utils/array.js';
|
3
3
|
import { factory } from '../../utils/factory.js';
|
4
4
|
import { createApply } from '../matrix/apply.js';
|
5
5
|
var name = 'quantileSeq';
|
6
|
-
var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
|
6
|
+
var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
|
7
7
|
export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
8
|
var {
|
9
9
|
typed,
|
10
|
+
bignumber,
|
10
11
|
add,
|
12
|
+
subtract,
|
13
|
+
divide,
|
11
14
|
multiply,
|
12
15
|
partitionSelect,
|
13
16
|
compare,
|
14
|
-
isInteger
|
17
|
+
isInteger,
|
18
|
+
smaller,
|
19
|
+
smallerEq,
|
20
|
+
larger
|
15
21
|
} = _ref;
|
22
|
+
var apply = createApply({
|
23
|
+
typed,
|
24
|
+
isInteger
|
25
|
+
});
|
26
|
+
|
16
27
|
/**
|
17
28
|
* Compute the prob order quantile of a matrix or a list with values.
|
18
29
|
* The sequence is sorted and the middle value is returned.
|
@@ -47,122 +58,69 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
47
58
|
* @param {Boolean} sorted=false is data sorted in ascending order
|
48
59
|
* @return {Number, BigNumber, Unit, Array} Quantile(s)
|
49
60
|
*/
|
50
|
-
|
51
|
-
var apply = createApply({
|
52
|
-
typed,
|
53
|
-
isInteger
|
54
|
-
});
|
55
|
-
/**
|
56
|
-
* Check if array value types are valid, throw error otherwise.
|
57
|
-
* @param {number | BigNumber | Unit} x
|
58
|
-
* @param {number | BigNumber | Unit} x
|
59
|
-
* @private
|
60
|
-
*/
|
61
|
-
var validate = typed({
|
62
|
-
'number | BigNumber | Unit': function numberBigNumberUnit(x) {
|
63
|
-
return x;
|
64
|
-
}
|
65
|
-
});
|
66
61
|
return typed(name, {
|
67
|
-
'Array|Matrix, number|BigNumber
|
68
|
-
'Array|Matrix, number|BigNumber
|
69
|
-
'Array|Matrix, number|BigNumber
|
70
|
-
'Array|Matrix, number|BigNumber
|
62
|
+
'Array | Matrix, number | BigNumber': (data, p) => _quantileSeqProbNumber(data, p, false),
|
63
|
+
'Array | Matrix, number | BigNumber, number': (data, prob, dim) => _quantileSeqDim(data, prob, false, dim, _quantileSeqProbNumber),
|
64
|
+
'Array | Matrix, number | BigNumber, boolean': _quantileSeqProbNumber,
|
65
|
+
'Array | Matrix, number | BigNumber, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbNumber),
|
66
|
+
'Array | Matrix, Array | Matrix': (data, p) => _quantileSeqProbCollection(data, p, false),
|
67
|
+
'Array | Matrix, Array | Matrix, number': (data, prob, dim) => _quantileSeqDim(data, prob, false, dim, _quantileSeqProbCollection),
|
68
|
+
'Array | Matrix, Array | Matrix, boolean': _quantileSeqProbCollection,
|
69
|
+
'Array | Matrix, Array | Matrix, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection)
|
71
70
|
});
|
72
|
-
function _quantileSeqDim(data, prob, sorted, dim) {
|
73
|
-
|
74
|
-
return apply(data, dim, x => quantileSeq(x, prob, sorted));
|
71
|
+
function _quantileSeqDim(data, prob, sorted, dim, fn) {
|
72
|
+
return apply(data, dim, x => fn(x, prob, sorted));
|
75
73
|
}
|
76
|
-
function
|
77
|
-
var probArr
|
78
|
-
|
79
|
-
|
74
|
+
function _quantileSeqProbNumber(data, probOrN, sorted) {
|
75
|
+
var probArr;
|
76
|
+
var dataArr = data.valueOf();
|
77
|
+
if (smaller(probOrN, 0)) {
|
78
|
+
throw new Error('N/prob must be non-negative');
|
80
79
|
}
|
81
|
-
if (
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
if (probOrN <= 1) {
|
90
|
-
// quantileSeq([a, b, c, d, ...], prob[,sorted])
|
91
|
-
return _quantileSeq(dataArr, probOrN, sorted);
|
92
|
-
}
|
93
|
-
if (probOrN > 1) {
|
94
|
-
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
95
|
-
if (!isInteger(probOrN)) {
|
96
|
-
throw new Error('N must be a positive integer');
|
97
|
-
}
|
98
|
-
var nPlusOne = probOrN + 1;
|
99
|
-
probArr = new Array(probOrN);
|
100
|
-
for (var i = 0; i < probOrN;) {
|
101
|
-
probArr[i] = _quantileSeq(dataArr, ++i / nPlusOne, sorted);
|
102
|
-
}
|
103
|
-
return probArr;
|
104
|
-
}
|
105
|
-
}
|
106
|
-
if (isBigNumber(probOrN)) {
|
107
|
-
var BigNumber = probOrN.constructor;
|
108
|
-
if (probOrN.isNegative()) {
|
109
|
-
throw new Error('N/prob must be non-negative');
|
110
|
-
}
|
111
|
-
one = new BigNumber(1);
|
112
|
-
if (probOrN.lte(one)) {
|
113
|
-
// quantileSeq([a, b, c, d, ...], prob[,sorted])
|
114
|
-
return new BigNumber(_quantileSeq(dataArr, probOrN, sorted));
|
115
|
-
}
|
116
|
-
if (probOrN.gt(one)) {
|
117
|
-
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
118
|
-
if (!probOrN.isInteger()) {
|
119
|
-
throw new Error('N must be a positive integer');
|
120
|
-
}
|
121
|
-
|
122
|
-
// largest possible Array length is 2^32-1
|
123
|
-
// 2^32 < 10^15, thus safe conversion guaranteed
|
124
|
-
var intN = probOrN.toNumber();
|
125
|
-
if (intN > 4294967295) {
|
126
|
-
throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
|
127
|
-
}
|
128
|
-
var _nPlusOne = new BigNumber(intN + 1);
|
129
|
-
probArr = new Array(intN);
|
130
|
-
for (var _i = 0; _i < intN;) {
|
131
|
-
probArr[_i] = new BigNumber(_quantileSeq(dataArr, new BigNumber(++_i).div(_nPlusOne), sorted));
|
132
|
-
}
|
133
|
-
return probArr;
|
134
|
-
}
|
135
|
-
}
|
136
|
-
if (isCollection(probOrN)) {
|
137
|
-
// quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
|
138
|
-
var probOrNArr = probOrN.valueOf();
|
139
|
-
probArr = new Array(probOrNArr.length);
|
140
|
-
for (var _i2 = 0; _i2 < probArr.length; ++_i2) {
|
141
|
-
var currProb = probOrNArr[_i2];
|
142
|
-
if (isNumber(currProb)) {
|
143
|
-
if (currProb < 0 || currProb > 1) {
|
144
|
-
throw new Error('Probability must be between 0 and 1, inclusive');
|
145
|
-
}
|
146
|
-
} else if (isBigNumber(currProb)) {
|
147
|
-
one = new currProb.constructor(1);
|
148
|
-
if (currProb.isNegative() || currProb.gt(one)) {
|
149
|
-
throw new Error('Probability must be between 0 and 1, inclusive');
|
150
|
-
}
|
151
|
-
} else {
|
152
|
-
throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
|
153
|
-
}
|
154
|
-
|
155
|
-
probArr[_i2] = _quantileSeq(dataArr, currProb, sorted);
|
156
|
-
}
|
157
|
-
return probArr;
|
158
|
-
}
|
159
|
-
throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
|
80
|
+
if (smallerEq(probOrN, 1)) {
|
81
|
+
// quantileSeq([a, b, c, d, ...], prob[,sorted])
|
82
|
+
return isNumber(probOrN) ? _quantileSeq(dataArr, probOrN, sorted) : bignumber(_quantileSeq(dataArr, probOrN, sorted));
|
83
|
+
}
|
84
|
+
if (larger(probOrN, 1)) {
|
85
|
+
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
86
|
+
if (!isInteger(probOrN)) {
|
87
|
+
throw new Error('N must be a positive integer');
|
160
88
|
}
|
161
89
|
|
162
|
-
|
90
|
+
// largest possible Array length is 2^32-1
|
91
|
+
// 2^32 < 10^15, thus safe conversion guaranteed
|
92
|
+
if (larger(probOrN, 4294967295)) {
|
93
|
+
throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
|
94
|
+
}
|
95
|
+
var nPlusOne = add(probOrN, 1);
|
96
|
+
probArr = [];
|
97
|
+
for (var i = 0; smaller(i, probOrN); i++) {
|
98
|
+
var prob = divide(i + 1, nPlusOne);
|
99
|
+
probArr.push(_quantileSeq(dataArr, prob, sorted));
|
100
|
+
}
|
101
|
+
return isNumber(probOrN) ? probArr : bignumber(probArr);
|
163
102
|
}
|
103
|
+
}
|
164
104
|
|
165
|
-
|
105
|
+
/**
|
106
|
+
* Calculate the prob order quantile of an n-dimensional array.
|
107
|
+
*
|
108
|
+
* @param {Array, Matrix} array
|
109
|
+
* @param {Array, Matrix} prob
|
110
|
+
* @param {Boolean} sorted
|
111
|
+
* @return {Number, BigNumber, Unit} prob order quantile
|
112
|
+
* @private
|
113
|
+
*/
|
114
|
+
|
115
|
+
function _quantileSeqProbCollection(data, probOrN, sorted) {
|
116
|
+
var dataArr = data.valueOf();
|
117
|
+
// quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
|
118
|
+
var probOrNArr = probOrN.valueOf();
|
119
|
+
var probArr = [];
|
120
|
+
for (var i = 0; i < probOrNArr.length; ++i) {
|
121
|
+
probArr.push(_quantileSeq(dataArr, probOrNArr[i], sorted));
|
122
|
+
}
|
123
|
+
return probArr;
|
166
124
|
}
|
167
125
|
|
168
126
|
/**
|
@@ -180,70 +138,29 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
180
138
|
if (len === 0) {
|
181
139
|
throw new Error('Cannot calculate quantile of an empty sequence');
|
182
140
|
}
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
validate(value);
|
189
|
-
return value;
|
190
|
-
}
|
191
|
-
var _integerPart = Math.floor(_index);
|
192
|
-
var _left;
|
193
|
-
var _right;
|
194
|
-
if (sorted) {
|
195
|
-
_left = flat[_integerPart];
|
196
|
-
_right = flat[_integerPart + 1];
|
197
|
-
} else {
|
198
|
-
_right = partitionSelect(flat, _integerPart + 1);
|
199
|
-
|
200
|
-
// max of partition is kth largest
|
201
|
-
_left = flat[_integerPart];
|
202
|
-
for (var i = 0; i < _integerPart; ++i) {
|
203
|
-
if (compare(flat[i], _left) > 0) {
|
204
|
-
_left = flat[i];
|
205
|
-
}
|
206
|
-
}
|
207
|
-
}
|
208
|
-
validate(_left);
|
209
|
-
validate(_right);
|
210
|
-
|
211
|
-
// Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
|
212
|
-
return add(multiply(_left, 1 - _fracPart), multiply(_right, _fracPart));
|
213
|
-
}
|
214
|
-
|
215
|
-
// If prob is a BigNumber
|
216
|
-
var index = prob.times(len - 1);
|
217
|
-
if (index.isInteger()) {
|
218
|
-
index = index.toNumber();
|
219
|
-
var _value = sorted ? flat[index] : partitionSelect(flat, index);
|
220
|
-
validate(_value);
|
221
|
-
return _value;
|
141
|
+
var index = isNumber(prob) ? prob * (len - 1) : prob.times(len - 1);
|
142
|
+
var integerPart = isNumber(prob) ? Math.floor(index) : index.floor().toNumber();
|
143
|
+
var fracPart = isNumber(prob) ? index % 1 : index.minus(integerPart);
|
144
|
+
if (isInteger(index)) {
|
145
|
+
return sorted ? flat[index] : partitionSelect(flat, isNumber(prob) ? index : index.valueOf());
|
222
146
|
}
|
223
|
-
var integerPart = index.floor();
|
224
|
-
var fracPart = index.minus(integerPart);
|
225
|
-
var integerPartNumber = integerPart.toNumber();
|
226
147
|
var left;
|
227
148
|
var right;
|
228
149
|
if (sorted) {
|
229
|
-
left = flat[
|
230
|
-
right = flat[
|
150
|
+
left = flat[integerPart];
|
151
|
+
right = flat[integerPart + 1];
|
231
152
|
} else {
|
232
|
-
right = partitionSelect(flat,
|
153
|
+
right = partitionSelect(flat, integerPart + 1);
|
233
154
|
|
234
155
|
// max of partition is kth largest
|
235
|
-
left = flat[
|
236
|
-
for (var
|
237
|
-
if (compare(flat[
|
238
|
-
left = flat[
|
156
|
+
left = flat[integerPart];
|
157
|
+
for (var i = 0; i < integerPart; ++i) {
|
158
|
+
if (compare(flat[i], left) > 0) {
|
159
|
+
left = flat[i];
|
239
160
|
}
|
240
161
|
}
|
241
162
|
}
|
242
|
-
validate(left);
|
243
|
-
validate(right);
|
244
|
-
|
245
163
|
// Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
|
246
|
-
|
247
|
-
return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));
|
164
|
+
return add(multiply(left, subtract(1, fracPart)), multiply(right, fracPart));
|
248
165
|
}
|
249
166
|
});
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { format } from '../../utils/string.js';
|
2
2
|
import { isString } from '../../utils/is.js';
|
3
3
|
import { factory } from '../../utils/factory.js';
|
4
|
+
import { printTemplate } from '../../utils/print.js';
|
4
5
|
var name = 'print';
|
5
6
|
var dependencies = ['typed'];
|
6
7
|
export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
|
@@ -67,9 +68,12 @@ export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
67
68
|
* @private
|
68
69
|
*/
|
69
70
|
function _print(template, values, options) {
|
70
|
-
return template.replace(
|
71
|
+
return template.replace(printTemplate, function (original, key) {
|
71
72
|
var keys = key.split('.');
|
72
73
|
var value = values[keys.shift()];
|
74
|
+
if (value !== undefined && value.isMatrix) {
|
75
|
+
value = value.toArray();
|
76
|
+
}
|
73
77
|
while (keys.length && value !== undefined) {
|
74
78
|
var k = keys.shift();
|
75
79
|
value = k ? value[k] : value + '.';
|
@@ -146,18 +146,10 @@ log1pNumber.signature = n1;
|
|
146
146
|
* @private
|
147
147
|
*/
|
148
148
|
export function modNumber(x, y) {
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
return x - y * Math.floor(x / y);
|
154
|
-
} else if (y === 0) {
|
155
|
-
return x;
|
156
|
-
} else {
|
157
|
-
// y < 0
|
158
|
-
// TODO: implement mod for a negative divisor
|
159
|
-
throw new Error('Cannot calculate mod for a negative divisor');
|
160
|
-
}
|
149
|
+
// We don't use JavaScript's % operator here as this doesn't work
|
150
|
+
// correctly for x < 0 and x === 0
|
151
|
+
// see https://en.wikipedia.org/wiki/Modulo_operation
|
152
|
+
return y === 0 ? x : x - y * Math.floor(x / y);
|
161
153
|
}
|
162
154
|
modNumber.signature = n2;
|
163
155
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
2
|
import _extends from "@babel/runtime/helpers/extends";
|
3
|
-
function ownKeys(
|
4
|
-
function _objectSpread(
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
5
5
|
import { isComplex, isUnit, typeOf } from '../../utils/is.js';
|
6
6
|
import { factory } from '../../utils/factory.js';
|
7
7
|
import { memoize } from '../../utils/function.js';
|
@@ -0,0 +1 @@
|
|
1
|
+
export var printTemplate = /\$([\w.]+)/g;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
3
|
-
function ownKeys(
|
4
|
-
function _objectSpread(
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
5
5
|
/**
|
6
6
|
* This file contains helper methods to create expected snapshot structures
|
7
7
|
* of both instance and ES6 exports.
|