mathjs 13.2.3 → 14.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/HISTORY.md +18 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +1 -9
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/core/function/import.js +4 -1
  6. package/lib/cjs/core/function/typed.js +1 -1
  7. package/lib/cjs/entry/dependenciesAny/dependenciesBitXor.generated.js +2 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesDotDivide.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesDotPow.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesEqual.generated.js +2 -0
  11. package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  12. package/lib/cjs/entry/dependenciesAny/dependenciesLargerEq.generated.js +2 -0
  13. package/lib/cjs/entry/dependenciesAny/dependenciesLog.generated.js +2 -0
  14. package/lib/cjs/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  15. package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  16. package/lib/cjs/entry/dependenciesAny/dependenciesSmallerEq.generated.js +2 -0
  17. package/lib/cjs/entry/dependenciesAny/dependenciesUnequal.generated.js +2 -0
  18. package/lib/cjs/entry/dependenciesAny/dependenciesXor.generated.js +2 -0
  19. package/lib/cjs/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  20. package/lib/cjs/entry/impureFunctionsAny.generated.js +1 -0
  21. package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -0
  22. package/lib/cjs/entry/pureFunctionsAny.generated.js +11 -0
  23. package/lib/cjs/expression/embeddedDocs/function/arithmetic/ceil.js +2 -2
  24. package/lib/cjs/expression/embeddedDocs/function/arithmetic/fix.js +2 -2
  25. package/lib/cjs/expression/embeddedDocs/function/arithmetic/floor.js +2 -2
  26. package/lib/cjs/expression/parse.js +26 -36
  27. package/lib/cjs/function/algebra/simplify.js +4 -3
  28. package/lib/cjs/function/algebra/simplifyConstant.js +5 -11
  29. package/lib/cjs/function/arithmetic/ceil.js +21 -2
  30. package/lib/cjs/function/arithmetic/dotDivide.js +4 -3
  31. package/lib/cjs/function/arithmetic/dotPow.js +4 -3
  32. package/lib/cjs/function/arithmetic/fix.js +24 -5
  33. package/lib/cjs/function/arithmetic/floor.js +21 -2
  34. package/lib/cjs/function/arithmetic/log.js +12 -4
  35. package/lib/cjs/function/arithmetic/pow.js +2 -2
  36. package/lib/cjs/function/arithmetic/round.js +3 -5
  37. package/lib/cjs/function/arithmetic/sign.js +1 -1
  38. package/lib/cjs/function/bitwise/bitXor.js +4 -3
  39. package/lib/cjs/function/logical/xor.js +4 -3
  40. package/lib/cjs/function/relational/equal.js +4 -3
  41. package/lib/cjs/function/relational/larger.js +4 -3
  42. package/lib/cjs/function/relational/largerEq.js +4 -3
  43. package/lib/cjs/function/relational/smaller.js +4 -3
  44. package/lib/cjs/function/relational/smallerEq.js +4 -3
  45. package/lib/cjs/function/relational/unequal.js +4 -3
  46. package/lib/cjs/function/utils/isInteger.js +1 -1
  47. package/lib/cjs/function/utils/isNegative.js +1 -1
  48. package/lib/cjs/function/utils/isPositive.js +1 -1
  49. package/lib/cjs/header.js +1 -1
  50. package/lib/cjs/type/bignumber/function/bignumber.js +2 -2
  51. package/lib/cjs/type/fraction/Fraction.js +4 -4
  52. package/lib/cjs/type/fraction/function/fraction.js +3 -0
  53. package/lib/cjs/type/matrix/utils/matAlgo07xSSf.js +39 -43
  54. package/lib/cjs/type/unit/Unit.js +1 -1
  55. package/lib/cjs/utils/string.js +2 -2
  56. package/lib/cjs/version.js +1 -1
  57. package/lib/esm/core/function/import.js +4 -1
  58. package/lib/esm/core/function/typed.js +1 -1
  59. package/lib/esm/entry/dependenciesAny/dependenciesBitXor.generated.js +2 -0
  60. package/lib/esm/entry/dependenciesAny/dependenciesDotDivide.generated.js +2 -0
  61. package/lib/esm/entry/dependenciesAny/dependenciesDotPow.generated.js +2 -0
  62. package/lib/esm/entry/dependenciesAny/dependenciesEqual.generated.js +2 -0
  63. package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  64. package/lib/esm/entry/dependenciesAny/dependenciesLargerEq.generated.js +2 -0
  65. package/lib/esm/entry/dependenciesAny/dependenciesLog.generated.js +2 -0
  66. package/lib/esm/entry/dependenciesAny/dependenciesSimplify.generated.js +2 -0
  67. package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  68. package/lib/esm/entry/dependenciesAny/dependenciesSmallerEq.generated.js +2 -0
  69. package/lib/esm/entry/dependenciesAny/dependenciesUnequal.generated.js +2 -0
  70. package/lib/esm/entry/dependenciesAny/dependenciesXor.generated.js +2 -0
  71. package/lib/esm/entry/dependenciesNumber/dependenciesSimplify.generated.js +2 -0
  72. package/lib/esm/entry/impureFunctionsAny.generated.js +1 -0
  73. package/lib/esm/entry/impureFunctionsNumber.generated.js +1 -0
  74. package/lib/esm/entry/pureFunctionsAny.generated.js +11 -0
  75. package/lib/esm/expression/embeddedDocs/function/arithmetic/ceil.js +2 -2
  76. package/lib/esm/expression/embeddedDocs/function/arithmetic/fix.js +2 -2
  77. package/lib/esm/expression/embeddedDocs/function/arithmetic/floor.js +2 -2
  78. package/lib/esm/expression/parse.js +26 -36
  79. package/lib/esm/function/algebra/simplify.js +4 -3
  80. package/lib/esm/function/algebra/simplifyConstant.js +5 -11
  81. package/lib/esm/function/arithmetic/ceil.js +21 -2
  82. package/lib/esm/function/arithmetic/dotDivide.js +4 -3
  83. package/lib/esm/function/arithmetic/dotPow.js +4 -3
  84. package/lib/esm/function/arithmetic/fix.js +24 -5
  85. package/lib/esm/function/arithmetic/floor.js +21 -2
  86. package/lib/esm/function/arithmetic/log.js +12 -4
  87. package/lib/esm/function/arithmetic/pow.js +2 -2
  88. package/lib/esm/function/arithmetic/round.js +3 -5
  89. package/lib/esm/function/arithmetic/sign.js +1 -1
  90. package/lib/esm/function/bitwise/bitXor.js +4 -3
  91. package/lib/esm/function/logical/xor.js +4 -3
  92. package/lib/esm/function/relational/equal.js +4 -3
  93. package/lib/esm/function/relational/larger.js +4 -3
  94. package/lib/esm/function/relational/largerEq.js +4 -3
  95. package/lib/esm/function/relational/smaller.js +4 -3
  96. package/lib/esm/function/relational/smallerEq.js +4 -3
  97. package/lib/esm/function/relational/unequal.js +4 -3
  98. package/lib/esm/function/utils/isInteger.js +1 -1
  99. package/lib/esm/function/utils/isNegative.js +1 -1
  100. package/lib/esm/function/utils/isPositive.js +1 -1
  101. package/lib/esm/type/bignumber/function/bignumber.js +2 -2
  102. package/lib/esm/type/fraction/Fraction.js +4 -4
  103. package/lib/esm/type/fraction/function/fraction.js +3 -0
  104. package/lib/esm/type/matrix/utils/matAlgo07xSSf.js +39 -43
  105. package/lib/esm/type/unit/Unit.js +1 -1
  106. package/lib/esm/utils/string.js +2 -2
  107. package/lib/esm/version.js +1 -1
  108. package/package.json +2 -2
  109. package/types/index.d.ts +110 -18
