mathjs 7.2.0 → 7.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. package/HISTORY.md +34 -0
  2. package/dist/math.js +3421 -2476
  3. package/dist/math.min.js +5 -5
  4. package/dist/math.min.map +1 -1
  5. package/docs/expressions/syntax.md +30 -4
  6. package/docs/reference/functions/bin.md +38 -0
  7. package/docs/reference/functions/ceil.md +10 -1
  8. package/docs/reference/functions/fix.md +10 -2
  9. package/docs/reference/functions/floor.md +12 -3
  10. package/docs/reference/functions/hex.md +38 -0
  11. package/docs/reference/functions/lsolve.md +2 -1
  12. package/docs/reference/functions/lsolveAll.md +45 -0
  13. package/docs/reference/functions/oct.md +38 -0
  14. package/docs/reference/functions/rotationMatrix.md +51 -0
  15. package/docs/reference/functions/round.md +6 -2
  16. package/docs/reference/functions/usolve.md +2 -1
  17. package/docs/reference/functions/usolveAll.md +45 -0
  18. package/docs/reference/functions.md +8 -2
  19. package/es/entry/dependenciesAny/dependenciesBin.generated.js +10 -0
  20. package/es/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  21. package/es/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  22. package/es/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  23. package/es/entry/dependenciesAny/dependenciesHex.generated.js +10 -0
  24. package/es/entry/dependenciesAny/dependenciesLsolveAll.generated.js +22 -0
  25. package/es/entry/dependenciesAny/dependenciesOct.generated.js +10 -0
  26. package/es/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +30 -0
  27. package/es/entry/dependenciesAny/dependenciesUsolveAll.generated.js +22 -0
  28. package/es/entry/dependenciesAny.generated.js +6 -0
  29. package/es/entry/impureFunctionsAny.generated.js +63 -57
  30. package/es/entry/pureFunctionsAny.generated.js +323 -277
  31. package/es/expression/embeddedDocs/embeddedDocs.js +12 -0
  32. package/es/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  33. package/es/expression/embeddedDocs/function/algebra/lsolveAll.js +8 -0
  34. package/es/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  35. package/es/expression/embeddedDocs/function/algebra/usolveAll.js +8 -0
  36. package/es/expression/embeddedDocs/function/matrix/rotationMatrix.js +8 -0
  37. package/es/expression/embeddedDocs/function/utils/bin.js +8 -0
  38. package/es/expression/embeddedDocs/function/utils/hex.js +8 -0
  39. package/es/expression/embeddedDocs/function/utils/oct.js +8 -0
  40. package/es/expression/parse.js +28 -1
  41. package/es/factoriesAny.js +6 -0
  42. package/es/function/algebra/solver/lsolve.js +42 -69
  43. package/es/function/algebra/solver/lsolveAll.js +213 -0
  44. package/es/function/algebra/solver/lusolve.js +12 -27
  45. package/es/function/algebra/solver/usolve.js +41 -64
  46. package/es/function/algebra/solver/usolveAll.js +213 -0
  47. package/es/function/algebra/solver/utils/solveValidation.js +66 -107
  48. package/es/function/arithmetic/ceil.js +88 -4
  49. package/es/function/arithmetic/fix.js +43 -6
  50. package/es/function/arithmetic/floor.js +90 -6
  51. package/es/function/arithmetic/mod.js +10 -1
  52. package/es/function/arithmetic/round.js +6 -2
  53. package/es/function/matrix/rotationMatrix.js +175 -0
  54. package/es/function/matrix/sqrtm.js +4 -0
  55. package/es/function/probability/pickRandom.js +2 -6
  56. package/es/function/statistics/variance.js +4 -4
  57. package/es/function/string/baseUtils.js +36 -0
  58. package/es/function/string/bin.js +23 -0
  59. package/es/function/string/hex.js +23 -0
  60. package/es/function/string/oct.js +23 -0
  61. package/es/type/bignumber/BigNumber.js +4 -1
  62. package/es/type/number.js +10 -0
  63. package/es/utils/object.js +3 -1
  64. package/es/version.js +1 -1
  65. package/examples/advanced/web_server/math_worker.js +1 -1
  66. package/lib/entry/dependenciesAny/dependenciesBin.generated.js +20 -0
  67. package/lib/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
  68. package/lib/entry/dependenciesAny/dependenciesFix.generated.js +3 -0
  69. package/lib/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
  70. package/lib/entry/dependenciesAny/dependenciesHex.generated.js +20 -0
  71. package/lib/entry/dependenciesAny/dependenciesLsolveAll.generated.js +38 -0
  72. package/lib/entry/dependenciesAny/dependenciesOct.generated.js +20 -0
  73. package/lib/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +50 -0
  74. package/lib/entry/dependenciesAny/dependenciesUsolveAll.generated.js +38 -0
  75. package/lib/entry/dependenciesAny.generated.js +48 -0
  76. package/lib/entry/impureFunctionsAny.generated.js +65 -59
  77. package/lib/entry/pureFunctionsAny.generated.js +373 -321
  78. package/lib/expression/embeddedDocs/embeddedDocs.js +18 -0
  79. package/lib/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  80. package/lib/expression/embeddedDocs/function/algebra/lsolveAll.js +15 -0
  81. package/lib/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  82. package/lib/expression/embeddedDocs/function/algebra/usolveAll.js +15 -0
  83. package/lib/expression/embeddedDocs/function/matrix/rotationMatrix.js +15 -0
  84. package/lib/expression/embeddedDocs/function/utils/bin.js +15 -0
  85. package/lib/expression/embeddedDocs/function/utils/hex.js +15 -0
  86. package/lib/expression/embeddedDocs/function/utils/oct.js +15 -0
  87. package/lib/expression/parse.js +28 -1
  88. package/lib/factoriesAny.js +48 -0
  89. package/lib/function/algebra/solver/lsolve.js +42 -69
  90. package/lib/function/algebra/solver/lsolveAll.js +223 -0
  91. package/lib/function/algebra/solver/lusolve.js +12 -27
  92. package/lib/function/algebra/solver/usolve.js +41 -64
  93. package/lib/function/algebra/solver/usolveAll.js +223 -0
  94. package/lib/function/algebra/solver/utils/solveValidation.js +65 -106
  95. package/lib/function/arithmetic/ceil.js +91 -4
  96. package/lib/function/arithmetic/fix.js +44 -6
  97. package/lib/function/arithmetic/floor.js +93 -6
  98. package/lib/function/arithmetic/mod.js +10 -1
  99. package/lib/function/arithmetic/round.js +6 -2
  100. package/lib/function/matrix/rotationMatrix.js +185 -0
  101. package/lib/function/matrix/sqrtm.js +4 -0
  102. package/lib/function/probability/pickRandom.js +3 -7
  103. package/lib/function/statistics/variance.js +4 -4
  104. package/lib/function/string/baseUtils.js +45 -0
  105. package/lib/function/string/bin.js +31 -0
  106. package/lib/function/string/hex.js +31 -0
  107. package/lib/function/string/oct.js +31 -0
  108. package/lib/header.js +2 -2
  109. package/lib/type/bignumber/BigNumber.js +3 -1
  110. package/lib/type/number.js +10 -0
  111. package/lib/utils/object.js +3 -1
  112. package/lib/version.js +1 -1
  113. package/package.json +12 -12
  114. package/src/entry/dependenciesAny/dependenciesBin.generated.js +11 -0
  115. package/src/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  116. package/src/entry/dependenciesAny/dependenciesFix.generated.js +2 -0
  117. package/src/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  118. package/src/entry/dependenciesAny/dependenciesHex.generated.js +11 -0
  119. package/src/entry/dependenciesAny/dependenciesLsolveAll.generated.js +23 -0
  120. package/src/entry/dependenciesAny/dependenciesOct.generated.js +11 -0
  121. package/src/entry/dependenciesAny/dependenciesRotationMatrix.generated.js +31 -0
  122. package/src/entry/dependenciesAny/dependenciesUsolveAll.generated.js +23 -0
  123. package/src/entry/dependenciesAny.generated.js +6 -0
  124. package/src/entry/impureFunctionsAny.generated.js +104 -92
  125. package/src/entry/pureFunctionsAny.generated.js +94 -82
  126. package/src/expression/embeddedDocs/embeddedDocs.js +12 -0
  127. package/src/expression/embeddedDocs/function/algebra/lsolve.js +2 -2
  128. package/src/expression/embeddedDocs/function/algebra/lsolveAll.js +17 -0
  129. package/src/expression/embeddedDocs/function/algebra/usolve.js +2 -2
  130. package/src/expression/embeddedDocs/function/algebra/usolveAll.js +15 -0
  131. package/src/expression/embeddedDocs/function/matrix/rotationMatrix.js +19 -0
  132. package/src/expression/embeddedDocs/function/utils/bin.js +12 -0
  133. package/src/expression/embeddedDocs/function/utils/hex.js +12 -0
  134. package/src/expression/embeddedDocs/function/utils/oct.js +12 -0
  135. package/src/expression/parse.js +25 -0
  136. package/src/factoriesAny.js +6 -0
  137. package/src/function/algebra/solver/lsolve.js +52 -58
  138. package/src/function/algebra/solver/lsolveAll.js +197 -0
  139. package/src/function/algebra/solver/lusolve.js +9 -19
  140. package/src/function/algebra/solver/usolve.js +52 -55
  141. package/src/function/algebra/solver/usolveAll.js +199 -0
  142. package/src/function/algebra/solver/utils/solveValidation.js +78 -86
  143. package/src/function/arithmetic/ceil.js +63 -3
  144. package/src/function/arithmetic/fix.js +45 -6
  145. package/src/function/arithmetic/floor.js +65 -5
  146. package/src/function/arithmetic/mod.js +8 -1
  147. package/src/function/arithmetic/round.js +6 -2
  148. package/src/function/matrix/rotationMatrix.js +185 -0
  149. package/src/function/matrix/sqrtm.js +4 -0
  150. package/src/function/probability/pickRandom.js +2 -6
  151. package/src/function/statistics/variance.js +4 -4
  152. package/src/function/string/baseUtils.js +29 -0
  153. package/src/function/string/bin.js +23 -0
  154. package/src/function/string/hex.js +23 -0
  155. package/src/function/string/oct.js +24 -0
  156. package/src/type/bignumber/BigNumber.js +2 -1
  157. package/src/type/number.js +9 -1
  158. package/src/utils/object.js +3 -1
  159. package/src/version.js +1 -1
