mathjs 11.5.1 → 11.6.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 (157) hide show
  1. package/HISTORY.md +21 -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/dependenciesAdd.generated.js +2 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesAnd.generated.js +2 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesAtan2.generated.js +2 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesBitAnd.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesBitOr.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesBitXor.generated.js +2 -0
  11. package/lib/cjs/entry/dependenciesAny/dependenciesCompare.generated.js +2 -0
  12. package/lib/cjs/entry/dependenciesAny/dependenciesCompareText.generated.js +2 -0
  13. package/lib/cjs/entry/dependenciesAny/dependenciesDotDivide.generated.js +2 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesDotMultiply.generated.js +2 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesDotPow.generated.js +2 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesEqual.generated.js +2 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesFft.generated.js +10 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesGcd.generated.js +2 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  20. package/lib/cjs/entry/dependenciesAny/dependenciesLargerEq.generated.js +2 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesLcm.generated.js +2 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesLeftShift.generated.js +2 -0
  23. package/lib/cjs/entry/dependenciesAny/dependenciesMod.generated.js +2 -0
  24. package/lib/cjs/entry/dependenciesAny/dependenciesNthRoot.generated.js +2 -0
  25. package/lib/cjs/entry/dependenciesAny/dependenciesOr.generated.js +2 -0
  26. package/lib/cjs/entry/dependenciesAny/dependenciesRightArithShift.generated.js +2 -0
  27. package/lib/cjs/entry/dependenciesAny/dependenciesRightLogShift.generated.js +2 -0
  28. package/lib/cjs/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +0 -2
  29. package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  30. package/lib/cjs/entry/dependenciesAny/dependenciesSmallerEq.generated.js +2 -0
  31. package/lib/cjs/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -0
  32. package/lib/cjs/entry/dependenciesAny/dependenciesTo.generated.js +2 -0
  33. package/lib/cjs/entry/dependenciesAny/dependenciesUnequal.generated.js +2 -0
  34. package/lib/cjs/entry/dependenciesAny/dependenciesXor.generated.js +2 -0
  35. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +0 -2
  36. package/lib/cjs/entry/impureFunctionsAny.generated.js +102 -103
  37. package/lib/cjs/entry/impureFunctionsNumber.generated.js +41 -42
  38. package/lib/cjs/entry/pureFunctionsAny.generated.js +405 -372
  39. package/lib/cjs/expression/embeddedDocs/function/matrix/sort.js +1 -1
  40. package/lib/cjs/function/algebra/simplifyConstant.js +1 -2
  41. package/lib/cjs/function/arithmetic/add.js +38 -37
  42. package/lib/cjs/function/arithmetic/dotDivide.js +5 -3
  43. package/lib/cjs/function/arithmetic/dotMultiply.js +5 -3
  44. package/lib/cjs/function/arithmetic/dotPow.js +5 -3
  45. package/lib/cjs/function/arithmetic/gcd.js +5 -3
  46. package/lib/cjs/function/arithmetic/lcm.js +5 -3
  47. package/lib/cjs/function/arithmetic/mod.js +5 -3
  48. package/lib/cjs/function/arithmetic/nthRoot.js +5 -3
  49. package/lib/cjs/function/arithmetic/subtract.js +5 -3
  50. package/lib/cjs/function/bitwise/bitAnd.js +5 -3
  51. package/lib/cjs/function/bitwise/bitOr.js +5 -3
  52. package/lib/cjs/function/bitwise/bitXor.js +5 -3
  53. package/lib/cjs/function/bitwise/leftShift.js +5 -3
  54. package/lib/cjs/function/bitwise/rightArithShift.js +5 -3
  55. package/lib/cjs/function/bitwise/rightLogShift.js +5 -3
  56. package/lib/cjs/function/geometry/distance.js +3 -3
  57. package/lib/cjs/function/logical/and.js +5 -3
  58. package/lib/cjs/function/logical/or.js +5 -3
  59. package/lib/cjs/function/logical/xor.js +5 -3
  60. package/lib/cjs/function/matrix/column.js +3 -1
  61. package/lib/cjs/function/matrix/fft.js +43 -4
  62. package/lib/cjs/function/matrix/getMatrixDataType.js +1 -1
  63. package/lib/cjs/function/matrix/row.js +3 -1
  64. package/lib/cjs/function/matrix/subset.js +1 -1
  65. package/lib/cjs/function/relational/compare.js +5 -3
  66. package/lib/cjs/function/relational/compareText.js +5 -3
  67. package/lib/cjs/function/relational/equal.js +5 -3
  68. package/lib/cjs/function/relational/larger.js +5 -3
  69. package/lib/cjs/function/relational/largerEq.js +5 -3
  70. package/lib/cjs/function/relational/smaller.js +5 -3
  71. package/lib/cjs/function/relational/smallerEq.js +5 -3
  72. package/lib/cjs/function/relational/unequal.js +5 -3
  73. package/lib/cjs/function/statistics/max.js +1 -1
  74. package/lib/cjs/function/statistics/quantileSeq.js +4 -3
  75. package/lib/cjs/function/trigonometry/atan2.js +5 -3
  76. package/lib/cjs/function/unit/to.js +8 -6
  77. package/lib/cjs/header.js +2 -2
  78. package/lib/cjs/type/matrix/utils/broadcast.js +84 -0
  79. package/lib/cjs/type/matrix/utils/matrixAlgorithmSuite.js +27 -20
  80. package/lib/cjs/version.js +1 -1
  81. package/lib/esm/entry/dependenciesAny/dependenciesAdd.generated.js +2 -0
  82. package/lib/esm/entry/dependenciesAny/dependenciesAnd.generated.js +2 -0
  83. package/lib/esm/entry/dependenciesAny/dependenciesAtan2.generated.js +2 -0
  84. package/lib/esm/entry/dependenciesAny/dependenciesBitAnd.generated.js +2 -0
  85. package/lib/esm/entry/dependenciesAny/dependenciesBitOr.generated.js +2 -0
  86. package/lib/esm/entry/dependenciesAny/dependenciesBitXor.generated.js +2 -0
  87. package/lib/esm/entry/dependenciesAny/dependenciesCompare.generated.js +2 -0
  88. package/lib/esm/entry/dependenciesAny/dependenciesCompareText.generated.js +2 -0
  89. package/lib/esm/entry/dependenciesAny/dependenciesDotDivide.generated.js +2 -0
  90. package/lib/esm/entry/dependenciesAny/dependenciesDotMultiply.generated.js +2 -0
  91. package/lib/esm/entry/dependenciesAny/dependenciesDotPow.generated.js +2 -0
  92. package/lib/esm/entry/dependenciesAny/dependenciesEqual.generated.js +2 -0
  93. package/lib/esm/entry/dependenciesAny/dependenciesFft.generated.js +10 -0
  94. package/lib/esm/entry/dependenciesAny/dependenciesGcd.generated.js +2 -0
  95. package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  96. package/lib/esm/entry/dependenciesAny/dependenciesLargerEq.generated.js +2 -0
  97. package/lib/esm/entry/dependenciesAny/dependenciesLcm.generated.js +2 -0
  98. package/lib/esm/entry/dependenciesAny/dependenciesLeftShift.generated.js +2 -0
  99. package/lib/esm/entry/dependenciesAny/dependenciesMod.generated.js +2 -0
  100. package/lib/esm/entry/dependenciesAny/dependenciesNthRoot.generated.js +2 -0
  101. package/lib/esm/entry/dependenciesAny/dependenciesOr.generated.js +2 -0
  102. package/lib/esm/entry/dependenciesAny/dependenciesRightArithShift.generated.js +2 -0
  103. package/lib/esm/entry/dependenciesAny/dependenciesRightLogShift.generated.js +2 -0
  104. package/lib/esm/entry/dependenciesAny/dependenciesSimplifyConstant.generated.js +0 -2
  105. package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  106. package/lib/esm/entry/dependenciesAny/dependenciesSmallerEq.generated.js +2 -0
  107. package/lib/esm/entry/dependenciesAny/dependenciesSubtract.generated.js +2 -0
  108. package/lib/esm/entry/dependenciesAny/dependenciesTo.generated.js +2 -0
  109. package/lib/esm/entry/dependenciesAny/dependenciesUnequal.generated.js +2 -0
  110. package/lib/esm/entry/dependenciesAny/dependenciesXor.generated.js +2 -0
  111. package/lib/esm/entry/dependenciesNumber/dependenciesSimplifyConstant.generated.js +0 -2
  112. package/lib/esm/entry/impureFunctionsAny.generated.js +100 -101
  113. package/lib/esm/entry/impureFunctionsNumber.generated.js +38 -39
  114. package/lib/esm/entry/pureFunctionsAny.generated.js +332 -299
  115. package/lib/esm/expression/embeddedDocs/function/matrix/sort.js +1 -1
  116. package/lib/esm/function/algebra/simplifyConstant.js +1 -2
  117. package/lib/esm/function/arithmetic/add.js +38 -37
  118. package/lib/esm/function/arithmetic/dotDivide.js +5 -3
  119. package/lib/esm/function/arithmetic/dotMultiply.js +5 -3
  120. package/lib/esm/function/arithmetic/dotPow.js +5 -3
  121. package/lib/esm/function/arithmetic/gcd.js +5 -3
  122. package/lib/esm/function/arithmetic/lcm.js +5 -3
  123. package/lib/esm/function/arithmetic/mod.js +5 -3
  124. package/lib/esm/function/arithmetic/nthRoot.js +5 -3
  125. package/lib/esm/function/arithmetic/subtract.js +5 -3
  126. package/lib/esm/function/bitwise/bitAnd.js +5 -3
  127. package/lib/esm/function/bitwise/bitOr.js +5 -3
  128. package/lib/esm/function/bitwise/bitXor.js +5 -3
  129. package/lib/esm/function/bitwise/leftShift.js +5 -3
  130. package/lib/esm/function/bitwise/rightArithShift.js +5 -3
  131. package/lib/esm/function/bitwise/rightLogShift.js +5 -3
  132. package/lib/esm/function/geometry/distance.js +3 -3
  133. package/lib/esm/function/logical/and.js +5 -3
  134. package/lib/esm/function/logical/or.js +5 -3
  135. package/lib/esm/function/logical/xor.js +5 -3
  136. package/lib/esm/function/matrix/column.js +3 -1
  137. package/lib/esm/function/matrix/fft.js +37 -4
  138. package/lib/esm/function/matrix/getMatrixDataType.js +1 -1
  139. package/lib/esm/function/matrix/row.js +3 -1
  140. package/lib/esm/function/matrix/subset.js +1 -1
  141. package/lib/esm/function/relational/compare.js +5 -3
  142. package/lib/esm/function/relational/compareText.js +5 -3
  143. package/lib/esm/function/relational/equal.js +5 -3
  144. package/lib/esm/function/relational/larger.js +5 -3
  145. package/lib/esm/function/relational/largerEq.js +5 -3
  146. package/lib/esm/function/relational/smaller.js +5 -3
  147. package/lib/esm/function/relational/smallerEq.js +5 -3
  148. package/lib/esm/function/relational/unequal.js +5 -3
  149. package/lib/esm/function/statistics/max.js +1 -1
  150. package/lib/esm/function/statistics/quantileSeq.js +4 -3
  151. package/lib/esm/function/trigonometry/atan2.js +5 -3
  152. package/lib/esm/function/unit/to.js +8 -6
  153. package/lib/esm/type/matrix/utils/broadcast.js +75 -0
  154. package/lib/esm/type/matrix/utils/matrixAlgorithmSuite.js +25 -20
  155. package/lib/esm/version.js +1 -1
  156. package/package.json +11 -11
  157. package/types/index.d.ts +4 -4
