mathjs 12.4.1 → 12.4.3

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 (67) hide show
  1. package/HISTORY.md +17 -0
  2. package/README.md +4 -0
  3. package/bin/cli.js +1 -1
  4. package/lib/browser/math.js +1 -1
  5. package/lib/browser/math.js.LICENSE.txt +2 -2
  6. package/lib/browser/math.js.map +1 -1
  7. package/lib/cjs/core/create.js +3 -3
  8. package/lib/cjs/core/function/config.js +1 -11
  9. package/lib/cjs/core/function/import.js +3 -4
  10. package/lib/cjs/defaultInstance.js +1 -1
  11. package/lib/cjs/entry/allFactoriesAny.js +1 -1
  12. package/lib/cjs/entry/allFactoriesNumber.js +1 -1
  13. package/lib/cjs/expression/node/AccessorNode.js +2 -3
  14. package/lib/cjs/expression/node/ArrayNode.js +2 -3
  15. package/lib/cjs/expression/node/AssignmentNode.js +2 -3
  16. package/lib/cjs/expression/node/BlockNode.js +2 -3
  17. package/lib/cjs/expression/node/ConditionalNode.js +2 -3
  18. package/lib/cjs/expression/node/ConstantNode.js +2 -3
  19. package/lib/cjs/expression/node/FunctionAssignmentNode.js +2 -3
  20. package/lib/cjs/expression/node/FunctionNode.js +5 -6
  21. package/lib/cjs/expression/node/IndexNode.js +2 -3
  22. package/lib/cjs/expression/node/Node.js +1 -2
  23. package/lib/cjs/expression/node/ObjectNode.js +2 -3
  24. package/lib/cjs/expression/node/OperatorNode.js +2 -3
  25. package/lib/cjs/expression/node/ParenthesisNode.js +2 -3
  26. package/lib/cjs/expression/node/RangeNode.js +2 -3
  27. package/lib/cjs/expression/node/RelationalNode.js +2 -3
  28. package/lib/cjs/expression/node/SymbolNode.js +2 -3
  29. package/lib/cjs/expression/parse.js +7 -7
  30. package/lib/cjs/function/algebra/derivative.js +1 -1
  31. package/lib/cjs/function/algebra/rationalize.js +2 -2
  32. package/lib/cjs/function/algebra/simplifyConstant.js +1 -1
  33. package/lib/cjs/function/statistics/mad.js +1 -1
  34. package/lib/cjs/function/statistics/std.js +1 -1
  35. package/lib/cjs/function/statistics/utils/improveErrorMessage.js +2 -2
  36. package/lib/cjs/function/utils/isNaN.js +5 -3
  37. package/lib/cjs/header.js +2 -2
  38. package/lib/cjs/type/unit/Unit.js +3 -2
  39. package/lib/cjs/utils/array.js +0 -11
  40. package/lib/cjs/utils/bignumber/formatter.js +1 -1
  41. package/lib/cjs/utils/factory.js +1 -2
  42. package/lib/cjs/utils/map.js +2 -4
  43. package/lib/cjs/utils/object.js +1 -7
  44. package/lib/cjs/utils/snapshot.js +5 -5
  45. package/lib/cjs/version.js +1 -1
  46. package/lib/esm/core/create.js +3 -3
  47. package/lib/esm/core/function/config.js +1 -11
  48. package/lib/esm/core/function/import.js +3 -4
  49. package/lib/esm/expression/node/FunctionNode.js +3 -3
  50. package/lib/esm/expression/parse.js +7 -7
  51. package/lib/esm/function/algebra/derivative.js +1 -1
  52. package/lib/esm/function/algebra/rationalize.js +2 -2
  53. package/lib/esm/function/algebra/simplifyConstant.js +1 -1
  54. package/lib/esm/function/statistics/mad.js +1 -1
  55. package/lib/esm/function/statistics/std.js +1 -1
  56. package/lib/esm/function/statistics/utils/improveErrorMessage.js +2 -2
  57. package/lib/esm/function/utils/isNaN.js +1 -3
  58. package/lib/esm/type/unit/Unit.js +3 -2
  59. package/lib/esm/utils/array.js +0 -10
  60. package/lib/esm/utils/bignumber/formatter.js +1 -1
  61. package/lib/esm/utils/factory.js +1 -2
  62. package/lib/esm/utils/object.js +1 -4
  63. package/lib/esm/utils/snapshot.js +4 -4
  64. package/lib/esm/version.js +1 -1
  65. package/package.json +15 -15
  66. package/types/EXPLANATION.md +13 -1
  67. package/types/index.d.ts +18 -1
