mathjs 11.12.0 → 12.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 (43) hide show
  1. package/HISTORY.md +54 -2
  2. package/README.md +1 -1
  3. package/lib/browser/math.js +1 -1
  4. package/lib/browser/math.js.LICENSE.txt +2 -2
  5. package/lib/browser/math.js.map +1 -1
  6. package/lib/cjs/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
  7. package/lib/cjs/entry/pureFunctionsAny.generated.js +2 -0
  8. package/lib/cjs/expression/embeddedDocs/function/arithmetic/round.js +2 -2
  9. package/lib/cjs/expression/embeddedDocs/function/matrix/eigs.js +2 -2
  10. package/lib/cjs/expression/node/AssignmentNode.js +1 -1
  11. package/lib/cjs/expression/node/FunctionAssignmentNode.js +1 -1
  12. package/lib/cjs/function/algebra/derivative.js +8 -31
  13. package/lib/cjs/function/arithmetic/gcd.js +4 -5
  14. package/lib/cjs/function/arithmetic/mod.js +2 -9
  15. package/lib/cjs/function/arithmetic/round.js +59 -16
  16. package/lib/cjs/function/matrix/eigs/complexEigs.js +73 -68
  17. package/lib/cjs/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +57 -51
  18. package/lib/cjs/function/matrix/eigs.js +118 -45
  19. package/lib/cjs/function/probability/pickRandom.js +2 -2
  20. package/lib/cjs/header.js +2 -2
  21. package/lib/cjs/type/number.js +2 -2
  22. package/lib/cjs/utils/number.js +1 -1
  23. package/lib/cjs/utils/snapshot.js +6 -6
  24. package/lib/cjs/version.js +1 -1
  25. package/lib/esm/entry/dependenciesAny/dependenciesEigs.generated.js +4 -0
  26. package/lib/esm/entry/pureFunctionsAny.generated.js +2 -0
  27. package/lib/esm/expression/embeddedDocs/function/arithmetic/round.js +2 -2
  28. package/lib/esm/expression/embeddedDocs/function/matrix/eigs.js +2 -2
  29. package/lib/esm/expression/node/AssignmentNode.js +1 -1
  30. package/lib/esm/expression/node/FunctionAssignmentNode.js +1 -1
  31. package/lib/esm/function/algebra/derivative.js +8 -31
  32. package/lib/esm/function/arithmetic/mod.js +2 -9
  33. package/lib/esm/function/arithmetic/round.js +40 -17
  34. package/lib/esm/function/matrix/eigs/complexEigs.js +73 -68
  35. package/lib/esm/function/matrix/eigs/{realSymetric.js → realSymmetric.js} +55 -51
  36. package/lib/esm/function/matrix/eigs.js +119 -47
  37. package/lib/esm/function/probability/pickRandom.js +2 -2
  38. package/lib/esm/type/number.js +2 -2
  39. package/lib/esm/utils/number.js +1 -1
  40. package/lib/esm/version.js +1 -1
  41. package/package.json +14 -14
  42. package/types/EXPLANATION.md +54 -0
  43. package/types/index.d.ts +6825 -6483
