mathjs 14.4.0 → 14.5.1

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 (59) hide show
  1. package/HISTORY.md +20 -0
  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/constants.js +12 -12
  7. package/lib/cjs/core/create.js +1 -2
  8. package/lib/cjs/defaultInstance.js +1 -2
  9. package/lib/cjs/entry/allFactoriesAny.js +1 -2
  10. package/lib/cjs/entry/allFactoriesNumber.js +1 -2
  11. package/lib/cjs/entry/dependenciesAny/dependenciesCoulombConstant.generated.js +19 -0
  12. package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
  13. package/lib/cjs/entry/impureFunctionsAny.generated.js +3 -2
  14. package/lib/cjs/entry/pureFunctionsAny.generated.js +15 -10
  15. package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
  16. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +8 -2
  17. package/lib/cjs/expression/embeddedDocs/function/expression/compile.js +14 -0
  18. package/lib/cjs/expression/embeddedDocs/function/expression/evaluate.js +1 -1
  19. package/lib/cjs/expression/embeddedDocs/function/expression/parse.js +14 -0
  20. package/lib/cjs/expression/embeddedDocs/function/expression/parser.js +14 -0
  21. package/lib/cjs/expression/embeddedDocs/function/statistics/sum.js +1 -1
  22. package/lib/cjs/expression/function/parser.js +1 -1
  23. package/lib/cjs/expression/parse.js +3 -2
  24. package/lib/cjs/factoriesAny.js +6 -0
  25. package/lib/cjs/function/arithmetic/add.js +33 -33
  26. package/lib/cjs/function/complex/conj.js +3 -2
  27. package/lib/cjs/function/probability/randomInt.js +1 -1
  28. package/lib/cjs/function/utils/numeric.js +1 -0
  29. package/lib/cjs/header.js +2 -2
  30. package/lib/cjs/type/matrix/DenseMatrix.js +127 -91
  31. package/lib/cjs/type/unit/Unit.js +19 -4
  32. package/lib/cjs/type/unit/physicalConstants.js +3 -2
  33. package/lib/cjs/utils/snapshot.js +2 -3
  34. package/lib/cjs/version.js +1 -1
  35. package/lib/esm/constants.js +12 -12
  36. package/lib/esm/entry/dependenciesAny/dependenciesCoulombConstant.generated.js +12 -0
  37. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  38. package/lib/esm/entry/impureFunctionsAny.generated.js +4 -3
  39. package/lib/esm/entry/pureFunctionsAny.generated.js +12 -7
  40. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  41. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +8 -2
  42. package/lib/esm/expression/embeddedDocs/function/expression/compile.js +8 -0
  43. package/lib/esm/expression/embeddedDocs/function/expression/evaluate.js +1 -1
  44. package/lib/esm/expression/embeddedDocs/function/expression/parse.js +8 -0
  45. package/lib/esm/expression/embeddedDocs/function/expression/parser.js +8 -0
  46. package/lib/esm/expression/embeddedDocs/function/statistics/sum.js +1 -1
  47. package/lib/esm/expression/function/parser.js +1 -1
  48. package/lib/esm/expression/parse.js +3 -2
  49. package/lib/esm/factoriesAny.js +1 -1
  50. package/lib/esm/function/arithmetic/add.js +33 -33
  51. package/lib/esm/function/complex/conj.js +3 -2
  52. package/lib/esm/function/probability/randomInt.js +1 -1
  53. package/lib/esm/function/utils/numeric.js +1 -0
  54. package/lib/esm/type/matrix/DenseMatrix.js +133 -97
  55. package/lib/esm/type/unit/Unit.js +19 -4
  56. package/lib/esm/type/unit/physicalConstants.js +2 -1
  57. package/lib/esm/utils/snapshot.js +1 -1
  58. package/lib/esm/version.js +1 -1
  59. package/package.json +17 -17
