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
@@ -123,8 +123,8 @@ export var createNode = /* #__PURE__ */factory(name, dependencies, function (_re
123
123
 
124
124
  Node.prototype.traverse = function (callback) {
125
125
  // execute callback for itself
126
- callback(this, null, null); // eslint-disable-line standard/no-callback-literal
127
- // recursively traverse over all childs of a node
126
+ // eslint-disable-next-line
127
+ callback(this, null, null); // recursively traverse over all childs of a node
128
128
 
129
129
  function _traverse(node, callback) {
130
130
  node.forEach(function (child, path, parent) {
@@ -78,6 +78,8 @@ export { createOnes } from './function/matrix/ones';
78
78
  export { createRange } from './function/matrix/range';
79
79
  export { createReshape } from './function/matrix/reshape';
80
80
  export { createResize } from './function/matrix/resize';
81
+ export { createRotate } from './function/matrix/rotate';
82
+ export { createRotationMatrix } from './function/matrix/rotationMatrix';
81
83
  export { createRow } from './function/matrix/row';
82
84
  export { createSize } from './function/matrix/size';
83
85
  export { createSqueeze } from './function/matrix/squeeze';
@@ -1,15 +1,38 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+
3
+ 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."); }
4
+
5
+ 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); }
6
+
7
+ 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; }
8
+
9
+ 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; }
10
+
11
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
+
13
+ import { Decimal } from 'decimal.js';
1
14
  import { factory } from '../../utils/factory';
2
15
  import { deepMap } from '../../utils/collection';
3
16
  import { nearlyEqual } from '../../utils/number';
4
17
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual';
5
18
  import { ceilNumber } from '../../plain/number';
19
+ import { createAlgorithm11 } from '../../type/matrix/utils/algorithm11';
20
+ import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14';
6
21
  var name = 'ceil';
7
- var dependencies = ['typed', 'config', 'round'];
22
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
8
23
  export var createCeil = /* #__PURE__ */factory(name, dependencies, function (_ref) {
9
24
  var typed = _ref.typed,
10
25
  config = _ref.config,
11
- round = _ref.round;
12
-
26
+ round = _ref.round,
27
+ matrix = _ref.matrix,
28
+ equalScalar = _ref.equalScalar;
29
+ var algorithm11 = createAlgorithm11({
30
+ typed: typed,
31
+ equalScalar: equalScalar
32
+ });
33
+ var algorithm14 = createAlgorithm14({
34
+ typed: typed
35
+ });
13
36
  /**
14
37
  * Round a value towards plus infinity
15
38
  * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
@@ -18,6 +41,7 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, function (_re
18
41
  * Syntax:
19
42
  *
20
43
  * math.ceil(x)
44
+ * math.ceil(x, n)
21
45
  *
22
46
  * Examples:
23
47
  *
@@ -26,18 +50,27 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, function (_re
26
50
  * math.ceil(-4.2) // returns number -4
27
51
  * math.ceil(-4.7) // returns number -4
28
52
  *
29
- * const c = math.complex(3.2, -2.7)
53
+ * math.ceil(3.212, 2) // returns number 3.22
54
+ * math.ceil(3.288, 2) // returns number 3.29
55
+ * math.ceil(-4.212, 2) // returns number -4.21
56
+ * math.ceil(-4.782, 2) // returns number -4.78
57
+ *
58
+ * const c = math.complex(3.24, -2.71)
30
59
  * math.ceil(c) // returns Complex 4 - 2i
60
+ * math.ceil(c, 1) // returns Complex 3.3 - 2.7i
31
61
  *
32
62
  * math.ceil([3.2, 3.8, -4.7]) // returns Array [4, 4, -4]
63
+ * math.ceil([3.21, 3.82, -4.71], 1) // returns Array [3.3, 3.9, -4.7]
33
64
  *
34
65
  * See also:
35
66
  *
36
67
  * floor, fix, round
37
68
  *
38
69
  * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
70
+ * @param {number | BigNumber | Array} [n=0] Number of decimals
39
71
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
40
72
  */
73
+
41
74
  return typed('ceil', {
42
75
  number: function number(x) {
43
76
  if (nearlyEqual(x, round(x), config.epsilon)) {
@@ -46,9 +79,32 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, function (_re
46
79
  return ceilNumber(x);
47
80
  }
48
81
  },
82
+ 'number, number': function numberNumber(x, n) {
83
+ if (nearlyEqual(x, round(x, n), config.epsilon)) {
84
+ return round(x, n);
85
+ } else {
86
+ var _$split = "".concat(x, "e").split('e'),
87
+ _$split2 = _slicedToArray(_$split, 2),
88
+ number = _$split2[0],
89
+ exponent = _$split2[1];
90
+
91
+ var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
92
+
93
+ var _$split3 = "".concat(result, "e").split('e');
94
+
95
+ var _$split4 = _slicedToArray(_$split3, 2);
96
+
97
+ number = _$split4[0];
98
+ exponent = _$split4[1];
99
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
100
+ }
101
+ },
49
102
  Complex: function Complex(x) {
50
103
  return x.ceil();
51
104
  },
105
+ 'Complex, number': function ComplexNumber(x, n) {
106
+ return x.ceil(n);
107
+ },
52
108
  BigNumber: function BigNumber(x) {
53
109
  if (bigNearlyEqual(x, round(x), config.epsilon)) {
54
110
  return round(x);
@@ -56,12 +112,40 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, function (_re
56
112
  return x.ceil();
57
113
  }
58
114
  },
115
+ 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
116
+ if (bigNearlyEqual(x, round(x, n), config.epsilon)) {
117
+ return round(x, n);
118
+ } else {
119
+ return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_CEIL);
120
+ }
121
+ },
59
122
  Fraction: function Fraction(x) {
60
123
  return x.ceil();
61
124
  },
125
+ 'Fraction, number': function FractionNumber(x, n) {
126
+ return x.ceil(n);
127
+ },
62
128
  'Array | Matrix': function ArrayMatrix(x) {
63
129
  // deep map collection, skip zeros since ceil(0) = 0
64
130
  return deepMap(x, this, true);
131
+ },
132
+ 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
133
+ var _this = this;
134
+
135
+ // deep map collection, skip zeros since ceil(0) = 0
136
+ return deepMap(x, function (i) {
137
+ return _this(i, n);
138
+ }, true);
139
+ },
140
+ 'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {
141
+ return algorithm11(x, y, this, false);
142
+ },
143
+ 'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
144
+ return algorithm14(x, y, this, false);
145
+ },
146
+ 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
147
+ // use matrix implementation
148
+ return algorithm14(matrix(y), x, this, true).valueOf();
65
149
  }
66
150
  });
