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
@@ -1,6 +1,7 @@
1
- import { factory } from '../../utils/factory.js';
2
- import { deepMap } from '../../utils/collection.js';
3
1
  import { log2Number } from '../../plain/number/index.js';
2
+ import { promoteLogarithm } from '../../utils/bigint.js';
3
+ import { deepMap } from '../../utils/collection.js';
4
+ import { factory } from '../../utils/factory.js';
4
5
  var name = 'log2';
5
6
  var dependencies = ['typed', 'config', 'Complex'];
6
7
  export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -34,22 +35,26 @@ export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
34
35
  * @return {number | BigNumber | Complex | Array | Matrix}
35
36
  * Returns the 2-base logarithm of `x`
36
37
  */
38
+ function complexLog2Number(x) {
39
+ return _log2Complex(new Complex(x, 0));
40
+ }
37
41
  return typed(name, {
38
42
  number: function number(x) {
39
43
  if (x >= 0 || config.predictable) {
40
44
  return log2Number(x);
41
45
  } else {
42
46
  // negative value -> complex value computation
43
- return _log2Complex(new Complex(x, 0));
47
+ return complexLog2Number(x);
44
48
  }
45
49
  },
50
+ bigint: promoteLogarithm(4, log2Number, config, complexLog2Number),
46
51
  Complex: _log2Complex,
47
52
  BigNumber: function BigNumber(x) {
48
53
  if (!x.isNegative() || config.predictable) {
49
54
  return x.log(2);
50
55
  } else {
51
56
  // downgrade to number, return Complex valued result
52
- return _log2Complex(new Complex(x.toNumber(), 0));
57
+ return complexLog2Number(x.toNumber());
53
58
  }
54
59
  },
55
60
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
@@ -137,6 +137,10 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
137
137
  var xSelected = bigNearlyEqual(x, xEpsilon, config.relTol, config.absTol) ? xEpsilon : x;
138
138
  return xSelected.toDecimalPlaces(n.toNumber());
139
139
  },
140
+ // bigints can't be rounded
141
+ bigint: b => b,
142
+ 'bigint, number': (b, _dummy) => b,
143
+ 'bigint, BigNumber': (b, _dummy) => b,
140
144
  Fraction: function Fraction(x) {
141
145
  return x.round();
142
146
  },
@@ -20,7 +20,7 @@ export var createCtranspose = /* #__PURE__ */factory(name, dependencies, _ref =>
20
20
  * Examples:
21
21
  *
22
22
  * const A = [[1, 2, 3], [4, 5, math.complex(6,7)]]
23
- * math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:7}]]
23
+ * math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:-7}]]
24
24
  *
25
25
  * See also:
26
26
  *
@@ -2,9 +2,9 @@ import { factory } from '../../utils/factory.js';
2
2
  import { arraySize } from '../../utils/array.js';
3
3
  import { isMatrix } from '../../utils/is.js';
4
4
  import { IndexError } from '../../error/IndexError.js';
5
- var name = 'apply';
5
+ var name = 'mapSlices';
6
6
  var dependencies = ['typed', 'isInteger'];
7
- export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
7
+ export var createMapSlices = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
10
10
  isInteger
@@ -16,7 +16,7 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
16
16
  *
17
17
  * Syntax:
18
18
  *
19
- * math.apply(A, dim, callback)
19
+ * math.mapSlices(A, dim, callback)
20
20
  *
21
21
  * Where:
22
22
  *
@@ -27,19 +27,24 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
27
27
  * const A = [[1, 2], [3, 4]]
28
28
  * const sum = math.sum
29
29
  *
30
- * math.apply(A, 0, sum) // returns [4, 6]
31
- * math.apply(A, 1, sum) // returns [3, 7]
30
+ * math.mapSlices(A, 0, sum) // returns [4, 6]
31
+ * math.mapSlices(A, 1, sum) // returns [3, 7]
32
32
  *
33
33
  * See also:
34
34
  *
35
35
  * map, filter, forEach
36
36
  *
37
+ * Note:
38
+ *
39
+ * `mapSlices()` is also currently available via its deprecated
40
+ * synonym `apply()`.
41
+ *
37
42
  * @param {Array | Matrix} array The input Matrix
