mathjs 14.2.0 → 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.
Files changed (73) hide show
  1. package/HISTORY.md +20 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/dependenciesAny/dependenciesMax.generated.js +2 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesMaxTransform.generated.js +2 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesMin.generated.js +2 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesMinTransform.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesNumber/dependenciesMax.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesNumber/dependenciesMaxTransform.generated.js +2 -0
  11. package/lib/cjs/entry/dependenciesNumber/dependenciesMin.generated.js +2 -0
  12. package/lib/cjs/entry/dependenciesNumber/dependenciesMinTransform.generated.js +2 -0
  13. package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -0
  14. package/lib/cjs/entry/impureFunctionsNumber.generated.js +2 -0
  15. package/lib/cjs/entry/pureFunctionsAny.generated.js +2 -0
  16. package/lib/cjs/entry/pureFunctionsNumber.generated.js +2 -0
  17. package/lib/cjs/expression/embeddedDocs/function/matrix/mapSlices.js +1 -1
  18. package/lib/cjs/expression/embeddedDocs/function/relational/larger.js +1 -1
  19. package/lib/cjs/expression/embeddedDocs/function/relational/smaller.js +1 -1
  20. package/lib/cjs/expression/embeddedDocs/function/statistics/max.js +1 -1
  21. package/lib/cjs/expression/embeddedDocs/function/statistics/min.js +1 -1
  22. package/lib/cjs/expression/transform/max.transform.js +5 -3
  23. package/lib/cjs/expression/transform/min.transform.js +5 -3
  24. package/lib/cjs/expression/transform/variance.transform.js +2 -2
  25. package/lib/cjs/function/matrix/flatten.js +1 -1
  26. package/lib/cjs/function/matrix/forEach.js +1 -1
  27. package/lib/cjs/function/matrix/map.js +1 -1
  28. package/lib/cjs/function/matrix/partitionSelect.js +2 -2
  29. package/lib/cjs/function/statistics/max.js +5 -4
  30. package/lib/cjs/function/statistics/min.js +5 -4
  31. package/lib/cjs/function/statistics/mode.js +2 -2
  32. package/lib/cjs/function/statistics/variance.js +2 -2
  33. package/lib/cjs/header.js +2 -2
  34. package/lib/cjs/type/matrix/DenseMatrix.js +45 -48
  35. package/lib/cjs/utils/array.js +120 -48
  36. package/lib/cjs/utils/collection.js +14 -15
  37. package/lib/cjs/utils/optimizeCallback.js +19 -2
  38. package/lib/cjs/version.js +1 -1
  39. package/lib/esm/entry/dependenciesAny/dependenciesMax.generated.js +2 -0
  40. package/lib/esm/entry/dependenciesAny/dependenciesMaxTransform.generated.js +2 -0
  41. package/lib/esm/entry/dependenciesAny/dependenciesMin.generated.js +2 -0
  42. package/lib/esm/entry/dependenciesAny/dependenciesMinTransform.generated.js +2 -0
  43. package/lib/esm/entry/dependenciesNumber/dependenciesMax.generated.js +2 -0
  44. package/lib/esm/entry/dependenciesNumber/dependenciesMaxTransform.generated.js +2 -0
  45. package/lib/esm/entry/dependenciesNumber/dependenciesMin.generated.js +2 -0
  46. package/lib/esm/entry/dependenciesNumber/dependenciesMinTransform.generated.js +2 -0
  47. package/lib/esm/entry/impureFunctionsAny.generated.js +2 -0
  48. package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -0
  49. package/lib/esm/entry/pureFunctionsAny.generated.js +2 -0
  50. package/lib/esm/entry/pureFunctionsNumber.generated.js +2 -0
  51. package/lib/esm/expression/embeddedDocs/function/matrix/mapSlices.js +1 -1
  52. package/lib/esm/expression/embeddedDocs/function/relational/larger.js +1 -1
  53. package/lib/esm/expression/embeddedDocs/function/relational/smaller.js +1 -1
  54. package/lib/esm/expression/embeddedDocs/function/statistics/max.js +1 -1
  55. package/lib/esm/expression/embeddedDocs/function/statistics/min.js +1 -1
  56. package/lib/esm/expression/transform/max.transform.js +5 -3
  57. package/lib/esm/expression/transform/min.transform.js +5 -3
  58. package/lib/esm/expression/transform/variance.transform.js +2 -2
  59. package/lib/esm/function/matrix/flatten.js +1 -1
  60. package/lib/esm/function/matrix/forEach.js +2 -2
  61. package/lib/esm/function/matrix/map.js +2 -2
  62. package/lib/esm/function/matrix/partitionSelect.js +2 -2
  63. package/lib/esm/function/statistics/max.js +5 -4
  64. package/lib/esm/function/statistics/min.js +5 -4
  65. package/lib/esm/function/statistics/mode.js +2 -2
  66. package/lib/esm/function/statistics/variance.js +2 -2
  67. package/lib/esm/type/matrix/DenseMatrix.js +46 -49
  68. package/lib/esm/utils/array.js +118 -47
  69. package/lib/esm/utils/collection.js +15 -16
  70. package/lib/esm/utils/optimizeCallback.js +19 -2
  71. package/lib/esm/version.js +1 -1
  72. package/package.json +10 -11
  73. package/types/index.d.ts +2 -1
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.maxDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesLargerGenerated = require("./dependenciesLarger.generated.js");
8
9
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesAny = require("../../factoriesAny.js");
14
15
  */