67
151
  });
@@ -1,13 +1,17 @@
1
1
  import { factory } from '../../utils/factory';
2
2
  import { deepMap } from '../../utils/collection';
3
+ import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14';
3
4
  var name = 'fix';
4
- var dependencies = ['typed', 'Complex', 'ceil', 'floor'];
5
+ var dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor'];
5
6
  export var createFix = /* #__PURE__ */factory(name, dependencies, function (_ref) {
6
7
  var typed = _ref.typed,
7
8
  _Complex = _ref.Complex,
9
+ matrix = _ref.matrix,
8
10
  ceil = _ref.ceil,
9
11
  floor = _ref.floor;
10
-
12
+ var algorithm14 = createAlgorithm14({
13
+ typed: typed
14
+ });
11
15
  /**
12
16
  * Round a value towards zero.
13
17
  * For matrices, the function is evaluated element wise.
@@ -23,34 +27,67 @@ export var createFix = /* #__PURE__ */factory(name, dependencies, function (_ref
23
27
  * math.fix(-4.2) // returns number -4
24
28
  * math.fix(-4.7) // returns number -4
25
29
  *
26
- * const c = math.complex(3.2, -2.7)
30
+ * math.fix(3.12, 1) // returns number 3.1
31
+ * math.fix(3.18, 1) // returns number 3.1
32
+ * math.fix(-4.12, 1) // returns number -4.1
33
+ * math.fix(-4.17, 1) // returns number -4.1
34
+ *
35
+ * const c = math.complex(3.22, -2.78)
27
36
  * math.fix(c) // returns Complex 3 - 2i
37
+ * math.fix(c, 1) // returns Complex 3.2 - 2.7i
28
38
  *
29
- * math.fix([3.2, 3.8, -4.7]) // returns Array [3, 3, -4]
39
+ * math.fix([3.2, 3.8, -4.7]) // returns Array [3, 3, -4]
40
+ * math.fix([3.2, 3.8, -4.7], 1) // returns Array [3.2, 3.8, -4.7]
30
41
  *
31
42
  * See also:
32
43
  *
33
44
  * ceil, floor, round
34
45
  *
35
- * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
36
- * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
46
+ * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
47
+ * @param {number | BigNumber | Array} [n=0] Number of decimals
48
+ * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
37
49
  */
50
+
38
51
  return typed('fix', {
39
52
  number: function number(x) {
40
53
  return x > 0 ? floor(x) : ceil(x);
41
54
  },
55
+ 'number, number | BigNumber': function numberNumberBigNumber(x, n) {
56
+ return x > 0 ? floor(x, n) : ceil(x, n);
57
+ },
42
58
  Complex: function Complex(x) {
43
59
  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));
44
60
  },
61
+ 'Complex, number | BigNumber': function ComplexNumberBigNumber(x, n) {
62
+ 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));
63
+ },
45
64
  BigNumber: function BigNumber(x) {
46
65
  return x.isNegative() ? ceil(x) : floor(x);
47
66
  },
67
+ 'BigNumber, number | BigNumber': function BigNumberNumberBigNumber(x, n) {
68
+ return x.isNegative() ? ceil(x, n) : floor(x, n);
69
+ },
48
70
  Fraction: function Fraction(x) {
49
71
  return x.s < 0 ? x.ceil() : x.floor();
50
72
  },
73
+ 'Fraction, number | BigNumber': function FractionNumberBigNumber(x, n) {
74
+ return x.s < 0 ? x.ceil(n) : x.floor(n);
75
+ },
51
76
  'Array | Matrix': function ArrayMatrix(x) {
52
77
  // deep map collection, skip zeros since fix(0) = 0
53
78
  return deepMap(x, this, true);
79
+ },
80
+ 'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(x, n) {
81
+ var _this = this;
82
+
83
+ // deep map collection, skip zeros since fix(0) = 0
84
+ return deepMap(x, function (i) {
85
+ return _this(i, n);
86
+ }, true);
87
+ },
88
+ 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
89
+ // use matrix implementation
90
+ return algorithm14(matrix(y), x, this, true).valueOf();
54
91
  }