@@ -1,7 +1,7 @@
1
1
  import { arraySize } from '../../utils/array.js';
2
2
  import { factory } from '../../utils/factory.js';
3
3
  var name = 'fft';
4
- var dependencies = ['typed', 'matrix', 'addScalar', 'multiplyScalar', 'divideScalar', 'exp', 'tau', 'i'];
4
+ var dependencies = ['typed', 'matrix', 'addScalar', 'multiplyScalar', 'divideScalar', 'exp', 'tau', 'i', 'dotDivide', 'conj', 'pow', 'ceil', 'log2'];
5
5
  export var createFft = /* #__PURE__ */factory(name, dependencies, _ref => {
6
6
  var {
7
7
  typed,
@@ -11,7 +11,12 @@ export var createFft = /* #__PURE__ */factory(name, dependencies, _ref => {
11
11
  divideScalar,
12
12
  exp,
13
13
  tau,
14
- i: I
14
+ i: I,
15
+ dotDivide,
16
+ conj,
17
+ pow,
18
+ ceil,
19
+ log2
15
20
  } = _ref;
16
21
  /**
17
22
  * Calculate N-dimensional fourier transform
@@ -70,7 +75,32 @@ export var createFft = /* #__PURE__ */factory(name, dependencies, _ref => {
70
75
  }
71
76
  return _transpose(_1dFft(_transpose(arr), 1));
72
77
  }
73
-
78
+ /**
79
+ * Perform an 1-dimensional non-power-of-2 Fourier transform using Chirp-Z Transform
80
+ *
81
+ * @param {Array} arr The array
82
+ * @return {Array} resulting array
83
+ */
84
+ function _czt(arr) {
85
+ var n = arr.length;
86
+ var w = exp(divideScalar(multiplyScalar(-1, multiplyScalar(I, tau)), n));
87
+ var chirp = [];
88
+ for (var i = 1 - n; i < n; i++) {
89
+ chirp.push(pow(w, divideScalar(pow(i, 2), 2)));
90
+ }
91
+ var N2 = pow(2, ceil(log2(n + n - 1)));
92
+ var xp = [...new Array(n).fill(0).map((_, i) => multiplyScalar(arr[i], chirp[n - 1 + i])), ...new Array(N2 - n).fill(0)];
93
+ var ichirp = [...new Array(n + n - 1).fill(0).map((_, i) => divideScalar(1, chirp[i])), ...new Array(N2 - (n + n - 1)).fill(0)];
94
+ var fftXp = _fft(xp);
95
+ var fftIchirp = _fft(ichirp);
96
+ var fftProduct = new Array(N2).fill(0).map((_, i) => multiplyScalar(fftXp[i], fftIchirp[i]));
97
+ var ifftProduct = dotDivide(conj(_ndFft(conj(fftProduct))), N2);
98
+ var ret = [];
99
+ for (var _i = n - 1; _i < n + n - 1; _i++) {
100
+ ret.push(multiplyScalar(ifftProduct[_i], chirp[_i]));
101
+ }
102
+ return ret;
103
+ }
74
104
  /**
75
105
  * Perform an 1-dimensional Fourier transform
76
106
  *
@@ -89,7 +119,10 @@ export var createFft = /* #__PURE__ */factory(name, dependencies, _ref => {
89
119
  ret[k + len / 2] = addScalar(p, multiplyScalar(-1, q));
90
120
  }
91
121
  return ret;
122
+ } else {
123
+ // use chirp-z transform for non-power-of-2 FFT
124
+ return _czt(arr);
92
125
  }
93
- throw new Error('Can only calculate FFT of power-of-two size');
126
+ // throw new Error('Can only calculate FFT of power-of-two size')
94
127
  }
95
128
  });
@@ -21,7 +21,7 @@ export var createGetMatrixDataType = /* #__PURE__ */factory(name, dependencies,
21
21
  *
22
22
  * const x = [ [1, 2, 3], [4, 5, 6] ]
23
23
  * const mixedX = [ [1, true], [2, 3] ]
24
- * const fractionX = [ [math.fraction(1, 3)], [math.fraction(1, 3] ]
24
+ * const fractionX = [ [math.fraction(1, 3)], [math.fraction(1, 3)] ]
25
25
  * const unitX = [ [math.unit('5cm')], [math.unit('5cm')] ]
26
26
  * const bigNumberX = [ [math.bignumber(1)], [math.bignumber(0)] ]
27
27
  * const sparse = math.sparse(x)
@@ -1,4 +1,5 @@
1
1
  import { factory } from '../../utils/factory.js';
2
+ import { isMatrix } from '../../utils/is.js';
2
3
  import { clone } from '../../utils/object.js';
3
4
  import { validateIndex } from '../../utils/array.js';
4
5
  var name = 'row';
@@ -52,6 +53,7 @@ export var createRow = /* #__PURE__ */factory(name, dependencies, _ref => {
52
53
  validateIndex(row, value.size()[0]);
53
54
  var columnRange = range(0, value.size()[1]);
54
55
  var index = new Index(row, columnRange);
55
- return value.subset(index);
56
+ var result = value.subset(index);
57
+ return isMatrix(result) ? result : matrix([[result]]);
56
58
  }
57
59
  });
@@ -27,7 +27,7 @@ export var createSubset = /* #__PURE__ */factory(name, dependencies, _ref => {
27
27
  *
28
28
  * // replace a subset
29
29
  * const e = []
30
- * const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]] and e = [[5, 0, 6]]
30
+ * const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]]
31
31
  * const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 6], [0, 7]]
