mathjs 11.8.0 → 11.8.2

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