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
@@ -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
  });