mathjs 13.0.3 → 13.1.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 (210) hide show
  1. package/HISTORY.md +17 -1
  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/core/create.js +12 -9
  6. package/lib/cjs/core/function/typed.js +3 -4
  7. package/lib/cjs/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
  8. package/lib/cjs/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
  9. package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -2
  10. package/lib/cjs/entry/pureFunctionsAny.generated.js +6 -8
  11. package/lib/cjs/entry/typeChecks.js +18 -0
  12. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -2
  13. package/lib/cjs/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
  14. package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
  15. package/lib/cjs/expression/embeddedDocs/function/matrix/fft.js +1 -1
  16. package/lib/cjs/expression/embeddedDocs/function/matrix/ifft.js +1 -1
  17. package/lib/cjs/expression/embeddedDocs/function/matrix/kron.js +1 -1
  18. package/lib/cjs/expression/embeddedDocs/function/matrix/map.js +3 -3
  19. package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +1 -1
  20. package/lib/cjs/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
  21. package/lib/cjs/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
  22. package/lib/cjs/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
  23. package/lib/cjs/expression/embeddedDocs/function/utils/clone.js +1 -1
  24. package/lib/cjs/expression/function/evaluate.js +5 -0
  25. package/lib/cjs/expression/node/FunctionNode.js +1 -1
  26. package/lib/cjs/expression/transform/filter.transform.js +2 -2
  27. package/lib/cjs/expression/transform/map.transform.js +104 -37
  28. package/lib/cjs/expression/transform/utils/dimToZeroBase.js +23 -0
  29. package/lib/cjs/expression/transform/utils/lastDimToZeroBase.js +3 -4
  30. package/lib/cjs/function/arithmetic/hypot.js +3 -3
  31. package/lib/cjs/function/matrix/apply.js +1 -1
  32. package/lib/cjs/function/matrix/fft.js +3 -3
  33. package/lib/cjs/function/matrix/filter.js +2 -2
  34. package/lib/cjs/function/matrix/flatten.js +5 -6
  35. package/lib/cjs/function/matrix/ifft.js +2 -2
  36. package/lib/cjs/function/matrix/kron.js +4 -4
  37. package/lib/cjs/function/matrix/map.js +109 -18
  38. package/lib/cjs/function/matrix/size.js +7 -7
  39. package/lib/cjs/function/matrix/squeeze.js +3 -4
  40. package/lib/cjs/function/probability/random.js +1 -1
  41. package/lib/cjs/function/probability/randomInt.js +1 -1
  42. package/lib/cjs/function/statistics/cumsum.js +2 -2
  43. package/lib/cjs/function/trigonometry/acoth.js +2 -2
  44. package/lib/cjs/function/trigonometry/acsch.js +2 -2
  45. package/lib/cjs/header.js +2 -2
  46. package/lib/cjs/type/matrix/DenseMatrix.js +3 -28
  47. package/lib/cjs/type/matrix/SparseMatrix.js +5 -8
  48. package/lib/cjs/utils/array.js +27 -0
  49. package/lib/cjs/utils/collection.js +1 -1
  50. package/lib/cjs/utils/function.js +0 -14
  51. package/lib/cjs/utils/is.js +27 -0
  52. package/lib/cjs/utils/map.js +2 -20
  53. package/lib/cjs/version.js +1 -1
  54. package/lib/esm/core/create.js +9 -6
  55. package/lib/esm/core/function/typed.js +2 -3
  56. package/lib/esm/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
  57. package/lib/esm/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
  58. package/lib/esm/entry/impureFunctionsAny.generated.js +3 -3
  59. package/lib/esm/entry/pureFunctionsAny.generated.js +7 -9
  60. package/lib/esm/entry/typeChecks.js +1 -1
  61. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -2
  62. package/lib/esm/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
  63. package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
  64. package/lib/esm/expression/embeddedDocs/function/matrix/fft.js +1 -1
  65. package/lib/esm/expression/embeddedDocs/function/matrix/ifft.js +1 -1
  66. package/lib/esm/expression/embeddedDocs/function/matrix/kron.js +1 -1
  67. package/lib/esm/expression/embeddedDocs/function/matrix/map.js +3 -3
  68. package/lib/esm/expression/embeddedDocs/function/special/zeta.js +1 -1
  69. package/lib/esm/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
  70. package/lib/esm/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
  71. package/lib/esm/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
  72. package/lib/esm/expression/embeddedDocs/function/utils/clone.js +1 -1
  73. package/lib/esm/expression/function/compile.js +1 -1
  74. package/lib/esm/expression/function/evaluate.js +8 -3
  75. package/lib/esm/expression/node/FunctionNode.js +1 -1
  76. package/lib/esm/expression/parse.js +2 -2
  77. package/lib/esm/expression/transform/filter.transform.js +4 -4
  78. package/lib/esm/expression/transform/forEach.transform.js +4 -4
  79. package/lib/esm/expression/transform/map.transform.js +104 -37
  80. package/lib/esm/expression/transform/print.transform.js +2 -2
  81. package/lib/esm/expression/transform/utils/dimToZeroBase.js +16 -0
  82. package/lib/esm/expression/transform/utils/lastDimToZeroBase.js +4 -6
  83. package/lib/esm/function/algebra/decomposition/slu.js +1 -1
  84. package/lib/esm/function/algebra/derivative.js +15 -15
  85. package/lib/esm/function/algebra/lyap.js +4 -4
  86. package/lib/esm/function/algebra/simplify/util.js +3 -3
  87. package/lib/esm/function/algebra/simplifyConstant.js +9 -9
  88. package/lib/esm/function/algebra/solver/lsolve.js +3 -3
  89. package/lib/esm/function/algebra/solver/lsolveAll.js +3 -3
  90. package/lib/esm/function/algebra/solver/lusolve.js +5 -5
  91. package/lib/esm/function/algebra/solver/usolve.js +3 -3
  92. package/lib/esm/function/algebra/solver/usolveAll.js +3 -3
  93. package/lib/esm/function/algebra/sylvester.js +7 -7
  94. package/lib/esm/function/arithmetic/addScalar.js +4 -4
  95. package/lib/esm/function/arithmetic/ceil.js +6 -6
  96. package/lib/esm/function/arithmetic/divide.js +5 -5
  97. package/lib/esm/function/arithmetic/divideScalar.js +5 -5
  98. package/lib/esm/function/arithmetic/fix.js +5 -5
  99. package/lib/esm/function/arithmetic/floor.js +6 -6
  100. package/lib/esm/function/arithmetic/hypot.js +3 -3
  101. package/lib/esm/function/arithmetic/mod.js +3 -3
  102. package/lib/esm/function/arithmetic/multiply.js +7 -7
  103. package/lib/esm/function/arithmetic/multiplyScalar.js +4 -4
  104. package/lib/esm/function/arithmetic/norm.js +2 -2
  105. package/lib/esm/function/arithmetic/pow.js +6 -6
  106. package/lib/esm/function/arithmetic/round.js +7 -7
  107. package/lib/esm/function/arithmetic/subtractScalar.js +4 -4
  108. package/lib/esm/function/arithmetic/xgcd.js +1 -1
  109. package/lib/esm/function/combinatorics/bellNumbers.js +1 -1
  110. package/lib/esm/function/combinatorics/catalan.js +1 -1
  111. package/lib/esm/function/combinatorics/composition.js +1 -1
  112. package/lib/esm/function/combinatorics/stirlingS2.js +1 -1
  113. package/lib/esm/function/geometry/distance.js +4 -4
  114. package/lib/esm/function/geometry/intersect.js +2 -2
  115. package/lib/esm/function/logical/and.js +2 -2
  116. package/lib/esm/function/logical/or.js +2 -2
  117. package/lib/esm/function/logical/xor.js +2 -2
  118. package/lib/esm/function/matrix/apply.js +2 -2
  119. package/lib/esm/function/matrix/column.js +1 -1
  120. package/lib/esm/function/matrix/concat.js +1 -1
  121. package/lib/esm/function/matrix/count.js +1 -1
  122. package/lib/esm/function/matrix/cross.js +3 -3
  123. package/lib/esm/function/matrix/diag.js +10 -10
  124. package/lib/esm/function/matrix/diff.js +2 -2
  125. package/lib/esm/function/matrix/eigs.js +3 -3
  126. package/lib/esm/function/matrix/fft.js +3 -3
  127. package/lib/esm/function/matrix/filter.js +4 -4
  128. package/lib/esm/function/matrix/flatten.js +5 -6
  129. package/lib/esm/function/matrix/forEach.js +4 -4
  130. package/lib/esm/function/matrix/identity.js +6 -6
  131. package/lib/esm/function/matrix/ifft.js +3 -3
  132. package/lib/esm/function/matrix/inv.js +1 -1
  133. package/lib/esm/function/matrix/kron.js +7 -7
  134. package/lib/esm/function/matrix/map.js +110 -19
  135. package/lib/esm/function/matrix/matrixFromFunction.js +6 -6
  136. package/lib/esm/function/matrix/ones.js +2 -2
  137. package/lib/esm/function/matrix/partitionSelect.js +2 -2
  138. package/lib/esm/function/matrix/pinv.js +1 -1
  139. package/lib/esm/function/matrix/range.js +10 -10
  140. package/lib/esm/function/matrix/reshape.js +2 -2
  141. package/lib/esm/function/matrix/rotate.js +4 -4
  142. package/lib/esm/function/matrix/rotationMatrix.js +6 -6
  143. package/lib/esm/function/matrix/row.js +1 -1
  144. package/lib/esm/function/matrix/size.js +8 -8
  145. package/lib/esm/function/matrix/sort.js +4 -4
  146. package/lib/esm/function/matrix/sqrtm.js +1 -1
  147. package/lib/esm/function/matrix/squeeze.js +3 -4
  148. package/lib/esm/function/matrix/subset.js +2 -2
  149. package/lib/esm/function/matrix/zeros.js +2 -2
  150. package/lib/esm/function/probability/combinations.js +1 -1
  151. package/lib/esm/function/probability/combinationsWithRep.js +2 -2
  152. package/lib/esm/function/probability/kldivergence.js +4 -4
  153. package/lib/esm/function/probability/multinomial.js +1 -1
  154. package/lib/esm/function/probability/permutations.js +2 -2
  155. package/lib/esm/function/probability/pickRandom.js +6 -6
  156. package/lib/esm/function/probability/random.js +1 -1
  157. package/lib/esm/function/probability/randomInt.js +1 -1
  158. package/lib/esm/function/relational/compare.js +6 -6
  159. package/lib/esm/function/relational/deepEqual.js +1 -1
  160. package/lib/esm/function/relational/equal.js +1 -1
  161. package/lib/esm/function/relational/equalScalar.js +7 -7
  162. package/lib/esm/function/relational/equalText.js +1 -1
  163. package/lib/esm/function/relational/larger.js +3 -3
  164. package/lib/esm/function/relational/largerEq.js +4 -4
  165. package/lib/esm/function/relational/smaller.js +3 -3
  166. package/lib/esm/function/relational/smallerEq.js +3 -3
  167. package/lib/esm/function/relational/unequal.js +1 -1
  168. package/lib/esm/function/set/setCartesian.js +1 -1
  169. package/lib/esm/function/set/setDifference.js +1 -1
  170. package/lib/esm/function/set/setDistinct.js +1 -1
  171. package/lib/esm/function/set/setIntersect.js +1 -1
  172. package/lib/esm/function/set/setIsSubset.js +1 -1
  173. package/lib/esm/function/set/setMultiplicity.js +1 -1
  174. package/lib/esm/function/set/setPowerset.js +1 -1
  175. package/lib/esm/function/set/setSize.js +2 -2
  176. package/lib/esm/function/set/setSymDifference.js +1 -1
  177. package/lib/esm/function/set/setUnion.js +1 -1
  178. package/lib/esm/function/signal/freqz.js +6 -6
  179. package/lib/esm/function/statistics/corr.js +2 -2
  180. package/lib/esm/function/statistics/cumsum.js +3 -3
  181. package/lib/esm/function/statistics/max.js +1 -1
  182. package/lib/esm/function/statistics/median.js +3 -3
  183. package/lib/esm/function/statistics/min.js +1 -1
  184. package/lib/esm/function/statistics/prod.js +1 -1
  185. package/lib/esm/function/statistics/variance.js +2 -2
  186. package/lib/esm/function/string/bin.js +2 -2
  187. package/lib/esm/function/string/hex.js +2 -2
  188. package/lib/esm/function/string/oct.js +2 -2
  189. package/lib/esm/function/trigonometry/acoth.js +2 -2
  190. package/lib/esm/function/trigonometry/acsch.js +2 -2
  191. package/lib/esm/type/bigint.js +1 -1
  192. package/lib/esm/type/complex/function/complex.js +2 -2
  193. package/lib/esm/type/fraction/function/fraction.js +1 -1
  194. package/lib/esm/type/matrix/DenseMatrix.js +13 -38
  195. package/lib/esm/type/matrix/SparseMatrix.js +5 -8
  196. package/lib/esm/type/matrix/function/index.js +1 -1
  197. package/lib/esm/type/matrix/function/matrix.js +1 -1
  198. package/lib/esm/type/matrix/function/sparse.js +2 -2
  199. package/lib/esm/type/number.js +1 -1
  200. package/lib/esm/type/unit/function/createUnit.js +3 -3
  201. package/lib/esm/type/unit/function/splitUnit.js +1 -1
  202. package/lib/esm/type/unit/function/unit.js +2 -2
  203. package/lib/esm/utils/array.js +26 -0
  204. package/lib/esm/utils/collection.js +1 -1
  205. package/lib/esm/utils/function.js +0 -13
  206. package/lib/esm/utils/is.js +24 -0
  207. package/lib/esm/utils/map.js +2 -19
  208. package/lib/esm/version.js +1 -1
  209. package/package.json +13 -13
  210. package/types/index.d.ts +57 -18
