mathjs 11.8.0 → 11.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/HISTORY.md +25 -1
  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/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
  6. package/lib/cjs/entry/pureFunctionsAny.generated.js +2 -2
  7. package/lib/cjs/expression/Parser.js +1 -1
  8. package/lib/cjs/expression/function/parser.js +1 -1
  9. package/lib/cjs/expression/transform/filter.transform.js +4 -13
  10. package/lib/cjs/expression/transform/forEach.transform.js +3 -12
  11. package/lib/cjs/expression/transform/map.transform.js +4 -13
  12. package/lib/cjs/function/algebra/derivative.js +2 -2
  13. package/lib/cjs/function/algebra/leafCount.js +1 -1
  14. package/lib/cjs/function/algebra/polynomialRoot.js +1 -1
  15. package/lib/cjs/function/algebra/rationalize.js +4 -4
  16. package/lib/cjs/function/algebra/resolve.js +1 -1
  17. package/lib/cjs/function/algebra/simplify.js +7 -7
  18. package/lib/cjs/function/algebra/simplifyConstant.js +2 -2
  19. package/lib/cjs/function/algebra/simplifyCore.js +2 -2
  20. package/lib/cjs/function/algebra/symbolicEqual.js +8 -8
  21. package/lib/cjs/function/geometry/distance.js +21 -17
  22. package/lib/cjs/function/matrix/filter.js +2 -11
  23. package/lib/cjs/function/matrix/forEach.js +3 -12
  24. package/lib/cjs/function/matrix/map.js +6 -38
  25. package/lib/cjs/function/matrix/sqrtm.js +1 -1
  26. package/lib/cjs/header.js +2 -2
  27. package/lib/cjs/type/bignumber/function/bignumber.js +7 -0
  28. package/lib/cjs/type/fraction/function/fraction.js +8 -1
  29. package/lib/cjs/type/number.js +7 -3
  30. package/lib/cjs/type/unit/function/splitUnit.js +1 -1
  31. package/lib/cjs/utils/applyCallback.js +73 -0
  32. package/lib/cjs/utils/bignumber/formatter.js +4 -3
  33. package/lib/cjs/version.js +1 -1
  34. package/lib/esm/entry/dependenciesAny/dependenciesDistance.generated.js +2 -2
  35. package/lib/esm/entry/pureFunctionsAny.generated.js +2 -2
  36. package/lib/esm/expression/Parser.js +1 -1
  37. package/lib/esm/expression/function/parser.js +1 -1
  38. package/lib/esm/expression/transform/filter.transform.js +4 -13
  39. package/lib/esm/expression/transform/forEach.transform.js +3 -12
  40. package/lib/esm/expression/transform/map.transform.js +4 -13
  41. package/lib/esm/function/algebra/derivative.js +2 -2
  42. package/lib/esm/function/algebra/leafCount.js +1 -1
  43. package/lib/esm/function/algebra/polynomialRoot.js +1 -1
  44. package/lib/esm/function/algebra/rationalize.js +4 -4
  45. package/lib/esm/function/algebra/resolve.js +1 -1
  46. package/lib/esm/function/algebra/simplify.js +7 -7
  47. package/lib/esm/function/algebra/simplifyConstant.js +2 -2
  48. package/lib/esm/function/algebra/simplifyCore.js +2 -2
  49. package/lib/esm/function/algebra/symbolicEqual.js +8 -8
  50. package/lib/esm/function/geometry/distance.js +21 -17
  51. package/lib/esm/function/matrix/filter.js +2 -11
  52. package/lib/esm/function/matrix/forEach.js +3 -12
  53. package/lib/esm/function/matrix/map.js +6 -38
  54. package/lib/esm/function/matrix/sqrtm.js +1 -1
  55. package/lib/esm/type/bignumber/function/bignumber.js +5 -0
  56. package/lib/esm/type/fraction/function/fraction.js +6 -1
  57. package/lib/esm/type/number.js +5 -3
  58. package/lib/esm/type/unit/function/splitUnit.js +1 -1
  59. package/lib/esm/utils/applyCallback.js +67 -0
  60. package/lib/esm/utils/bignumber/formatter.js +4 -3
  61. package/lib/esm/version.js +1 -1
  62. package/package.json +19 -19
  63. package/types/index.d.ts +149 -50
