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
@@ -1,7 +1,6 @@
1
- import { applyCallback } from '../../utils/applyCallback.js';
2
- import { map } from '../../utils/array.js';
3
1
  import { factory } from '../../utils/factory.js';
4
2
  import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';
3
+ import { createMap } from '../../function/matrix/map.js';
5
4
  import { compileInlineExpression } from './utils/compileInlineExpression.js';
6
5
  var name = 'map';
7
6
  var dependencies = ['typed'];
@@ -15,57 +14,125 @@ export var createMapTransform = /* #__PURE__ */factory(name, dependencies, _ref
15
14
  *
16
15
  * This transform creates a one-based index instead of a zero-based index
17
16
  */
17
+ var map = createMap({
18
+ typed
19
+ });
18
20
  function mapTransform(args, math, scope) {
19
- var x, callback;
20
- if (args[0]) {
21
- x = args[0].compile().evaluate(scope);
21
+ if (args.length === 0) {
22
+ return map();
22
23
  }
23
- if (args[1]) {
24
- if (isSymbolNode(args[1]) || isFunctionAssignmentNode(args[1])) {
24
+ if (args.length === 1) {
25
+ return map(args[0]);
26
+ }
27
+ var N = args.length - 1;
28
+ var X, callback;
29
+ callback = args[N];
30
+ X = args.slice(0, N);
31
+ X = X.map(arg => _compileAndEvaluate(arg, scope));
32
+ if (callback) {
33
+ if (isSymbolNode(callback) || isFunctionAssignmentNode(callback)) {
25
34
  // a function pointer, like filter([3, -2, 5], myTestFunction)
26
- callback = args[1].compile().evaluate(scope);
35
+ callback = _compileAndEvaluate(callback, scope);
27
36
  } else {
28
37
  // an expression like filter([3, -2, 5], x > 0)
29
- callback = compileInlineExpression(args[1], math, scope);
38
+ callback = compileInlineExpression(callback, math, scope);
30
39
  }
31
40
  }
32
- return map(x, callback);
41
+ return map(...X, _transformCallback(callback, N));
42
+ function _compileAndEvaluate(arg, scope) {
43
+ return arg.compile().evaluate(scope);
44
+ }
33
45
  }
34
46
  mapTransform.rawArgs = true;
47
+ return mapTransform;
35
48
 
36
- // one-based version of map function
37
- var map = typed('map', {
38
- 'Array, function': function ArrayFunction(x, callback) {
39
- return _map(x, callback, x);
40
- },
41
- 'Matrix, function': function MatrixFunction(x, callback) {
42
- return x.create(_map(x.valueOf(), callback, x));
49
+ /**
50
+ * Transforms the given callback function based on its type and number of arrays.
51
+ *
52
+ * @param {Function} callback - The callback function to transform.
53
+ * @param {number} numberOfArrays - The number of arrays to pass to the callback function.
54
+ * @returns {*} - The transformed callback function.
55
+ */
56
+ function _transformCallback(callback, numberOfArrays) {
57
+ if (typed.isTypedFunction(callback)) {
58
+ return _transformTypedCallbackFunction(callback, numberOfArrays);
59
+ } else {
60
+ return _transformCallbackFunction(callback, callback.length, numberOfArrays);
43
61
  }
44
- });
45
- return mapTransform;
62
+ }
63
+
64
+ /**
65
+ * Transforms the given typed callback function based on the number of arrays.
66
+ *
67
+ * @param {Function} typedFunction - The typed callback function to transform.
68
+ * @param {number} numberOfArrays - The number of arrays to pass to the callback function.
69
+ * @returns {*} - The transformed typed callback function.
70
+ */
71
+ function _transformTypedCallbackFunction(typedFunction, numberOfArrays) {
72
+ var signatures = Object.fromEntries(Object.entries(typedFunction.signatures).map(_ref2 => {
73
+ var [signature, callbackFunction] = _ref2;
74
+ var numberOfCallbackInputs = signature.split(',').length;
75
+ if (typed.isTypedFunction(callbackFunction)) {
76
+ return [signature, _transformTypedCallbackFunction(callbackFunction, numberOfArrays)];
77
+ } else {
78
+ return [signature, _transformCallbackFunction(callbackFunction, numberOfCallbackInputs, numberOfArrays)];
79
+ }
80
+ }));
81
+ if (typeof typedFunction.name === 'string') {
82
+ return typed(typedFunction.name, signatures);
83
+ } else {
84
+ return typed(signatures);
85
+ }
86
+ }
46
87
  }, {
47
88
  isTransformFunction: true
48
89
  });
49
90
 
50
91
  /**
51
- * Map for a multidimensional array. One-based indexes
52
- * @param {Array} array
53
- * @param {function} callback
54
- * @param {Array} orig
55
- * @return {Array}
56
- * @private
92
+ * Transforms the callback function based on the number of callback inputs and arrays.
93
+ * There are three cases:
94
+ * 1. The callback function has N arguments.
95
+ * 2. The callback function has N+1 arguments.
96
+ * 3. The callback function has 2N+1 arguments.
97
+ *
98
+ * @param {Function} callbackFunction - The callback function to transform.
99
+ * @param {number} numberOfCallbackInputs - The number of callback inputs.
100
+ * @param {number} numberOfArrays - The number of arrays.
101
+ * @returns {Function} The transformed callback function.
57
102
  */
58
- function _map(array, callback, orig) {
59
- function recurse(value, index) {
60
- if (Array.isArray(value)) {
61
- return map(value, function (child, i) {
62
- // we create a copy of the index array and append the new index value
63
- return recurse(child, index.concat(i + 1)); // one based index, hence i + 1
64
- });
65
- } else {
66
- // invoke the (typed) callback function with the right number of arguments
67
- return applyCallback(callback, value, index, orig, 'map');
68
- }
103
+ function _transformCallbackFunction(callbackFunction, numberOfCallbackInputs, numberOfArrays) {
104
+ if (numberOfCallbackInputs === numberOfArrays) {
105
+ return callbackFunction;
106
+ } else if (numberOfCallbackInputs === numberOfArrays + 1) {
107
+ return function () {
108
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
109
+ args[_key] = arguments[_key];
110
+ }
111
+ var vals = args.slice(0, numberOfArrays);
112
+ var idx = _transformDims(args[numberOfArrays]);
113
+ return callbackFunction(...vals, idx);
114
+ };
115
+ } else if (numberOfCallbackInputs > numberOfArrays + 1) {
116
+ return function () {
117
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
118
+ args[_key2] = arguments[_key2];
119
+ }
120
+ var vals = args.slice(0, numberOfArrays);
121
+ var idx = _transformDims(args[numberOfArrays]);
122
+ var rest = args.slice(numberOfArrays + 1);
123
+ return callbackFunction(...vals, idx, ...rest);
124
+ };
125
+ } else {
126
+ return callbackFunction;
69
127
  }
70
- return recurse(array, []);
128
+ }
129
+
130
+ /**
131
+ * Transforms the dimensions by adding 1 to each dimension.
132
+ *
133
+ * @param {Array} dims - The dimensions to transform.
134
+ * @returns {Array} The transformed dimensions.
135
+ */
136
+ function _transformDims(dims) {
137
+ return dims.map(dim => dim.isBigNumber ? dim.plus(1) : dim + 1);
71
138
  }
@@ -17,10 +17,10 @@ export var createPrintTransform = /* #__PURE__ */factory(name, dependencies, _re
17
17
  add
18
18
  });
19
19
  return typed(name, {
20
- 'string, Object | Array': function stringObjectArray(template, values) {
20
+ 'string, Object | Array': function string_Object__Array(template, values) {
21
21
  return print(_convertTemplateToZeroBasedIndex(template), values);
22
22
  },
23
- 'string, Object | Array, number | Object': function stringObjectArrayNumberObject(template, values, options) {
23
+ 'string, Object | Array, number | Object': function string_Object__Array_number__Object(template, values, options) {
24
24
  return print(_convertTemplateToZeroBasedIndex(template), values, options);
25
25
  }
26
26
  });
@@ -0,0 +1,16 @@
1
+ import { isNumber, isBigNumber } from '../../../utils/is.js';
2
+ /**
3
+ * Change last argument dim from one-based to zero-based.
4
+ */
5
+ export function dimToZeroBase(dim) {
6
+ if (isNumber(dim)) {
7
+ return dim - 1;
8
+ } else if (isBigNumber(dim)) {
9
+ return dim.minus(1);
10
+ } else {
11
+ return dim;
12
+ }
13
+ }
14
+ export function isNumberOrBigNumber(n) {
15
+ return isNumber(n) || isBigNumber(n);
16
+ }
@@ -1,5 +1,5 @@
1
- import { isBigNumber, isCollection, isNumber } from '../../../utils/is.js';
2
-
1
+ import { isCollection } from '../../../utils/is.js';
2
+ import { dimToZeroBase, isNumberOrBigNumber } from './dimToZeroBase.js';
3
3
  /**
4
4
  * Change last argument dim from one-based to zero-based.
5
5
  */
@@ -7,10 +7,8 @@ export function lastDimToZeroBase(args) {
7
7
  if (args.length === 2 && isCollection(args[0])) {
8
8
  args = args.slice();
9
9
  var dim = args[1];
10
- if (isNumber(dim)) {
11
- args[1] = dim - 1;
12
- } else if (isBigNumber(dim)) {
13
- args[1] = dim.minus(1);
10
+ if (isNumberOrBigNumber(dim)) {
11
+ args[1] = dimToZeroBase(dim);
14
12
  }
15
13
  }
16
14
  return args;
@@ -70,7 +70,7 @@ export var createSlu = /* #__PURE__ */factory(name, dependencies, _ref => {
70
70
  * @return {Object} The lower triangular matrix, the upper triangular matrix and the permutation vectors.
71
71
  */
72
72
  return typed(name, {
73
- 'SparseMatrix, number, number': function SparseMatrixNumberNumber(a, order, threshold) {
73
+ 'SparseMatrix, number, number': function SparseMatrix_number_number(a, order, threshold) {
74
74
  // verify order
75
75
  if (!isInteger(order) || order < 0 || order > 3) {
76
76
  throw new Error('Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]');
@@ -99,24 +99,24 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
99
99
  // FIXME: move the toTex method of derivative to latex.js. Difficulty is that it relies on parse.
100
100
  // NOTE: the optional "order" parameter here is currently unused
101
101
  var _derivTex = typed('_derivTex', {
102
- 'Node, SymbolNode': function NodeSymbolNode(expr, x) {
102
+ 'Node, SymbolNode': function Node_SymbolNode(expr, x) {
103
103
  if (isConstantNode(expr) && typeOf(expr.value) === 'string') {
104
104
  return _derivTex(parse(expr.value).toString(), x.toString(), 1);
105
105
  } else {
106
106
  return _derivTex(expr.toTex(), x.toString(), 1);
107
107
  }
108
108
  },
109
- 'Node, ConstantNode': function NodeConstantNode(expr, x) {
109
+ 'Node, ConstantNode': function Node_ConstantNode(expr, x) {
110
110
  if (typeOf(x.value) === 'string') {
111
111
  return _derivTex(expr, parse(x.value));
112
112
  } else {
113
113
  throw new Error("The second parameter to 'derivative' is a non-string constant");
114
114
  }
115
115
  },
116
- 'Node, SymbolNode, ConstantNode': function NodeSymbolNodeConstantNode(expr, x, order) {
116
+ 'Node, SymbolNode, ConstantNode': function Node_SymbolNode_ConstantNode(expr, x, order) {
117
117
  return _derivTex(expr.toString(), x.name, order.value);
118
118
  },
119
- 'string, string, number': function stringStringNumber(expr, x, order) {
119
+ 'string, string, number': function string_string_number(expr, x, order) {
120
120
  var d;
121
121
  if (order === 1) {
122
122
  d = '{d\\over d' + x + '}';
@@ -143,11 +143,11 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
143
143
  */
144
144
  // TODO: can we rewrite constTag into a pure function?
145
145
  var constTag = typed('constTag', {
146
- 'Object, ConstantNode, string': function ObjectConstantNodeString(constNodes, node) {
146
+ 'Object, ConstantNode, string': function Object_ConstantNode_string(constNodes, node) {
147
147
  constNodes[node] = true;
148
148
  return true;
149
149
  },
150
- 'Object, SymbolNode, string': function ObjectSymbolNodeString(constNodes, node, varName) {
150
+ 'Object, SymbolNode, string': function Object_SymbolNode_string(constNodes, node, varName) {
151
151
  // Treat other variables like constants. For reasoning, see:
152
152
  // https://en.wikipedia.org/wiki/Partial_derivative
153
153
  if (node.name !== varName) {
@@ -156,17 +156,17 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
156
156
  }
157
157
  return false;
158
158
  },
159
- 'Object, ParenthesisNode, string': function ObjectParenthesisNodeString(constNodes, node, varName) {
159
+ 'Object, ParenthesisNode, string': function Object_ParenthesisNode_string(constNodes, node, varName) {
160
160
  return constTag(constNodes, node.content, varName);
161
161
  },
162
- 'Object, FunctionAssignmentNode, string': function ObjectFunctionAssignmentNodeString(constNodes, node, varName) {
162
+ 'Object, FunctionAssignmentNode, string': function Object_FunctionAssignmentNode_string(constNodes, node, varName) {
163
163
  if (!node.params.includes(varName)) {
164
164
  constNodes[node] = true;
165
165
  return true;
166
166
  }
167
167
  return constTag(constNodes, node.expr, varName);
168
168
  },
169
- 'Object, FunctionNode | OperatorNode, string': function ObjectFunctionNodeOperatorNodeString(constNodes, node, varName) {
169
+ 'Object, FunctionNode | OperatorNode, string': function Object_FunctionNode__OperatorNode_string(constNodes, node, varName) {
170
170
  if (node.args.length > 0) {
171
171
  var isConst = constTag(constNodes, node.args[0], varName);
172
172
  for (var i = 1; i < node.args.length; ++i) {
@@ -189,25 +189,25 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
189
189
  * @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} The derivative of `expr`
190
190
  */
191
191
  var _derivative = typed('_derivative', {
192
- 'ConstantNode, Object': function ConstantNodeObject(node) {
192
+ 'ConstantNode, Object': function ConstantNode_Object(node) {
193
193
  return createConstantNode(0);
194
194
  },
195
- 'SymbolNode, Object': function SymbolNodeObject(node, constNodes) {
195
+ 'SymbolNode, Object': function SymbolNode_Object(node, constNodes) {
196
196
  if (constNodes[node] !== undefined) {
197
197
  return createConstantNode(0);
198
198
  }
199
199
  return createConstantNode(1);
200
200
  },
201
- 'ParenthesisNode, Object': function ParenthesisNodeObject(node, constNodes) {
201
+ 'ParenthesisNode, Object': function ParenthesisNode_Object(node, constNodes) {
202
202
  return new ParenthesisNode(_derivative(node.content, constNodes));
203
203
  },
204
- 'FunctionAssignmentNode, Object': function FunctionAssignmentNodeObject(node, constNodes) {
204
+ 'FunctionAssignmentNode, Object': function FunctionAssignmentNode_Object(node, constNodes) {
205
205
  if (constNodes[node] !== undefined) {
206
206
  return createConstantNode(0);
207
207
  }
208
208
  return _derivative(node.expr, constNodes);
209
209
  },
210
- 'FunctionNode, Object': function FunctionNodeObject(node, constNodes) {
210
+ 'FunctionNode, Object': function FunctionNode_Object(node, constNodes) {
211
211
  if (constNodes[node] !== undefined) {
212
212
  return createConstantNode(0);
213
213
  }
@@ -411,7 +411,7 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
411
411
  }
412
412
  return new OperatorNode(op, func, [chainDerivative, funcDerivative]);
413
413
  },
414
- 'OperatorNode, Object': function OperatorNodeObject(node, constNodes) {
414
+ 'OperatorNode, Object': function OperatorNode_Object(node, constNodes) {
415
415
  if (constNodes[node] !== undefined) {
416
416
  return createConstantNode(0);
417
417
  }
@@ -36,16 +36,16 @@ export var createLyap = /* #__PURE__ */factory(name, dependencies, _ref => {
36
36
  * @return {Matrix | Array} Matrix P solution to the Continuous-time Lyapunov equation AP+PA'=Q
37
37
  */
38
38
  return typed(name, {
39
- 'Matrix, Matrix': function MatrixMatrix(A, Q) {
39
+ 'Matrix, Matrix': function Matrix_Matrix(A, Q) {
40
40
  return sylvester(A, transpose(A), multiply(-1, Q));
41
41
  },
42
- 'Array, Matrix': function ArrayMatrix(A, Q) {
42
+ 'Array, Matrix': function Array_Matrix(A, Q) {
43
43
  return sylvester(matrix(A), transpose(matrix(A)), multiply(-1, Q));
44
44
  },
45
- 'Matrix, Array': function MatrixArray(A, Q) {
45
+ 'Matrix, Array': function Matrix_Array(A, Q) {
46
46
  return sylvester(A, transpose(matrix(A)), matrix(multiply(-1, Q)));
47
47
  },
48
- 'Array, Array': function ArrayArray(A, Q) {
48
+ 'Array, Array': function Array_Array(A, Q) {
49
49
  return sylvester(matrix(A), transpose(matrix(A)), matrix(multiply(-1, Q))).toArray();
50
50
  }
51
51
  });
@@ -168,11 +168,11 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
168
168
  function allChildren(node, context) {
169
169
  var op;
170
170
  var children = [];
171
- var findChildren = function findChildren(node) {
171
+ var _findChildren = function findChildren(node) {
172
172
  for (var i = 0; i < node.args.length; i++) {
173
173
  var child = node.args[i];
174
174
  if (isOperatorNode(child) && op === child.op) {
175
- findChildren(child);
175
+ _findChildren(child);
176
176
  } else {
177
177
  children.push(child);
178
178
  }
@@ -180,7 +180,7 @@ export var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {
180
180
  };
181
181
  if (isAssociative(node, context)) {
182
182
  op = node.op;
183
- findChildren(node);
183
+ _findChildren(node);
184
184
  return children;
185
185
  } else {
186
186
  return node.args;
@@ -62,7 +62,7 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
62
62
  */
63
63
  var simplifyConstant = typed('simplifyConstant', {
64
64
  Node: node => _ensureNode(foldFraction(node, {})),
65
- 'Node, Object': function NodeObject(expr, options) {
65
+ 'Node, Object': function Node_Object(expr, options) {
66
66
  return _ensureNode(foldFraction(expr, options));
67
67
  }
68
68
  });
@@ -142,7 +142,7 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
142
142
  // Convert numbers to a preferred number type in preference order: Fraction, number, Complex
143
143
  // BigNumbers are left alone
144
144
  var _toNumber = typed({
145
- 'string, Object': function stringObject(s, options) {
145
+ 'string, Object': function string_Object(s, options) {
146
146
  var numericType = safeNumberType(s, config);
147
147
  if (numericType === 'BigNumber') {
148
148
  if (bignumber === undefined) {
@@ -161,32 +161,32 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
161
161
  return _exactFraction(n, options);
162
162
  }
163
163
  },
164
- 'Fraction, Object': function FractionObject(s, options) {
164
+ 'Fraction, Object': function Fraction_Object(s, options) {
165
165
  return s;
166
166
  },
167
167
  // we don't need options here
168
168
 
169
- 'BigNumber, Object': function BigNumberObject(s, options) {
169
+ 'BigNumber, Object': function BigNumber_Object(s, options) {
170
170
  return s;
171
171
  },
172
172
  // we don't need options here
173
173
 
174
- 'number, Object': function numberObject(s, options) {
174
+ 'number, Object': function number_Object(s, options) {
175
175
  return _exactFraction(s, options);
176
176
  },
177
- 'bigint, Object': function bigintObject(s, options) {
177
+ 'bigint, Object': function bigint_Object(s, options) {
178
178
  return s;
179
179
  },
180
- 'Complex, Object': function ComplexObject(s, options) {
180
+ 'Complex, Object': function Complex_Object(s, options) {
181
181
  if (s.im !== 0) {
182
182
  return s;
183
183
  }
184
184
  return _exactFraction(s.re, options);
185
185
  },
186
- 'Matrix, Object': function MatrixObject(s, options) {
186
+ 'Matrix, Object': function Matrix_Object(s, options) {
187
187
  return matrix(_exactFraction(s.valueOf()));
188
188
  },
189
- 'Array, Object': function ArrayObject(s, options) {
189
+ 'Array, Object': function Array_Object(s, options) {
190
190
  return s.map(_exactFraction);
191
191
  }
192
192
  });
@@ -41,13 +41,13 @@ export var createLsolve = /* #__PURE__ */factory(name, dependencies, _ref => {
41
41
  * @return {DenseMatrix | Array} A column vector with the linear system solution (x)
42
42
  */
43
43
  return typed(name, {
44
- 'SparseMatrix, Array | Matrix': function SparseMatrixArrayMatrix(m, b) {
44
+ 'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
45
45
  return _sparseForwardSubstitution(m, b);
46
46
  },
47
- 'DenseMatrix, Array | Matrix': function DenseMatrixArrayMatrix(m, b) {
47
+ 'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
48
48
  return _denseForwardSubstitution(m, b);
49
49
  },
50
- 'Array, Array | Matrix': function ArrayArrayMatrix(a, b) {
50
+ 'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
51
51
  var m = matrix(a);
52
52
  var r = _denseForwardSubstitution(m, b);
53
53
  return r.valueOf();
@@ -41,13 +41,13 @@ export var createLsolveAll = /* #__PURE__ */factory(name, dependencies, _ref =>
41
41
  * @return {DenseMatrix[] | Array[]} An array of affine-independent column vectors (x) that solve the linear system
42
42
  */
43
43
  return typed(name, {
44
- 'SparseMatrix, Array | Matrix': function SparseMatrixArrayMatrix(m, b) {
44
+ 'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
45
45
  return _sparseForwardSubstitution(m, b);
46
46
  },
47
- 'DenseMatrix, Array | Matrix': function DenseMatrixArrayMatrix(m, b) {
47
+ 'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
48
48
  return _denseForwardSubstitution(m, b);
49
49
  },
50
- 'Array, Array | Matrix': function ArrayArrayMatrix(a, b) {
50
+ 'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
51
51
  var m = matrix(a);
52
52
  var R = _denseForwardSubstitution(m, b);
53
53
  return R.map(r => r.valueOf());
@@ -52,25 +52,25 @@ export var createLusolve = /* #__PURE__ */factory(name, dependencies, _ref => {
52
52
  * @return {DenseMatrix | Array} Column vector with the solution to the linear system A * x = b
53
53
  */
54
54
  return typed(name, {
55
- 'Array, Array | Matrix': function ArrayArrayMatrix(a, b) {
55
+ 'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
56
56
  a = matrix(a);
57
57
  var d = lup(a);
58
58
  var x = _lusolve(d.L, d.U, d.p, null, b);
59
59
  return x.valueOf();
60
60
  },
61
- 'DenseMatrix, Array | Matrix': function DenseMatrixArrayMatrix(a, b) {
61
+ 'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(a, b) {
62
62
  var d = lup(a);
63
63
  return _lusolve(d.L, d.U, d.p, null, b);
64
64
  },
65
- 'SparseMatrix, Array | Matrix': function SparseMatrixArrayMatrix(a, b) {
65
+ 'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(a, b) {
66
66
  var d = lup(a);
67
67
  return _lusolve(d.L, d.U, d.p, null, b);
68
68
  },
69
- 'SparseMatrix, Array | Matrix, number, number': function SparseMatrixArrayMatrixNumberNumber(a, b, order, threshold) {
69
+ 'SparseMatrix, Array | Matrix, number, number': function SparseMatrix_Array__Matrix_number_number(a, b, order, threshold) {
70
70
  var d = slu(a, order, threshold);
71
71
  return _lusolve(d.L, d.U, d.p, d.q, b);
72
72
  },
73
- 'Object, Array | Matrix': function ObjectArrayMatrix(d, b) {
73
+ 'Object, Array | Matrix': function Object_Array__Matrix(d, b) {
74
74
  return _lusolve(d.L, d.U, d.p, d.q, b);
75
75
  }
76
76
  });
@@ -41,13 +41,13 @@ export var createUsolve = /* #__PURE__ */factory(name, dependencies, _ref => {
41
41
  * @return {DenseMatrix | Array} A column vector with the linear system solution (x)
42
42
  */
43
43
  return typed(name, {
44
- 'SparseMatrix, Array | Matrix': function SparseMatrixArrayMatrix(m, b) {
44
+ 'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
45
45
  return _sparseBackwardSubstitution(m, b);
46
46
  },
47
- 'DenseMatrix, Array | Matrix': function DenseMatrixArrayMatrix(m, b) {
47
+ 'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
48
48
  return _denseBackwardSubstitution(m, b);
49
49
  },
50
- 'Array, Array | Matrix': function ArrayArrayMatrix(a, b) {
50
+ 'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
51
51
  var m = matrix(a);
52
52
  var r = _denseBackwardSubstitution(m, b);
53
53
  return r.valueOf();
@@ -41,13 +41,13 @@ export var createUsolveAll = /* #__PURE__ */factory(name, dependencies, _ref =>
41
41
  * @return {DenseMatrix[] | Array[]} An array of affine-independent column vectors (x) that solve the linear system
42
42
  */
43
43
  return typed(name, {
44
- 'SparseMatrix, Array | Matrix': function SparseMatrixArrayMatrix(m, b) {
44
+ 'SparseMatrix, Array | Matrix': function SparseMatrix_Array__Matrix(m, b) {
45
45
  return _sparseBackwardSubstitution(m, b);
46
46
  },
47
- 'DenseMatrix, Array | Matrix': function DenseMatrixArrayMatrix(m, b) {
47
+ 'DenseMatrix, Array | Matrix': function DenseMatrix_Array__Matrix(m, b) {
48
48
  return _denseBackwardSubstitution(m, b);
49
49
  },
50
- 'Array, Array | Matrix': function ArrayArrayMatrix(a, b) {
50
+ 'Array, Array | Matrix': function Array_Array__Matrix(a, b) {
51
51
  var m = matrix(a);
52
52
  var R = _denseBackwardSubstitution(m, b);
53
53
  return R.map(r => r.valueOf());
@@ -50,25 +50,25 @@ export var createSylvester = /* #__PURE__ */factory(name, dependencies, _ref =>
50
50
  */
51
51
  return typed(name, {
52
52
  'Matrix, Matrix, Matrix': _sylvester,
53
- 'Array, Matrix, Matrix': function ArrayMatrixMatrix(A, B, C) {
53
+ 'Array, Matrix, Matrix': function Array_Matrix_Matrix(A, B, C) {
54
54
  return _sylvester(matrix(A), B, C);
55
55
  },
56
- 'Array, Array, Matrix': function ArrayArrayMatrix(A, B, C) {
56
+ 'Array, Array, Matrix': function Array_Array_Matrix(A, B, C) {
57
57
  return _sylvester(matrix(A), matrix(B), C);
58
58
  },
59
- 'Array, Matrix, Array': function ArrayMatrixArray(A, B, C) {
59
+ 'Array, Matrix, Array': function Array_Matrix_Array(A, B, C) {
60
60
  return _sylvester(matrix(A), B, matrix(C));
61
61
  },
62
- 'Matrix, Array, Matrix': function MatrixArrayMatrix(A, B, C) {
62
+ 'Matrix, Array, Matrix': function Matrix_Array_Matrix(A, B, C) {
63
63
  return _sylvester(A, matrix(B), C);
64
64
  },
65
- 'Matrix, Array, Array': function MatrixArrayArray(A, B, C) {
65
+ 'Matrix, Array, Array': function Matrix_Array_Array(A, B, C) {
66
66
  return _sylvester(A, matrix(B), matrix(C));
67
67
  },
68
- 'Matrix, Matrix, Array': function MatrixMatrixArray(A, B, C) {
68
+ 'Matrix, Matrix, Array': function Matrix_Matrix_Array(A, B, C) {
69
69
  return _sylvester(A, B, matrix(C));
70
70
  },
71
- 'Array, Array, Array': function ArrayArrayArray(A, B, C) {
71
+ 'Array, Array, Array': function Array_Array_Array(A, B, C) {
72
72
  return _sylvester(matrix(A), matrix(B), matrix(C)).toArray();
73
73
  }
74
74
  });
@@ -20,16 +20,16 @@ export var createAddScalar = /* #__PURE__ */factory(name, dependencies, _ref =>
20
20
  */
21
21
  return typed(name, {
22
22
  'number, number': addNumber,
23
- 'Complex, Complex': function ComplexComplex(x, y) {
23
+ 'Complex, Complex': function Complex_Complex(x, y) {
24
24
  return x.add(y);
25
25
  },
26
- 'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
26
+ 'BigNumber, BigNumber': function BigNumber_BigNumber(x, y) {
27
27
  return x.plus(y);
28
28
  },
29
- 'bigint, bigint': function bigintBigint(x, y) {
29
+ 'bigint, bigint': function bigint_bigint(x, y) {
30
30
  return x + y;
31
31
  },
32
- 'Fraction, Fraction': function FractionFraction(x, y) {
32
+ 'Fraction, Fraction': function Fraction_Fraction(x, y) {
33
33
  return x.add(y);
34
34
  },
35
35
  'Unit, Unit': typed.referToSelf(self => (x, y) => {
@@ -22,7 +22,7 @@ export var createCeilNumber = /* #__PURE__ */factory(name, ['typed', 'config', '
22
22
  return Math.ceil(x);
23
23
  }
24
24
  },
25
- 'number, number': function numberNumber(x, n) {
25
+ 'number, number': function number_number(x, n) {
26
26
  if (nearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
27
27
  return round(x, n);
28
28
  } else {
@@ -103,10 +103,10 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
103
103
  Complex: function Complex(x) {
104
104
  return x.ceil();
105
105
  },
106
- 'Complex, number': function ComplexNumber(x, n) {
106
+ 'Complex, number': function Complex_number(x, n) {
107
107
  return x.ceil(n);
108
108
  },
109
- 'Complex, BigNumber': function ComplexBigNumber(x, n) {
109
+ 'Complex, BigNumber': function Complex_BigNumber(x, n) {
110
110
  return x.ceil(n.toNumber());
111
111
  },
112
112
  BigNumber: function BigNumber(x) {
@@ -116,7 +116,7 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
116
116
  return x.ceil();
117
117
  }
118
118
  },
119
- 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
119
+ 'BigNumber, BigNumber': function BigNumber_BigNumber(x, n) {
120
120
  if (bigNearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
121
121
  return round(x, n);
122
122
  } else {
@@ -126,10 +126,10 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
126
126
  Fraction: function Fraction(x) {
127
127
  return x.ceil();
128
128
  },
129
- 'Fraction, number': function FractionNumber(x, n) {
129
+ 'Fraction, number': function Fraction_number(x, n) {
130
130
  return x.ceil(n);
131
131
  },
132
- 'Fraction, BigNumber': function FractionBigNumber(x, n) {
132
+ 'Fraction, BigNumber': function Fraction_BigNumber(x, n) {
133
133
  return x.ceil(n.toNumber());
134
134
  },
135
135
  'Array | Matrix': typed.referToSelf(self => x => {