@@ -0,0 +1,8 @@
1
+ export var compileDocs = {
2
+ name: 'compile',
3
+ category: 'Expression',
4
+ syntax: ['compile(expr) ', 'compile([expr1, expr2, expr3, ...])'],
5
+ description: 'Parse and compile an expression. Returns a an object with a function evaluate([scope]) to evaluate the compiled expression.',
6
+ examples: ['code1 = compile("sqrt(3^2 + 4^2)")', 'code1.evaluate() ', 'code2 = compile("a * b")', 'code2.evaluate({a: 3, b: 4})'],
7
+ seealso: ['parser', 'parse', 'evaluate']
8
+ };
@@ -4,5 +4,5 @@ export var evaluateDocs = {
4
4
  syntax: ['evaluate(expression)', 'evaluate(expression, scope)', 'evaluate([expr1, expr2, expr3, ...])', 'evaluate([expr1, expr2, expr3, ...], scope)'],
5
5
  description: 'Evaluate an expression or an array with expressions.',
6
6
  examples: ['evaluate("2 + 3")', 'evaluate("sqrt(16)")', 'evaluate("2 inch to cm")', 'evaluate("sin(x * pi)", { "x": 1/2 })', 'evaluate(["width=2", "height=4","width*height"])'],
7
- seealso: []
7
+ seealso: ['parser', 'parse', 'compile']
8
8
  };
@@ -0,0 +1,8 @@
1
+ export var parseDocs = {
2
+ name: 'parse',
3
+ category: 'Expression',
4
+ syntax: ['parse(expr)', 'parse(expr, options)', 'parse([expr1, expr2, expr3, ...])', 'parse([expr1, expr2, expr3, ...], options)'],
5
+ description: 'Parse an expression. Returns a node tree, which can be evaluated by invoking node.evaluate() or transformed into a functional object via node.compile().',
6
+ examples: ['node1 = parse("sqrt(3^2 + 4^2)")', 'node1.evaluate()', 'code1 = node1.compile()', 'code1.evaluate()', 'scope = {a: 3, b: 4}', 'node2 = parse("a * b")', 'node2.evaluate(scope)', 'code2 = node2.compile()', 'code2.evaluate(scope)'],
7
+ seealso: ['parser', 'evaluate', 'compile']
8
+ };
@@ -0,0 +1,8 @@
1
+ export var parserDocs = {
2
+ name: 'parser',
3
+ category: 'Expression',
4
+ syntax: ['parser()'],
5
+ description: 'Create a parser object that keeps a context of variables and their values, allowing the evaluation of expressions in that context.',
6
+ examples: ['myParser = parser()', 'myParser.evaluate("sqrt(3^2 + 4^2)")', 'myParser.set("x", 3)', 'myParser.evaluate("y = x + 3")', 'myParser.evaluate(["y = x + 3", "y = y + 1"])', 'myParser.get("y")'],
7
+ seealso: ['evaluate', 'parse', 'compile']
8
+ };
@@ -4,5 +4,5 @@ export var sumDocs = {
4
4
  syntax: ['sum(a, b, c, ...)', 'sum(A)', 'sum(A, dimension)'],
5
5
  description: 'Compute the sum of all values.',
6
6
  examples: ['sum(2, 3, 4, 1)', 'sum([2, 3, 4, 1])', 'sum([2, 5; 4, 3])'],
7
- seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']
7
+ seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', 'variance']
8
8
  };
