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
@@ -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
  },
@@ -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
  *
@@ -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
  *
@@ -42,6 +42,7 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
42
42
  var arg = arguments[i];
43
43
  var argIsArray = isArray(arg);
44
44
  var argIsMatrix = isMatrix(arg);
45
+ var argType = typeof arg;
45
46
  var sourceSize = null;
46
47
  if (isRange(arg)) {
47
48
  this._dimensions.push(arg);
@@ -63,13 +64,15 @@ export var createIndexClass = /* #__PURE__ */factory(name, dependencies, _ref =>
63
64
  if (size.length !== 1 || size[0] !== 1 || sourceSize !== null) {
64
65
  this._isScalar = false;
65
66
  }
66
- } else if (typeof arg === 'number') {
67
+ } else if (argType === 'number') {
67
68
  this._dimensions.push(_createImmutableMatrix([arg]));
68
- } else if (typeof arg === 'string') {
69
+ } else if (argType === 'bigint') {
70
+ this._dimensions.push(_createImmutableMatrix([Number(arg)]));
71
+ } else if (argType === 'string') {
69
72
  // object property (arguments.count should be 1)
70
73
  this._dimensions.push(arg);
71
74
  } else {
72
- throw new TypeError('Dimension must be an Array, Matrix, number, string, or Range');
75
+ throw new TypeError('Dimension must be an Array, Matrix, number, bigint, string, or Range');
73
76
  }
74
77
  this._sourceSize.push(sourceSize);
75
78
  // TODO: implement support for wildcard '*'
@@ -1,18 +1,25 @@
1
- import { isBigNumber } from '../../utils/is.js';
1
+ import { isBigInt, isBigNumber } from '../../utils/is.js';
2
2
  import { format, sign } from '../../utils/number.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  var name = 'Range';
5
5
  var dependencies = [];
6
6
  export var createRangeClass = /* #__PURE__ */factory(name, dependencies, () => {
7
7
  /**
8
- * Create a range. A range has a start, step, and end, and contains functions
9
- * to iterate over the range.
8
+ * Create a range of numbers. A range has a start, step, and end,
9
+ * and contains functions to iterate over the range.
10
10
  *
11
11
  * A range can be constructed as:
12
12
  *
13
13
  * const range = new Range(start, end)
14
14
  * const range = new Range(start, end, step)
15
15
  *
16
+ * Note that the endpoints and step may be specified with other numeric
17
+ * types such as bigint or BigNumber, but they will be demoted to the
18
+ * built-in `number` type and the Range will only contain numbers. The
19
+ * rationale for this demotion is that Range objects are primarily used
20
+ * for indexing Matrix objects, and Matrix objects may only be indexed
21
+ * with `number`s.
22
+ *
16
23
  * To get the result of the range:
17
24
  * range.forEach(function (x) {
18
25
  * console.log(x)
@@ -45,22 +52,22 @@ export var createRangeClass = /* #__PURE__ */factory(name, dependencies, () => {
45
52
  if (hasStart) {
46
53
  if (isBigNumber(start)) {
47
54
  start = start.toNumber();
48
- } else if (typeof start !== 'number') {
49
- throw new TypeError('Parameter start must be a number');
55
+ } else if (typeof start !== 'number' && !isBigInt(start)) {
56
+ throw new TypeError('Parameter start must be a number or bigint');
50
57
  }
51
58
  }
52
59
  if (hasEnd) {
53
60
  if (isBigNumber(end)) {
54
61
  end = end.toNumber();
55
- } else if (typeof end !== 'number') {
56
- throw new TypeError('Parameter end must be a number');
62
+ } else if (typeof end !== 'number' && !isBigInt(end)) {
63
+ throw new TypeError('Parameter end must be a number or bigint');
57
64
  }
58
65
  }
59
66
  if (hasStep) {
60
67
  if (isBigNumber(step)) {
61
68
  step = step.toNumber();
62
- } else if (typeof step !== 'number') {
63
- throw new TypeError('Parameter step must be a number');
69
+ } else if (typeof step !== 'number' && !isBigInt(step)) {
70
+ throw new TypeError('Parameter step must be a number or bigint');
64
71
  }
65
72
  }
66
73
  this.start = hasStart ? parseFloat(start) : 0;
@@ -20,8 +20,11 @@ import { pickShallow } from './object.js';
20
20
  * @param {string} name Name of the function to be created
21
21
  * @param {string[]} dependencies The names of all required dependencies
22
22
  * @param {function} create Callback function called with an object with all dependencies
23
- * @param {Object} [meta] Optional object with meta information that will be attached
24
- * to the created factory function as property `meta`.
23
+ * @param {Object} [meta]
24
+ * Optional object with meta information that will be attached
25
+ * to the created factory function as property `meta`. For explanation
26
+ * of what meta properties can be specified and what they mean, see
27
+ * docs/core/extension.md.
25
28
  * @returns {function}
26
29
  */
27
30
  export function factory(name, dependencies, create, meta) {
@@ -101,16 +101,22 @@ export function createSnapshotFromFactories(factories) {
101
101
  var allClasses = {};
102
102
  var allNodeClasses = {};
103
103
  Object.keys(factories).forEach(factoryName => {
104
+ var _factory$meta$formerl, _factory$meta;
104
105
  var factory = factories[factoryName];
105
106
  var name = factory.fn;
106
107
  var isTransformFunction = factory.meta && factory.meta.isTransformFunction;
107
108
  var isClass = !isLowerCase(name[0]) && validateTypeOf(math[name]) === 'function';
108
109
  var dependenciesName = factory.fn + (isTransformFunction ? 'Transform' : '') + 'Dependencies';
110
+ 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 : '';
109
111
  allFactoryFunctions[factoryName] = 'function';
110
112
  allFunctionsConstantsClasses[name] = validateTypeOf(math[name]);
113
+ if (former) {
114
+ allFunctionsConstantsClasses[former] = allFunctionsConstantsClasses[name];
115
+ }
111
116
  allDependencyCollections[dependenciesName] = 'Object';
112
117
  if (isTransformFunction) {
113
118
  allTransformFunctions[name] = 'function';
119
+ if (former) allTransformFunctions[former] = 'function';
114
120
  }
115
121
  if (isClass) {
116
122
  if (endsWith(name, 'Node')) {
@@ -120,6 +126,7 @@ export function createSnapshotFromFactories(factories) {
120
126
  }
121
127
  } else {
122
128
  allFunctionsConstants[name] = validateTypeOf(math[name]);
129
+ if (former) allFunctionsConstants[former] = allFunctionsConstants[name];
123
130
  }
124
131
  });
125
132
  var embeddedDocs = {};
@@ -131,7 +138,7 @@ export function createSnapshotFromFactories(factories) {
131
138
  embeddedDocs[name] = 'Object';
132
139
  }
133
140
  });
134
- embeddedDocs = exclude(embeddedDocs, ['equalScalar', 'apply', 'addScalar', 'subtractScalar', 'multiplyScalar', 'print', 'divideScalar', 'parse', 'compile', 'parser', 'chain', 'reviver', 'replacer']);
141
+ embeddedDocs = exclude(embeddedDocs, ['equalScalar', 'addScalar', 'subtractScalar', 'multiplyScalar', 'print', 'divideScalar', 'parse', 'compile', 'parser', 'chain', 'reviver', 'replacer']);
135
142
  var allTypeChecks = {};
136
143
  Object.keys(allIsFunctions).forEach(name => {
137
144
  if (name.indexOf('is') === 0) {
@@ -1,3 +1,3 @@
1
- export var version = '14.1.0';
1
+ export var version = '14.2.0';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "14.1.0",
3
+ "version": "14.2.0",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
package/types/index.d.ts CHANGED
@@ -21,6 +21,12 @@ export type MathCollection<T = MathGeneric> = MathArray<T> | Matrix<T>
21
21
  export type MathType = MathScalarType | MathCollection
22
22
  export type MathExpression = string | string[] | MathCollection
23
23
 
24
+ // add type for Matrix Callback Function and Matrix Storage Format
25
+ export type MatrixStorageFormat = 'dense' | 'sparse'
26
+ export type MatrixFromFunctionCallback<T extends MathScalarType> = (
27
+ index: number[]
28
+ ) => T
29
+
24
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
31
  export type FactoryFunction<T> = (scope: any) => T
26
32
 
@@ -743,7 +749,7 @@ export interface MathJsInstance extends MathJsFactory {
743
749
  * @param format The Matrix storage format
744
750
  * @returns The created Matrix
745
751
  */
746
- matrix(format?: 'sparse' | 'dense'): Matrix
752
+ matrix(format?: MatrixStorageFormat): Matrix
747
753
  /**
748
754
  * @param data A multi dimensional array
749
755
  * @param format The Matrix storage format
@@ -752,12 +758,12 @@ export interface MathJsInstance extends MathJsFactory {
752
758
  */
753
759
  matrix(
754
760
  data: MathCollection | string[],
755
- format?: 'sparse' | 'dense',
761
+ format?: MatrixStorageFormat,
756
762
  dataType?: string
757
763
  ): Matrix
758
764
  matrix<T extends MathScalarType>(
759
765
  data: MathCollection<T>,
760
- format?: 'sparse' | 'dense',
766
+ format?: MatrixStorageFormat,
761
767
  dataType?: string
762
768
  ): Matrix<T>
763
769
 
@@ -1322,6 +1328,58 @@ export interface MathJsInstance extends MathJsFactory {
1322
1328
  hypot<T extends number | BigNumber>(...args: T[]): T
1323
1329
  hypot<T extends number | BigNumber>(args: T[]): T
1324
1330
 
1331
+ /**
1332
+ * Create a dense matrix from vectors as individual rows. If you pass column vectors, they will be transposed (but not conjugated!)
1333
+ * @param rows - a multi-dimensional number array or matrix
1334
+ */
1335
+ matrixFromRows(...rows: Matrix[]): Matrix
1336
+ matrixFromRows<T extends MathScalarType>(
1337
+ ...rows: (T[] | [T][] | Matrix)[]
1338
+ ): T[][]
1339
+
1340
+ /**
1341
+ * Create a dense matrix from vectors as individual columns. If you pass row vectors, they will be transposed (but not conjugated!)
1342
+ * @param cols - a multi-dimensional number array or matrix
1343
+ */
1344
+ matrixFromColumns(...cols: Matrix[]): Matrix
1345
+ matrixFromColumns<T extends MathScalarType>(
1346
+ ...cols: (T[] | [T][] | Matrix)[]
1347
+ ): T[][]
1348
+ /**
1349
+ * Create a matrix by evaluating a generating function at each index. The simplest overload returns a multi-dimensional array as long as size is an array. Passing size as a Matrix or specifying a format will result in returning a Matrix.
1350
+ * @param size - the size of the matrix to be created
1351
+ * @param fn - Callback function invoked for every entry in the matrix
1352
+ * @param format - The Matrix storage format, either 'dense' or 'sparse'
1353
+ * @param datatype - Type of the values
1354
+ */
1355
+ matrixFromFunction<T extends MathScalarType>(
1356
+ size: [number],
1357
+ fn: MatrixFromFunctionCallback<T>
1358
+ ): T[]
1359
+ matrixFromFunction<T extends MathScalarType>(
1360
+ size: [number, number],
1361
+ fn: MatrixFromFunctionCallback<T>
1362
+ ): T[][]
1363
+ matrixFromFunction<T extends MathScalarType>(
1364
+ size: number[],
1365
+ fn: MatrixFromFunctionCallback<T>
1366
+ ): MathArray<T>
1367
+ matrixFromFunction(
1368
+ size: Matrix<number>,
1369
+ fn: MatrixFromFunctionCallback<MathScalarType>
1370
+ ): Matrix
1371
+ matrixFromFunction(
1372
+ size: number[] | Matrix<number>,
1373
+ fn: MatrixFromFunctionCallback<MathScalarType>,
1374
+ format: MatrixStorageFormat,
1375
+ datatype?: string
1376
+ ): Matrix
1377
+ matrixFromFunction(
1378
+ size: number[] | Matrix<number>,
1379
+ format: MatrixStorageFormat,
1380
+ fn: MatrixFromFunctionCallback<MathScalarType>,
1381
+ datatype?: string
1382
+ ): Matrix
1325
1383
  /**
1326
1384
  * Calculate the least common multiple for two or more values or arrays.
1327
1385
  * lcm is defined as: lcm(a, b) = abs(a * b) / gcd(a, b) For matrices,
@@ -1805,11 +1863,15 @@ export interface MathJsInstance extends MathJsFactory {
1805
1863
  * array or 1-d matrix as an input and return a number.
1806
1864
  * @returns The residual matrix with the function applied over some dimension.
1807
1865
  */
1808
- apply<T extends MathCollection>(
1866
+ mapSlices<T extends MathCollection>(
1809
1867
  array: T,
1810
1868
  dim: number,
1811
1869
  callback: (array: MathCollection) => number
1812
1870
  ): T
1871
+ /**
1872
+ * @deprecated backwards-compatibility old name of mapSlices
1873
+ */
1874
+ apply: MathJsInstance['mapSlices']
1813
1875
 
1814
1876
  /**
1815
1877
  * Concatenate two or more matrices. dim: number is a zero-based
@@ -3705,7 +3767,7 @@ export const {
3705
3767
  unaryMinusDependencies,
3706
3768
  unaryPlusDependencies,
3707
3769
  absDependencies,
3708
- applyDependencies,
3770
+ mapSlicesDependencies,
3709
3771
  addScalarDependencies,
3710
3772
  cbrtDependencies,
3711
3773
  ceilDependencies,
@@ -3984,7 +4046,7 @@ export const {
3984
4046
  vacuumImpedanceDependencies,
3985
4047
  weakMixingAngleDependencies,
3986
4048
  wienDisplacementDependencies,
3987
- applyTransformDependencies,
4049
+ mapSlicesTransformDependencies,
3988
4050
  columnTransformDependencies,
3989
4051
  filterTransformDependencies,
3990
4052
  forEachTransformDependencies,
@@ -4010,10 +4072,6 @@ export interface Matrix<T = MathGeneric> {
4010
4072
  density(): number
4011
4073
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4012
4074
  subset(index: Index, replacement?: any, defaultValue?: any): Matrix
4013
- apply(
4014
- dim: number,
4015
- callback: (array: MathCollection) => number
4016
- ): MathCollection
4017
4075
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4018
4076
  get(index: number[]): any
4019
4077
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -4996,11 +5054,15 @@ export interface MathJsChain<TValue> {
4996
5054
  * array or 1-d matrix as an input and return a number.
4997
5055
  * @returns The residual matrix with the function applied over some dimension.
4998
5056
  */
4999
- apply<T extends MathCollection>(
5057
+ mapSlices<T extends MathCollection>(
5000
5058
  this: MathJsChain<T>,
5001
5059
  dim: number,
5002
5060
  callback: (array: Array<MathType> | Matrix) => number
5003
5061
  ): MathJsChain<T>
5062
+ /**
5063
+ * @deprecated backwards-compatibility old name of mapSlices
5064
+ **/
5065
+ apply: MathJsChain<TValue>['mapSlices']
5004
5066
 
5005
5067
  /**
5006
5068
  * Calculate the cubic root of a value. For matrices, the function is
@@ -7162,7 +7224,8 @@ export const {
7162
7224
  xor,
7163
7225
 
7164
7226
  // matrix functions
7165
- apply,
7227
+ mapSlices,
7228
+ apply, // @deprecated prior name of mapSlices
7166
7229
  concat,
7167
7230
  cross,
7168
7231
  det,