mathjs 11.5.1 → 11.6.0

Sign up to get free protection for your applications and to get access to all the features.
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",