mathjs 11.9.1 → 11.10.0

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 (75) hide show
  1. package/HISTORY.md +10 -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/entry/dependenciesAny/dependenciesIndexClass.generated.js +2 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesIndexTransform.generated.js +2 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +28 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesSubset.generated.js +4 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesSubsetTransform.generated.js +4 -0
  11. package/lib/cjs/entry/dependenciesAny/dependenciesZeta.generated.js +46 -0
  12. package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
  13. package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  14. package/lib/cjs/entry/dependenciesNumber/dependenciesZeta.generated.js +42 -0
  15. package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
  16. package/lib/cjs/entry/impureFunctionsAny.generated.js +52 -40
  17. package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -0
  18. package/lib/cjs/entry/pureFunctionsAny.generated.js +159 -136
  19. package/lib/cjs/entry/pureFunctionsNumber.generated.js +19 -1
  20. package/lib/cjs/expression/embeddedDocs/construction/index.js +1 -1
  21. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  22. package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +15 -0
  23. package/lib/cjs/expression/node/utils/assign.js +7 -2
  24. package/lib/cjs/expression/transform/index.transform.js +9 -6
  25. package/lib/cjs/expression/transform/quantileSeq.transform.js +50 -0
  26. package/lib/cjs/expression/transform/subset.transform.js +7 -3
  27. package/lib/cjs/factoriesAny.js +14 -0
  28. package/lib/cjs/factoriesNumber.js +7 -0
  29. package/lib/cjs/function/matrix/concat.js +2 -29
  30. package/lib/cjs/function/matrix/subset.js +86 -24
  31. package/lib/cjs/function/special/zeta.js +169 -0
  32. package/lib/cjs/function/statistics/quantileSeq.js +39 -17
  33. package/lib/cjs/header.js +2 -2
  34. package/lib/cjs/type/matrix/DenseMatrix.js +19 -9
  35. package/lib/cjs/type/matrix/MatrixIndex.js +38 -6
  36. package/lib/cjs/type/matrix/function/index.js +6 -4
  37. package/lib/cjs/type/matrix/utils/broadcast.js +8 -14
  38. package/lib/cjs/utils/array.js +253 -19
  39. package/lib/cjs/version.js +1 -1
  40. package/lib/esm/entry/dependenciesAny/dependenciesIndexClass.generated.js +2 -0
  41. package/lib/esm/entry/dependenciesAny/dependenciesIndexTransform.generated.js +2 -0
  42. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  43. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +20 -0
  44. package/lib/esm/entry/dependenciesAny/dependenciesSubset.generated.js +4 -0
  45. package/lib/esm/entry/dependenciesAny/dependenciesSubsetTransform.generated.js +4 -0
  46. package/lib/esm/entry/dependenciesAny/dependenciesZeta.generated.js +38 -0
  47. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  48. package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  49. package/lib/esm/entry/dependenciesNumber/dependenciesZeta.generated.js +34 -0
  50. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  51. package/lib/esm/entry/impureFunctionsAny.generated.js +53 -41
  52. package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -1
  53. package/lib/esm/entry/pureFunctionsAny.generated.js +140 -118
  54. package/lib/esm/entry/pureFunctionsNumber.generated.js +18 -1
  55. package/lib/esm/expression/embeddedDocs/construction/index.js +1 -1
  56. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  57. package/lib/esm/expression/embeddedDocs/function/special/zeta.js +8 -0
  58. package/lib/esm/expression/node/utils/assign.js +7 -2
  59. package/lib/esm/expression/transform/index.transform.js +9 -6
  60. package/lib/esm/expression/transform/quantileSeq.transform.js +41 -0
  61. package/lib/esm/expression/transform/subset.transform.js +7 -3
  62. package/lib/esm/factoriesAny.js +2 -0
  63. package/lib/esm/factoriesNumber.js +1 -1
  64. package/lib/esm/function/matrix/concat.js +3 -30
  65. package/lib/esm/function/matrix/subset.js +85 -25
  66. package/lib/esm/function/special/zeta.js +146 -0
  67. package/lib/esm/function/statistics/quantileSeq.js +30 -16
  68. package/lib/esm/type/matrix/DenseMatrix.js +20 -10
  69. package/lib/esm/type/matrix/MatrixIndex.js +39 -7
  70. package/lib/esm/type/matrix/function/index.js +6 -4
  71. package/lib/esm/type/matrix/utils/broadcast.js +8 -14
  72. package/lib/esm/utils/array.js +241 -20
  73. package/lib/esm/version.js +1 -1
  74. package/package.json +1 -1
  75. package/types/index.d.ts +16 -0
