mathjs 10.2.0 → 10.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. package/HISTORY.md +43 -0
  2. package/docs/expressions/syntax.md +31 -2
  3. package/docs/reference/functions/cumsum.md +57 -0
  4. package/docs/reference/functions/format.md +1 -1
  5. package/docs/reference/functions/map.md +22 -5
  6. package/docs/reference/functions/subset.md +10 -2
  7. package/docs/reference/functions/sum.md +2 -1
  8. package/docs/reference/functions/symbolicEqual.md +62 -0
  9. package/docs/reference/functions.md +3 -1
  10. package/lib/browser/math.js +6 -6
  11. package/lib/browser/math.js.map +1 -1
  12. package/lib/cjs/entry/dependenciesAny/dependenciesCumSum.generated.js +26 -0
  13. package/lib/cjs/entry/dependenciesAny/dependenciesCumSumTransform.generated.js +26 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
  15. package/lib/cjs/entry/dependenciesAny.generated.js +24 -0
  16. package/lib/cjs/entry/dependenciesNumber/dependenciesCumSum.generated.js +26 -0
  17. package/lib/cjs/entry/dependenciesNumber/dependenciesCumSumTransform.generated.js +26 -0
  18. package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
  19. package/lib/cjs/entry/impureFunctionsAny.generated.js +22 -8
  20. package/lib/cjs/entry/impureFunctionsNumber.generated.js +6 -0
  21. package/lib/cjs/entry/pureFunctionsAny.generated.js +18 -12
  22. package/lib/cjs/entry/pureFunctionsNumber.generated.js +8 -2
  23. package/lib/cjs/expression/embeddedDocs/construction/fraction.js +3 -3
  24. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +240 -234
  25. package/lib/cjs/expression/embeddedDocs/function/algebra/symbolicEqual.js +15 -0
  26. package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
  27. package/lib/cjs/expression/embeddedDocs/function/statistics/cumsum.js +15 -0
  28. package/lib/cjs/expression/node/FunctionNode.js +74 -55
  29. package/lib/cjs/expression/parse.js +12 -8
  30. package/lib/cjs/expression/transform/cumsum.transform.js +57 -0
  31. package/lib/cjs/expression/transform/sum.transform.js +1 -1
  32. package/lib/cjs/factoriesAny.js +24 -0
  33. package/lib/cjs/factoriesNumber.js +18 -2
  34. package/lib/cjs/function/algebra/simplify.js +8 -0
  35. package/lib/cjs/function/algebra/simplifyCore.js +2 -2
  36. package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
  37. package/lib/cjs/function/matrix/eigs/complexEigs.js +39 -28
  38. package/lib/cjs/function/matrix/map.js +53 -15
  39. package/lib/cjs/function/matrix/subset.js +15 -5
  40. package/lib/cjs/function/statistics/cumsum.js +151 -0
  41. package/lib/cjs/function/statistics/sum.js +1 -1
  42. package/lib/cjs/function/string/format.js +1 -1
  43. package/lib/cjs/header.js +2 -2
  44. package/lib/cjs/type/fraction/function/fraction.js +20 -8
  45. package/lib/cjs/utils/collection.js +3 -27
  46. package/lib/cjs/utils/switch.js +31 -0
  47. package/lib/cjs/version.js +1 -1
  48. package/lib/esm/entry/dependenciesAny/dependenciesCumSum.generated.js +14 -0
  49. package/lib/esm/entry/dependenciesAny/dependenciesCumSumTransform.generated.js +14 -0
  50. package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
  51. package/lib/esm/entry/dependenciesAny.generated.js +3 -0
  52. package/lib/esm/entry/dependenciesNumber/dependenciesCumSum.generated.js +14 -0
  53. package/lib/esm/entry/dependenciesNumber/dependenciesCumSumTransform.generated.js +14 -0
  54. package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
  55. package/lib/esm/entry/impureFunctionsAny.generated.js +22 -9
  56. package/lib/esm/entry/impureFunctionsNumber.generated.js +8 -2
  57. package/lib/esm/entry/pureFunctionsAny.generated.js +13 -8
  58. package/lib/esm/entry/pureFunctionsNumber.generated.js +6 -1
  59. package/lib/esm/expression/embeddedDocs/construction/fraction.js +3 -3
  60. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +220 -216
  61. package/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js +8 -0
  62. package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
  63. package/lib/esm/expression/embeddedDocs/function/statistics/cumsum.js +8 -0
  64. package/lib/esm/expression/node/FunctionNode.js +70 -53
  65. package/lib/esm/expression/parse.js +12 -8
  66. package/lib/esm/expression/transform/cumsum.transform.js +48 -0
  67. package/lib/esm/expression/transform/sum.transform.js +1 -1
  68. package/lib/esm/factoriesAny.js +3 -0
  69. package/lib/esm/factoriesNumber.js +2 -0
  70. package/lib/esm/function/algebra/simplify.js +8 -0
  71. package/lib/esm/function/algebra/simplifyCore.js +2 -2
  72. package/lib/esm/function/algebra/symbolicEqual.js +80 -0
  73. package/lib/esm/function/matrix/eigs/complexEigs.js +36 -25
  74. package/lib/esm/function/matrix/map.js +53 -15
  75. package/lib/esm/function/matrix/subset.js +15 -5
  76. package/lib/esm/function/statistics/cumsum.js +139 -0
  77. package/lib/esm/function/statistics/sum.js +1 -1
  78. package/lib/esm/function/string/format.js +1 -1
  79. package/lib/esm/type/fraction/function/fraction.js +20 -8
  80. package/lib/esm/utils/collection.js +1 -26
  81. package/lib/esm/utils/switch.js +24 -0
  82. package/lib/esm/version.js +1 -1
  83. package/package.json +15 -11
  84. package/types/index.d.ts +209 -23
  85. package/types/index.ts +274 -57
  86. package/types/tsconfig.json +2 -1