@@ -9,14 +9,19 @@ var _factory = require("../../utils/factory");
9
9
 
10
10
  var _collection = require("../../utils/collection");
11
11
 
12
+ var _algorithm = require("../../type/matrix/utils/algorithm14");
13
+
12
14
  var name = 'fix';
13
- var dependencies = ['typed', 'Complex', 'ceil', 'floor'];
15
+ var dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor'];
14
16
  var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
15
17
  var typed = _ref.typed,
16
18
  _Complex = _ref.Complex,
19
+ matrix = _ref.matrix,
17
20
  ceil = _ref.ceil,
18
21
  floor = _ref.floor;
19
-
22
+ var algorithm14 = (0, _algorithm.createAlgorithm14)({
23
+ typed: typed
24
+ });
20
25
  /**
21
26
  * Round a value towards zero.
22
27
  * For matrices, the function is evaluated element wise.
@@ -32,34 +37,67 @@ var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
32
37
  * math.fix(-4.2) // returns number -4
33
38
  * math.fix(-4.7) // returns number -4
34
39
  *
35
- * const c = math.complex(3.2, -2.7)
40
+ * math.fix(3.12, 1) // returns number 3.1
41
+ * math.fix(3.18, 1) // returns number 3.1
42
+ * math.fix(-4.12, 1) // returns number -4.1
43
+ * math.fix(-4.17, 1) // returns number -4.1
44
+ *
45
+ * const c = math.complex(3.22, -2.78)
36
46
  * math.fix(c) // returns Complex 3 - 2i
47
+ * math.fix(c, 1) // returns Complex 3.2 - 2.7i
37
48
  *
38
- * math.fix([3.2, 3.8, -4.7]) // returns Array [3, 3, -4]
49
+ * math.fix([3.2, 3.8, -4.7]) // returns Array [3, 3, -4]
50
+ * math.fix([3.2, 3.8, -4.7], 1) // returns Array [3.2, 3.8, -4.7]
39
51
  *
40
52
  * See also:
41
53
  *
42
54
  * ceil, floor, round
43
55
  *
44
- * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
45
- * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
56
+ * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
57
+ * @param {number | BigNumber | Array} [n=0] Number of decimals
58
+ * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
46
59
  */
