mathjs 10.4.2 → 10.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 (130) hide show
  1. package/HISTORY.md +36 -0
  2. package/docs/datatypes/matrices.md +17 -0
  3. package/docs/expressions/syntax.md +11 -4
  4. package/docs/reference/functions/fix.md +1 -0
  5. package/docs/reference/functions/floor.md +4 -0
  6. package/docs/reference/functions/lgamma.md +46 -0
  7. package/docs/reference/functions/pinv.md +44 -0
  8. package/docs/reference/functions/pow.md +8 -2
  9. package/docs/reference/functions/resolve.md +2 -2
  10. package/docs/reference/functions/simplifyConstant.md +52 -0
  11. package/docs/reference/functions/stirlingS2.md +5 -1
  12. package/docs/reference/functions.md +2 -0
  13. package/lib/browser/math.js +6 -6
  14. package/lib/browser/math.js.map +1 -1
  15. package/lib/cjs/entry/dependenciesAny/dependenciesCeil.generated.js +6 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesDet.generated.js +5 -2
  17. package/lib/cjs/entry/dependenciesAny/dependenciesFix.generated.js +9 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesFloor.generated.js +6 -0
  19. package/lib/cjs/entry/dependenciesAny/dependenciesIndexNode.generated.js +0 -3
  20. package/lib/cjs/entry/dependenciesAny/dependenciesLgamma.generated.js +23 -0
  21. package/lib/cjs/entry/dependenciesAny/dependenciesPinv.generated.js +53 -0
  22. package/lib/cjs/entry/dependenciesAny/dependenciesPow.generated.js +3 -0
  23. package/lib/cjs/entry/dependenciesAny/dependenciesStirlingS2.generated.js +6 -0
  24. package/lib/cjs/entry/dependenciesAny.generated.js +16 -0
  25. package/lib/cjs/entry/dependenciesNumber/dependenciesCeil.generated.js +3 -0
  26. package/lib/cjs/entry/dependenciesNumber/dependenciesFix.generated.js +6 -0
  27. package/lib/cjs/entry/dependenciesNumber/dependenciesFloor.generated.js +3 -0
  28. package/lib/cjs/entry/dependenciesNumber/dependenciesIndexNode.generated.js +0 -3
  29. package/lib/cjs/entry/dependenciesNumber/dependenciesLgamma.generated.js +20 -0
  30. package/lib/cjs/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +3 -0
  31. package/lib/cjs/entry/dependenciesNumber.generated.js +8 -0
  32. package/lib/cjs/entry/impureFunctionsAny.generated.js +96 -95
  33. package/lib/cjs/entry/impureFunctionsNumber.generated.js +11 -11
  34. package/lib/cjs/entry/pureFunctionsAny.generated.js +227 -196
  35. package/lib/cjs/entry/pureFunctionsNumber.generated.js +36 -25
  36. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +6 -0
  37. package/lib/cjs/expression/embeddedDocs/function/arithmetic/pow.js +1 -1
  38. package/lib/cjs/expression/embeddedDocs/function/matrix/pinv.js +15 -0
  39. package/lib/cjs/expression/embeddedDocs/function/probability/lgamma.js +15 -0
  40. package/lib/cjs/expression/node/IndexNode.js +26 -61
  41. package/lib/cjs/factoriesAny.js +16 -0
  42. package/lib/cjs/factoriesNumber.js +44 -27
  43. package/lib/cjs/function/algebra/resolve.js +3 -3
  44. package/lib/cjs/function/arithmetic/ceil.js +75 -39
  45. package/lib/cjs/function/arithmetic/fix.js +54 -16
  46. package/lib/cjs/function/arithmetic/floor.js +79 -37
  47. package/lib/cjs/function/arithmetic/nthRoot.js +1 -3
  48. package/lib/cjs/function/arithmetic/pow.js +25 -6
  49. package/lib/cjs/function/arithmetic/round.js +27 -47
  50. package/lib/cjs/function/combinatorics/stirlingS2.js +42 -12
  51. package/lib/cjs/function/matrix/det.js +37 -31
  52. package/lib/cjs/function/matrix/pinv.js +223 -0
  53. package/lib/cjs/function/probability/lgamma.js +146 -0
  54. package/lib/cjs/header.js +2 -2
  55. package/lib/cjs/plain/number/arithmetic.js +17 -31
  56. package/lib/cjs/plain/number/probability.js +43 -3
  57. package/lib/cjs/type/matrix/function/sparse.js +6 -0
  58. package/lib/cjs/utils/latex.js +6 -0
  59. package/lib/cjs/utils/lruQueue.js +1 -3
  60. package/lib/cjs/utils/number.js +17 -2
  61. package/lib/cjs/utils/object.js +3 -1
  62. package/lib/cjs/version.js +1 -1
  63. package/lib/esm/entry/dependenciesAny/dependenciesCeil.generated.js +4 -0
  64. package/lib/esm/entry/dependenciesAny/dependenciesDet.generated.js +4 -2
  65. package/lib/esm/entry/dependenciesAny/dependenciesFix.generated.js +6 -0
  66. package/lib/esm/entry/dependenciesAny/dependenciesFloor.generated.js +4 -0
  67. package/lib/esm/entry/dependenciesAny/dependenciesIndexNode.generated.js +0 -2
  68. package/lib/esm/entry/dependenciesAny/dependenciesLgamma.generated.js +12 -0
  69. package/lib/esm/entry/dependenciesAny/dependenciesPinv.generated.js +32 -0
  70. package/lib/esm/entry/dependenciesAny/dependenciesPow.generated.js +2 -0
  71. package/lib/esm/entry/dependenciesAny/dependenciesStirlingS2.generated.js +4 -0
  72. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  73. package/lib/esm/entry/dependenciesNumber/dependenciesCeil.generated.js +2 -0
  74. package/lib/esm/entry/dependenciesNumber/dependenciesFix.generated.js +4 -0
  75. package/lib/esm/entry/dependenciesNumber/dependenciesFloor.generated.js +2 -0
  76. package/lib/esm/entry/dependenciesNumber/dependenciesIndexNode.generated.js +0 -2
  77. package/lib/esm/entry/dependenciesNumber/dependenciesLgamma.generated.js +10 -0
  78. package/lib/esm/entry/dependenciesNumber/dependenciesStirlingS2.generated.js +2 -0
  79. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  80. package/lib/esm/entry/impureFunctionsAny.generated.js +90 -89
  81. package/lib/esm/entry/impureFunctionsNumber.generated.js +12 -12
  82. package/lib/esm/entry/pureFunctionsAny.generated.js +191 -162
  83. package/lib/esm/entry/pureFunctionsNumber.generated.js +24 -14
  84. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +4 -0
  85. package/lib/esm/expression/embeddedDocs/function/arithmetic/pow.js +1 -1
  86. package/lib/esm/expression/embeddedDocs/function/matrix/pinv.js +8 -0
  87. package/lib/esm/expression/embeddedDocs/function/probability/lgamma.js +8 -0
  88. package/lib/esm/expression/node/BlockNode.js +3 -3
  89. package/lib/esm/expression/node/IndexNode.js +22 -59
  90. package/lib/esm/expression/parse.js +5 -5
  91. package/lib/esm/factoriesAny.js +2 -0
  92. package/lib/esm/factoriesNumber.js +21 -8
  93. package/lib/esm/function/algebra/decomposition/qr.js +2 -2
  94. package/lib/esm/function/algebra/resolve.js +3 -3
  95. package/lib/esm/function/algebra/solver/utils/solveValidation.js +5 -5
  96. package/lib/esm/function/algebra/sparse/csChol.js +2 -2
  97. package/lib/esm/function/algebra/sparse/csLeaf.js +2 -2
  98. package/lib/esm/function/algebra/sparse/csLu.js +3 -3
  99. package/lib/esm/function/arithmetic/ceil.js +61 -24
  100. package/lib/esm/function/arithmetic/fix.js +51 -13
  101. package/lib/esm/function/arithmetic/floor.js +65 -23
  102. package/lib/esm/function/arithmetic/nthRoot.js +1 -3
  103. package/lib/esm/function/arithmetic/nthRoots.js +1 -1
  104. package/lib/esm/function/arithmetic/pow.js +25 -6
  105. package/lib/esm/function/arithmetic/round.js +25 -43
  106. package/lib/esm/function/combinatorics/stirlingS2.js +41 -12
  107. package/lib/esm/function/matrix/det.js +35 -31
  108. package/lib/esm/function/matrix/expm.js +2 -2
  109. package/lib/esm/function/matrix/pinv.js +205 -0
  110. package/lib/esm/function/probability/gamma.js +1 -1
  111. package/lib/esm/function/probability/lgamma.js +137 -0
  112. package/lib/esm/function/string/bin.js +1 -1
  113. package/lib/esm/function/string/hex.js +1 -1
  114. package/lib/esm/function/string/oct.js +1 -1
  115. package/lib/esm/plain/number/arithmetic.js +16 -20
  116. package/lib/esm/plain/number/probability.js +33 -1
  117. package/lib/esm/type/complex/Complex.js +2 -2
  118. package/lib/esm/type/matrix/DenseMatrix.js +2 -2
  119. package/lib/esm/type/matrix/FibonacciHeap.js +2 -2
  120. package/lib/esm/type/matrix/SparseMatrix.js +13 -13
  121. package/lib/esm/type/matrix/function/sparse.js +6 -0
  122. package/lib/esm/type/unit/Unit.js +7 -7
  123. package/lib/esm/utils/latex.js +6 -0
  124. package/lib/esm/utils/lruQueue.js +1 -2
  125. package/lib/esm/utils/number.js +16 -4
  126. package/lib/esm/utils/object.js +3 -1
  127. package/lib/esm/version.js +1 -1
  128. package/package.json +20 -9
  129. package/types/index.d.ts +1806 -1363
  130. package/types/index.ts +705 -264
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.createCeil = void 0;
8
+ exports.createCeilNumber = exports.createCeil = void 0;
9
9
 
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
 