38
43
  * @param {number} dim The dimension along which the callback is applied
39
44
  * @param {Function} callback The callback function that is applied. This Function
40
45
  * should take an array or 1-d matrix as an input and
41
46
  * return a number.
42
- * @return {Array | Matrix} res The residual matrix with the function applied over some dimension.
47
+ * @return {Array | Matrix} res The residual matrix with the function mapped on the slices over some dimension.
43
48
  */
44
49
  return typed(name, {
45
50
  'Array | Matrix, number | BigNumber, function': function Array__Matrix_number__BigNumber_function(mat, dim, callback) {
@@ -51,12 +56,14 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
51
56
  throw new IndexError(dim, size.length);
52
57
  }
53
58
  if (isMatrix(mat)) {
54
- return mat.create(_apply(mat.valueOf(), dim, callback), mat.datatype());
59
+ return mat.create(_mapSlices(mat.valueOf(), dim, callback), mat.datatype());
55
60
  } else {
56
- return _apply(mat, dim, callback);
61
+ return _mapSlices(mat, dim, callback);
57
62
  }
58
63
  }
59
64
  });
65
+ }, {
66
+ formerly: 'apply'
60
67
  });
61
68
 
62
69
  /**
@@ -67,7 +74,7 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
67
74
  * @returns {Array} ret
68
75
  * @private
69
76
  */