@@ -63,6 +63,11 @@ export var createBignumber = /* #__PURE__ */factory(name, dependencies, _ref =>
63
63
  // we assume a BigNumber is immutable
64
64
  return x;
65
65
  },
66
+ Unit: typed.referToSelf(self => x => {
67
+ var clone = x.clone();
68
+ clone.value = self(x.value);
69
+ return clone;
70
+ }),
66
71
  Fraction: function Fraction(x) {
67
72
  return new BigNumber(x.n).div(x.d).times(x.s);
68
73
  },
@@ -39,7 +39,7 @@ export var createFraction = /* #__PURE__ */factory(name, dependencies, _ref => {
39
39
  *
40
40
  * bignumber, number, string, unit
41
41
  *
42
- * @param {number | string | Fraction | BigNumber | Array | Matrix} [args]
42
+ * @param {number | string | Fraction | BigNumber | Unit | Array | Matrix} [args]
43
43
  * Arguments specifying the value, or numerator and denominator of
44
44
  * the fraction
45
45
  * @return {Fraction | Array | Matrix} Returns a fraction
@@ -67,6 +67,11 @@ export var createFraction = /* #__PURE__ */factory(name, dependencies, _ref => {
67
67
  return x; // fractions are immutable
68
68
  },
69
69
 
70
+ Unit: typed.referToSelf(self => x => {
71
+ var clone = x.clone();
72
+ clone.value = self(x.value);
73
+ return clone;
74
+ }),
70
75
  Object: function Object(x) {
71
76
  return new Fraction(x);
72
77
  },
@@ -121,9 +121,11 @@ export var createNumber = /* #__PURE__ */factory(name, dependencies, _ref => {
121
121
  Fraction: function Fraction(x) {
122
122
  return x.valueOf();
123
123
  },
124
- Unit: function Unit(x) {
125
- throw new Error('Second argument with valueless unit expected');
126
- },
124
+ Unit: typed.referToSelf(self => x => {
125
+ var clone = x.clone();
126
+ clone.value = self(x.value);
127
+ return clone;
128
+ }),
127
129
  null: function _null(x) {
128
130
  return 0;
129
131
  },
@@ -10,7 +10,7 @@ export var createSplitUnit = /* #__PURE__ */factory(name, dependencies, _ref =>
10
10
  *
11
11
  * Syntax:
12
12
  *
13
- * splitUnit(unit: Unit, parts: Array.<Unit>)
13
+ * math.splitUnit(unit: Unit, parts: Array.<Unit>)
14
14
  *
15
15
  * Example:
16
16
  *
@@ -0,0 +1,67 @@
1
+ import typed from 'typed-function';
2
+ import { typeOf as _typeOf } from './is.js';
3
+
4
+ /**
5
+ * Invoke a callback for functions like map and filter with a matching number of arguments
6
+ * @param {function} callback
7
+ * @param {any} value
8
+ * @param {number | number[]} index
9
+ * @param {Array} array
10
+ * @param {string} mappingFnName The name of the function that is invoking these callbacks, for example "map" or "filter"
11
+ * @returns {*}
12
+ */
13
+ export function applyCallback(callback, value, index, array, mappingFnName) {
14
+ if (typed.isTypedFunction(callback)) {
15
+ // invoke the typed callback function with the matching number of arguments only
16
+
17
+ var args3 = [value, index, array];
18
+ var signature3 = typed.resolve(callback, args3);
19
+ if (signature3) {
20
+ return tryWithArgs(signature3.implementation, args3);
21
+ }
22
+ var args2 = [value, index];
23
+ var signature2 = typed.resolve(callback, args2);
24
+ if (signature2) {
25
+ return tryWithArgs(signature2.implementation, args2);
26
+ }
27
+ var args1 = [value];
28
+ var signature1 = typed.resolve(callback, args1);
29
+ if (signature1) {
30
+ return tryWithArgs(signature1.implementation, args1);
31
+ }
32
+
33
+ // fallback (will throw an exception)
34
+ return tryWithArgs(callback, args3);
35
+ } else {
36
+ // A regular JavaScript function
37
+ return callback(value, index, array);
38
+ }
39
+
40
+ /**
41
+ * @param {function} signature The selected signature of the typed-function
42
+ * @param {Array} args List with arguments to apply to the selected signature
43
+ * @returns {*} Returns the return value of the invoked signature
44
+ * @throws {TypeError} Throws an error when no matching signature was found
45
+ */
46
+ function tryWithArgs(signature, args) {
47
+ try {
48
+ return signature.apply(signature, args);
49
+ } catch (err) {
50
+ var _err$data;
51
+ // Enrich the error message so the user understands that it took place inside the callback function
52
+ if (err instanceof TypeError && ((_err$data = err.data) === null || _err$data === void 0 ? void 0 : _err$data.category) === 'wrongType') {
53
+ var argsDesc = [];
54
+ argsDesc.push("value: ".concat(_typeOf(value)));
55
+ if (args.length >= 2) {
56
+ argsDesc.push("index: ".concat(_typeOf(index)));
57
+ }
58
+ if (args.length >= 3) {
59
+ argsDesc.push("array: ".concat(_typeOf(array)));
60
+ }
61
+ throw new TypeError("Function ".concat(mappingFnName, " cannot apply callback arguments ") + "".concat(callback.name, "(").concat(argsDesc.join(', '), ") at index ").concat(JSON.stringify(index)));
62
+ } else {
63
+ throw new TypeError("Function ".concat(mappingFnName, " cannot apply callback arguments ") + "to function ".concat(callback.name, ": ").concat(err.message));
64
+ }
65
+ }
66
+ }
67
+ }
@@ -146,7 +146,7 @@ export function format(value, options) {
146
146
  // determine precision from options
147
147
  if (typeof options === 'number') {
148
148
  precision = options;
149
- } else if (options.precision) {
149
+ } else if (options.precision !== undefined) {
150
150
  precision = options.precision;
151
151
  }
152
152
  if (options.wordSize) {
@@ -207,7 +207,7 @@ export function format(value, options) {
207
207
 
208
208
  /**
209
209
  * Format a BigNumber in engineering notation. Like '1.23e+6', '2.3e+0', '3.500e-3'
210
- * @param {BigNumber | string} value
210
+ * @param {BigNumber} value
211
211
  * @param {number} [precision] Optional number of significant figures to return.
212
212
  */
213
213
  export function toEngineering(value, precision) {
@@ -219,7 +219,8 @@ export function toEngineering(value, precision) {
219
219
  var valueWithoutExp = value.mul(Math.pow(10, -newExp));
220
220
  var valueStr = valueWithoutExp.toPrecision(precision);
221
221
  if (valueStr.indexOf('e') !== -1) {
222
- valueStr = valueWithoutExp.toString();
222
+ var BigNumber = value.constructor;
223
+ valueStr = new BigNumber(valueStr).toFixed();
223
224
  }
224
225
  return valueStr + 'e' + (e >= 0 ? '+' : '') + newExp.toString();
225
226
  }
@@ -1,3 +1,3 @@
1
- export var version = '11.8.0';
1
+ export var version = '11.8.2';
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": "11.8.0",
3
+ "version": "11.8.2",
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",
@@ -25,7 +25,7 @@
25
25
  "unit"
26
26
  ],
27
27
  "dependencies": {
28
- "@babel/runtime": "^7.21.0",
28
+ "@babel/runtime": "^7.22.5",
29
29
  "complex.js": "^2.1.1",
30
30
  "decimal.js": "^10.4.3",
31
31
  "escape-latex": "^1.2.0",
@@ -36,32 +36,32 @@
36
36
  "typed-function": "^4.1.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@babel/core": "7.21.4",
40
- "@babel/plugin-transform-object-assign": "7.18.6",
41
- "@babel/plugin-transform-runtime": "7.21.4",
42
- "@babel/preset-env": "7.21.4",
43
- "@babel/register": "7.21.0",
39
+ "@babel/core": "7.22.5",
40
+ "@babel/plugin-transform-object-assign": "7.22.5",
41
+ "@babel/plugin-transform-runtime": "7.22.5",
42
+ "@babel/preset-env": "7.22.5",
43
+ "@babel/register": "7.22.5",
44
44
  "@types/assert": "1.5.6",
45
45
  "@types/mocha": "10.0.1",
46
- "@typescript-eslint/eslint-plugin": "5.57.0",
47
- "@typescript-eslint/parser": "5.57.0",
46
+ "@typescript-eslint/eslint-plugin": "5.60.0",
47
+ "@typescript-eslint/parser": "5.60.0",
48
48
  "assert": "2.0.0",
49
49
  "babel-loader": "9.1.2",
50
50
  "benchmark": "2.1.4",
51
- "c8": "7.13.0",
51
+ "c8": "8.0.0",
52
52
  "codecov": "3.8.3",
53
- "core-js": "3.29.1",
53
+ "core-js": "3.31.0",
54
54
  "del": "6.1.1",
55
55
  "dtslint": "4.2.1",
56
- "eslint": "8.37.0",
56
+ "eslint": "8.43.0",
57
57
  "eslint-config-prettier": "8.8.0",
58
- "eslint-config-standard": "17.0.0",
58
+ "eslint-config-standard": "17.1.0",
59
59
  "eslint-plugin-import": "2.27.5",
60
60
  "eslint-plugin-mocha": "10.1.0",
61
- "eslint-plugin-n": "15.7.0",
61
+ "eslint-plugin-n": "16.0.0",
62
62
  "eslint-plugin-prettier": "4.2.1",
63
63
  "eslint-plugin-promise": "6.1.1",
64
- "expect-type": "0.15.0",
64
+ "expect-type": "0.16.0",
65
65
  "expr-eval": "2.0.2",
66
66
  "fancy-log": "2.0.0",
67
67
  "glob": "8.1.0",
@@ -69,7 +69,7 @@
69
69
  "gulp-babel": "8.0.0",
70
70
  "handlebars": "4.7.7",
71
71
  "jsep": "1.3.8",
72
- "karma": "6.4.1",
72
+ "karma": "6.4.2",
73
73
  "karma-browserstack-launcher": "1.6.0",
74
74
  "karma-firefox-launcher": "2.1.2",
75
75
  "karma-mocha": "2.0.1",
@@ -85,12 +85,12 @@
85
85
  "ndarray-pack": "1.2.1",
86
86
  "numericjs": "1.2.6",
87
87
  "pad-right": "0.2.2",
88
- "prettier": "2.8.7",
88
+ "prettier": "2.8.8",
89
89
  "process": "0.11.10",
90
90
  "sylvester": "0.0.21",
91
91
  "ts-node": "10.9.1",
92
- "typescript": "5.0.3",
93
- "webpack": "5.77.0",
92
+ "typescript": "5.1.3",
93
+ "webpack": "5.87.0",
94
94
  "zeros": "1.0.0"
95
95
  },
96
96
  "type": "module",
package/types/index.d.ts CHANGED
@@ -13,10 +13,12 @@ type NoLiteralType<T> = T extends number
13
13
  : T
14
14
 
15
15
  declare namespace math {
16
+ // TODO: introduce generics for MathCollection, MathMatrix, and MathArray
16
17
  type MathNumericType = number | BigNumber | Fraction | Complex
17
- type MathArray = MathNumericType[] | MathNumericType[][]
18
+ type MathScalarType = MathNumericType | Unit
19
+ type MathArray = MathNumericType[] | MathNumericType[][] // TODO: MathArray can also contain Unit
18
20
  type MathCollection = MathArray | Matrix
19
- type MathType = MathNumericType | Unit | MathCollection
21
+ type MathType = MathScalarType | MathCollection
20
22
  type MathExpression = string | string[] | MathCollection
21
23
 
22
24
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -1581,12 +1583,14 @@ declare namespace math {
1581
1583
  * a 3D line, x0, y0, z0, a, b, c are from: (x−x0, y−y0, z−z0) = t(a, b,
1582
1584
  * c)
1583
1585
  * @param x Coordinates of the first point
1584
- * @param y Coordinates of the second point
1586
+ * @param y Coordinates of the second point OR coefficients of a line in 3D OR first end-point of a line if the calculation is for distance between point and a line in 2D
1587
+ * @param z Coordinates of second end-point of a line if the calculation is for distance between point and a line in 2D
1585
1588
  * @returns Returns the distance from two/three points
1586
1589
  */
1587
1590
  distance(
1588
1591
  x: MathCollection | object,
1589
- y: MathCollection | object
1592
+ y: MathCollection | object,
1593
+ z?: MathCollection | object
1590
1594
  ): number | BigNumber
1591
1595
 
1592
1596
  /**
@@ -2593,36 +2597,60 @@ declare namespace math {
2593
2597
  * of a multi dimensional array, the maximum of the flattened array will
2594
2598
  * be calculated. When dim is provided, the maximum over the selected
2595
2599
  * dimension will be calculated. Parameter dim is zero-based.
2596
- * @param args A single matrix or multiple scalar values
2600
+ * @param args Multiple scalar values
2597
2601
  * @returns The maximum value
2598
2602
  */
2599
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2600
- max(...args: MathType[]): any
2603
+ max<T extends MathScalarType>(...args: T[]): T
2604
+ /**
2605
+ * @param args Multiple scalar values
2606
+ * @returns The maximum value
2607
+ */
2608
+ max(...args: MathScalarType[]): MathScalarType
2601
2609
  /**
2602
2610
  * @param A A single matrix
2603
- * @param dim The maximum over the selected dimension
2611
+ * @param dimension The maximum over the selected dimension
2604
2612
  * @returns The maximum value
2605
2613
  */
2606
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2607
- max(A: MathCollection, dim?: number): any
2614
+ max<T extends MathScalarType>(
2615
+ A: T[] | T[][],
2616
+ dimension?: number | BigNumber
2617
+ ): T
2618
+ /**
2619
+ * @param A A single matrix
2620
+ * @param dimension The maximum over the selected dimension
2621
+ * @returns The maximum value
2622
+ */
2623
+ max(A: MathCollection, dimension?: number | BigNumber): MathScalarType
2608
2624
 
2609
2625
  /**
2610
2626
  * Compute the mean value of matrix or a list with values. In case of a
2611
2627
  * multi dimensional array, the mean of the flattened array will be
2612
2628
  * calculated. When dim is provided, the maximum over the selected
2613
2629
  * dimension will be calculated. Parameter dim is zero-based.
2614
- * @param args A single matrix or multiple scalar values
2630
+ * @param args Multiple scalar values
2615
2631
  * @returns The mean of all values
2616
2632
  */
2617
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2618
- mean(...args: MathType[]): any
2633
+ mean<T extends MathScalarType>(...args: T[]): T
2634
+ /**
2635
+ * @param args Multiple scalar values
2636
+ * @returns The mean value
2637
+ */
2638
+ mean(...args: MathScalarType[]): MathScalarType
2619
2639
  /**
2620
2640
  * @param A A single matrix
2621
- * @param dim The mean over the selected dimension
2622
- * @returns The mean of all values
2641
+ * @param dimension The mean over the selected dimension
2642
+ * @returns The mean value
2623
2643
  */
2624
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2625
- mean(A: MathCollection, dim?: number): any
2644
+ mean<T extends MathScalarType>(
2645
+ A: T[] | T[][],
2646
+ dimension?: number | BigNumber
2647
+ ): T
2648
+ /**
2649
+ * @param A A single matrix
2650
+ * @param dimension The mean over the selected dimension
2651
+ * @returns The mean value
2652
+ */
2653
+ mean(A: MathCollection, dimension?: number | BigNumber): MathScalarType
2626
2654
 
2627
2655
  /**
2628
2656
  * Compute the median of a matrix or a list with values. The values are
@@ -2631,49 +2659,103 @@ declare namespace math {
2631
2659
  * types of values are: Number, BigNumber, Unit In case of a (multi
2632
2660
  * dimensional) array or matrix, the median of all elements will be
2633
2661
  * calculated.
2634
- * @param args A single matrix or or multiple scalar values
2635
- * @returns The median
2662
+ * @param args Multiple scalar values
2663
+ * @returns The median value
2636
2664
  */
2637
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2638
- median(...args: MathType[]): any
2665
+ median<T extends MathScalarType>(...args: T[]): T
2666
+ /**
2667
+ * @param args Multiple scalar values
2668
+ * @returns The median value
2669
+ */
2670
+ median(...args: MathScalarType[]): MathScalarType
2671
+ /**
2672
+ * @param A A single matrix
2673
+ * @returns The median value
2674
+ */
2675
+ median<T extends MathScalarType>(A: T[] | T[][]): T
2676
+ /**
2677
+ * @param A A single matrix
2678
+ * @returns The median value
2679
+ */
2680
+ median(A: MathCollection): MathScalarType
2639
2681
 
2640
2682
  /**
2641
2683
  * Compute the minimum value of a matrix or a list of values. In case of
2642
- * a multi dimensional array, the minimun of the flattened array will be
2643
- * calculated. When dim is provided, the minimun over the selected
2684
+ * a multi dimensional array, the minimum of the flattened array will be
2685
+ * calculated. When dim is provided, the minimum over the selected
2644
2686
  * dimension will be calculated. Parameter dim is zero-based.
2645
- * @param args A single matrix or or multiple scalar values
2687
+ * @param args multiple scalar values
2646
2688
  * @returns The minimum value
2647
2689
  */
2648
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2649
- min(...args: MathType[]): any
2690
+ min<T extends MathScalarType>(...args: T[]): T
2691
+ /**
2692
+ * @param args Multiple scalar values
2693
+ * @returns The minimum value
2694
+ */
2695
+ min(...args: MathScalarType[]): MathScalarType
2650
2696
  /**
2651
2697
  * @param A A single matrix
2652
- * @param dim The minimum over the selected dimension
2698
+ * @param dimension The minimum over the selected dimension
2653
2699
  * @returns The minimum value
2654
2700
  */
2655
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2656
- min(A: MathCollection, dim?: number): any
2701
+ min<T extends MathScalarType>(
2702
+ A: T[] | T[][],
2703
+ dimension?: number | BigNumber
2704
+ ): T
2705
+ /**
2706
+ * @param A A single matrix
2707
+ * @param dimension The minimum over the selected dimension
2708
+ * @returns The minimum value
2709
+ */
2710
+ min(A: MathCollection, dimension?: number | BigNumber): MathScalarType
2657
2711
 
2658
2712
  /**
2659
2713
  * Computes the mode of a set of numbers or a list with values(numbers
2660
2714
  * or characters). If there are more than one modes, it returns a list
2661
2715
  * of those values.
2662
- * @param args A single matrix
2716
+ * @param args Multiple scalar values
2663
2717
  * @returns The mode of all values
2664
2718
  */
2665
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2666
- mode(...args: MathType[]): any
2719
+ mode<T extends MathScalarType>(...args: T[]): T
2720
+ /**
2721
+ * @param args Multiple scalar values
2722
+ * @returns The mode of all values
2723
+ */
2724
+ mode(...args: MathScalarType[]): MathScalarType
2725
+ /**
2726
+ * @param A A single matrix
2727
+ * @returns The median value
2728
+ */
2729
+ mode<T extends MathScalarType>(A: T[] | T[][]): T
2730
+ /**
2731
+ * @param A A single matrix
2732
+ * @returns The mode of all values
2733
+ */
2734
+ mode(A: MathCollection): MathScalarType
2667
2735
 
2668
2736
  /**
2669
2737
  * Compute the product of a matrix or a list with values. In case of a
2670
2738
  * (multi dimensional) array or matrix, the sum of all elements will be
2671
2739
  * calculated.
2672
- * @param args A single matrix or multiple scalar values
2740
+ * @param args Multiple scalar values
2673
2741
  * @returns The product of all values
2674
2742
  */
2675
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2676
- prod(...args: MathType[]): any
2743
+ prod<T extends MathScalarType>(...args: T[]): T
2744
+ /**
2745
+ * @param args Multiple scalar values
2746
+ * @returns The product of all values
2747
+ */
2748
+ prod(...args: MathScalarType[]): MathScalarType
2749
+ /**
2750
+ * @param A A single matrix
2751
+ * @returns The product of all values
2752
+ */
2753
+ prod<T extends MathScalarType>(A: T[] | T[][]): T
2754
+ /**
2755
+ * @param A A single matrix
2756
+ * @returns The product of all values
2757
+ */
2758
+ prod(A: MathCollection): MathScalarType
2677
2759
 
2678
2760
  /**
2679
2761
  * Compute the prob order quantile of a matrix or a list with values.
@@ -2705,10 +2787,15 @@ declare namespace math {
2705
2787
  * values: 'unbiased' (default) The sum of squared errors is divided by
2706
2788
  * (n - 1) 'uncorrected' The sum of squared errors is divided by n
2707
2789
  * 'biased' The sum of squared errors is divided by (n + 1)
2708
- * @param a variadic argument of number to calculate standard deviation
2709
- * @returns The standard deviation array
2790
+ * @param args variadic argument of number to calculate standard deviation
2791
+ * @returns The standard deviation
2710
2792
  */
2711
- std(...values: number[]): number
2793
+ std<T extends MathScalarType>(...args: T[]): T
2794
+ /**
2795
+ * @param args Multiple scalar values
2796
+ * @returns The standard deviation
2797
+ */
2798
+ std(...args: MathScalarType[]): MathScalarType
2712
2799
  /**
2713
2800
  * Compute the standard deviation of a matrix or a list with values. The
2714
2801
  * standard deviations is defined as the square root of the variance:
@@ -2730,7 +2817,7 @@ declare namespace math {
2730
2817
  array: MathCollection,
2731
2818
  dimension?: number,
2732
2819
  normalization?: 'unbiased' | 'uncorrected' | 'biased'
2733
- ): number[]
2820
+ ): MathNumericType[]
2734
2821
  /**
2735
2822
  * Compute the standard deviation of a matrix or a list with values. The
2736
2823
  * standard deviations is defined as the square root of the variance:
@@ -2750,7 +2837,7 @@ declare namespace math {
2750
2837
  std(
2751
2838
  array: MathCollection,
2752
2839
  normalization: 'unbiased' | 'uncorrected' | 'biased'
2753
- ): number
2840
+ ): MathNumericType
2754
2841
 
2755
2842
  /**
2756
2843
  * Compute the sum of a matrix or a list with values. In case of a
@@ -2759,14 +2846,27 @@ declare namespace math {
2759
2846
  * @param args A single matrix or multiple scalar values
2760
2847
  * @returns The sum of all values
2761
2848
  */
2762
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2763
- sum(...args: Array<number | BigNumber | Fraction>): any
2849
+ sum<T extends MathScalarType>(...args: T[]): T
2764
2850
  /**
2765
- * @param array A single matrix
2851
+ * @param args Multiple scalar values
2766
2852
  * @returns The sum of all values
2767
2853
  */
2768
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
2769
- sum(array: MathCollection): any
2854
+ sum(...args: MathScalarType[]): MathScalarType
2855
+ /**
2856
+ * @param A A single matrix
2857
+ * @param dimension The sum over the selected dimension
2858
+ * @returns The sum of all values
2859
+ */
2860
+ sum<T extends MathScalarType>(
2861
+ A: T[] | T[][],
2862
+ dimension?: number | BigNumber
2863
+ ): T
2864
+ /**
2865
+ * @param A A single matrix
2866
+ * @param dimension The sum over the selected dimension
2867
+ * @returns The sum of all values
2868
+ */
2869
+ sum(A: MathCollection, dimension?: number | BigNumber): MathScalarType
2770
2870
 
2771
2871
  /**
2772
2872
  * Count the number of elements of a matrix, array or string.
@@ -2804,8 +2904,7 @@ declare namespace math {
2804
2904
  * @param args A single matrix or multiple scalar values
2805
2905
  * @returns The variance
2806
2906
  */
2807
- variance(...args: Array<number | BigNumber | Fraction>): number
2808
-
2907
+ variance(...args: MathNumericType[]): MathNumericType
2809
2908
  /**
2810
2909
  * Compute the variance of a matrix or a list with values. In case of a
2811
2910
  * (multi dimensional) array or matrix, the variance over all elements
@@ -2828,7 +2927,7 @@ declare namespace math {
2828
2927
  array: MathCollection,
2829
2928
  dimension?: number,
2830
2929
  normalization?: 'unbiased' | 'uncorrected' | 'biased'
2831
- ): number[]
2930
+ ): MathNumericType[]
2832
2931
  /**
2833
2932
  * @param array A single matrix
2834
2933
  * @param normalization normalization Determines how to normalize the
@@ -2839,7 +2938,7 @@ declare namespace math {
2839
2938
  variance(
2840
2939
  array: MathCollection,
2841
2940
  normalization: 'unbiased' | 'uncorrected' | 'biased'
2842
- ): number
2941
+ ): MathNumericType
2843
2942
 
2844
2943
  /*************************************************************************
2845
2944
  * String functions
@@ -3781,7 +3880,7 @@ declare namespace math {
3781
3880
  equalBase(unit: Unit): boolean
3782
3881
  equals(unit: Unit): boolean
3783
3882
  multiply(unit: Unit): Unit
3784
- divide(unit: Unit): Unit
3883
+ divide(unit: Unit): Unit | number
3785
3884
  pow(unit: Unit): Unit
3786
3885
  abs(unit: Unit): Unit
3787
3886
  to(unit: string): Unit