60
+
47
61
  return typed('fix', {
48
62
  number: function number(x) {
49
63
  return x > 0 ? floor(x) : ceil(x);
50
64
  },
65
+ 'number, number | BigNumber': function numberNumberBigNumber(x, n) {
66
+ return x > 0 ? floor(x, n) : ceil(x, n);
67
+ },
51
68
  Complex: function Complex(x) {
52
69
  return new _Complex(x.re > 0 ? Math.floor(x.re) : Math.ceil(x.re), x.im > 0 ? Math.floor(x.im) : Math.ceil(x.im));
53
70
  },
71
+ 'Complex, number | BigNumber': function ComplexNumberBigNumber(x, n) {
72
+ return new _Complex(x.re > 0 ? floor(x.re, n) : ceil(x.re, n), x.im > 0 ? floor(x.im, n) : ceil(x.im, n));
73
+ },
54
74
  BigNumber: function BigNumber(x) {
55
75
  return x.isNegative() ? ceil(x) : floor(x);
56
76
  },
77
+ 'BigNumber, number | BigNumber': function BigNumberNumberBigNumber(x, n) {
78
+ return x.isNegative() ? ceil(x, n) : floor(x, n);
79
+ },
57
80
  Fraction: function Fraction(x) {
58
81
  return x.s < 0 ? x.ceil() : x.floor();
59
82
  },
83
+ 'Fraction, number | BigNumber': function FractionNumberBigNumber(x, n) {
84
+ return x.s < 0 ? x.ceil(n) : x.floor(n);
85
+ },
60
86
  'Array | Matrix': function ArrayMatrix(x) {
61
87
  // deep map collection, skip zeros since fix(0) = 0
62
88
  return (0, _collection.deepMap)(x, this, true);
89
+ },
90
+ 'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(x, n) {
91
+ var _this = this;
92
+
93
+ // deep map collection, skip zeros since fix(0) = 0
94
+ return (0, _collection.deepMap)(x, function (i) {
95
+ return _this(i, n);
96
+ }, true);
97
+ },
98
+ 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
99
+ // use matrix implementation
100
+ return algorithm14(matrix(y), x, this, true).valueOf();
63
101
  }