@@ -360,7 +360,7 @@ var createSimplifyConstant = exports.createSimplifyConstant = /* #__PURE__ */(0,
360
360
  {
361
361
  // Process operators as OperatorNode
362
362
  var operatorFunctions = ['add', 'multiply'];
363
- if (operatorFunctions.indexOf(node.name) === -1) {
363
+ if (!operatorFunctions.includes(node.name)) {
364
364
  var args = node.args.map(function (arg) {
365
365
  return foldFraction(arg, options);
366
366
  });
@@ -58,7 +58,7 @@ var createMad = exports.createMad = /* #__PURE__ */(0, _factory.factory)(name, d
58
58
  return abs(subtract(value, med));
59
59
  }));
60
60
  } catch (err) {
61
- if (err instanceof TypeError && err.message.indexOf('median') !== -1) {
61
+ if (err instanceof TypeError && err.message.includes('median')) {
62
62
  throw new TypeError(err.message.replace('median', 'mad'));
63
63
  } else {
64
64
  throw (0, _improveErrorMessage.improveErrorMessage)(err, 'mad');
@@ -91,7 +91,7 @@ var createStd = exports.createStd = /* #__PURE__ */(0, _factory.factory)(name, d
91
91
  return sqrt(v);
92
92
  }
93
93
  } catch (err) {
94
- if (err instanceof TypeError && err.message.indexOf(' variance') !== -1) {
94
+ if (err instanceof TypeError && err.message.includes(' variance')) {
95
95
  throw new TypeError(err.message.replace(' variance', ' std'));
96
96
  } else {
97
97
  throw err;
@@ -18,11 +18,11 @@ var _is = require("../../../utils/is.js");
18
18
  function improveErrorMessage(err, fnName, value) {
19
19
  // TODO: add information with the index (also needs transform in expression parser)
20
20
  var details;
21
- if (String(err).indexOf('Unexpected type') !== -1) {
21
+ if (String(err).includes('Unexpected type')) {
22
22
  details = arguments.length > 2 ? ' (type: ' + (0, _is.typeOf)(value) + ', value: ' + JSON.stringify(value) + ')' : ' (type: ' + err.data.actual + ')';
23
23
  return new TypeError('Cannot calculate ' + fnName + ', unexpected type of argument' + details);
24
24
  }
25
- if (String(err).indexOf('complex numbers') !== -1) {
25
+ if (String(err).includes('complex numbers')) {
26
26
  details = arguments.length > 2 ? ' (type: ' + (0, _is.typeOf)(value) + ', value: ' + JSON.stringify(value) + ')' : '';
27
27
  return new TypeError('Cannot calculate ' + fnName + ', no ordering relation is defined for complex numbers' + details);
28
28
  }
@@ -54,8 +54,10 @@ var createIsNaN = exports.createIsNaN = /* #__PURE__ */(0, _factory.factory)(nam
54
54
  Unit: function Unit(x) {
55
55
  return Number.isNaN(x.value);
56
56
  },
57
- 'Array | Matrix': function ArrayMatrix(x) {
58
- return (0, _collection.deepMap)(x, Number.isNaN);
59
- }
57
+ 'Array | Matrix': typed.referToSelf(function (self) {
58
+ return function (x) {
59
+ return (0, _collection.deepMap)(x, self);
60
+ };
61
+ })
60
62
  });
61
63
  });
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 12.4.1
10
- * @date 2024-03-13
9
+ * @version 12.4.3
10
+ * @date 2024-05-31
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2024 Jos de Jong <wjosdejong@gmail.com>
@@ -856,7 +856,7 @@ var createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fact
856
856
  return {
857
857
  mathjs: 'Unit',
858
858
  value: this._denormalize(this.value),
859
- unit: this.formatUnits(),
859
+ unit: this.units.length > 0 ? this.formatUnits() : null,
860
860
  fixPrefix: this.fixPrefix
861
861
  };
862
862
  };
@@ -869,7 +869,8 @@ var createUnitClass = exports.createUnitClass = /* #__PURE__ */(0, _factory.fact
869
869
  * @return {Unit}
870
870
  */
871
871
  Unit.fromJSON = function (json) {
872
- var unit = new Unit(json.value, json.unit);
872
+ var _json$unit;
873
+ var unit = new Unit(json.value, (_json$unit = json.unit) !== null && _json$unit !== void 0 ? _json$unit : undefined);
873
874
  unit.fixPrefix = json.fixPrefix || false;
874
875
  return unit;
875
876
  };
@@ -11,7 +11,6 @@ exports.broadcastTo = broadcastTo;
11
11
  exports.checkBroadcastingRules = checkBroadcastingRules;
12
12
  exports.clone = clone;
13
13
  exports.concat = concat;
14
- exports.contains = contains;
15
14
  exports.filter = filter;
16
15
  exports.filterRegExp = filterRegExp;
17
16
  exports.flatten = flatten;
@@ -657,16 +656,6 @@ function initial(array) {
657
656
  return array.slice(0, array.length - 1);
658
657
  }
659
658
 
660
- /**
661
- * Test whether an array or string contains an item
662
- * @param {Array | string} array
663
- * @param {*} item
664
- * @return {boolean}
665
- */
666
- function contains(array, item) {
667
- return array.indexOf(item) !== -1;
668
- }
669
-
670
659
  /**
671
660
  * Recursively concatenate two matrices.
672
661
  * The contents of the matrices is not cloned.
@@ -207,7 +207,7 @@ function toEngineering(value, precision) {
207
207
  // find difference in exponents, and calculate the value without exponent
208
208
  var valueWithoutExp = value.mul(Math.pow(10, -newExp));
209
209
  var valueStr = valueWithoutExp.toPrecision(precision);
210
- if (valueStr.indexOf('e') !== -1) {
210
+ if (valueStr.includes('e')) {
211
211
  var BigNumber = value.constructor;
212
212
  valueStr = new BigNumber(valueStr).toFixed();
213
213
  }
@@ -10,7 +10,6 @@ exports.isFactory = isFactory;
10
10
  exports.isOptionalDependency = isOptionalDependency;
11
11
  exports.sortFactories = sortFactories;
12
12
  exports.stripOptionalNotation = stripOptionalNotation;
13
- var _array = require("./array.js");
14
13
  var _object = require("./object.js");
15
14
  /**
16
15
  * Create a factory function, which can be used to inject dependencies.
@@ -68,7 +67,7 @@ function sortFactories(factories) {
68
67
  function containsDependency(factory, dependency) {
69
68
  // TODO: detect circular references
70
69
  if (isFactory(factory)) {
71
- if ((0, _array.contains)(factory.dependencies, dependency.fn || dependency.name)) {
70
+ if (factory.dependencies.includes(dependency.fn || dependency.name)) {
72
71
  return true;
73
72
  }
74
73
  if (factory.dependencies.some(function (d) {
@@ -32,7 +32,7 @@ var ObjectWrappingMap = exports.ObjectWrappingMap = /*#__PURE__*/function () {
32
32
  this.wrappedObject = object;
33
33
  this[Symbol.iterator] = this.entries;
34
34
  }
35
- (0, _createClass2["default"])(ObjectWrappingMap, [{
35
+ return (0, _createClass2["default"])(ObjectWrappingMap, [{
36
36
  key: "keys",
37
37
  value: function keys() {
38
38
  return Object.keys(this.wrappedObject).values();
@@ -104,7 +104,6 @@ var ObjectWrappingMap = exports.ObjectWrappingMap = /*#__PURE__*/function () {
104
104
  return Object.keys(this.wrappedObject).length;
105
105
  }
106
106
  }]);
107
- return ObjectWrappingMap;
108
107
  }();
109
108
  /**
110
109
  * Create a map with two partitions: a and b.
@@ -133,7 +132,7 @@ var PartitionedMap = exports.PartitionedMap = /*#__PURE__*/function () {
133
132
  this.bKeys = bKeys;
134
133
  this[Symbol.iterator] = this.entries;
135
134
  }
136
- (0, _createClass2["default"])(PartitionedMap, [{
135
+ return (0, _createClass2["default"])(PartitionedMap, [{
137
136
  key: "get",
138
137
  value: function get(key) {
139
138
  return this.bKeys.has(key) ? this.b.get(key) : this.a.get(key);
@@ -199,7 +198,6 @@ var PartitionedMap = exports.PartitionedMap = /*#__PURE__*/function () {
199
198
  return (0, _toConsumableArray2["default"])(this.keys()).length;
200
199
  }
201
200
  }]);
202
- return PartitionedMap;
203
201
  }();
204
202
  /**
205
203
  * Create a new iterator that maps over the provided iterator, applying a mapping function to each item
@@ -19,7 +19,6 @@ exports.pick = pick;
19
19
  exports.pickShallow = pickShallow;
20
20
  exports.set = set;
21
21
  exports.traverse = traverse;
22
- exports.values = values;
23
22
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
24
23
  var _is = require("./is.js");
25
24
  /**
@@ -387,13 +386,8 @@ function pickShallow(object, properties) {
387
386
  }
388
387
  return copy;
389
388
  }
390
- function values(object) {
391
- return Object.keys(object).map(function (key) {
392
- return object[key];
393
- });
394
- }
395
389
 
396
390
  // helper function to test whether a string contains a path like 'user.name'
397
391
  function isPath(str) {
398
- return str.indexOf('.') !== -1;
392
+ return str.includes('.');
399
393
  }
@@ -15,7 +15,7 @@ var allIsFunctions = _interopRequireWildcard(require("./is.js"));
15
15
  var _create = require("../core/create.js");
16
16
  var _string = require("./string.js");
17
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
18
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /**
21
21
  * This file contains helper methods to create expected snapshot structures
@@ -31,7 +31,7 @@ function validateBundle(expectedBundleStructure, bundle) {
31
31
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
32
32
  args[_key] = arguments[_key];
33
33
  }
34
- if (args.join(' ').indexOf('is moved to') !== -1 && args.join(' ').indexOf('Please use the new location instead') !== -1) {
34
+ if (args.join(' ').includes('is moved to') && args.join(' ').includes('Please use the new location instead')) {
35
35
  // Ignore warnings like:
36
36
  // Warning: math.type.isNumber is moved to math.isNumber in v6.0.0. Please use the new location instead.
37
37
  return;
@@ -62,11 +62,11 @@ function validateBundle(expectedBundleStructure, bundle) {
62
62
  var expectedType = get(expectedBundleStructure, path) || 'undefined';
63
63
 
64
64
  // FIXME: ugly to have these special cases
65
- if (path.join('.').indexOf('docs.') !== -1) {
65
+ if (path.join('.').includes('docs.')) {
66
66
  // ignore the contents of docs
67
67
  return;
68
68
  }
69
- if (path.join('.').indexOf('all.') !== -1) {
69
+ if (path.join('.').includes('all.')) {
70
70
  // ignore the contents of all dependencies
71
71
  return;
72
72
  }
@@ -191,7 +191,7 @@ function traverse(obj) {
191
191
  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (value, path) {};
192
192
  var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
193
193
  // FIXME: ugly to have these special cases
194
- if (path.length > 0 && path[0].indexOf('Dependencies') !== -1) {
194
+ if (path.length > 0 && path[0].includes('Dependencies')) {
195
195
  // special case for objects holding a collection of dependencies
196
196
  callback(obj, path);
197
197
  } else if (validateTypeOf(obj) === 'Array') {
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = exports.version = '12.4.1';
7
+ var version = exports.version = '12.4.3';
8
8
  // Note: This file is automatically generated when building math.js.
9
9
  // Changes made in this file will be overwritten.
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import typedFunction from 'typed-function';
3
- import { deepFlatten, isLegacyFactory, values } from '../utils/object.js';
3
+ import { deepFlatten, isLegacyFactory } from '../utils/object.js';
4
4
  import * as emitter from './../utils/emitter.js';
5
5
  import { importFactory } from './function/import.js';
6
6
  import { configFactory } from './function/config.js';
@@ -170,7 +170,7 @@ export function create(factories, config) {
170
170
  // listen for changes in config, import all functions again when changed
171
171
  // TODO: move this listener into the import function?
172
172
  math.on('config', () => {
173
- values(importedFactories).forEach(factory => {
173
+ Object.values(importedFactories).forEach(factory => {
174
174
  if (factory && factory.meta && factory.meta.recreateOnConfigChange) {
175
175
  // FIXME: only re-create when the current instance is the same as was initially created
176
176
  // FIXME: delete the functions/constants before importing them again?
@@ -190,7 +190,7 @@ export function create(factories, config) {
190
190
 
191
191
  // import the factory functions like createAdd as an array instead of object,
192
192
  // else they will get a different naming (`createAdd` instead of `add`).
193
- math.import(values(deepFlatten(factories)));
193
+ math.import(Object.values(deepFlatten(factories)));
194
194
  math.ArgumentsError = ArgumentsError;
195
195
  math.DimensionError = DimensionError;
196
196
  math.IndexError = IndexError;
@@ -82,16 +82,6 @@ export function configFactory(config, emit) {
82
82
  return _config;
83
83
  }
84
84
 
85
- /**
86
- * Test whether an Array contains a specific item.
87
- * @param {Array.<string>} array
88
- * @param {string} item
89
- * @return {boolean}
90
- */
91
- function contains(array, item) {
92
- return array.indexOf(item) !== -1;
93
- }
94
-
95
85
  /**
96
86
  * Validate an option
97
87
  * @param {Object} options Object with options
@@ -99,7 +89,7 @@ function contains(array, item) {
99
89
  * @param {Array.<string>} values Array with valid values for this option
100
90
  */
101
91
  function validateOption(options, name, values) {
102
- if (options[name] !== undefined && !contains(values, options[name])) {
92
+ if (options[name] !== undefined && !values.includes(options[name])) {
103
93
  // unknown value
104
94
  console.warn('Warning: Unknown value "' + options[name] + '" for configuration option "' + name + '". ' + 'Available options: ' + values.map(value => JSON.stringify(value)).join(', ') + '.');
105
95
  }
@@ -1,7 +1,6 @@
1
1
  import { isBigNumber, isComplex, isFraction, isMatrix, isUnit } from '../../utils/is.js';
2
2
  import { isFactory, stripOptionalNotation } from '../../utils/factory.js';
3
3
  import { hasOwnProperty, lazy } from '../../utils/object.js';
4
- import { contains } from '../../utils/array.js';
5
4
  import { ArgumentsError } from '../../error/ArgumentsError.js';
6
5
  export function importFactory(typed, load, math, importedFactories) {
7
6
  /**
@@ -216,7 +215,7 @@ export function importFactory(typed, load, math, importedFactories) {
216
215
  */
217
216
  function _importFactory(factory, options) {
218
217
  var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : factory.fn;
219
- if (contains(name, '.')) {
218
+ if (name.includes('.')) {
220
219
  throw new Error('Factory name should not contain a nested path. ' + 'Name: ' + JSON.stringify(name));
221
220
  }
222
221
  var namespace = isTransformFunctionFactory(factory) ? math.expression.transform : math;
@@ -226,7 +225,7 @@ export function importFactory(typed, load, math, importedFactories) {
226
225
  // collect all dependencies, handle finding both functions and classes and other special cases
227
226
  var dependencies = {};
228
227
  factory.dependencies.map(stripOptionalNotation).forEach(dependency => {
229
- if (contains(dependency, '.')) {
228
+ if (dependency.includes('.')) {
230
229
  throw new Error('Factory dependency should not contain a nested path. ' + 'Name: ' + JSON.stringify(dependency));
231
230
  }
232
231
  if (dependency === 'math') {
@@ -305,7 +304,7 @@ export function importFactory(typed, load, math, importedFactories) {
305
304
  return !hasOwnProperty(unsafe, name);
306
305
  }
307
306
  function factoryAllowedInExpressions(factory) {
308
- return factory.fn.indexOf('.') === -1 &&
307
+ return !factory.fn.includes('.') &&
309
308
  // FIXME: make checking on path redundant, check on meta data instead
310
309
  !hasOwnProperty(unsafe, factory.fn) && (!factory.meta || !factory.meta.isClass);
311
310
  }
@@ -9,7 +9,7 @@ import { defaultTemplate, latexFunctions } from '../../utils/latex.js';
9
9
  var name = 'FunctionNode';
10
10
  var dependencies = ['math', 'Node', 'SymbolNode'];
11
11
  export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref => {
12
- var _class;
12
+ var _FunctionNode;
13
13
  var {
14
14
  math,
15
15
  Node,
@@ -456,13 +456,13 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
456
456
  return this.type + ':' + this.name;
457
457
  }
458
458
  }
459
- _class = FunctionNode;
459
+ _FunctionNode = FunctionNode;
460
460
  _defineProperty(FunctionNode, "name", name);
461
461
  _defineProperty(FunctionNode, "onUndefinedFunction", function (name) {
462
462
  throw new Error('Undefined function ' + name);
463
463
  });
464
464
  _defineProperty(FunctionNode, "fromJSON", function (json) {
465
- return new _class(json.fn, json.args);
465
+ return new _FunctionNode(json.fn, json.args);
466
466
  });
467
467
  return FunctionNode;
468
468
  }, {
@@ -952,7 +952,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
952
952
  }
953
953
 
954
954
  /**
955
- * multiply, divide, modulus
955
+ * multiply, divide
956
956
  * @return {Node} node
957
957
  * @private
958
958
  */
@@ -1016,7 +1016,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1016
1016
  * @private
1017
1017
  */
1018
1018
  function parseRule2(state) {
1019
- var node = parsePercentage(state);
1019
+ var node = parseModulusPercentage(state);
1020
1020
  var last = node;
1021
1021
  var tokenStates = [];
1022
1022
  while (true) {
@@ -1038,7 +1038,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1038
1038
  // Rewind once and build the "number / number" node; the symbol will be consumed later
1039
1039
  _extends(state, tokenStates.pop());
1040
1040
  tokenStates.pop();
1041
- last = parsePercentage(state);
1041
+ last = parseModulusPercentage(state);
1042
1042
  node = new OperatorNode('/', 'divide', [node, last]);
1043
1043
  } else {
1044
1044
  // Not a match, so rewind
@@ -1059,11 +1059,11 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1059
1059
  }
1060
1060
 
1061
1061
  /**
1062
- * percentage or mod
1062
+ * modulus and percentage
1063
1063
  * @return {Node} node
1064
1064
  * @private
1065
1065
  */
1066
- function parsePercentage(state) {
1066
+ function parseModulusPercentage(state) {
1067
1067
  var node, name, fn, params;
1068
1068
  node = parseUnary(state);
1069
1069
  var operators = {
@@ -1226,7 +1226,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1226
1226
  if (hasOwnProperty(CONSTANTS, name)) {
1227
1227
  // true, false, null, ...
1228
1228
  node = new ConstantNode(CONSTANTS[name]);
1229
- } else if (NUMERIC_CONSTANTS.indexOf(name) !== -1) {
1229
+ } else if (NUMERIC_CONSTANTS.includes(name)) {
1230
1230
  // NaN, Infinity
1231
1231
  node = new ConstantNode(numeric(name, 'number'));
1232
1232
  } else {
@@ -1256,7 +1256,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1256
1256
  */
1257
1257
  function parseAccessors(state, node, types) {
1258
1258
  var params;
1259
- while ((state.token === '(' || state.token === '[' || state.token === '.') && (!types || types.indexOf(state.token) !== -1)) {
1259
+ while ((state.token === '(' || state.token === '[' || state.token === '.') && (!types || types.includes(state.token))) {
1260
1260
  // eslint-disable-line no-unmodified-loop-condition
1261
1261
  params = [];
1262
1262
  if (state.token === '(') {
@@ -159,7 +159,7 @@ export var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref =>
159
159
  return constTag(constNodes, node.content, varName);
160
160
  },
161
161
  'Object, FunctionAssignmentNode, string': function ObjectFunctionAssignmentNodeString(constNodes, node, varName) {
162
- if (node.params.indexOf(varName) === -1) {
162
+ if (!node.params.includes(varName)) {
163
163
  constNodes[node] = true;
164
164
  return true;
165
165
  }
@@ -229,7 +229,7 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
229
229
  recPoly(node.args[0]);
230
230
  }
231
231
  } else {
232
- if (oper.indexOf(node.op) === -1) {
232
+ if (!oper.includes(node.op)) {
233
233
  throw new Error('Operator ' + node.op + ' invalid in polynomial expression');
234
234
  }
235
235
  for (var i = 0; i < node.args.length; i++) {
@@ -727,7 +727,7 @@ export var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref =
727
727
  throw new Error('There is an unsolved function call');
728
728
  } else if (tp === 'OperatorNode') {
729
729
  // ***** OperatorName *****
730
- if ('+-*^'.indexOf(node.op) === -1) throw new Error('Operator ' + node.op + ' invalid');
730
+ if (!'+-*^'.includes(node.op)) throw new Error('Operator ' + node.op + ' invalid');
731
731
  if (noPai !== null) {
732
732
  // -(unary),^ : children of *,+,-
733
733
  if ((node.fn === 'unaryMinus' || node.fn === 'pow') && noPai.fn !== 'add' && noPai.fn !== 'subtract' && noPai.fn !== 'multiply') {
@@ -339,7 +339,7 @@ export var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _
339
339
  {
340
340
  // Process operators as OperatorNode
341
341
  var operatorFunctions = ['add', 'multiply'];
342
- if (operatorFunctions.indexOf(node.name) === -1) {
342
+ if (!operatorFunctions.includes(node.name)) {
343
343
  var args = node.args.map(arg => foldFraction(arg, options));
344
344
 
345
345
  // If all args are numbers
@@ -54,7 +54,7 @@ export var createMad = /* #__PURE__ */factory(name, dependencies, _ref => {
54
54
  return abs(subtract(value, med));
55
55
  }));
56
56
  } catch (err) {
57
- if (err instanceof TypeError && err.message.indexOf('median') !== -1) {
57
+ if (err instanceof TypeError && err.message.includes('median')) {
58
58
  throw new TypeError(err.message.replace('median', 'mad'));
59
59
  } else {
60
60
  throw improveErrorMessage(err, 'mad');
@@ -87,7 +87,7 @@ export var createStd = /* #__PURE__ */factory(name, dependencies, _ref => {
87
87
  return sqrt(v);
88
88
  }
89
89
  } catch (err) {
90
- if (err instanceof TypeError && err.message.indexOf(' variance') !== -1) {
90
+ if (err instanceof TypeError && err.message.includes(' variance')) {
91
91
  throw new TypeError(err.message.replace(' variance', ' std'));
92
92
  } else {
93
93
  throw err;
@@ -13,11 +13,11 @@ import { typeOf } from '../../../utils/is.js';
13
13
  export function improveErrorMessage(err, fnName, value) {
14
14
  // TODO: add information with the index (also needs transform in expression parser)
15
15
  var details;
16
- if (String(err).indexOf('Unexpected type') !== -1) {
16
+ if (String(err).includes('Unexpected type')) {
17
17
  details = arguments.length > 2 ? ' (type: ' + typeOf(value) + ', value: ' + JSON.stringify(value) + ')' : ' (type: ' + err.data.actual + ')';
18
18
  return new TypeError('Cannot calculate ' + fnName + ', unexpected type of argument' + details);
19
19
  }
20
- if (String(err).indexOf('complex numbers') !== -1) {
20
+ if (String(err).includes('complex numbers')) {
21
21
  details = arguments.length > 2 ? ' (type: ' + typeOf(value) + ', value: ' + JSON.stringify(value) + ')' : '';
22
22
  return new TypeError('Cannot calculate ' + fnName + ', no ordering relation is defined for complex numbers' + details);
23
23
  }
@@ -50,8 +50,6 @@ export var createIsNaN = /* #__PURE__ */factory(name, dependencies, _ref => {
50
50
  Unit: function Unit(x) {
51
51
  return Number.isNaN(x.value);
52
52
  },
53
- 'Array | Matrix': function ArrayMatrix(x) {
54
- return deepMap(x, Number.isNaN);
55
- }
53
+ 'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
56
54
  });
57
55
  });
@@ -844,7 +844,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
844
844
  return {
845
845
  mathjs: 'Unit',
846
846
  value: this._denormalize(this.value),
847
- unit: this.formatUnits(),
847
+ unit: this.units.length > 0 ? this.formatUnits() : null,
848
848
  fixPrefix: this.fixPrefix
849
849
  };
850
850
  };
@@ -857,7 +857,8 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
857
857
  * @return {Unit}
858
858
  */
859
859
  Unit.fromJSON = function (json) {
860
- var unit = new Unit(json.value, json.unit);
860
+ var _json$unit;
861
+ var unit = new Unit(json.value, (_json$unit = json.unit) !== null && _json$unit !== void 0 ? _json$unit : undefined);
861
862
  unit.fixPrefix = json.fixPrefix || false;
862
863
  return unit;
863
864
  };
@@ -618,16 +618,6 @@ export function initial(array) {
618
618
  return array.slice(0, array.length - 1);
619
619
  }
620
620
 
621
- /**
622
- * Test whether an array or string contains an item
623
- * @param {Array | string} array
624
- * @param {*} item
625
- * @return {boolean}
626
- */
627
- export function contains(array, item) {
628
- return array.indexOf(item) !== -1;
629
- }
630
-
631
621
  /**
632
622
  * Recursively concatenate two matrices.
633
623
  * The contents of the matrices is not cloned.
@@ -200,7 +200,7 @@ export function toEngineering(value, precision) {
200
200
  // find difference in exponents, and calculate the value without exponent
201
201
  var valueWithoutExp = value.mul(Math.pow(10, -newExp));
202
202
  var valueStr = valueWithoutExp.toPrecision(precision);
203
- if (valueStr.indexOf('e') !== -1) {
203
+ if (valueStr.includes('e')) {
204
204
  var BigNumber = value.constructor;
205
205
  valueStr = new BigNumber(valueStr).toFixed();
206
206
  }
@@ -1,4 +1,3 @@
1
- import { contains } from './array.js';
2
1
  import { pickShallow } from './object.js';
3
2
 
4
3
  /**
@@ -57,7 +56,7 @@ export function sortFactories(factories) {
57
56
  function containsDependency(factory, dependency) {
58
57
  // TODO: detect circular references
59
58
  if (isFactory(factory)) {
60
- if (contains(factory.dependencies, dependency.fn || dependency.name)) {
59
+ if (factory.dependencies.includes(dependency.fn || dependency.name)) {
61
60
  return true;
62
61
  }
63
62
  if (factory.dependencies.some(d => containsDependency(factoriesByName[d], dependency))) {
@@ -365,11 +365,8 @@ export function pickShallow(object, properties) {
365
365
  }
366
366
  return copy;
367
367
  }
368
- export function values(object) {
369
- return Object.keys(object).map(key => object[key]);
370
- }
371
368
 
372
369
  // helper function to test whether a string contains a path like 'user.name'
373
370
  function isPath(str) {
374
- return str.indexOf('.') !== -1;
371
+ return str.includes('.');
375
372
  }
@@ -20,7 +20,7 @@ export function validateBundle(expectedBundleStructure, bundle) {
20
20
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
21
21
  args[_key] = arguments[_key];
22
22
  }
23
- if (args.join(' ').indexOf('is moved to') !== -1 && args.join(' ').indexOf('Please use the new location instead') !== -1) {
23
+ if (args.join(' ').includes('is moved to') && args.join(' ').includes('Please use the new location instead')) {
24
24
  // Ignore warnings like:
25
25
  // Warning: math.type.isNumber is moved to math.isNumber in v6.0.0. Please use the new location instead.
26
26
  return;
@@ -51,11 +51,11 @@ export function validateBundle(expectedBundleStructure, bundle) {
51
51
  var expectedType = get(expectedBundleStructure, path) || 'undefined';
52
52
 
53
53
  // FIXME: ugly to have these special cases
54
- if (path.join('.').indexOf('docs.') !== -1) {
54
+ if (path.join('.').includes('docs.')) {
55
55
  // ignore the contents of docs
56
56
  return;
57
57
  }
58
- if (path.join('.').indexOf('all.') !== -1) {
58
+ if (path.join('.').includes('all.')) {
59
59
  // ignore the contents of all dependencies
60
60
  return;
61
61
  }
@@ -181,7 +181,7 @@ function traverse(obj) {
181
181
  var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (value, path) => {};
182
182
  var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
183
183
  // FIXME: ugly to have these special cases
184
- if (path.length > 0 && path[0].indexOf('Dependencies') !== -1) {
184
+ if (path.length > 0 && path[0].includes('Dependencies')) {
185
185
  // special case for objects holding a collection of dependencies
186
186
  callback(obj, path);
187
187
  } else if (validateTypeOf(obj) === 'Array') {
@@ -1,3 +1,3 @@
1
- export var version = '12.4.1';
1
+ export var version = '12.4.3';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.