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
@@ -3,26 +3,63 @@ import { factory } from '../../utils/factory.js';
3
3
  import { deepMap } from '../../utils/collection.js';
4
4
  import { nearlyEqual } from '../../utils/number.js';
5
5
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
6
- import { ceilNumber } from '../../plain/number/index.js';
7
6
  import { createAlgorithm11 } from '../../type/matrix/utils/algorithm11.js';
7
+ import { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';
8
8
  import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
9
9
  var name = 'ceil';
10
- var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
11
- export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref => {
10
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];
11
+ export var createCeilNumber = /* #__PURE__ */factory(name, ['typed', 'config', 'round'], _ref => {
12
+ var {
13
+ typed,
14
+ config,
15
+ round
16
+ } = _ref;
17
+ return typed(name, {
18
+ number: function number(x) {
19
+ if (nearlyEqual(x, round(x), config.epsilon)) {
20
+ return round(x);
21
+ } else {
22
+ return Math.ceil(x);
23
+ }
24
+ },
25
+ 'number, number': function numberNumber(x, n) {
26
+ if (nearlyEqual(x, round(x, n), config.epsilon)) {
27
+ return round(x, n);
28
+ } else {
29
+ var [number, exponent] = "".concat(x, "e").split('e');
30
+ var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
31
+ [number, exponent] = "".concat(result, "e").split('e');
32
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
33
+ }
34
+ }
35
+ });
36
+ });
37
+ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
12
38
  var {
13
39
  typed,
14
40
  config,
15
41
  round,
16
42
  matrix,
17
- equalScalar
18
- } = _ref;
43
+ equalScalar,
44
+ zeros,
45
+ DenseMatrix
46
+ } = _ref2;
19
47
  var algorithm11 = createAlgorithm11({
20
48
  typed,
21
49
  equalScalar
22
50
  });
51
+ var algorithm12 = createAlgorithm12({
52
+ typed,
53
+ DenseMatrix
54
+ });
23
55
  var algorithm14 = createAlgorithm14({
24
56
  typed
25
57
  });
58
+ var ceilNumber = createCeilNumber({
59
+ typed,
60
+ config,
61
+ round
62
+ });
26
63
  /**
27
64
  * Round a value towards plus infinity
28
65
  * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
@@ -62,29 +99,17 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref => {
62
99
  */
63
100
 
64
101
  return typed('ceil', {
65
- number: function number(x) {
66
- if (nearlyEqual(x, round(x), config.epsilon)) {
67
- return round(x);
68
- } else {
69
- return ceilNumber(x);
70
- }
71
- },
72
- 'number, number': function numberNumber(x, n) {
73
- if (nearlyEqual(x, round(x, n), config.epsilon)) {
74
- return round(x, n);
75
- } else {
76
- var [number, exponent] = "".concat(x, "e").split('e');
77
- var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
78
- [number, exponent] = "".concat(result, "e").split('e');
79
- return Number("".concat(number, "e").concat(Number(exponent) - n));
80
- }
81
- },
102
+ number: ceilNumber.signatures.number,
103
+ 'number,number': ceilNumber.signatures['number,number'],
82
104
  Complex: function Complex(x) {
83
105
  return x.ceil();
84
106
  },
85
107
  'Complex, number': function ComplexNumber(x, n) {
86
108
  return x.ceil(n);
87
109
  },
110
+ 'Complex, BigNumber': function ComplexBigNumber(x, n) {
111
+ return x.ceil(n.toNumber());
112
+ },
88
113
  BigNumber: function BigNumber(x) {
89
114
  if (bigNearlyEqual(x, round(x), config.epsilon)) {
90
115
  return round(x);
@@ -105,11 +130,14 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref => {
105
130
  'Fraction, number': function FractionNumber(x, n) {
106
131
  return x.ceil(n);
107
132
  },
133
+ 'Fraction, BigNumber': function FractionBigNumber(x, n) {
134
+ return x.ceil(n.toNumber());
135
+ },
108
136
  'Array | Matrix': function ArrayMatrix(x) {
109
137
  // deep map collection, skip zeros since ceil(0) = 0
110
138
  return deepMap(x, this, true);
111
139
  },
112
- 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
140
+ 'Array, number | BigNumber': function ArrayNumberBigNumber(x, n) {
113
141
  // deep map collection, skip zeros since ceil(0) = 0
114
142
  return deepMap(x, i => this(i, n), true);
115
143
  },
@@ -119,9 +147,18 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref => {
119
147
  'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
120
148
  return algorithm14(x, y, this, false);
121
149
  },
122
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
150
+ 'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {
123
151
  // use matrix implementation
124
152
  return algorithm14(matrix(y), x, this, true).valueOf();
153
+ },
154
+ 'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {
155
+ if (equalScalar(x, 0)) return zeros(y.size(), y.storage());
156
+
157
+ if (y.storage() === 'dense') {
158
+ return algorithm14(y, x, this, true);
159
+ }
160
+
161
+ return algorithm12(y, x, this, true);
125
162
  }
126
163
  });
127
164
  });