15
16
 
16
17
  const maxDependencies = exports.maxDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  largerDependencies: _dependenciesLargerGenerated.largerDependencies,
18
20
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.maxTransformDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesLargerGenerated = require("./dependenciesLarger.generated.js");
8
9
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesAny = require("../../factoriesAny.js");
14
15
  */
15
16
 
16
17
  const maxTransformDependencies = exports.maxTransformDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  largerDependencies: _dependenciesLargerGenerated.largerDependencies,
18
20
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.minDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
8
9
  var _dependenciesSmallerGenerated = require("./dependenciesSmaller.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesAny = require("../../factoriesAny.js");
14
15
  */
15
16
 
16
17
  const minDependencies = exports.minDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
18
20
  smallerDependencies: _dependenciesSmallerGenerated.smallerDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.minTransformDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
8
9
  var _dependenciesSmallerGenerated = require("./dependenciesSmaller.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesAny = require("../../factoriesAny.js");
14
15
  */
15
16
 
16
17
  const minTransformDependencies = exports.minTransformDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
18
20
  smallerDependencies: _dependenciesSmallerGenerated.smallerDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.maxDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesLargerGenerated = require("./dependenciesLarger.generated.js");
8
9
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesNumber = require("../../factoriesNumber.js");
14
15
  */
15
16
 
16
17
  const maxDependencies = exports.maxDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  largerDependencies: _dependenciesLargerGenerated.largerDependencies,
18
20
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.maxTransformDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesLargerGenerated = require("./dependenciesLarger.generated.js");
8
9
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesNumber = require("../../factoriesNumber.js");
14
15
  */
15
16
 
16
17
  const maxTransformDependencies = exports.maxTransformDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  largerDependencies: _dependenciesLargerGenerated.largerDependencies,
18
20
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.minDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
8
9
  var _dependenciesSmallerGenerated = require("./dependenciesSmaller.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesNumber = require("../../factoriesNumber.js");
14
15
  */
15
16
 
16
17
  const minDependencies = exports.minDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
18
20
  smallerDependencies: _dependenciesSmallerGenerated.smallerDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.minTransformDependencies = void 0;
7
+ var _dependenciesIsNaNGenerated = require("./dependenciesIsNaN.generated.js");
7
8
  var _dependenciesNumericGenerated = require("./dependenciesNumeric.generated.js");
8
9
  var _dependenciesSmallerGenerated = require("./dependenciesSmaller.generated.js");
9
10
  var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
@@ -14,6 +15,7 @@ var _factoriesNumber = require("../../factoriesNumber.js");
14
15
  */
15
16
 
16
17
  const minTransformDependencies = exports.minTransformDependencies = {
18
+ isNaNDependencies: _dependenciesIsNaNGenerated.isNaNDependencies,
17
19
  numericDependencies: _dependenciesNumericGenerated.numericDependencies,
18
20
  smallerDependencies: _dependenciesSmallerGenerated.smallerDependencies,
19
21
  typedDependencies: _dependenciesTypedGenerated.typedDependencies,
@@ -624,6 +624,7 @@ const help = exports.help = (0, _factoriesAny.createHelp)({
624
624
  }),
625
625
  min: (0, _factoriesAny.createMinTransform)({
626
626
  config: _configReadonly.config,
627
+ isNaN: _pureFunctionsAnyGenerated.isNaN,
627
628
  numeric: _pureFunctionsAnyGenerated.numeric,
628
629
  smaller: _pureFunctionsAnyGenerated.smaller,
629
630
  typed: _pureFunctionsAnyGenerated.typed
@@ -655,6 +656,7 @@ const help = exports.help = (0, _factoriesAny.createHelp)({
655
656
  }),
656
657
  max: (0, _factoriesAny.createMaxTransform)({
657
658
  config: _configReadonly.config,
659
+ isNaN: _pureFunctionsAnyGenerated.isNaN,
658
660
  larger: _pureFunctionsAnyGenerated.larger,
659
661
  numeric: _pureFunctionsAnyGenerated.numeric,
660
662
  typed: _pureFunctionsAnyGenerated.typed
@@ -462,12 +462,14 @@ const parser = exports.parser = (0, _factoriesNumber.createParser)({
462
462
  }),
463
463
  max: (0, _factoriesNumber.createMaxTransform)({
464
464
  config: _configReadonly.config,
465
+ isNaN: _pureFunctionsNumberGenerated.isNaN,
465
466
  larger: _pureFunctionsNumberGenerated.larger,
466
467
  numeric: _pureFunctionsNumberGenerated.numeric,
467
468
  typed: _pureFunctionsNumberGenerated.typed
468
469
  }),
469
470
  min: (0, _factoriesNumber.createMinTransform)({
470
471
  config: _configReadonly.config,
472
+ isNaN: _pureFunctionsNumberGenerated.isNaN,
471
473
  numeric: _pureFunctionsNumberGenerated.numeric,
472
474
  smaller: _pureFunctionsNumberGenerated.smaller,
473
475
  typed: _pureFunctionsNumberGenerated.typed
@@ -748,12 +748,14 @@ const matrixFromColumns = exports.matrixFromColumns = /* #__PURE__ */(0, _factor
748
748
  });
749
749
  const max = exports.max = /* #__PURE__ */(0, _factoriesAny.createMax)({
750
750
  config: _configReadonly.config,
751
+ isNaN,
751
752
  larger,
752
753
  numeric,
753
754
  typed
754
755
  });
755
756
  const min = exports.min = /* #__PURE__ */(0, _factoriesAny.createMin)({
756
757
  config: _configReadonly.config,
758
+ isNaN,
757
759
  numeric,
758
760
  smaller,
759
761
  typed
@@ -602,12 +602,14 @@ const corr = exports.corr = /* #__PURE__ */(0, _factoriesNumber.createCorr)({
602
602
  });
603
603
  const max = exports.max = /* #__PURE__ */(0, _factoriesNumber.createMax)({
604
604
  config: _configReadonly.config,
605
+ isNaN,
605
606
  larger,
606
607
  numeric,
607
608
  typed
608
609
  });
609
610
  const min = exports.min = /* #__PURE__ */(0, _factoriesNumber.createMin)({
610
611
  config: _configReadonly.config,
612
+ isNaN,
611
613
  numeric,
612
614
  smaller,
613
615
  typed
@@ -11,7 +11,7 @@ const mapSlicesDocs = exports.mapSlicesDocs = {
11
11
  description: 'Generate a matrix one dimension less than A by applying callback to ' + 'each slice of A along dimension dim.',
12
12
  examples: ['A = [[1, 2], [3, 4]]', 'mapSlices(A, 1, sum)',
13
13
  // returns [4, 6]
14
- 'mapSlices(A, 2, product)' // returns [2, 12]
14
+ 'mapSlices(A, 2, prod)' // returns [2, 12]
15
15
  ],
16
16
  seealso: ['map', 'forEach']
17
17
  };
@@ -8,7 +8,7 @@ const largerDocs = exports.largerDocs = {
8
8
  name: 'larger',
9
9
  category: 'Relational',
10
10
  syntax: ['x > y', 'larger(x, y)'],
11
- description: 'Check if value x is larger than y. Returns true if x is larger than y, and false if not.',
11
+ description: 'Check if value x is larger than y. Returns true if x is larger than y, and false if not. Comparing a value with NaN returns false.',
12
12
  examples: ['2 > 3', '5 > 2*2', 'a = 3.3', 'b = 6-2.8', '(a > b)', '(b < a)', '5 cm > 2 inch'],
13
13
  seealso: ['equal', 'unequal', 'smaller', 'smallerEq', 'largerEq', 'compare']
14
14
  };
@@ -8,7 +8,7 @@ const smallerDocs = exports.smallerDocs = {
8
8
  name: 'smaller',
9
9
  category: 'Relational',
10
10
  syntax: ['x < y', 'smaller(x, y)'],
11
- description: 'Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.',
11
+ description: 'Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not. Comparing a value with NaN returns false.',
12
12
  examples: ['2 < 3', '5 < 2*2', 'a = 3.3', 'b = 6-2.8', '(a < b)', '5 cm < 2 inch'],
13
13
  seealso: ['equal', 'unequal', 'larger', 'smallerEq', 'largerEq', 'compare']
14
14
  };
@@ -8,7 +8,7 @@ const maxDocs = exports.maxDocs = {
8
8
  name: 'max',
9
9
  category: 'Statistics',
10
10
  syntax: ['max(a, b, c, ...)', 'max(A)', 'max(A, dimension)'],
11
- description: 'Compute the maximum value of a list of values.',
11
+ 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.',
12
12
  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)'],
13
13
  seealso: ['mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']
14
14
  };
@@ -8,7 +8,7 @@ const minDocs = exports.minDocs = {
8
8
  name: 'min',
9
9
  category: 'Statistics',
10
10
  syntax: ['min(a, b, c, ...)', 'min(A)', 'min(A, dimension)'],
11
- description: 'Compute the minimum value of a list of values.',
11
+ 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.',
12
12
  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)'],
13
13
  seealso: ['max', 'mean', 'median', 'prod', 'std', 'sum', 'variance']
14
14
  };
@@ -9,19 +9,21 @@ var _errorTransform = require("./utils/errorTransform.js");
9
9
  var _max = require("../../function/statistics/max.js");
10
10
  var _lastDimToZeroBase = require("./utils/lastDimToZeroBase.js");
11
11
  const name = 'max';
12
- const dependencies = ['typed', 'config', 'numeric', 'larger'];
12
+ const dependencies = ['typed', 'config', 'numeric', 'larger', 'isNaN'];
13
13
  const createMaxTransform = exports.createMaxTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
14
  let {
15
15
  typed,
16
16
  config,
17
17
  numeric,
18
- larger
18
+ larger,
19
+ isNaN: mathIsNaN
19
20
  } = _ref;
20
21
  const max = (0, _max.createMax)({
21
22
  typed,
22
23
  config,
23
24
  numeric,
24
- larger
25
+ larger,
26
+ isNaN: mathIsNaN
25
27
  });
26
28
 
27
29
  /**
@@ -9,19 +9,21 @@ var _errorTransform = require("./utils/errorTransform.js");
9
9
  var _min = require("../../function/statistics/min.js");
10
10
  var _lastDimToZeroBase = require("./utils/lastDimToZeroBase.js");
11
11
  const name = 'min';
12
- const dependencies = ['typed', 'config', 'numeric', 'smaller'];
12
+ const dependencies = ['typed', 'config', 'numeric', 'smaller', 'isNaN'];
13
13
  const createMinTransform = exports.createMinTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
14
  let {
15
15
  typed,
16
16
  config,
17
17
  numeric,
18
- smaller
18
+ smaller,
19
+ isNaN: mathIsNaN
19
20
  } = _ref;
20
21
  const min = (0, _min.createMin)({
21
22
  typed,
22
23
  config,
23
24
  numeric,
24
- smaller
25
+ smaller,
26
+ isNaN: mathIsNaN
25
27
  });
26
28
 
27
29
  /**
@@ -26,7 +26,7 @@ const createVarianceTransform = exports.createVarianceTransform = /* #__PURE__ *
26
26
  multiply,
27
27
  divide,
28
28
  mapSlices,
29
- isNaN
29
+ isNaN: mathIsNaN
30
30
  } = _ref;
31
31
  const variance = (0, _variance.createVariance)({
32
32
  typed,
@@ -35,7 +35,7 @@ const createVarianceTransform = exports.createVarianceTransform = /* #__PURE__ *
35
35
  multiply,
36
36
  divide,
37
37
  mapSlices,
38
- isNaN
38
+ isNaN: mathIsNaN
39
39
  });
40
40
  return typed(name, {
41
41
  '...any': function (args) {
@@ -38,7 +38,7 @@ const createFlatten = exports.createFlatten = /* #__PURE__ */(0, _factory.factor
38
38
  Matrix: function (x) {
39
39
  // Return the same matrix type as x (Dense or Sparse Matrix)
40
40
  // Return the same data type as x
41
- return x.create((0, _array.flatten)(x.toArray()), x.datatype());
41
+ return x.create((0, _array.flatten)(x.valueOf()), x.datatype());
42
42
  }
43
43
  });
44
44
  });
@@ -58,5 +58,5 @@ const createForEach = exports.createForEach = /* #__PURE__ */(0, _factory.factor
58
58
  * @private
59
59
  */
60
60
  function _forEach(array, callback) {
61
- (0, _array.recurse)(array, [], array, (0, _optimizeCallback.optimizeCallback)(callback, array, name));
61
+ (0, _array.deepForEach)(array, (0, _optimizeCallback.optimizeCallback)(callback, array, name));
62
62
  }
@@ -143,6 +143,6 @@ const createMap = exports.createMap = /* #__PURE__ */(0, _factory.factory)(name,
143
143
  * @private
144
144
  */
145
145
  function _mapArray(array, callback) {
146
- return (0, _array.recurse)(array, [], array, (0, _optimizeCallback.optimizeCallback)(callback, array, name));
146
+ return (0, _array.deepMap)(array, (0, _optimizeCallback.optimizeCallback)(callback, array, name));
147
147
  }
148
148
  });
@@ -13,7 +13,7 @@ const createPartitionSelect = exports.createPartitionSelect = /* #__PURE__ */(0,
13
13
  let {
14
14
  typed,
15
15
  isNumeric,
16
- isNaN,
16
+ isNaN: mathIsNaN,
17
17
  compare
18
18
  } = _ref;
19
19
  const asc = compare;
@@ -104,7 +104,7 @@ const createPartitionSelect = exports.createPartitionSelect = /* #__PURE__ */(0,
104
104
 
105
105
  // check for NaN values since these can cause an infinite while loop
106
106
  for (let i = 0; i < arr.length; i++) {
107
- if (isNumeric(arr[i]) && isNaN(arr[i])) {
107
+ if (isNumeric(arr[i]) && mathIsNaN(arr[i])) {
108
108
  return arr[i]; // return NaN
109
109
  }
110
110
  }
@@ -9,13 +9,14 @@ var _factory = require("../../utils/factory.js");
9
9
  var _number = require("../../utils/number.js");
10
10
  var _improveErrorMessage = require("./utils/improveErrorMessage.js");
11
11
  const name = 'max';
12
- const dependencies = ['typed', 'config', 'numeric', 'larger'];
12
+ const dependencies = ['typed', 'config', 'numeric', 'larger', 'isNaN'];
13
13
  const createMax = exports.createMax = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
14
  let {
15
15
  typed,
16
16
  config,
17
17
  numeric,
18
- larger
18
+ larger,
19
+ isNaN: mathIsNaN
19
20
  } = _ref;
20
21
  /**
21
22
  * Compute the maximum value of a matrix or a list with values.
@@ -89,8 +90,8 @@ const createMax = exports.createMax = /* #__PURE__ */(0, _factory.factory)(name,
89
90
  let res;
90
91
  (0, _collection.deepForEach)(array, function (value) {
91
92
  try {
92
- if (typeof value === 'number' && isNaN(value)) {
93
- res = NaN;
93
+ if (mathIsNaN(value)) {
94
+ res = value;
94
95
  } else if (res === undefined || larger(value, res)) {
95
96
  res = value;
96
97
  }
@@ -9,13 +9,14 @@ var _factory = require("../../utils/factory.js");
9
9
  var _number = require("../../utils/number.js");
10
10
  var _improveErrorMessage = require("./utils/improveErrorMessage.js");
11
11
  const name = 'min';
12
- const dependencies = ['typed', 'config', 'numeric', 'smaller'];
12
+ const dependencies = ['typed', 'config', 'numeric', 'smaller', 'isNaN'];
13
13
  const createMin = exports.createMin = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
14
  let {
15
15
  typed,
16
16
  config,
17
17
  numeric,
18
- smaller
18
+ smaller,
19
+ isNaN: mathIsNaN
19
20
  } = _ref;
20
21
  /**
21
22
  * Compute the minimum value of a matrix or a list of values.
@@ -89,8 +90,8 @@ const createMin = exports.createMin = /* #__PURE__ */(0, _factory.factory)(name,
89
90
  let min;
90
91
  (0, _collection.deepForEach)(array, function (value) {
91
92
  try {
92
- if (typeof value === 'number' && isNaN(value)) {
93
- min = NaN;
93
+ if (mathIsNaN(value)) {
94
+ min = value;
94
95
  } else if (min === undefined || smaller(value, min)) {
95
96
  min = value;
96
97
  }
@@ -11,7 +11,7 @@ const dependencies = ['typed', 'isNaN', 'isNumeric'];
11
11
  const createMode = exports.createMode = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
12
12
  let {
13
13
  typed,
14
- isNaN,
14
+ isNaN: mathIsNaN,
15
15
  isNumeric
16
16
  } = _ref;
17
17
  /**
@@ -63,7 +63,7 @@ const createMode = exports.createMode = /* #__PURE__ */(0, _factory.factory)(nam
63
63
  let max = 0;
64
64
  for (let i = 0; i < values.length; i++) {
65
65
  const value = values[i];
66
- if (isNumeric(value) && isNaN(value)) {
66
+ if (isNumeric(value) && mathIsNaN(value)) {
67
67
  throw new Error('Cannot calculate mode of an array containing NaN values');
68
68
  }
69
69
  if (!(value in count)) {
@@ -19,7 +19,7 @@ const createVariance = exports.createVariance = /* #__PURE__ */(0, _factory.fact
19
19
  multiply,
20
20
  divide,
21
21
  mapSlices,
22
- isNaN
22
+ isNaN: mathIsNaN
23
23
  } = _ref;
24
24
  /**
25
25
  * Compute the variance of a matrix or a list with values.
@@ -129,7 +129,7 @@ const createVariance = exports.createVariance = /* #__PURE__ */(0, _factory.fact
129
129
  const diff = subtract(value, mean);
130
130
  sum = sum === undefined ? multiply(diff, diff) : add(sum, multiply(diff, diff));
131
131
  });
132
- if (isNaN(sum)) {
132
+ if (mathIsNaN(sum)) {
133
133
  return sum;
134
134
  }
135
135
  switch (normalization) {
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 14.2.0
10
- * @date 2025-01-30
9
+ * @version 14.3.0
10
+ * @date 2025-02-28
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
@@ -532,56 +532,35 @@ const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(
532
532
  * array, and the Matrix being traversed.
533
533
  */
534
534
  DenseMatrix.prototype._forEach = function (callback) {
535
- // matrix instance
536
535
  const me = this;
537
536
  const s = me.size();
538
-
539
- // if there is only one dimension, just loop through it
540
- if (s.length === 1) {
541
- for (let i = 0; i < s[0]; i++) {
537
+ const maxDepth = s.length - 1;
538
+ if (maxDepth < 0) {
539
+ return;
540
+ }
541
+ if (maxDepth === 0) {
542
+ const thisSize = s[0];
543
+ for (let i = 0; i < thisSize; i++) {
542
544
  callback(me._data, i, [i]);
543
545
  }
544
546
  return;
545
547
  }
546
-
547
- // keep track of the current index permutation
548
- const index = Array(s.length).fill(0);
549
-
550
- // store a reference of each dimension of the matrix for faster access
551
- const data = Array(s.length - 1);
552
- const last = data.length - 1;
553
- data[0] = me._data[0];
554
- for (let i = 0; i < last; i++) {
555
- data[i + 1] = data[i][0];
556
- }
557
- index[last] = -1;
558
- while (true) {
559
- let i;
560
- for (i = last; i >= 0; i--) {
561
- // march index to the next permutation
562
- index[i]++;
563
- if (index[i] === s[i]) {
564
- index[i] = 0;
565
- continue;
566
- }
567
-
568
- // update references to matrix dimensions
569
- data[i] = i === 0 ? me._data[index[i]] : data[i - 1][index[i]];
570
- for (let j = i; j < last; j++) {
571
- data[j + 1] = data[j][0];
548
+ const index = Array(s.length);
549
+ function recurse(data, depth) {
550
+ const thisSize = s[depth];
551
+ if (depth < maxDepth) {
552
+ for (let i = 0; i < thisSize; i++) {
553
+ index[depth] = i;
554
+ recurse(data[i], depth + 1);
572
555
  }
573
-
574
- // loop through the last dimension and map each value
575
- for (let j = 0; j < s[data.length]; j++) {
576
- index[data.length] = j;
577
- callback(data[last], j, index.slice(0));
556
+ } else {
557
+ for (let i = 0; i < thisSize; i++) {
558
+ index[depth] = i;
559
+ callback(data, i, index.slice());
578
560
  }
579
- break;
580
- }
581
- if (i === -1) {
582
- break;
583
561
  }
584
562
  }
563
+ recurse(me._data, 0);
585
564
  };
586
565
 
587
566
  /**
@@ -624,19 +603,37 @@ const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(
624
603
  * @return {Iterable<{ value, index: number[] }>}
625
604
  */
626
605
  DenseMatrix.prototype[Symbol.iterator] = function* () {
627
- const recurse = function* (value, index) {
628
- if ((0, _is.isArray)(value)) {
606
+ const maxDepth = this._size.length - 1;
607
+ if (maxDepth < 0) {
608
+ return;
609
+ }
610
+ if (maxDepth === 0) {
611
+ for (let i = 0; i < this._data.length; i++) {
612
+ yield {
613
+ value: this._data[i],
614
+ index: [i]
615
+ };
616
+ }
617
+ return;
618
+ }
619
+ const index = [];
620
+ const recurse = function* (value, depth) {
621
+ if (depth < maxDepth) {
629
622
  for (let i = 0; i < value.length; i++) {
630
- yield* recurse(value[i], index.concat(i));
623
+ index[depth] = i;
624
+ yield* recurse(value[i], depth + 1);
631
625
  }
632
626
  } else {
633
- yield {
634
- value,
635
- index
636
- };
627
+ for (let i = 0; i < value.length; i++) {
628
+ index[depth] = i;
629
+ yield {
630
+ value: value[i],
631
+ index: index.slice()
632
+ };
633
+ }
637
634
  }
638
635
  };
639
- yield* recurse(this._data, []);
636
+ yield* recurse(this._data, 0);
640
637
  };
641
638
 
642
639
  /**