55
92
  });
56
93
  });
@@ -1,14 +1,37 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+
3
+ 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."); }
4
+
5
+ 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); }
6
+
7
+ 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; }
8
+
9
+ 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; }
10
+
11
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
+
13
+ import { Decimal } from 'decimal.js';
1
14
  import { factory } from '../../utils/factory';
2
15
  import { deepMap } from '../../utils/collection';
3
16
  import { nearlyEqual } from '../../utils/number';
4
17
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual';
18
+ import { createAlgorithm11 } from '../../type/matrix/utils/algorithm11';
19
+ import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14';
5
20
  var name = 'floor';
6
- var dependencies = ['typed', 'config', 'round'];
21
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
7
22
  export var createFloor = /* #__PURE__ */factory(name, dependencies, function (_ref) {
8
23
  var typed = _ref.typed,
9
24
  config = _ref.config,
10
- round = _ref.round;
11
-
25
+ round = _ref.round,
26
+ matrix = _ref.matrix,
27
+ equalScalar = _ref.equalScalar;
28
+ var algorithm11 = createAlgorithm11({
29
+ typed: typed,
30
+ equalScalar: equalScalar
31
+ });
32
+ var algorithm14 = createAlgorithm14({
33
+ typed: typed
34
+ });
12
35
  /**
13
36
  * Round a value towards minus infinity.
14
37
  * For matrices, the function is evaluated element wise.
@@ -16,6 +39,7 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, function (_r
16
39
  * Syntax:
17
40
  *
18
41
  * math.floor(x)
42
+ * math.floor(x, n)
19
43
  *
20
44
  * Examples:
21
45
  *
@@ -24,18 +48,27 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, function (_r
24
48
  * math.floor(-4.2) // returns number -5
25
49
  * math.floor(-4.7) // returns number -5
26
50
  *
27
- * const c = math.complex(3.2, -2.7)
28
- * math.floor(c) // returns Complex 3 - 3i
51
+ * math.floor(3.212, 2) // returns number 3.21
52
+ * math.floor(3.288, 2) // returns number 3.28
53
+ * math.floor(-4.212, 2) // returns number -4.22
54
+ * math.floor(-4.782, 2) // returns number -4.79
29
55
  *
30
- * math.floor([3.2, 3.8, -4.7]) // returns Array [3, 3, -5]
56
+ * const c = math.complex(3.24, -2.71)
57
+ * math.floor(c) // returns Complex 3 - 3i
58
+ * math.floor(c, 1) // returns Complex 3.2 - 2.8i
59
+ *
60
+ * math.floor([3.2, 3.8, -4.7]) // returns Array [3, 3, -5]
61
+ * math.floor([3.21, 3.82, -4.71], 1) // returns Array [3.2, 3.8, -4.8]
31
62
  *
32
63
  * See also:
33
64
  *
34
65
  * ceil, fix, round
35
66
  *
36
67
  * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
68
+ * @param {number | BigNumber | Array} [n=0] Number of decimals
37
69
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
38
70
  */
71
+
39
72
  return typed('floor', {
40
73
  number: function number(x) {
41
74
  if (nearlyEqual(x, round(x), config.epsilon)) {
@@ -44,9 +77,32 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, function (_r
44
77
  return Math.floor(x);
45
78
  }
46
79
  },
80
+ 'number, number': function numberNumber(x, n) {
81
+ if (nearlyEqual(x, round(x, n), config.epsilon)) {
82
+ return round(x, n);
83
+ } else {
84
+ var _$split = "".concat(x, "e").split('e'),
85
+ _$split2 = _slicedToArray(_$split, 2),
86
+ number = _$split2[0],
87
+ exponent = _$split2[1];
88
+
89
+ var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
90
+
91
+ var _$split3 = "".concat(result, "e").split('e');
92
+
93
+ var _$split4 = _slicedToArray(_$split3, 2);
94
+
95
+ number = _$split4[0];
96
+ exponent = _$split4[1];
97
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
98
+ }
99
+ },
47
100
  Complex: function Complex(x) {
48
101
  return x.floor();
49
102
  },
103
+ 'Complex, number': function ComplexNumber(x, n) {
104
+ return x.floor(n);
105
+ },
50
106
  BigNumber: function BigNumber(x) {
51
107
  if (bigNearlyEqual(x, round(x), config.epsilon)) {
52
108
  return round(x);
@@ -54,12 +110,40 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, function (_r
54
110
  return x.floor();
55
111
  }
56
112
  },
113
+ 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
114
+ if (bigNearlyEqual(x, round(x, n), config.epsilon)) {
115
+ return round(x, n);
116
+ } else {
117
+ return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_FLOOR);
118
+ }
119
+ },
57
120
  Fraction: function Fraction(x) {
58
121
  return x.floor();
59
122
  },
123
+ 'Fraction, number': function FractionNumber(x, n) {
124
+ return x.floor(n);
125
+ },
60
126
  'Array | Matrix': function ArrayMatrix(x) {
61
127
  // deep map collection, skip zeros since floor(0) = 0
62
128
  return deepMap(x, this, true);
129
+ },
130
+ 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
131
+ var _this = this;
132
+
133
+ // deep map collection, skip zeros since ceil(0) = 0
134
+ return deepMap(x, function (i) {
135
+ return _this(i, n);
136
+ }, true);
137
+ },
138
+ 'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {
139
+ return algorithm11(x, y, this, false);
140
+ },
141
+ 'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
142
+ return algorithm14(x, y, this, false);
143
+ },
144
+ 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
145
+ // use matrix implementation
146
+ return algorithm14(matrix(y), x, this, true).valueOf();
63
147
  }