64
102
  });
65
103
  });
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createFloor = void 0;
7
7
 
8
+ var _decimal = require("decimal.js");
9
+
8
10
  var _factory = require("../../utils/factory");
9
11
 
10
12
  var _collection = require("../../utils/collection");
@@ -13,13 +15,37 @@ var _number = require("../../utils/number");
13
15
 
14
16
  var _nearlyEqual = require("../../utils/bignumber/nearlyEqual");
15
17
 
18
+ var _algorithm = require("../../type/matrix/utils/algorithm11");
19
+
20
+ var _algorithm2 = require("../../type/matrix/utils/algorithm14");
21
+
22
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
23
+
24
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
25
+
26
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
27
+
28
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
29
+
30
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
31
+
32
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
33
+
16
34
  var name = 'floor';
17
- var dependencies = ['typed', 'config', 'round'];
35
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
18
36
  var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
19
37
  var typed = _ref.typed,
20
38
  config = _ref.config,
21
- round = _ref.round;
22
-
39
+ round = _ref.round,
40
+ matrix = _ref.matrix,
41
+ equalScalar = _ref.equalScalar;
42
+ var algorithm11 = (0, _algorithm.createAlgorithm11)({
43
+ typed: typed,
44
+ equalScalar: equalScalar
45
+ });
46
+ var algorithm14 = (0, _algorithm2.createAlgorithm14)({
47
+ typed: typed
48
+ });
23
49
  /**
24
50
  * Round a value towards minus infinity.
25
51
  * For matrices, the function is evaluated element wise.
@@ -27,6 +53,7 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
27
53
  * Syntax:
28
54
  *
29
55
  * math.floor(x)
56
+ * math.floor(x, n)
30
57
  *
31
58
  * Examples:
32
59
  *
@@ -35,18 +62,27 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
35
62
  * math.floor(-4.2) // returns number -5
36
63
  * math.floor(-4.7) // returns number -5
37
64
  *
38
- * const c = math.complex(3.2, -2.7)
39
- * math.floor(c) // returns Complex 3 - 3i
65
+ * math.floor(3.212, 2) // returns number 3.21
66
+ * math.floor(3.288, 2) // returns number 3.28
67
+ * math.floor(-4.212, 2) // returns number -4.22
68
+ * math.floor(-4.782, 2) // returns number -4.79
40
69
  *
41
- * math.floor([3.2, 3.8, -4.7]) // returns Array [3, 3, -5]
70
+ * const c = math.complex(3.24, -2.71)
71
+ * math.floor(c) // returns Complex 3 - 3i
72
+ * math.floor(c, 1) // returns Complex 3.2 - 2.8i
73
+ *
74
+ * math.floor([3.2, 3.8, -4.7]) // returns Array [3, 3, -5]
75
+ * math.floor([3.21, 3.82, -4.71], 1) // returns Array [3.2, 3.8, -4.8]
42
76
  *
43
77
  * See also:
44
78
  *
45
79
  * ceil, fix, round
46
80
  *
47
81
  * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
82
+ * @param {number | BigNumber | Array} [n=0] Number of decimals
48
83
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
49
84
  */
