mathjs 14.1.0 → 14.2.0

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