64
148
  });
65
149
  });
@@ -43,10 +43,14 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, function (_r
43
43
  *
44
44
  * Examples:
45
45
  *
46
- * math.round(3.2) // returns number 3
47
- * math.round(3.8) // returns number 4
46
+ * math.round(3.22) // returns number 3
47
+ * math.round(3.82) // returns number 4
48
48
  * math.round(-4.2) // returns number -4
49
49
  * math.round(-4.7) // returns number -5
50
+ * math.round(3.22, 1) // returns number 3.2
51
+ * math.round(3.88, 1) // returns number 3.8
52
+ * math.round(-4.21, 1) // returns number -4.2
53
+ * math.round(-4.71, 1) // returns number -4.7
50
54
  * math.round(math.pi, 3) // returns number 3.142
51
55
  * math.round(123.45678, 2) // returns number 123.46
52
56
  *
@@ -0,0 +1,78 @@
1
+ import { factory } from '../../utils/factory';
2
+ import { arraySize } from '../../utils/array';
3
+ var name = 'rotate';
4
+ var dependencies = ['typed', 'multiply', 'rotationMatrix'];
5
+ export var createRotate = /* #__PURE__ */factory(name, dependencies, function (_ref) {
6
+ var typed = _ref.typed,
7
+ multiply = _ref.multiply,
8
+ rotationMatrix = _ref.rotationMatrix;
9
+
10
+ /**
11
+ * Rotate a vector of size 1x2 counter-clockwise by a given angle
12
+ * Rotate a vector of size 1x3 counter-clockwise by a given angle around the given axis
13
+ *
14
+ * Syntax:
15
+ *
16
+ * math.rotate(w, theta)
17
+ * math.rotate(w, theta, v)
18
+ *
19
+ * Examples:
20
+ *
21
+ * math.rotate([11, 12], math.pi / 2) // returns matrix([-12, 11])
22
+ * math.rotate(matrix([11, 12]), math.pi / 2) // returns matrix([-12, 11])
23
+ *
24
+ * math.rotate([1, 0, 0], unit('90deg'), [0, 0, 1]) // returns matrix([0, 1, 0])
25
+ * math.rotate(matrix([1, 0, 0]), unit('90deg'), [0, 0, 1]) // returns matrix([0, 1, 0])
26
+ *
27
+ * math.rotate([1, 0], math.complex(1 + i)) // returns matrix([cos(1 + i) - sin(1 + i), sin(1 + i) + cos(1 + i)])
28
+ *
29
+ * See also:
30
+ *
31
+ * matrix, rotationMatrix
32
+ *
33
+ * @param {Array | Matrix} w Vector to rotate
34
+ * @param {number | BigNumber | Complex | Unit} theta Rotation angle
35
+ * @param {Array | Matrix} [v] Rotation axis
36
+ * @return {Array | Matrix} Multiplication of the rotation matrix and w
37
+ */
38
+ return typed(name, {
39
+ 'Array , number | BigNumber | Complex | Unit': function ArrayNumberBigNumberComplexUnit(w, theta) {
40
+ _validateSize(w, 2);
41
+
42
+ var matrixRes = multiply(rotationMatrix(theta), w);
43
+ return matrixRes.toArray();
44
+ },
45
+ 'Matrix , number | BigNumber | Complex | Unit': function MatrixNumberBigNumberComplexUnit(w, theta) {
46
+ _validateSize(w, 2);
47
+
48
+ return multiply(rotationMatrix(theta), w);
49
+ },
50
+ 'Array, number | BigNumber | Complex | Unit, Array | Matrix': function ArrayNumberBigNumberComplexUnitArrayMatrix(w, theta, v) {
51
+ _validateSize(w, 3);
52
+
53
+ var matrixRes = multiply(rotationMatrix(theta, v), w);
54
+ return matrixRes;
55
+ },
56
+ 'Matrix, number | BigNumber | Complex | Unit, Array | Matrix': function MatrixNumberBigNumberComplexUnitArrayMatrix(w, theta, v) {
57
+ _validateSize(w, 3);
58
+
59
+ return multiply(rotationMatrix(theta, v), w);
60
+ }
61
+ });
62
+
63
+ function _validateSize(v, expectedSize) {
64
+ var actualSize = Array.isArray(v) ? arraySize(v) : v.size();
65
+
66
+ if (actualSize.length > 2) {
67
+ throw new RangeError("Vector must be of dimensions 1x".concat(expectedSize));
68
+ }
69
+
70
+ if (actualSize.length === 2 && actualSize[1] !== 1) {
71
+ throw new RangeError("Vector must be of dimensions 1x".concat(expectedSize));
72
+ }
73
+
74
+ if (actualSize[0] !== expectedSize) {
75
+ throw new RangeError("Vector must be of dimensions 1x".concat(expectedSize));
76
+ }
77
+ }
78
+ });