mathjs 14.0.1 → 14.2.0

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 (142) hide show
  1. package/HISTORY.md +20 -0
  2. package/NOTICE +1 -1
  3. package/README.md +7 -7
  4. package/bin/cli.js +1 -1
  5. package/lib/browser/math.js +1 -1
  6. package/lib/browser/math.js.LICENSE.txt +5 -5
  7. package/lib/browser/math.js.map +1 -1
  8. package/lib/cjs/core/function/import.js +14 -4
  9. package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
  11. package/lib/cjs/entry/dependenciesAny/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
  12. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  13. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
  17. package/lib/cjs/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
  18. package/lib/cjs/entry/dependenciesAny.generated.js +14 -14
  19. package/lib/cjs/entry/dependenciesNumber/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
  20. package/lib/cjs/entry/dependenciesNumber/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
  21. package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  22. package/lib/cjs/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
  23. package/lib/cjs/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
  24. package/lib/cjs/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
  25. package/lib/cjs/entry/dependenciesNumber.generated.js +14 -14
  26. package/lib/cjs/entry/impureFunctionsAny.generated.js +86 -85
  27. package/lib/cjs/entry/impureFunctionsNumber.generated.js +14 -14
  28. package/lib/cjs/entry/pureFunctionsAny.generated.js +330 -325
  29. package/lib/cjs/entry/pureFunctionsNumber.generated.js +18 -15
  30. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  31. package/lib/cjs/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
  32. package/lib/cjs/expression/embeddedDocs/function/matrix/mapSlices.js +17 -0
  33. package/lib/cjs/expression/transform/index.transform.js +2 -2
  34. package/lib/cjs/expression/transform/{apply.transform.js → mapSlices.transform.js} +11 -10
  35. package/lib/cjs/expression/transform/quantileSeq.transform.js +5 -3
  36. package/lib/cjs/expression/transform/variance.transform.js +3 -3
  37. package/lib/cjs/factoriesAny.js +14 -14
  38. package/lib/cjs/factoriesNumber.js +16 -15
  39. package/lib/cjs/function/arithmetic/ceil.js +34 -26
  40. package/lib/cjs/function/arithmetic/fix.js +3 -0
  41. package/lib/cjs/function/arithmetic/floor.js +41 -26
  42. package/lib/cjs/function/arithmetic/log.js +12 -5
  43. package/lib/cjs/function/arithmetic/log10.js +15 -7
  44. package/lib/cjs/function/arithmetic/log2.js +9 -4
  45. package/lib/cjs/function/arithmetic/round.js +4 -0
  46. package/lib/cjs/function/matrix/ctranspose.js +1 -1
  47. package/lib/cjs/function/matrix/{apply.js → mapSlices.js} +19 -12
  48. package/lib/cjs/function/matrix/matrixFromFunction.js +36 -3
  49. package/lib/cjs/function/matrix/range.js +54 -5
  50. package/lib/cjs/function/probability/randomInt.js +26 -3
  51. package/lib/cjs/function/relational/larger.js +12 -4
  52. package/lib/cjs/function/relational/smaller.js +12 -4
  53. package/lib/cjs/function/statistics/max.js +1 -1
  54. package/lib/cjs/function/statistics/min.js +1 -1
  55. package/lib/cjs/function/statistics/quantileSeq.js +4 -9
  56. package/lib/cjs/function/statistics/variance.js +3 -3
  57. package/lib/cjs/function/string/hex.js +1 -1
  58. package/lib/cjs/function/string/print.js +2 -2
  59. package/lib/cjs/function/trigonometry/acoth.js +1 -1
  60. package/lib/cjs/function/trigonometry/acsc.js +1 -1
  61. package/lib/cjs/function/trigonometry/asin.js +1 -1
  62. package/lib/cjs/function/trigonometry/atan2.js +2 -1
  63. package/lib/cjs/function/trigonometry/cos.js +1 -1
  64. package/lib/cjs/function/trigonometry/sin.js +1 -1
  65. package/lib/cjs/function/utils/isInteger.js +1 -1
  66. package/lib/cjs/header.js +3 -3
  67. package/lib/cjs/type/matrix/MatrixIndex.js +6 -3
  68. package/lib/cjs/type/matrix/Range.js +15 -8
  69. package/lib/cjs/utils/bigint.js +33 -0
  70. package/lib/cjs/utils/factory.js +5 -2
  71. package/lib/cjs/utils/number.js +7 -19
  72. package/lib/cjs/utils/snapshot.js +8 -1
  73. package/lib/cjs/version.js +1 -1
  74. package/lib/esm/core/function/import.js +14 -4
  75. package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  76. package/lib/esm/entry/{dependenciesNumber/dependenciesApply.generated.js → dependenciesAny/dependenciesMapSlices.generated.js} +3 -3
  77. package/lib/esm/entry/{dependenciesNumber/dependenciesApplyTransform.generated.js → dependenciesAny/dependenciesMapSlicesTransform.generated.js} +3 -3
  78. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  79. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
  80. package/lib/esm/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
  81. package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  82. package/lib/esm/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
  83. package/lib/esm/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
  84. package/lib/esm/entry/dependenciesAny.generated.js +2 -2
  85. package/lib/esm/entry/{dependenciesAny/dependenciesApply.generated.js → dependenciesNumber/dependenciesMapSlices.generated.js} +3 -3
  86. package/lib/esm/entry/{dependenciesAny/dependenciesApplyTransform.generated.js → dependenciesNumber/dependenciesMapSlicesTransform.generated.js} +3 -3
  87. package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  88. package/lib/esm/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
  89. package/lib/esm/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
  90. package/lib/esm/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
  91. package/lib/esm/entry/dependenciesNumber.generated.js +2 -2
  92. package/lib/esm/entry/impureFunctionsAny.generated.js +88 -87
  93. package/lib/esm/entry/impureFunctionsNumber.generated.js +16 -16
  94. package/lib/esm/entry/pureFunctionsAny.generated.js +328 -323
  95. package/lib/esm/entry/pureFunctionsNumber.generated.js +17 -14
  96. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  97. package/lib/esm/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
  98. package/lib/esm/expression/embeddedDocs/function/matrix/mapSlices.js +11 -0
  99. package/lib/esm/expression/transform/index.transform.js +3 -3
  100. package/lib/esm/expression/transform/mapSlices.transform.js +47 -0
  101. package/lib/esm/expression/transform/quantileSeq.transform.js +5 -3
  102. package/lib/esm/expression/transform/variance.transform.js +3 -3
  103. package/lib/esm/factoriesAny.js +2 -2
  104. package/lib/esm/factoriesNumber.js +2 -2
  105. package/lib/esm/function/arithmetic/ceil.js +35 -27
  106. package/lib/esm/function/arithmetic/fix.js +3 -0
  107. package/lib/esm/function/arithmetic/floor.js +42 -27
  108. package/lib/esm/function/arithmetic/log.js +12 -5
  109. package/lib/esm/function/arithmetic/log10.js +16 -8
  110. package/lib/esm/function/arithmetic/log2.js +9 -4
  111. package/lib/esm/function/arithmetic/round.js +4 -0
  112. package/lib/esm/function/matrix/ctranspose.js +1 -1
  113. package/lib/esm/function/matrix/{apply.js → mapSlices.js} +18 -11
  114. package/lib/esm/function/matrix/matrixFromFunction.js +36 -3
  115. package/lib/esm/function/matrix/range.js +54 -5
  116. package/lib/esm/function/probability/randomInt.js +26 -3
  117. package/lib/esm/function/relational/larger.js +12 -4
  118. package/lib/esm/function/relational/smaller.js +12 -4
  119. package/lib/esm/function/statistics/max.js +1 -1
  120. package/lib/esm/function/statistics/min.js +1 -1
  121. package/lib/esm/function/statistics/quantileSeq.js +4 -9
  122. package/lib/esm/function/statistics/variance.js +3 -3
  123. package/lib/esm/function/string/hex.js +1 -1
  124. package/lib/esm/function/string/print.js +2 -2
  125. package/lib/esm/function/trigonometry/acoth.js +1 -1
  126. package/lib/esm/function/trigonometry/acsc.js +1 -1
  127. package/lib/esm/function/trigonometry/asin.js +1 -1
  128. package/lib/esm/function/trigonometry/atan2.js +2 -1
  129. package/lib/esm/function/trigonometry/cos.js +1 -1
  130. package/lib/esm/function/trigonometry/sin.js +1 -1
  131. package/lib/esm/function/utils/isInteger.js +1 -1
  132. package/lib/esm/header.js +1 -1
  133. package/lib/esm/type/matrix/MatrixIndex.js +6 -3
  134. package/lib/esm/type/matrix/Range.js +16 -9
  135. package/lib/esm/utils/bigint.js +27 -0
  136. package/lib/esm/utils/factory.js +5 -2
  137. package/lib/esm/utils/number.js +6 -17
  138. package/lib/esm/utils/snapshot.js +8 -1
  139. package/lib/esm/version.js +1 -1
  140. package/package.json +13 -11
  141. package/types/index.d.ts +75 -12
  142. package/lib/esm/expression/transform/apply.transform.js +0 -44