@@ -1,3 +1,4 @@
1
+ import { checkBroadcastingRules } from '../../../utils/array.js';
1
2
  import { factory } from '../../../utils/factory.js';
2
3
  var name = 'broadcast';
3
4
  var dependancies = ['concat'];
@@ -32,10 +33,8 @@ export var createBroadcast = /* #__PURE__ */factory(name, dependancies, _ref =>
32
33
  }
33
34
 
34
35
  // check if the broadcasting rules applyes for both matrices
35
- for (var _dim = 0; _dim < N; _dim++) {
36
- _checkRules(sizeA, sizeMax, _dim);
37
- _checkRules(sizeB, sizeMax, _dim);
38
- }
36
+ checkBroadcastingRules(sizeA, sizeMax);
37
+ checkBroadcastingRules(sizeB, sizeMax);
39
38
 
40
39
  // reshape A or B if needed to make them ready for concat
41
40
  var AA = A.clone();
@@ -47,12 +46,12 @@ export var createBroadcast = /* #__PURE__ */factory(name, dependancies, _ref =>
47
46
  }
48
47
 
49
48
  // stretches the matrices on each dimension to make them the same size
50
- for (var _dim2 = 0; _dim2 < N; _dim2++) {
51
- if (AA._size[_dim2] < sizeMax[_dim2]) {
52
- AA = _stretch(AA, sizeMax[_dim2], _dim2);
49
+ for (var _dim = 0; _dim < N; _dim++) {
50
+ if (AA._size[_dim] < sizeMax[_dim]) {
51
+ AA = _stretch(AA, sizeMax[_dim], _dim);
53
52
  }
54
- if (BB._size[_dim2] < sizeMax[_dim2]) {
55
- BB = _stretch(BB, sizeMax[_dim2], _dim2);
53
+ if (BB._size[_dim] < sizeMax[_dim]) {
54
+ BB = _stretch(BB, sizeMax[_dim], _dim);
56
55
  }
57
56
  }
58
57
 
@@ -67,9 +66,4 @@ export var createBroadcast = /* #__PURE__ */factory(name, dependancies, _ref =>
67
66
  // stretches a matrix up to a certain size in a certain dimension
68
67
  return concat(...Array(sizeToStretch).fill(arrayToStretch), dimToStretch);
69
68
  }
70
- function _checkRules(shape, sizeMax, dim) {
71
- if (shape[dim] < sizeMax[dim] & shape[dim] > 1) {
72
- throw new Error("shape missmatch: missmatch is found in arg with shape (".concat(shape, ") not possible to broadcast dimension ").concat(dim, " with size ").concat(shape[dim], " to size ").concat(sizeMax[dim]));
73
- }
74
- }
75
69
  });
@@ -1,8 +1,10 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import { isInteger } from './number.js';
2
- import { isNumber } from './is.js';
3
+ import { isNumber, isBigNumber, isArray, isString } from './is.js';
3
4
  import { format } from './string.js';
4
5
  import { DimensionError } from '../error/DimensionError.js';
5
6
  import { IndexError } from '../error/IndexError.js';
7
+ import { deepStrictEqual } from './object.js';
6
8
 
7
9
  /**
8
10
  * Calculate the size of a multi dimensional array.
@@ -75,6 +77,23 @@ export function validate(array, size) {
75
77
  }
76
78
  }
77
79
 
80
+ /**
81
+ * Validate whether the source of the index matches the size of the Array
82
+ * @param {Array | Matrix} array Array to be validated
83
+ * @param {Index} index Index with the source information to validate
84
+ * @throws DimensionError
85
+ */
86
+ export function validateIndexSourceSize(value, index) {
87
+ var valueSize = value.isMatrix ? value._size : arraySize(value);
88
+ var sourceSize = index._sourceSize;
89
+ // checks if the source size is not null and matches the valueSize
90
+ sourceSize.forEach((sourceDim, i) => {
91
+ if (sourceDim !== null && sourceDim !== valueSize[i]) {
92
+ throw new DimensionError(sourceDim, valueSize[i]);
93
+ }
94
+ });
95
+ }
96
+
78
97
  /**
79
98
  * Test whether index is an integer number with index >= 0 and index < length
80
99
  * when length is provided
@@ -82,18 +101,44 @@ export function validate(array, size) {
82
101
  * @param {number} [length] Length of the array
83
102
  */
84
103
  export function validateIndex(index, length) {
85
- if (!isNumber(index) || !isInteger(index)) {
86
- throw new TypeError('Index must be an integer (value: ' + index + ')');
104
+ if (index !== undefined) {
105
+ if (!isNumber(index) || !isInteger(index)) {
106
+ throw new TypeError('Index must be an integer (value: ' + index + ')');
107
+ }
108
+ if (index < 0 || typeof length === 'number' && index >= length) {
109
+ throw new IndexError(index, length);
110
+ }
87
111
  }
88
- if (index < 0 || typeof length === 'number' && index >= length) {
89
- throw new IndexError(index, length);
112
+ }
113
+
114
+ /**
115
+ * Test if and index has empty values
116
+ * @param {number} index Zero-based index
117
+ */
118
+ export function isEmptyIndex(index) {
119
+ for (var i = 0; i < index._dimensions.length; ++i) {
120
+ var dimension = index._dimensions[i];
121
+ if (dimension._data && isArray(dimension._data)) {
122
+ if (dimension._size[0] === 0) {
123
+ return true;
124
+ }
125
+ } else if (dimension.isRange) {
126
+ if (dimension.start === dimension.end) {
127
+ return true;
128
+ }
129
+ } else if (isString(dimension)) {
130
+ if (dimension.length === 0) {
131
+ return true;
132
+ }
133
+ }
90
134
  }
135
+ return false;
91
136
  }
92
137
 
93
138
  /**
94
139
  * Resize a multi dimensional array. The resized array is returned.
95
- * @param {Array} array Array to be resized
96
- * @param {Array.<number>} size Array with the size of each dimension
140
+ * @param {Array | number} array Array to be resized
141
+ * @param {number[]} size Array with the size of each dimension
97
142
  * @param {*} [defaultValue=0] Value to be filled in in new entries,
98
143
  * zero by default. Specify for example `null`,
99
144
  * to clearly see entries that are not explicitly
@@ -101,10 +146,8 @@ export function validateIndex(index, length) {
101
146
  * @return {Array} array The resized array
102
147
  */
103
148
  export function resize(array, size, defaultValue) {
104
- // TODO: add support for scalars, having size=[] ?
105
-
106
149
  // check the type of the arguments
107
- if (!Array.isArray(array) || !Array.isArray(size)) {
150
+ if (!Array.isArray(size)) {
108
151
  throw new TypeError('Array expected');
109
152
  }
110
153
  if (size.length === 0) {
@@ -118,6 +161,11 @@ export function resize(array, size, defaultValue) {
118
161
  }
119
162
  });
120
163
 
164
+ // convert number to an array
165
+ if (isNumber(array) || isBigNumber(array)) {
166
+ array = [array];
167
+ }
168
+
121
169
  // recursively resize the array
122
170
  var _defaultValue = defaultValue !== undefined ? defaultValue : 0;
123
171
  _resize(array, size, 0, _defaultValue);
@@ -186,7 +234,7 @@ function _resize(array, size, dim, defaultValue) {
186
234
  /**
187
235
  * Re-shape a multi dimensional array to fit the specified dimensions
188
236
  * @param {Array} array Array to be reshaped
189
- * @param {Array.<number>} sizes List of sizes for each dimension
237
+ * @param {number[]} sizes List of sizes for each dimension
190
238
  * @returns {Array} Array whose data has been formatted to fit the
191
239
  * specified dimensions
192
240
  *
@@ -219,10 +267,10 @@ export function reshape(array, sizes) {
219
267
 
220
268
  /**
221
269
  * Replaces the wildcard -1 in the sizes array.
222
- * @param {Array.<number>} sizes List of sizes for each dimension. At most on wildcard.
270
+ * @param {number[]} sizes List of sizes for each dimension. At most on wildcard.
223
271
  * @param {number} currentLength Number of elements in the array.
224
272
  * @throws {Error} If more than one wildcard or unable to replace it.
225
- * @returns {Array.<number>} The sizes array with wildcard replaced.
273
+ * @returns {number[]} The sizes array with wildcard replaced.
226
274
  */
227
275
  export function processSizesWildcard(sizes, currentLength) {
228
276
  var newLength = product(sizes);
@@ -247,7 +295,7 @@ export function processSizesWildcard(sizes, currentLength) {
247
295
 
248
296
  /**
249
297
  * Computes the product of all array elements.
250
- * @param {Array<number>} array Array of factors
298
+ * @param {number[]} array Array of factors
251
299
  * @returns {number} Product of all elements
252
300
  */
253
301
  function product(array) {
@@ -257,7 +305,7 @@ function product(array) {
257
305
  /**
258
306
  * Iteratively re-shape a multi dimensional array to fit the specified dimensions
259
307
  * @param {Array} array Array to be reshaped
260
- * @param {Array.<number>} sizes List of sizes for each dimension
308
+ * @param {number[]} sizes List of sizes for each dimension
261
309
  * @returns {Array} Array whose data has been formatted to fit the
262
310
  * specified dimensions
263
311
  */
@@ -528,18 +576,18 @@ export function getArrayDataType(array, typeOf) {
528
576
 
529
577
  for (var i = 0; i < array.length; i++) {
530
578
  var item = array[i];
531
- var isArray = Array.isArray(item);
579
+ var _isArray = Array.isArray(item);
532
580
 
533
581
  // Saving the target matrix row size
534
- if (i === 0 && isArray) {
582
+ if (i === 0 && _isArray) {
535
583
  length = item.length;
536
584
  }
537
585
 
538
586
  // If the current item is an array but the length does not equal the targetVectorSize
539
- if (isArray && item.length !== length) {
587
+ if (_isArray && item.length !== length) {
540
588
  return undefined;
541
589
  }
542
- var itemType = isArray ? getArrayDataType(item, typeOf) // recurse into a nested array
590
+ var itemType = _isArray ? getArrayDataType(item, typeOf) // recurse into a nested array
543
591
  : typeOf(item);
544
592
  if (type === undefined) {
545
593
  type = itemType; // first item
@@ -554,7 +602,7 @@ export function getArrayDataType(array, typeOf) {
554
602
 
555
603
  /**
556
604
  * Return the last item from an array
557
- * @param array
605
+ * @param {array}
558
606
  * @returns {*}
559
607
  */
560
608
  export function last(array) {
@@ -563,6 +611,8 @@ export function last(array) {
563
611
 
564
612
  /**
565
613
  * Get all but the last element of array.
614
+ * @param {array}
615
+ * @returns {*}
566
616
  */
567
617
  export function initial(array) {
568
618
  return array.slice(0, array.length - 1);
@@ -576,4 +626,175 @@ export function initial(array) {
576
626
  */
577
627
  export function contains(array, item) {
578
628
  return array.indexOf(item) !== -1;
629
+ }
630
+
631
+ /**
632
+ * Recursively concatenate two matrices.
633
+ * The contents of the matrices is not cloned.
634
+ * @param {Array} a Multi dimensional array
635
+ * @param {Array} b Multi dimensional array
636
+ * @param {number} concatDim The dimension on which to concatenate (zero-based)
637
+ * @param {number} dim The current dim (zero-based)
638
+ * @return {Array} c The concatenated matrix
639
+ * @private
640
+ */
641
+ function concatRecursive(a, b, concatDim, dim) {
642
+ if (dim < concatDim) {
643
+ // recurse into next dimension
644
+ if (a.length !== b.length) {
645
+ throw new DimensionError(a.length, b.length);
646
+ }
647
+ var c = [];
648
+ for (var i = 0; i < a.length; i++) {
649
+ c[i] = concatRecursive(a[i], b[i], concatDim, dim + 1);
650
+ }
651
+ return c;
652
+ } else {
653
+ // concatenate this dimension
654
+ return a.concat(b);
655
+ }
656
+ }
657
+
658
+ /**
659
+ * Concatenates many arrays in the specified direction
660
+ * @param {...Array} arrays All the arrays to concatenate
661
+ * @param {number} concatDim The dimension on which to concatenate (zero-based)
662
+ * @returns
663
+ */
664
+ export function concat() {
665
+ var arrays = Array.prototype.slice.call(arguments, 0, -1);
666
+ var concatDim = Array.prototype.slice.call(arguments, -1);
667
+ if (arrays.length === 1) {
668
+ return arrays[0];
669
+ }
670
+ if (arrays.length > 1) {
671
+ return arrays.slice(1).reduce(function (A, B) {
672
+ return concatRecursive(A, B, concatDim, 0);
673
+ }, arrays[0]);
674
+ } else {
675
+ throw new Error('Wrong number of arguments in function concat');
676
+ }
677
+ }
678
+
679
+ /**
680
+ * Receives two or more sizes and get's the broadcasted size for both.
681
+ * @param {...number[]} sizes Sizes to broadcast together
682
+ * @returns
683
+ */
684
+ export function broadcastSizes() {
685
+ for (var _len = arguments.length, sizes = new Array(_len), _key = 0; _key < _len; _key++) {
686
+ sizes[_key] = arguments[_key];
687
+ }
688
+ var dimensions = sizes.map(s => s.length);
689
+ var N = Math.max(...dimensions);
690
+ var sizeMax = new Array(N).fill(null);
691
+ // check for every size
692
+ for (var i = 0; i < sizes.length; i++) {
693
+ var size = sizes[i];
694
+ var dim = dimensions[i];
695
+ for (var j = 0; j < dim; j++) {
696
+ var n = N - dim + j;
697
+ if (size[j] > sizeMax[n]) {
698
+ sizeMax[n] = size[j];
699
+ }
700
+ }
701
+ }
702
+ for (var _i = 0; _i < sizes.length; _i++) {
703
+ checkBroadcastingRules(sizes[_i], sizeMax);
704
+ }
705
+ return sizeMax;
706
+ }
707
+
708
+ /**
709
+ * Checks if it's possible to broadcast a size to another size
710
+ * @param {number[]} size The size of the array to check
711
+ * @param {number[]} toSize The size of the array to validate if it can be broadcasted to
712
+ */
713
+ export function checkBroadcastingRules(size, toSize) {
714
+ var N = toSize.length;
715
+ var dim = size.length;
716
+ for (var j = 0; j < dim; j++) {
717
+ var n = N - dim + j;
718
+ if (size[j] < toSize[n] && size[j] > 1 || size[j] > toSize[n]) {
719
+ throw new Error("shape missmatch: missmatch is found in arg with shape (".concat(size, ") not possible to broadcast dimension ").concat(dim, " with size ").concat(size[j], " to size ").concat(toSize[n]));
720
+ }
721
+ }
722
+ }
723
+
724
+ /**
725
+ * Broadcasts a single array to a certain size
726
+ * @param {array} array Array to be broadcasted
727
+ * @param {number[]} toSize Size to broadcast the array
728
+ * @returns The broadcasted array
729
+ */
730
+ export function broadcastTo(array, toSize) {
731
+ var Asize = arraySize(array);
732
+ if (deepStrictEqual(Asize, toSize)) {
733
+ return array;
734
+ }
735
+ checkBroadcastingRules(Asize, toSize);
736
+ var broadcastedSize = broadcastSizes(Asize, toSize);
737
+ var N = broadcastedSize.length;
738
+ var paddedSize = [...Array(N - Asize.length).fill(1), ...Asize];
739
+ var A = clone(array);
740
+ // reshape A if needed to make it ready for concat
741
+ if (Asize.length < N) {
742
+ A = reshape(A, paddedSize);
743
+ Asize = arraySize(A);
744
+ }
745
+
746
+ // stretches the array on each dimension to make it the same size as index
747
+ for (var dim = 0; dim < N; dim++) {
748
+ if (Asize[dim] < broadcastedSize[dim]) {
749
+ A = stretch(A, broadcastedSize[dim], dim);
750
+ Asize = arraySize(A);
751
+ }
752
+ }
753
+ return A;
754
+ }
755
+
756
+ /**
757
+ * Broadcasts arrays and returns the broadcasted arrays in an array
758
+ * @param {...Array | any} arrays
759
+ * @returns
760
+ */
761
+ export function broadcastArrays() {
762
+ for (var _len2 = arguments.length, arrays = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
763
+ arrays[_key2] = arguments[_key2];
764
+ }
765
+ if (arrays.length === 0) {
766
+ throw new Error('Insuficient number of argumnets in function broadcastArrays');
767
+ }
768
+ if (arrays.length === 1) {
769
+ return arrays[0];
770
+ }
771
+ var sizes = arrays.map(function (array) {
772
+ return arraySize(array);
773
+ });
774
+ var broadcastedSize = broadcastSizes(...sizes);
775
+ var broadcastedArrays = [];
776
+ arrays.forEach(function (array) {
777
+ broadcastedArrays.push(broadcastTo(array, broadcastedSize));
778
+ });
779
+ return broadcastedArrays;
780
+ }
781
+
782
+ /**
783
+ * stretches a matrix up to a certain size in a certain dimension
784
+ * @param {Array} arrayToStretch
785
+ * @param {number[]} sizeToStretch
786
+ * @param {number} dimToStretch
787
+ * @returns
788
+ */
789
+ export function stretch(arrayToStretch, sizeToStretch, dimToStretch) {
790
+ return concat(...Array(sizeToStretch).fill(arrayToStretch), dimToStretch);
791
+ }
792
+
793
+ /**
794
+ * Deep clones a multidimensional array
795
+ * @param {Array} array
796
+ * @returns cloned array
797
+ */
798
+ export function clone(array) {
799
+ return _extends([], array);
579
800
  }
@@ -1,3 +1,3 @@
1
- export var version = '11.9.1';
1
+ export var version = '11.10.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": "11.9.1",
3
+ "version": "11.10.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
@@ -2600,6 +2600,14 @@ declare namespace math {
2600
2600
  */
2601
2601
  erf<T extends number | MathCollection>(x: T): NoLiteralType<T>
2602
2602
 
2603
+ /**
2604
+ * Compute the Riemann Zeta function of a value using an infinite series
2605
+ * and Riemann's Functional equation.
2606
+ * @param s A real, complex or BigNumber
2607
+ * @returns The Riemann Zeta of s
2608
+ */
2609
+ zeta<T extends number | Complex | BigNumber>(s: T): T
2610
+
2603
2611
  /*************************************************************************
2604
2612
  * Statistics functions
2605
2613
  ************************************************************************/
@@ -5977,6 +5985,14 @@ declare namespace math {
5977
5985
  this: MathJsChain<T>
5978
5986
  ): MathJsChain<NoLiteralType<T>>
5979
5987
 
5988
+ /**
5989
+ * Compute the Riemann Zeta function of a value using an infinite series
5990
+ * and Riemann's Functional equation.
5991
+ */
5992
+ zeta<T extends number | Complex | BigNumber>(
5993
+ this: MathJsChain<T>
5994
+ ): MathJsChain<T>
5995
+
5980
5996
  /*************************************************************************
5981
5997
  * Statistics functions
5982
5998
  ************************************************************************/