32
32
  *
33
33
  * // get submatrix using ranges
@@ -7,7 +7,7 @@ import { createMatAlgo05xSfSf } from '../../type/matrix/utils/matAlgo05xSfSf.js'
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'compare';
10
- var dependencies = ['typed', 'config', 'matrix', 'equalScalar', 'BigNumber', 'Fraction', 'DenseMatrix'];
10
+ var dependencies = ['typed', 'config', 'matrix', 'equalScalar', 'BigNumber', 'Fraction', 'DenseMatrix', 'concat'];
11
11
  export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
@@ -16,7 +16,8 @@ export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
16
16
  matrix,
17
17
  BigNumber,
18
18
  Fraction,
19
- DenseMatrix
19
+ DenseMatrix,
20
+ concat
20
21
  } = _ref;
21
22
  var matAlgo03xDSf = createMatAlgo03xDSf({
22
23
  typed
@@ -31,7 +32,8 @@ export var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {
31
32
  });
32
33
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
33
34
  typed,
34
- matrix
35
+ matrix,
36
+ concat
35
37
  });
36
38
  var compareUnits = createCompareUnits({
37
39
  typed
@@ -2,16 +2,18 @@ import { compareText as _compareText } from '../../utils/string.js';
2
2
  import { factory } from '../../utils/factory.js';
3
3
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
4
4
  var name = 'compareText';
5
- var dependencies = ['typed', 'matrix'];
5
+ var dependencies = ['typed', 'matrix', 'concat'];
6
6
  _compareText.signature = 'any, any';
7
7
  export var createCompareText = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
10
- matrix
10
+ matrix,
11
+ concat
11
12
  } = _ref;
12
13
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
13
14
  typed,
14
- matrix
15
+ matrix,
16
+ concat
15
17
  });