@@ -27,7 +27,9 @@ var _dependenciesMultiplyScalarGenerated = require("./dependenciesMultiplyScalar
27
27
  var _dependenciesNumberGenerated = require("./dependenciesNumber.generated.js");
28
28
  var _dependenciesQrGenerated = require("./dependenciesQr.generated.js");
29
29
  var _dependenciesReGenerated = require("./dependenciesRe.generated.js");
30
+ var _dependenciesReshapeGenerated = require("./dependenciesReshape.generated.js");
30
31
  var _dependenciesSinGenerated = require("./dependenciesSin.generated.js");
32
+ var _dependenciesSizeGenerated = require("./dependenciesSize.generated.js");
31
33
  var _dependenciesSmallerGenerated = require("./dependenciesSmaller.generated.js");
32
34
  var _dependenciesSqrtGenerated = require("./dependenciesSqrt.generated.js");
33
35
  var _dependenciesSubtractGenerated = require("./dependenciesSubtract.generated.js");
@@ -64,7 +66,9 @@ var eigsDependencies = exports.eigsDependencies = {
64
66
  numberDependencies: _dependenciesNumberGenerated.numberDependencies,
65
67
  qrDependencies: _dependenciesQrGenerated.qrDependencies,
66
68
  reDependencies: _dependenciesReGenerated.reDependencies,
69
+ reshapeDependencies: _dependenciesReshapeGenerated.reshapeDependencies,
67
70
  sinDependencies: _dependenciesSinGenerated.sinDependencies,
71
+ sizeDependencies: _dependenciesSizeGenerated.sizeDependencies,
68
72
  smallerDependencies: _dependenciesSmallerGenerated.smallerDependencies,
69
73
  sqrtDependencies: _dependenciesSqrtGenerated.sqrtDependencies,
70
74
  subtractDependencies: _dependenciesSubtractGenerated.subtractDependencies,
@@ -1590,7 +1590,9 @@ var eigs = exports.eigs = /* #__PURE__ */(0, _factoriesAny.createEigs)({
1590
1590
  number: number,
1591
1591
  qr: qr,
1592
1592
  re: re,
1593
+ reshape: reshape,
1593
1594
  sin: sin,
1595
+ size: size,
1594
1596
  smaller: smaller,
1595
1597
  sqrt: sqrt,
1596
1598
  subtract: subtract,
@@ -7,8 +7,8 @@ exports.roundDocs = void 0;
7
7
  var roundDocs = exports.roundDocs = {
8
8
  name: 'round',
9
9
  category: 'Arithmetic',
10
- syntax: ['round(x)', 'round(x, n)'],
10
+ syntax: ['round(x)', 'round(x, n)', 'round(unit, valuelessUnit)', 'round(unit, n, valuelessUnit)'],
11
11
  description: 'round a value towards the nearest integer.If x is complex, both real and imaginary part are rounded towards the nearest integer. When n is specified, the value is rounded to n decimals.',
12
- examples: ['round(3.2)', 'round(3.8)', 'round(-4.2)', 'round(-4.8)', 'round(pi, 3)', 'round(123.45678, 2)'],
12
+ examples: ['round(3.2)', 'round(3.8)', 'round(-4.2)', 'round(-4.8)', 'round(pi, 3)', 'round(123.45678, 2)', 'round(3.241cm, 2, cm)', 'round([3.2, 3.8, -4.7])'],
13
13
  seealso: ['ceil', 'floor', 'fix']
14
14
  };
@@ -8,7 +8,7 @@ var eigsDocs = exports.eigsDocs = {
8
8
  name: 'eigs',
9
9
  category: 'Matrix',
10
10
  syntax: ['eigs(x)'],
11
- description: 'Calculate the eigenvalues and eigenvectors of a real symmetric matrix',
12
- examples: ['eigs([[5, 2.3], [2.3, 1]])'],
11
+ description: 'Calculate the eigenvalues and optionally eigenvectors of a square matrix',
12
+ examples: ['eigs([[5, 2.3], [2.3, 1]])', 'eigs([[1, 2, 3], [4, 5, 6], [7, 8, 9]], { precision: 1e-6, eigenvectors: false }'],
13
13
  seealso: ['inv']
14
14
  };
@@ -331,7 +331,7 @@ var createAssignmentNode = exports.createAssignmentNode = /* #__PURE__ */(0, _fa
331
331
  if (needParenthesis(this, options && options.parenthesis, options && options.implicit)) {
332
332
  value = "\\left(".concat(value, "\\right)");
333
333
  }
334
- return object + index + ':=' + value;
334
+ return object + index + '=' + value;
335
335
  }
336
336
  }], [{
337
337
  key: "fromJSON",
@@ -270,7 +270,7 @@ var createFunctionAssignmentNode = exports.createFunctionAssignmentNode = /* #__
270
270
  if (needParenthesis(this, parenthesis, options && options.implicit)) {
271
271
  expr = "\\left(".concat(expr, "\\right)");
272
272
  }
273
- return '\\mathrm{' + this.name + '}\\left(' + this.params.map(_latex.toSymbol).join(',') + '\\right):=' + expr;
273
+ return '\\mathrm{' + this.name + '}\\left(' + this.params.map(_latex.toSymbol).join(',') + '\\right)=' + expr;
274
274
  }
275
275
  }], [{
276
276
  key: "fromJSON",
@@ -212,9 +212,6 @@ var createDerivative = exports.createDerivative = /* #__PURE__ */(0, _factory.fa
212
212
  return _derivative(node.expr, constNodes);
213
213
  },
214
214
  'FunctionNode, Object': function FunctionNodeObject(node, constNodes) {
215
- if (node.args.length !== 1) {
216
- funcArgsCheck(node);
217
- }
218
215
  if (constNodes[node] !== undefined) {
219
216
  return createConstantNode(0);
220
217
  }
@@ -263,9 +260,12 @@ var createDerivative = exports.createDerivative = /* #__PURE__ */(0, _factory.fa
263
260
  }
264
261
  break;
265
262
  case 'pow':
266
- constNodes[arg1] = constNodes[node.args[1]];
267
- // Pass to pow operator node parser
268
- return _derivative(new OperatorNode('^', 'pow', [arg0, node.args[1]]), constNodes);
263
+ if (node.args.length === 2) {
264
+ constNodes[arg1] = constNodes[node.args[1]];
265
+ // Pass to pow operator node parser
266
+ return _derivative(new OperatorNode('^', 'pow', [arg0, node.args[1]]), constNodes);
267
+ }
268
+ break;
269
269
  case 'exp':
270
270
  // d/dx(e^x) = e^x
271
271
  funcDerivative = new FunctionNode('exp', [arg0.clone()]);
@@ -395,7 +395,7 @@ var createDerivative = exports.createDerivative = /* #__PURE__ */(0, _factory.fa
395
395
  break;
396
396
  case 'gamma': // Needs digamma function, d/dx(gamma(x)) = gamma(x)digamma(x)
397
397
  default:
398
- throw new Error('Function "' + node.name + '" is not supported by derivative, or a wrong number of arguments is passed');
398
+ throw new Error('Cannot process function "' + node.name + '" in derivative: ' + 'the function is not supported, undefined, or the number of arguments passed to it are not supported');
399
399
  }
400
400
  var op, func;
401
401
  if (div) {
@@ -506,33 +506,10 @@ var createDerivative = exports.createDerivative = /* #__PURE__ */(0, _factory.fa
506
506
  // Functional Power Rule, d/dx(f^g) = f^g*[f'*(g/f) + g'ln(f)]
507
507
  return new OperatorNode('*', 'multiply', [new OperatorNode('^', 'pow', [_arg.clone(), _arg2.clone()]), new OperatorNode('+', 'add', [new OperatorNode('*', 'multiply', [_derivative(_arg, constNodes), new OperatorNode('/', 'divide', [_arg2.clone(), _arg.clone()])]), new OperatorNode('*', 'multiply', [_derivative(_arg2, constNodes), new FunctionNode('log', [_arg.clone()])])])]);
508
508
  }
509
- throw new Error('Operator "' + node.op + '" is not supported by derivative, or a wrong number of arguments is passed');
509
+ throw new Error('Cannot process operator "' + node.op + '" in derivative: ' + 'the operator is not supported, undefined, or the number of arguments passed to it are not supported');
510
510
  }
511
511
  });
512
512
 
513
- /**
514
- * Ensures the number of arguments for a function are correct,
515
- * and will throw an error otherwise.
516
- *
517
- * @param {FunctionNode} node
518
- */
519
- function funcArgsCheck(node) {
520
- // TODO add min, max etc
521
- if ((node.name === 'log' || node.name === 'nthRoot' || node.name === 'pow') && node.args.length === 2) {
522
- return;
523
- }
524
-
525
- // There should be an incorrect number of arguments if we reach here
526
-
527
- // Change all args to constants to avoid unidentified
528
- // symbol error when compiling function
529
- for (var i = 0; i < node.args.length; ++i) {
530
- node.args[i] = createConstantNode(0);
531
- }
532
- node.compile().evaluate();
533
- throw new Error('Function "' + node.name + '" is not supported by derivative, or a wrong number of arguments is passed');
534
- }
535
-
536
513
  /**
537
514
  * Helper function to create a constant node with a specific type
538
515
  * (number, BigNumber, Fraction)
@@ -25,7 +25,6 @@ function is1d(array) {
25
25
  });
26
26
  }
27
27
  var createGcd = exports.createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
28
- var _typed;
29
28
  var typed = _ref.typed,
30
29
  matrix = _ref.matrix,
31
30
  config = _ref.config,
@@ -97,7 +96,7 @@ var createGcd = exports.createGcd = /* #__PURE__ */(0, _factory.factory)(name, d
97
96
  SS: matAlgo04xSidSid,
98
97
  DS: matAlgo01xDSid,
99
98
  Ss: matAlgo10xSids
100
- }), (_typed = {}, (0, _defineProperty2["default"])(_typed, gcdManyTypesSignature, typed.referToSelf(function (self) {
99
+ }), (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, gcdManyTypesSignature, typed.referToSelf(function (self) {
101
100
  return function (a, b, args) {
102
101
  var res = self(a, b);
103
102
  for (var i = 0; i < args.length; i++) {
@@ -105,7 +104,7 @@ var createGcd = exports.createGcd = /* #__PURE__ */(0, _factory.factory)(name, d
105
104
  }
106
105
  return res;
107
106
  };
108
- })), (0, _defineProperty2["default"])(_typed, "Array", typed.referToSelf(function (self) {
107
+ })), "Array", typed.referToSelf(function (self) {
109
108
  return function (array) {
110
109
  if (array.length === 1 && Array.isArray(array[0]) && is1d(array[0])) {
111
110
  return self.apply(void 0, (0, _toConsumableArray2["default"])(array[0]));
@@ -115,11 +114,11 @@ var createGcd = exports.createGcd = /* #__PURE__ */(0, _factory.factory)(name, d
115
114
  }
116
115
  throw new _ArgumentsError.ArgumentsError('gcd() supports only 1d matrices!');
117
116
  };
118
- })), (0, _defineProperty2["default"])(_typed, "Matrix", typed.referToSelf(function (self) {
117
+ })), "Matrix", typed.referToSelf(function (self) {
119
118
  return function (matrix) {
120
119
  return self(matrix.toArray());
121
120
  };
122
- })), _typed));
121
+ })));
123
122
 