@@ -19,27 +19,73 @@ var _number = require("../../utils/number.js");
19
19
 
20
20
  var _nearlyEqual = require("../../utils/bignumber/nearlyEqual.js");
21
21
 
22
- var _index = require("../../plain/number/index.js");
23
-
24
22
  var _algorithm = require("../../type/matrix/utils/algorithm11.js");
25
23
 
26
- var _algorithm2 = require("../../type/matrix/utils/algorithm14.js");
24
+ var _algorithm2 = require("../../type/matrix/utils/algorithm12.js");
25
+
26
+ var _algorithm3 = require("../../type/matrix/utils/algorithm14.js");
27
27
 
28
28
  var name = 'ceil';
29
- var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
30
- var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
29
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];
30
+ var createCeilNumber = /* #__PURE__ */(0, _factory.factory)(name, ['typed', 'config', 'round'], function (_ref) {
31
31
  var typed = _ref.typed,
32
32
  config = _ref.config,
33
- round = _ref.round,
34
- matrix = _ref.matrix,
35
- equalScalar = _ref.equalScalar;
33
+ round = _ref.round;
34
+ return typed(name, {
35
+ number: function number(x) {
36
+ if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
37
+ return round(x);
38
+ } else {
39
+ return Math.ceil(x);
40
+ }
41
+ },
42
+ 'number, number': function numberNumber(x, n) {
43
+ if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
44
+ return round(x, n);
45
+ } else {
46
+ var _$split = "".concat(x, "e").split('e'),
47
+ _$split2 = (0, _slicedToArray2.default)(_$split, 2),
48
+ number = _$split2[0],
49
+ exponent = _$split2[1];
50
+
51
+ var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
52
+
53
+ var _$split3 = "".concat(result, "e").split('e');
54
+
55
+ var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
56
+
57
+ number = _$split4[0];
58
+ exponent = _$split4[1];
59
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
60
+ }
61
+ }
62
+ });
63
+ });
64
+ exports.createCeilNumber = createCeilNumber;
65
+ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref2) {
66
+ var typed = _ref2.typed,
67
+ config = _ref2.config,
68
+ round = _ref2.round,
69
+ matrix = _ref2.matrix,
70
+ equalScalar = _ref2.equalScalar,
71
+ zeros = _ref2.zeros,
72
+ DenseMatrix = _ref2.DenseMatrix;
36
73
  var algorithm11 = (0, _algorithm.createAlgorithm11)({
37
74
  typed: typed,
38
75
  equalScalar: equalScalar
39
76
  });
40
- var algorithm14 = (0, _algorithm2.createAlgorithm14)({
77
+ var algorithm12 = (0, _algorithm2.createAlgorithm12)({
78
+ typed: typed,
79
+ DenseMatrix: DenseMatrix
80
+ });
81
+ var algorithm14 = (0, _algorithm3.createAlgorithm14)({
41
82
  typed: typed
42
83
  });
84
+ var ceilNumber = createCeilNumber({
85
+ typed: typed,
86
+ config: config,
87
+ round: round
88
+ });
43
89
  /**
44
90
  * Round a value towards plus infinity
45
91
  * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
@@ -79,39 +125,17 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
79
125
  */
80
126
 
81
127
  return typed('ceil', {
82
- number: function number(x) {
83
- if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
84
- return round(x);
85
- } else {
86
- return (0, _index.ceilNumber)(x);
87
- }
88
- },
89
- 'number, number': function numberNumber(x, n) {
90
- if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
91
- return round(x, n);
92
- } else {
93
- var _$split = "".concat(x, "e").split('e'),
94
- _$split2 = (0, _slicedToArray2.default)(_$split, 2),
95
- number = _$split2[0],
96
- exponent = _$split2[1];
97
-
98
- var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
99
-
100
- var _$split3 = "".concat(result, "e").split('e');
101
-
102
- var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
103
-
104
- number = _$split4[0];
105
- exponent = _$split4[1];
106
- return Number("".concat(number, "e").concat(Number(exponent) - n));
107
- }
108
- },
128
+ number: ceilNumber.signatures.number,
129
+ 'number,number': ceilNumber.signatures['number,number'],
109
130
  Complex: function Complex(x) {
110
131
  return x.ceil();
111
132
  },
112
133
  'Complex, number': function ComplexNumber(x, n) {
113
134
  return x.ceil(n);
114
135
  },
136
+ 'Complex, BigNumber': function ComplexBigNumber(x, n) {
137
+ return x.ceil(n.toNumber());
138
+ },
115
139
  BigNumber: function BigNumber(x) {
116
140
  if ((0, _nearlyEqual.nearlyEqual)(x, round(x), config.epsilon)) {
117
141
  return round(x);
@@ -132,11 +156,14 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
132
156
  'Fraction, number': function FractionNumber(x, n) {
133
157
  return x.ceil(n);
134
158
  },
159
+ 'Fraction, BigNumber': function FractionBigNumber(x, n) {
160
+ return x.ceil(n.toNumber());
161
+ },
135
162
  'Array | Matrix': function ArrayMatrix(x) {
136
163
  // deep map collection, skip zeros since ceil(0) = 0
137
164
  return (0, _collection.deepMap)(x, this, true);
138
165
  },
139
- 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
166
+ 'Array, number | BigNumber': function ArrayNumberBigNumber(x, n) {
140
167
  var _this = this;
141
168
 
142
169
  // deep map collection, skip zeros since ceil(0) = 0
@@ -150,9 +177,18 @@ var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functi
150
177
  'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
151
178
  return algorithm14(x, y, this, false);
152
179
  },
153
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
180
+ 'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {
154
181
  // use matrix implementation
155
182
  return algorithm14(matrix(y), x, this, true).valueOf();
183
+ },
184
+ 'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {
185
+ if (equalScalar(x, 0)) return zeros(y.size(), y.storage());
186
+
187
+ if (y.storage() === 'dense') {
188
+ return algorithm14(y, x, this, true);
189
+ }
190
+
191
+ return algorithm12(y, x, this, true);
156
192
  }
157
193
  });
158
194
  });