16
18
 
17
19
  /**
@@ -4,13 +4,14 @@ import { createMatAlgo07xSSf } from '../../type/matrix/utils/matAlgo07xSSf.js';
4
4
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
5
5
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
6
6
  var name = 'equal';
7
- var dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix'];
7
+ var dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix', 'concat'];
8
8
  export var createEqual = /* #__PURE__ */factory(name, dependencies, _ref => {
9
9
  var {
10
10
  typed,
11
11
  matrix,
12
12
  equalScalar,
13
- DenseMatrix
13
+ DenseMatrix,
14
+ concat
14
15
  } = _ref;
15
16
  var matAlgo03xDSf = createMatAlgo03xDSf({
16
17
  typed
@@ -25,7 +26,8 @@ export var createEqual = /* #__PURE__ */factory(name, dependencies, _ref => {
25
26
  });
26
27
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
27
28
  typed,
28
- matrix
29
+ matrix,
30
+ concat
29
31
  });
30
32
 
31
33
  /**
@@ -7,13 +7,14 @@ 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'];
10
+ var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat'];
11
11
  export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
15
  matrix,
16
- DenseMatrix
16
+ DenseMatrix,
17
+ concat
17
18
  } = _ref;
18
19
  var matAlgo03xDSf = createMatAlgo03xDSf({
19
20
  typed
@@ -28,7 +29,8 @@ export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
28
29
  });
29
30
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
30
31
  typed,
31
- matrix
32
+ matrix,
33
+ concat
32
34
  });
33
35
  var compareUnits = createCompareUnits({
34
36
  typed
@@ -7,13 +7,14 @@ 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 = 'largerEq';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix'];
10
+ var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat'];
11
11
  export var createLargerEq = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
15
  matrix,
16
- DenseMatrix
16
+ DenseMatrix,
17
+ concat
17
18
  } = _ref;
18
19
  var matAlgo03xDSf = createMatAlgo03xDSf({
19
20
  typed
@@ -28,7 +29,8 @@ export var createLargerEq = /* #__PURE__ */factory(name, dependencies, _ref => {
28
29
  });
29
30
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
30
31
  typed,
31
- matrix
32
+ matrix,
33
+ concat
32
34
  });