@@ -4,11 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createLog10 = void 0;
7
- var _factory = require("../../utils/factory.js");
8
- var _collection = require("../../utils/collection.js");
9
7
  var _index = require("../../plain/number/index.js");
8
+ var _bigint = require("../../utils/bigint.js");
9
+ var _collection = require("../../utils/collection.js");
10
+ var _factory = require("../../utils/factory.js");
10
11
  const name = 'log10';
11
12
  const dependencies = ['typed', 'config', 'Complex'];
13
+ const log16 = (0, _index.log10Number)(16);
12
14
  const createLog10 = exports.createLog10 = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
13
15
  let {
14
16
  typed,
@@ -40,24 +42,30 @@ const createLog10 = exports.createLog10 = /* #__PURE__ */(0, _factory.factory)(n
40
42
  * @return {number | BigNumber | Complex | Array | Matrix}
41
43
  * Returns the 10-base logarithm of `x`
42
44
  */
45
+
46
+ function complexLog(c) {
47
+ return c.log().div(Math.LN10);
48
+ }
49
+ function complexLogNumber(x) {
50
+ return complexLog(new Complex(x, 0));
51
+ }
43
52
  return typed(name, {
44
53
  number: function (x) {
45
54
  if (x >= 0 || config.predictable) {
46
55
  return (0, _index.log10Number)(x);
47
56
  } else {
48
57
  // negative value -> complex value computation
49
- return new Complex(x, 0).log().div(Math.LN10);
58
+ return complexLogNumber(x);
50
59
  }
51
60
  },
52
- Complex: function (x) {
53
- return new Complex(x).log().div(Math.LN10);
54
- },
61
+ bigint: (0, _bigint.promoteLogarithm)(log16, _index.log10Number, config, complexLogNumber),
62
+ Complex: complexLog,
55
63
  BigNumber: function (x) {
56
64
  if (!x.isNegative() || config.predictable) {
57
65
  return x.log();
58
66
  } else {
59
67
  // downgrade to number, return Complex valued result
60
- return new Complex(x.toNumber(), 0).log().div(Math.LN10);
68
+ return complexLogNumber(x.toNumber());
61
69
  }
62
70
  },
63
71
  'Array | Matrix': typed.referToSelf(self => x => (0, _collection.deepMap)(x, self))
@@ -4,9 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createLog2 = void 0;
7
- var _factory = require("../../utils/factory.js");
8
- var _collection = require("../../utils/collection.js");
9
7
  var _index = require("../../plain/number/index.js");
8
+ var _bigint = require("../../utils/bigint.js");
9
+ var _collection = require("../../utils/collection.js");
10
+ var _factory = require("../../utils/factory.js");
10
11
  const name = 'log2';
11
12
  const dependencies = ['typed', 'config', 'Complex'];
12
13
  const createLog2 = exports.createLog2 = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
@@ -40,22 +41,26 @@ const createLog2 = exports.createLog2 = /* #__PURE__ */(0, _factory.factory)(nam
40
41
  * @return {number | BigNumber | Complex | Array | Matrix}
41
42
  * Returns the 2-base logarithm of `x`
42
43
  */
44
+ function complexLog2Number(x) {
45
+ return _log2Complex(new Complex(x, 0));
46
+ }
43
47
  return typed(name, {
44
48
  number: function (x) {
45
49
  if (x >= 0 || config.predictable) {
46
50
  return (0, _index.log2Number)(x);
47
51
  } else {
48
52
  // negative value -> complex value computation
49
- return _log2Complex(new Complex(x, 0));
53
+ return complexLog2Number(x);
50
54
  }
51
55
  },
56
+ bigint: (0, _bigint.promoteLogarithm)(4, _index.log2Number, config, complexLog2Number),
52
57
  Complex: _log2Complex,
53
58
  BigNumber: function (x) {
54
59
  if (!x.isNegative() || config.predictable) {
55
60
  return x.log(2);
56
61
  } else {
57
62
  // downgrade to number, return Complex valued result
58
- return _log2Complex(new Complex(x.toNumber(), 0));
63
+ return complexLog2Number(x.toNumber());
59
64
  }
60
65
  },
61
66
  'Array | Matrix': typed.referToSelf(self => x => (0, _collection.deepMap)(x, self))
@@ -143,6 +143,10 @@ const createRound = exports.createRound = /* #__PURE__ */(0, _factory.factory)(n
143
143
  const xSelected = (0, _nearlyEqual.nearlyEqual)(x, xEpsilon, config.relTol, config.absTol) ? xEpsilon : x;
144
144
  return xSelected.toDecimalPlaces(n.toNumber());
145
145
  },
146
+ // bigints can't be rounded
147
+ bigint: b => b,
148
+ 'bigint, number': (b, _dummy) => b,
149
+ 'bigint, BigNumber': (b, _dummy) => b,
146
150
  Fraction: function (x) {
147
151
  return x.round();
148
152
  },
@@ -26,7 +26,7 @@ const createCtranspose = exports.createCtranspose = /* #__PURE__ */(0, _factory.
26
26
  * Examples:
27
27
  *
28
28
  * const A = [[1, 2, 3], [4, 5, math.complex(6,7)]]
29
- * math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:7}]]
29
+ * math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:-7}]]
30
30
  *
31
31
  * See also:
32
32
  *
@@ -3,14 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createApply = void 0;
6
+ exports.createMapSlices = void 0;
7
7
  var _factory = require("../../utils/factory.js");
8
8
  var _array = require("../../utils/array.js");
9
9
  var _is = require("../../utils/is.js");
10
10
  var _IndexError = require("../../error/IndexError.js");
11
- const name = 'apply';
11
+ const name = 'mapSlices';
12
12
  const dependencies = ['typed', 'isInteger'];
13
- const createApply = exports.createApply = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
13
+ const createMapSlices = exports.createMapSlices = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
14
  let {
15
15
  typed,
16
16
  isInteger
@@ -22,7 +22,7 @@ const createApply = exports.createApply = /* #__PURE__ */(0, _factory.factory)(n
22
22
  *
23
23
  * Syntax:
24
24
  *
25
- * math.apply(A, dim, callback)
25
+ * math.mapSlices(A, dim, callback)
26
26
  *
27
27
  * Where:
28
28
  *
@@ -33,19 +33,24 @@ const createApply = exports.createApply = /* #__PURE__ */(0, _factory.factory)(n
33
33
  * const A = [[1, 2], [3, 4]]
34
34
  * const sum = math.sum
35
35
  *
36
- * math.apply(A, 0, sum) // returns [4, 6]
37
- * math.apply(A, 1, sum) // returns [3, 7]
36
+ * math.mapSlices(A, 0, sum) // returns [4, 6]
37
+ * math.mapSlices(A, 1, sum) // returns [3, 7]
38
38
  *
39
39
  * See also:
40
40
  *
41
41
  * map, filter, forEach
42
42
  *
43
+ * Note:
44
+ *
45
+ * `mapSlices()` is also currently available via its deprecated
46
+ * synonym `apply()`.
47
+ *
43
48
  * @param {Array | Matrix} array The input Matrix
44
49
  * @param {number} dim The dimension along which the callback is applied
45
50
  * @param {Function} callback The callback function that is applied. This Function
46
51
  * should take an array or 1-d matrix as an input and
47
52
  * return a number.
48
- * @return {Array | Matrix} res The residual matrix with the function applied over some dimension.
53
+ * @return {Array | Matrix} res The residual matrix with the function mapped on the slices over some dimension.
49
54
  */
50
55
  return typed(name, {
51
56
  'Array | Matrix, number | BigNumber, function': function (mat, dim, callback) {
@@ -57,12 +62,14 @@ const createApply = exports.createApply = /* #__PURE__ */(0, _factory.factory)(n
57
62
  throw new _IndexError.IndexError(dim, size.length);
58
63
  }
59
64
  if ((0, _is.isMatrix)(mat)) {
60
- return mat.create(_apply(mat.valueOf(), dim, callback), mat.datatype());
65
+ return mat.create(_mapSlices(mat.valueOf(), dim, callback), mat.datatype());
61
66
  } else {
62
- return _apply(mat, dim, callback);
67
+ return _mapSlices(mat, dim, callback);
63
68
  }
64
69
  }
65
70
  });
71
+ }, {
72
+ formerly: 'apply'
66
73
  });
67
74
 
68
75
  /**
@@ -73,7 +80,7 @@ const createApply = exports.createApply = /* #__PURE__ */(0, _factory.factory)(n
73
80
  * @returns {Array} ret
74
81
  * @private
75
82
  */
76
- function _apply(mat, dim, callback) {
83
+ function _mapSlices(mat, dim, callback) {
77
84
  let i, ret, tran;
78
85
  if (dim <= 0) {
79
86
  if (!Array.isArray(mat[0])) {
@@ -82,14 +89,14 @@ function _apply(mat, dim, callback) {
82
89
  tran = _switch(mat);
83
90
  ret = [];
84
91
  for (i = 0; i < tran.length; i++) {
85
- ret[i] = _apply(tran[i], dim - 1, callback);
92
+ ret[i] = _mapSlices(tran[i], dim - 1, callback);
86
93
  }
87
94
  return ret;
88
95
  }
89
96
  } else {
90
97
  ret = [];
91
98
  for (i = 0; i < mat.length; i++) {
92
- ret[i] = _apply(mat[i], dim - 1, callback);
99
+ ret[i] = _mapSlices(mat[i], dim - 1, callback);
93
100
  }
94
101
  return ret;
95
102
  }
@@ -15,8 +15,10 @@ const createMatrixFromFunction = exports.createMatrixFromFunction = /* #__PURE__
15
15
  } = _ref;
16
16
  /**
17
17
  * Create a matrix by evaluating a generating function at each index.
18
- * The simplest overload returns a multi-dimensional array as long as `size` is an array.
19
- * Passing `size` as a Matrix or specifying a `format` will result in returning a Matrix.
18
+ * The simplest overload returns a multi-dimensional array as long as `size`
19
+ * is an array.
20
+ * Passing `size` as a Matrix or specifying a `format` will result in
21
+ * returning a Matrix.
20
22
  *
21
23
  * Syntax:
22
24
  *
@@ -26,6 +28,37 @@ const createMatrixFromFunction = exports.createMatrixFromFunction = /* #__PURE__
26
28
  * math.matrixFromFunction(size, format, fn)
27
29
  * math.matrixFromFunction(size, format, datatype, fn)
28
30
  *
31
+ * Where:
32
+ *
33
+ * - `size: (number[] | Matrix)`
34
+ * A vector giving the extent of the array to be created in each
35
+ * dimension. If size has one entry, a vector is created; if it
36
+ * has two, a rectangular array/Matrix is created; if three, a
37
+ * three-dimensional array/Matrix is created; and so on.
38
+ * - `fn: (index: number[]) => MathType`
39
+ * The callback function that will generate the entries of the
40
+ * matrix. It is called in turn with the index of each entry of
41
+ * the matrix. The index is always an ordinary array of numbers
42
+ * with the same length as _size_. So for vectors, you will get
43
+ * indices like `[0]` or `[1]`, whereas for matrices, you will
44
+ * get indices like `[2, 0]` or `[1,3]`. The return value may
45
+ * be any type that can go in an array or Matrix entry, although
46
+ * if you supply the _datatype_ argument, you must yourself ensure
47
+ * the type of the return value matches. Note that currently,
48
+ * your callback _fn_ will receive 0-based indices for the matrix
49
+ * entries, regardless of whether matrixFromFunction is invoked
50
+ * directly from JavaScript or via the mathjs expression language.
51
+ * - `format: 'dense'|'sparse'`
52
+ * Specifies the storage format for the resulting Matrix. Note that
53
+ * if this argument is given, the return value will always be a
54
+ * Matrix (rather than possibly an Array).
55
+ * - `datatype: string`
56
+ * Specifies the data type of entries of the new matrix. If given,
57
+ * it should be the name of a data type that mathjs supports, as
58
+ * returned by the math.typeOf function. It is up to the caller
59
+ * to make certain that all values returned by _fn_ are consistent
60
+ * with this datatype if specified.
61
+ *
29
62
  * Examples:
30
63
  *
31
64
  * math.matrixFromFunction([3,3], i => i[0] - i[1]) // an antisymmetric matrix
@@ -34,7 +67,7 @@ const createMatrixFromFunction = exports.createMatrixFromFunction = /* #__PURE__
34
67
  *
35
68
  * See also:
36
69
  *
37
- * matrix, zeros
70
+ * matrix, typeOf, zeros
38
71
  *
39
72
  * @param {Array | Matrix} size The size of the matrix to be created
40
73
  * @param {function} fn Callback function invoked for every entry in the matrix
@@ -41,36 +41,48 @@ const createRange = exports.createRange = /* #__PURE__ */(0, _factory.factory)(n
41
41
  *
42
42
  * - `str: string`
43
43
  * A string 'start:end' or 'start:step:end'
44
- * - `start: {number | BigNumber | Unit}`
44
+ * - `start: {number | bigint | BigNumber | Fraction | Unit}`
45
45
  * Start of the range
46
- * - `end: number | BigNumber | Unit`
46
+ * - `end: number | bigint | BigNumber | Fraction | Unit`
47
47
  * End of the range, excluded by default, included when parameter includeEnd=true
48
- * - `step: number | BigNumber | Unit`
48
+ * - `step: number | bigint | BigNumber | Fraction | Unit`
49
49
  * Step size. Default value is 1.
50
50
  * - `includeEnd: boolean`
51
51
  * Option to specify whether to include the end or not. False by default.
52
52
  *
53
+ * Note that the return type of the range is taken from the type of
54
+ * the start/end. If only one these is a built-in `number` type, it will
55
+ * be promoted to the type of the other endpoint. However, in the case of
56
+ * Unit values, both endpoints must have compatible units, and the return
57
+ * value will have compatible units as well.
58
+ *
53
59
  * Examples:
54
60
  *
55
61
  * math.range(2, 6) // [2, 3, 4, 5]
56
62
  * math.range(2, -3, -1) // [2, 1, 0, -1, -2]
57
63
  * math.range('2:1:6') // [2, 3, 4, 5]
58
64
  * math.range(2, 6, true) // [2, 3, 4, 5, 6]
65
+ * math.range(2, math.fraction(8,3), math.fraction(1,3)) // [fraction(2), fraction(7,3)]
59
66
  * math.range(math.unit(2, 'm'), math.unit(-3, 'm'), math.unit(-1, 'm')) // [2 m, 1 m, 0 m , -1 m, -2 m]
60
67
  *
61
68
  * See also:
62
69
  *
63
70
  * ones, zeros, size, subset
64
71
  *
65
- * @param {*} args Parameters describing the ranges `start`, `end`, and optional `step`.
72
+ * @param {*} args Parameters describing the range's `start`, `end`, and optional `step`.
66
73
  * @return {Array | Matrix} range
67
74
  */
68
75
  return typed(name, {
69
76
  // TODO: simplify signatures when typed-function supports default values and optional arguments
70
77
 
71
- // TODO: a number or boolean should not be converted to string here
72
78
  string: _strRange,
73
79
  'string, boolean': _strRange,
80
+ number: function (oops) {
81
+ throw new TypeError(`Too few arguments to function range(): ${oops}`);
82
+ },
83
+ boolean: function (oops) {
84
+ throw new TypeError(`Unexpected type of argument 1 to function range(): ${oops}, number|bigint|BigNumber|Fraction`);
85
+ },
74
86
  'number, number': function (start, end) {
75
87
  return _out(_range(start, end, 1, false));
76
88
  },
@@ -83,6 +95,31 @@ const createRange = exports.createRange = /* #__PURE__ */(0, _factory.factory)(n
83
95
  'number, number, number, boolean': function (start, end, step, includeEnd) {
84
96
  return _out(_range(start, end, step, includeEnd));
85
97
  },
98
+ // Handle bigints; if either limit is bigint, range should be too
99
+ 'bigint, bigint|number': function (start, end) {
100
+ return _out(_range(start, end, 1n, false));
101
+ },
102
+ 'number, bigint': function (start, end) {
103
+ return _out(_range(BigInt(start), end, 1n, false));
104
+ },
105
+ 'bigint, bigint|number, bigint|number': function (start, end, step) {
106
+ return _out(_range(start, end, BigInt(step), false));
107
+ },
108
+ 'number, bigint, bigint|number': function (start, end, step) {
109
+ return _out(_range(BigInt(start), end, BigInt(step), false));
110
+ },
111
+ 'bigint, bigint|number, boolean': function (start, end, includeEnd) {
112
+ return _out(_range(start, end, 1n, includeEnd));
113
+ },
114
+ 'number, bigint, boolean': function (start, end, includeEnd) {
115
+ return _out(_range(BigInt(start), end, 1n, includeEnd));
116
+ },
117
+ 'bigint, bigint|number, bigint|number, boolean': function (start, end, step, includeEnd) {
118
+ return _out(_range(start, end, BigInt(step), includeEnd));
119
+ },
120
+ 'number, bigint, bigint|number, boolean': function (start, end, step, includeEnd) {
121
+ return _out(_range(BigInt(start), end, BigInt(step), includeEnd));
122
+ },
86
123
  'BigNumber, BigNumber': function (start, end) {
87
124
  const BigNumber = start.constructor;
88
125
  return _out(_range(start, end, new BigNumber(1), false));
@@ -97,6 +134,18 @@ const createRange = exports.createRange = /* #__PURE__ */(0, _factory.factory)(n
97
134
  'BigNumber, BigNumber, BigNumber, boolean': function (start, end, step, includeEnd) {
98
135
  return _out(_range(start, end, step, includeEnd));
99
136
  },
137
+ 'Fraction, Fraction': function (start, end) {
138
+ return _out(_range(start, end, 1, false));
139
+ },
140
+ 'Fraction, Fraction, Fraction': function (start, end, step) {
141
+ return _out(_range(start, end, step, false));
142
+ },
143
+ 'Fraction, Fraction, boolean': function (start, end, includeEnd) {
144
+ return _out(_range(start, end, 1, includeEnd));
145
+ },
146
+ 'Fraction, Fraction, Fraction, boolean': function (start, end, step, includeEnd) {
147
+ return _out(_range(start, end, step, includeEnd));
148
+ },
100
149
  'Unit, Unit, Unit': function (start, end, step) {
101
150
  return _out(_range(start, end, step, false));
102
151
  },
@@ -9,11 +9,13 @@ var _randomMatrix = require("./util/randomMatrix.js");
9
9
  var _seededRNG = require("./util/seededRNG.js");
10
10
  var _is = require("../../utils/is.js");
11
11
  const name = 'randomInt';
12
- const dependencies = ['typed', 'config', '?on'];
12
+ const dependencies = ['typed', 'config', 'log2', '?on'];
13
+ const simpleCutoff = 2n ** 30n;
13
14
  const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
15
  let {
15
16
  typed,
16
17
  config,
18
+ log2,
17
19
  on
18
20
  } = _ref;
19
21
  // seeded pseudo random number generator
@@ -32,7 +34,7 @@ const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.fa
32
34
  *
33
35
  * Syntax:
34
36
  *
35
- * math.randomInt() // generate a random integer between 0 and 1
37
+ * math.randomInt() // generate either 0 or 1, randomly
36
38
  * math.randomInt(max) // generate a random integer between 0 and max
37
39
  * math.randomInt(min, max) // generate a random integer between min and max
38
40
  * math.randomInt(size) // generate a matrix with random integer between 0 and 1
@@ -56,9 +58,11 @@ const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.fa
56
58
  * @return {number | Array | Matrix} A random integer value
57
59
  */
58
60
  return typed(name, {
59
- '': () => _randomInt(0, 1),
61
+ '': () => _randomInt(0, 2),
60
62
  number: max => _randomInt(0, max),
61
63
  'number, number': (min, max) => _randomInt(min, max),
64
+ bigint: max => _randomBigint(0n, max),
65
+ 'bigint, bigint': _randomBigint,
62
66
  'Array | Matrix': size => _randomIntMatrix(size, 0, 1),
63
67
  'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),
64
68
  'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)
@@ -70,4 +74,23 @@ const createRandomInt = exports.createRandomInt = /* #__PURE__ */(0, _factory.fa
70
74
  function _randomInt(min, max) {
71
75
  return Math.floor(min + rng() * (max - min));
72
76
  }
77
+ function _randomBigint(min, max) {
78
+ const width = max - min; // number of choices
79
+ if (width <= simpleCutoff) {
80
+ // do it with number type
81
+ return min + BigInt(_randomInt(0, Number(width)));
82
+ }
83
+ // Too big to choose accurately that way. Instead, choose the correct
84
+ // number of random bits to cover the width, and repeat until the
85
+ // resulting number falls within the width
86
+ const bits = log2(width);
87
+ let picked = width;
88
+ while (picked >= width) {
89
+ picked = 0n;
90
+ for (let i = 0; i < bits; ++i) {
91
+ picked = 2n * picked + (rng() < 0.5 ? 0n : 1n);
92
+ }
93
+ }
94
+ return min + picked;
95
+ }
73
96
  });
@@ -13,11 +13,12 @@ var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
13
13
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
14
14
  var _compareUnits = require("./compareUnits.js");
15
15
  const name = 'larger';
16
- const dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
16
+ const dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
17
17
  const createLarger = exports.createLarger = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
18
18
  let {
19
19
  typed,
20
20
  config,
21
+ bignumber,
21
22
  matrix,
22
23
  DenseMatrix,
23
24
  concat,
@@ -74,16 +75,23 @@ const createLarger = exports.createLarger = /* #__PURE__ */(0, _factory.factory)
74
75
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
75
76
  * @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false
76
77
  */
78
+ function bignumLarger(x, y) {
79
+ return x.gt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
80
+ }
77
81
  return typed(name, createLargerNumber({
78
82
  typed,
79
83
  config
80
84
  }), {
81
85
  'boolean, boolean': (x, y) => x > y,
82
- 'BigNumber, BigNumber': function (x, y) {
83
- return x.gt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
84
- },
86
+ 'BigNumber, BigNumber': bignumLarger,
85
87
  'bigint, bigint': (x, y) => x > y,
86
88
  'Fraction, Fraction': (x, y) => x.compare(y) === 1,
89
+ 'Fraction, BigNumber': function (x, y) {
90
+ return bignumLarger(bignumber(x), y);
91
+ },
92
+ 'BigNumber, Fraction': function (x, y) {
93
+ return bignumLarger(x, bignumber(y));
94
+ },
87
95
  'Complex, Complex': function () {
88
96
  throw new TypeError('No ordering relation is defined for complex numbers');
89
97
  }
@@ -13,11 +13,12 @@ var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
13
13
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
14
14
  var _compareUnits = require("./compareUnits.js");
15
15
  const name = 'smaller';
16
- const dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
16
+ const dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
17
17
  const createSmaller = exports.createSmaller = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
18
18
  let {
19
19
  typed,
20
20
  config,
21
+ bignumber,
21
22
  matrix,
22
23
  DenseMatrix,
23
24
  concat,
@@ -74,16 +75,23 @@ const createSmaller = exports.createSmaller = /* #__PURE__ */(0, _factory.factor
74
75
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
75
76
  * @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false
76
77
  */
78
+ function bignumSmaller(x, y) {
79
+ return x.lt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
80
+ }
77
81
  return typed(name, createSmallerNumber({
78
82
  typed,
79
83
  config
80
84
  }), {
81
85
  'boolean, boolean': (x, y) => x < y,
82
- 'BigNumber, BigNumber': function (x, y) {
83
- return x.lt(y) && !(0, _nearlyEqual.nearlyEqual)(x, y, config.relTol, config.absTol);
84
- },
86
+ 'BigNumber, BigNumber': bignumSmaller,
85
87
  'bigint, bigint': (x, y) => x < y,
86
88
  'Fraction, Fraction': (x, y) => x.compare(y) === -1,
89
+ 'Fraction, BigNumber': function (x, y) {
90
+ return bignumSmaller(bignumber(x), y);
91
+ },
92
+ 'BigNumber, Fraction': function (x, y) {
93
+ return bignumSmaller(x, bignumber(y));
94
+ },
87
95
  'Complex, Complex': function (x, y) {
88
96
  throw new TypeError('No ordering relation is defined for complex numbers');
89
97
  }
@@ -89,7 +89,7 @@ const createMax = exports.createMax = /* #__PURE__ */(0, _factory.factory)(name,
89
89
  let res;
90
90
  (0, _collection.deepForEach)(array, function (value) {
91
91
  try {
92
- if (isNaN(value) && typeof value === 'number') {
92
+ if (typeof value === 'number' && isNaN(value)) {
93
93
  res = NaN;
94
94
  } else if (res === undefined || larger(value, res)) {
95
95
  res = value;
@@ -89,7 +89,7 @@ const createMin = exports.createMin = /* #__PURE__ */(0, _factory.factory)(name,
89
89
  let min;
90
90
  (0, _collection.deepForEach)(array, function (value) {
91
91
  try {
92
- if (isNaN(value) && typeof value === 'number') {
92
+ if (typeof value === 'number' && isNaN(value)) {
93
93
  min = NaN;
94
94
  } else if (min === undefined || smaller(value, min)) {
95
95
  min = value;
@@ -7,9 +7,8 @@ exports.createQuantileSeq = void 0;
7
7
  var _is = require("../../utils/is.js");
8
8
  var _array = require("../../utils/array.js");
9
9
  var _factory = require("../../utils/factory.js");
10
- var _apply = require("../matrix/apply.js");
11
10
  const name = 'quantileSeq';
12
- const dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
11
+ const dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger', 'mapSlices'];
13
12
  const createQuantileSeq = exports.createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
14
13
  let {
15
14
  typed,
@@ -23,13 +22,9 @@ const createQuantileSeq = exports.createQuantileSeq = /* #__PURE__ */(0, _factor
23
22
  isInteger,
24
23
  smaller,
25
24
  smallerEq,
26
- larger
25
+ larger,
26
+ mapSlices
27
27
  } = _ref;
28
- const apply = (0, _apply.createApply)({
29
- typed,
30
- isInteger
31
- });
32
-
33
28
  /**
34
29
  * Compute the prob order quantile of a matrix or a list with values.
35
30
  * The sequence is sorted and the middle value is returned.
@@ -75,7 +70,7 @@ const createQuantileSeq = exports.createQuantileSeq = /* #__PURE__ */(0, _factor
75
70
  'Array | Matrix, Array | Matrix, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection)
76
71
  });
77
72
  function _quantileSeqDim(data, prob, sorted, dim, fn) {
78
- return apply(data, dim, x => fn(x, prob, sorted));
73
+ return mapSlices(data, dim, x => fn(x, prob, sorted));
79
74
  }
80
75
  function _quantileSeqProbNumber(data, probOrN, sorted) {
81
76
  let probArr;
@@ -10,7 +10,7 @@ var _factory = require("../../utils/factory.js");
10
10
  var _improveErrorMessage = require("./utils/improveErrorMessage.js");
11
11
  const DEFAULT_NORMALIZATION = 'unbiased';
12
12
  const name = 'variance';
13
- const dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'apply', 'isNaN'];
13
+ const dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'mapSlices', 'isNaN'];
14
14
  const createVariance = exports.createVariance = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
15
15
  let {
16
16
  typed,
@@ -18,7 +18,7 @@ const createVariance = exports.createVariance = /* #__PURE__ */(0, _factory.fact
18
18
  subtract,
19
19
  multiply,
20
20
  divide,
21
- apply,
21
+ mapSlices,
22
22
  isNaN
23
23
  } = _ref;
24
24
  /**
@@ -151,7 +151,7 @@ const createVariance = exports.createVariance = /* #__PURE__ */(0, _factory.fact
151
151
  if (array.length === 0) {
152
152
  throw new SyntaxError('Function variance requires one or more parameters (0 provided)');
153
153
  }
154
- return apply(array, dim, x => _var(x, normalization));
154
+ return mapSlices(array, dim, x => _var(x, normalization));
155
155
  } catch (err) {
156
156
  throw (0, _improveErrorMessage.improveErrorMessage)(err, 'variance');
157
157
  }
@@ -17,7 +17,7 @@ const dependencies = ['typed', 'format'];
17
17
  *
18
18
  * Examples:
19
19
  *
20
- * math.hex(240) // returns "0xF0"
20
+ * math.hex(240) // returns "0xf0"
21
21
  *
22
22
  * See also:
23
23
  *
@@ -31,12 +31,12 @@ const createPrint = exports.createPrint = /* #__PURE__ */(0, _factory.factory)(n
31
31
  * // the following outputs: 'The value of pi is 3.141592654'
32
32
  * math.print('The value of pi is $pi', {pi: math.pi}, 10)
33
33
  *
34
- * // the following outputs: 'hello Mary! The date is 2013-03-23'
34
+ * // the following outputs: 'Hello Mary! The date is 2013-03-23'
35
35
  * math.print('Hello $user.name! The date is $date', {
36
36
  * user: {
37
37
  * name: 'Mary',
38
38
  * },
39
- * date: new Date(2013, 2, 23).toISOString().substring(0, 10)
39
+ * date: '2013-03-23'
40
40
  * })
41
41
  *
42
42
  * // the following outputs: 'My favorite fruits are apples and bananas !'
@@ -28,7 +28,7 @@ const createAcoth = exports.createAcoth = /* #__PURE__ */(0, _factory.factory)(n
28
28
  *
29
29
  * Examples:
30
30
  *
31
- * math.acoth(0.5) // returns 0.8047189562170503
31
+ * math.acoth(0.5) // returns 0.5493061443340548 - 1.5707963267948966i
32
32
  *
33
33
  * See also:
34
34
  *
@@ -29,7 +29,7 @@ const createAcsc = exports.createAcsc = /* #__PURE__ */(0, _factory.factory)(nam
29
29
  *
30
30
  * math.acsc(2) // returns 0.5235987755982989
31
31
  * math.acsc(0.5) // returns Complex 1.5707963267948966 -1.3169578969248166i
32
- * math.acsc(math.csc(1.5)) // returns number ~1.5
32
+ * math.acsc(math.csc(1.5)) // returns number 1.5
33
33
  *
34
34
  * See also:
35
35
  *