mathjs 14.1.0 → 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 (104) hide show
  1. package/HISTORY.md +11 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/core/function/import.js +14 -4
  6. package/lib/cjs/entry/dependenciesAny/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
  7. package/lib/cjs/entry/dependenciesAny/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
  8. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
  11. package/lib/cjs/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
  12. package/lib/cjs/entry/dependenciesAny.generated.js +14 -14
  13. package/lib/cjs/entry/dependenciesNumber/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
  14. package/lib/cjs/entry/dependenciesNumber/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
  15. package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  16. package/lib/cjs/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
  17. package/lib/cjs/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
  18. package/lib/cjs/entry/dependenciesNumber.generated.js +14 -14
  19. package/lib/cjs/entry/impureFunctionsAny.generated.js +86 -85
  20. package/lib/cjs/entry/impureFunctionsNumber.generated.js +13 -13
  21. package/lib/cjs/entry/pureFunctionsAny.generated.js +328 -326
  22. package/lib/cjs/entry/pureFunctionsNumber.generated.js +13 -11
  23. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  24. package/lib/cjs/expression/embeddedDocs/function/matrix/mapSlices.js +17 -0
  25. package/lib/cjs/expression/transform/index.transform.js +2 -2
  26. package/lib/cjs/expression/transform/{apply.transform.js → mapSlices.transform.js} +11 -10
  27. package/lib/cjs/expression/transform/quantileSeq.transform.js +5 -3
  28. package/lib/cjs/expression/transform/variance.transform.js +3 -3
  29. package/lib/cjs/factoriesAny.js +14 -14
  30. package/lib/cjs/factoriesNumber.js +16 -15
  31. package/lib/cjs/function/arithmetic/ceil.js +34 -26
  32. package/lib/cjs/function/arithmetic/fix.js +3 -0
  33. package/lib/cjs/function/arithmetic/floor.js +41 -26
  34. package/lib/cjs/function/arithmetic/round.js +4 -0
  35. package/lib/cjs/function/matrix/ctranspose.js +1 -1
  36. package/lib/cjs/function/matrix/{apply.js → mapSlices.js} +19 -12
  37. package/lib/cjs/function/matrix/matrixFromFunction.js +36 -3
  38. package/lib/cjs/function/matrix/range.js +54 -5
  39. package/lib/cjs/function/statistics/quantileSeq.js +4 -9
  40. package/lib/cjs/function/statistics/variance.js +3 -3
  41. package/lib/cjs/function/string/hex.js +1 -1
  42. package/lib/cjs/function/trigonometry/acoth.js +1 -1
  43. package/lib/cjs/function/trigonometry/acsc.js +1 -1
  44. package/lib/cjs/function/trigonometry/asin.js +1 -1
  45. package/lib/cjs/function/trigonometry/atan2.js +2 -1
  46. package/lib/cjs/function/trigonometry/cos.js +1 -1
  47. package/lib/cjs/function/trigonometry/sin.js +1 -1
  48. package/lib/cjs/header.js +2 -2
  49. package/lib/cjs/type/matrix/MatrixIndex.js +6 -3
  50. package/lib/cjs/type/matrix/Range.js +15 -8
  51. package/lib/cjs/utils/factory.js +5 -2
  52. package/lib/cjs/utils/snapshot.js +8 -1
  53. package/lib/cjs/version.js +1 -1
  54. package/lib/esm/core/function/import.js +14 -4
  55. package/lib/esm/entry/{dependenciesNumber/dependenciesApply.generated.js → dependenciesAny/dependenciesMapSlices.generated.js} +3 -3
  56. package/lib/esm/entry/{dependenciesNumber/dependenciesApplyTransform.generated.js → dependenciesAny/dependenciesMapSlicesTransform.generated.js} +3 -3
  57. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  58. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
  59. package/lib/esm/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
  60. package/lib/esm/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
  61. package/lib/esm/entry/dependenciesAny.generated.js +2 -2
  62. package/lib/esm/entry/{dependenciesAny/dependenciesApply.generated.js → dependenciesNumber/dependenciesMapSlices.generated.js} +3 -3
  63. package/lib/esm/entry/{dependenciesAny/dependenciesApplyTransform.generated.js → dependenciesNumber/dependenciesMapSlicesTransform.generated.js} +3 -3
  64. package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  65. package/lib/esm/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
  66. package/lib/esm/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
  67. package/lib/esm/entry/dependenciesNumber.generated.js +2 -2
  68. package/lib/esm/entry/impureFunctionsAny.generated.js +88 -87
  69. package/lib/esm/entry/impureFunctionsNumber.generated.js +15 -15
  70. package/lib/esm/entry/pureFunctionsAny.generated.js +326 -324
  71. package/lib/esm/entry/pureFunctionsNumber.generated.js +12 -10
  72. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  73. package/lib/esm/expression/embeddedDocs/function/matrix/mapSlices.js +11 -0
  74. package/lib/esm/expression/transform/index.transform.js +3 -3
  75. package/lib/esm/expression/transform/mapSlices.transform.js +47 -0
  76. package/lib/esm/expression/transform/quantileSeq.transform.js +5 -3
  77. package/lib/esm/expression/transform/variance.transform.js +3 -3
  78. package/lib/esm/factoriesAny.js +2 -2
  79. package/lib/esm/factoriesNumber.js +2 -2
  80. package/lib/esm/function/arithmetic/ceil.js +35 -27
  81. package/lib/esm/function/arithmetic/fix.js +3 -0
  82. package/lib/esm/function/arithmetic/floor.js +42 -27
  83. package/lib/esm/function/arithmetic/round.js +4 -0
  84. package/lib/esm/function/matrix/ctranspose.js +1 -1
  85. package/lib/esm/function/matrix/{apply.js → mapSlices.js} +18 -11
  86. package/lib/esm/function/matrix/matrixFromFunction.js +36 -3
  87. package/lib/esm/function/matrix/range.js +54 -5
  88. package/lib/esm/function/statistics/quantileSeq.js +4 -9
  89. package/lib/esm/function/statistics/variance.js +3 -3
  90. package/lib/esm/function/string/hex.js +1 -1
  91. package/lib/esm/function/trigonometry/acoth.js +1 -1
  92. package/lib/esm/function/trigonometry/acsc.js +1 -1
  93. package/lib/esm/function/trigonometry/asin.js +1 -1
  94. package/lib/esm/function/trigonometry/atan2.js +2 -1
  95. package/lib/esm/function/trigonometry/cos.js +1 -1
  96. package/lib/esm/function/trigonometry/sin.js +1 -1
  97. package/lib/esm/type/matrix/MatrixIndex.js +6 -3
  98. package/lib/esm/type/matrix/Range.js +16 -9
  99. package/lib/esm/utils/factory.js +5 -2
  100. package/lib/esm/utils/snapshot.js +8 -1
  101. package/lib/esm/version.js +1 -1
  102. package/package.json +1 -1
  103. package/types/index.d.ts +75 -12
  104. package/lib/esm/expression/transform/apply.transform.js +0 -44
