mathjs 7.2.0 → 7.5.1

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 (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
  *