33
35
  var compareUnits = createCompareUnits({
34
36
  typed
@@ -7,13 +7,14 @@ 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'];
10
+ var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat'];
11
11
  export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
15
  matrix,
16
- DenseMatrix
16
+ DenseMatrix,
17
+ concat
17
18
  } = _ref;
18
19
  var matAlgo03xDSf = createMatAlgo03xDSf({
19
20
  typed
@@ -28,7 +29,8 @@ export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
28
29
  });
29
30
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
30
31
  typed,
31
- matrix
32
+ matrix,
33
+ concat
32
34
  });
33
35
  var compareUnits = createCompareUnits({
34
36
  typed
@@ -7,13 +7,14 @@ 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 = 'smallerEq';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix'];
10
+ var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat'];
11
11
  export var createSmallerEq = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
15
  matrix,
16
- DenseMatrix
16
+ DenseMatrix,
17
+ concat
17
18
  } = _ref;
18
19
  var matAlgo03xDSf = createMatAlgo03xDSf({
19
20
  typed
@@ -28,7 +29,8 @@ export var createSmallerEq = /* #__PURE__ */factory(name, dependencies, _ref =>
28
29
  });
29
30
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
30
31
  typed,
31
- matrix
32
+ matrix,
33
+ concat
32
34
  });