@@ -7,7 +7,7 @@ export var createParser = /* #__PURE__ */factory(name, dependencies, _ref => {
7
7
  Parser
8
8
  } = _ref;
9
9
  /**
10
- * Create a parser. The function creates a new `math.Parser` object.
10
+ * Create a `math.Parser` object that keeps a context of variables and their values, allowing the evaluation of expressions in that context.
11
11
  *
12
12
  * Syntax:
13
13
  *
@@ -29,7 +29,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
29
29
  } = _ref;
30
30
  /**
31
31
  * Parse an expression. Returns a node tree, which can be evaluated by
32
- * invoking node.evaluate().
32
+ * invoking node.evaluate() or transformed into a functional object via node.compile().
33
33
  *
34
34
  * Note the evaluating arbitrary expressions may involve security risks,
35
35
  * see [https://mathjs.org/docs/expressions/security.html](https://mathjs.org/docs/expressions/security.html) for more information.
@@ -48,6 +48,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
48
48
  *
49
49
  * let scope = {a:3, b:4}
50
50
  * const node2 = math.parse('a * b') // 12
51
+ * node2.evaluate(scope) // 12
51
52
  * const code2 = node2.compile()
52
53
  * code2.evaluate(scope) // 12
53
54
  * scope.a = 5
@@ -870,7 +871,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
870
871
  name = state.token;
871
872
  fn = operators[name];
872
873
  getTokenSkipNewline(state);
873
- if (name === 'in' && state.token === '') {
874
+ if (name === 'in' && '])},;'.includes(state.token)) {
874
875
  // end of expression -> this is the unit 'in' ('inch')
875
876
  node = new OperatorNode('*', 'multiply', [node, new SymbolNode('in')], true);
876
877
  } else {
@@ -270,7 +270,7 @@ export { createReplacer } from './json/replacer.js';
270
270
  export { createE, createUppercaseE, createFalse, createI, createInfinity, createLN10, createLN2, createLOG10E, createLOG2E, createNaN, createNull, createPhi, createPi, createUppercasePi, createSQRT1_2,
271
271
  // eslint-disable-line camelcase
272
272
  createSQRT2, createTau, createTrue, createVersion } from './constants.js';
273
- export { createAtomicMass, createAvogadro, createBohrMagneton, createBohrRadius, createBoltzmann, createClassicalElectronRadius, createConductanceQuantum, createCoulomb, createDeuteronMass, createEfimovFactor, createElectricConstant, createElectronMass, createElementaryCharge, createFaraday, createFermiCoupling, createFineStructure, createFirstRadiation, createGasConstant, createGravitationConstant, createGravity, createHartreeEnergy, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMagneticFluxQuantum, createMolarMass, createMolarMassC12, createMolarPlanckConstant, createMolarVolume, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckConstant, createPlanckLength, createPlanckMass, createPlanckTemperature, createPlanckTime, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSackurTetrode, createSecondRadiation, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createVacuumImpedance, createWeakMixingAngle, createWienDisplacement } from './type/unit/physicalConstants.js';
273
+ export { createAtomicMass, createAvogadro, createBohrMagneton, createBohrRadius, createBoltzmann, createClassicalElectronRadius, createConductanceQuantum, createCoulomb, createCoulombConstant, createDeuteronMass, createEfimovFactor, createElectricConstant, createElectronMass, createElementaryCharge, createFaraday, createFermiCoupling, createFineStructure, createFirstRadiation, createGasConstant, createGravitationConstant, createGravity, createHartreeEnergy, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMagneticFluxQuantum, createMolarMass, createMolarMassC12, createMolarPlanckConstant, createMolarVolume, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckConstant, createPlanckLength, createPlanckMass, createPlanckTemperature, createPlanckTime, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSackurTetrode, createSecondRadiation, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createVacuumImpedance, createWeakMixingAngle, createWienDisplacement } from './type/unit/physicalConstants.js';
274
274
  export { createMapSlicesTransform } from './expression/transform/mapSlices.transform.js';
275
275
  export { createColumnTransform } from './expression/transform/column.transform.js';
276
276
  export { createFilterTransform } from './expression/transform/filter.transform.js';
@@ -32,39 +32,39 @@ export var createAdd = /* #__PURE__ */factory(name, dependencies, _ref => {
32
32
  concat
33
33
  });
34
34
  /**
35
- * Add two or more values, `x + y`.
36
- * For matrices, the function is evaluated element wise.
37
- *
38
- * Syntax:
39
- *
40
- * math.add(x, y)
41
- * math.add(x, y, z, ...)
42
- *
43
- * Examples:
44
- *
45
- * math.add(2, 3) // returns number 5
46
- * math.add(2, 3, 4) // returns number 9
47
- *
48
- * const a = math.complex(2, 3)
49
- * const b = math.complex(-4, 1)
50
- * math.add(a, b) // returns Complex -2 + 4i
51
- *
52
- * math.add([1, 2, 3], 4) // returns Array [5, 6, 7]
53
- *
54
- * const c = math.unit('5 cm')
55
- * const d = math.unit('2.1 mm')
56
- * math.add(c, d) // returns Unit 52.1 mm
57
- *
58
- * math.add("2.3", "4") // returns number 6.3
59
- *
60
- * See also:
61
- *
62
- * subtract, sum
63
- *
64
- * @param {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} x First value to add
65
- * @param {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} y Second value to add
66
- * @return {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} Sum of `x` and `y`
67
- */
35
+ * Add two or more values, `x + y`.
36
+ * For matrices, the function is evaluated element wise.
37
+ *
38
+ * Syntax:
39
+ *
40
+ * math.add(x, y)
41
+ * math.add(x, y, z, ...)
42
+ *
43
+ * Examples:
44
+ *
45
+ * math.add(2, 3) // returns number 5
46
+ * math.add(2, 3, 4) // returns number 9
47
+ *
48
+ * const a = math.complex(2, 3)
49
+ * const b = math.complex(-4, 1)
50
+ * math.add(a, b) // returns Complex -2 + 4i
51
+ *
52
+ * math.add([1, 2, 3], 4) // returns Array [5, 6, 7]
53
+ *
54
+ * const c = math.unit('5 cm')
55
+ * const d = math.unit('2.1 mm')
56
+ * math.add(c, d) // returns Unit 52.1 mm
57
+ *
58
+ * math.add("2.3", "4") // returns number 6.3
59
+ *
60
+ * See also:
61
+ *
62
+ * subtract, sum
63
+ *
64
+ * @param {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} x First value to add
65
+ * @param {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} y Second value to add
66
+ * @return {number | BigNumber | bigint | Fraction | Complex | Unit | Array | Matrix} Sum of `x` and `y`
67
+ */
68
68
  return typed(name, {
69
69
  'any, any': addScalar,
70
70
  'any, any, ...any': typed.referToSelf(self => (x, y, rest) => {
@@ -26,14 +26,15 @@ export var createConj = /* #__PURE__ */factory(name, dependencies, _ref => {
26
26
  *
27
27
  * re, im, arg, abs
28
28
  *
29
- * @param {number | BigNumber | Complex | Array | Matrix} x
29
+ * @param {number | BigNumber | Complex | Array | Matrix | Unit} x
30
30
  * A complex number or array with complex numbers
31
- * @return {number | BigNumber | Complex | Array | Matrix}
31
+ * @return {number | BigNumber | Complex | Array | Matrix | Unit}
32
32
  * The complex conjugate of x
33
33
  */
34
34
  return typed(name, {
35
35
  'number | BigNumber | Fraction': x => x,
36
36
  Complex: x => x.conjugate(),
37
+ Unit: typed.referToSelf(self => x => new x.constructor(self(x.toNumeric()), x.formatUnits())),
37
38
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
38
39
  });
39
40
  });
@@ -4,7 +4,6 @@ import { createRng } from './util/seededRNG.js';
4
4
  import { isMatrix } from '../../utils/is.js';
5
5
  var name = 'randomInt';
6
6
  var dependencies = ['typed', 'config', 'log2', '?on'];
7
- var simpleCutoff = 2n ** 30n;
8
7
  export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => {
9
8
  var {
10
9
  typed,
@@ -69,6 +68,7 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
69
68
  return Math.floor(min + rng() * (max - min));
70
69
  }
71
70
  function _randomBigint(min, max) {
71
+ var simpleCutoff = 2n ** 30n;
72
72
  var width = max - min; // number of choices
73
73
  if (width <= simpleCutoff) {
74
74
  // do it with number type
@@ -30,6 +30,7 @@ export var createNumeric = /* #__PURE__ */factory(name, dependencies, _ref => {
30
30
  * Syntax:
31
31
  *
32
32
  * math.numeric(x)
33
+ * math.numeric(value, outputType)
33
34
  *
34
35
  * Examples:
35
36
  *
@@ -241,36 +241,46 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
241
241
  }
242
242
 
243
243
  // retrieve submatrix
244
- // TODO: more efficient when creating an empty matrix and setting _data and _size manually
245
- return new DenseMatrix(_getSubmatrix(matrix._data, index, size.length, 0), matrix._datatype);
244
+ var returnMatrix = new DenseMatrix([]);
245
+ var submatrix = _getSubmatrix(matrix._data, index);
246
+ returnMatrix._size = submatrix.size;
247
+ returnMatrix._datatype = matrix._datatype;
248
+ returnMatrix._data = submatrix.data;
249
+ return returnMatrix;
246
250
  }
247
251
  }
248
252
 
249
253
  /**
250
- * Recursively get a submatrix of a multi dimensional matrix.
254
+ * Get a submatrix of a multi dimensional matrix.
251
255
  * Index is not checked for correct number or length of dimensions.
252
256
  * @memberof DenseMatrix
253
257
  * @param {Array} data
254
258
  * @param {Index} index
255
- * @param {number} dims Total number of dimensions
256
- * @param {number} dim Current dimension
257
259
  * @return {Array} submatrix
258
260
  * @private
259
261
  */
260
- function _getSubmatrix(data, index, dims, dim) {
261
- var last = dim === dims - 1;
262
- var range = index.dimension(dim);
263
- if (last) {
264
- return range.map(function (i) {
265
- validateIndex(i, data.length);
266
- return data[i];
267
- }).valueOf();
268
- } else {
269
- return range.map(function (i) {
270
- validateIndex(i, data.length);
271
- var child = data[i];
272
- return _getSubmatrix(child, index, dims, dim + 1);
273
- }).valueOf();
262
+ function _getSubmatrix(data, index) {
263
+ var maxDepth = index.size().length - 1;
264
+ var size = Array(maxDepth);
265
+ return {
266
+ data: getSubmatrixRecursive(data),
267
+ size
268
+ };
269
+ function getSubmatrixRecursive(data) {
270
+ var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
271
+ var ranges = index.dimension(depth);
272
+ size[depth] = ranges.size()[0];
273
+ if (depth < maxDepth) {
274
+ return ranges.map(rangeIndex => {
275
+ validateIndex(rangeIndex, data.length);
276
+ return getSubmatrixRecursive(data[rangeIndex], depth + 1);
277
+ }).valueOf();
278
+ } else {
279
+ return ranges.map(rangeIndex => {
280
+ validateIndex(rangeIndex, data.length);
281
+ return data[rangeIndex];
282
+ }).valueOf();
283
+ }
274
284
  }
275
285
  }
276
286
 
@@ -358,9 +368,7 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
358
368
  _fit(matrix, size, defaultValue);
359
369
 
360
370
  // insert the sub matrix
361
- var dims = iSize.length;
362
- var dim = 0;
363
- _setSubmatrix(matrix._data, index, submatrix, dims, dim);
371
+ _setSubmatrix(matrix._data, index, submatrix);
364
372
  }
365
373
  return matrix;
366
374
  }
@@ -371,23 +379,25 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
371
379
  * @param {Array} data
372
380
  * @param {Index} index
373
381
  * @param {Array} submatrix
374
- * @param {number} dims Total number of dimensions
375
- * @param {number} dim
376
382
  * @private
377
383
  */
378
- function _setSubmatrix(data, index, submatrix, dims, dim) {
379
- var last = dim === dims - 1;
380
- var range = index.dimension(dim);
381
- if (last) {
382
- range.forEach(function (dataIndex, subIndex) {
383
- validateIndex(dataIndex);
384
- data[dataIndex] = submatrix[subIndex[0]];
385
- });
386
- } else {
387
- range.forEach(function (dataIndex, subIndex) {
388
- validateIndex(dataIndex);
389
- _setSubmatrix(data[dataIndex], index, submatrix[subIndex[0]], dims, dim + 1);
390
- });
384
+ function _setSubmatrix(data, index, submatrix) {
385
+ var maxDepth = index.size().length - 1;
386
+ setSubmatrixRecursive(data, submatrix);
387
+ function setSubmatrixRecursive(data, submatrix) {
388
+ var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
389
+ var range = index.dimension(depth);
390
+ if (depth < maxDepth) {
391
+ range.forEach((rangeIndex, i) => {
392
+ validateIndex(rangeIndex, data.length);
393
+ setSubmatrixRecursive(data[rangeIndex], submatrix[i[0]], depth + 1);
394
+ });
395
+ } else {
396
+ range.forEach((rangeIndex, i) => {
397
+ validateIndex(rangeIndex, data.length);
398
+ data[rangeIndex] = submatrix[i[0]];
399
+ });
400
+ }
391
401
  }
392
402
  }
393
403
 
@@ -518,84 +528,75 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
518
528
  };
519
529
 
520
530
  /**
521
- * Applies a callback function to a reference to each element of the matrix
531
+ * Create a new matrix with the results of the callback function executed on
532
+ * each entry of the matrix.
522
533
  * @memberof DenseMatrix
523
534
  * @param {Function} callback The callback function is invoked with three
524
- * parameters: the array containing the element,
525
- * the index of the element within that array (as an integer),
526
- * and for non unarry callbacks copy of the current index (as an array of integers).
535
+ * parameters: the value of the element, the index
536
+ * of the element, and the Matrix being traversed.
537
+ * @param {boolean} skipZeros If true, the callback function is invoked only for non-zero entries
538
+ * @param {boolean} isUnary If true, the callback function is invoked with one parameter
539
+ *
540
+ * @return {DenseMatrix} matrix
527
541
  */
528
- DenseMatrix.prototype._forEach = function (callback) {
529
- var isUnary = callback.length === 2; // callback has 2 parameters: value, index
530
- var maxDepth = this._size.length - 1;
531
- if (maxDepth < 0) return;
532
- if (isUnary) {
533
- iterateUnary(this._data);
534
- return;
542
+ DenseMatrix.prototype.map = function (callback) {
543
+ var skipZeros = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
544
+ var isUnary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
545
+ var me = this;
546
+ var maxDepth = me._size.length - 1;
547
+ if (maxDepth < 0) return me.clone();
548
+ var fastCallback = optimizeCallback(callback, me, 'map', isUnary);
549
+ var fastCallbackFn = fastCallback.fn;
550
+ var result = me.create(undefined, me._datatype);
551
+ result._size = me._size;
552
+ if (isUnary || fastCallback.isUnary) {
553
+ result._data = iterateUnary(me._data);
554
+ return result;
535
555
  }
536
556
  if (maxDepth === 0) {
537
- for (var i = 0; i < this._data.length; i++) {
538
- callback(this._data, i, [i]);
557
+ var inputData = me.valueOf();
558
+ var data = Array(inputData.length);
559
+ for (var i = 0; i < inputData.length; i++) {
560
+ data[i] = fastCallbackFn(inputData[i], [i], me);
539
561
  }
540
- return;
562
+ result._data = data;
563
+ return result;
541
564
  }
542
- var index = new Array(maxDepth + 1);
543
- iterate(this._data);
565
+ var index = [];
566
+ result._data = iterate(me._data);
567
+ return result;
544
568
  function iterate(data) {
545
569
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
570
+ var result = Array(data.length);
546
571
  if (depth < maxDepth) {
547
572
  for (var _i = 0; _i < data.length; _i++) {
548
573
  index[depth] = _i;
549
- iterate(data[_i], depth + 1);
574
+ result[_i] = iterate(data[_i], depth + 1);
550
575
  }
551
576
  } else {
552
577
  for (var _i2 = 0; _i2 < data.length; _i2++) {
553
578
  index[depth] = _i2;
554
- callback(data, _i2, index.slice());
579
+ result[_i2] = fastCallbackFn(data[_i2], index.slice(), me);
555
580
  }
556
581
  }
582
+ return result;
557
583
  }
558
584
  function iterateUnary(data) {
559
585
  var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
586
+ var result = Array(data.length);
560
587
  if (depth < maxDepth) {
561
588
  for (var _i3 = 0; _i3 < data.length; _i3++) {
562
- iterateUnary(data[_i3], depth + 1);
589
+ result[_i3] = iterateUnary(data[_i3], depth + 1);
563
590
  }
564
591
  } else {
565
592
  for (var _i4 = 0; _i4 < data.length; _i4++) {
566
- callback(data, _i4);
593
+ result[_i4] = fastCallbackFn(data[_i4]);
567
594
  }
568
595
  }
596
+ return result;
569
597
  }
570
598
  };
571
599
 
572
- /**
573
- * Create a new matrix with the results of the callback function executed on
574
- * each entry of the matrix.
575
- * @memberof DenseMatrix
576
- * @param {Function} callback The callback function is invoked with three
577
- * parameters: the value of the element, the index
578
- * of the element, and the Matrix being traversed.
579
- * @param {boolean} skipZeros If true, the callback function is invoked only for non-zero entries
580
- * @param {boolean} isUnary If true, the callback function is invoked with one parameter
581
- *
582
- * @return {DenseMatrix} matrix
583
- */
584
- DenseMatrix.prototype.map = function (callback) {
585
- var skipZeros = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
586
- var isUnary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
587
- var me = this;
588
- var result = new DenseMatrix(me);
589
- var fastCallback = optimizeCallback(callback, me._data, 'map', isUnary);
590
- var applyCallback = isUnary || fastCallback.isUnary ? (arr, i) => {
591
- arr[i] = fastCallback.fn(arr[i]);
592
- } : (arr, i, index) => {
593
- arr[i] = fastCallback.fn(arr[i], index, me);
594
- };
595
- result._forEach(applyCallback);
596
- return result;
597
- };
598
-
599
600
  /**
600
601
  * Execute a callback function on each entry of the matrix.
601
602
  * @memberof DenseMatrix
@@ -609,13 +610,48 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
609
610
  var skipZeros = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
610
611
  var isUnary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
611
612
  var me = this;
612
- var fastCallback = optimizeCallback(callback, me._data, 'map', isUnary);
613
- var applyCallback = isUnary || fastCallback.isUnary ? (arr, i) => {
614
- fastCallback.fn(arr[i]);
615
- } : (arr, i, index) => {
616
- fastCallback.fn(arr[i], index, me);
617
- };
618
- me._forEach(applyCallback);
613
+ var maxDepth = me._size.length - 1;
614
+ if (maxDepth < 0) return;
615
+ var fastCallback = optimizeCallback(callback, me, 'map', isUnary);
616
+ var fastCallbackFn = fastCallback.fn;
617
+ if (isUnary || fastCallback.isUnary) {
618
+ iterateUnary(me._data);
619
+ return;
620
+ }
621
+ if (maxDepth === 0) {
622
+ for (var i = 0; i < me._data.length; i++) {
623
+ fastCallbackFn(me._data[i], [i], me);
624
+ }
625
+ return;
626
+ }
627
+ var index = [];
628
+ iterate(me._data);
629
+ function iterate(data) {
630
+ var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
631
+ if (depth < maxDepth) {
632
+ for (var _i5 = 0; _i5 < data.length; _i5++) {
633
+ index[depth] = _i5;
634
+ iterate(data[_i5], depth + 1);
635
+ }
636
+ } else {
637
+ for (var _i6 = 0; _i6 < data.length; _i6++) {
638
+ index[depth] = _i6;
639
+ fastCallbackFn(data[_i6], index.slice(), me);
640
+ }
641
+ }
642
+ }
643
+ function iterateUnary(data) {
644
+ var depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
645
+ if (depth < maxDepth) {
646
+ for (var _i7 = 0; _i7 < data.length; _i7++) {
647
+ iterateUnary(data[_i7], depth + 1);
648
+ }
649
+ } else {
650
+ for (var _i8 = 0; _i8 < data.length; _i8++) {
651
+ fastCallbackFn(data[_i8]);
652
+ }
653
+ }
654
+ }
619
655
  };
620
656
 
621
657
  /**
@@ -639,15 +675,15 @@ export var createDenseMatrixClass = /* #__PURE__ */factory(name, dependencies, _
639
675
  var index = [];
640
676
  var _recurse = function* recurse(value, depth) {
641
677
  if (depth < maxDepth) {
642
- for (var _i5 = 0; _i5 < value.length; _i5++) {
643
- index[depth] = _i5;
644
- yield* _recurse(value[_i5], depth + 1);
678
+ for (var _i9 = 0; _i9 < value.length; _i9++) {
679
+ index[depth] = _i9;
680
+ yield* _recurse(value[_i9], depth + 1);
645
681
  }
646
682
  } else {
647
- for (var _i6 = 0; _i6 < value.length; _i6++) {
648
- index[depth] = _i6;
683
+ for (var _i0 = 0; _i0 < value.length; _i0++) {
684
+ index[depth] = _i0;
649
685
  yield {
650
- value: value[_i6],
686
+ value: value[_i0],
651
687
  index: index.slice()
652
688
  };
653
689
  }
@@ -618,8 +618,8 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
618
618
 
619
619
  // If at least one operand has a value, then the result should also have a value
620
620
  if (this.value !== null || other.value !== null) {
621
- var valThis = this.value === null ? this._normalize(1) : this.value;
622
- var valOther = other.value === null ? other._normalize(1) : other.value;
621
+ var valThis = this.value === null ? this._normalize(one(other.value)) : this.value;
622
+ var valOther = other.value === null ? other._normalize(one(this.value)) : other.value;
623
623
  res.value = multiplyScalar(valThis, valOther);
624
624
  } else {
625
625
  res.value = null;
@@ -666,8 +666,8 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
666
666
 
667
667
  // If at least one operand has a value, the result should have a value
668
668
  if (this.value !== null || other.value !== null) {
669
- var valThis = this.value === null ? this._normalize(1) : this.value;
670
- var valOther = other.value === null ? other._normalize(1) : other.value;
669
+ var valThis = this.value === null ? this._normalize(one(other.value)) : this.value;
670
+ var valOther = other.value === null ? other._normalize(one(this.value)) : other.value;
671
671
  res.value = divideScalar(valThis, valOther);
672
672
  } else {
673
673
  res.value = null;
@@ -723,6 +723,21 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
723
723
  }
724
724
  }
725
725
 
726
+ /**
727
+ * Create a value one with the numeric type of `typeOfValue`.
728
+ * For example, `one(new BigNumber(3))` returns `BigNumber(1)`
729
+ * @param {number | Fraction | BigNumber} typeOfValue
730
+ * @returns {number | Fraction | BigNumber}
731
+ */
732
+ function one(typeOfValue) {
733
+ // TODO: this is a workaround to prevent the following BigNumber conversion error from throwing:
734
+ // "TypeError: Cannot implicitly convert a number with >15 significant digits to BigNumber"
735
+ // see https://github.com/josdejong/mathjs/issues/3450
736
+ // https://github.com/josdejong/mathjs/pull/3375
737
+ var convert = Unit._getNumberConverter(typeOf(typeOfValue));
738
+ return convert(1);
739
+ }
740
+
726
741
  /**
727
742
  * Calculate the absolute value of a unit
728
743
  * @memberof Unit
@@ -12,7 +12,8 @@ export var createReducedPlanckConstant = /* #__PURE__ */unitFactory('reducedPlan
12
12
  export var createMagneticConstant = /* #__PURE__ */unitFactory('magneticConstant', '1.25663706212e-6', 'N A^-2');
13
13
  export var createElectricConstant = /* #__PURE__ */unitFactory('electricConstant', '8.8541878128e-12', 'F m^-1');
14
14
  export var createVacuumImpedance = /* #__PURE__ */unitFactory('vacuumImpedance', '376.730313667', 'ohm');
15
- export var createCoulomb = /* #__PURE__ */unitFactory('coulomb', '8.987551792261171e9', 'N m^2 C^-2');
15
+ export var createCoulomb = /* #__PURE__ */unitFactory('coulomb', '8.987551792261171e9', 'N m^2 C^-2'); // Deprecated in favor of coulombConstant
16
+ export var createCoulombConstant = /* #__PURE__ */unitFactory('coulombConstant', '8.987551792261171e9', 'N m^2 C^-2');
16
17
  export var createElementaryCharge = /* #__PURE__ */unitFactory('elementaryCharge', '1.602176634e-19', 'C');
17
18
  export var createBohrMagneton = /* #__PURE__ */unitFactory('bohrMagneton', '9.2740100783e-24', 'J T^-1');
18
19
  export var createConductanceQuantum = /* #__PURE__ */unitFactory('conductanceQuantum', '7.748091729863649e-5', 'S');
@@ -138,7 +138,7 @@ export function createSnapshotFromFactories(factories) {
138
138
  embeddedDocs[name] = 'Object';
139
139
  }
140
140
  });
141
- embeddedDocs = exclude(embeddedDocs, ['equalScalar', 'addScalar', 'subtractScalar', 'multiplyScalar', 'print', 'divideScalar', 'parse', 'compile', 'parser', 'chain', 'reviver', 'replacer']);
141
+ embeddedDocs = exclude(embeddedDocs, ['equalScalar', 'addScalar', 'subtractScalar', 'multiplyScalar', 'print', 'divideScalar', 'parse', 'compile', 'parser', 'chain', 'coulomb', 'reviver', 'replacer']);
142
142
  var allTypeChecks = {};
143
143
  Object.keys(allIsFunctions).forEach(name => {
144
144
  if (name.indexOf('is') === 0) {
@@ -1,3 +1,3 @@
1
- export var version = '14.4.0';
1
+ export var version = '14.5.1';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.