@@ -54,37 +54,37 @@ export var createDiag = /* #__PURE__ */factory(name, dependencies, _ref => {
54
54
  Array: function Array(x) {
55
55
  return _diag(x, 0, arraySize(x), null);
56
56
  },
57
- 'Array, number': function ArrayNumber(x, k) {
57
+ 'Array, number': function Array_number(x, k) {
58
58
  return _diag(x, k, arraySize(x), null);
59
59
  },
60
- 'Array, BigNumber': function ArrayBigNumber(x, k) {
60
+ 'Array, BigNumber': function Array_BigNumber(x, k) {
61
61
  return _diag(x, k.toNumber(), arraySize(x), null);
62
62
  },
63
- 'Array, string': function ArrayString(x, format) {
63
+ 'Array, string': function Array_string(x, format) {
64
64
  return _diag(x, 0, arraySize(x), format);
65
65
  },
66
- 'Array, number, string': function ArrayNumberString(x, k, format) {
66
+ 'Array, number, string': function Array_number_string(x, k, format) {
67
67
  return _diag(x, k, arraySize(x), format);
68
68
  },
69
- 'Array, BigNumber, string': function ArrayBigNumberString(x, k, format) {
69
+ 'Array, BigNumber, string': function Array_BigNumber_string(x, k, format) {
70
70
  return _diag(x, k.toNumber(), arraySize(x), format);
71
71
  },
72
72
  Matrix: function Matrix(x) {
73
73
  return _diag(x, 0, x.size(), x.storage());
74
74
  },
75
- 'Matrix, number': function MatrixNumber(x, k) {
75
+ 'Matrix, number': function Matrix_number(x, k) {
76
76
  return _diag(x, k, x.size(), x.storage());
77
77
  },
78
- 'Matrix, BigNumber': function MatrixBigNumber(x, k) {
78
+ 'Matrix, BigNumber': function Matrix_BigNumber(x, k) {
79
79
  return _diag(x, k.toNumber(), x.size(), x.storage());
80
80
  },
81
- 'Matrix, string': function MatrixString(x, format) {
81
+ 'Matrix, string': function Matrix_string(x, format) {
82
82
  return _diag(x, 0, x.size(), format);
83
83
  },
84
- 'Matrix, number, string': function MatrixNumberString(x, k, format) {
84
+ 'Matrix, number, string': function Matrix_number_string(x, k, format) {
85
85
  return _diag(x, k, x.size(), format);
86
86
  },
87
- 'Matrix, BigNumber, string': function MatrixBigNumberString(x, k, format) {
87
+ 'Matrix, BigNumber, string': function Matrix_BigNumber_string(x, k, format) {
88
88
  return _diag(x, k.toNumber(), x.size(), format);
89
89
  }
90
90
  });
@@ -57,7 +57,7 @@ export var createDiff = /* #__PURE__ */factory(name, dependencies, _ref => {
57
57
  * @return {Array | Matrix} Difference between array elements in given dimension
58
58
  */
59
59
  return typed(name, {
60
- 'Array | Matrix': function ArrayMatrix(arr) {
60
+ 'Array | Matrix': function Array__Matrix(arr) {
61
61
  // No dimension specified => assume dimension 0
62
62
  if (isMatrix(arr)) {
63
63
  return matrix(_diff(arr.toArray()));
@@ -65,7 +65,7 @@ export var createDiff = /* #__PURE__ */factory(name, dependencies, _ref => {
65
65
  return _diff(arr);
66
66
  }
67
67
  },
68
- 'Array | Matrix, number': function ArrayMatrixNumber(arr, dim) {
68
+ 'Array | Matrix, number': function Array__Matrix_number(arr, dim) {
69
69
  if (!isInteger(dim)) throw new RangeError('Dimension must be a whole number');
70
70
  if (isMatrix(arr)) {
71
71
  return matrix(_recursive(arr.toArray(), dim));
@@ -158,7 +158,7 @@ export var createEigs = /* #__PURE__ */factory(name, dependencies, _ref => {
158
158
  Array: function Array(x) {
159
159
  return doEigs(matrix(x));
160
160
  },
161
- 'Array, number|BigNumber': function ArrayNumberBigNumber(x, prec) {
161
+ 'Array, number|BigNumber': function Array_numberBigNumber(x, prec) {
162
162
  return doEigs(matrix(x), {
163
163
  precision: prec
164
164
  });
@@ -171,13 +171,13 @@ export var createEigs = /* #__PURE__ */factory(name, dependencies, _ref => {
171
171
  matricize: true
172
172
  });
173
173
  },
174
- 'Matrix, number|BigNumber': function MatrixNumberBigNumber(mat, prec) {
174
+ 'Matrix, number|BigNumber': function Matrix_numberBigNumber(mat, prec) {
175
175
  return doEigs(mat, {
176
176
  precision: prec,
177
177
  matricize: true
178
178
  });
179
179
  },
180
- 'Matrix, Object': function MatrixObject(mat, opts) {
180
+ 'Matrix, Object': function Matrix_Object(mat, opts) {
181
181
  var useOpts = {
182
182
  matricize: true
183
183
  };
@@ -19,7 +19,7 @@ export var createFft = /* #__PURE__ */factory(name, dependencies, _ref => {
19
19
  log2
20
20
  } = _ref;
21
21
  /**
22
- * Calculate N-dimensional fourier transform
22
+ * Calculate N-dimensional Fourier transform
23
23
  *
24
24
  * Syntax:
25
25
  *
@@ -35,12 +35,12 @@ export var createFft = /* #__PURE__ */factory(name, dependencies, _ref => {
35
35
  * ifft
36
36
  *
37
37
  * @param {Array | Matrix} arr An array or matrix
38
- * @return {Array | Matrix} N-dimensional fourier transformation of the array
38
+ * @return {Array | Matrix} N-dimensional Fourier transformation of the array
39
39
  */
40
40
  return typed(name, {
41
41
  Array: _ndFft,
42
42
  Matrix: function Matrix(matrix) {
43
- return matrix.create(_ndFft(matrix.toArray()));
43
+ return matrix.create(_ndFft(matrix.valueOf()), matrix.datatype());
44
44
  }
45
45
  });
46
46
 
@@ -38,12 +38,12 @@ export var createFilter = /* #__PURE__ */factory(name, dependencies, _ref => {
38
38
  */
39
39
  return typed('filter', {
40
40
  'Array, function': _filterCallback,
41
- 'Matrix, function': function MatrixFunction(x, test) {
42
- return x.create(_filterCallback(x.toArray(), test));
41
+ 'Matrix, function': function Matrix_function(x, test) {
42
+ return x.create(_filterCallback(x.valueOf(), test), x.datatype());
43
43
  },
44
44
  'Array, RegExp': filterRegExp,
45
- 'Matrix, RegExp': function MatrixRegExp(x, test) {
46
- return x.create(filterRegExp(x.toArray(), test));
45
+ 'Matrix, RegExp': function Matrix_RegExp(x, test) {
46
+ return x.create(filterRegExp(x.valueOf(), test), x.datatype());
47
47
  }
48
48
  });
49
49
  });
@@ -1,11 +1,10 @@
1
1
  import { flatten as flattenArray } from '../../utils/array.js';
2
2
  import { factory } from '../../utils/factory.js';
3
3
  var name = 'flatten';
4
- var dependencies = ['typed', 'matrix'];
4
+ var dependencies = ['typed'];
5
5
  export var createFlatten = /* #__PURE__ */factory(name, dependencies, _ref => {
6
6
  var {
7
- typed,
8
- matrix
7
+ typed
9
8
  } = _ref;
10
9
  /**
11
10
  * Flatten a multidimensional matrix into a single dimensional matrix.
@@ -31,9 +30,9 @@ export var createFlatten = /* #__PURE__ */factory(name, dependencies, _ref => {
31
30
  return flattenArray(x);
32
31
  },
33
32
  Matrix: function Matrix(x) {
34
- var flat = flattenArray(x.toArray());
35
- // TODO: return the same matrix type as x (Dense or Sparse Matrix)
36
- return matrix(flat);
33
+ // Return the same matrix type as x (Dense or Sparse Matrix)
34
+ // Return the same data type as x
35
+ return x.create(flattenArray(x.toArray()), x.datatype());
37
36
  }
38
37
  });
39
38
  });
@@ -32,7 +32,7 @@ export var createForEach = /* #__PURE__ */factory(name, dependencies, _ref => {
32
32
  */
33
33
  return typed(name, {
34
34
  'Array, function': _forEach,
35
- 'Matrix, function': function MatrixFunction(x, callback) {
35
+ 'Matrix, function': function Matrix_function(x, callback) {
36
36
  x.forEach(callback);
37
37
  }
38
38
  });
@@ -45,16 +45,16 @@ export var createForEach = /* #__PURE__ */factory(name, dependencies, _ref => {
45
45
  * @private
46
46
  */
47
47
  function _forEach(array, callback) {
48
- var recurse = function recurse(value, index) {
48
+ var _recurse = function recurse(value, index) {
49
49
  if (Array.isArray(value)) {
50
50
  forEachArray(value, function (child, i) {
51
51
  // we create a copy of the index array and append the new index value
52
- recurse(child, index.concat(i));
52
+ _recurse(child, index.concat(i));
53
53
  });
54
54
  } else {
55
55
  // invoke the callback function with the right number of arguments
56
56
  return applyCallback(callback, value, index, array, 'forEach');
57
57
  }
58
58
  };
59
- recurse(array, []);
59
+ _recurse(array, []);
60
60
  }
@@ -50,28 +50,28 @@ export var createIdentity = /* #__PURE__ */factory(name, dependencies, _ref => {
50
50
  string: function string(format) {
51
51
  return matrix(format);
52
52
  },
53
- 'number | BigNumber': function numberBigNumber(rows) {
53
+ 'number | BigNumber': function number__BigNumber(rows) {
54
54
  return _identity(rows, rows, config.matrix === 'Matrix' ? 'dense' : undefined);
55
55
  },
56
- 'number | BigNumber, string': function numberBigNumberString(rows, format) {
56
+ 'number | BigNumber, string': function number__BigNumber_string(rows, format) {
57
57
  return _identity(rows, rows, format);
58
58
  },
59
- 'number | BigNumber, number | BigNumber': function numberBigNumberNumberBigNumber(rows, cols) {
59
+ 'number | BigNumber, number | BigNumber': function number__BigNumber_number__BigNumber(rows, cols) {
60
60
  return _identity(rows, cols, config.matrix === 'Matrix' ? 'dense' : undefined);
61
61
  },
62
- 'number | BigNumber, number | BigNumber, string': function numberBigNumberNumberBigNumberString(rows, cols, format) {
62
+ 'number | BigNumber, number | BigNumber, string': function number__BigNumber_number__BigNumber_string(rows, cols, format) {
63
63
  return _identity(rows, cols, format);
64
64
  },
65
65
  Array: function Array(size) {
66
66
  return _identityVector(size);
67
67
  },
68
- 'Array, string': function ArrayString(size, format) {
68
+ 'Array, string': function Array_string(size, format) {
69
69
  return _identityVector(size, format);
70
70
  },
71
71
  Matrix: function Matrix(size) {
72
72
  return _identityVector(size.valueOf(), size.storage());
73
73
  },
74
- 'Matrix, string': function MatrixString(size, format) {
74
+ 'Matrix, string': function Matrix_string(size, format) {
75
75
  return _identityVector(size.valueOf(), format);
76
76
  }
77
77
  });
@@ -11,7 +11,7 @@ export var createIfft = /* #__PURE__ */factory(name, dependencies, _ref => {
11
11
  conj
12
12
  } = _ref;
13
13
  /**
14
- * Calculate N-dimensional inverse fourier transform
14
+ * Calculate N-dimensional inverse Fourier transform
15
15
  *
16
16
  * Syntax:
17
17
  *
@@ -26,10 +26,10 @@ export var createIfft = /* #__PURE__ */factory(name, dependencies, _ref => {
26
26
  * fft
27
27
  *
28
28
  * @param {Array | Matrix} arr An array or matrix
29
- * @return {Array | Matrix} N-dimensional fourier transformation of the array
29
+ * @return {Array | Matrix} N-dimensional Fourier transformation of the array
30
30
  */
31
31
  return typed(name, {
32
- 'Array | Matrix': function ArrayMatrix(arr) {
32
+ 'Array | Matrix': function Array__Matrix(arr) {
33
33
  var size = isMatrix(arr) ? arr.size() : arraySize(arr);
34
34
  return dotDivide(conj(fft(conj(arr))), size.reduce((acc, curr) => acc * curr, 1));
35
35
  }
@@ -37,7 +37,7 @@ export var createInv = /* #__PURE__ */factory(name, dependencies, _ref => {
37
37
  * @return {number | Complex | Array | Matrix} The inverse of `x`.
38
38
  */
39
39
  return typed(name, {
40
- 'Array | Matrix': function ArrayMatrix(x) {
40
+ 'Array | Matrix': function Array__Matrix(x) {
41
41
  var size = isMatrix(x) ? x.size() : arraySize(x);
42
42
  switch (size.length) {
43
43
  case 1:
@@ -9,7 +9,7 @@ export var createKron = /* #__PURE__ */factory(name, dependencies, _ref => {
9
9
  multiplyScalar
10
10
  } = _ref;
11
11
  /**
12
- * Calculates the kronecker product of 2 matrices or vectors.
12
+ * Calculates the Kronecker product of 2 matrices or vectors.
13
13
  *
14
14
  * NOTE: If a one dimensional vector / matrix is given, it will be
15
15
  * wrapped so its two dimensions.
@@ -33,26 +33,26 @@ export var createKron = /* #__PURE__ */factory(name, dependencies, _ref => {
33
33
  *
34
34
  * @param {Array | Matrix} x First vector
35
35
  * @param {Array | Matrix} y Second vector
36
- * @return {Array | Matrix} Returns the kronecker product of `x` and `y`
36
+ * @return {Array | Matrix} Returns the Kronecker product of `x` and `y`
37
37
  */
38
38
  return typed(name, {
39
- 'Matrix, Matrix': function MatrixMatrix(x, y) {
39
+ 'Matrix, Matrix': function Matrix_Matrix(x, y) {
40
40
  return matrix(_kron(x.toArray(), y.toArray()));
41
41
  },
42
- 'Matrix, Array': function MatrixArray(x, y) {
42
+ 'Matrix, Array': function Matrix_Array(x, y) {
43
43
  return matrix(_kron(x.toArray(), y));
44
44
  },
45
- 'Array, Matrix': function ArrayMatrix(x, y) {
45
+ 'Array, Matrix': function Array_Matrix(x, y) {
46
46
  return matrix(_kron(x, y.toArray()));
47
47
  },
48
48
  'Array, Array': _kron
49
49
  });
50
50
 
51
51
  /**
52
- * Calculate the kronecker product of two matrices / vectors
52
+ * Calculate the Kronecker product of two matrices / vectors
53
53
  * @param {Array} a First vector
54
54
  * @param {Array} b Second vector
55
- * @returns {Array} Returns the kronecker product of x and y
55
+ * @returns {Array} Returns the Kronecker product of x and y
56
56
  * @private
57
57
  */
58
58
  function _kron(a, b) {
@@ -1,4 +1,5 @@
1
1
  import { applyCallback } from '../../utils/applyCallback.js';
2
+ import { arraySize, broadcastSizes, broadcastTo, get } from '../../utils/array.js';
2
3
  import { factory } from '../../utils/factory.js';
3
4
  var name = 'map';
4
5
  var dependencies = ['typed'];
@@ -10,9 +11,12 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
10
11
  * Create a new matrix or array with the results of a callback function executed on
11
12
  * each entry of a given matrix/array.
12
13
  *
13
- * For each entry of the input, the callback is invoked with three arguments:
14
- * the value of the entry, the index at which that entry occurs, and the full
15
- * matrix/array being traversed. Note that because the matrix/array might be
14
+ * For each entry of the input,
15
+ *
16
+ * the callback is invoked with 2N + 1 arguments:
17
+ * the N values of the entry, the index at which that entry occurs, and the N full
18
+ * broadcasted matrix/array being traversed where N is the number of matrices being traversed.
19
+ * Note that because the matrix/array might be
16
20
  * multidimensional, the "index" argument is always an array of numbers giving
17
21
  * the index in each dimension. This is true even for vectors: the "index"
18
22
  * argument is an array of length 1, rather than simply a number.
@@ -20,17 +24,23 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
20
24
  * Syntax:
21
25
  *
22
26
  * math.map(x, callback)
27
+ * math.map(x, y, ..., callback)
23
28
  *
24
29
  * Examples:
25
30
  *
26
31
  * math.map([1, 2, 3], function(value) {
27
32
  * return value * value
28
33
  * }) // returns [1, 4, 9]
34
+ * math.map([1, 2], [3, 4], function(a, b) {
35
+ * return a + b
36
+ * }) // returns [4, 6]
29
37
  *
30
38
  * // The callback is normally called with three arguments:
31
39
  * // callback(value, index, Array)
32
40
  * // If you want to call with only one argument, use:
33
41
  * math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']
42
+ * // It can also be called with 2N + 1 arguments: for N arrays
43
+ * // callback(value1, value2, index, BroadcastedArray1, BroadcastedArray2)
34
44
  *
35
45
  * See also:
36
46
  *
@@ -43,11 +53,82 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
43
53
  * Transformed map of x; always has the same type and shape as x
44
54
  */
45
55
  return typed(name, {
46
- 'Array, function': _map,
47
- 'Matrix, function': function MatrixFunction(x, callback) {
56
+ 'Array, function': _mapArray,
57
+ 'Matrix, function': function Matrix_function(x, callback) {
48
58
  return x.map(callback);
49
- }
59
+ },
60
+ 'Array|Matrix, Array|Matrix, ...Array|Matrix|function': (A, B, rest) => _mapMultiple([A, B, ...rest.slice(0, rest.length - 1)], rest[rest.length - 1])
50
61
  });
62
+
63
+ /**
64
+ * Maps over multiple arrays or matrices.
65
+ *
66
+ * @param {Array<Array|Matrix>} Arrays - An array of arrays or matrices to map over.
67
+ * @param {function} multiCallback - The callback function to apply to each element.
68
+ * @throws {Error} If the last argument is not a callback function.
69
+ * @returns {Array|Matrix} A new array or matrix with each element being the result of the callback function.
70
+ *
71
+ * @example
72
+ * _mapMultiple([[1, 2, 3], [4, 5, 6]], (a, b) => a + b); // Returns [5, 7, 9]
73
+ */
74
+ function _mapMultiple(Arrays, multiCallback) {
75
+ if (typeof multiCallback !== 'function') {
76
+ throw new Error('Last argument must be a callback function');
77
+ }
78
+ var firstArrayIsMatrix = Arrays[0].isMatrix;
79
+ var newSize = broadcastSizes(...Arrays.map(M => M.isMatrix ? M.size() : arraySize(M)));
80
+ var _get = firstArrayIsMatrix ? (matrix, idx) => matrix.get(idx) : get;
81
+ var broadcastedArrays = firstArrayIsMatrix ? Arrays.map(M => M.isMatrix ? M.create(broadcastTo(M.toArray(), newSize), M.datatype()) : Arrays[0].create(broadcastTo(M.valueOf(), newSize))) : Arrays.map(M => M.isMatrix ? broadcastTo(M.toArray(), newSize) : broadcastTo(M, newSize));
82
+ var callback;
83
+ if (typed.isTypedFunction(multiCallback)) {
84
+ var firstIndex = newSize.map(() => 0);
85
+ var firstValues = broadcastedArrays.map(array => _get(array, firstIndex));
86
+ var callbackCase = _getTypedCallbackCase(multiCallback, firstValues, firstIndex, broadcastedArrays);
87
+ callback = _getLimitedCallback(callbackCase);
88
+ } else {
89
+ var numberOfArrays = Arrays.length;
90
+ var _callbackCase = _getCallbackCase(multiCallback, numberOfArrays);
91
+ callback = _getLimitedCallback(_callbackCase);
92
+ }
93
+ var broadcastedArraysCallback = (x, idx) => callback([x, ...broadcastedArrays.slice(1).map(Array => _get(Array, idx))], idx);
94
+ if (firstArrayIsMatrix) {
95
+ return broadcastedArrays[0].map(broadcastedArraysCallback);
96
+ } else {
97
+ return _mapArray(broadcastedArrays[0], broadcastedArraysCallback);
98
+ }
99
+ function _getLimitedCallback(callbackCase) {
100
+ switch (callbackCase) {
101
+ case 0:
102
+ return x => multiCallback(...x);
103
+ case 1:
104
+ return (x, idx) => multiCallback(...x, idx);
105
+ case 2:
106
+ return (x, idx) => multiCallback(...x, idx, ...broadcastedArrays);
107
+ }
108
+ }
109
+ function _getCallbackCase(callback, numberOfArrays) {
110
+ if (callback.length > numberOfArrays + 1) {
111
+ return 2;
112
+ }
113
+ if (callback.length === numberOfArrays + 1) {
114
+ return 1;
115
+ }
116
+ return 0;
117
+ }
118
+ function _getTypedCallbackCase(callback, values, idx, arrays) {
119
+ if (typed.resolve(callback, [...values, idx, ...arrays]) !== null) {
120
+ return 2;
121
+ }
122
+ if (typed.resolve(callback, [...values, idx]) !== null) {
123
+ return 1;
124
+ }
125
+ if (typed.resolve(callback, values) !== null) {
126
+ return 0;
127
+ }
128
+ // this should never happen
129
+ return 0;
130
+ }
131
+ }
51
132
  });
52
133
 
53
134
  /**
@@ -57,17 +138,27 @@ export var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {
57
138
  * @return {Array}
58
139
  * @private
59
140
  */
60
- function _map(array, callback) {
61
- var recurse = function recurse(value, index) {
62
- if (Array.isArray(value)) {
63
- return value.map(function (child, i) {
64
- // we create a copy of the index array and append the new index value
65
- return recurse(child, index.concat(i));
66
- });
67
- } else {
68
- // invoke the callback function with the right number of arguments
69
- return applyCallback(callback, value, index, array, 'map');
70
- }
71
- };
72
- return recurse(array, []);
141
+ function _mapArray(array, callback) {
142
+ return _recurse(array, [], array, callback);
143
+ }
144
+
145
+ /**
146
+ * Recursive function to map a multi-dimensional array.
147
+ *
148
+ * @param {*} value - The current value being processed in the array.
149
+ * @param {Array} index - The index of the current value being processed in the array.
150
+ * @param {Array} array - The array being processed.
151
+ * @param {Function} callback - Function that produces the element of the new Array, taking three arguments: the value of the element, the index of the element, and the Array being processed.
152
+ * @returns {*} The new array with each element being the result of the callback function.
153
+ */
154
+ function _recurse(value, index, array, callback) {
155
+ if (Array.isArray(value)) {
156
+ return value.map(function (child, i) {
157
+ // we create a copy of the index array and append the new index value
158
+ return _recurse(child, index.concat(i), array, callback);
159
+ });
160
+ } else {
161
+ // invoke the callback function with the right number of arguments
162
+ return applyCallback(callback, value, index, array, 'map');
163
+ }
73
164
  }
@@ -37,22 +37,22 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
37
37
  * @return {Array | Matrix} Returns the created matrix
38
38
  */
39
39
  return typed(name, {
40
- 'Array | Matrix, function, string, string': function ArrayMatrixFunctionStringString(size, fn, format, datatype) {
40
+ 'Array | Matrix, function, string, string': function Array__Matrix_function_string_string(size, fn, format, datatype) {
41
41
  return _create(size, fn, format, datatype);
42
42
  },
43
- 'Array | Matrix, function, string': function ArrayMatrixFunctionString(size, fn, format) {
43
+ 'Array | Matrix, function, string': function Array__Matrix_function_string(size, fn, format) {
44
44
  return _create(size, fn, format);
45
45
  },
46
- 'Matrix, function': function MatrixFunction(size, fn) {
46
+ 'Matrix, function': function Matrix_function(size, fn) {
47
47
  return _create(size, fn, 'dense');
48
48
  },
49
- 'Array, function': function ArrayFunction(size, fn) {
49
+ 'Array, function': function Array_function(size, fn) {
50
50
  return _create(size, fn, 'dense').toArray();
51
51
  },
52
- 'Array | Matrix, string, function': function ArrayMatrixStringFunction(size, format, fn) {
52
+ 'Array | Matrix, string, function': function Array__Matrix_string_function(size, format, fn) {
53
53
  return _create(size, fn, format);
54
54
  },
55
- 'Array | Matrix, string, string, function': function ArrayMatrixStringStringFunction(size, format, datatype, fn) {
55
+ 'Array | Matrix, string, string, function': function Array__Matrix_string_string_function(size, format, datatype, fn) {
56
56
  return _create(size, fn, format, datatype);
57
57
  }
58
58
  });
@@ -51,7 +51,7 @@ export var createOnes = /* #__PURE__ */factory(name, dependencies, _ref => {
51
51
  },
52
52
  // math.ones(m, n, p, ..., format)
53
53
  // TODO: more accurate signature '...number | BigNumber, string' as soon as typed-function supports this
54
- '...number | BigNumber | string': function numberBigNumberString(size) {
54
+ '...number | BigNumber | string': function number__BigNumber__string(size) {
55
55
  var last = size[size.length - 1];
56
56
  if (typeof last === 'string') {
57
57
  var format = size.pop();
@@ -67,7 +67,7 @@ export var createOnes = /* #__PURE__ */factory(name, dependencies, _ref => {
67
67
  var format = size.storage();
68
68
  return _ones(size.valueOf(), format);
69
69
  },
70
- 'Array | Matrix, string': function ArrayMatrixString(size, format) {
70
+ 'Array | Matrix, string': function Array__Matrix_string(size, format) {
71
71
  return _ones(size.valueOf(), format);
72
72
  }
73
73
  });
@@ -51,10 +51,10 @@ export var createPartitionSelect = /* #__PURE__ */factory(name, dependencies, _r
51
51
  * @return {*} Returns the kth lowest value.
52
52
  */
53
53
  return typed(name, {
54
- 'Array | Matrix, number': function ArrayMatrixNumber(x, k) {
54
+ 'Array | Matrix, number': function Array__Matrix_number(x, k) {
55
55
  return _partitionSelect(x, k, asc);
56
56
  },
57
- 'Array | Matrix, number, string': function ArrayMatrixNumberString(x, k, compare) {
57
+ 'Array | Matrix, number, string': function Array__Matrix_number_string(x, k, compare) {
58
58
  if (compare === 'asc') {
59
59
  return _partitionSelect(x, k, asc);
60
60
  } else if (compare === 'desc') {
@@ -41,7 +41,7 @@ export var createPinv = /* #__PURE__ */factory(name, dependencies, _ref => {
41
41
  * @return {number | Complex | Array | Matrix} The inverse of `x`.
42
42
  */
43
43
  return typed(name, {
44
- 'Array | Matrix': function ArrayMatrix(x) {
44
+ 'Array | Matrix': function Array__Matrix(x) {
45
45
  var size = isMatrix(x) ? x.size() : arraySize(x);
46
46
  switch (size.length) {
47
47
  case 1:
@@ -65,36 +65,36 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
65
65
  // TODO: a number or boolean should not be converted to string here
66
66
  string: _strRange,
67
67
  'string, boolean': _strRange,
68
- 'number, number': function numberNumber(start, end) {
68
+ 'number, number': function number_number(start, end) {
69
69
  return _out(_range(start, end, 1, false));
70
70
  },
71
- 'number, number, number': function numberNumberNumber(start, end, step) {
71
+ 'number, number, number': function number_number_number(start, end, step) {
72
72
  return _out(_range(start, end, step, false));
73
73
  },
74
- 'number, number, boolean': function numberNumberBoolean(start, end, includeEnd) {
74
+ 'number, number, boolean': function number_number_boolean(start, end, includeEnd) {
75
75
  return _out(_range(start, end, 1, includeEnd));
76
76
  },
77
- 'number, number, number, boolean': function numberNumberNumberBoolean(start, end, step, includeEnd) {
77
+ 'number, number, number, boolean': function number_number_number_boolean(start, end, step, includeEnd) {
78
78
  return _out(_range(start, end, step, includeEnd));
79
79
  },
80
- 'BigNumber, BigNumber': function BigNumberBigNumber(start, end) {
80
+ 'BigNumber, BigNumber': function BigNumber_BigNumber(start, end) {
81
81
  var BigNumber = start.constructor;
82
82
  return _out(_range(start, end, new BigNumber(1), false));
83
83
  },
84
- 'BigNumber, BigNumber, BigNumber': function BigNumberBigNumberBigNumber(start, end, step) {
84
+ 'BigNumber, BigNumber, BigNumber': function BigNumber_BigNumber_BigNumber(start, end, step) {
85
85
  return _out(_range(start, end, step, false));
86
86
  },
87
- 'BigNumber, BigNumber, boolean': function BigNumberBigNumberBoolean(start, end, includeEnd) {
87
+ 'BigNumber, BigNumber, boolean': function BigNumber_BigNumber_boolean(start, end, includeEnd) {
88
88
  var BigNumber = start.constructor;
89
89
  return _out(_range(start, end, new BigNumber(1), includeEnd));
90
90
  },
91
- 'BigNumber, BigNumber, BigNumber, boolean': function BigNumberBigNumberBigNumberBoolean(start, end, step, includeEnd) {
91
+ 'BigNumber, BigNumber, BigNumber, boolean': function BigNumber_BigNumber_BigNumber_boolean(start, end, step, includeEnd) {
92
92
  return _out(_range(start, end, step, includeEnd));
93
93
  },
94
- 'Unit, Unit, Unit': function UnitUnitUnit(start, end, step) {
94
+ 'Unit, Unit, Unit': function Unit_Unit_Unit(start, end, step) {
95
95
  return _out(_range(start, end, step, false));
96
96
  },
97
- 'Unit, Unit, Unit, boolean': function UnitUnitUnitBoolean(start, end, step, includeEnd) {
97
+ 'Unit, Unit, Unit, boolean': function Unit_Unit_Unit_boolean(start, end, step, includeEnd) {
98
98
  return _out(_range(start, end, step, includeEnd));
99
99
  }
100
100
  });
@@ -48,10 +48,10 @@ export var createReshape = /* #__PURE__ */factory(name, dependencies, _ref => {
48
48
  * not equal that of the old ones
49
49
  */
50
50
  return typed(name, {
51
- 'Matrix, Array': function MatrixArray(x, sizes) {
51
+ 'Matrix, Array': function Matrix_Array(x, sizes) {
52
52
  return x.reshape(sizes, true);
53
53
  },
54
- 'Array, Array': function ArrayArray(x, sizes) {
54
+ 'Array, Array': function Array_Array(x, sizes) {
55
55
  sizes.forEach(function (size) {
56
56
  if (!isInteger(size)) {
57
57
  throw new TypeError('Invalid size for dimension: ' + size);
@@ -37,21 +37,21 @@ export var createRotate = /* #__PURE__ */factory(name, dependencies, _ref => {
37
37
  * @return {Array | Matrix} Multiplication of the rotation matrix and w
38
38
  */
39
39
  return typed(name, {
40
- 'Array , number | BigNumber | Complex | Unit': function ArrayNumberBigNumberComplexUnit(w, theta) {
40
+ 'Array , number | BigNumber | Complex | Unit': function Array__number__BigNumber__Complex__Unit(w, theta) {
41
41
  _validateSize(w, 2);
42
42
  var matrixRes = multiply(rotationMatrix(theta), w);
43
43
  return matrixRes.toArray();
44
44
  },
45
- 'Matrix , number | BigNumber | Complex | Unit': function MatrixNumberBigNumberComplexUnit(w, theta) {
45
+ 'Matrix , number | BigNumber | Complex | Unit': function Matrix__number__BigNumber__Complex__Unit(w, theta) {
46
46
  _validateSize(w, 2);
47
47
  return multiply(rotationMatrix(theta), w);
48
48
  },
49
- 'Array, number | BigNumber | Complex | Unit, Array | Matrix': function ArrayNumberBigNumberComplexUnitArrayMatrix(w, theta, v) {
49
+ 'Array, number | BigNumber | Complex | Unit, Array | Matrix': function Array_number__BigNumber__Complex__Unit_Array__Matrix(w, theta, v) {
50
50
  _validateSize(w, 3);
51
51
  var matrixRes = multiply(rotationMatrix(theta, v), w);
52
52
  return matrixRes;
53
53
  },
54
- 'Matrix, number | BigNumber | Complex | Unit, Array | Matrix': function MatrixNumberBigNumberComplexUnitArrayMatrix(w, theta, v) {
54
+ 'Matrix, number | BigNumber | Complex | Unit, Array | Matrix': function Matrix_number__BigNumber__Complex__Unit_Array__Matrix(w, theta, v) {
55
55
  _validateSize(w, 3);
56
56
  return multiply(rotationMatrix(theta, v), w);
57
57
  }