@@ -54,32 +54,36 @@ function createComplexEigs(_ref) {
54
54
  } // TODO check if any row/col are zero except the diagonal
55
55
  // make sure corresponding rows and columns have similar magnitude
56
56
  // important because of numerical stability
57
+ // MODIFIES arr by side effect!
57
58
 
58
59
 
59
60
  var R = balance(arr, N, prec, type, findVectors); // R is the row transformation matrix
60
- // A' = R A R⁻¹, A is the original matrix
61
+ // arr = A' = R A R⁻¹, A is the original matrix
61
62
  // (if findVectors is false, R is undefined)
63
+ // (And so to return to original matrix: A = R⁻¹ arr R)
62
64
  // TODO if magnitudes of elements vary over many orders,
63
65
  // move greatest elements to the top left corner
64
66
  // using similarity transformations, reduce the matrix
65
67
  // to Hessenberg form (upper triangular plus one subdiagonal row)
66
68
  // updates the transformation matrix R with new row operationsq
69
+ // MODIFIES arr by side effect!
67
70
 
68
- reduceToHessenberg(arr, N, prec, type, findVectors, R); // find eigenvalues
71
+ reduceToHessenberg(arr, N, prec, type, findVectors, R); // still true that original A = R⁻¹ arr R)
72
+ // find eigenvalues
69
73
 
70
74
  var _iterateUntilTriangul = iterateUntilTriangular(arr, N, prec, type, findVectors),
71
75
  values = _iterateUntilTriangul.values,
72
76
  C = _iterateUntilTriangul.C; // values is the list of eigenvalues, C is the column
73
- // transformation matrix that transforms the hessenberg
74
- // matrix to upper triangular
75
- // compose transformations A hess. and hess. triang.
77
+ // transformation matrix that transforms arr, the hessenberg
78
+ // matrix, to upper triangular
79
+ // (So U = C⁻¹ arr C and the relationship between current arr
80
+ // and original A is unchanged.)
76
81
 
77
82
 
78
- C = multiply(inv(R), C);
79
83
  var vectors;
80
84
 
81
85
  if (findVectors) {
82
- vectors = findEigenvectors(arr, N, C, values, prec, type);
86
+ vectors = findEigenvectors(arr, N, C, R, values, prec, type);
83
87
  vectors = matrixFromColumns.apply(void 0, (0, _toConsumableArray2.default)(vectors));
84
88
  }