33
35
  var compareUnits = createCompareUnits({
34
36
  typed
@@ -4,14 +4,15 @@ import { createMatAlgo07xSSf } from '../../type/matrix/utils/matAlgo07xSSf.js';
4
4
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
5
5
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
6
6
  var name = 'unequal';
7
- var dependencies = ['typed', 'config', 'equalScalar', 'matrix', 'DenseMatrix'];
7
+ var dependencies = ['typed', 'config', 'equalScalar', 'matrix', 'DenseMatrix', 'concat'];
8
8
  export var createUnequal = /* #__PURE__ */factory(name, dependencies, _ref => {
9
9
  var {
10
10
  typed,
11
11
  config,
12
12
  equalScalar,
13
13
  matrix,
14
- DenseMatrix
14
+ DenseMatrix,
15
+ concat
15
16
  } = _ref;
16
17
  var matAlgo03xDSf = createMatAlgo03xDSf({
17
18
  typed
@@ -26,7 +27,8 @@ export var createUnequal = /* #__PURE__ */factory(name, dependencies, _ref => {
26
27
  });
27
28
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
28
29
  typed,
29
- matrix
30
+ matrix,
31
+ concat
30
32
  });
31
33
 
32
34
  /**
@@ -29,7 +29,7 @@ export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
29
29
  *
30
30
  * // maximum over a specified dimension (zero-based)
31
31
  * math.max([[2, 5], [4, 3], [1, 7]], 0) // returns [4, 7]
32
- * math.max([[2, 5], [4, 3]], [1, 7], 1) // returns [5, 4, 7]
32
+ * math.max([[2, 5], [4, 3], [1, 7]], 1) // returns [5, 4, 7]
33
33
  *
34
34
  * math.max(2.7, 7.1, -4.5, 2.0, 4.1) // returns 7.1
35
35
  * math.min(2.7, 7.1, -4.5, 2.0, 4.1) // returns -4.5
@@ -106,11 +106,12 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
106
106
  return probArr;
107
107
  }
108
108
  }
109
- if (Array.isArray(probOrN)) {
109
+ if (isCollection(probOrN)) {
110
110
  // quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
111
- probArr = new Array(probOrN.length);
111
+ var probOrNArr = probOrN.valueOf();
112
+ probArr = new Array(probOrNArr.length);
112
113
  for (var _i2 = 0; _i2 < probArr.length; ++_i2) {
113
- var currProb = probOrN[_i2];
114
+ var currProb = probOrNArr[_i2];
114
115
  if (isNumber(currProb)) {
115
116
  if (currProb < 0 || currProb > 1) {
116
117
  throw new Error('Probability must be between 0 and 1, inclusive');
@@ -6,14 +6,15 @@ import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
6
6
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  var name = 'atan2';
9
- var dependencies = ['typed', 'matrix', 'equalScalar', 'BigNumber', 'DenseMatrix'];
9
+ var dependencies = ['typed', 'matrix', 'equalScalar', 'BigNumber', 'DenseMatrix', 'concat'];
10
10
  export var createAtan2 = /* #__PURE__ */factory(name, dependencies, _ref => {
11
11
  var {
12
12
  typed,
13
13
  matrix,
14
14
  equalScalar,
15
15
  BigNumber,
16
- DenseMatrix
16
+ DenseMatrix,
17
+ concat
17
18
  } = _ref;
18
19
  var matAlgo02xDS0 = createMatAlgo02xDS0({
19
20
  typed,
@@ -36,7 +37,8 @@ export var createAtan2 = /* #__PURE__ */factory(name, dependencies, _ref => {
36
37
  });
37
38
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
38
39
  typed,
39
- matrix
40
+ matrix,
41
+ concat
40
42
  });
41
43
 
42
44
  /**
@@ -1,15 +1,17 @@
1
1
  import { factory } from '../../utils/factory.js';
2
2
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
3
3
  var name = 'to';
4
- var dependencies = ['typed', 'matrix'];
4
+ var dependencies = ['typed', 'matrix', 'concat'];
5
5
  export var createTo = /* #__PURE__ */factory(name, dependencies, _ref => {
6
6
  var {
7
7
  typed,
8
- matrix
8
+ matrix,
9
+ concat
9
10
  } = _ref;
10
11
  var matrixAlgorithmSuite = createMatrixAlgorithmSuite({
11
12
  typed,
12
- matrix
13
+ matrix,
14
+ concat
13
15
  });
14
16
 
15
17
  /**
@@ -23,9 +25,9 @@ export var createTo = /* #__PURE__ */factory(name, dependencies, _ref => {
23
25
  *
24
26
  * Examples:
25
27
  *
26
- * math.to(math.unit('2 inch'), 'cm') // returns Unit 5.08 cm
27
- * math.to(math.unit('2 inch'), math.unit(null, 'cm')) // returns Unit 5.08 cm
28
- * math.to(math.unit(16, 'bytes'), 'bits') // returns Unit 128 bits
28
+ * math.to(math.unit('2 inch'), 'cm') // returns Unit 5.08 cm
29
+ * math.to(math.unit('2 inch'), math.unit('cm')) // returns Unit 5.08 cm
30
+ * math.to(math.unit(16, 'bytes'), 'bits') // returns Unit 128 bits
29
31
  *
30
32
  * See also:
31
33
  *
@@ -0,0 +1,75 @@
1
+ import { factory } from '../../../utils/factory.js';
2
+ var name = 'broadcast';
3
+ var dependancies = ['concat'];
4
+ export var createBroadcast = /* #__PURE__ */factory(name, dependancies, _ref => {
5
+ var {
6
+ concat
7
+ } = _ref;
8
+ /**
9
+ * Broadcasts two matrices, and return both in an array
10
+ * It checks if it's possible with broadcasting rules
11
+ *
12
+ * @param {Matrix} A First Matrix
13
+ * @param {Matrix} B Second Matrix
14
+ *
15
+ * @return {Matrix[]} [ broadcastedA, broadcastedB ]
16
+ */
17
+ return function (A, B) {
18
+ var N = Math.max(A._size.length, B._size.length); // max number of dims
19
+ if (A._size.length === B._size.length) {
20
+ if (A._size.every((dim, i) => dim === B._size[i])) {
21
+ // If matrices have the same size return them
22
+ return [A, B];
23
+ }
24
+ }
25
+ var sizeA = _padLeft(A._size, N, 0); // pad to the left to align dimensions to the right
26
+ var sizeB = _padLeft(B._size, N, 0); // pad to the left to align dimensions to the right
27
+
28
+ // calculate the max dimensions
29
+ var sizeMax = [];
30
+ for (var dim = 0; dim < N; dim++) {
31
+ sizeMax[dim] = Math.max(sizeA[dim], sizeB[dim]);
32
+ }
33
+
34
+ // check if the broadcasting rules applyes for both matrices
35
+ for (var _dim = 0; _dim < N; _dim++) {
36
+ _checkRules(sizeA, sizeMax, _dim);
37
+ _checkRules(sizeB, sizeMax, _dim);
38
+ }
39
+
40
+ // reshape A or B if needed to make them ready for concat
41
+ var AA = A.clone();
42
+ var BB = B.clone();
43
+ if (AA._size.length < N) {
44
+ AA.reshape(_padLeft(AA._size, N, 1));
45
+ } else if (BB._size.length < N) {
46
+ BB.reshape(_padLeft(BB._size, N, 1));
47
+ }
48
+
49
+ // stretches the matrices on each dimension to make them the same size
50
+ for (var _dim2 = 0; _dim2 < N; _dim2++) {
51
+ if (AA._size[_dim2] < sizeMax[_dim2]) {
52
+ AA = _stretch(AA, sizeMax[_dim2], _dim2);
53
+ }
54
+ if (BB._size[_dim2] < sizeMax[_dim2]) {
55
+ BB = _stretch(BB, sizeMax[_dim2], _dim2);
56
+ }
57
+ }
58
+
59
+ // return the array with the two broadcasted matrices
60
+ return [AA, BB];
61
+ };
62
+ function _padLeft(shape, N, filler) {
63
+ // pads an array of dimensions with numbers to the left, unitl the number of dimensions is N
64
+ return [...Array(N - shape.length).fill(filler), ...shape];
65
+ }
66
+ function _stretch(arrayToStretch, sizeToStretch, dimToStretch) {
67
+ // stretches a matrix up to a certain size in a certain dimension
68
+ return concat(...Array(sizeToStretch).fill(arrayToStretch), dimToStretch);
69
+ }
70
+ function _checkRules(shape, sizeMax, dim) {
71
+ if (shape[dim] < sizeMax[dim] & shape[dim] > 1) {
72
+ throw new Error("shape missmatch: missmatch is found in arg with shape (".concat(shape, ") not possible to broadcast dimension ").concat(dim, " with size ").concat(shape[dim], " to size ").concat(sizeMax[dim]));
73
+ }
74
+ }
75
+ });
@@ -2,12 +2,14 @@ import { factory } from '../../../utils/factory.js';
2
2
  import { extend } from '../../../utils/object.js';
3
3
  import { createMatAlgo13xDD } from './matAlgo13xDD.js';
4
4
  import { createMatAlgo14xDs } from './matAlgo14xDs.js';
5
+ import { createBroadcast } from './broadcast.js';
5
6
  var name = 'matrixAlgorithmSuite';
6
- var dependencies = ['typed', 'matrix'];
7
+ var dependencies = ['typed', 'matrix', 'concat'];
7
8
  export var createMatrixAlgorithmSuite = /* #__PURE__ */factory(name, dependencies, _ref => {
8
9
  var {
9
10
  typed,
10
- matrix
11
+ matrix,
12
+ concat
11
13
  } = _ref;
12
14
  var matAlgo13xDD = createMatAlgo13xDD({
13
15
  typed
@@ -15,6 +17,9 @@ export var createMatrixAlgorithmSuite = /* #__PURE__ */factory(name, dependencie
15
17
  var matAlgo14xDs = createMatAlgo14xDs({
16
18
  typed
17
19
  });
20
+ var broadcast = createBroadcast({
21
+ concat
22
+ });
18
23
 
19
24
  /**
20
25
  * Return a signatures object with the usual boilerplate of
@@ -40,60 +45,60 @@ export var createMatrixAlgorithmSuite = /* #__PURE__ */factory(name, dependencie
40
45
  if (elop) {
41
46
  // First the dense ones
42
47
  matrixSignatures = {
43
- 'DenseMatrix, DenseMatrix': (x, y) => matAlgo13xDD(x, y, elop),
44
- 'Array, Array': (x, y) => matAlgo13xDD(matrix(x), matrix(y), elop).valueOf(),
45
- 'Array, DenseMatrix': (x, y) => matAlgo13xDD(matrix(x), y, elop),
46
- 'DenseMatrix, Array': (x, y) => matAlgo13xDD(x, matrix(y), elop)
48
+ 'DenseMatrix, DenseMatrix': (x, y) => matAlgo13xDD(...broadcast(x, y), elop),
49
+ 'Array, Array': (x, y) => matAlgo13xDD(...broadcast(matrix(x), matrix(y)), elop).valueOf(),
50
+ 'Array, DenseMatrix': (x, y) => matAlgo13xDD(...broadcast(matrix(x), y), elop),
51
+ 'DenseMatrix, Array': (x, y) => matAlgo13xDD(...broadcast(x, matrix(y)), elop)
47
52
  };
48
53
  // Now incorporate sparse matrices
49
54
  if (options.SS) {
50
- matrixSignatures['SparseMatrix, SparseMatrix'] = (x, y) => options.SS(x, y, elop, false);
55
+ matrixSignatures['SparseMatrix, SparseMatrix'] = (x, y) => options.SS(...broadcast(x, y), elop, false);
51
56
  }
52
57
  if (options.DS) {
53
- matrixSignatures['DenseMatrix, SparseMatrix'] = (x, y) => options.DS(x, y, elop, false);
54
- matrixSignatures['Array, SparseMatrix'] = (x, y) => options.DS(matrix(x), y, elop, false);
58
+ matrixSignatures['DenseMatrix, SparseMatrix'] = (x, y) => options.DS(...broadcast(x, y), elop, false);
59
+ matrixSignatures['Array, SparseMatrix'] = (x, y) => options.DS(...broadcast(matrix(x), y), elop, false);
55
60
  }
56
61
  if (SD) {
57
- matrixSignatures['SparseMatrix, DenseMatrix'] = (x, y) => SD(y, x, elop, true);
58
- matrixSignatures['SparseMatrix, Array'] = (x, y) => SD(matrix(y), x, elop, true);
62
+ matrixSignatures['SparseMatrix, DenseMatrix'] = (x, y) => SD(...broadcast(y, x), elop, true);
63
+ matrixSignatures['SparseMatrix, Array'] = (x, y) => SD(...broadcast(matrix(y), x), elop, true);
59
64
  }
60
65
  } else {
61
66
  // No elop, use this
62
67
  // First the dense ones
63
68
  matrixSignatures = {
64
69
  'DenseMatrix, DenseMatrix': typed.referToSelf(self => (x, y) => {
65
- return matAlgo13xDD(x, y, self);
70
+ return matAlgo13xDD(...broadcast(x, y), self);
66
71
  }),
67
72
  'Array, Array': typed.referToSelf(self => (x, y) => {
68
- return matAlgo13xDD(matrix(x), matrix(y), self).valueOf();
73
+ return matAlgo13xDD(...broadcast(matrix(x), matrix(y)), self).valueOf();
69
74
  }),
70
75
  'Array, DenseMatrix': typed.referToSelf(self => (x, y) => {
71
- return matAlgo13xDD(matrix(x), y, self);
76
+ return matAlgo13xDD(...broadcast(matrix(x), y), self);
72
77
  }),
73
78
  'DenseMatrix, Array': typed.referToSelf(self => (x, y) => {
74
- return matAlgo13xDD(x, matrix(y), self);
79
+ return matAlgo13xDD(...broadcast(x, matrix(y)), self);
75
80
  })
76
81
  };
77
82
  // Now incorporate sparse matrices
78
83
  if (options.SS) {
79
84
  matrixSignatures['SparseMatrix, SparseMatrix'] = typed.referToSelf(self => (x, y) => {
80
- return options.SS(x, y, self, false);
85
+ return options.SS(...broadcast(x, y), self, false);
81
86
  });
82
87
  }
83
88
  if (options.DS) {
84
89
  matrixSignatures['DenseMatrix, SparseMatrix'] = typed.referToSelf(self => (x, y) => {
85
- return options.DS(x, y, self, false);
90
+ return options.DS(...broadcast(x, y), self, false);
86
91
  });
87
92
  matrixSignatures['Array, SparseMatrix'] = typed.referToSelf(self => (x, y) => {
88
- return options.DS(matrix(x), y, self, false);
93
+ return options.DS(...broadcast(matrix(x), y), self, false);
89
94
  });
90
95
  }
91
96
  if (SD) {
92
97
  matrixSignatures['SparseMatrix, DenseMatrix'] = typed.referToSelf(self => (x, y) => {
93
- return SD(y, x, self, true);
98
+ return SD(...broadcast(y, x), self, true);
94
99
  });
95
100
  matrixSignatures['SparseMatrix, Array'] = typed.referToSelf(self => (x, y) => {
96
- return SD(matrix(y), x, self, true);
101
+ return SD(...broadcast(matrix(y), x), self, true);
97
102
  });
98
103
  }
99
104
  }
@@ -1,3 +1,3 @@
1
- export var version = '11.5.1';
1
+ export var version = '11.6.0';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "11.5.1",
3
+ "version": "11.6.0",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
@@ -25,7 +25,7 @@
25
25
  "unit"
26
26
  ],
27
27
  "dependencies": {
28
- "@babel/runtime": "^7.20.13",
28
+ "@babel/runtime": "^7.21.0",
29
29
  "complex.js": "^2.1.1",
30
30
  "decimal.js": "^10.4.3",
31
31
  "escape-latex": "^1.2.0",
@@ -36,24 +36,24 @@
36
36
  "typed-function": "^4.1.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@babel/core": "7.20.12",
39
+ "@babel/core": "7.21.0",
40
40
  "@babel/plugin-transform-object-assign": "7.18.6",
41
- "@babel/plugin-transform-runtime": "7.19.6",
41
+ "@babel/plugin-transform-runtime": "7.21.0",
42
42
  "@babel/preset-env": "7.20.2",
43
- "@babel/register": "7.18.9",
43
+ "@babel/register": "7.21.0",
44
44
  "@types/assert": "1.5.6",
45
45
  "@types/mocha": "10.0.1",
46
- "@typescript-eslint/eslint-plugin": "5.50.0",
47
- "@typescript-eslint/parser": "5.50.0",
46
+ "@typescript-eslint/eslint-plugin": "5.53.0",
47
+ "@typescript-eslint/parser": "5.53.0",
48
48
  "assert": "2.0.0",
49
49
  "babel-loader": "9.1.2",
50
50
  "benchmark": "2.1.4",
51
- "c8": "7.12.0",
51
+ "c8": "7.13.0",
52
52
  "codecov": "3.8.3",
53
- "core-js": "3.27.2",
53
+ "core-js": "3.28.0",
54
54
  "del": "6.1.1",
55
55
  "dtslint": "4.2.1",
56
- "eslint": "8.33.0",
56
+ "eslint": "8.34.0",
57
57
  "eslint-config-prettier": "8.6.0",
58
58
  "eslint-config-standard": "17.0.0",
59
59
  "eslint-plugin-import": "2.27.5",
@@ -85,7 +85,7 @@
85
85
  "ndarray-pack": "1.2.1",
86
86
  "numericjs": "1.2.6",
87
87
  "pad-right": "0.2.2",
88
- "prettier": "2.8.3",
88
+ "prettier": "2.8.4",
89
89
  "process": "0.11.10",
90
90
  "sylvester": "0.0.21",
91
91
  "ts-node": "10.9.1",