85
+
50
86
  return typed('floor', {
51
87
  number: function number(x) {
52
88
  if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
@@ -55,9 +91,32 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
55
91
  return Math.floor(x);
56
92
  }
57
93
  },
94
+ 'number, number': function numberNumber(x, n) {
95
+ if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
96
+ return round(x, n);
97
+ } else {
98
+ var _$split = "".concat(x, "e").split('e'),
99
+ _$split2 = _slicedToArray(_$split, 2),
100
+ number = _$split2[0],
101
+ exponent = _$split2[1];
102
+
103
+ var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
104
+
105
+ var _$split3 = "".concat(result, "e").split('e');
106
+
107
+ var _$split4 = _slicedToArray(_$split3, 2);
108
+
109
+ number = _$split4[0];
110
+ exponent = _$split4[1];
111
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
112
+ }
113
+ },
58
114
  Complex: function Complex(x) {
59
115
  return x.floor();
60
116
  },
117
+ 'Complex, number': function ComplexNumber(x, n) {
118
+ return x.floor(n);
119
+ },
61
120
  BigNumber: function BigNumber(x) {
62
121
  if ((0, _nearlyEqual.nearlyEqual)(x, round(x), config.epsilon)) {
63
122
  return round(x);
@@ -65,12 +124,40 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
65
124
  return x.floor();
66
125
  }
67
126
  },
127
+ 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
128
+ if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
129
+ return round(x, n);
130
+ } else {
131
+ return x.toDecimalPlaces(n.toNumber(), _decimal.Decimal.ROUND_FLOOR);
132
+ }
133
+ },
68
134
  Fraction: function Fraction(x) {
69
135
  return x.floor();
70
136
  },
