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
@@ -1,4 +1,4 @@
1
- import { isArray, isDenseMatrix, isMatrix } from '../../../../utils/is';
1
+ import { isArray, isMatrix, isDenseMatrix, isSparseMatrix } from '../../../../utils/is';
2
2
  import { arraySize } from '../../../../utils/array';
3
3
  import { format } from '../../../../utils/string';
4
4
  export function createSolveValidation(_ref) {
@@ -14,135 +14,101 @@ export function createSolveValidation(_ref) {
14
14
  * @return {DenseMatrix} Dense column vector b
15
15
  */
16
16
  return function solveValidation(m, b, copy) {
17
- // matrix size
18
- var size = m.size(); // validate matrix dimensions
19
-
20
- if (size.length !== 2) {
21
- throw new RangeError('Matrix must be two dimensional (size: ' + format(size) + ')');
22
- } // rows & columns
17
+ var mSize = m.size();
23
18
 
19
+ if (mSize.length !== 2) {
20
+ throw new RangeError('Matrix must be two dimensional (size: ' + format(mSize) + ')');
21
+ }
24
22
 
25
- var rows = size[0];
26
- var columns = size[1]; // validate rows & columns
23
+ var rows = mSize[0];
24
+ var columns = mSize[1];
27
25
 
28
26
  if (rows !== columns) {
29
- throw new RangeError('Matrix must be square (size: ' + format(size) + ')');
30
- } // vars
31
-
27
+ throw new RangeError('Matrix must be square (size: ' + format(mSize) + ')');
28
+ }
32
29
 
33
- var data, i, bdata; // check b is matrix
30
+ var data = [];
34
31
 
35
32
  if (isMatrix(b)) {
36
- // matrix size
37
- var msize = b.size(); // vector
33
+ var bSize = b.size();
34
+ var bdata = b._data; // 1-dim vector
38
35
 
39
- if (msize.length === 1) {
40
- // check vector length
41
- if (msize[0] !== rows) {
36
+ if (bSize.length === 1) {
37
+ if (bSize[0] !== rows) {
42
38
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
43
- } // create data array
44
-
39
+ }
45
40
 
46
- data = []; // matrix data (DenseMatrix)
47
-
48
- bdata = b._data; // loop b data
49
-
50
- for (i = 0; i < rows; i++) {
51
- // row array
41
+ for (var i = 0; i < rows; i++) {
52
42
  data[i] = [bdata[i]];
53
- } // return Dense Matrix
54
-
43
+ }
55
44
 
56
45
  return new DenseMatrix({
57
46
  data: data,
58
47
  size: [rows, 1],
59
48
  datatype: b._datatype
60
49
  });
61
- } // two dimensions
50
+ } // 2-dim column
62
51
 
63
52
 
64
- if (msize.length === 2) {
65
- // array must be a column vector
66
- if (msize[0] !== rows || msize[1] !== 1) {
53
+ if (bSize.length === 2) {
54
+ if (bSize[0] !== rows || bSize[1] !== 1) {
67
55
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
68
- } // check matrix type
69
-
56
+ }
70
57
 
71
58
  if (isDenseMatrix(b)) {
72
- // check a copy is needed
73
59
  if (copy) {
74
- // create data array
75
- data = []; // matrix data (DenseMatrix)
76
-
77
- bdata = b._data; // loop b data
78
-
79
- for (i = 0; i < rows; i++) {
80
- // row array
81
- data[i] = [bdata[i][0]];
82
- } // return Dense Matrix
60
+ data = [];
83
61
 
62
+ for (var _i = 0; _i < rows; _i++) {
63
+ data[_i] = [bdata[_i][0]];
64
+ }
84
65
 
85
66
  return new DenseMatrix({
86
67
  data: data,
87
68
  size: [rows, 1],
88
69
  datatype: b._datatype
89
70
  });
90
- } // b is already a column vector
91
-
71
+ }
92
72
 
93
73
  return b;
94
- } // create data array
95
-
96
-
97
- data = [];
98
-
99
- for (i = 0; i < rows; i++) {
100
- data[i] = [0];
101
- } // sparse matrix arrays
102
-
103
-
104
- var values = b._values;
105
- var index = b._index;
106
- var ptr = b._ptr; // loop values in column 0
107
-
108
- for (var k1 = ptr[1], k = ptr[0]; k < k1; k++) {
109
- // row
110
- i = index[k]; // add to data
111
-
112
- data[i][0] = values[k];
113
- } // return Dense Matrix
114
-
115
-
116
- return new DenseMatrix({
117
- data: data,
118
- size: [rows, 1],
119
- datatype: b._datatype
120
- });
121
- } // throw error
122
-
123
-
124
- throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
125
- } // check b is array
74
+ }
75
+
76
+ if (isSparseMatrix(b)) {
77
+ for (var _i2 = 0; _i2 < rows; _i2++) {
78
+ data[_i2] = [0];
79
+ }
80
+
81
+ var values = b._values;
82
+ var index = b._index;
83
+ var ptr = b._ptr;
84
+
85
+ for (var k1 = ptr[1], k = ptr[0]; k < k1; k++) {
86
+ var _i3 = index[k];
87
+ data[_i3][0] = values[k];
88
+ }
89
+
90
+ return new DenseMatrix({
91
+ data: data,
92
+ size: [rows, 1],
93
+ datatype: b._datatype
94
+ });
95
+ }
96
+ }
126
97
 
