mathjs 7.3.0 → 7.6.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 (104) hide show
  1. package/HISTORY.md +29 -0
  2. package/dist/math.js +2716 -2222
  3. package/dist/math.min.js +5 -5
  4. package/dist/math.min.map +1 -1
  5. package/docs/datatypes/units.md +21 -0
  6. package/docs/reference/functions/ceil.md +10 -1
  7. package/docs/reference/functions/fix.md +10 -2
  8. package/docs/reference/functions/floor.md +12 -3
  9. package/docs/reference/functions/rotate.md +47 -0
  10. package/docs/reference/functions/rotationMatrix.md +51 -0
  11. package/docs/reference/functions/round.md +6 -2
  12. package/docs/reference/functions.md +2 -0
  13. package/es/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  14. package/es/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  15. package/es/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  16. package/es/entry/dependenciesAny/dependenciesRotate.generated.js +14 -0
  17. package/es/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +30 -0
  18. package/es/entry/dependenciesAny.generated.js +2 -0
  19. package/es/entry/impureFunctionsAny.generated.js +55 -53
  20. package/es/entry/pureFunctionsAny.generated.js +230 -206
  21. package/es/expression/embeddedDocs/embeddedDocs.js +4 -0
  22. package/es/expression/embeddedDocs/function/matrix/rotate.js +8 -0
  23. package/es/expression/embeddedDocs/function/matrix/rotationMatrix.js +8 -0
  24. package/es/expression/node/FunctionNode.js +1 -1
  25. package/es/expression/node/Node.js +2 -2
  26. package/es/factoriesAny.js +2 -0
  27. package/es/function/arithmetic/ceil.js +88 -4
  28. package/es/function/arithmetic/fix.js +43 -6
  29. package/es/function/arithmetic/floor.js +90 -6
  30. package/es/function/arithmetic/round.js +6 -2
  31. package/es/function/matrix/rotate.js +78 -0
  32. package/es/function/matrix/rotationMatrix.js +176 -0
  33. package/es/function/matrix/sqrtm.js +4 -0
  34. package/es/function/probability/pickRandom.js +2 -6
  35. package/es/function/special/erf.js +1 -0
  36. package/es/plain/number/constants.js +1 -1
  37. package/es/plain/number/probability.js +1 -0
  38. package/es/type/unit/Unit.js +17 -18
  39. package/es/utils/object.js +3 -1
  40. package/es/version.js +1 -1
  41. package/examples/bignumbers.js +2 -0
  42. package/lib/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
  43. package/lib/entry/dependenciesAny/dependenciesFix.generated.js +3 -0
  44. package/lib/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
  45. package/lib/entry/dependenciesAny/dependenciesRotate.generated.js +26 -0
  46. package/lib/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +50 -0
  47. package/lib/entry/dependenciesAny.generated.js +16 -0
  48. package/lib/entry/impureFunctionsAny.generated.js +58 -56
  49. package/lib/entry/mainAny.js +5 -0
  50. package/lib/entry/mainNumber.js +5 -0
  51. package/lib/entry/pureFunctionsAny.generated.js +270 -244
  52. package/lib/expression/embeddedDocs/embeddedDocs.js +6 -0
  53. package/lib/expression/embeddedDocs/function/matrix/rotate.js +15 -0
  54. package/lib/expression/embeddedDocs/function/matrix/rotationMatrix.js +15 -0
  55. package/lib/expression/node/FunctionNode.js +1 -1
  56. package/lib/expression/node/Node.js +2 -2
  57. package/lib/factoriesAny.js +16 -0
  58. package/lib/function/arithmetic/ceil.js +91 -4
  59. package/lib/function/arithmetic/fix.js +44 -6
  60. package/lib/function/arithmetic/floor.js +93 -6
  61. package/lib/function/arithmetic/round.js +6 -2
  62. package/lib/function/matrix/rotate.js +88 -0
  63. package/lib/function/matrix/rotationMatrix.js +186 -0
  64. package/lib/function/matrix/sqrtm.js +4 -0
  65. package/lib/function/probability/pickRandom.js +3 -7
  66. package/lib/function/special/erf.js +1 -0
  67. package/lib/header.js +2 -2
  68. package/lib/plain/bignumber/index.js +1 -0
  69. package/lib/plain/number/constants.js +2 -1
  70. package/lib/plain/number/index.js +9 -0
  71. package/lib/plain/number/probability.js +1 -0
  72. package/lib/type/unit/Unit.js +17 -18
  73. package/lib/utils/object.js +3 -1
  74. package/lib/version.js +1 -1
  75. package/package.json +11 -11
  76. package/src/core/function/import.js +2 -2
  77. package/src/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  78. package/src/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  79. package/src/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  80. package/src/entry/dependenciesAny/dependenciesRotate.generated.js +15 -0
  81. package/src/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +31 -0
  82. package/src/entry/dependenciesAny.generated.js +2 -0
  83. package/src/entry/impureFunctionsAny.generated.js +84 -80
  84. package/src/entry/pureFunctionsAny.generated.js +75 -71
  85. package/src/expression/embeddedDocs/embeddedDocs.js +4 -0
  86. package/src/expression/embeddedDocs/function/matrix/rotate.js +19 -0
  87. package/src/expression/embeddedDocs/function/matrix/rotationMatrix.js +19 -0
  88. package/src/expression/node/FunctionNode.js +1 -1
  89. package/src/expression/node/Node.js +2 -1
  90. package/src/factoriesAny.js +2 -0
  91. package/src/function/arithmetic/ceil.js +63 -3
  92. package/src/function/arithmetic/fix.js +45 -6
  93. package/src/function/arithmetic/floor.js +65 -5
  94. package/src/function/arithmetic/round.js +6 -2
  95. package/src/function/matrix/rotate.js +79 -0
  96. package/src/function/matrix/rotationMatrix.js +186 -0
  97. package/src/function/matrix/sqrtm.js +4 -0
  98. package/src/function/probability/pickRandom.js +2 -6
  99. package/src/function/special/erf.js +2 -0
  100. package/src/plain/number/constants.js +1 -1
  101. package/src/plain/number/probability.js +2 -0
  102. package/src/type/unit/Unit.js +18 -21
  103. package/src/utils/object.js +3 -1
  104. package/src/version.js +1 -1
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createRotationMatrix = void 0;
7
+
8
+ var _is = require("../../utils/is");
9
+
10
+ var _factory = require("../../utils/factory");
11
+
12
+ var name = 'rotationMatrix';
13
+ var dependencies = ['typed', 'config', 'multiplyScalar', 'addScalar', 'unaryMinus', 'norm', 'matrix', 'BigNumber', 'DenseMatrix', 'SparseMatrix', 'cos', 'sin'];
14
+ var createRotationMatrix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
15
+ var typed = _ref.typed,
16
+ config = _ref.config,
17
+ multiplyScalar = _ref.multiplyScalar,
18
+ addScalar = _ref.addScalar,
19
+ unaryMinus = _ref.unaryMinus,
20
+ norm = _ref.norm,
21
+ BigNumber = _ref.BigNumber,
22
+ matrix = _ref.matrix,
23
+ DenseMatrix = _ref.DenseMatrix,
24
+ SparseMatrix = _ref.SparseMatrix,
25
+ cos = _ref.cos,
26
+ sin = _ref.sin;
27
+
28
+ /**
29
+ * Create a 2-dimensional counter-clockwise rotation matrix (2x2) for a given angle (expressed in radians).
30
+ * Create a 2-dimensional counter-clockwise rotation matrix (3x3) by a given angle (expressed in radians) around a given axis (1x3).
31
+ *
32
+ * Syntax:
33
+ *
34
+ * math.rotationMatrix(theta)
35
+ * math.rotationMatrix(theta, format)
36
+ * math.rotationMatrix(theta, [v])
37
+ * math.rotationMatrix(theta, [v], format)
38
+ *
39
+ * Examples:
40
+ *
41
+ * math.rotationMatrix(math.pi / 2) // returns [[0, -1], [1, 0]]
42
+ * math.rotationMatrix(math.bignumber(1)) // returns [[bignumber(cos(1)), bignumber(-sin(1))], [bignumber(sin(1)), bignumber(cos(1))]]
43
+ * math.rotationMatrix(math.complex(1 + i)) // returns [[cos(1 + i), -sin(1 + i)], [sin(1 + i), cos(1 + i)]]
44
+ * math.rotationMatrix(math.unit('1rad')) // returns [[cos(1), -sin(1)], [sin(1), cos(1)]]
45
+ *
46
+ * math.rotationMatrix(math.pi / 2, [0, 1, 0]) // returns [[0, 0, 1], [0, 1, 0], [-1, 0, 0]]
47
+ * math.rotationMatrix(math.pi / 2, matrix([0, 1, 0])) // returns matrix([[0, 0, 1], [0, 1, 0], [-1, 0, 0]])
48
+ *
49
+ *
50
+ * See also:
51
+ *
52
+ * matrix, cos, sin
53
+ *
54
+ *
55
+ * @param {number | BigNumber | Complex | Unit} theta Rotation angle
56
+ * @param {Array | Matrix} [v] Rotation axis
57
+ * @param {string} [format] Result Matrix storage format
58
+ * @return {Array | Matrix} Rotation matrix
59
+ */
60
+ return typed(name, {
61
+ '': function _() {
62
+ return config.matrix === 'Matrix' ? matrix([]) : [];
63
+ },
64
+ string: function string(format) {
65
+ return matrix(format);
66
+ },
67
+ 'number | BigNumber | Complex | Unit': function numberBigNumberComplexUnit(theta) {
68
+ return _rotationMatrix2x2(theta, config.matrix === 'Matrix' ? 'dense' : undefined);
69
+ },
70
+ 'number | BigNumber | Complex | Unit, string': function numberBigNumberComplexUnitString(theta, format) {
71
+ return _rotationMatrix2x2(theta, format);
72
+ },
73
+ 'number | BigNumber | Complex | Unit, Array': function numberBigNumberComplexUnitArray(theta, v) {
74
+ var matrixV = matrix(v);
75
+
76
+ _validateVector(matrixV);
77
+
78
+ return _rotationMatrix3x3(theta, matrixV, undefined);
79
+ },
80
+ 'number | BigNumber | Complex | Unit, Matrix': function numberBigNumberComplexUnitMatrix(theta, v) {
81
+ _validateVector(v);
82
+
83
+ var storageType = v.storage() || (config.matrix === 'Matrix' ? 'dense' : undefined);
84
+ return _rotationMatrix3x3(theta, v, storageType);
85
+ },
86
+ 'number | BigNumber | Complex | Unit, Array, string': function numberBigNumberComplexUnitArrayString(theta, v, format) {
87
+ var matrixV = matrix(v);
88
+
89
+ _validateVector(matrixV);
90
+
91
+ return _rotationMatrix3x3(theta, matrixV, format);
92
+ },
93
+ 'number | BigNumber | Complex | Unit, Matrix, string': function numberBigNumberComplexUnitMatrixString(theta, v, format) {
94
+ _validateVector(v);
95
+
96
+ return _rotationMatrix3x3(theta, v, format);
97
+ }
98
+ });
99
+ /**
100
+ * Returns 2x2 matrix of 2D rotation of angle theta
101
+ *
102
+ * @param {number | BigNumber | Complex | Unit} theta The rotation angle
103
+ * @param {string} format The result Matrix storage format
104
+ * @returns {Matrix}
105
+ * @private
106
+ */
107
+
108
+ function _rotationMatrix2x2(theta, format) {
109
+ var Big = (0, _is.isBigNumber)(theta);
110
+ var minusOne = Big ? new BigNumber(-1) : -1;
111
+ var cosTheta = cos(theta);
112
+ var sinTheta = sin(theta);
113
+ var data = [[cosTheta, multiplyScalar(minusOne, sinTheta)], [sinTheta, cosTheta]];
114
+ return _convertToFormat(data, format);
115
+ }
116
+
117
+ function _validateVector(v) {
118
+ var size = v.size();
119
+
120
+ if (size.length < 1 || size[0] !== 3) {
121
+ throw new RangeError('Vector must be of dimensions 1x3');
122
+ }
123
+ }
124
+
125
+ function _mul(array) {
126
+ return array.reduce(function (p, curr) {
127
+ return multiplyScalar(p, curr);
128
+ });
129
+ }
130
+
131
+ function _convertToFormat(data, format) {
132
+ if (format) {
133
+ if (format === 'sparse') {
134
+ return new SparseMatrix(data);
135
+ }
136
+
137
+ if (format === 'dense') {
138
+ return new DenseMatrix(data);
139
+ }
140
+
141
+ throw new TypeError("Unknown matrix type \"".concat(format, "\""));
142
+ }
143
+
144
+ return data;
145
+ }
146
+ /**
147
+ * Returns a 3x3 matrix of rotation of angle theta around vector v
148
+ *
149
+ * @param {number | BigNumber | Complex | Unit} theta The rotation angle
150
+ * @param {Matrix} v The rotation axis vector
151
+ * @param {string} format The storage format of the resulting matrix
152
+ * @returns {Matrix}
153
+ * @private
154
+ */
155
+
156
+
157
+ function _rotationMatrix3x3(theta, v, format) {
158
+ var normV = norm(v);
159
+
160
+ if (normV === 0) {
161
+ throw new RangeError('Rotation around zero vector');
162
+ }
163
+
164
+ var Big = (0, _is.isBigNumber)(theta) ? BigNumber : null;
165
+ var one = Big ? new Big(1) : 1;
166
+ var minusOne = Big ? new Big(-1) : -1;
167
+ var vx = Big ? new Big(v.get([0]) / normV) : v.get([0]) / normV;
168
+ var vy = Big ? new Big(v.get([1]) / normV) : v.get([1]) / normV;
169
+ var vz = Big ? new Big(v.get([2]) / normV) : v.get([2]) / normV;
170
+ var c = cos(theta);
171
+ var oneMinusC = addScalar(one, unaryMinus(c));
172
+ var s = sin(theta);
173
+ var r11 = addScalar(c, _mul([vx, vx, oneMinusC]));
174
+ var r12 = addScalar(_mul([vx, vy, oneMinusC]), _mul([minusOne, vz, s]));
175
+ var r13 = addScalar(_mul([vx, vz, oneMinusC]), _mul([vy, s]));
176
+ var r21 = addScalar(_mul([vx, vy, oneMinusC]), _mul([vz, s]));
177
+ var r22 = addScalar(c, _mul([vy, vy, oneMinusC]));
178
+ var r23 = addScalar(_mul([vy, vz, oneMinusC]), _mul([minusOne, vx, s]));
179
+ var r31 = addScalar(_mul([vx, vz, oneMinusC]), _mul([minusOne, vy, s]));
180
+ var r32 = addScalar(_mul([vy, vz, oneMinusC]), _mul([vx, s]));
181
+ var r33 = addScalar(c, _mul([vz, vz, oneMinusC]));
182
+ var data = [[r11, r12, r13], [r21, r22, r23], [r31, r32, r33]];
183
+ return _convertToFormat(data, format);
184
+ }
185
+ });
186
+ exports.createRotationMatrix = createRotationMatrix;
@@ -105,6 +105,10 @@ var createSqrtm = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
105
105
  throw new RangeError('Matrix must be square ' + '(size: ' + (0, _string.format)(size) + ')');