@@ -3,25 +3,53 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createFix = void 0;
6
+ exports.createFixNumber = exports.createFix = void 0;
7
7
 
8
8
  var _factory = require("../../utils/factory.js");
9
9
 
10
10
  var _collection = require("../../utils/collection.js");
11
11
 
12
- var _algorithm = require("../../type/matrix/utils/algorithm14.js");
12
+ var _algorithm = require("../../type/matrix/utils/algorithm12.js");
13
+
14
+ var _algorithm2 = require("../../type/matrix/utils/algorithm14.js");
13
15
 
14
16
  var name = 'fix';
15
- var dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor'];
16
- var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
17
+ var dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor', 'equalScalar', 'zeros', 'DenseMatrix'];
18
+ var createFixNumber = /* #__PURE__ */(0, _factory.factory)(name, ['typed', 'ceil', 'floor'], function (_ref) {
17
19
  var typed = _ref.typed,
18
- _Complex = _ref.Complex,
19
- matrix = _ref.matrix,
20
20
  ceil = _ref.ceil,
21
21
  floor = _ref.floor;
22
- var algorithm14 = (0, _algorithm.createAlgorithm14)({
22
+ return typed(name, {
23
+ number: function number(x) {
24
+ return x > 0 ? floor(x) : ceil(x);
25
+ },
26
+ 'number, number': function numberNumber(x, n) {
27
+ return x > 0 ? floor(x, n) : ceil(x, n);
28
+ }
29
+ });
30
+ });
31
+ exports.createFixNumber = createFixNumber;
32
+ var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref2) {
33
+ var typed = _ref2.typed,
34
+ _Complex = _ref2.Complex,
35
+ matrix = _ref2.matrix,
36
+ ceil = _ref2.ceil,
37
+ floor = _ref2.floor,
38
+ equalScalar = _ref2.equalScalar,
39
+ zeros = _ref2.zeros,
40
+ DenseMatrix = _ref2.DenseMatrix;
41
+ var algorithm12 = (0, _algorithm.createAlgorithm12)({
42
+ typed: typed,
43
+ DenseMatrix: DenseMatrix
44
+ });
45
+ var algorithm14 = (0, _algorithm2.createAlgorithm14)({
23
46
  typed: typed
24
47
  });
48
+ var fixNumber = createFixNumber({
49
+ typed: typed,
50
+ ceil: ceil,
51
+ floor: floor
52
+ });
25
53
  /**
26
54
  * Round a value towards zero.
27
55
  * For matrices, the function is evaluated element wise.
@@ -29,6 +57,7 @@ var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
29
57
  * Syntax:
30
58
  *
31
59
  * math.fix(x)
60
+ * math.fix(x,n)
32
61
  *
33
62
  * Examples:
34
63
  *
@@ -59,16 +88,16 @@ var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
59
88
  */
60
89
 
61
90
  return typed('fix', {
62
- number: function number(x) {
63
- return x > 0 ? floor(x) : ceil(x);
64
- },
65
- 'number, number | BigNumber': function numberNumberBigNumber(x, n) {
66
- return x > 0 ? floor(x, n) : ceil(x, n);
67
- },
91
+ number: fixNumber.signatures.number,
92
+ 'number, number | BigNumber': fixNumber.signatures['number,number'],
68
93
  Complex: function Complex(x) {
69
94
  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));
70
95
  },
71
- 'Complex, number | BigNumber': function ComplexNumberBigNumber(x, n) {
96
+ 'Complex, number': function ComplexNumber(x, n) {
97
+ 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));
98
+ },
99
+ 'Complex, BigNumber': function ComplexBigNumber(x, bn) {
100
+ var n = bn.toNumber();
72
101
  return new _Complex(x.re > 0 ? floor(x.re, n) : ceil(x.re, n), x.im > 0 ? floor(x.im, n) : ceil(x.im, n));
73
102
  },
74
103
  BigNumber: function BigNumber(x) {
@@ -81,7 +110,7 @@ var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
81
110
  return x.s < 0 ? x.ceil() : x.floor();
82
111
  },
83
112
  'Fraction, number | BigNumber': function FractionNumberBigNumber(x, n) {
84
- return x.s < 0 ? x.ceil(n) : x.floor(n);
113
+ return x.s < 0 ? ceil(x, n) : floor(x, n);
85
114
  },
86
115
  'Array | Matrix': function ArrayMatrix(x) {
87
116
  // deep map collection, skip zeros since fix(0) = 0
@@ -95,9 +124,18 @@ var createFix = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
95
124
  return _this(i, n);
96
125
  }, true);