137
+ 'Fraction, number': function FractionNumber(x, n) {
138
+ return x.floor(n);
139
+ },
71
140
  'Array | Matrix': function ArrayMatrix(x) {
72
141
  // deep map collection, skip zeros since floor(0) = 0
73
142
  return (0, _collection.deepMap)(x, this, true);
143
+ },
144
+ 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
145
+ var _this = this;
146
+
147
+ // deep map collection, skip zeros since ceil(0) = 0
148
+ return (0, _collection.deepMap)(x, function (i) {
149
+ return _this(i, n);
150
+ }, true);
151
+ },
152
+ 'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {
153
+ return algorithm11(x, y, this, false);
154
+ },
155
+ 'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
156
+ return algorithm14(x, y, this, false);
157
+ },
158
+ 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
159
+ // use matrix implementation
160
+ return algorithm14(matrix(y), x, this, true).valueOf();
74
161
  }
75
162
  });
76
163
  });
@@ -94,10 +94,19 @@ var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
94
94
  return typed(name, {
95
95
  'number, number': _number.modNumber,
96
96
  'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
97
+ if (y.isNeg()) {
98
+ throw new Error('Cannot calculate mod for a negative divisor');
99
+ }
100
+
97
101
  return y.isZero() ? x : x.mod(y);
98
102
  },
99
103
  'Fraction, Fraction': function FractionFraction(x, y) {
100
- return x.mod(y);
104
+ if (y.compare(0) < 0) {
105
+ throw new Error('Cannot calculate mod for a negative divisor');
106
+ } // Workaround suggested in Fraction.js library to calculate correct modulo for negative dividend
107
+
108
+
109
+ return x.compare(0) >= 0 ? x.mod(y) : x.mod(y).add(y).mod(y);
101
110
  },
102
111
  'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {
103
112
  return algorithm05(x, y, this, false);
@@ -57,10 +57,14 @@ var createRound = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
57
57
  *
58
58
  * Examples:
59
59
  *
60
- * math.round(3.2) // returns number 3
61
- * math.round(3.8) // returns number 4
60
+ * math.round(3.22) // returns number 3
61
+ * math.round(3.82) // returns number 4
62
62
  * math.round(-4.2) // returns number -4
63
63
  * math.round(-4.7) // returns number -5
64
+ * math.round(3.22, 1) // returns number 3.2
65
+ * math.round(3.88, 1) // returns number 3.8
66
+ * math.round(-4.21, 1) // returns number -4.2
67
+ * math.round(-4.71, 1) // returns number -4.7
64
68
  * math.round(math.pi, 3) // returns number 3.142
65
69
  * math.round(123.45678, 2) // returns number 123.46
66
70
  *
@@ -0,0 +1,185 @@
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(45)) // returns [[ bignumber(1 / sqrt(2)), - bignumber(1 / sqrt(2))], [ bignumber(1 / sqrt(2)), bignumber(1 / sqrt(2))]]
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, config.matrix === 'Matrix' ? 'dense' : undefined);
79
+ },
80
+ 'number | BigNumber | Complex | Unit, Matrix': function numberBigNumberComplexUnitMatrix(theta, v) {
81
+ _validateVector(v);
82
+
83
+ return _rotationMatrix3x3(theta, v, config.matrix === 'Matrix' ? 'dense' : undefined);
84
+ },
85
+ 'number | BigNumber | Complex | Unit, Array, string': function numberBigNumberComplexUnitArrayString(theta, v, format) {
86
+ var matrixV = matrix(v);
87
+
88
+ _validateVector(matrixV);
89
+
90
+ return _rotationMatrix3x3(theta, matrixV, format);
91
+ },
92
+ 'number | BigNumber | Complex | Unit, Matrix, string': function numberBigNumberComplexUnitMatrixString(theta, v, format) {
93
+ _validateVector(v);
94
+
95
+ return _rotationMatrix3x3(theta, v, format);
96
+ }
97
+ });
98
+ /**
99
+ * Returns 2x2 matrix of 2D rotation of angle theta
100
+ *
101
+ * @param {number | BigNumber | Complex | Unit} theta The rotation angle
102
+ * @param {string} format The result Matrix storage format
103
+ * @returns {Matrix}
104
+ * @private
105
+ */
106
+
107
+ function _rotationMatrix2x2(theta, format) {
108
+ var Big = (0, _is.isBigNumber)(theta);
109
+ var minusOne = Big ? new BigNumber(-1) : -1;
110
+ var cosTheta = cos(theta);
111
+ var sinTheta = sin(theta);
112
+ var data = [[cosTheta, multiplyScalar(minusOne, sinTheta)], [sinTheta, cosTheta]];
113
+ return _convertToFormat(data, format);
114
+ }
115
+
116
+ function _validateVector(v) {
117
+ var size = v.size();
118
+
119
+ if (size.length < 1 || size[0] !== 3) {
120
+ throw new RangeError('Vector must be of dimensions 1x3');
121
+ }
122
+ }
123
+
124
+ function _mul(array) {
125
+ return array.reduce(function (p, curr) {
126
+ return multiplyScalar(p, curr);
127
+ });
128
+ }
129
+
130
+ function _convertToFormat(data, format) {
131
+ if (format) {
132
+ if (format === 'sparse') {
133
+ return new SparseMatrix(data);
134
+ }
135
+
136
+ if (format === 'dense') {
137
+ return new DenseMatrix(data);
138
+ }
139
+
140
+ throw new TypeError("Unknown matrix type \"".concat(format, "\""));
141
+ }
142
+
143
+ return data;
144
+ }
145
+ /**
146
+ * Returns a 3x3 matrix of rotation of angle theta around vector v
147
+ *
148
+ * @param {number | BigNumber | Complex | Unit} theta The rotation angle
149
+ * @param {Matrix} v The rotation axis vector
150
+ * @param {string} format The storage format of the resulting matrix
151
+ * @returns {Matrix}
152
+ * @private
153
+ */
154
+
155
+
156
+ function _rotationMatrix3x3(theta, v, format) {
157
+ var normV = norm(v);
158
+
159
+ if (normV === 0) {
160
+ return _convertToFormat([], format);
161
+ }
162
+
163
+ var Big = (0, _is.isBigNumber)(theta) ? BigNumber : null;
164
+ var one = Big ? new Big(1) : 1;
165
+ var minusOne = Big ? new Big(-1) : -1;
166
+ var vx = Big ? new Big(v.get([0]) / normV) : v.get([0]) / normV;
167
+ var vy = Big ? new Big(v.get([1]) / normV) : v.get([1]) / normV;
168
+ var vz = Big ? new Big(v.get([2]) / normV) : v.get([2]) / normV;
169
+ var c = cos(theta);
170
+ var oneMinusC = addScalar(one, unaryMinus(c));
171
+ var s = sin(theta);
172
+ var r11 = addScalar(c, _mul([vx, vx, oneMinusC]));
173
+ var r12 = addScalar(_mul([vx, vy, oneMinusC]), _mul([minusOne, vz, s]));
174
+ var r13 = addScalar(_mul([vx, vz, oneMinusC]), _mul([vy, s]));
175
+ var r21 = addScalar(_mul([vx, vy, oneMinusC]), _mul([vz, s]));
176
+ var r22 = addScalar(c, _mul([vy, vy, oneMinusC]));
177
+ var r23 = addScalar(_mul([vy, vz, oneMinusC]), _mul([minusOne, vx, s]));
178
+ var r31 = addScalar(_mul([vx, vz, oneMinusC]), _mul([minusOne, vy, s]));
179
+ var r32 = addScalar(_mul([vy, vz, oneMinusC]), _mul([vx, s]));
180
+ var r33 = addScalar(c, _mul([vz, vz, oneMinusC]));
181
+ var data = [[r11, r12, r13], [r21, r22, r23], [r31, r32, r33]];
182
+ return _convertToFormat(data, format);
183
+ }
184
+ });
185
+ 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') {
@@ -109,7 +109,7 @@ var createVariance = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
109
109
  */