106
106
  }
107
107
  }
108
+
109
+ default:
110
+ // Multi dimensional array
111
+ throw new RangeError('Matrix must be at most two dimensional ' + '(size: ' + (0, _string.format)(size) + ')');
108
112
  }
109
113
  }
110
114
  });
@@ -9,10 +9,10 @@ var _factory = require("../../utils/factory");
9
9
 
10
10
  var _is = require("../../utils/is");
11
11
 
12
- var _array = require("../../utils/array");
13
-
14
12
  var _seededRNG = require("./util/seededRNG");
15
13
 
14
+ var _array = require("../../utils/array");
15
+
16
16
  var name = 'pickRandom';
17
17
  var dependencies = ['typed', 'config', '?on'];
18
18
  var createPickRandom = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
@@ -86,16 +86,12 @@ var createPickRandom = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
86
86
  number = 1;
87
87
  }
88
88
 
89
- possibles = possibles.valueOf(); // get Array
89
+ possibles = (0, _array.flatten)(possibles.valueOf()).valueOf(); // get Array
90
90
 
91
91
  if (weights) {
92
92
  weights = weights.valueOf(); // get Array
93
93
  }
94
94
 
95
- if ((0, _array.arraySize)(possibles).length > 1) {
96
- throw new Error('Only one dimensional vectors supported');
97
- }
98
-
99
95
  var totalWeights = 0;