124
123
  /**
125
124
  * Calculate gcd for numbers
@@ -95,17 +95,10 @@ var createMod = exports.createMod = /* #__PURE__ */(0, _factory.factory)(name, d
95
95
  return typed(name, {
96
96
  'number, number': _modNumber,
97
97
  'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
98
- if (y.isNeg()) {
99
- throw new Error('Cannot calculate mod for a negative divisor');
100
- }
101
- return y.isZero() ? x : x.mod(y);
98
+ return y.isZero() ? x : x.sub(y.mul(floor(x.div(y))));
102
99
  },
103
100
  'Fraction, Fraction': function FractionFraction(x, y) {
104
- if (y.compare(0) < 0) {
105
- throw new Error('Cannot calculate mod for a negative divisor');
106
- }
107
- // Workaround suggested in Fraction.js library to calculate correct modulo for negative dividend
108
- return x.compare(0) >= 0 ? x.mod(y) : x.mod(y).add(y).mod(y);
101
+ return y.equals(0) ? x : x.sub(y.mul(floor(x.div(y))));
109
102
  }
110
103
  }, matrixAlgorithmSuite({
111
104
  SS: matAlgo05xSfSf,
@@ -40,6 +40,8 @@ var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(nam
40
40
  *
41
41
  * math.round(x)
42
42
  * math.round(x, n)
43
+ * math.round(unit, valuelessUnit)
44
+ * math.round(unit, n, valuelessUnit)
43
45
  *
44
46
  * Examples:
45
47
  *
@@ -57,14 +59,21 @@ var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(nam
57
59
  * const c = math.complex(3.2, -2.7)
58
60
  * math.round(c) // returns Complex 3 - 3i
59
61
  *
62
+ * const unit = math.unit('3.241 cm')
63
+ * const cm = math.unit('cm')
64
+ * const mm = math.unit('mm')
65
+ * math.round(unit, 1, cm) // returns Unit 3.2 cm
66
+ * math.round(unit, 1, mm) // returns Unit 32.4 mm
67
+ *
60
68
  * math.round([3.2, 3.8, -4.7]) // returns Array [3, 4, -5]
61
69
  *
62
70
  * See also:
63
71
  *
64
72
  * ceil, fix, floor
65
73
  *
66
- * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
74
+ * @param {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x Value to be rounded
67
75
  * @param {number | BigNumber | Array} [n=0] Number of decimals
76
+ * @param {Unit} [valuelessUnit] A valueless unit
68
77
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
69
78
  */
70
79
  return typed(name, {
@@ -116,52 +125,86 @@ var createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(nam
116
125
  }
117
126
  return x.round(n.toNumber());
118
127
  },
119
- // deep map collection, skip zeros since round(0) = 0
128
+ 'Unit, number, Unit': typed.referToSelf(function (self) {
129
+ return function (x, n, unit) {
130
+ var valueless = x.toNumeric(unit);
131
+ return unit.multiply(self(valueless, n));
132
+ };
133
+ }),
134
+ 'Unit, BigNumber, Unit': typed.referToSelf(function (self) {
135
+ return function (x, n, unit) {
136
+ return self(x, n.toNumber(), unit);
137
+ };
138
+ }),
139
+ 'Unit, Unit': typed.referToSelf(function (self) {
140
+ return function (x, unit) {
141
+ return self(x, 0, unit);
142
+ };
143
+ }),
144
+ 'Array | Matrix, number, Unit': typed.referToSelf(function (self) {
145
+ return function (x, n, unit) {
146
+ // deep map collection, skip zeros since round(0) = 0
147
+ return (0, _collection.deepMap)(x, function (value) {
148
+ return self(value, n, unit);
149
+ }, true);
150
+ };
151
+ }),
152
+ 'Array | Matrix, BigNumber, Unit': typed.referToSelf(function (self) {
153
+ return function (x, n, unit) {
154
+ return self(x, n.toNumber(), unit);
155
+ };
156
+ }),
157
+ 'Array | Matrix, Unit': typed.referToSelf(function (self) {
158
+ return function (x, unit) {
159
+ return self(x, 0, unit);
160
+ };
161
+ }),
120
162
  'Array | Matrix': typed.referToSelf(function (self) {
121
163
  return function (x) {
164
+ // deep map collection, skip zeros since round(0) = 0
122
165
  return (0, _collection.deepMap)(x, self, true);
123
166
  };
124
167
  }),
125
168
  'SparseMatrix, number | BigNumber': typed.referToSelf(function (self) {
126
- return function (x, y) {
127
- return matAlgo11xS0s(x, y, self, false);
169
+ return function (x, n) {
170
+ return matAlgo11xS0s(x, n, self, false);
128
171
  };
129
172
  }),
130
173
  'DenseMatrix, number | BigNumber': typed.referToSelf(function (self) {
131
- return function (x, y) {
132
- return matAlgo14xDs(x, y, self, false);
174
+ return function (x, n) {
175
+ return matAlgo14xDs(x, n, self, false);
133
176
  };
134
177
  }),
135
178
  'Array, number | BigNumber': typed.referToSelf(function (self) {
136
- return function (x, y) {
179
+ return function (x, n) {
137
180
  // use matrix implementation
138
- return matAlgo14xDs(matrix(x), y, self, false).valueOf();
181
+ return matAlgo14xDs(matrix(x), n, self, false).valueOf();
139
182
  };
140
183
  }),
141
184
  'number | Complex | BigNumber | Fraction, SparseMatrix': typed.referToSelf(function (self) {
142
- return function (x, y) {
185
+ return function (x, n) {
143
186
  // check scalar is zero
144
187
  if (equalScalar(x, 0)) {
145
188
  // do not execute algorithm, result will be a zero matrix
146
- return zeros(y.size(), y.storage());
189
+ return zeros(n.size(), n.storage());
147
190
  }
148
- return matAlgo12xSfs(y, x, self, true);
191
+ return matAlgo12xSfs(n, x, self, true);
149
192
  };
150
193
  }),
151
194
  'number | Complex | BigNumber | Fraction, DenseMatrix': typed.referToSelf(function (self) {
152
- return function (x, y) {
195
+ return function (x, n) {
153
196
  // check scalar is zero
154
197
  if (equalScalar(x, 0)) {
155
198
  // do not execute algorithm, result will be a zero matrix
156
- return zeros(y.size(), y.storage());
199
+ return zeros(n.size(), n.storage());
157
200
  }
158
- return matAlgo14xDs(y, x, self, true);
201
+ return matAlgo14xDs(n, x, self, true);
159
202
  };
160
203
  }),
161
204
  'number | Complex | BigNumber | Fraction, Array': typed.referToSelf(function (self) {
162
- return function (x, y) {
205
+ return function (x, n) {
163
206
  // use matrix implementation
164
- return matAlgo14xDs(matrix(y), x, self, true).valueOf();
207
+ return matAlgo14xDs(matrix(n), x, self, true).valueOf();
165
208
  };
166
209
  })
167
210
  });