mathjs 11.12.0 → 12.1.0

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