85
89
 
@@ -100,8 +104,9 @@ function createComplexEigs(_ref) {
100
104
  function balance(arr, N, prec, type, findVectors) {
101
105
  var big = type === 'BigNumber';
102
106
  var cplx = type === 'Complex';
103
- var zero = big ? bignumber(0) : cplx ? complex(0) : 0;
104
- var one = big ? bignumber(1) : cplx ? complex(1) : 1; // base of the floating-point arithmetic
107
+ var realzero = big ? bignumber(0) : 0;
108
+ var one = big ? bignumber(1) : cplx ? complex(1) : 1;
109
+ var realone = big ? bignumber(1) : 1; // base of the floating-point arithmetic
105
110
 
106
111
  var radix = big ? bignumber(10) : 2;
107
112
  var radixSq = multiplyScalar(radix, radix); // the diagonal transformation matrix R
@@ -122,12 +127,13 @@ function createComplexEigs(_ref) {
122
127
  for (var i = 0; i < N; i++) {
123
128
  // compute the taxicab norm of i-th column and row
124
129
  // TODO optimize for complex numbers
125
- var colNorm = zero;
126
- var rowNorm = zero;
130
+ var colNorm = realzero;
131
+ var rowNorm = realzero;
127
132
 
128
133
  for (var j = 0; j < N; j++) {
129
134
  if (i === j) continue;
130
- var c = abs(arr[i][j]);
135
+ var c = abs(arr[i][j]); // should be real
136
+
131
137
  colNorm = addScalar(colNorm, c);
132
138
  rowNorm = addScalar(rowNorm, c);
133
139
  }
@@ -136,7 +142,7 @@ function createComplexEigs(_ref) {
136
142
  // find integer power closest to balancing the matrix
137
143
  // (we want to scale only by integer powers of radix,
138
144
  // so that we don't lose any precision due to round-off)
139
- var f = one;
145
+ var f = realone;
140
146
  var _c = colNorm;
141
147
  var rowDivRadix = divideScalar(rowNorm, radix);
142
148
  var rowMulRadix = multiplyScalar(rowNorm, radix);
@@ -410,16 +416,17 @@ function createComplexEigs(_ref) {
410
416
  };
411
417
  }
412
418
  /**
413
- * @param {Matrix} A original matrix
419
+ * @param {Matrix} A hessenberg-form matrix
414
420
  * @param {number} N size of A
415
421
  * @param {Matrix} C column transformation matrix that turns A into upper triangular
422
+ * @param {Matrix} R similarity that turns original matrix into A
416
423
  * @param {number[]} values array of eigenvalues of A
417
424
  * @param {'number'|'BigNumber'|'Complex'} type
418
425
  * @returns {number[][]} eigenvalues
419
426
  */
420
427
 
421
428
 
422
- function findEigenvectors(A, N, C, values, prec, type) {
429
+ function findEigenvectors(A, N, C, R, values, prec, type) {
423
430
  var Cinv = inv(C);
424
431
  var U = multiply(Cinv, A, C);
425
432
  var big = type === 'BigNumber';
@@ -436,12 +443,12 @@ function createComplexEigs(_ref) {
436
443
 
437
444
  try {
438
445
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
439
- var _λ = _step.value;
446
+ var λ = _step.value;
440
447
 
441
- var _i4 = indexOf(uniqueValues, _λ, equal);
448
+ var _i4 = indexOf(uniqueValues, λ, equal);
442
449
 
443
450
  if (_i4 === -1) {
444
- uniqueValues.push(_λ);
451
+ uniqueValues.push(λ);
445
452
  multiplicities.push(1);
446
453
  } else {
447
454
  multiplicities[_i4] += 1;
@@ -463,21 +470,16 @@ function createComplexEigs(_ref) {
463
470
 
464
471
  var failedLambdas = [];
465
472
 
466
- for (var i = 0; i < len; i++) {
473
+ var _loop = function _loop(i) {
467
474
  var λ = uniqueValues[i];
475
+ var S = subtract(U, multiply(λ, E)); // the characteristic matrix
468
476
 
469
- var _A = subtract(U, multiply(λ, E)); // the characteristic matrix
470
-
471
-
472
- var solutions = usolveAll(_A, b);
473
- solutions = solutions.map(function (v) {
474
- return multiply(C, v);
475
- });
477
+ var solutions = usolveAll(S, b);
476
478
  solutions.shift(); // ignore the null vector
477
479
  // looks like we missed something, try inverse iteration
478
480
 
479
481
  while (solutions.length < multiplicities[i]) {
480
- var approxVec = inverseIterate(_A, N, solutions, prec, type);
482
+ var approxVec = inverseIterate(S, N, solutions, prec, type);
481
483
 
482
484
  if (approxVec == null) {
483
485
  // no more vectors were found
@@ -486,11 +488,20 @@ function createComplexEigs(_ref) {
486
488
  }
487
489
 
488
490
  solutions.push(approxVec);
489
- }
491
+ } // Transform back into original array coordinates
492
+
490
493
 
494
+ var correction = multiply(inv(R), C);
495
+ solutions = solutions.map(function (v) {
496
+ return multiply(correction, v);
497
+ });
491
498
  vectors.push.apply(vectors, (0, _toConsumableArray2.default)(solutions.map(function (v) {
492
499
  return flatten(v);
493
500
  })));
501
+ };
502
+
503
+ for (var i = 0; i < len; i++) {
504
+ _loop(i);
494
505
  }
495
506
 
496
507
  if (failedLambdas.length !== 0) {
@@ -15,8 +15,15 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
15
15
  var typed = _ref.typed;
16
16
 
17
17
  /**
18
- * Create a new matrix or array with the results of the callback function executed on
19
- * each entry of the matrix/array.
18
+ * Create a new matrix or array with the results of a callback function executed on
19
+ * each entry of a given matrix/array.
20
+ *
21
+ * For each entry of the input, the callback is invoked with three arguments:
22
+ * the value of the entry, the index at which that entry occurs, and the full
23
+ * matrix/array being traversed. Note that because the matrix/array might be
24
+ * multidimensional, the "index" argument is always an array of numbers giving
25
+ * the index in each dimension. This is true even for vectors: the "index"
26
+ * argument is an array of length 1, rather than simply a number.
20
27
  *
21
28
  * Syntax:
22
29
  *
@@ -28,15 +35,25 @@ var createMap = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
28
35
  * return value * value
29
36
  * }) // returns [1, 4, 9]
30
37
  *
38
+ * // The calling convention for the callback can cause subtleties:
39
+ * math.map([1, 2, 3], math.format)
40
+ * // throws TypeError: map attempted to call 'format(1,[0])' but argument 2 of type Array does not match expected type number or function or Object or string or boolean
41
+ * // [This happens because `format` _can_ take a second argument,
42
+ * // but its semantics don't match that of the 2nd argument `map` provides]
43
+ *
44
+ * // To avoid this error, use a function that takes exactly the
45
+ * // desired arguments:
46
+ * math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']
47
+ *
31
48
  * See also:
32
49
  *
33
50
  * filter, forEach, sort
34
51
  *
35
- * @param {Matrix | Array} x The matrix to iterate on.
36
- * @param {Function} callback The callback method is invoked with three
37
- * parameters: the value of the element, the index
38
- * of the element, and the matrix being traversed.
39
- * @return {Matrix | array} Transformed map of x
52
+ * @param {Matrix | Array} x The input to iterate on.
53
+ * @param {Function} callback
54
+ * The function to call (as described above) on each entry of the input
55
+ * @return {Matrix | array}
56
+ * Transformed map of x; always has the same type and shape as x
40
57
  */
41
58
  return typed(name, {
42
59
  'Array, function': _map,
@@ -66,14 +83,35 @@ function _map(array, callback) {
66
83
  return recurse(child, index.concat(i));
67
84
  });
68
85
  } else {
69
- // invoke the callback function with the right number of arguments
70
- if (args === 1) {
71
- return callback(value);
72
- } else if (args === 2) {
73
- return callback(value, index);
74
- } else {
75
- // 3 or -1
76
- return callback(value, index, array);
86
+ try {
87
+ // invoke the callback function with the right number of arguments
88
+ if (args === 1) {
89
+ return callback(value);
90
+ } else if (args === 2) {
91
+ return callback(value, index);
92
+ } else {
93
+ // 3 or -1
94
+ return callback(value, index, array);
95
+ }
96
+ } catch (err) {
97
+ // But maybe the arguments still weren't right
98
+ if (err instanceof TypeError && 'data' in err && err.data.category === 'wrongType') {
99
+ var newmsg = "map attempted to call '".concat(err.data.fn, "(").concat(value);
100
+ var indexString = JSON.stringify(index);
101
+
102
+ if (args === 2) {
103
+ newmsg += ',' + indexString;
104
+ } else if (args !== 1) {
105
+ newmsg += ",".concat(indexString, ",").concat(array);
106
+ }
107
+
108
+ newmsg += ")' but argument ".concat(err.data.index + 1, " of type ");
109
+ newmsg += "".concat(err.data.actual, " does not match expected type ");
110
+ newmsg += err.data.expected.join(' or ');
111
+ throw new TypeError(newmsg);
112
+ }
113
+
114
+ throw err;
77
115
  }
78
116
  }
79
117
  };
@@ -39,16 +39,26 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
39
39
  *
40
40
  * // replace a subset
41
41
  * const e = []
42
- * const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]]
42
+ * const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]] and e = [[5, 0, 6]]
43
43
  * const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 6], [0, 7]]
44
44
  *
45
+ * // get submatrix using ranges
46
+ * const M = [
47
+ * [1,2,3],
48
+ * [4,5,6],
49
+ * [7,8,9]
50
+ * ]
51
+ * math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1,2,3],[4,5,6]]
52
+ *
45
53
  * See also:
46
54
  *
47
55
  * size, resize, squeeze, index
48
56
  *
49
57
  * @param {Array | Matrix | string} matrix An array, matrix, or string
50
- * @param {Index} index An index containing ranges for each
51
- * dimension
58
+ * @param {Index} index
59
+ * For each dimension of the target, specifies an index or a list of
60
+ * indices to fetch or set. `subset` uses the cartesian product of
61
+ * the indices specified in each dimension.
52
62
  * @param {*} [replacement] An array, matrix, or scalar.
53
63
  * If provided, the subset is replaced with replacement.
54
64
  * If not provided, the subset is returned
@@ -91,7 +101,7 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
91
101
  /**
92
102
  * Retrieve a subset of a string
93
103
  * @param {string} str string from which to get a substring
94
- * @param {Index} index An index containing ranges for each dimension
104
+ * @param {Index} index An index or list of indices (character positions)
95
105
  * @returns {string} substring
96
106
  * @private
97
107
  */
@@ -122,7 +132,7 @@ function _getSubstring(str, index) {
122
132
  /**
123
133
  * Replace a substring in a string
124
134
  * @param {string} str string to be replaced
125
- * @param {Index} index An index containing ranges for each dimension
135
+ * @param {Index} index An index or list of indices (character positions)
126
136
  * @param {string} replacement Replacement string
127
137
  * @param {string} [defaultValue] Default value to be uses when resizing
128
138
  * the string. is ' ' by default
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createCumSum = void 0;
7
+
8
+ var _collection = require("../../utils/collection.js");
9
+
10
+ var _factory = require("../../utils/factory.js");
11
+
12
+ var _switch2 = require("../../utils/switch.js");
13
+
14
+ var _improveErrorMessage = require("./utils/improveErrorMessage.js");
15
+
16
+ var _array = require("../../utils/array.js");
17
+
18
+ var _IndexError = require("../../error/IndexError.js");
19
+
20
+ var name = 'cumsum';
21
+ var dependencies = ['typed', 'add', 'unaryPlus'];
22
+ var createCumSum = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
23
+ var typed = _ref.typed,
24
+ add = _ref.add,
25
+ unaryPlus = _ref.unaryPlus;
26
+
27
+ /**
28
+ * Compute the cumulative sum of a matrix or a list with values.
29
+ * In case of a (multi dimensional) array or matrix, the cumulative sums
30
+ * along a specified dimension (defaulting to the first) will be calculated.
31
+ *
32
+ * Syntax:
33
+ *
34
+ * math.cumsum(a, b, c, ...)
35
+ * math.cumsum(A)
36
+ *
37
+ * Examples:
38
+ *
39
+ * math.cumsum(2, 1, 4, 3) // returns [2, 3, 7, 10]
40
+ * math.cumsum([2, 1, 4, 3]) // returns [2, 3, 7, 10]
41
+ * math.cumsum([[1, 2], [3, 4]]) // returns [[1, 2], [4, 6]]
42
+ * math.cumsum([[1, 2], [3, 4]], 0) // returns [[1, 2], [4, 6]]
43
+ * math.cumsum([[1, 2], [3, 4]], 1) // returns [[1, 3], [3, 7]]
44
+ * math.cumsum([[2, 5], [4, 3], [1, 7]]) // returns [[2, 5], [6, 8], [7, 15]]
45
+ *
46
+ * See also:
47
+ *
48
+ * mean, median, min, max, prod, std, variance, sum
49
+ *
50
+ * @param {... *} args A single matrix or or multiple scalar values
51
+ * @return {*} The cumulative sum of all values
52
+ */
53
+ return typed(name, {
54
+ // sum([a, b, c, d, ...])
55
+ Array: _cumsum,
56
+ Matrix: function Matrix(matrix) {
57
+ return matrix.create(_cumsum(matrix.valueOf()));
58
+ },
59
+ // sum([a, b, c, d, ...], dim)
60
+ 'Array, number | BigNumber': _ncumSumDim,
61
+ 'Matrix, number | BigNumber': function MatrixNumberBigNumber(matrix, dim) {
62
+ return matrix.create(_ncumSumDim(matrix.valueOf(), dim));
63
+ },
64
+ // cumsum(a, b, c, d, ...)
65
+ '...': function _(args) {
66
+ if ((0, _collection.containsCollections)(args)) {
67
+ throw new TypeError('All values expected to be scalar in function cumsum');
68
+ }
69
+
70
+ return _cumsum(args);
71
+ }
72
+ });
73
+ /**
74
+ * Recursively calculate the cumulative sum of an n-dimensional array
75
+ * @param {Array} array
76
+ * @return {number} cumsum
77
+ * @private
78
+ */
79
+
80
+ function _cumsum(array) {
81
+ try {
82
+ return _cumsummap(array);
83
+ } catch (err) {
84
+ throw (0, _improveErrorMessage.improveErrorMessage)(err, name);
85
+ }
86
+ }
87
+
88
+ function _cumsummap(array) {
89
+ if (array.length === 0) {
90
+ return [];
91
+ }
92
+
93
+ var sums = [unaryPlus(array[0])]; // unaryPlus converts to number if need be
94
+
95
+ for (var i = 1; i < array.length; ++i) {
96
+ // Must use add below and not addScalar for the case of summing a
97
+ // 2+-dimensional array along the 0th dimension (the row vectors,
98
+ // or higher-d analogues, are literally added to each other).
99
+ sums.push(add(sums[i - 1], array[i]));
100
+ }
101
+
102
+ return sums;
103
+ }
104
+
105
+ function _ncumSumDim(array, dim) {
106
+ var size = (0, _array.arraySize)(array);
107
+
108
+ if (dim < 0 || dim >= size.length) {
109
+ // TODO: would be more clear when throwing a DimensionError here
110
+ throw new _IndexError.IndexError(dim, size.length);
111
+ }
112
+
113
+ try {
114
+ return _cumsumDimensional(array, dim);
115
+ } catch (err) {
116
+ throw (0, _improveErrorMessage.improveErrorMessage)(err, name);
117
+ }
118
+ }
119
+ /* Possible TODO: Refactor _reduce in collection.js to be able to work here as well */
120
+
121
+
122
+ function _cumsumDimensional(mat, dim) {
123
+ var i, ret, tran;
124
+
125
+ if (dim <= 0) {
126
+ var initialValue = mat[0][0];
127
+
128
+ if (!Array.isArray(initialValue)) {
129
+ return _cumsummap(mat);
130
+ } else {
131
+ tran = (0, _switch2._switch)(mat);
132
+ ret = [];
133
+
134
+ for (i = 0; i < tran.length; i++) {
135
+ ret[i] = _cumsumDimensional(tran[i], dim - 1);
136
+ }
137
+
138
+ return ret;
139
+ }
140
+ } else {
141
+ ret = [];
142
+
143
+ for (i = 0; i < mat.length; i++) {
144
+ ret[i] = _cumsumDimensional(mat[i], dim - 1);
145
+ }
146
+
147
+ return ret;
148
+ }
149
+ }
150
+ });
151
+ exports.createCumSum = createCumSum;
@@ -37,7 +37,7 @@ var createSum = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
37
37
  *
38
38
  * See also:
39
39
  *
40
- * mean, median, min, max, prod, std, variance
40
+ * mean, median, min, max, prod, std, variance, cumsum
41
41
  *
42
42
  * @param {... *} args A single matrix or or multiple scalar values
43
43
  * @return {*} The sum of all values
@@ -119,7 +119,7 @@ var createFormat = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
119
119
  * // you could also use math.format inside the callback:
120
120
  * // return '$' + math.format(value, {notation: 'fixed', precision: 2})
121
121
  * }
122
- * math.format([2.1, 3, 0.016], formatCurrency} // returns '[$2.10, $3.00, $0.02]'
122
+ * math.format([2.1, 3, 0.016], formatCurrency) // returns '[$2.10, $3.00, $0.02]'
123
123
  *
124
124
  * See also:
125
125
  *
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 10.2.0
10
- * @date 2022-03-01
9
+ * @version 10.4.1
10
+ * @date 2022-03-23
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
@@ -16,27 +16,39 @@ var createFraction = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
16
16
  Fraction = _ref.Fraction;
17
17
 
18
18
  /**
19
- * Create a fraction convert a value to a fraction.
19
+ * Create a fraction or convert a value to a fraction.
20
+ *
21
+ * With one numeric argument, produces the closest rational approximation to the
22
+ * input.
23
+ * With two arguments, the first is the numerator and the second is the denominator,
24
+ * and creates the corresponding fraction. Both numerator and denominator must be
25
+ * integers.
26
+ * With one object argument, looks for the integer numerator as the value of property
27
+ * 'n' and the integer denominator as the value of property 'd'.
28
+ * With a matrix argument, creates a matrix of the same shape with entries
29
+ * converted into fractions.
20
30
  *
21
31
  * Syntax:
32
+ * math.fraction(value)
22
33
  * math.fraction(numerator, denominator)
23
34
  * math.fraction({n: numerator, d: denominator})
24
- * math.fraction(matrix: Array | Matrix) Turn all matrix entries
25
- * into fractions
35
+ * math.fraction(matrix: Array | Matrix)
26
36
  *
27
37
  * Examples:
28
38
  *
29
- * math.fraction(1, 3)
30
- * math.fraction('2/3')
31
- * math.fraction({n: 2, d: 3})
32
- * math.fraction([0.2, 0.25, 1.25])
39
+ * math.fraction(6.283) // returns Fraction 6283/1000
40
+ * math.fraction(1, 3) // returns Fraction 1/3
41
+ * math.fraction('2/3') // returns Fraction 2/3
42
+ * math.fraction({n: 2, d: 3}) // returns Fraction 2/3
43
+ * math.fraction([0.2, 0.25, 1.25]) // returns Array [1/5, 1/4, 5/4]
44
+ * math.fraction(4, 5.1) // throws Error: Parameters must be integer
33
45
  *
34
46
  * See also:
35
47
  *
36
48
  * bignumber, number, string, unit
37
49
  *
38
50
  * @param {number | string | Fraction | BigNumber | Array | Matrix} [args]
39
- * Arguments specifying the numerator and denominator of
51
+ * Arguments specifying the value, or numerator and denominator of
40
52
  * the fraction
41
53
  * @return {Fraction | Array | Matrix} Returns a fraction
42
54
  */
@@ -15,6 +15,8 @@ var _IndexError = require("../error/IndexError.js");
15
15
 
16
16
  var _array = require("./array.js");
17
17
 
18
+ var _switch2 = require("./switch.js");
19
+
18
20
  /**
19
21
  * Test whether an array contains collections
20
22
  * @param {Array} array
@@ -126,7 +128,7 @@ function _reduce(mat, dim, callback) {
126
128
 
127
129
  return val;
128
130
  } else {
129
- tran = _switch(mat);
131
+ tran = (0, _switch2._switch)(mat);
130
132
  ret = [];
131
133
 
132
134
  for (i = 0; i < tran.length; i++) {
@@ -144,32 +146,6 @@ function _reduce(mat, dim, callback) {
144
146
 
145
147
  return ret;
146
148
  }
147
- }
148
- /**
149
- * Transpose a matrix
150
- * @param {Array} mat
151
- * @returns {Array} ret
152
- * @private
153
- */
154
-
155
-
156
- function _switch(mat) {
157
- var I = mat.length;
158
- var J = mat[0].length;
159
- var i, j;
160
- var ret = [];
161
-
162
- for (j = 0; j < J; j++) {
163
- var tmp = [];
164
-
165
- for (i = 0; i < I; i++) {
166
- tmp.push(mat[i][j]);
167
- }
168
-
169
- ret.push(tmp);
170
- }
171
-
172
- return ret;
173
149
  } // TODO: document function scatter
174
150
 
175
151
 
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports._switch = _switch;
7
+
8
+ /**
9
+ * Transpose a matrix
10
+ * @param {Array} mat
11
+ * @returns {Array} ret
12
+ * @private
13
+ */
14
+ function _switch(mat) {
15
+ var I = mat.length;
16
+ var J = mat[0].length;
17
+ var i, j;
18
+ var ret = [];
19
+
20
+ for (j = 0; j < J; j++) {
21
+ var tmp = [];
22
+
23
+ for (i = 0; i < I; i++) {
24
+ tmp.push(mat[i][j]);
25
+ }
26
+
27
+ ret.push(tmp);
28
+ }
29
+
30
+ return ret;
31
+ }
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = '10.2.0'; // Note: This file is automatically generated when building math.js.
7
+ var version = '10.4.1'; // Note: This file is automatically generated when building math.js.
8
8
  // Changes made in this file will be overwritten.
9
9
 
10
10
  exports.version = version;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { addDependencies } from './dependenciesAdd.generated.js';
6
+ import { typedDependencies } from './dependenciesTyped.generated.js';
7
+ import { unaryPlusDependencies } from './dependenciesUnaryPlus.generated.js';
8
+ import { createCumSum } from '../../factoriesAny.js';
9
+ export var cumsumDependencies = {
10
+ addDependencies,
11
+ typedDependencies,
12
+ unaryPlusDependencies,
13
+ createCumSum
14
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { addDependencies } from './dependenciesAdd.generated.js';
6
+ import { typedDependencies } from './dependenciesTyped.generated.js';
7
+ import { unaryPlusDependencies } from './dependenciesUnaryPlus.generated.js';
8
+ import { createCumSumTransform } from '../../factoriesAny.js';
9
+ export var cumsumTransformDependencies = {
10
+ addDependencies,
11
+ typedDependencies,
12
+ unaryPlusDependencies,
13
+ createCumSumTransform
14
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { OperatorNodeDependencies } from './dependenciesOperatorNode.generated.js';
6
+ import { parseDependencies } from './dependenciesParse.generated.js';
7
+ import { simplifyDependencies } from './dependenciesSimplify.generated.js';
8
+ import { typedDependencies } from './dependenciesTyped.generated.js';
9
+ import { createSymbolicEqual } from '../../factoriesAny.js';
10
+ export var symbolicEqualDependencies = {
11
+ OperatorNodeDependencies,
12
+ parseDependencies,
13
+ simplifyDependencies,
14
+ typedDependencies,
15
+ createSymbolicEqual
16
+ };