mathjs 10.4.2 → 10.5.1

Sign up to get free protection for your applications and to get access to all the features.
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