@@ -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
  },
@@ -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
  *
@@ -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
  *
@@ -26,7 +26,7 @@ const createAsin = exports.createAsin = /* #__PURE__ */(0, _factory.factory)(nam
26
26
  * Examples:
27
27
  *
28
28
  * math.asin(0.5) // returns number 0.5235987755982989
29
- * math.asin(math.sin(1.5)) // returns number ~1.5
29
+ * math.asin(math.sin(1.5)) // returns number 1.5
30
30
  *
31
31
  * math.asin(2) // returns Complex 1.5707963267948966 -1.3169578969248166i
32
32
  *
@@ -62,9 +62,10 @@ const createAtan2 = exports.createAtan2 = /* #__PURE__ */(0, _factory.factory)(n
62
62
  *
63
63
  * math.atan2(2, 2) / math.pi // returns number 0.25
64
64
  *
65
- * const angle = math.unit(60, 'deg') // returns Unit 60 deg
65
+ * const angle = math.unit(60, 'deg')
66
66
  * const x = math.cos(angle)
67
67
  * const y = math.sin(angle)
68
+ * math.atan2(y, x) * 180 / math.pi // returns 60
68
69
  *
69
70
  * math.atan(2) // returns number 1.1071487177940904
70
71
  *
@@ -34,7 +34,7 @@ const createCos = exports.createCos = /* #__PURE__ */(0, _factory.factory)(name,
34
34
  * math.cos(math.unit(60, 'deg')) // returns number 0.5
35
35
  *
36
36
  * const angle = 0.2
37
- * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number ~1
37
+ * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number 1
38
38
  *
39
39
  * See also:
40
40
  *
@@ -34,7 +34,7 @@ const createSin = exports.createSin = /* #__PURE__ */(0, _factory.factory)(name,
34
34
  * math.sin(math.unit(30, 'deg')) // returns number 0.5
35
35
  *
36
36
  * const angle = 0.2
37
- * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number ~1
37
+ * math.pow(math.sin(angle), 2) + math.pow(math.cos(angle), 2) // returns number 1
38
38
  *
39
39
  * See also:
40
40
  *
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 14.1.0
10
- * @date 2025-01-24
9
+ * @version 14.2.0
10
+ * @date 2025-01-30
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
@@ -48,6 +48,7 @@ const createIndexClass = exports.createIndexClass = /* #__PURE__ */(0, _factory.
48
48
  const arg = arguments[i];
49
49
  const argIsArray = (0, _is.isArray)(arg);
50
50
  const argIsMatrix = (0, _is.isMatrix)(arg);
51
+ const argType = typeof arg;
51
52
  let sourceSize = null;
52
53
  if ((0, _is.isRange)(arg)) {
53
54
  this._dimensions.push(arg);
@@ -69,13 +70,15 @@ const createIndexClass = exports.createIndexClass = /* #__PURE__ */(0, _factory.
69
70
  if (size.length !== 1 || size[0] !== 1 || sourceSize !== null) {
70
71
  this._isScalar = false;
71
72
  }
72
- } else if (typeof arg === 'number') {
73
+ } else if (argType === 'number') {
73
74
  this._dimensions.push(_createImmutableMatrix([arg]));
74
- } else if (typeof arg === 'string') {
75
+ } else if (argType === 'bigint') {
76
+ this._dimensions.push(_createImmutableMatrix([Number(arg)]));
77
+ } else if (argType === 'string') {
75
78
  // object property (arguments.count should be 1)
76
79
  this._dimensions.push(arg);
77
80
  } else {
78
- throw new TypeError('Dimension must be an Array, Matrix, number, string, or Range');
81
+ throw new TypeError('Dimension must be an Array, Matrix, number, bigint, string, or Range');
79
82
  }
80
83
  this._sourceSize.push(sourceSize);
81
84
  // TODO: implement support for wildcard '*'
@@ -11,14 +11,21 @@ const name = 'Range';
11
11
  const dependencies = [];
12
12
  const createRangeClass = exports.createRangeClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, () => {
13
13
  /**
14
- * Create a range. A range has a start, step, and end, and contains functions
15
- * to iterate over the range.
14
+ * Create a range of numbers. A range has a start, step, and end,
15
+ * and contains functions to iterate over the range.
16
16
  *
17
17
  * A range can be constructed as:
18
18
  *
19
19
  * const range = new Range(start, end)
20
20
  * const range = new Range(start, end, step)
21
21
  *
22
+ * Note that the endpoints and step may be specified with other numeric
23
+ * types such as bigint or BigNumber, but they will be demoted to the
24
+ * built-in `number` type and the Range will only contain numbers. The
25
+ * rationale for this demotion is that Range objects are primarily used
26
+ * for indexing Matrix objects, and Matrix objects may only be indexed
27
+ * with `number`s.
28
+ *
22
29
  * To get the result of the range:
23
30
  * range.forEach(function (x) {
24
31
  * console.log(x)
@@ -51,22 +58,22 @@ const createRangeClass = exports.createRangeClass = /* #__PURE__ */(0, _factory.
51
58
  if (hasStart) {
52
59
  if ((0, _is.isBigNumber)(start)) {
53
60
  start = start.toNumber();
54
- } else if (typeof start !== 'number') {
55
- throw new TypeError('Parameter start must be a number');
61
+ } else if (typeof start !== 'number' && !(0, _is.isBigInt)(start)) {
62
+ throw new TypeError('Parameter start must be a number or bigint');
56
63
  }
57
64
  }
58
65
  if (hasEnd) {
59
66
  if ((0, _is.isBigNumber)(end)) {
60
67
  end = end.toNumber();
61
- } else if (typeof end !== 'number') {
62
- throw new TypeError('Parameter end must be a number');
68
+ } else if (typeof end !== 'number' && !(0, _is.isBigInt)(end)) {
69
+ throw new TypeError('Parameter end must be a number or bigint');
63
70
  }
64
71
  }
65
72
  if (hasStep) {
66
73
  if ((0, _is.isBigNumber)(step)) {
67
74
  step = step.toNumber();
68
- } else if (typeof step !== 'number') {
69
- throw new TypeError('Parameter step must be a number');
75
+ } else if (typeof step !== 'number' && !(0, _is.isBigInt)(step)) {
76
+ throw new TypeError('Parameter step must be a number or bigint');
70
77
  }
71
78
  }
72
79
  this.start = hasStart ? parseFloat(start) : 0;
@@ -31,8 +31,11 @@ var _object = require("./object.js");
31
31
  * @param {string} name Name of the function to be created
32
32
  * @param {string[]} dependencies The names of all required dependencies
33
33
  * @param {function} create Callback function called with an object with all dependencies
34
- * @param {Object} [meta] Optional object with meta information that will be attached
35
- * to the created factory function as property `meta`.
34
+ * @param {Object} [meta]
35
+ * Optional object with meta information that will be attached
36
+ * to the created factory function as property `meta`. For explanation
37
+ * of what meta properties can be specified and what they mean, see
38
+ * docs/core/extension.md.
36
39
  * @returns {function}
37
40
  */
38
41
  function factory(name, dependencies, create, meta) {
@@ -110,16 +110,22 @@ function createSnapshotFromFactories(factories) {
110
110
  const allClasses = {};
111
111
  const allNodeClasses = {};
112
112
  Object.keys(factories).forEach(factoryName => {
113
+ var _factory$meta$formerl, _factory$meta;
113
114
  const factory = factories[factoryName];
114
115
  const name = factory.fn;
115
116
  const isTransformFunction = factory.meta && factory.meta.isTransformFunction;
116
117
  const isClass = !isLowerCase(name[0]) && validateTypeOf(math[name]) === 'function';
117
118
  const dependenciesName = factory.fn + (isTransformFunction ? 'Transform' : '') + 'Dependencies';
119
+ const former = (_factory$meta$formerl = (_factory$meta = factory.meta) === null || _factory$meta === void 0 ? void 0 : _factory$meta.formerly) !== null && _factory$meta$formerl !== void 0 ? _factory$meta$formerl : '';
118
120
  allFactoryFunctions[factoryName] = 'function';
119
121
  allFunctionsConstantsClasses[name] = validateTypeOf(math[name]);
122
+ if (former) {
123
+ allFunctionsConstantsClasses[former] = allFunctionsConstantsClasses[name];
124
+ }
120
125
  allDependencyCollections[dependenciesName] = 'Object';
121
126
  if (isTransformFunction) {
122
127
  allTransformFunctions[name] = 'function';
128
+ if (former) allTransformFunctions[former] = 'function';
123
129
  }
124
130
  if (isClass) {
125
131
  if ((0, _string.endsWith)(name, 'Node')) {
@@ -129,6 +135,7 @@ function createSnapshotFromFactories(factories) {
129
135
  }
130
136
  } else {
131
137
  allFunctionsConstants[name] = validateTypeOf(math[name]);
138
+ if (former) allFunctionsConstants[former] = allFunctionsConstants[name];
132
139
  }
133
140
  });
134
141
  let embeddedDocs = {};
@@ -140,7 +147,7 @@ function createSnapshotFromFactories(factories) {
140
147
  embeddedDocs[name] = 'Object';
141
148
  }
142
149
  });
143
- embeddedDocs = exclude(embeddedDocs, ['equalScalar', 'apply', 'addScalar', 'subtractScalar', 'multiplyScalar', 'print', 'divideScalar', 'parse', 'compile', 'parser', 'chain', 'reviver', 'replacer']);
150
+ embeddedDocs = exclude(embeddedDocs, ['equalScalar', 'addScalar', 'subtractScalar', 'multiplyScalar', 'print', 'divideScalar', 'parse', 'compile', 'parser', 'chain', 'reviver', 'replacer']);
144
151
  const allTypeChecks = {};
145
152
  Object.keys(allIsFunctions).forEach(name => {
146
153
  if (name.indexOf('is') === 0) {
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '14.1.0';
7
+ const version = exports.version = '14.2.0';
8
8
  // Note: This file is automatically generated when building math.js.
9
9
  // Changes made in this file will be overwritten.
@@ -217,6 +217,7 @@ export function importFactory(typed, load, math, importedFactories) {
217
217
  * @private
218
218
  */
219
219
  function _importFactory(factory, options) {
220
+ var _factory$meta$formerl, _factory$meta;
220
221
  var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : factory.fn;
221
222
  if (name.includes('.')) {
222
223
  throw new Error('Factory name should not contain a nested path. ' + 'Name: ' + JSON.stringify(name));
@@ -260,28 +261,37 @@ export function importFactory(typed, load, math, importedFactories) {
260
261
  throw new Error('Cannot import "' + name + '": already exists');
261
262
  }
262
263
  };
264
+ var former = (_factory$meta$formerl = (_factory$meta = factory.meta) === null || _factory$meta === void 0 ? void 0 : _factory$meta.formerly) !== null && _factory$meta$formerl !== void 0 ? _factory$meta$formerl : '';
265
+ var needsTransform = isTransformFunctionFactory(factory) || factoryAllowedInExpressions(factory);
266
+ var withTransform = math.expression.mathWithTransform;
263
267
 
264
268
  // TODO: add unit test with non-lazy factory
265
269
  if (!factory.meta || factory.meta.lazy !== false) {
266
270
  lazy(namespace, name, resolver);
271
+ if (former) lazy(namespace, former, resolver);
267
272
 
268
273
  // FIXME: remove the `if (existing &&` condition again. Can we make sure subset is loaded before subset.transform? (Name collision, and no dependencies between the two)
269
274
  if (existing && existingTransform) {
270
275
  _deleteTransform(name);
276
+ if (former) _deleteTransform(former);
271
277
  } else {
272
- if (isTransformFunctionFactory(factory) || factoryAllowedInExpressions(factory)) {
273
- lazy(math.expression.mathWithTransform, name, () => namespace[name]);
278
+ if (needsTransform) {
279
+ lazy(withTransform, name, () => namespace[name]);
280
+ if (former) lazy(withTransform, former, () => namespace[name]);
274
281
  }
275
282
  }
276
283
  } else {
277
284
  namespace[name] = resolver();
285
+ if (former) namespace[former] = namespace[name];
278
286
 
279
287
  // FIXME: remove the `if (existing &&` condition again. Can we make sure subset is loaded before subset.transform? (Name collision, and no dependencies between the two)
280
288
  if (existing && existingTransform) {
281
289
  _deleteTransform(name);
290
+ if (former) _deleteTransform(former);
282
291
  } else {
283
- if (isTransformFunctionFactory(factory) || factoryAllowedInExpressions(factory)) {
284
- lazy(math.expression.mathWithTransform, name, () => namespace[name]);
292
+ if (needsTransform) {
293
+ lazy(withTransform, name, () => namespace[name]);
294
+ if (former) lazy(withTransform, former, () => namespace[name]);
285
295
  }
286
296
  }
287
297
  }
@@ -4,9 +4,9 @@
4
4
  */
5
5
  import { isIntegerDependencies } from './dependenciesIsInteger.generated.js';
6
6
  import { typedDependencies } from './dependenciesTyped.generated.js';
7
- import { createApply } from '../../factoriesNumber.js';
8
- export var applyDependencies = {
7
+ import { createMapSlices } from '../../factoriesAny.js';
8
+ export var mapSlicesDependencies = {
9
9
  isIntegerDependencies,
10
10
  typedDependencies,
11
- createApply
11
+ createMapSlices
12
12
  };
@@ -4,9 +4,9 @@
4
4
  */
5
5
  import { isIntegerDependencies } from './dependenciesIsInteger.generated.js';
6
6
  import { typedDependencies } from './dependenciesTyped.generated.js';
7
- import { createApplyTransform } from '../../factoriesNumber.js';
8
- export var applyTransformDependencies = {
7
+ import { createMapSlicesTransform } from '../../factoriesAny.js';
8
+ export var mapSlicesTransformDependencies = {
9
9
  isIntegerDependencies,
10
10
  typedDependencies,
11
- createApplyTransform
11
+ createMapSlicesTransform
12
12
  };
@@ -8,6 +8,7 @@ import { compareDependencies } from './dependenciesCompare.generated.js';
8
8
  import { divideDependencies } from './dependenciesDivide.generated.js';
9
9
  import { isIntegerDependencies } from './dependenciesIsInteger.generated.js';
10
10
  import { largerDependencies } from './dependenciesLarger.generated.js';
11
+ import { mapSlicesDependencies } from './dependenciesMapSlices.generated.js';
11
12
  import { multiplyDependencies } from './dependenciesMultiply.generated.js';
12
13
  import { partitionSelectDependencies } from './dependenciesPartitionSelect.generated.js';
13
14
  import { smallerDependencies } from './dependenciesSmaller.generated.js';
@@ -22,6 +23,7 @@ export var quantileSeqDependencies = {
22
23
  divideDependencies,
23
24
  isIntegerDependencies,
24
25
  largerDependencies,
26
+ mapSlicesDependencies,
25
27
  multiplyDependencies,
26
28
  partitionSelectDependencies,
27
29
  smallerDependencies,