98
+ throw new RangeError('Dimension mismatch. The right side has to be either 1- or 2-dimensional vector.');
99
+ }
127
100
 
128
101
  if (isArray(b)) {
129
- // size
130
- var asize = arraySize(b); // check matrix dimensions, vector
102
+ var bsize = arraySize(b);
131
103
 
132
- if (asize.length === 1) {
133
- // check vector length
134
- if (asize[0] !== rows) {
104
+ if (bsize.length === 1) {
105
+ if (bsize[0] !== rows) {
135
106
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
136
- } // create data array
137
-
138
-
139
- data = []; // loop b
140
-
141
- for (i = 0; i < rows; i++) {
142
- // row array
143
- data[i] = [b[i]];
144
- } // return Dense Matrix
107
+ }
145
108
 
109
+ for (var _i4 = 0; _i4 < rows; _i4++) {
110
+ data[_i4] = [b[_i4]];
111
+ }
146
112
 
147
113
  return new DenseMatrix({
148
114
  data: data,
@@ -150,29 +116,22 @@ export function createSolveValidation(_ref) {
150
116
  });
151
117
  }
152
118
 
153
- if (asize.length === 2) {
154
- // array must be a column vector
155
- if (asize[0] !== rows || asize[1] !== 1) {
119
+ if (bsize.length === 2) {
120
+ if (bsize[0] !== rows || bsize[1] !== 1) {
156
121
  throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
157
- } // create data array
158
-
159
-
160
- data = []; // loop b data
161
-
162
- for (i = 0; i < rows; i++) {
163
- // row array
164
- data[i] = [b[i][0]];
165
- } // return Dense Matrix
122
+ }
166
123
 
124
+ for (var _i5 = 0; _i5 < rows; _i5++) {
125
+ data[_i5] = [b[_i5][0]];
126
+ }
167
127
 
168
128
  return new DenseMatrix({
169
129
  data: data,
170
130
  size: [rows, 1]
171
131
  });
172
- } // throw error
173
-
132
+ }
174
133
 
175
- throw new RangeError('Dimension mismatch. Matrix columns must match vector length.');
134
+ throw new RangeError('Dimension mismatch. The right side has to be either 1- or 2-dimensional vector.');
176
135
  }
177
136
  };
178
137
  }
@@ -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
  });
@@ -78,10 +78,19 @@ export var createMod = /* #__PURE__ */factory(name, dependencies, function (_ref
78
78
  return typed(name, {
79
79
  'number, number': modNumber,
80
80
  'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
81
+ if (y.isNeg()) {
82
+ throw new Error('Cannot calculate mod for a negative divisor');
83
+ }
84
+
81
85
  return y.isZero() ? x : x.mod(y);
82
86
  },
83
87
  'Fraction, Fraction': function FractionFraction(x, y) {
84
- return x.mod(y);
88
+ if (y.compare(0) < 0) {
89
+ throw new Error('Cannot calculate mod for a negative divisor');
90
+ } // Workaround suggested in Fraction.js library to calculate correct modulo for negative dividend
91
+
92
+
93
+ return x.compare(0) >= 0 ? x.mod(y) : x.mod(y).add(y).mod(y);
85
94
  },
86
95
  'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {
87
96
  return algorithm05(x, y, this, false);
@@ -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
  *