@@ -1,19 +1,47 @@
1
1
  import { factory } from '../../utils/factory.js';
2
2
  import { deepMap } from '../../utils/collection.js';
3
+ import { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';
3
4
  import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
4
5
  var name = 'fix';
5
- var dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor'];
6
- export var createFix = /* #__PURE__ */factory(name, dependencies, _ref => {
6
+ var dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor', 'equalScalar', 'zeros', 'DenseMatrix'];
7
+ export var createFixNumber = /* #__PURE__ */factory(name, ['typed', 'ceil', 'floor'], _ref => {
7
8
  var {
8
9
  typed,
9
- Complex: _Complex,
10
- matrix,
11
10
  ceil,
12
11
  floor
13
12
  } = _ref;
13
+ return typed(name, {
14
+ number: function number(x) {
15
+ return x > 0 ? floor(x) : ceil(x);
16
+ },
17
+ 'number, number': function numberNumber(x, n) {
18
+ return x > 0 ? floor(x, n) : ceil(x, n);
19
+ }
20
+ });
21
+ });
22
+ export var createFix = /* #__PURE__ */factory(name, dependencies, _ref2 => {
23
+ var {
24
+ typed,
25
+ Complex: _Complex,
26
+ matrix,
27
+ ceil,
28
+ floor,
29
+ equalScalar,
30
+ zeros,
31
+ DenseMatrix
32
+ } = _ref2;
33
+ var algorithm12 = createAlgorithm12({
34
+ typed,
35
+ DenseMatrix
36
+ });
14
37
  var algorithm14 = createAlgorithm14({
15
38
  typed
16
39
  });
40
+ var fixNumber = createFixNumber({
41
+ typed,
42
+ ceil,
43
+ floor
44
+ });
17
45
  /**
18
46
  * Round a value towards zero.
19
47
  * For matrices, the function is evaluated element wise.
@@ -21,6 +49,7 @@ export var createFix = /* #__PURE__ */factory(name, dependencies, _ref => {
21
49
  * Syntax:
22
50
  *
23
51
  * math.fix(x)
52
+ * math.fix(x,n)
24
53
  *
25
54
  * Examples:
26
55
  *
@@ -51,16 +80,16 @@ export var createFix = /* #__PURE__ */factory(name, dependencies, _ref => {
51
80
  */
52
81
 
53
82
  return typed('fix', {
54
- number: function number(x) {
55
- return x > 0 ? floor(x) : ceil(x);
56
- },
57
- 'number, number | BigNumber': function numberNumberBigNumber(x, n) {
58
- return x > 0 ? floor(x, n) : ceil(x, n);
59
- },
83
+ number: fixNumber.signatures.number,
84
+ 'number, number | BigNumber': fixNumber.signatures['number,number'],
60
85
  Complex: function Complex(x) {
61
86
  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));
62
87
  },
63
- 'Complex, number | BigNumber': function ComplexNumberBigNumber(x, n) {
88
+ 'Complex, number': function ComplexNumber(x, n) {
89
+ 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));
90
+ },
91
+ 'Complex, BigNumber': function ComplexBigNumber(x, bn) {
92
+ var n = bn.toNumber();
64
93
  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));
65
94
  },
66
95
  BigNumber: function BigNumber(x) {
@@ -73,7 +102,7 @@ export var createFix = /* #__PURE__ */factory(name, dependencies, _ref => {
73
102
  return x.s < 0 ? x.ceil() : x.floor();
74
103
  },
75
104
  'Fraction, number | BigNumber': function FractionNumberBigNumber(x, n) {
76
- return x.s < 0 ? x.ceil(n) : x.floor(n);
105
+ return x.s < 0 ? ceil(x, n) : floor(x, n);
77
106
  },
78
107
  'Array | Matrix': function ArrayMatrix(x) {
79
108
  // deep map collection, skip zeros since fix(0) = 0
@@ -83,9 +112,18 @@ export var createFix = /* #__PURE__ */factory(name, dependencies, _ref => {
83
112
  // deep map collection, skip zeros since fix(0) = 0
84
113
  return deepMap(x, i => this(i, n), true);
85
114
  },
86
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
115
+ 'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {
87
116
  // use matrix implementation
88
117
  return algorithm14(matrix(y), x, this, true).valueOf();
118
+ },
119
+ 'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {
120
+ if (equalScalar(x, 0)) return zeros(y.size(), y.storage());
121
+
122
+ if (y.storage() === 'dense') {
123
+ return algorithm14(y, x, this, true);
124
+ }
125
+
126
+ return algorithm12(y, x, this, true);
89
127
  }
90
128
  });
91
129
  });
@@ -4,24 +4,62 @@ import { deepMap } from '../../utils/collection.js';
4
4
  import { nearlyEqual } from '../../utils/number.js';
5
5
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
6
6
  import { createAlgorithm11 } from '../../type/matrix/utils/algorithm11.js';
7
+ import { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';
7
8
  import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
8
9
  var name = 'floor';
9
- var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
10
- export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref => {
10
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];
11
+ export var createFloorNumber = /* #__PURE__ */factory(name, ['typed', 'config', 'round'], _ref => {
12
+ var {
13
+ typed,
14
+ config,
15
+ round
16
+ } = _ref;
17
+ return typed(name, {
18
+ number: function number(x) {
19
+ if (nearlyEqual(x, round(x), config.epsilon)) {
20
+ return round(x);
21
+ } else {
22
+ return Math.floor(x);
23
+ }
24
+ },
25
+ 'number, number': function numberNumber(x, n) {
26
+ if (nearlyEqual(x, round(x, n), config.epsilon)) {
27
+ return round(x, n);
28
+ } else {
29
+ var [number, exponent] = "".concat(x, "e").split('e');
30
+ var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
31
+ [number, exponent] = "".concat(result, "e").split('e');
32
+ return Number("".concat(number, "e").concat(Number(exponent) - n));
33
+ }
34
+ }
35
+ });
36
+ });
37
+ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref2 => {
11
38
  var {
12
39
  typed,
13
40
  config,
14
41
  round,
15
42
  matrix,
16
- equalScalar
17
- } = _ref;
43
+ equalScalar,
44
+ zeros,
45
+ DenseMatrix
46
+ } = _ref2;
18
47
  var algorithm11 = createAlgorithm11({
19
48
  typed,
20
49
  equalScalar
21
50
  });
51
+ var algorithm12 = createAlgorithm12({
52
+ typed,
53
+ DenseMatrix
54
+ });
22
55
  var algorithm14 = createAlgorithm14({
23
56
  typed
24
57
  });
58
+ var floorNumber = createFloorNumber({
59
+ typed,
60
+ config,
61
+ round
62
+ });
25
63
  /**
26
64
  * Round a value towards minus infinity.
27
65
  * For matrices, the function is evaluated element wise.
@@ -50,6 +88,10 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref => {
50
88
  * math.floor([3.2, 3.8, -4.7]) // returns Array [3, 3, -5]
51
89
  * math.floor([3.21, 3.82, -4.71], 1) // returns Array [3.2, 3.8, -4.8]
52
90
  *
91
+ * math.floor(math.tau, [2, 3]) // returns Array [6.28, 6.283]
92
+ *
93
+ * // Note that floor(array, array) currently not implemented.
94
+ *
53
95
  * See also:
54
96
  *
55
97
  * ceil, fix, round
@@ -60,29 +102,17 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref => {
60
102
  */
61
103
 
62
104
  return typed('floor', {
63
- number: function number(x) {
64
- if (nearlyEqual(x, round(x), config.epsilon)) {
65
- return round(x);
66
- } else {
67
- return Math.floor(x);
68
- }
69
- },
70
- 'number, number': function numberNumber(x, n) {
71
- if (nearlyEqual(x, round(x, n), config.epsilon)) {
72
- return round(x, n);
73
- } else {
74
- var [number, exponent] = "".concat(x, "e").split('e');
75
- var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
76
- [number, exponent] = "".concat(result, "e").split('e');
77
- return Number("".concat(number, "e").concat(Number(exponent) - n));
78
- }
79
- },
105
+ number: floorNumber.signatures.number,
106
+ 'number,number': floorNumber.signatures['number,number'],
80
107
  Complex: function Complex(x) {
81
108
  return x.floor();
82
109
  },
83
110
  'Complex, number': function ComplexNumber(x, n) {
84
111
  return x.floor(n);
85
112
  },
113
+ 'Complex, BigNumber': function ComplexBigNumber(x, n) {
114
+ return x.floor(n.toNumber());
115
+ },
86
116
  BigNumber: function BigNumber(x) {
87
117
  if (bigNearlyEqual(x, round(x), config.epsilon)) {
88
118
  return round(x);
@@ -103,11 +133,14 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref => {
103
133
  'Fraction, number': function FractionNumber(x, n) {
104
134
  return x.floor(n);
105
135
  },
136
+ 'Fraction, BigNumber': function FractionBigNumber(x, n) {
137
+ return x.floor(n.toNumber());
138
+ },
106
139
  'Array | Matrix': function ArrayMatrix(x) {
107
140
  // deep map collection, skip zeros since floor(0) = 0
108
141
  return deepMap(x, this, true);
109
142
  },
110
- 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
143
+ 'Array, number | BigNumber': function ArrayNumberBigNumber(x, n) {
111
144
  // deep map collection, skip zeros since ceil(0) = 0
112
145
  return deepMap(x, i => this(i, n), true);
113
146
  },
@@ -117,9 +150,18 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref => {
117
150
  'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
118
151
  return algorithm14(x, y, this, false);
119
152
  },
120
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
153
+ 'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {
121
154
  // use matrix implementation
122
155
  return algorithm14(matrix(y), x, this, true).valueOf();
156
+ },
157
+ 'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {
158
+ if (equalScalar(x, 0)) return zeros(y.size(), y.storage());
159
+
160
+ if (y.storage() === 'dense') {
161
+ return algorithm14(y, x, this, true);
162
+ }
163
+
164
+ return algorithm12(y, x, this, true);
123
165
  }
124
166
  });
125
167
  });
@@ -68,9 +68,7 @@ export var createNthRoot = /* #__PURE__ */factory(name, dependencies, _ref => {
68
68
 
69
69
  var complexErr = '' + 'Complex number not supported in function nthRoot. ' + 'Use nthRoots instead.';
70
70
  return typed(name, {
71
- number: function number(x) {
72
- return nthRootNumber(x, 2);
73
- },
71
+ number: nthRootNumber,
74
72
  'number, number': nthRootNumber,
75
73
  BigNumber: function BigNumber(x) {
76
74
  return _bigNthRoot(x, new _BigNumber(2));
@@ -67,7 +67,7 @@ export var createNthRoots = /* #__PURE__ */factory(name, dependencies, _ref => {
67
67
  }
68
68
 
69
69
  roots.push(new Complex({
70
- r: r,
70
+ r,
71
71
  phi: (arg + 2 * Math.PI * k) / root
72
72
  }));
73
73
  }
@@ -3,7 +3,7 @@ import { isInteger } from '../../utils/number.js';
3
3
  import { arraySize as size } from '../../utils/array.js';
4
4
  import { powNumber } from '../../plain/number/index.js';
5
5
  var name = 'pow';
6
- var dependencies = ['typed', 'config', 'identity', 'multiply', 'matrix', 'fraction', 'number', 'Complex'];
6
+ var dependencies = ['typed', 'config', 'identity', 'multiply', 'matrix', 'inv', 'fraction', 'number', 'Complex'];
7
7
  export var createPow = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
@@ -11,6 +11,7 @@ export var createPow = /* #__PURE__ */factory(name, dependencies, _ref => {
11
11
  identity,
12
12
  multiply,
13
13
  matrix,
14
+ inv,
14
15
  number,
15
16
  fraction,
16
17
  Complex
@@ -18,8 +19,11 @@ export var createPow = /* #__PURE__ */factory(name, dependencies, _ref => {
18
19
 
19
20
  /**
20
21
  * Calculates the power of x to y, `x ^ y`.
21
- * Matrix exponentiation is supported for square matrices `x`, and positive
22
- * integer exponents `y`.
22
+ *
23
+ * Matrix exponentiation is supported for square matrices `x` and integers `y`:
24
+ * when `y` is nonnegative, `x` may be any square matrix; and when `y` is
25
+ * negative, `x` must be invertible, and then this function returns
26
+ * inv(x)^(-y).
23
27
  *
24
28
  * For cubic roots of negative numbers, the function returns the principal
25
29
  * root by default. In order to let the function return the real root,
@@ -40,6 +44,9 @@ export var createPow = /* #__PURE__ */factory(name, dependencies, _ref => {
40
44
  * const b = [[1, 2], [4, 3]]
41
45
  * math.pow(b, 2) // returns Array [[9, 8], [16, 17]]
42
46
  *
47
+ * const c = [[1, 2], [4, 3]]
48
+ * math.pow(c, -1) // returns Array [[-0.6, 0.4], [0.8, -0.2]]
49
+ *
43
50
  * See also:
44
51
  *
45
52
  * multiply, sqrt, cbrt, nthRoot
@@ -135,15 +142,15 @@ export var createPow = /* #__PURE__ */factory(name, dependencies, _ref => {
135
142
  /**
136
143
  * Calculate the power of a 2d array
137
144
  * @param {Array} x must be a 2 dimensional, square matrix
138
- * @param {number} y a positive, integer value
145
+ * @param {number} y a integer value (positive if `x` is not invertible)
139
146
  * @returns {Array}
140
147
  * @private
141
148
  */
142
149
 
143
150
 
144
151
  function _powArray(x, y) {
145
- if (!isInteger(y) || y < 0) {
146
- throw new TypeError('For A^b, b must be a positive integer (value is ' + y + ')');
152
+ if (!isInteger(y)) {
153
+ throw new TypeError('For A^b, b must be an integer (value is ' + y + ')');
147
154
  } // verify that A is a 2 dimensional square matrix
148
155
 
149
156
 
@@ -157,6 +164,18 @@ export var createPow = /* #__PURE__ */factory(name, dependencies, _ref => {
157
164
  throw new Error('For A^b, A must be square (size is ' + s[0] + 'x' + s[1] + ')');
158
165
  }
159
166
 
167
+ if (y < 0) {
168
+ try {
169
+ return _powArray(inv(x), -y);
170
+ } catch (error) {
171
+ if (error.message === 'Cannot calculate inverse, determinant is zero') {
172
+ throw new TypeError('For A^b, when A is not invertible, b must be a positive integer (value is ' + y + ')');
173
+ }
174
+
175
+ throw error;
176
+ }
177
+ }
178
+
160
179
  var res = identity(s[0]).valueOf();
161
180
  var px = x;
162
181
 
@@ -1,12 +1,5 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
-
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
-
5
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
-
7
1
  import { factory } from '../../utils/factory.js';
8
2
  import { deepMap } from '../../utils/collection.js';
9
- import { isInteger } from '../../utils/number.js';
10
3
  import { createAlgorithm11 } from '../../type/matrix/utils/algorithm11.js';
11
4
  import { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';
12
5
  import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
@@ -70,7 +63,16 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
70
63
  * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
71
64
  */
72
65
 
73
- return typed(name, _objectSpread(_objectSpread({}, roundNumberSignatures), {}, {
66
+ return typed(name, {
67
+ number: roundNumber,
68
+ 'number, number': roundNumber,
69
+ 'number, BigNumber': function numberBigNumber(x, n) {
70
+ if (!n.isInteger()) {
71
+ throw new TypeError(NO_INT);
72
+ }
73
+
74
+ return new BigNumber(x).toDecimalPlaces(n.toNumber());
75
+ },
74
76
  Complex: function Complex(x) {
75
77
  return x.round();
76
78
  },
@@ -90,13 +92,6 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
90
92
 
91
93
  return x.round(_n);
92
94
  },
93
- 'number, BigNumber': function numberBigNumber(x, n) {
94
- if (!n.isInteger()) {
95
- throw new TypeError(NO_INT);
96
- }
97
-
98
- return new BigNumber(x).toDecimalPlaces(n.toNumber());
99
- },
100
95
  BigNumber: function BigNumber(x) {
101
96
  return x.toDecimalPlaces(0);
102
97
  },
@@ -117,6 +112,13 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
117
112
 
118
113
  return x.round(n);
119
114
  },
115
+ 'Fraction, BigNumber': function FractionBigNumber(x, n) {
116
+ if (!n.isInteger()) {
117
+ throw new TypeError(NO_INT);
118
+ }
119
+
120
+ return x.round(n.toNumber());
121
+ },
120
122
  'Array | Matrix': function ArrayMatrix(x) {
121
123
  // deep map collection, skip zeros since round(0) = 0
122
124
  return deepMap(x, this, true);
@@ -127,7 +129,11 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
127
129
  'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
128
130
  return algorithm14(x, y, this, false);
129
131
  },
130
- 'number | Complex | BigNumber, SparseMatrix': function numberComplexBigNumberSparseMatrix(x, y) {
132
+ 'Array, number | BigNumber': function ArrayNumberBigNumber(x, y) {
133
+ // use matrix implementation
134
+ return algorithm14(matrix(x), y, this, false).valueOf();
135
+ },
136
+ 'number | Complex | BigNumber | Fraction, SparseMatrix': function numberComplexBigNumberFractionSparseMatrix(x, y) {
131
137
  // check scalar is zero
132
138
  if (equalScalar(x, 0)) {
133
139
  // do not execute algorithm, result will be a zero matrix
@@ -136,7 +142,7 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
136
142
 
137
143
  return algorithm12(y, x, this, true);
138
144
  },
139
- 'number | Complex | BigNumber, DenseMatrix': function numberComplexBigNumberDenseMatrix(x, y) {
145
+ 'number | Complex | BigNumber | Fraction, DenseMatrix': function numberComplexBigNumberFractionDenseMatrix(x, y) {
140
146
  // check scalar is zero
141
147
  if (equalScalar(x, 0)) {
142
148
  // do not execute algorithm, result will be a zero matrix
@@ -145,33 +151,9 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
145
151
 
146
152
  return algorithm14(y, x, this, true);
147
153
  },
148
- 'Array, number | BigNumber': function ArrayNumberBigNumber(x, y) {
149
- // use matrix implementation
150
- return algorithm14(matrix(x), y, this, false).valueOf();
151
- },
152
- 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
154
+ 'number | Complex | BigNumber | Fraction, Array': function numberComplexBigNumberFractionArray(x, y) {
153
155
  // use matrix implementation
154
156
  return algorithm14(matrix(y), x, this, true).valueOf();
155
157
  }
156
- }));
157
- });
158
- var roundNumberSignatures = {
159
- number: roundNumber,
160
- 'number, number': function numberNumber(x, n) {
161
- if (!isInteger(n)) {
162
- throw new TypeError(NO_INT);
163
- }
164
-
165
- if (n < 0 || n > 15) {
166
- throw new Error('Number of decimals in function round must be in the range of 0-15');
167
- }
168
-
169
- return roundNumber(x, n);
170
- }
171
- };
172
- export var createRoundNumber = /* #__PURE__ */factory(name, ['typed'], _ref2 => {
173
- var {
174
- typed
175
- } = _ref2;
176
- return typed(name, roundNumberSignatures);
158
+ });
177
159
  });