mathjs 7.3.0 → 7.6.0

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