97
126
  },
98
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
127
+ 'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {
99
128
  // use matrix implementation
100
129
  return algorithm14(matrix(y), x, this, true).valueOf();
130
+ },
131
+ 'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {
132
+ if (equalScalar(x, 0)) return zeros(y.size(), y.storage());
133
+
134
+ if (y.storage() === 'dense') {
135
+ return algorithm14(y, x, this, true);
136
+ }
137
+
138
+ return algorithm12(y, x, this, true);
101
139
  }
102
140
  });
103
141
  });
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.createFloor = void 0;
8
+ exports.createFloorNumber = exports.createFloor = void 0;
9
9
 
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
 
@@ -21,23 +21,71 @@ var _nearlyEqual = require("../../utils/bignumber/nearlyEqual.js");
21
21
 
22
22
  var _algorithm = require("../../type/matrix/utils/algorithm11.js");
23
23
 
24
- var _algorithm2 = require("../../type/matrix/utils/algorithm14.js");
24
+ var _algorithm2 = require("../../type/matrix/utils/algorithm12.js");
25
+
26
+ var _algorithm3 = require("../../type/matrix/utils/algorithm14.js");
25
27
 
26
28
  var name = 'floor';
27
- var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
28
- var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
29
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];
30
+ var createFloorNumber = /* #__PURE__ */(0, _factory.factory)(name, ['typed', 'config', 'round'], function (_ref) {
29
31
  var typed = _ref.typed,
30
32
  config = _ref.config,
31
- round = _ref.round,
32
- matrix = _ref.matrix,
33
- equalScalar = _ref.equalScalar;
33
+ round = _ref.round;
34
+ return typed(name, {
35
+ number: function number(x) {
36
+ if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
37
+ return round(x);
38
+ } else {
39
+ return Math.floor(x);
40
+ }
41
+ },
42
+ 'number, number': function numberNumber(x, n) {
43
+ if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
44
+ return round(x, n);
45
+ } else {
46
+ var _$split = "".concat(x, "e").split('e'),
47
+ _$split2 = (0, _slicedToArray2.default)(_$split, 2),
48
+ number = _$split2[0],
49
+ exponent = _$split2[1];
50
+
51
+ var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
52
+
53
+ var _$split3 = "".concat(result, "e").split('e');
54
+
55
+ var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
56
+
57
+ number = _$split4[0];
58
+ exponent = _$split4[1];
59
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
60
+ }
61
+ }
62
+ });
63
+ });
64
+ exports.createFloorNumber = createFloorNumber;
65
+ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref2) {
66
+ var typed = _ref2.typed,
67
+ config = _ref2.config,
68
+ round = _ref2.round,
69
+ matrix = _ref2.matrix,
70
+ equalScalar = _ref2.equalScalar,
71
+ zeros = _ref2.zeros,
72
+ DenseMatrix = _ref2.DenseMatrix;
34
73
  var algorithm11 = (0, _algorithm.createAlgorithm11)({
35
74
  typed: typed,
36
75
  equalScalar: equalScalar
37
76
  });
38
- var algorithm14 = (0, _algorithm2.createAlgorithm14)({
77
+ var algorithm12 = (0, _algorithm2.createAlgorithm12)({
78
+ typed: typed,
79
+ DenseMatrix: DenseMatrix
80
+ });
81
+ var algorithm14 = (0, _algorithm3.createAlgorithm14)({
39
82
  typed: typed
40
83
  });
84
+ var floorNumber = createFloorNumber({
85
+ typed: typed,
86
+ config: config,
87
+ round: round
88
+ });
41
89
  /**
42
90
  * Round a value towards minus infinity.
43
91
  * For matrices, the function is evaluated element wise.
@@ -66,6 +114,10 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
66
114
  * math.floor([3.2, 3.8, -4.7]) // returns Array [3, 3, -5]
67
115
  * math.floor([3.21, 3.82, -4.71], 1) // returns Array [3.2, 3.8, -4.8]
68
116
  *
117
+ * math.floor(math.tau, [2, 3]) // returns Array [6.28, 6.283]
118
+ *
119
+ * // Note that floor(array, array) currently not implemented.
120
+ *
69
121
  * See also:
70
122
  *
71
123
  * ceil, fix, round
@@ -76,39 +128,17 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
76
128
  */
77
129
 
78
130
  return typed('floor', {
79
- number: function number(x) {
80
- if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
81
- return round(x);
82
- } else {
83
- return Math.floor(x);
84
- }
85
- },
86
- 'number, number': function numberNumber(x, n) {
87
- if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
88
- return round(x, n);
89
- } else {
90
- var _$split = "".concat(x, "e").split('e'),
91
- _$split2 = (0, _slicedToArray2.default)(_$split, 2),
92
- number = _$split2[0],
93
- exponent = _$split2[1];
94
-
95
- var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
96
-
97
- var _$split3 = "".concat(result, "e").split('e');
98
-
99
- var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
100
-
101
- number = _$split4[0];
102
- exponent = _$split4[1];
103
- return Number("".concat(number, "e").concat(Number(exponent) - n));
104
- }
105
- },
131
+ number: floorNumber.signatures.number,
132
+ 'number,number': floorNumber.signatures['number,number'],
106
133
  Complex: function Complex(x) {
107
134
  return x.floor();
108
135
  },
109
136
  'Complex, number': function ComplexNumber(x, n) {
110
137
  return x.floor(n);
111
138
  },
139
+ 'Complex, BigNumber': function ComplexBigNumber(x, n) {
140
+ return x.floor(n.toNumber());
141
+ },
112
142
  BigNumber: function BigNumber(x) {
113
143
  if ((0, _nearlyEqual.nearlyEqual)(x, round(x), config.epsilon)) {
114
144
  return round(x);
@@ -129,11 +159,14 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
129
159
  'Fraction, number': function FractionNumber(x, n) {
130
160
  return x.floor(n);
131
161
  },
162
+ 'Fraction, BigNumber': function FractionBigNumber(x, n) {
163
+ return x.floor(n.toNumber());
164
+ },
132
165
  'Array | Matrix': function ArrayMatrix(x) {
133
166
  // deep map collection, skip zeros since floor(0) = 0
134
167
  return (0, _collection.deepMap)(x, this, true);
135
168
  },
136
- 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
169
+ 'Array, number | BigNumber': function ArrayNumberBigNumber(x, n) {
137
170
  var _this = this;
138
171
 
139
172
  // deep map collection, skip zeros since ceil(0) = 0
@@ -147,9 +180,18 @@ var createFloor = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
147
180
  'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
148
181
  return algorithm14(x, y, this, false);
149
182
  },
150
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
183
+ 'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {
151
184
  // use matrix implementation
152
185
  return algorithm14(matrix(y), x, this, true).valueOf();
186
+ },
187
+ 'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {
188
+ if (equalScalar(x, 0)) return zeros(y.size(), y.storage());
189
+
190
+ if (y.storage() === 'dense') {
191
+ return algorithm14(y, x, this, true);
192
+ }
193
+
194
+ return algorithm12(y, x, this, true);
153
195
  }
154
196
  });
155
197
  });