70
- function _apply(mat, dim, callback) {
77
+ function _mapSlices(mat, dim, callback) {
71
78
  var i, ret, tran;
72
79
  if (dim <= 0) {
73
80
  if (!Array.isArray(mat[0])) {
@@ -76,14 +83,14 @@ function _apply(mat, dim, callback) {
76
83
  tran = _switch(mat);
77
84
  ret = [];
78
85
  for (i = 0; i < tran.length; i++) {
79
- ret[i] = _apply(tran[i], dim - 1, callback);
86
+ ret[i] = _mapSlices(tran[i], dim - 1, callback);
80
87
  }
81
88
  return ret;
82
89
  }
83
90
  } else {
84
91
  ret = [];
85
92
  for (i = 0; i < mat.length; i++) {
86
- ret[i] = _apply(mat[i], dim - 1, callback);
93
+ ret[i] = _mapSlices(mat[i], dim - 1, callback);
87
94
  }
88
95
  return ret;
89
96
  }
@@ -9,8 +9,10 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
9
9
  } = _ref;
10
10
  /**
11
11
  * Create a matrix by evaluating a generating function at each index.
12
- * The simplest overload returns a multi-dimensional array as long as `size` is an array.
13
- * Passing `size` as a Matrix or specifying a `format` will result in returning a Matrix.
12
+ * The simplest overload returns a multi-dimensional array as long as `size`
13
+ * is an array.
14
+ * Passing `size` as a Matrix or specifying a `format` will result in
15
+ * returning a Matrix.
14
16
  *
15
17
  * Syntax:
16
18
  *
@@ -20,6 +22,37 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
20
22
  * math.matrixFromFunction(size, format, fn)
21
23
  * math.matrixFromFunction(size, format, datatype, fn)
22
24
  *
25
+ * Where:
26
+ *
27
+ * - `size: (number[] | Matrix)`
28
+ * A vector giving the extent of the array to be created in each
29
+ * dimension. If size has one entry, a vector is created; if it
30
+ * has two, a rectangular array/Matrix is created; if three, a
31
+ * three-dimensional array/Matrix is created; and so on.
32
+ * - `fn: (index: number[]) => MathType`
33
+ * The callback function that will generate the entries of the
34
+ * matrix. It is called in turn with the index of each entry of
35
+ * the matrix. The index is always an ordinary array of numbers
36
+ * with the same length as _size_. So for vectors, you will get
37
+ * indices like `[0]` or `[1]`, whereas for matrices, you will
38
+ * get indices like `[2, 0]` or `[1,3]`. The return value may
39
+ * be any type that can go in an array or Matrix entry, although
40
+ * if you supply the _datatype_ argument, you must yourself ensure
41
+ * the type of the return value matches. Note that currently,
42
+ * your callback _fn_ will receive 0-based indices for the matrix
43
+ * entries, regardless of whether matrixFromFunction is invoked
44
+ * directly from JavaScript or via the mathjs expression language.
45
+ * - `format: 'dense'|'sparse'`
46
+ * Specifies the storage format for the resulting Matrix. Note that
47
+ * if this argument is given, the return value will always be a
48
+ * Matrix (rather than possibly an Array).
49
+ * - `datatype: string`
50
+ * Specifies the data type of entries of the new matrix. If given,
51
+ * it should be the name of a data type that mathjs supports, as
52
+ * returned by the math.typeOf function. It is up to the caller
53
+ * to make certain that all values returned by _fn_ are consistent
54
+ * with this datatype if specified.
55
+ *
23
56
  * Examples:
24
57
  *
25
58
  * math.matrixFromFunction([3,3], i => i[0] - i[1]) // an antisymmetric matrix
@@ -28,7 +61,7 @@ export var createMatrixFromFunction = /* #__PURE__ */factory(name, dependencies,
28
61
  *
29
62
  * See also:
30
63
  *
31
- * matrix, zeros
64
+ * matrix, typeOf, zeros
32
65
  *
33
66
  * @param {Array | Matrix} size The size of the matrix to be created
34
67
  * @param {function} fn Callback function invoked for every entry in the matrix
@@ -35,36 +35,48 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
35
35
  *
36
36
  * - `str: string`
37
37
  * A string 'start:end' or 'start:step:end'
38
- * - `start: {number | BigNumber | Unit}`
38
+ * - `start: {number | bigint | BigNumber | Fraction | Unit}`
39
39
  * Start of the range
40
- * - `end: number | BigNumber | Unit`
40
+ * - `end: number | bigint | BigNumber | Fraction | Unit`
41
41
  * End of the range, excluded by default, included when parameter includeEnd=true
42
- * - `step: number | BigNumber | Unit`
42
+ * - `step: number | bigint | BigNumber | Fraction | Unit`
43
43
  * Step size. Default value is 1.
44
44
  * - `includeEnd: boolean`
45
45
  * Option to specify whether to include the end or not. False by default.
46
46
  *
47
+ * Note that the return type of the range is taken from the type of
48
+ * the start/end. If only one these is a built-in `number` type, it will
49
+ * be promoted to the type of the other endpoint. However, in the case of
50
+ * Unit values, both endpoints must have compatible units, and the return
51
+ * value will have compatible units as well.
52
+ *
47
53
  * Examples:
48
54
  *
49
55
  * math.range(2, 6) // [2, 3, 4, 5]
50
56
  * math.range(2, -3, -1) // [2, 1, 0, -1, -2]
51
57
  * math.range('2:1:6') // [2, 3, 4, 5]
52
58
  * math.range(2, 6, true) // [2, 3, 4, 5, 6]
59
+ * math.range(2, math.fraction(8,3), math.fraction(1,3)) // [fraction(2), fraction(7,3)]
53
60
  * math.range(math.unit(2, 'm'), math.unit(-3, 'm'), math.unit(-1, 'm')) // [2 m, 1 m, 0 m , -1 m, -2 m]
54
61
  *
55
62
  * See also:
56
63
  *
57
64
  * ones, zeros, size, subset
58
65
  *
59
- * @param {*} args Parameters describing the ranges `start`, `end`, and optional `step`.
66
+ * @param {*} args Parameters describing the range's `start`, `end`, and optional `step`.
60
67
  * @return {Array | Matrix} range
61
68
  */
62
69
  return typed(name, {
63
70
  // TODO: simplify signatures when typed-function supports default values and optional arguments
64
71
 
65
- // TODO: a number or boolean should not be converted to string here
66
72
  string: _strRange,
67
73
  'string, boolean': _strRange,
74
+ number: function number(oops) {
75
+ throw new TypeError("Too few arguments to function range(): ".concat(oops));
76
+ },
77
+ boolean: function boolean(oops) {
78
+ throw new TypeError("Unexpected type of argument 1 to function range(): ".concat(oops, ", number|bigint|BigNumber|Fraction"));
79
+ },
68
80
  'number, number': function number_number(start, end) {
69
81
  return _out(_range(start, end, 1, false));
70
82
  },
@@ -77,6 +89,31 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
77
89
  'number, number, number, boolean': function number_number_number_boolean(start, end, step, includeEnd) {
78
90
  return _out(_range(start, end, step, includeEnd));
79
91
  },
92
+ // Handle bigints; if either limit is bigint, range should be too
93
+ 'bigint, bigint|number': function bigint_bigintNumber(start, end) {
94
+ return _out(_range(start, end, 1n, false));
95
+ },
96
+ 'number, bigint': function number_bigint(start, end) {
97
+ return _out(_range(BigInt(start), end, 1n, false));
98
+ },
99
+ 'bigint, bigint|number, bigint|number': function bigint_bigintNumber_bigintNumber(start, end, step) {
100
+ return _out(_range(start, end, BigInt(step), false));
101
+ },
102
+ 'number, bigint, bigint|number': function number_bigint_bigintNumber(start, end, step) {
103
+ return _out(_range(BigInt(start), end, BigInt(step), false));
104
+ },
105
+ 'bigint, bigint|number, boolean': function bigint_bigintNumber_boolean(start, end, includeEnd) {
106
+ return _out(_range(start, end, 1n, includeEnd));
107
+ },
108
+ 'number, bigint, boolean': function number_bigint_boolean(start, end, includeEnd) {
109
+ return _out(_range(BigInt(start), end, 1n, includeEnd));
110
+ },
111
+ 'bigint, bigint|number, bigint|number, boolean': function bigint_bigintNumber_bigintNumber_boolean(start, end, step, includeEnd) {
112
+ return _out(_range(start, end, BigInt(step), includeEnd));
113
+ },
114
+ 'number, bigint, bigint|number, boolean': function number_bigint_bigintNumber_boolean(start, end, step, includeEnd) {
115
+ return _out(_range(BigInt(start), end, BigInt(step), includeEnd));
116
+ },
80
117
  'BigNumber, BigNumber': function BigNumber_BigNumber(start, end) {
81
118
  var BigNumber = start.constructor;
82
119
  return _out(_range(start, end, new BigNumber(1), false));
@@ -91,6 +128,18 @@ export var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {
91
128
  'BigNumber, BigNumber, BigNumber, boolean': function BigNumber_BigNumber_BigNumber_boolean(start, end, step, includeEnd) {
92
129
  return _out(_range(start, end, step, includeEnd));
93
130
  },
131
+ 'Fraction, Fraction': function Fraction_Fraction(start, end) {
132
+ return _out(_range(start, end, 1, false));
133
+ },
134
+ 'Fraction, Fraction, Fraction': function Fraction_Fraction_Fraction(start, end, step) {
135
+ return _out(_range(start, end, step, false));
136
+ },
137
+ 'Fraction, Fraction, boolean': function Fraction_Fraction_boolean(start, end, includeEnd) {
138
+ return _out(_range(start, end, 1, includeEnd));
139
+ },
140
+ 'Fraction, Fraction, Fraction, boolean': function Fraction_Fraction_Fraction_boolean(start, end, step, includeEnd) {
141
+ return _out(_range(start, end, step, includeEnd));
142
+ },
94
143
  'Unit, Unit, Unit': function Unit_Unit_Unit(start, end, step) {
95
144
  return _out(_range(start, end, step, false));
96
145
  },
@@ -3,11 +3,13 @@ import { randomMatrix } from './util/randomMatrix.js';
3
3
  import { createRng } from './util/seededRNG.js';
4
4
  import { isMatrix } from '../../utils/is.js';
5
5
  var name = 'randomInt';
6
- var dependencies = ['typed', 'config', '?on'];
6
+ var dependencies = ['typed', 'config', 'log2', '?on'];
7
+ var simpleCutoff = 2n ** 30n;
7
8
  export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => {
8
9
  var {
9
10
  typed,
10
11
  config,
12
+ log2,
11
13
  on
12
14
  } = _ref;
13
15
  // seeded pseudo random number generator
@@ -26,7 +28,7 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
26
28
  *
27
29
  * Syntax:
28
30
  *
29
- * math.randomInt() // generate a random integer between 0 and 1
31
+ * math.randomInt() // generate either 0 or 1, randomly
30
32
  * math.randomInt(max) // generate a random integer between 0 and max
31
33
  * math.randomInt(min, max) // generate a random integer between min and max
32
34
  * math.randomInt(size) // generate a matrix with random integer between 0 and 1
@@ -50,9 +52,11 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
50
52
  * @return {number | Array | Matrix} A random integer value
51
53
  */
52
54
  return typed(name, {
53
- '': () => _randomInt(0, 1),
55
+ '': () => _randomInt(0, 2),
54
56
  number: max => _randomInt(0, max),
55
57
  'number, number': (min, max) => _randomInt(min, max),
58
+ bigint: max => _randomBigint(0n, max),
59
+ 'bigint, bigint': _randomBigint,
56
60
  'Array | Matrix': size => _randomIntMatrix(size, 0, 1),
57
61
  'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),
58
62
  'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)
@@ -64,4 +68,23 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
64
68
  function _randomInt(min, max) {
65
69
  return Math.floor(min + rng() * (max - min));
66
70
  }
71
+ function _randomBigint(min, max) {
72
+ var width = max - min; // number of choices
73
+ if (width <= simpleCutoff) {
74
+ // do it with number type
75
+ return min + BigInt(_randomInt(0, Number(width)));
76
+ }
77
+ // Too big to choose accurately that way. Instead, choose the correct
78
+ // number of random bits to cover the width, and repeat until the
79
+ // resulting number falls within the width
80
+ var bits = log2(width);
81
+ var picked = width;
82
+ while (picked >= width) {
83
+ picked = 0n;
84
+ for (var i = 0; i < bits; ++i) {
85
+ picked = 2n * picked + (rng() < 0.5 ? 0n : 1n);
86
+ }
87
+ }
88
+ return min + picked;
89
+ }
67
90
  });
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'larger';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
10
+ var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
11
11
  export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
+ bignumber,
15
16
  matrix,
16
17
  DenseMatrix,
17
18
  concat,
@@ -68,16 +69,23 @@ export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
68
69
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
69
70
  * @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false
70
71
  */
72
+ function bignumLarger(x, y) {
73
+ return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
74
+ }
71
75
  return typed(name, createLargerNumber({
72
76
  typed,
73
77
  config
74
78
  }), {
75
79
  'boolean, boolean': (x, y) => x > y,
76
- 'BigNumber, BigNumber': function BigNumber_BigNumber(x, y) {
77
- return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
78
- },
80
+ 'BigNumber, BigNumber': bignumLarger,
79
81
  'bigint, bigint': (x, y) => x > y,
80
82
  'Fraction, Fraction': (x, y) => x.compare(y) === 1,
83
+ 'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
84
+ return bignumLarger(bignumber(x), y);
85
+ },
86
+ 'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
87
+ return bignumLarger(x, bignumber(y));
88
+ },
81
89
  'Complex, Complex': function Complex_Complex() {
82
90
  throw new TypeError('No ordering relation is defined for complex numbers');
83
91
  }
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'smaller';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
10
+ var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
11
11
  export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
+ bignumber,
15
16
  matrix,
16
17
  DenseMatrix,
17
18
  concat,
@@ -68,16 +69,23 @@ export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
68
69
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
69
70
  * @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false
70
71
  */
72
+ function bignumSmaller(x, y) {
73
+ return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
74
+ }
71
75
  return typed(name, createSmallerNumber({
72
76
  typed,
73
77
  config
74
78
  }), {
75
79
  'boolean, boolean': (x, y) => x < y,
76
- 'BigNumber, BigNumber': function BigNumber_BigNumber(x, y) {
77
- return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
78
- },
80
+ 'BigNumber, BigNumber': bignumSmaller,
79
81
  'bigint, bigint': (x, y) => x < y,
80
82
  'Fraction, Fraction': (x, y) => x.compare(y) === -1,
83
+ 'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
84
+ return bignumSmaller(bignumber(x), y);
85
+ },
86
+ 'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
87
+ return bignumSmaller(x, bignumber(y));
88
+ },
81
89
  'Complex, Complex': function Complex_Complex(x, y) {
82
90
  throw new TypeError('No ordering relation is defined for complex numbers');
83
91
  }
@@ -83,7 +83,7 @@ export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
83
83
  var res;
84
84
  deepForEach(array, function (value) {
85
85
  try {
86
- if (isNaN(value) && typeof value === 'number') {
86
+ if (typeof value === 'number' && isNaN(value)) {
87
87
  res = NaN;
88
88
  } else if (res === undefined || larger(value, res)) {
89
89
  res = value;
@@ -83,7 +83,7 @@ export var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {
83
83
  var min;
84
84
  deepForEach(array, function (value) {
85
85
  try {
86
- if (isNaN(value) && typeof value === 'number') {
86
+ if (typeof value === 'number' && isNaN(value)) {
87
87
  min = NaN;
88
88
  } else if (min === undefined || smaller(value, min)) {
89
89
  min = value;
@@ -1,9 +1,8 @@
1
1
  import { isNumber } from '../../utils/is.js';
2
2
  import { flatten } from '../../utils/array.js';
3
3
  import { factory } from '../../utils/factory.js';
4
- import { createApply } from '../matrix/apply.js';
5
4
  var name = 'quantileSeq';
6
- var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
5
+ var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger', 'mapSlices'];
7
6
  export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref => {
8
7
  var {
9
8
  typed,
@@ -17,13 +16,9 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
17
16
  isInteger,
18
17
  smaller,
19
18
  smallerEq,
20
- larger
19
+ larger,
20
+ mapSlices
21
21
  } = _ref;
22
- var apply = createApply({
23
- typed,
24
- isInteger
25
- });
26
-
27
22
  /**
28
23
  * Compute the prob order quantile of a matrix or a list with values.
29
24
  * The sequence is sorted and the middle value is returned.
@@ -69,7 +64,7 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
69
64
  'Array | Matrix, Array | Matrix, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection)
70
65
  });
71
66
  function _quantileSeqDim(data, prob, sorted, dim, fn) {
72
- return apply(data, dim, x => fn(x, prob, sorted));
67
+ return mapSlices(data, dim, x => fn(x, prob, sorted));
73
68
  }
74
69
  function _quantileSeqProbNumber(data, probOrN, sorted) {
75
70
  var probArr;
@@ -4,7 +4,7 @@ import { factory } from '../../utils/factory.js';
4
4
  import { improveErrorMessage } from './utils/improveErrorMessage.js';
5
5
  var DEFAULT_NORMALIZATION = 'unbiased';
6
6
  var name = 'variance';
7
- var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'apply', 'isNaN'];
7
+ var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'mapSlices', 'isNaN'];
8
8
  export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
9
9
  var {
10
10
  typed,
@@ -12,7 +12,7 @@ export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  subtract,
13
13
  multiply,
14
14
  divide,
15
- apply,
15
+ mapSlices,
16
16
  isNaN
17
17
  } = _ref;
18
18
  /**
@@ -145,7 +145,7 @@ export var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {
145
145
  if (array.length === 0) {
146
146
  throw new SyntaxError('Function variance requires one or more parameters (0 provided)');
147
147
  }
148
- return apply(array, dim, x => _var(x, normalization));
148
+ return mapSlices(array, dim, x => _var(x, normalization));
149
149
  } catch (err) {
150
150
  throw improveErrorMessage(err, 'variance');
151
151
  }
@@ -11,7 +11,7 @@ var dependencies = ['typed', 'format'];
11
11
  *
12
12
  * Examples:
13
13
  *
14
- * math.hex(240) // returns "0xF0"
14
+ * math.hex(240) // returns "0xf0"
15
15
  *
16
16
  * See also:
17
17
  *
@@ -25,12 +25,12 @@ export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
25
25
  * // the following outputs: 'The value of pi is 3.141592654'
26
26
  * math.print('The value of pi is $pi', {pi: math.pi}, 10)
27
27
  *
28
- * // the following outputs: 'hello Mary! The date is 2013-03-23'
28
+ * // the following outputs: 'Hello Mary! The date is 2013-03-23'
29
29
  * math.print('Hello $user.name! The date is $date', {
30
30
  * user: {
31
31
  * name: 'Mary',
32
32
  * },
33
- * date: new Date(2013, 2, 23).toISOString().substring(0, 10)
33
+ * date: '2013-03-23'
34
34
  * })
35
35
  *
36
36
  * // the following outputs: 'My favorite fruits are apples and bananas !'
@@ -22,7 +22,7 @@ export var createAcoth = /* #__PURE__ */factory(name, dependencies, _ref => {
22
22
  *
23
23
  * Examples:
24
24
  *
25
- * math.acoth(0.5) // returns 0.8047189562170503
25
+ * math.acoth(0.5) // returns 0.5493061443340548 - 1.5707963267948966i
26
26
  *
27
27
  * See also:
28
28
  *
@@ -23,7 +23,7 @@ export var createAcsc = /* #__PURE__ */factory(name, dependencies, _ref => {
23
23
  *
24
24
  * math.acsc(2) // returns 0.5235987755982989
25
25
  * math.acsc(0.5) // returns Complex 1.5707963267948966 -1.3169578969248166i
26
- * math.acsc(math.csc(1.5)) // returns number ~1.5
26
+ * math.acsc(math.csc(1.5)) // returns number 1.5
27
27
  *
28
28
  * See also:
29
29
  *
@@ -20,7 +20,7 @@ export var createAsin = /* #__PURE__ */factory(name, dependencies, _ref => {
20
20
  * Examples:
21
21
  *
22
22
  * math.asin(0.5) // returns number 0.5235987755982989
23
- * math.asin(math.sin(1.5)) // returns number ~1.5
23
+ * math.asin(math.sin(1.5)) // returns number 1.5
24
24
  *
25
25
  * math.asin(2) // returns Complex 1.5707963267948966 -1.3169578969248166i
26
26
  *
@@ -56,9 +56,10 @@ export var createAtan2 = /* #__PURE__ */factory(name, dependencies, _ref => {
56
56
  *
57
57
  * math.atan2(2, 2) / math.pi // returns number 0.25
58
58
  *
59
- * const angle = math.unit(60, 'deg') // returns Unit 60 deg
59
+ * const angle = math.unit(60, 'deg')
60
60
  * const x = math.cos(angle)
61
61
  * const y = math.sin(angle)
62
+ * math.atan2(y, x) * 180 / math.pi // returns 60
62
63
  *
63
64
  * math.atan(2) // returns number 1.1071487177940904
64
65
  *
@@ -28,7 +28,7 @@ export var createCos = /* #__PURE__ */factory(name, dependencies, _ref => {
28
28
  * math.cos(math.unit(60, 'deg')) // returns number 0.5
29
29
  *
30
30
  * const angle = 0.2
31
- * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number ~1
31
+ * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number 1
32
32
  *
33
33
  * See also:
34
34
  *
@@ -28,7 +28,7 @@ export var createSin = /* #__PURE__ */factory(name, dependencies, _ref => {
28
28
  * math.sin(math.unit(30, 'deg')) // returns number 0.5
29
29
  *
30
30
  * const angle = 0.2
31
- * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number ~1
31
+ * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number 1
32
32
  *
33
33
  * See also:
34
34
  *
@@ -26,7 +26,7 @@ export var createIsInteger = /* #__PURE__ */factory(name, dependencies, _ref =>
26
26
  * math.isInteger(math.fraction(4)) // returns true
27
27
  * math.isInteger('3') // returns true
28
28
  * math.isInteger([3, 0.5, -2]) // returns [true, false, true]
29
- * math.isInteger(math.complex('2-4i')) // throws an error
29
+ * math.isInteger(math.complex('2-4i')) // throws TypeError
30
30
  *
31
31
  * See also:
32
32
  *
package/lib/esm/header.js CHANGED
@@ -10,7 +10,7 @@
10
10
  * @date @@date
11
11
  *
12
12
  * @license
13
- * Copyright (C) 2013-2024 Jos de Jong <wjosdejong@gmail.com>
13
+ * Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
14
14
  *
15
15
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
16
16
  * use this file except in compliance with the License. You may obtain a copy