mathjs 14.0.1 → 14.2.0

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