110
110
 
111
111
  function _var(array, normalization) {
112
- var sum = 0;
112
+ var sum;
113
113
  var num = 0;
114
114
 
115
115
  if (array.length === 0) {
@@ -119,7 +119,7 @@ var createVariance = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
119
119
 
120
120
  (0, _collection.deepForEach)(array, function (value) {
121
121
  try {
122
- sum = add(sum, value);
122
+ sum = sum === undefined ? value : add(sum, value);
123
123
  num++;
124
124
  } catch (err) {
125
125
  throw (0, _improveErrorMessage.improveErrorMessage)(err, 'variance', value);
@@ -128,10 +128,10 @@ var createVariance = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
128
128
  if (num === 0) throw new Error('Cannot calculate variance of an empty array');
129
129
  var mean = divide(sum, num); // calculate the variance
130
130
 
131
- sum = 0;
131
+ sum = undefined;
132
132
  (0, _collection.deepForEach)(array, function (value) {
133
133
  var diff = subtract(value, mean);
134
- sum = add(sum, multiply(diff, diff));
134
+ sum = sum === undefined ? multiply(diff, diff) : add(sum, multiply(diff, diff));
135
135
  });
136
136
 
137
137
  if (isNaN(sum)) {
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createBaseFormatterFactory = createBaseFormatterFactory;
7
+
8
+ var _factory = require("../../utils/factory");
9
+
10
+ var _number = require("../../utils/number");
11
+
12
+ function baseFormatter(base) {
13
+ var prefixes = {
14
+ 2: '0b',
15
+ 8: '0o',
16
+ 16: '0x'
17
+ };
18
+ var prefix = prefixes[base];
19
+ return function (n) {
20
+ if (n > Math.pow(2, 31) - 1 || n < -Math.pow(2, 31)) {
21
+ throw new Error('Value must be in range [-2^31, 2^31-1]');
22
+ }
23
+
24
+ if (!(0, _number.isInteger)(n)) {
25
+ throw new Error('Value must be an integer');
26
+ }
27
+
28
+ if (n < 0) {
29
+ n = n + Math.pow(2, 32);
30
+ }
31
+
32
+ return "".concat(prefix).concat(n.toString(base));
33
+ };
34
+ }
35
+
36
+ var dependencies = ['typed'];
37
+
38
+ function createBaseFormatterFactory(name, base) {
39
+ return (0, _factory.factory)(name, dependencies, function (_ref) {
40
+ var typed = _ref.typed;
41
+ return typed(name, {
42
+ number: baseFormatter(base)
43
+ });
44
+ });
45
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createBin = void 0;
7
+
8
+ var _baseUtils = require("./baseUtils");
9
+
10
+ /**
11
+ * Format a number as binary.
12
+ *
13
+ * Syntax:
14
+ *
15
+ * math.bin(value)
16
+ *
17
+ * Examples:
18
+ *
19
+ * //the following outputs "0b10"
20
+ * math.bin(2)
21
+ *
22
+ * See also:
23
+ *
24
+ * oct
25
+ * hex
26
+ *
27
+ * @param {number} value Value to be stringified
28
+ * @return {string} The formatted value
29
+ */
30
+ var createBin = (0, _baseUtils.createBaseFormatterFactory)('bin', 2);
31
+ exports.createBin = createBin;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createHex = void 0;
7
+
8
+ var _baseUtils = require("./baseUtils");
9
+
10
+ /**
11
+ * Format a number as hexadecimal.
12
+ *
13
+ * Syntax:
14
+ *
15
+ * math.hex(value)
16
+ *
17
+ * Examples:
18
+ *
19
+ * //the following outputs "0xF0"
20
+ * math.hex(240)
21
+ *
22
+ * See also:
23
+ *
24
+ * oct
25
+ * bin
26
+ *
27
+ * @param {number} value Value to be stringified
28
+ * @return {string} The formatted value
29
+ */
30
+ var createHex = (0, _baseUtils.createBaseFormatterFactory)('hex', 16);
31
+ exports.createHex = createHex;