@@ -81,9 +81,7 @@ var createNthRoot = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fun
81
81
 
82
82
  var complexErr = '' + 'Complex number not supported in function nthRoot. ' + 'Use nthRoots instead.';
83
83
  return typed(name, {
84
- number: function number(x) {
85
- return (0, _index.nthRootNumber)(x, 2);
86
- },
84
+ number: _index.nthRootNumber,
87
85
  'number, number': _index.nthRootNumber,
88
86
  BigNumber: function BigNumber(x) {
89
87
  return _bigNthRoot(x, new _BigNumber(2));
@@ -14,21 +14,25 @@ var _array = require("../../utils/array.js");
14
14
  var _index = require("../../plain/number/index.js");
15
15
 
16
16
  var name = 'pow';
17
- var dependencies = ['typed', 'config', 'identity', 'multiply', 'matrix', 'fraction', 'number', 'Complex'];
17
+ var dependencies = ['typed', 'config', 'identity', 'multiply', 'matrix', 'inv', 'fraction', 'number', 'Complex'];
18
18
  var createPow = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
19
19
  var typed = _ref.typed,
20
20
  config = _ref.config,
21
21
  identity = _ref.identity,
22
22
  multiply = _ref.multiply,
23
23
  matrix = _ref.matrix,
24
+ inv = _ref.inv,
24
25
  number = _ref.number,
25
26
  fraction = _ref.fraction,
26
27
  Complex = _ref.Complex;
27
28
 
28
29
  /**
29
30
  * Calculates the power of x to y, `x ^ y`.
30
- * Matrix exponentiation is supported for square matrices `x`, and positive
31
- * integer exponents `y`.
31
+ *
32
+ * Matrix exponentiation is supported for square matrices `x` and integers `y`:
33
+ * when `y` is nonnegative, `x` may be any square matrix; and when `y` is
34
+ * negative, `x` must be invertible, and then this function returns
35
+ * inv(x)^(-y).
32
36
  *
33
37
  * For cubic roots of negative numbers, the function returns the principal
34
38
  * root by default. In order to let the function return the real root,
@@ -49,6 +53,9 @@ var createPow = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
49
53
  * const b = [[1, 2], [4, 3]]
50
54
  * math.pow(b, 2) // returns Array [[9, 8], [16, 17]]
51
55
  *
56
+ * const c = [[1, 2], [4, 3]]
57
+ * math.pow(c, -1) // returns Array [[-0.6, 0.4], [0.8, -0.2]]
58
+ *
52
59
  * See also:
53
60
  *
54
61
  * multiply, sqrt, cbrt, nthRoot
@@ -144,15 +151,15 @@ var createPow = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
144
151
  /**
145
152
  * Calculate the power of a 2d array
146
153
  * @param {Array} x must be a 2 dimensional, square matrix
147
- * @param {number} y a positive, integer value
154
+ * @param {number} y a integer value (positive if `x` is not invertible)
148
155
  * @returns {Array}
149
156
  * @private
150
157
  */
151
158
 
152
159
 
153
160
  function _powArray(x, y) {
154
- if (!(0, _number.isInteger)(y) || y < 0) {
155
- throw new TypeError('For A^b, b must be a positive integer (value is ' + y + ')');
161
+ if (!(0, _number.isInteger)(y)) {
162
+ throw new TypeError('For A^b, b must be an integer (value is ' + y + ')');
156
163
  } // verify that A is a 2 dimensional square matrix
157
164
 
158
165
 
@@ -166,6 +173,18 @@ var createPow = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
166
173
  throw new Error('For A^b, A must be square (size is ' + s[0] + 'x' + s[1] + ')');
167
174
  }
168
175
 
176
+ if (y < 0) {
177
+ try {
178
+ return _powArray(inv(x), -y);
179
+ } catch (error) {
180
+ if (error.message === 'Cannot calculate inverse, determinant is zero') {
181
+ throw new TypeError('For A^b, when A is not invertible, b must be a positive integer (value is ' + y + ')');
182
+ }
183
+
184
+ throw error;
185
+ }
186
+ }
187
+
169
188
  var res = identity(s[0]).valueOf();
170
189
  var px = x;
171
190