100
96
 
101
97
  if (typeof weights !== 'undefined') {
@@ -11,6 +11,7 @@ var _number = require("../../utils/number");
11
11
 
12
12
  var _factory = require("../../utils/factory");
13
13
 
14
+ /* eslint-disable no-loss-of-precision */
14
15
  var name = 'erf';
15
16
  var dependencies = ['typed'];
16
17
  var createErf = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
package/lib/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 7.3.0
10
- * @date 2020-09-26
9
+ * @version 7.6.0
10
+ * @date 2020-11-02
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2020 Jos de Jong <wjosdejong@gmail.com>
@@ -15,6 +15,7 @@ var _arithmetic = require("./arithmetic");
15
15
  Object.keys(_arithmetic).forEach(function (key) {
16
16
  if (key === "default" || key === "__esModule") return;
17
17
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
18
+ if (key in exports && exports[key] === _arithmetic[key]) return;
18
19
  Object.defineProperty(exports, key, {
19
20
  enumerable: true,
20
21
  get: function get() {
@@ -10,5 +10,6 @@ var tau = 2 * Math.PI;
10
10
  exports.tau = tau;
11
11
  var e = Math.E;
12
12
  exports.e = e;
13
- var phi = 1.61803398874989484820458683436563811772030917980576286213545;
13
+ var phi = 1.6180339887498948; // eslint-disable-line no-loss-of-precision
14
+
14
15
  exports.phi = phi;
@@ -8,6 +8,7 @@ var _arithmetic = require("./arithmetic");
8
8
 
9
9
  Object.keys(_arithmetic).forEach(function (key) {
10
10
  if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _arithmetic[key]) return;
11
12
  Object.defineProperty(exports, key, {
12
13
  enumerable: true,
13
14
  get: function get() {
@@ -20,6 +21,7 @@ var _bitwise = require("./bitwise");
20
21
 
21
22
  Object.keys(_bitwise).forEach(function (key) {
22
23
  if (key === "default" || key === "__esModule") return;
24
+ if (key in exports && exports[key] === _bitwise[key]) return;
23
25
  Object.defineProperty(exports, key, {
24
26
  enumerable: true,
25
27
  get: function get() {
@@ -32,6 +34,7 @@ var _combinations = require("./combinations");
32
34
 
33
35
  Object.keys(_combinations).forEach(function (key) {
34
36
  if (key === "default" || key === "__esModule") return;
37
+ if (key in exports && exports[key] === _combinations[key]) return;
35
38
  Object.defineProperty(exports, key, {
36
39
  enumerable: true,
37
40
  get: function get() {
@@ -44,6 +47,7 @@ var _constants = require("./constants");
44
47
 
45
48
  Object.keys(_constants).forEach(function (key) {
46
49
  if (key === "default" || key === "__esModule") return;
50
+ if (key in exports && exports[key] === _constants[key]) return;
47
51
  Object.defineProperty(exports, key, {
48
52
  enumerable: true,
49
53
  get: function get() {
@@ -56,6 +60,7 @@ var _logical = require("./logical");
56
60
 
57
61
  Object.keys(_logical).forEach(function (key) {
58
62
  if (key === "default" || key === "__esModule") return;
63
+ if (key in exports && exports[key] === _logical[key]) return;
59
64
  Object.defineProperty(exports, key, {
60
65
  enumerable: true,
61
66
  get: function get() {
@@ -68,6 +73,7 @@ var _relational = require("./relational");
68
73
 
69
74
  Object.keys(_relational).forEach(function (key) {
70
75
  if (key === "default" || key === "__esModule") return;
76
+ if (key in exports && exports[key] === _relational[key]) return;
71
77
  Object.defineProperty(exports, key, {
72
78
  enumerable: true,
73
79
  get: function get() {
@@ -80,6 +86,7 @@ var _probability = require("./probability");
80
86
 
81
87
  Object.keys(_probability).forEach(function (key) {
82
88
  if (key === "default" || key === "__esModule") return;
89
+ if (key in exports && exports[key] === _probability[key]) return;
83
90
  Object.defineProperty(exports, key, {
84
91
  enumerable: true,
85
92
  get: function get() {
@@ -92,6 +99,7 @@ var _trigonometry = require("./trigonometry");
92
99
 
93
100
  Object.keys(_trigonometry).forEach(function (key) {
94
101
  if (key === "default" || key === "__esModule") return;
102
+ if (key in exports && exports[key] === _trigonometry[key]) return;
95
103
  Object.defineProperty(exports, key, {
96
104
  enumerable: true,
97
105
  get: function get() {
@@ -104,6 +112,7 @@ var _utils = require("./utils");
104
112
 
105
113
  Object.keys(_utils).forEach(function (key) {
106
114
  if (key === "default" || key === "__esModule") return;
115
+ if (key in exports && exports[key] === _utils[key]) return;
107
116
  Object.defineProperty(exports, key, {
108
117
  enumerable: true,
109
118
  get: function get() {
@@ -10,6 +10,7 @@ var _number = require("../../utils/number");
10
10
 
11
11
  var _product = require("../../utils/product");
12
12
 
13
+ /* eslint-disable no-loss-of-precision */
13
14
  function gammaNumber(n) {
14
15
  var x;
15
16
 
@@ -219,19 +219,16 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
219
219
  function parseUnit() {
220
220
  var unitName = ''; // Alphanumeric characters only; matches [a-zA-Z0-9]
221
221
 
222
- var code = text.charCodeAt(index);
223
-
224
- while (code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 97 && code <= 122) {
222
+ while (isDigit(c) || Unit.isValidAlpha(c)) {
225
223
  unitName += c;
226
224
  next();
227
- code = text.charCodeAt(index);
228
225
  } // Must begin with [a-zA-Z]
229
226
 
230
227
 
231
- code = unitName.charCodeAt(0);
228
+ var firstC = unitName.charAt(0);
232
229
 
233
- if (code >= 65 && code <= 90 || code >= 97 && code <= 122) {
234
- return unitName || null;
230
+ if (Unit.isValidAlpha(firstC)) {
231
+ return unitName;
235
232
  } else {
236
233
  return null;
237
234
  }
@@ -3686,24 +3683,26 @@ var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, f
3686
3683
  UNITS[_name2] = alias;
3687
3684
  }
3688
3685
  }
3686
+ /**
3687
+ * Checks if a character is a valid latin letter (upper or lower case).
3688
+ * Note that this function can be overridden, for example to allow support of other alphabets.
3689
+ * @param {string} c Tested character
3690
+ */
3689
3691
 
3690
- function assertUnitNameIsValid(name) {
3691
- for (var i = 0; i < name.length; i++) {
3692
- var _c = name.charAt(i);
3693
3692
 
3694
- var isValidAlpha = function isValidAlpha(p) {
3695
- return /^[a-zA-Z]$/.test(p);
3696
- };
3693
+ Unit.isValidAlpha = function isValidAlpha(c) {
3694
+ return /^[a-zA-Z]$/.test(c);
3695
+ };
3697
3696
 
3698
- var _isDigit = function _isDigit(c) {
3699
- return c >= '0' && c <= '9';
3700
- };
3697
+ function assertUnitNameIsValid(name) {
3698
+ for (var i = 0; i < name.length; i++) {
3699
+ c = name.charAt(i);
3701
3700
 
3702
- if (i === 0 && !isValidAlpha(_c)) {
3701
+ if (i === 0 && !Unit.isValidAlpha(c)) {
3703
3702
  throw new Error('Invalid unit name (must begin with alpha character): "' + name + '"');
3704
3703
  }
3705
3704
 
3706
- if (i > 0 && !(isValidAlpha(_c) || _isDigit(_c))) {
3705
+ if (i > 0 && !(Unit.isValidAlpha(c) || isDigit(c))) {
3707
3706
  throw new Error('Invalid unit name (only alphanumeric characters are allowed): "' + name + '"');
3708
3707
  }
3709
3708
  }
@@ -114,7 +114,9 @@ function deepExtend(a, b) {
114
114
  }
115
115
 
116
116
  for (var prop in b) {
117
- if (hasOwnProperty(b, prop)) {
117
+ // We check against prop not being in Object.prototype or Function.prototype
118
+ // to prevent polluting for example Object.__proto__.
119
+ if (hasOwnProperty(b, prop) && !(prop in Object.prototype) && !(prop in Function.prototype)) {
118
120
  if (b[prop] && b[prop].constructor === Object) {
119
121
  if (a[prop] === undefined) {
120
122
  a[prop] = {};
package/lib/version.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = '7.3.0'; // Note: This file is automatically generated when building math.js.
7
+ var version = '7.6.0'; // Note: This file is automatically generated when building math.js.
8
8
  // Changes made in this file will be overwritten.
9
9
 
10
10
  exports.version = version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "7.3.0",
3
+ "version": "7.6.0",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "complex.js": "^2.0.11",
29
- "decimal.js": "^10.2.0",
29
+ "decimal.js": "^10.2.1",
30
30
  "escape-latex": "^1.2.0",
31
31
  "fraction.js": "^4.0.12",
32
32
  "javascript-natural-sort": "^0.7.1",
@@ -35,13 +35,13 @@
35
35
  "typed-function": "^2.0.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@babel/core": "7.11.6",
39
- "@babel/plugin-transform-object-assign": "7.10.4",
40
- "@babel/preset-env": "7.11.5",
41
- "@babel/register": "7.11.5",
38
+ "@babel/core": "7.12.3",
39
+ "@babel/plugin-transform-object-assign": "7.12.1",
40
+ "@babel/preset-env": "7.12.1",
41
+ "@babel/register": "7.12.1",
42
42
  "babel-loader": "8.1.0",
43
43
  "benchmark": "2.1.4",
44
- "codecov": "3.7.2",
44
+ "codecov": "3.8.0",
45
45
  "del": "6.0.0",
46
46
  "expr-eval": "2.0.2",
47
47
  "fancy-log": "1.3.3",
@@ -53,14 +53,14 @@
53
53
  "jsep": "0.3.5",
54
54
  "karma": "5.2.3",
55
55
  "karma-browserstack-launcher": "1.6.0",
56
- "karma-firefox-launcher": "1.3.0",
56
+ "karma-firefox-launcher": "2.0.0",
57
57
  "karma-mocha": "2.0.1",
58
58
  "karma-mocha-reporter": "2.2.5",
59
59
  "karma-webpack": "4.0.2",
60
60
  "lodash": "4.17.20",
61
61
  "math-expression-evaluator": "1.2.22",
62
62
  "mkdirp": "1.0.4",
63
- "mocha": "8.1.3",
63
+ "mocha": "8.2.0",
64
64
  "ndarray": "1.0.19",
65
65
  "ndarray-determinant": "1.0.0",
66
66
  "ndarray-gemm": "1.0.0",
@@ -69,9 +69,9 @@
69
69
  "numericjs": "1.2.6",
70
70
  "nyc": "15.1.0",
71
71
  "pad-right": "0.2.2",
72
- "standard": "14.3.4",
72
+ "standard": "16.0.1",
73
73
  "sylvester": "0.0.21",
74
- "uglify-js": "3.10.4",
74
+ "uglify-js": "3.11.4",
75
75
  "webpack": "4.44.2",
76
76
  "zeros": "1.0.0"
77
77
  },
@@ -82,8 +82,8 @@ export function importFactory (typed, load, math, importedFactories) {
82
82
  } else if (isFactory(value) || name !== undefined) {
83
83
  const flatName = isFactory(value)
84
84
  ? isTransformFunctionFactory(value)
85
- ? (value.fn + '.transform') // TODO: this is ugly
86
- : value.fn
85
+ ? (value.fn + '.transform') // TODO: this is ugly
86
+ : value.fn
87
87
  : name
88
88
 
89
89
  // we allow importing the same function twice if it points to the same implementation
@@ -2,11 +2,15 @@
2
2
  * THIS FILE IS AUTO-GENERATED
3
3
  * DON'T MAKE CHANGES HERE
4
4
  */
5
+ import { equalScalarDependencies } from './dependenciesEqualScalar.generated'
6
+ import { matrixDependencies } from './dependenciesMatrix.generated'
5
7
  import { roundDependencies } from './dependenciesRound.generated'
6
8
  import { typedDependencies } from './dependenciesTyped.generated'
7
9
  import { createCeil } from '../../factoriesAny.js'
8
10
 
9
11
  export const ceilDependencies = {
12
+ equalScalarDependencies,
13
+ matrixDependencies,
10
14
  roundDependencies,
11
15
  typedDependencies,
12
16
  createCeil
@@ -5,6 +5,7 @@
5
5
  import { ComplexDependencies } from './dependenciesComplexClass.generated'
6
6
  import { ceilDependencies } from './dependenciesCeil.generated'
7
7
  import { floorDependencies } from './dependenciesFloor.generated'
8
+ import { matrixDependencies } from './dependenciesMatrix.generated'
8
9
  import { typedDependencies } from './dependenciesTyped.generated'
9
10
  import { createFix } from '../../factoriesAny.js'
10
11
 
@@ -12,6 +13,7 @@ export const fixDependencies = {
12
13
  ComplexDependencies,
13
14
  ceilDependencies,
14
15
  floorDependencies,
16
+ matrixDependencies,
15
17
  typedDependencies,
16
18
  createFix
17
19
  }
@@ -2,11 +2,15 @@
2
2
  * THIS FILE IS AUTO-GENERATED
3
3
  * DON'T MAKE CHANGES HERE
4
4
  */
5
+ import { equalScalarDependencies } from './dependenciesEqualScalar.generated'
6
+ import { matrixDependencies } from './dependenciesMatrix.generated'
5
7
  import { roundDependencies } from './dependenciesRound.generated'
6
8
  import { typedDependencies } from './dependenciesTyped.generated'
7
9
  import { createFloor } from '../../factoriesAny.js'
8
10
 
9
11
  export const floorDependencies = {
12
+ equalScalarDependencies,
13
+ matrixDependencies,
10
14
  roundDependencies,
11
15
  typedDependencies,
12
16
  createFloor
@@ -0,0 +1,15 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { multiplyDependencies } from './dependenciesMultiply.generated'
6
+ import { rotationMatrixDependencies } from './dependenciesRotationMatrix.generated'
7
+ import { typedDependencies } from './dependenciesTyped.generated'
8
+ import { createRotate } from '../../factoriesAny.js'
9
+
10
+ export const rotateDependencies = {
11
+ multiplyDependencies,
12
+ rotationMatrixDependencies,
13
+ typedDependencies,
14
+ createRotate
15
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { BigNumberDependencies } from './dependenciesBigNumberClass.generated'
6
+ import { DenseMatrixDependencies } from './dependenciesDenseMatrixClass.generated'
7
+ import { SparseMatrixDependencies } from './dependenciesSparseMatrixClass.generated'
8
+ import { addScalarDependencies } from './dependenciesAddScalar.generated'
9
+ import { cosDependencies } from './dependenciesCos.generated'
10
+ import { matrixDependencies } from './dependenciesMatrix.generated'
11
+ import { multiplyScalarDependencies } from './dependenciesMultiplyScalar.generated'
12
+ import { normDependencies } from './dependenciesNorm.generated'
13
+ import { sinDependencies } from './dependenciesSin.generated'
14
+ import { typedDependencies } from './dependenciesTyped.generated'
15
+ import { unaryMinusDependencies } from './dependenciesUnaryMinus.generated'
16
+ import { createRotationMatrix } from '../../factoriesAny.js'
17
+
18
+ export const rotationMatrixDependencies = {
19
+ BigNumberDependencies,
20
+ DenseMatrixDependencies,
21
+ SparseMatrixDependencies,
22
+ addScalarDependencies,
23
+ cosDependencies,
24
+ matrixDependencies,
25
+ multiplyScalarDependencies,
26
+ normDependencies,
27
+ sinDependencies,
28
+ typedDependencies,
29
+ unaryMinusDependencies,
30
+ createRotationMatrix
31
+ }
@@ -82,6 +82,8 @@ export { onesDependencies } from './dependenciesAny/dependenciesOnes.generated'
82
82
  export { rangeDependencies } from './dependenciesAny/dependenciesRange.generated'
83
83
  export { reshapeDependencies } from './dependenciesAny/dependenciesReshape.generated'
84
84
  export { resizeDependencies } from './dependenciesAny/dependenciesResize.generated'
85
+ export { rotateDependencies } from './dependenciesAny/dependenciesRotate.generated'
86
+ export { rotationMatrixDependencies } from './dependenciesAny/dependenciesRotationMatrix.generated'
85
87
  export { rowDependencies } from './dependenciesAny/dependenciesRow.generated'
86
88
  export { sizeDependencies } from './dependenciesAny/dependenciesSize.generated'
87
89
  export { squeezeDependencies } from './dependenciesAny/dependenciesSqueeze.generated'