@@ -7,21 +7,22 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'smallerEq';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat'];
10
+ var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
11
11
  export var createSmallerEq = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
15
  matrix,
16
16
  DenseMatrix,
17
- concat
17
+ concat,
18
+ SparseMatrix
18
19
  } = _ref;
19
20
  var matAlgo03xDSf = createMatAlgo03xDSf({
20
21
  typed
21
22
  });
22
23
  var matAlgo07xSSf = createMatAlgo07xSSf({
23
24
  typed,
24
- DenseMatrix
25
+ SparseMatrix
25
26
  });
26
27
  var matAlgo12xSfs = createMatAlgo12xSfs({
27
28
  typed,
@@ -4,7 +4,7 @@ import { createMatAlgo07xSSf } from '../../type/matrix/utils/matAlgo07xSSf.js';
4
4
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
5
5
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
6
6
  var name = 'unequal';
7
- var dependencies = ['typed', 'config', 'equalScalar', 'matrix', 'DenseMatrix', 'concat'];
7
+ var dependencies = ['typed', 'config', 'equalScalar', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
8
8
  export var createUnequal = /* #__PURE__ */factory(name, dependencies, _ref => {
9
9
  var {
10
10
  typed,
@@ -12,14 +12,15 @@ export var createUnequal = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  equalScalar,
13
13
  matrix,
14
14
  DenseMatrix,
15
- concat
15
+ concat,
16
+ SparseMatrix
16
17
  } = _ref;
17
18
  var matAlgo03xDSf = createMatAlgo03xDSf({
18
19
  typed
19
20
  });
20
21
  var matAlgo07xSSf = createMatAlgo07xSSf({
21
22
  typed,
22
- DenseMatrix
23
+ SparseMatrix
23
24
  });
24
25
  var matAlgo12xSfs = createMatAlgo12xSfs({
25
26
  typed,
@@ -47,7 +47,7 @@ export var createIsInteger = /* #__PURE__ */factory(name, dependencies, _ref =>
47
47
  return true;
48
48
  },
49
49
  Fraction: function Fraction(x) {
50
- return x.d === 1 && isFinite(x.n);
50
+ return x.d === 1n;
51
51
  },
52
52
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
53
53
  });
@@ -43,7 +43,7 @@ export var createIsNegative = /* #__PURE__ */factory(name, dependencies, _ref =>
43
43
  number: x => nearlyEqual(x, 0, config.relTol, config.absTol) ? false : isNegativeNumber(x),
44
44
  BigNumber: x => bigNearlyEqual(x, new x.constructor(0), config.relTol, config.absTol) ? false : x.isNeg() && !x.isZero() && !x.isNaN(),
45
45
  bigint: x => x < 0n,
46
- Fraction: x => x.s < 0,
46
+ Fraction: x => x.s < 0n,
47
47
  // It's enough to decide on the sign
48
48
 
49
49
  Unit: typed.referToSelf(self => x => typed.find(self, x.valueType())(x.value)),
@@ -45,7 +45,7 @@ export var createIsPositive = /* #__PURE__ */factory(name, dependencies, _ref =>
45
45
  number: x => nearlyEqual(x, 0, config.relTol, config.absTol) ? false : isPositiveNumber(x),
46
46
  BigNumber: x => bigNearlyEqual(x, new x.constructor(0), config.relTol, config.absTol) ? false : !x.isNeg() && !x.isZero() && !x.isNaN(),
47
47
  bigint: x => x > 0n,
48
- Fraction: x => x.s > 0 && x.n > 0,
48
+ Fraction: x => x.s > 0n && x.n > 0n,
49
49
  Unit: typed.referToSelf(self => x => typed.find(self, x.valueType())(x.value)),
50
50
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
51
51
  });
@@ -72,9 +72,9 @@ export var createBignumber = /* #__PURE__ */factory(name, dependencies, _ref =>
72
72
  return clone;
73
73
  }),
74
74
  Fraction: function Fraction(x) {
75
- return new BigNumber(x.n).div(x.d).times(x.s);
75
+ return new BigNumber(String(x.n)).div(String(x.d)).times(String(x.s));
76
76
  },
77
- null: function _null(x) {
77
+ null: function _null(_x) {
78
78
  return new BigNumber(0);
79
79
  },
80
80
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
@@ -16,20 +16,20 @@ export var createFractionClass = /* #__PURE__ */factory(name, dependencies, () =
16
16
  /**
17
17
  * Get a JSON representation of a Fraction containing type information
18
18
  * @returns {Object} Returns a JSON object structured as:
19
- * `{"mathjs": "Fraction", "n": 3, "d": 8}`
19
+ * `{"mathjs": "Fraction", "n": "3", "d": "8"}`
20
20
  */
21
21
  Fraction.prototype.toJSON = function () {
22
22
  return {
23
23
  mathjs: 'Fraction',
24
- n: this.s * this.n,
25
- d: this.d
24
+ n: String(this.s * this.n),
25
+ d: String(this.d)
26
26
  };
27
27
  };
28
28
 
29
29
  /**
30
30
  * Instantiate a Fraction from a JSON object
31
31
  * @param {Object} json a JSON object structured as:
32
- * `{"mathjs": "Fraction", "n": 3, "d": 8}`
32
+ * `{"mathjs": "Fraction", "n": "3", "d": "8"}`
33
33
  * @return {BigNumber}
34
34
  */
35
35
  Fraction.fromJSON = function (json) {
@@ -57,6 +57,9 @@ export var createFraction = /* #__PURE__ */factory(name, dependencies, _ref => {
57
57
  'number, number': function number_number(numerator, denominator) {
58
58
  return new Fraction(numerator, denominator);
59
59
  },
60
+ 'bigint, bigint': function bigint_bigint(numerator, denominator) {
61
+ return new Fraction(numerator, denominator);
62
+ },
60
63
  null: function _null(x) {
61
64
  return new Fraction(0);
62
65
  },
@@ -1,31 +1,30 @@
1
1
  import { factory } from '../../../utils/factory.js';
2
2
  import { DimensionError } from '../../../error/DimensionError.js';
3
3
  var name = 'matAlgo07xSSf';
4
- var dependencies = ['typed', 'DenseMatrix'];
4
+ var dependencies = ['typed', 'SparseMatrix'];
5
5
  export var createMatAlgo07xSSf = /* #__PURE__ */factory(name, dependencies, _ref => {
6
6
  var {
7
7
  typed,
8
- DenseMatrix
8
+ SparseMatrix
9
9
  } = _ref;
10
10
  /**
11
- * Iterates over SparseMatrix A and SparseMatrix B items (zero and nonzero) and invokes the callback function f(Aij, Bij).
12
- * Callback function invoked MxN times.
13
- *
14
- * C(i,j) = f(Aij, Bij)
15
- *
16
- * @param {Matrix} a The SparseMatrix instance (A)
17
- * @param {Matrix} b The SparseMatrix instance (B)
18
- * @param {Function} callback The f(Aij,Bij) operation to invoke
19
- *
20
- * @return {Matrix} DenseMatrix (C)
21
- *
22
- * see https://github.com/josdejong/mathjs/pull/346#issuecomment-97620294
23
- */
11
+ * Iterates over SparseMatrix A and SparseMatrix B items (zero and nonzero) and invokes the callback function f(Aij, Bij).
12
+ * Callback function invoked MxN times.
13
+ *
14
+ * C(i,j) = f(Aij, Bij)
15
+ *
16
+ * @param {Matrix} a The SparseMatrix instance (A)
17
+ * @param {Matrix} b The SparseMatrix instance (B)
18
+ * @param {Function} callback The f(Aij,Bij) operation to invoke
19
+ *
20
+ * @return {Matrix} SparseMatrix (C)
21
+ *
22
+ * see https://github.com/josdejong/mathjs/pull/346#issuecomment-97620294
23
+ */
24
24
  return function matAlgo07xSSf(a, b, callback) {
25
25
  // sparse matrix arrays
26
26
  var asize = a._size;
27
27
  var adt = a._datatype || a._data === undefined ? a._datatype : a.getDataType();
28
- // sparse matrix arrays
29
28
  var bsize = b._size;
30
29
  var bdt = b._datatype || b._data === undefined ? b._datatype : b.getDataType();
31
30
 
@@ -33,8 +32,6 @@ export var createMatAlgo07xSSf = /* #__PURE__ */factory(name, dependencies, _ref
33
32
  if (asize.length !== bsize.length) {
34
33
  throw new DimensionError(asize.length, bsize.length);
35
34
  }
36
-
37
- // check rows & columns
38
35
  if (asize[0] !== bsize[0] || asize[1] !== bsize[1]) {
39
36
  throw new RangeError('Dimension mismatch. Matrix A (' + asize + ') must match Matrix B (' + bsize + ')');
40
37
  }
@@ -45,59 +42,58 @@ export var createMatAlgo07xSSf = /* #__PURE__ */factory(name, dependencies, _ref
45
42
 
46
43
  // datatype
47
44
  var dt;
48
- // zero value
49
45
  var zero = 0;
50
- // callback signature to use
51
46
  var cf = callback;
52
47
 
53
48
  // process data types
54
49
  if (typeof adt === 'string' && adt === bdt && adt !== 'mixed') {
55
- // datatype
56
50
  dt = adt;
57
- // convert 0 to the same datatype
58
51
  zero = typed.convert(0, dt);
59
- // callback
60
52
  cf = typed.find(callback, [dt, dt]);
61
53
  }
62
54
 
63
- // vars
64
- var i, j;
65
-
66
- // result arrays
67
- var cdata = [];
68
- // initialize c
69
- for (i = 0; i < rows; i++) {
70
- cdata[i] = [];
71
- }
55
+ // result arrays for sparse format
56
+ var cvalues = [];
57
+ var cindex = [];
58
+ var cptr = new Array(columns + 1).fill(0); // Start with column pointer array
72
59
 
73
60
  // workspaces
74
61
  var xa = [];
75
62
  var xb = [];
76
- // marks indicating we have a value in x for a given column
77
63
  var wa = [];
78
64
  var wb = [];
79
65
 
80
66
  // loop columns
81
- for (j = 0; j < columns; j++) {
82
- // columns mark
67
+ for (var j = 0; j < columns; j++) {
83
68
  var mark = j + 1;
84
- // scatter the values of A(:,j) into workspace
69
+ var nonZeroCount = 0;
85
70
  _scatter(a, j, wa, xa, mark);
86
- // scatter the values of B(:,j) into workspace
87
71
  _scatter(b, j, wb, xb, mark);
72
+
88
73
  // loop rows
89
- for (i = 0; i < rows; i++) {
90
- // matrix values @ i,j
74
+ for (var i = 0; i < rows; i++) {
91
75
  var va = wa[i] === mark ? xa[i] : zero;
92
76
  var vb = wb[i] === mark ? xb[i] : zero;
77
+
93
78
  // invoke callback
94
- cdata[i][j] = cf(va, vb);
79
+ var cij = cf(va, vb);
80
+ // Store all non zero and true values
81
+ if (cij !== 0 && cij !== false) {
82
+ cindex.push(i); // row index
83
+ cvalues.push(cij); // computed value
84
+ nonZeroCount++;
85
+ }
95
86
  }
87
+
88
+ // Update column pointer with cumulative count of non-zero values
89
+ cptr[j + 1] = cptr[j] + nonZeroCount;
96
90
  }
97
91
 
98
- // return dense matrix
99
- return new DenseMatrix({
100
- data: cdata,
92
+ // Return the result as a sparse matrix
93
+ return new SparseMatrix({
94
+ values: cvalues,
95
+ index: cindex,
96
+ ptr: cptr,
101
97
  size: [rows, columns],
102
98
  datatype: adt === a._datatype && bdt === b._datatype ? dt : undefined
103
99
  });
@@ -3533,7 +3533,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
3533
3533
  */
3534
3534
  Unit.typeConverters = {
3535
3535
  BigNumber: function BigNumber(x) {
3536
- if (x !== null && x !== void 0 && x.isFraction) return new _BigNumber(x.n).div(x.d).times(x.s);
3536
+ if (x !== null && x !== void 0 && x.isFraction) return new _BigNumber(String(x.n)).div(String(x.d)).times(String(x.s));
3537
3537
  return new _BigNumber(x + ''); // stringify to prevent constructor error
3538
3538
  },
3539
3539
  Fraction: function Fraction(x) {
@@ -71,7 +71,7 @@ function _format(value, options) {
71
71
  if (looksLikeFraction(value)) {
72
72
  if (!options || options.fraction !== 'decimal') {
73
73
  // output as ratio, like '1/3'
74
- return value.s * value.n + '/' + value.d;
74
+ return "".concat(value.s * value.n, "/").concat(value.d);
75
75
  } else {
76
76
  // output as decimal, like '0.(3)'
77
77
  return value.toString();
@@ -173,7 +173,7 @@ function formatArray(array, options) {
173
173
  * @return {boolean}
174
174
  */
175
175
  function looksLikeFraction(value) {
176
- return value && typeof value === 'object' && typeof value.s === 'number' && typeof value.n === 'number' && typeof value.d === 'number' || false;
176
+ return value && typeof value === 'object' && typeof value.s === 'bigint' && typeof value.n === 'bigint' && typeof value.d === 'bigint' || false;
177
177
  }
178
178
 
179
179
  /**
@@ -1,3 +1,3 @@
1
- export var version = '13.2.3';
1
+ export var version = '14.0.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": "13.2.3",
3
+ "version": "14.0.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",
@@ -29,7 +29,7 @@
29
29
  "complex.js": "^2.2.5",
30
30
  "decimal.js": "^10.4.3",
31
31
  "escape-latex": "^1.2.0",
32
- "fraction.js": "^4.3.7",
32
+ "fraction.js": "^5.2.1",
33
33
  "javascript-natural-sort": "^0.7.1",
34
34
  "seedrandom": "^3.0.5",
35
35
  "tiny-emitter": "^2.1.0",
package/types/index.d.ts CHANGED
@@ -10,11 +10,11 @@ export type NoLiteralType<T> = T extends number
10
10
  ? boolean
11
11
  : T
12
12
 
13
- // TODO: introduce generics for MathCollection, MathMatrix, and MathArray
14
13
  export type MathNumericType = number | BigNumber | bigint | Fraction | Complex
15
14
  export type MathScalarType = MathNumericType | Unit
16
- export type MathArray = MathNumericType[] | MathNumericType[][] // TODO: MathArray can also contain Unit
17
- export type MathCollection = MathArray | Matrix
15
+ export type MathGeneric<T extends MathScalarType = MathNumericType> = T
16
+ export type MathArray<T = MathGeneric> = T[] | Array<MathArray<T>>
17
+ export type MathCollection<T = MathGeneric> = MathArray<T> | Matrix<T>
18
18
  export type MathType = MathScalarType | MathCollection
19
19
  export type MathExpression = string | string[] | MathCollection
20
20
 
@@ -719,6 +719,7 @@ export interface MathJsInstance extends MathJsFactory {
719
719
  * fraction
720
720
  * @returns Returns a fraction
721
721
  */
722
+ fraction(numerator: bigint, denominator: bigint): Fraction
722
723
  fraction(numerator: number, denominator: number): Fraction
723
724
 
724
725
  /**
@@ -751,6 +752,11 @@ export interface MathJsInstance extends MathJsFactory {
751
752
  format?: 'sparse' | 'dense',
752
753
  dataType?: string
753
754
  ): Matrix
755
+ matrix<T extends MathScalarType>(
756
+ data: MathCollection<T>,
757
+ format?: 'sparse' | 'dense',
758
+ dataType?: string
759
+ ): Matrix<T>
754
760
 
755
761
  /**
756
762
  * Create a number or convert a string, boolean, or unit to a number.
@@ -1147,6 +1153,14 @@ export interface MathJsInstance extends MathJsFactory {
1147
1153
  n?: number | BigNumber
1148
1154
  ): NoLiteralType<T>
1149
1155
  ceil<U extends MathCollection>(x: MathNumericType, n: U): U
1156
+ ceil<U extends MathCollection<Unit>>(x: U, unit: Unit): U
1157
+ ceil(x: Unit, unit: Unit): Unit
1158
+ ceil(x: Unit, n: number | BigNumber, unit: Unit): Unit
1159
+ ceil<U extends MathCollection<Unit>>(
1160
+ x: U,
1161
+ n: number | BigNumber,
1162
+ unit: Unit
1163
+ ): U
1150
1164
 
1151
1165
  /**
1152
1166
  * Round a value towards zero. For matrices, the function is evaluated
@@ -1160,6 +1174,14 @@ export interface MathJsInstance extends MathJsFactory {
1160
1174
  n?: number | BigNumber
1161
1175
  ): NoLiteralType<T>
1162
1176
  fix<U extends MathCollection>(x: MathNumericType, n: U): U
1177
+ fix<U extends MathCollection<Unit>>(x: U, unit: Unit): U
1178
+ fix(x: Unit, unit: Unit): Unit
1179
+ fix(x: Unit, n: number | BigNumber, unit: Unit): Unit
1180
+ fix<U extends MathCollection<Unit>>(
1181
+ x: U,
1182
+ n: number | BigNumber,
1183
+ unit: Unit
1184
+ ): U
1163
1185
 
1164
1186
  /**
1165
1187
  * Round a value towards minus infinity. For matrices, the function is
@@ -1173,6 +1195,14 @@ export interface MathJsInstance extends MathJsFactory {
1173
1195
  n?: number | BigNumber
1174
1196
  ): NoLiteralType<T>
1175
1197
  floor<U extends MathCollection>(x: MathNumericType, n: U): U
1198
+ floor<U extends MathCollection<Unit>>(x: U, unit: Unit): U
1199
+ floor(x: Unit, unit: Unit): Unit
1200
+ floor(x: Unit, n: number | BigNumber, unit: Unit): Unit
1201
+ floor<U extends MathCollection<Unit>>(
1202
+ x: U,
1203
+ n: number | BigNumber,
1204
+ unit: Unit
1205
+ ): U
1176
1206
 
1177
1207
  /**
1178
1208
  * Round a value towards the nearest integer. For matrices, the function
@@ -1186,10 +1216,14 @@ export interface MathJsInstance extends MathJsFactory {
1186
1216
  n?: number | BigNumber
1187
1217
  ): NoLiteralType<T>
1188
1218
  round<U extends MathCollection>(x: MathNumericType, n: U): U
1189
- round<U extends MathCollection>(x: U, unit: Unit): U
1219
+ round<U extends MathCollection<Unit>>(x: U, unit: Unit): U
1190
1220
  round(x: Unit, unit: Unit): Unit
1191
1221
  round(x: Unit, n: number | BigNumber, unit: Unit): Unit
1192
- round<U extends MathCollection>(x: U, n: number | BigNumber, unit: Unit): U
1222
+ round<U extends MathCollection<Unit>>(
1223
+ x: U,
1224
+ n: number | BigNumber,
1225
+ unit: Unit
1226
+ ): U
1193
1227
 
1194
1228
  // End of group of rounding functions
1195
1229
 
@@ -1359,9 +1393,10 @@ export interface MathJsInstance extends MathJsFactory {
1359
1393
  multiply<T extends Matrix>(x: T, y: MathType): Matrix
1360
1394
  multiply<T extends Matrix>(x: MathType, y: T): Matrix
1361
1395
 
1362
- multiply<T extends MathNumericType[]>(x: T, y: T[]): T
1363
- multiply<T extends MathNumericType[]>(x: T[], y: T): T
1364
- multiply<T extends MathArray>(x: T, y: T): T
1396
+ multiply<T extends MathArray>(x: T, y: T[]): T
1397
+ multiply<T extends MathArray>(x: T[], y: T): T
1398
+ multiply<T extends MathArray>(x: T[], y: T[]): T
1399
+ multiply<T extends MathArray>(x: T, y: T): MathScalarType
1365
1400
  multiply(x: Unit, y: Unit): Unit
1366
1401
  multiply(x: number, y: number): number
1367
1402
  multiply(x: MathType, y: MathType): MathType
@@ -3964,7 +3999,7 @@ export const {
3964
3999
  varianceTransformDependencies
3965
4000
  }: Record<string, FactoryFunctionMap>
3966
4001
 
3967
- export interface Matrix {
4002
+ export interface Matrix<T = MathGeneric> {
3968
4003
  type: string
3969
4004
  storage(): string
3970
4005
  datatype(): string
@@ -3981,7 +4016,7 @@ export interface Matrix {
3981
4016
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3982
4017
  set(index: number[], value: any, defaultValue?: number | string): Matrix
3983
4018
  resize(size: MathCollection, defaultValue?: number | string): Matrix
3984
- clone(): Matrix
4019
+ clone(): Matrix<T>
3985
4020
  size(): number[]
3986
4021
  map(
3987
4022
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -3993,8 +4028,8 @@ export interface Matrix {
3993
4028
  callback: (a: any, b: number[], c: Matrix) => void,
3994
4029
  skipZeros?: boolean
3995
4030
  ): void
3996
- toArray(): MathArray
3997
- valueOf(): MathArray
4031
+ toArray(): MathArray<T>
4032
+ valueOf(): MathArray<T>
3998
4033
  format(
3999
4034
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4000
4035
  options?: FormatOptions | number | BigNumber | ((value: any) => string)
@@ -4004,7 +4039,7 @@ export interface Matrix {
4004
4039
  toJSON(): any
4005
4040
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4006
4041
  diagonal(k?: number | BigNumber): any[]
4007
- swapRows(i: number, j: number): Matrix
4042
+ swapRows(i: number, j: number): Matrix<T>
4008
4043
  }
4009
4044
 
4010
4045
  export interface MatrixCtor {
@@ -4015,9 +4050,9 @@ export interface MatrixCtor {
4015
4050
  export interface BigNumber extends Decimal {}
4016
4051
 
4017
4052
  export interface Fraction {
4018
- s: number
4019
- n: number
4020
- d: number
4053
+ s: bigint
4054
+ n: bigint
4055
+ d: bigint
4021
4056
  }
4022
4057
 
4023
4058
  export interface Complex {
@@ -4994,6 +5029,25 @@ export interface MathJsChain<TValue> {
4994
5029
  this: MathJsChain<T>,
4995
5030
  n?: number | BigNumber | MathCollection
4996
5031
  ): MathJsChain<T>
5032
+ ceil<U extends MathCollection>(
5033
+ this: MathJsChain<MathNumericType | U>,
5034
+ n: U
5035
+ ): MathJsChain<U>
5036
+ ceil(this: MathJsChain<Unit>, unit: Unit): MathJsChain<Unit>
5037
+ ceil<U extends MathCollection<Unit>>(
5038
+ this: MathJsChain<U>,
5039
+ unit: Unit
5040
+ ): MathJsChain<U>
5041
+ ceil(
5042
+ this: MathJsChain<Unit>,
5043
+ n: number | BigNumber,
5044
+ unit: Unit
5045
+ ): MathJsChain<Unit>
5046
+ ceil<U extends MathCollection<Unit>>(
5047
+ this: MathJsChain<U>,
5048
+ n: number | BigNumber,
5049
+ unit: Unit
5050
+ ): MathJsChain<U>
4997
5051
 
4998
5052
  /**
4999
5053
  * Round a value towards zero. For matrices, the function is evaluated
@@ -5004,6 +5058,25 @@ export interface MathJsChain<TValue> {
5004
5058
  this: MathJsChain<T>,
5005
5059
  n?: number | BigNumber | MathCollection
5006
5060
  ): MathJsChain<T>
5061
+ fix<U extends MathCollection>(
5062
+ this: MathJsChain<MathNumericType | U>,
5063
+ n: U
5064
+ ): MathJsChain<U>
5065
+ fix(this: MathJsChain<Unit>, unit: Unit): MathJsChain<Unit>
5066
+ fix<U extends MathCollection<Unit>>(
5067
+ this: MathJsChain<U>,
5068
+ unit: Unit
5069
+ ): MathJsChain<U>
5070
+ fix(
5071
+ this: MathJsChain<Unit>,
5072
+ n: number | BigNumber,
5073
+ unit: Unit
5074
+ ): MathJsChain<Unit>
5075
+ fix<U extends MathCollection<Unit>>(
5076
+ this: MathJsChain<U>,
5077
+ n: number | BigNumber,
5078
+ unit: Unit
5079
+ ): MathJsChain<U>
5007
5080
 
5008
5081
  /**
5009
5082
  * Round a value towards minus infinity. For matrices, the function is
@@ -5014,6 +5087,25 @@ export interface MathJsChain<TValue> {
5014
5087
  this: MathJsChain<T>,
5015
5088
  n?: number | BigNumber | MathCollection
5016
5089
  ): MathJsChain<T>
5090
+ floor<U extends MathCollection>(
5091
+ this: MathJsChain<MathNumericType | U>,
5092
+ n: U
5093
+ ): MathJsChain<U>
5094
+ floor(this: MathJsChain<Unit>, unit: Unit): MathJsChain<Unit>
5095
+ floor<U extends MathCollection<Unit>>(
5096
+ this: MathJsChain<U>,
5097
+ unit: Unit
5098
+ ): MathJsChain<U>
5099
+ floor(
5100
+ this: MathJsChain<Unit>,
5101
+ n: number | BigNumber,
5102
+ unit: Unit
5103
+ ): MathJsChain<Unit>
5104
+ floor<U extends MathCollection<Unit>>(
5105
+ this: MathJsChain<U>,
5106
+ n: number | BigNumber,
5107
+ unit: Unit
5108
+ ): MathJsChain<U>
5017
5109
 
5018
5110
  /**
5019
5111
  * Round a value towards the nearest integer. For matrices, the function
@@ -5029,7 +5121,7 @@ export interface MathJsChain<TValue> {
5029
5121
  n: U
5030
5122
  ): MathJsChain<U>
5031
5123
  round(this: MathJsChain<Unit>, unit: Unit): MathJsChain<Unit>
5032
- round<U extends MathCollection>(
5124
+ round<U extends MathCollection<Unit>>(
5033
5125
  this: MathJsChain<U>,
5034
5126
  unit: Unit
5035
5127
  ): MathJsChain<U>
@@ -5038,7 +5130,7 @@ export interface MathJsChain<TValue> {
5038
5130
  n: number | BigNumber,
5039
5131
  unit: Unit
5040
5132
  ): MathJsChain<Unit>
5041
- round<U extends MathCollection>(
5133
+ round<U extends MathCollection<Unit>>(
5042
5134
  this: MathJsChain<U>,
5043
5135
  n: number | BigNumber,
5044
5136
  unit: Unit