mathjs 14.2.1 → 14.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HISTORY.md +16 -0
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesMax.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesMaxTransform.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesMin.generated.js +2 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesMinTransform.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesMax.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesMaxTransform.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesMin.generated.js +2 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesMinTransform.generated.js +2 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -0
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +2 -0
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/mapSlices.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/relational/larger.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/relational/smaller.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/statistics/max.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/statistics/min.js +1 -1
- package/lib/cjs/expression/transform/max.transform.js +5 -3
- package/lib/cjs/expression/transform/min.transform.js +5 -3
- package/lib/cjs/expression/transform/variance.transform.js +2 -2
- package/lib/cjs/function/matrix/flatten.js +1 -1
- package/lib/cjs/function/matrix/forEach.js +1 -1
- package/lib/cjs/function/matrix/map.js +1 -1
- package/lib/cjs/function/matrix/partitionSelect.js +2 -2
- package/lib/cjs/function/statistics/max.js +5 -4
- package/lib/cjs/function/statistics/min.js +5 -4
- package/lib/cjs/function/statistics/mode.js +2 -2
- package/lib/cjs/function/statistics/variance.js +2 -2
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +45 -48
- package/lib/cjs/utils/array.js +120 -48
- package/lib/cjs/utils/collection.js +14 -15
- package/lib/cjs/utils/optimizeCallback.js +19 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesMax.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesMaxTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesMin.generated.js +2 -0
- package/lib/esm/entry/dependenciesAny/dependenciesMinTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesMax.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesMaxTransform.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesMin.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesMinTransform.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -0
- package/lib/esm/entry/pureFunctionsAny.generated.js +2 -0
- package/lib/esm/entry/pureFunctionsNumber.generated.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/mapSlices.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/relational/larger.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/relational/smaller.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/statistics/max.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/statistics/min.js +1 -1
- package/lib/esm/expression/transform/max.transform.js +5 -3
- package/lib/esm/expression/transform/min.transform.js +5 -3
- package/lib/esm/expression/transform/variance.transform.js +2 -2
- package/lib/esm/function/matrix/flatten.js +1 -1
- package/lib/esm/function/matrix/forEach.js +2 -2
- package/lib/esm/function/matrix/map.js +2 -2
- package/lib/esm/function/matrix/partitionSelect.js +2 -2
- package/lib/esm/function/statistics/max.js +5 -4
- package/lib/esm/function/statistics/min.js +5 -4
- package/lib/esm/function/statistics/mode.js +2 -2
- package/lib/esm/function/statistics/variance.js +2 -2
- package/lib/esm/type/matrix/DenseMatrix.js +46 -49
- package/lib/esm/utils/array.js +118 -47
- package/lib/esm/utils/collection.js +15 -16
- package/lib/esm/utils/optimizeCallback.js +19 -2
- package/lib/esm/version.js +1 -1
- package/package.json +9 -9
- package/types/index.d.ts +2 -1
@@ -2,7 +2,7 @@ export var maxDocs = {
|
|
2
2
|
name: 'max',
|
3
3
|
category: 'Statistics',
|
4
4
|
syntax: ['max(a, b, c, ...)', 'max(A)', 'max(A, dimension)'],
|
5
|
-
description: 'Compute the maximum value of a list of values.',
|
5
|
+
description: 'Compute the maximum value of a list of values. If any NaN values are found, the function yields the last NaN in the input.',
|
6
6
|
examples: ['max(2, 3, 4, 1)', 'max([2, 3, 4, 1])', 'max([2, 5; 4, 3])', 'max([2, 5; 4, 3], 1)', 'max([2, 5; 4, 3], 2)', 'max(2.7, 7.1, -4.5, 2.0, 4.1)', 'min(2.7, 7.1, -4.5, 2.0, 4.1)'],
|
7
7
|
seealso: ['mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']
|
8
8
|
};
|
@@ -2,7 +2,7 @@ export var minDocs = {
|
|
2
2
|
name: 'min',
|
3
3
|
category: 'Statistics',
|
4
4
|
syntax: ['min(a, b, c, ...)', 'min(A)', 'min(A, dimension)'],
|
5
|
-
description: 'Compute the minimum value of a list of values.',
|
5
|
+
description: 'Compute the minimum value of a list of values. If any NaN values are found, the function yields the last NaN in the input.',
|
6
6
|
examples: ['min(2, 3, 4, 1)', 'min([2, 3, 4, 1])', 'min([2, 5; 4, 3])', 'min([2, 5; 4, 3], 1)', 'min([2, 5; 4, 3], 2)', 'min(2.7, 7.1, -4.5, 2.0, 4.1)', 'max(2.7, 7.1, -4.5, 2.0, 4.1)'],
|
7
7
|
seealso: ['max', 'mean', 'median', 'prod', 'std', 'sum', 'variance']
|
8
8
|
};
|
@@ -3,19 +3,21 @@ import { errorTransform } from './utils/errorTransform.js';
|
|
3
3
|
import { createMax } from '../../function/statistics/max.js';
|
4
4
|
import { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';
|
5
5
|
var name = 'max';
|
6
|
-
var dependencies = ['typed', 'config', 'numeric', 'larger'];
|
6
|
+
var dependencies = ['typed', 'config', 'numeric', 'larger', 'isNaN'];
|
7
7
|
export var createMaxTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
8
|
var {
|
9
9
|
typed,
|
10
10
|
config,
|
11
11
|
numeric,
|
12
|
-
larger
|
12
|
+
larger,
|
13
|
+
isNaN: mathIsNaN
|
13
14
|
} = _ref;
|
14
15
|
var max = createMax({
|
15
16
|
typed,
|
16
17
|
config,
|
17
18
|
numeric,
|
18
|
-
larger
|
19
|
+
larger,
|
20
|
+
isNaN: mathIsNaN
|
19
21
|
});
|
20
22
|
|
21
23
|
/**
|
@@ -3,19 +3,21 @@ import { errorTransform } from './utils/errorTransform.js';
|
|
3
3
|
import { createMin } from '../../function/statistics/min.js';
|
4
4
|
import { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';
|
5
5
|
var name = 'min';
|
6
|
-
var dependencies = ['typed', 'config', 'numeric', 'smaller'];
|
6
|
+
var dependencies = ['typed', 'config', 'numeric', 'smaller', 'isNaN'];
|
7
7
|
export var createMinTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
8
|
var {
|
9
9
|
typed,
|
10
10
|
config,
|
11
11
|
numeric,
|
12
|
-
smaller
|
12
|
+
smaller,
|
13
|
+
isNaN: mathIsNaN
|
13
14
|
} = _ref;
|
14
15
|
var min = createMin({
|
15
16
|
typed,
|
16
17
|
config,
|
17
18
|
numeric,
|
18
|
-
smaller
|
19
|
+
smaller,
|
20
|
+
isNaN: mathIsNaN
|
19
21
|
});
|
20
22
|
|
21
23
|
/**
|
@@ -20,7 +20,7 @@ export var createVarianceTransform = /* #__PURE__ */factory(name, dependencies,
|
|
20
20
|
multiply,
|
21
21
|
divide,
|
22
22
|
mapSlices,
|
23
|
-
isNaN
|
23
|
+
isNaN: mathIsNaN
|
24
24
|
} = _ref;
|
25
25
|
var variance = createVariance({
|
26
26
|
typed,
|
@@ -29,7 +29,7 @@ export var createVarianceTransform = /* #__PURE__ */factory(name, dependencies,
|
|
29
29
|
multiply,
|
30
30
|
divide,
|
31
31
|
mapSlices,
|
32
|
-
isNaN
|
32
|
+
isNaN: mathIsNaN
|
33
33
|
});
|
34
34
|
return typed(name, {
|
35
35
|
'...any': function any(args) {
|
@@ -32,7 +32,7 @@ export var createFlatten = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
32
32
|
Matrix: function Matrix(x) {
|
33
33
|
// Return the same matrix type as x (Dense or Sparse Matrix)
|
34
34
|
// Return the same data type as x
|
35
|
-
return x.create(flattenArray(x.
|
35
|
+
return x.create(flattenArray(x.valueOf()), x.datatype());
|
36
36
|
}
|
37
37
|
});
|
38
38
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { optimizeCallback } from '../../utils/optimizeCallback.js';
|
2
2
|
import { factory } from '../../utils/factory.js';
|
3
|
-
import {
|
3
|
+
import { deepForEach } from '../../utils/array.js';
|
4
4
|
var name = 'forEach';
|
5
5
|
var dependencies = ['typed'];
|
6
6
|
export var createForEach = /* #__PURE__ */factory(name, dependencies, _ref => {
|
@@ -52,5 +52,5 @@ export var createForEach = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
52
52
|
* @private
|
53
53
|
*/
|
54
54
|
function _forEach(array, callback) {
|
55
|
-
|
55
|
+
deepForEach(array, optimizeCallback(callback, array, name));
|
56
56
|
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { optimizeCallback } from '../../utils/optimizeCallback.js';
|
2
|
-
import { arraySize, broadcastSizes, broadcastTo, get,
|
2
|
+
import { arraySize, broadcastSizes, broadcastTo, get, deepMap } from '../../utils/array.js';
|
3
3
|
import { factory } from '../../utils/factory.js';
|
4
4
|
var name = 'map';
|
5
5
|
var dependencies = ['typed'];
|
@@ -137,6 +137,6 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
137
137
|
* @private
|
138
138
|
*/
|
139
139
|
function _mapArray(array, callback) {
|
140
|
-
return
|
140
|
+
return deepMap(array, optimizeCallback(callback, array, name));
|
141
141
|
}
|
142
142
|
});
|
@@ -7,7 +7,7 @@ export var createPartitionSelect = /* #__PURE__ */factory(name, dependencies, _r
|
|
7
7
|
var {
|
8
8
|
typed,
|
9
9
|
isNumeric,
|
10
|
-
isNaN,
|
10
|
+
isNaN: mathIsNaN,
|
11
11
|
compare
|
12
12
|
} = _ref;
|
13
13
|
var asc = compare;
|
@@ -98,7 +98,7 @@ export var createPartitionSelect = /* #__PURE__ */factory(name, dependencies, _r
|
|
98
98
|
|
99
99
|
// check for NaN values since these can cause an infinite while loop
|
100
100
|
for (var i = 0; i < arr.length; i++) {
|
101
|
-
if (isNumeric(arr[i]) &&
|
101
|
+
if (isNumeric(arr[i]) && mathIsNaN(arr[i])) {
|
102
102
|
return arr[i]; // return NaN
|
103
103
|
}
|
104
104
|
}
|
@@ -3,13 +3,14 @@ import { factory } from '../../utils/factory.js';
|
|
3
3
|
import { safeNumberType } from '../../utils/number.js';
|
4
4
|
import { improveErrorMessage } from './utils/improveErrorMessage.js';
|
5
5
|
var name = 'max';
|
6
|
-
var dependencies = ['typed', 'config', 'numeric', 'larger'];
|
6
|
+
var dependencies = ['typed', 'config', 'numeric', 'larger', 'isNaN'];
|
7
7
|
export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
8
|
var {
|
9
9
|
typed,
|
10
10
|
config,
|
11
11
|
numeric,
|
12
|
-
larger
|
12
|
+
larger,
|
13
|
+
isNaN: mathIsNaN
|
13
14
|
} = _ref;
|
14
15
|
/**
|
15
16
|
* Compute the maximum value of a matrix or a list with values.
|
@@ -83,8 +84,8 @@ export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
83
84
|
var res;
|
84
85
|
deepForEach(array, function (value) {
|
85
86
|
try {
|
86
|
-
if (
|
87
|
-
res =
|
87
|
+
if (mathIsNaN(value)) {
|
88
|
+
res = value;
|
88
89
|
} else if (res === undefined || larger(value, res)) {
|
89
90
|
res = value;
|
90
91
|
}
|
@@ -3,13 +3,14 @@ import { factory } from '../../utils/factory.js';
|
|
3
3
|
import { safeNumberType } from '../../utils/number.js';
|
4
4
|
import { improveErrorMessage } from './utils/improveErrorMessage.js';
|
5
5
|
var name = 'min';
|
6
|
-
var dependencies = ['typed', 'config', 'numeric', 'smaller'];
|
6
|
+
var dependencies = ['typed', 'config', 'numeric', 'smaller', 'isNaN'];
|
7
7
|
export var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {
|
8
8
|
var {
|
9
9
|
typed,
|
10
10
|
config,
|
11
11
|
numeric,
|
12
|
-
smaller
|
12
|
+
smaller,
|
13
|
+
isNaN: mathIsNaN
|
13
14
|
} = _ref;
|
14
15
|
/**
|
15
16
|
* Compute the minimum value of a matrix or a list of values.
|
@@ -83,8 +84,8 @@ export var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
83
84
|
var min;
|
84
85
|
deepForEach(array, function (value) {
|
85
86
|
try {
|
86
|
-
if (
|
87
|
-
min =
|
87
|
+
if (mathIsNaN(value)) {
|
88
|
+
min = value;
|
88
89
|
} else if (min === undefined || smaller(value, min)) {
|
89
90
|
min = value;
|
90
91
|
}
|
@@ -5,7 +5,7 @@ var dependencies = ['typed', 'isNaN', 'isNumeric'];
|
|
5
5
|
export var createMode = /* #__PURE__ */factory(name, dependencies, _ref => {
|
6
6
|
var {
|
7
7
|
typed,
|
8
|
-
isNaN,
|
8
|
+
isNaN: mathIsNaN,
|
9
9
|
isNumeric
|
10
10
|
} = _ref;
|
11
11
|
/**
|
@@ -57,7 +57,7 @@ export var createMode = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
57
57
|
var max = 0;
|
58
58
|
for (var i = 0; i < values.length; i++) {
|
59
59
|
var value = values[i];
|
60
|
-
if (isNumeric(value) &&
|
60
|
+
if (isNumeric(value) && mathIsNaN(value)) {
|
61
61
|
throw new Error('Cannot calculate mode of an array containing NaN values');
|
62
62
|
}
|
63
63
|
if (!(value in count)) {
|
@@ -13,7 +13,7 @@ export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
13
13
|
multiply,
|
14
14
|
divide,
|
15
15
|
mapSlices,
|
16
|
-
isNaN
|
16
|
+
isNaN: mathIsNaN
|
17
17
|
} = _ref;
|
18
18
|
/**
|
19
19
|
* Compute the variance of a matrix or a list with values.
|
@@ -123,7 +123,7 @@ export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
123
123
|
var diff = subtract(value, mean);
|
124
124
|
sum = sum === undefined ? multiply(diff, diff) : add(sum, multiply(diff, diff));
|
125
125
|
});
|
126
|
-
if (
|
126
|
+
if (mathIsNaN(sum)) {
|
127
127
|
return sum;
|
128
128
|
}
|
129
129
|
switch (normalization) {
|
@@ -525,56 +525,35 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
525
525
|
* array, and the Matrix being traversed.
|
526
526
|
*/
|
527
527
|
DenseMatrix.prototype._forEach = function (callback) {
|
528
|
-
// matrix instance
|
529
528
|
var me = this;
|
530
529
|
var s = me.size();
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
530
|
+
var maxDepth = s.length - 1;
|
531
|
+
if (maxDepth < 0) {
|
532
|
+
return;
|
533
|
+
}
|
534
|
+
if (maxDepth === 0) {
|
535
|
+
var thisSize = s[0];
|
536
|
+
for (var i = 0; i < thisSize; i++) {
|
535
537
|
callback(me._data, i, [i]);
|
536
538
|
}
|
537
539
|
return;
|
538
540
|
}
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
data[0] = me._data[0];
|
547
|
-
for (var _i = 0; _i < last; _i++) {
|
548
|
-
data[_i + 1] = data[_i][0];
|
549
|
-
}
|
550
|
-
index[last] = -1;
|
551
|
-
while (true) {
|
552
|
-
var _i2 = void 0;
|
553
|
-
for (_i2 = last; _i2 >= 0; _i2--) {
|
554
|
-
// march index to the next permutation
|
555
|
-
index[_i2]++;
|
556
|
-
if (index[_i2] === s[_i2]) {
|
557
|
-
index[_i2] = 0;
|
558
|
-
continue;
|
559
|
-
}
|
560
|
-
|
561
|
-
// update references to matrix dimensions
|
562
|
-
data[_i2] = _i2 === 0 ? me._data[index[_i2]] : data[_i2 - 1][index[_i2]];
|
563
|
-
for (var j = _i2; j < last; j++) {
|
564
|
-
data[j + 1] = data[j][0];
|
541
|
+
var index = Array(s.length);
|
542
|
+
function recurse(data, depth) {
|
543
|
+
var thisSize = s[depth];
|
544
|
+
if (depth < maxDepth) {
|
545
|
+
for (var _i = 0; _i < thisSize; _i++) {
|
546
|
+
index[depth] = _i;
|
547
|
+
recurse(data[_i], depth + 1);
|
565
548
|
}
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
callback(data[last], _j, index.slice(0));
|
549
|
+
} else {
|
550
|
+
for (var _i2 = 0; _i2 < thisSize; _i2++) {
|
551
|
+
index[depth] = _i2;
|
552
|
+
callback(data, _i2, index.slice());
|
571
553
|
}
|
572
|
-
break;
|
573
|
-
}
|
574
|
-
if (_i2 === -1) {
|
575
|
-
break;
|
576
554
|
}
|
577
555
|
}
|
556
|
+
recurse(me._data, 0);
|
578
557
|
};
|
579
558
|
|
580
559
|
/**
|
@@ -617,19 +596,37 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
|
|
617
596
|
* @return {Iterable<{ value, index: number[] }>}
|
618
597
|
*/
|
619
598
|
DenseMatrix.prototype[Symbol.iterator] = function* () {
|
620
|
-
var
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
599
|
+
var maxDepth = this._size.length - 1;
|
600
|
+
if (maxDepth < 0) {
|
601
|
+
return;
|
602
|
+
}
|
603
|
+
if (maxDepth === 0) {
|
604
|
+
for (var i = 0; i < this._data.length; i++) {
|
626
605
|
yield {
|
627
|
-
value,
|
628
|
-
index
|
606
|
+
value: this._data[i],
|
607
|
+
index: [i]
|
629
608
|
};
|
630
609
|
}
|
610
|
+
return;
|
611
|
+
}
|
612
|
+
var index = [];
|
613
|
+
var _recurse = function* recurse(value, depth) {
|
614
|
+
if (depth < maxDepth) {
|
615
|
+
for (var _i3 = 0; _i3 < value.length; _i3++) {
|
616
|
+
index[depth] = _i3;
|
617
|
+
yield* _recurse(value[_i3], depth + 1);
|
618
|
+
}
|
619
|
+
} else {
|
620
|
+
for (var _i4 = 0; _i4 < value.length; _i4++) {
|
621
|
+
index[depth] = _i4;
|
622
|
+
yield {
|
623
|
+
value: value[_i4],
|
624
|
+
index: index.slice()
|
625
|
+
};
|
626
|
+
}
|
627
|
+
}
|
631
628
|
};
|
632
|
-
yield* _recurse(this._data,
|
629
|
+
yield* _recurse(this._data, 0);
|
633
630
|
};
|
634
631
|
|
635
632
|
/**
|