mathjs 14.0.1 → 14.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +20 -0
- package/NOTICE +1 -1
- package/README.md +7 -7
- package/bin/cli.js +1 -1
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +5 -5
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/function/import.js +14 -4
- package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
- package/lib/cjs/entry/dependenciesAny/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
- package/lib/cjs/entry/dependenciesAny.generated.js +14 -14
- package/lib/cjs/entry/dependenciesNumber/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
- package/lib/cjs/entry/dependenciesNumber/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
- package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
- package/lib/cjs/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
- package/lib/cjs/entry/dependenciesNumber.generated.js +14 -14
- package/lib/cjs/entry/impureFunctionsAny.generated.js +86 -85
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +14 -14
- package/lib/cjs/entry/pureFunctionsAny.generated.js +330 -325
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +18 -15
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/mapSlices.js +17 -0
- package/lib/cjs/expression/transform/index.transform.js +2 -2
- package/lib/cjs/expression/transform/{apply.transform.js → mapSlices.transform.js} +11 -10
- package/lib/cjs/expression/transform/quantileSeq.transform.js +5 -3
- package/lib/cjs/expression/transform/variance.transform.js +3 -3
- package/lib/cjs/factoriesAny.js +14 -14
- package/lib/cjs/factoriesNumber.js +16 -15
- package/lib/cjs/function/arithmetic/ceil.js +34 -26
- package/lib/cjs/function/arithmetic/fix.js +3 -0
- package/lib/cjs/function/arithmetic/floor.js +41 -26
- package/lib/cjs/function/arithmetic/log.js +12 -5
- package/lib/cjs/function/arithmetic/log10.js +15 -7
- package/lib/cjs/function/arithmetic/log2.js +9 -4
- package/lib/cjs/function/arithmetic/round.js +4 -0
- package/lib/cjs/function/matrix/ctranspose.js +1 -1
- package/lib/cjs/function/matrix/{apply.js → mapSlices.js} +19 -12
- package/lib/cjs/function/matrix/matrixFromFunction.js +36 -3
- package/lib/cjs/function/matrix/range.js +54 -5
- package/lib/cjs/function/probability/randomInt.js +26 -3
- package/lib/cjs/function/relational/larger.js +12 -4
- package/lib/cjs/function/relational/smaller.js +12 -4
- package/lib/cjs/function/statistics/max.js +1 -1
- package/lib/cjs/function/statistics/min.js +1 -1
- package/lib/cjs/function/statistics/quantileSeq.js +4 -9
- package/lib/cjs/function/statistics/variance.js +3 -3
- package/lib/cjs/function/string/hex.js +1 -1
- package/lib/cjs/function/string/print.js +2 -2
- package/lib/cjs/function/trigonometry/acoth.js +1 -1
- package/lib/cjs/function/trigonometry/acsc.js +1 -1
- package/lib/cjs/function/trigonometry/asin.js +1 -1
- package/lib/cjs/function/trigonometry/atan2.js +2 -1
- package/lib/cjs/function/trigonometry/cos.js +1 -1
- package/lib/cjs/function/trigonometry/sin.js +1 -1
- package/lib/cjs/function/utils/isInteger.js +1 -1
- package/lib/cjs/header.js +3 -3
- package/lib/cjs/type/matrix/MatrixIndex.js +6 -3
- package/lib/cjs/type/matrix/Range.js +15 -8
- package/lib/cjs/utils/bigint.js +33 -0
- package/lib/cjs/utils/factory.js +5 -2
- package/lib/cjs/utils/number.js +7 -19
- package/lib/cjs/utils/snapshot.js +8 -1
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/function/import.js +14 -4
- package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
- package/lib/esm/entry/{dependenciesNumber/dependenciesApply.generated.js → dependenciesAny/dependenciesMapSlices.generated.js} +3 -3
- package/lib/esm/entry/{dependenciesNumber/dependenciesApplyTransform.generated.js → dependenciesAny/dependenciesMapSlicesTransform.generated.js} +3 -3
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
- package/lib/esm/entry/dependenciesAny.generated.js +2 -2
- package/lib/esm/entry/{dependenciesAny/dependenciesApply.generated.js → dependenciesNumber/dependenciesMapSlices.generated.js} +3 -3
- package/lib/esm/entry/{dependenciesAny/dependenciesApplyTransform.generated.js → dependenciesNumber/dependenciesMapSlicesTransform.generated.js} +3 -3
- package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
- package/lib/esm/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
- package/lib/esm/entry/dependenciesNumber.generated.js +2 -2
- package/lib/esm/entry/impureFunctionsAny.generated.js +88 -87
- package/lib/esm/entry/impureFunctionsNumber.generated.js +16 -16
- package/lib/esm/entry/pureFunctionsAny.generated.js +328 -323
- package/lib/esm/entry/pureFunctionsNumber.generated.js +17 -14
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/mapSlices.js +11 -0
- package/lib/esm/expression/transform/index.transform.js +3 -3
- package/lib/esm/expression/transform/mapSlices.transform.js +47 -0
- package/lib/esm/expression/transform/quantileSeq.transform.js +5 -3
- package/lib/esm/expression/transform/variance.transform.js +3 -3
- package/lib/esm/factoriesAny.js +2 -2
- package/lib/esm/factoriesNumber.js +2 -2
- package/lib/esm/function/arithmetic/ceil.js +35 -27
- package/lib/esm/function/arithmetic/fix.js +3 -0
- package/lib/esm/function/arithmetic/floor.js +42 -27
- package/lib/esm/function/arithmetic/log.js +12 -5
- package/lib/esm/function/arithmetic/log10.js +16 -8
- package/lib/esm/function/arithmetic/log2.js +9 -4
- package/lib/esm/function/arithmetic/round.js +4 -0
- package/lib/esm/function/matrix/ctranspose.js +1 -1
- package/lib/esm/function/matrix/{apply.js → mapSlices.js} +18 -11
- package/lib/esm/function/matrix/matrixFromFunction.js +36 -3
- package/lib/esm/function/matrix/range.js +54 -5
- package/lib/esm/function/probability/randomInt.js +26 -3
- package/lib/esm/function/relational/larger.js +12 -4
- package/lib/esm/function/relational/smaller.js +12 -4
- package/lib/esm/function/statistics/max.js +1 -1
- package/lib/esm/function/statistics/min.js +1 -1
- package/lib/esm/function/statistics/quantileSeq.js +4 -9
- package/lib/esm/function/statistics/variance.js +3 -3
- package/lib/esm/function/string/hex.js +1 -1
- package/lib/esm/function/string/print.js +2 -2
- package/lib/esm/function/trigonometry/acoth.js +1 -1
- package/lib/esm/function/trigonometry/acsc.js +1 -1
- package/lib/esm/function/trigonometry/asin.js +1 -1
- package/lib/esm/function/trigonometry/atan2.js +2 -1
- package/lib/esm/function/trigonometry/cos.js +1 -1
- package/lib/esm/function/trigonometry/sin.js +1 -1
- package/lib/esm/function/utils/isInteger.js +1 -1
- package/lib/esm/header.js +1 -1
- package/lib/esm/type/matrix/MatrixIndex.js +6 -3
- package/lib/esm/type/matrix/Range.js +16 -9
- package/lib/esm/utils/bigint.js +27 -0
- package/lib/esm/utils/factory.js +5 -2
- package/lib/esm/utils/number.js +6 -17
- package/lib/esm/utils/snapshot.js +8 -1
- package/lib/esm/version.js +1 -1
- package/package.json +13 -11
- package/types/index.d.ts +75 -12
- package/lib/esm/expression/transform/apply.transform.js +0 -44
@@ -1,6 +1,7 @@
|
|
1
|
-
import { factory } from '../../utils/factory.js';
|
2
|
-
import { deepMap } from '../../utils/collection.js';
|
3
1
|
import { log2Number } from '../../plain/number/index.js';
|
2
|
+
import { promoteLogarithm } from '../../utils/bigint.js';
|
3
|
+
import { deepMap } from '../../utils/collection.js';
|
4
|
+
import { factory } from '../../utils/factory.js';
|
4
5
|
var name = 'log2';
|
5
6
|
var dependencies = ['typed', 'config', 'Complex'];
|
6
7
|
export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
@@ -34,22 +35,26 @@ export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
34
35
|
* @return {number | BigNumber | Complex | Array | Matrix}
|
35
36
|
* Returns the 2-base logarithm of `x`
|
36
37
|
*/
|
38
|
+
function complexLog2Number(x) {
|
39
|
+
return _log2Complex(new Complex(x, 0));
|
40
|
+
}
|
37
41
|
return typed(name, {
|
38
42
|
number: function number(x) {
|
39
43
|
if (x >= 0 || config.predictable) {
|
40
44
|
return log2Number(x);
|
41
45
|
} else {
|
42
46
|
// negative value -> complex value computation
|
43
|
-
return
|
47
|
+
return complexLog2Number(x);
|
44
48
|
}
|
45
49
|
},
|
50
|
+
bigint: promoteLogarithm(4, log2Number, config, complexLog2Number),
|
46
51
|
Complex: _log2Complex,
|
47
52
|
BigNumber: function BigNumber(x) {
|
48
53
|
if (!x.isNegative() || config.predictable) {
|
49
54
|
return x.log(2);
|
50
55
|
} else {
|
51
56
|
// downgrade to number, return Complex valued result
|
52
|
-
return
|
57
|
+
return complexLog2Number(x.toNumber());
|
53
58
|
}
|
54
59
|
},
|
55
60
|
'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
|
@@ -137,6 +137,10 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
137
137
|
var xSelected = bigNearlyEqual(x, xEpsilon, config.relTol, config.absTol) ? xEpsilon : x;
|
138
138
|
return xSelected.toDecimalPlaces(n.toNumber());
|
139
139
|
},
|
140
|
+
// bigints can't be rounded
|
141
|
+
bigint: b => b,
|
142
|
+
'bigint, number': (b, _dummy) => b,
|
143
|
+
'bigint, BigNumber': (b, _dummy) => b,
|
140
144
|
Fraction: function Fraction(x) {
|
141
145
|
return x.round();
|
142
146
|
},
|
@@ -20,7 +20,7 @@ export var createCtranspose = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
20
20
|
* Examples:
|
21
21
|
*
|
22
22
|
* const A = [[1, 2, 3], [4, 5, math.complex(6,7)]]
|
23
|
-
* math.ctranspose(A)
|
23
|
+
* math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:-7}]]
|
24
24
|
*
|
25
25
|
* See also:
|
26
26
|
*
|
@@ -2,9 +2,9 @@ import { factory } from '../../utils/factory.js';
|
|
2
2
|
import { arraySize } from '../../utils/array.js';
|
3
3
|
import { isMatrix } from '../../utils/is.js';
|
4
4
|
import { IndexError } from '../../error/IndexError.js';
|
5
|
-
var name = '
|
5
|
+
var name = 'mapSlices';
|
6
6
|
var dependencies = ['typed', 'isInteger'];
|
7
|
-
export var
|
7
|
+
export var createMapSlices = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
8
|
var {
|
9
9
|
typed,
|
10
10
|
isInteger
|
@@ -16,7 +16,7 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
16
16
|
*
|
17
17
|
* Syntax:
|
18
18
|
*
|
19
|
-
* math.
|
19
|
+
* math.mapSlices(A, dim, callback)
|
20
20
|
*
|
21
21
|
* Where:
|
22
22
|
*
|
@@ -27,19 +27,24 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
27
27
|
* const A = [[1, 2], [3, 4]]
|
28
28
|
* const sum = math.sum
|
29
29
|
*
|
30
|
-
* math.
|
31
|
-
* math.
|
30
|
+
* math.mapSlices(A, 0, sum) // returns [4, 6]
|
31
|
+
* math.mapSlices(A, 1, sum) // returns [3, 7]
|
32
32
|
*
|
33
33
|
* See also:
|
34
34
|
*
|
35
35
|
* map, filter, forEach
|
36
36
|
*
|
37
|
+
* Note:
|
38
|
+
*
|
39
|
+
* `mapSlices()` is also currently available via its deprecated
|
40
|
+
* synonym `apply()`.
|
41
|
+
*
|
37
42
|
* @param {Array | Matrix} array The input Matrix
|
38
43
|
* @param {number} dim The dimension along which the callback is applied
|
39
44
|
* @param {Function} callback The callback function that is applied. This Function
|
40
45
|
* should take an array or 1-d matrix as an input and
|
41
46
|
* return a number.
|
42
|
-
* @return {Array | Matrix} res The residual matrix with the function
|
47
|
+
* @return {Array | Matrix} res The residual matrix with the function mapped on the slices over some dimension.
|
43
48
|
*/
|
44
49
|
return typed(name, {
|
45
50
|
'Array | Matrix, number | BigNumber, function': function Array__Matrix_number__BigNumber_function(mat, dim, callback) {
|
@@ -51,12 +56,14 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
51
56
|
throw new IndexError(dim, size.length);
|
52
57
|
}
|
53
58
|
if (isMatrix(mat)) {
|
54
|
-
return mat.create(
|
59
|
+
return mat.create(_mapSlices(mat.valueOf(), dim, callback), mat.datatype());
|
55
60
|
} else {
|
56
|
-
return
|
61
|
+
return _mapSlices(mat, dim, callback);
|
57
62
|
}
|
58
63
|
}
|
59
64
|
});
|
65
|
+
}, {
|
66
|
+
formerly: 'apply'
|
60
67
|
});
|
61
68
|
|
62
69
|
/**
|
@@ -67,7 +74,7 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
67
74
|
* @returns {Array} ret
|
68
75
|
* @private
|
69
76
|
*/
|
70
|
-
function
|
77
|
+
function _mapSlices(mat, dim, callback) {
|
71
78
|
var i, ret, tran;
|
72
79
|
if (dim <= 0) {
|
73
80
|
if (!Array.isArray(mat[0])) {
|
@@ -76,14 +83,14 @@ function _apply(mat, dim, callback) {
|
|
76
83
|
tran = _switch(mat);
|
77
84
|
ret = [];
|
78
85
|
for (i = 0; i < tran.length; i++) {
|
79
|
-
ret[i] =
|
86
|
+
ret[i] = _mapSlices(tran[i], dim - 1, callback);
|
80
87
|
}
|
81
88
|
return ret;
|
82
89
|
}
|
83
90
|
} else {
|
84
91
|
ret = [];
|
85
92
|
for (i = 0; i < mat.length; i++) {
|
86
|
-
ret[i] =
|
93
|
+
ret[i] = _mapSlices(mat[i], dim - 1, callback);
|
87
94
|
}
|
88
95
|
return ret;
|
89
96
|
}
|
@@ -9,8 +9,10 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
|
|
9
9
|
} = _ref;
|
10
10
|
/**
|
11
11
|
* Create a matrix by evaluating a generating function at each index.
|
12
|
-
* The simplest overload returns a multi-dimensional array as long as `size`
|
13
|
-
*
|
12
|
+
* The simplest overload returns a multi-dimensional array as long as `size`
|
13
|
+
* is an array.
|
14
|
+
* Passing `size` as a Matrix or specifying a `format` will result in
|
15
|
+
* returning a Matrix.
|
14
16
|
*
|
15
17
|
* Syntax:
|
16
18
|
*
|
@@ -20,6 +22,37 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
|
|
20
22
|
* math.matrixFromFunction(size, format, fn)
|
21
23
|
* math.matrixFromFunction(size, format, datatype, fn)
|
22
24
|
*
|
25
|
+
* Where:
|
26
|
+
*
|
27
|
+
* - `size: (number[] | Matrix)`
|
28
|
+
* A vector giving the extent of the array to be created in each
|
29
|
+
* dimension. If size has one entry, a vector is created; if it
|
30
|
+
* has two, a rectangular array/Matrix is created; if three, a
|
31
|
+
* three-dimensional array/Matrix is created; and so on.
|
32
|
+
* - `fn: (index: number[]) => MathType`
|
33
|
+
* The callback function that will generate the entries of the
|
34
|
+
* matrix. It is called in turn with the index of each entry of
|
35
|
+
* the matrix. The index is always an ordinary array of numbers
|
36
|
+
* with the same length as _size_. So for vectors, you will get
|
37
|
+
* indices like `[0]` or `[1]`, whereas for matrices, you will
|
38
|
+
* get indices like `[2, 0]` or `[1,3]`. The return value may
|
39
|
+
* be any type that can go in an array or Matrix entry, although
|
40
|
+
* if you supply the _datatype_ argument, you must yourself ensure
|
41
|
+
* the type of the return value matches. Note that currently,
|
42
|
+
* your callback _fn_ will receive 0-based indices for the matrix
|
43
|
+
* entries, regardless of whether matrixFromFunction is invoked
|
44
|
+
* directly from JavaScript or via the mathjs expression language.
|
45
|
+
* - `format: 'dense'|'sparse'`
|
46
|
+
* Specifies the storage format for the resulting Matrix. Note that
|
47
|
+
* if this argument is given, the return value will always be a
|
48
|
+
* Matrix (rather than possibly an Array).
|
49
|
+
* - `datatype: string`
|
50
|
+
* Specifies the data type of entries of the new matrix. If given,
|
51
|
+
* it should be the name of a data type that mathjs supports, as
|
52
|
+
* returned by the math.typeOf function. It is up to the caller
|
53
|
+
* to make certain that all values returned by _fn_ are consistent
|
54
|
+
* with this datatype if specified.
|
55
|
+
*
|
23
56
|
* Examples:
|
24
57
|
*
|
25
58
|
* math.matrixFromFunction([3,3], i => i[0] - i[1]) // an antisymmetric matrix
|
@@ -28,7 +61,7 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
|
|
28
61
|
*
|
29
62
|
* See also:
|
30
63
|
*
|
31
|
-
* matrix, zeros
|
64
|
+
* matrix, typeOf, zeros
|
32
65
|
*
|
33
66
|
* @param {Array | Matrix} size The size of the matrix to be created
|
34
67
|
* @param {function} fn Callback function invoked for every entry in the matrix
|
@@ -35,36 +35,48 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
35
35
|
*
|
36
36
|
* - `str: string`
|
37
37
|
* A string 'start:end' or 'start:step:end'
|
38
|
-
* - `start: {number | BigNumber | Unit}`
|
38
|
+
* - `start: {number | bigint | BigNumber | Fraction | Unit}`
|
39
39
|
* Start of the range
|
40
|
-
* - `end: number | BigNumber | Unit`
|
40
|
+
* - `end: number | bigint | BigNumber | Fraction | Unit`
|
41
41
|
* End of the range, excluded by default, included when parameter includeEnd=true
|
42
|
-
* - `step: number | BigNumber | Unit`
|
42
|
+
* - `step: number | bigint | BigNumber | Fraction | Unit`
|
43
43
|
* Step size. Default value is 1.
|
44
44
|
* - `includeEnd: boolean`
|
45
45
|
* Option to specify whether to include the end or not. False by default.
|
46
46
|
*
|
47
|
+
* Note that the return type of the range is taken from the type of
|
48
|
+
* the start/end. If only one these is a built-in `number` type, it will
|
49
|
+
* be promoted to the type of the other endpoint. However, in the case of
|
50
|
+
* Unit values, both endpoints must have compatible units, and the return
|
51
|
+
* value will have compatible units as well.
|
52
|
+
*
|
47
53
|
* Examples:
|
48
54
|
*
|
49
55
|
* math.range(2, 6) // [2, 3, 4, 5]
|
50
56
|
* math.range(2, -3, -1) // [2, 1, 0, -1, -2]
|
51
57
|
* math.range('2:1:6') // [2, 3, 4, 5]
|
52
58
|
* math.range(2, 6, true) // [2, 3, 4, 5, 6]
|
59
|
+
* math.range(2, math.fraction(8,3), math.fraction(1,3)) // [fraction(2), fraction(7,3)]
|
53
60
|
* math.range(math.unit(2, 'm'), math.unit(-3, 'm'), math.unit(-1, 'm')) // [2 m, 1 m, 0 m , -1 m, -2 m]
|
54
61
|
*
|
55
62
|
* See also:
|
56
63
|
*
|
57
64
|
* ones, zeros, size, subset
|
58
65
|
*
|
59
|
-
* @param {*} args Parameters describing the
|
66
|
+
* @param {*} args Parameters describing the range's `start`, `end`, and optional `step`.
|
60
67
|
* @return {Array | Matrix} range
|
61
68
|
*/
|
62
69
|
return typed(name, {
|
63
70
|
// TODO: simplify signatures when typed-function supports default values and optional arguments
|
64
71
|
|
65
|
-
// TODO: a number or boolean should not be converted to string here
|
66
72
|
string: _strRange,
|
67
73
|
'string, boolean': _strRange,
|
74
|
+
number: function number(oops) {
|
75
|
+
throw new TypeError("Too few arguments to function range(): ".concat(oops));
|
76
|
+
},
|
77
|
+
boolean: function boolean(oops) {
|
78
|
+
throw new TypeError("Unexpected type of argument 1 to function range(): ".concat(oops, ", number|bigint|BigNumber|Fraction"));
|
79
|
+
},
|
68
80
|
'number, number': function number_number(start, end) {
|
69
81
|
return _out(_range(start, end, 1, false));
|
70
82
|
},
|
@@ -77,6 +89,31 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
77
89
|
'number, number, number, boolean': function number_number_number_boolean(start, end, step, includeEnd) {
|
78
90
|
return _out(_range(start, end, step, includeEnd));
|
79
91
|
},
|
92
|
+
// Handle bigints; if either limit is bigint, range should be too
|
93
|
+
'bigint, bigint|number': function bigint_bigintNumber(start, end) {
|
94
|
+
return _out(_range(start, end, 1n, false));
|
95
|
+
},
|
96
|
+
'number, bigint': function number_bigint(start, end) {
|
97
|
+
return _out(_range(BigInt(start), end, 1n, false));
|
98
|
+
},
|
99
|
+
'bigint, bigint|number, bigint|number': function bigint_bigintNumber_bigintNumber(start, end, step) {
|
100
|
+
return _out(_range(start, end, BigInt(step), false));
|
101
|
+
},
|
102
|
+
'number, bigint, bigint|number': function number_bigint_bigintNumber(start, end, step) {
|
103
|
+
return _out(_range(BigInt(start), end, BigInt(step), false));
|
104
|
+
},
|
105
|
+
'bigint, bigint|number, boolean': function bigint_bigintNumber_boolean(start, end, includeEnd) {
|
106
|
+
return _out(_range(start, end, 1n, includeEnd));
|
107
|
+
},
|
108
|
+
'number, bigint, boolean': function number_bigint_boolean(start, end, includeEnd) {
|
109
|
+
return _out(_range(BigInt(start), end, 1n, includeEnd));
|
110
|
+
},
|
111
|
+
'bigint, bigint|number, bigint|number, boolean': function bigint_bigintNumber_bigintNumber_boolean(start, end, step, includeEnd) {
|
112
|
+
return _out(_range(start, end, BigInt(step), includeEnd));
|
113
|
+
},
|
114
|
+
'number, bigint, bigint|number, boolean': function number_bigint_bigintNumber_boolean(start, end, step, includeEnd) {
|
115
|
+
return _out(_range(BigInt(start), end, BigInt(step), includeEnd));
|
116
|
+
},
|
80
117
|
'BigNumber, BigNumber': function BigNumber_BigNumber(start, end) {
|
81
118
|
var BigNumber = start.constructor;
|
82
119
|
return _out(_range(start, end, new BigNumber(1), false));
|
@@ -91,6 +128,18 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
91
128
|
'BigNumber, BigNumber, BigNumber, boolean': function BigNumber_BigNumber_BigNumber_boolean(start, end, step, includeEnd) {
|
92
129
|
return _out(_range(start, end, step, includeEnd));
|
93
130
|
},
|
131
|
+
'Fraction, Fraction': function Fraction_Fraction(start, end) {
|
132
|
+
return _out(_range(start, end, 1, false));
|
133
|
+
},
|
134
|
+
'Fraction, Fraction, Fraction': function Fraction_Fraction_Fraction(start, end, step) {
|
135
|
+
return _out(_range(start, end, step, false));
|
136
|
+
},
|
137
|
+
'Fraction, Fraction, boolean': function Fraction_Fraction_boolean(start, end, includeEnd) {
|
138
|
+
return _out(_range(start, end, 1, includeEnd));
|
139
|
+
},
|
140
|
+
'Fraction, Fraction, Fraction, boolean': function Fraction_Fraction_Fraction_boolean(start, end, step, includeEnd) {
|
141
|
+
return _out(_range(start, end, step, includeEnd));
|
142
|
+
},
|
94
143
|
'Unit, Unit, Unit': function Unit_Unit_Unit(start, end, step) {
|
95
144
|
return _out(_range(start, end, step, false));
|
96
145
|
},
|
@@ -3,11 +3,13 @@ import { randomMatrix } from './util/randomMatrix.js';
|
|
3
3
|
import { createRng } from './util/seededRNG.js';
|
4
4
|
import { isMatrix } from '../../utils/is.js';
|
5
5
|
var name = 'randomInt';
|
6
|
-
var dependencies = ['typed', 'config', '?on'];
|
6
|
+
var dependencies = ['typed', 'config', 'log2', '?on'];
|
7
|
+
var simpleCutoff = 2n ** 30n;
|
7
8
|
export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
9
|
var {
|
9
10
|
typed,
|
10
11
|
config,
|
12
|
+
log2,
|
11
13
|
on
|
12
14
|
} = _ref;
|
13
15
|
// seeded pseudo random number generator
|
@@ -26,7 +28,7 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
26
28
|
*
|
27
29
|
* Syntax:
|
28
30
|
*
|
29
|
-
* math.randomInt() // generate
|
31
|
+
* math.randomInt() // generate either 0 or 1, randomly
|
30
32
|
* math.randomInt(max) // generate a random integer between 0 and max
|
31
33
|
* math.randomInt(min, max) // generate a random integer between min and max
|
32
34
|
* math.randomInt(size) // generate a matrix with random integer between 0 and 1
|
@@ -50,9 +52,11 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
50
52
|
* @return {number | Array | Matrix} A random integer value
|
51
53
|
*/
|
52
54
|
return typed(name, {
|
53
|
-
'': () => _randomInt(0,
|
55
|
+
'': () => _randomInt(0, 2),
|
54
56
|
number: max => _randomInt(0, max),
|
55
57
|
'number, number': (min, max) => _randomInt(min, max),
|
58
|
+
bigint: max => _randomBigint(0n, max),
|
59
|
+
'bigint, bigint': _randomBigint,
|
56
60
|
'Array | Matrix': size => _randomIntMatrix(size, 0, 1),
|
57
61
|
'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),
|
58
62
|
'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)
|
@@ -64,4 +68,23 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
64
68
|
function _randomInt(min, max) {
|
65
69
|
return Math.floor(min + rng() * (max - min));
|
66
70
|
}
|
71
|
+
function _randomBigint(min, max) {
|
72
|
+
var width = max - min; // number of choices
|
73
|
+
if (width <= simpleCutoff) {
|
74
|
+
// do it with number type
|
75
|
+
return min + BigInt(_randomInt(0, Number(width)));
|
76
|
+
}
|
77
|
+
// Too big to choose accurately that way. Instead, choose the correct
|
78
|
+
// number of random bits to cover the width, and repeat until the
|
79
|
+
// resulting number falls within the width
|
80
|
+
var bits = log2(width);
|
81
|
+
var picked = width;
|
82
|
+
while (picked >= width) {
|
83
|
+
picked = 0n;
|
84
|
+
for (var i = 0; i < bits; ++i) {
|
85
|
+
picked = 2n * picked + (rng() < 0.5 ? 0n : 1n);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
return min + picked;
|
89
|
+
}
|
67
90
|
});
|
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
|
|
7
7
|
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
8
8
|
import { createCompareUnits } from './compareUnits.js';
|
9
9
|
var name = 'larger';
|
10
|
-
var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
10
|
+
var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
11
11
|
export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
|
12
12
|
var {
|
13
13
|
typed,
|
14
14
|
config,
|
15
|
+
bignumber,
|
15
16
|
matrix,
|
16
17
|
DenseMatrix,
|
17
18
|
concat,
|
@@ -68,16 +69,23 @@ export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
68
69
|
* @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
|
69
70
|
* @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false
|
70
71
|
*/
|
72
|
+
function bignumLarger(x, y) {
|
73
|
+
return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
74
|
+
}
|
71
75
|
return typed(name, createLargerNumber({
|
72
76
|
typed,
|
73
77
|
config
|
74
78
|
}), {
|
75
79
|
'boolean, boolean': (x, y) => x > y,
|
76
|
-
'BigNumber, BigNumber':
|
77
|
-
return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
78
|
-
},
|
80
|
+
'BigNumber, BigNumber': bignumLarger,
|
79
81
|
'bigint, bigint': (x, y) => x > y,
|
80
82
|
'Fraction, Fraction': (x, y) => x.compare(y) === 1,
|
83
|
+
'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
|
84
|
+
return bignumLarger(bignumber(x), y);
|
85
|
+
},
|
86
|
+
'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
|
87
|
+
return bignumLarger(x, bignumber(y));
|
88
|
+
},
|
81
89
|
'Complex, Complex': function Complex_Complex() {
|
82
90
|
throw new TypeError('No ordering relation is defined for complex numbers');
|
83
91
|
}
|
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
|
|
7
7
|
import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
|
8
8
|
import { createCompareUnits } from './compareUnits.js';
|
9
9
|
var name = 'smaller';
|
10
|
-
var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
10
|
+
var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
|
11
11
|
export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
|
12
12
|
var {
|
13
13
|
typed,
|
14
14
|
config,
|
15
|
+
bignumber,
|
15
16
|
matrix,
|
16
17
|
DenseMatrix,
|
17
18
|
concat,
|
@@ -68,16 +69,23 @@ export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
68
69
|
* @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
|
69
70
|
* @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false
|
70
71
|
*/
|
72
|
+
function bignumSmaller(x, y) {
|
73
|
+
return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
74
|
+
}
|
71
75
|
return typed(name, createSmallerNumber({
|
72
76
|
typed,
|
73
77
|
config
|
74
78
|
}), {
|
75
79
|
'boolean, boolean': (x, y) => x < y,
|
76
|
-
'BigNumber, BigNumber':
|
77
|
-
return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
|
78
|
-
},
|
80
|
+
'BigNumber, BigNumber': bignumSmaller,
|
79
81
|
'bigint, bigint': (x, y) => x < y,
|
80
82
|
'Fraction, Fraction': (x, y) => x.compare(y) === -1,
|
83
|
+
'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
|
84
|
+
return bignumSmaller(bignumber(x), y);
|
85
|
+
},
|
86
|
+
'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
|
87
|
+
return bignumSmaller(x, bignumber(y));
|
88
|
+
},
|
81
89
|
'Complex, Complex': function Complex_Complex(x, y) {
|
82
90
|
throw new TypeError('No ordering relation is defined for complex numbers');
|
83
91
|
}
|
@@ -83,7 +83,7 @@ export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
83
83
|
var res;
|
84
84
|
deepForEach(array, function (value) {
|
85
85
|
try {
|
86
|
-
if (
|
86
|
+
if (typeof value === 'number' && isNaN(value)) {
|
87
87
|
res = NaN;
|
88
88
|
} else if (res === undefined || larger(value, res)) {
|
89
89
|
res = value;
|
@@ -83,7 +83,7 @@ export var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
83
83
|
var min;
|
84
84
|
deepForEach(array, function (value) {
|
85
85
|
try {
|
86
|
-
if (
|
86
|
+
if (typeof value === 'number' && isNaN(value)) {
|
87
87
|
min = NaN;
|
88
88
|
} else if (min === undefined || smaller(value, min)) {
|
89
89
|
min = value;
|
@@ -1,9 +1,8 @@
|
|
1
1
|
import { isNumber } from '../../utils/is.js';
|
2
2
|
import { flatten } from '../../utils/array.js';
|
3
3
|
import { factory } from '../../utils/factory.js';
|
4
|
-
import { createApply } from '../matrix/apply.js';
|
5
4
|
var name = 'quantileSeq';
|
6
|
-
var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
|
5
|
+
var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger', 'mapSlices'];
|
7
6
|
export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
7
|
var {
|
9
8
|
typed,
|
@@ -17,13 +16,9 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
17
16
|
isInteger,
|
18
17
|
smaller,
|
19
18
|
smallerEq,
|
20
|
-
larger
|
19
|
+
larger,
|
20
|
+
mapSlices
|
21
21
|
} = _ref;
|
22
|
-
var apply = createApply({
|
23
|
-
typed,
|
24
|
-
isInteger
|
25
|
-
});
|
26
|
-
|
27
22
|
/**
|
28
23
|
* Compute the prob order quantile of a matrix or a list with values.
|
29
24
|
* The sequence is sorted and the middle value is returned.
|
@@ -69,7 +64,7 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
|
|
69
64
|
'Array | Matrix, Array | Matrix, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection)
|
70
65
|
});
|
71
66
|
function _quantileSeqDim(data, prob, sorted, dim, fn) {
|
72
|
-
return
|
67
|
+
return mapSlices(data, dim, x => fn(x, prob, sorted));
|
73
68
|
}
|
74
69
|
function _quantileSeqProbNumber(data, probOrN, sorted) {
|
75
70
|
var probArr;
|
@@ -4,7 +4,7 @@ import { factory } from '../../utils/factory.js';
|
|
4
4
|
import { improveErrorMessage } from './utils/improveErrorMessage.js';
|
5
5
|
var DEFAULT_NORMALIZATION = 'unbiased';
|
6
6
|
var name = 'variance';
|
7
|
-
var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', '
|
7
|
+
var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'mapSlices', 'isNaN'];
|
8
8
|
export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
|
9
9
|
var {
|
10
10
|
typed,
|
@@ -12,7 +12,7 @@ export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
12
12
|
subtract,
|
13
13
|
multiply,
|
14
14
|
divide,
|
15
|
-
|
15
|
+
mapSlices,
|
16
16
|
isNaN
|
17
17
|
} = _ref;
|
18
18
|
/**
|
@@ -145,7 +145,7 @@ export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
145
145
|
if (array.length === 0) {
|
146
146
|
throw new SyntaxError('Function variance requires one or more parameters (0 provided)');
|
147
147
|
}
|
148
|
-
return
|
148
|
+
return mapSlices(array, dim, x => _var(x, normalization));
|
149
149
|
} catch (err) {
|
150
150
|
throw improveErrorMessage(err, 'variance');
|
151
151
|
}
|
@@ -25,12 +25,12 @@ export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
25
25
|
* // the following outputs: 'The value of pi is 3.141592654'
|
26
26
|
* math.print('The value of pi is $pi', {pi: math.pi}, 10)
|
27
27
|
*
|
28
|
-
* // the following outputs: '
|
28
|
+
* // the following outputs: 'Hello Mary! The date is 2013-03-23'
|
29
29
|
* math.print('Hello $user.name! The date is $date', {
|
30
30
|
* user: {
|
31
31
|
* name: 'Mary',
|
32
32
|
* },
|
33
|
-
* date:
|
33
|
+
* date: '2013-03-23'
|
34
34
|
* })
|
35
35
|
*
|
36
36
|
* // the following outputs: 'My favorite fruits are apples and bananas !'
|
@@ -23,7 +23,7 @@ export var createAcsc = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
23
23
|
*
|
24
24
|
* math.acsc(2) // returns 0.5235987755982989
|
25
25
|
* math.acsc(0.5) // returns Complex 1.5707963267948966 -1.3169578969248166i
|
26
|
-
* math.acsc(math.csc(1.5)) // returns number
|
26
|
+
* math.acsc(math.csc(1.5)) // returns number 1.5
|
27
27
|
*
|
28
28
|
* See also:
|
29
29
|
*
|
@@ -20,7 +20,7 @@ export var createAsin = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
20
20
|
* Examples:
|
21
21
|
*
|
22
22
|
* math.asin(0.5) // returns number 0.5235987755982989
|
23
|
-
* math.asin(math.sin(1.5)) // returns number
|
23
|
+
* math.asin(math.sin(1.5)) // returns number 1.5
|
24
24
|
*
|
25
25
|
* math.asin(2) // returns Complex 1.5707963267948966 -1.3169578969248166i
|
26
26
|
*
|
@@ -56,9 +56,10 @@ export var createAtan2 = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
56
56
|
*
|
57
57
|
* math.atan2(2, 2) / math.pi // returns number 0.25
|
58
58
|
*
|
59
|
-
* const angle = math.unit(60, 'deg')
|
59
|
+
* const angle = math.unit(60, 'deg')
|
60
60
|
* const x = math.cos(angle)
|
61
61
|
* const y = math.sin(angle)
|
62
|
+
* math.atan2(y, x) * 180 / math.pi // returns 60
|
62
63
|
*
|
63
64
|
* math.atan(2) // returns number 1.1071487177940904
|
64
65
|
*
|
@@ -28,7 +28,7 @@ export var createCos = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
28
28
|
* math.cos(math.unit(60, 'deg')) // returns number 0.5
|
29
29
|
*
|
30
30
|
* const angle = 0.2
|
31
|
-
* math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number
|
31
|
+
* math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number 1
|
32
32
|
*
|
33
33
|
* See also:
|
34
34
|
*
|
@@ -28,7 +28,7 @@ export var createSin = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
28
28
|
* math.sin(math.unit(30, 'deg')) // returns number 0.5
|
29
29
|
*
|
30
30
|
* const angle = 0.2
|
31
|
-
* math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number
|
31
|
+
* math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number 1
|
32
32
|
*
|
33
33
|
* See also:
|
34
34
|
*
|
@@ -26,7 +26,7 @@ export var createIsInteger = /* #__PURE__ */factory(name, dependencies, _ref =>
|
|
26
26
|
* math.isInteger(math.fraction(4)) // returns true
|
27
27
|
* math.isInteger('3') // returns true
|
28
28
|
* math.isInteger([3, 0.5, -2]) // returns [true, false, true]
|
29
|
-
* math.isInteger(math.complex('2-4i')) // throws
|
29
|
+
* math.isInteger(math.complex('2-4i')) // throws TypeError
|
30
30
|
*
|
31
31
|
* See also:
|
32
32
|
*
|
package/lib/esm/header.js
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
* @date @@date
|
11
11
|
*
|
12
12
|
* @license
|
13
|
-
* Copyright (C) 2013-
|
13
|
+
* Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
|
14
14
|
*
|
15
15
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
16
16
|
* use this file except in compliance with the License. You may obtain a copy
|