mathjs 11.9.1 → 11.10.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -8,13 +8,17 @@ var _factory = require("../../utils/factory.js");
8
8
  var _errorTransform = require("./utils/errorTransform.js");
9
9
  var _subset = require("../../function/matrix/subset.js");
10
10
  var name = 'subset';
11
- var dependencies = ['typed', 'matrix'];
11
+ var dependencies = ['typed', 'matrix', 'zeros', 'add'];
12
12
  var createSubsetTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
13
13
  var typed = _ref.typed,
14
- matrix = _ref.matrix;
14
+ matrix = _ref.matrix,
15
+ zeros = _ref.zeros,
16
+ add = _ref.add;
15
17
  var subset = (0, _subset.createSubset)({
16
18
  typed: typed,
17
- matrix: matrix
19
+ matrix: matrix,
20
+ zeros: zeros,
21
+ add: add
18
22
  });
19
23
 
20
24
  /**
@@ -1485,6 +1485,12 @@ Object.defineProperty(exports, "createQuantileSeq", {
1485
1485
  return _quantileSeq.createQuantileSeq;
1486
1486
  }
1487
1487
  });
1488
+ Object.defineProperty(exports, "createQuantileSeqTransform", {
1489
+ enumerable: true,
1490
+ get: function get() {
1491
+ return _quantileSeqTransform.createQuantileSeqTransform;
1492
+ }
1493
+ });
1488
1494
  Object.defineProperty(exports, "createQuantumOfCirculation", {
1489
1495
  enumerable: true,
1490
1496
  get: function get() {
@@ -2109,6 +2115,12 @@ Object.defineProperty(exports, "createZeros", {
2109
2115
  return _zeros.createZeros;
2110
2116
  }
2111
2117
  });
2118
+ Object.defineProperty(exports, "createZeta", {
2119
+ enumerable: true,
2120
+ get: function get() {
2121
+ return _zeta.createZeta;
2122
+ }
2123
+ });
2112
2124
  Object.defineProperty(exports, "createZpk2tf", {
2113
2125
  enumerable: true,
2114
2126
  get: function get() {
@@ -2213,6 +2225,7 @@ var _fft = require("./function/matrix/fft.js");
2213
2225
  var _ifft = require("./function/matrix/ifft.js");
2214
2226
  var _solveODE = require("./function/numeric/solveODE.js");
2215
2227
  var _erf = require("./function/special/erf.js");
2228
+ var _zeta = require("./function/special/zeta.js");
2216
2229
  var _mode = require("./function/statistics/mode.js");
2217
2230
  var _prod = require("./function/statistics/prod.js");
2218
2231
  var _format = require("./function/string/format.js");
@@ -2398,5 +2411,6 @@ var _concatTransform = require("./expression/transform/concat.transform.js");
2398
2411
  var _diffTransform = require("./expression/transform/diff.transform.js");
2399
2412
  var _stdTransform = require("./expression/transform/std.transform.js");
2400
2413
  var _sumTransform = require("./expression/transform/sum.transform.js");
2414
+ var _quantileSeqTransform = require("./expression/transform/quantileSeq.transform.js");
2401
2415
  var _cumsumTransform = require("./expression/transform/cumsum.transform.js");
2402
2416
  var _varianceTransform = require("./expression/transform/variance.transform.js");
@@ -779,6 +779,12 @@ Object.defineProperty(exports, "createVersion", {
779
779
  });
780
780
  exports.createXgcd = void 0;
781
781
  exports.createXor = void 0;
782
+ Object.defineProperty(exports, "createZeta", {
783
+ enumerable: true,
784
+ get: function get() {
785
+ return _zeta.createZeta;
786
+ }
787
+ });
782
788
  var _index = require("./plain/number/index.js");
783
789
  var _factory = require("./utils/factory.js");
784
790
  var _noop = require("./utils/noop.js");
@@ -855,6 +861,7 @@ var _largerEq = require("./function/relational/largerEq.js");
855
861
  var _deepEqual = require("./function/relational/deepEqual.js");
856
862
  var _unequal = require("./function/relational/unequal.js");
857
863
  var _erf = require("./function/special/erf.js");
864
+ var _zeta = require("./function/special/zeta.js");
858
865
  var _mode = require("./function/statistics/mode.js");
859
866
  var _prod = require("./function/statistics/prod.js");
860
867
  var _max = require("./function/statistics/max.js");
@@ -97,7 +97,7 @@ var createConcat = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
97
97
  }
98
98
  var res = matrices.shift();
99
99
  while (matrices.length) {
100
- res = _concat(res, matrices.shift(), dim, 0);
100
+ res = (0, _array.concat)(res, matrices.shift(), dim);
101
101
  }
102
102
  return asMatrix ? matrix(res) : res;
103
103
  },
@@ -106,31 +106,4 @@ var createConcat = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
106
106
  }
107
107
  });
108
108
  });
109
-
110
- /**
111
- * Recursively concatenate two matrices.
112
- * The contents of the matrices is not cloned.
113
- * @param {Array} a Multi dimensional array
114
- * @param {Array} b Multi dimensional array
115
- * @param {number} concatDim The dimension on which to concatenate (zero-based)
116
- * @param {number} dim The current dim (zero-based)
117
- * @return {Array} c The concatenated matrix
118
- * @private
119
- */
120
- exports.createConcat = createConcat;
121
- function _concat(a, b, concatDim, dim) {
122
- if (dim < concatDim) {
123
- // recurse into next dimension
124
- if (a.length !== b.length) {
125
- throw new _DimensionError.DimensionError(a.length, b.length);
126
- }
127
- var c = [];
128
- for (var i = 0; i < a.length; i++) {
129
- c[i] = _concat(a[i], b[i], concatDim, dim + 1);
130
- }
131
- return c;
132
- } else {
133
- // concatenate this dimension
134
- return a.concat(b);
135
- }
136
- }
109
+ exports.createConcat = createConcat;
@@ -11,10 +11,12 @@ var _customs = require("../../utils/customs.js");
11
11
  var _DimensionError = require("../../error/DimensionError.js");
12
12
  var _factory = require("../../utils/factory.js");
13
13
  var name = 'subset';
14
- var dependencies = ['typed', 'matrix'];
14
+ var dependencies = ['typed', 'matrix', 'zeros', 'add'];
15
15
  var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
16
16
  var typed = _ref.typed,
17
- matrix = _ref.matrix;
17
+ matrix = _ref.matrix,
18
+ zeros = _ref.zeros,
19
+ add = _ref.add;
18
20
  /**
19
21
  * Get or set a subset of a matrix or string.
20
22
  *
@@ -26,13 +28,15 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
26
28
  *
27
29
  * // get a subset
28
30
  * const d = [[1, 2], [3, 4]]
29
- * math.subset(d, math.index(1, 0)) // returns 3
30
- * math.subset(d, math.index([0, 1], 1)) // returns [[2], [4]]
31
+ * math.subset(d, math.index(1, 0)) // returns 3
32
+ * math.subset(d, math.index([0, 1], 1)) // returns [[2], [4]]
33
+ * math.subset(d, math.index([false, true], 0)) // returns [[3]]
31
34
  *
32
35
  * // replace a subset
33
36
  * const e = []
34
- * const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 6]]
35
- * const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 6], [0, 7]]
37
+ * const f = math.subset(e, math.index(0, [0, 2]), [5, 6]) // f = [[5, 0, 6]]
38
+ * const g = math.subset(f, math.index(1, 1), 7, 0) // g = [[5, 0, 6], [0, 7, 0]]
39
+ * math.subset(g, math.index([false, true], 1), 8) // returns [[5, 0, 6], [0, 8, 0]]
36
40
  *
37
41
  * // get submatrix using ranges
38
42
  * const M = [
@@ -40,7 +44,7 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
40
44
  * [4,5,6],
41
45
  * [7,8,9]
42
46
  * ]
43
- * math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1,2,3],[4,5,6]]
47
+ * math.subset(M, math.index(math.range(0,2), math.range(0,3))) // [[1, 2, 3], [4, 5, 6]]
44
48
  *
45
49
  * See also:
46
50
  *
@@ -59,36 +63,80 @@ var createSubset = /* #__PURE__ */(0, _factory.factory)(name, dependencies, func
59
63
  * math.matrix elements will be left undefined.
60
64
  * @return {Array | Matrix | string} Either the retrieved subset or the updated matrix.
61
65
  */
66
+
62
67
  return typed(name, {
63
68
  // get subset
64
- 'Array, Index': function ArrayIndex(value, index) {
65
- var m = matrix(value);
66
- var subset = m.subset(index); // returns a Matrix
67
- return index.isScalar() ? subset : subset.valueOf(); // return an Array (like the input)
68
- },
69
-
70
69
  'Matrix, Index': function MatrixIndex(value, index) {
70
+ if ((0, _array.isEmptyIndex)(index)) {
71
+ return matrix();
72
+ }
73
+ (0, _array.validateIndexSourceSize)(value, index);
71
74
  return value.subset(index);
72
75
  },
76
+ 'Array, Index': typed.referTo('Matrix, Index', function (subsetRef) {
77
+ return function (value, index) {
78
+ var subsetResult = subsetRef(matrix(value), index);
79
+ return index.isScalar() ? subsetResult : subsetResult.valueOf();
80
+ };
81
+ }),
73
82
  'Object, Index': _getObjectProperty,
74
83
  'string, Index': _getSubstring,
75
84
  // set subset
76
- 'Array, Index, any': function ArrayIndexAny(value, index, replacement) {
77
- return matrix((0, _object.clone)(value)).subset(index, replacement, undefined).valueOf();
78
- },
79
- 'Array, Index, any, any': function ArrayIndexAnyAny(value, index, replacement, defaultValue) {
80
- return matrix((0, _object.clone)(value)).subset(index, replacement, defaultValue).valueOf();
81
- },
82
- 'Matrix, Index, any': function MatrixIndexAny(value, index, replacement) {
83
- return value.clone().subset(index, replacement);
84
- },
85
85
  'Matrix, Index, any, any': function MatrixIndexAnyAny(value, index, replacement, defaultValue) {
86
- return value.clone().subset(index, replacement, defaultValue);
86
+ if ((0, _array.isEmptyIndex)(index)) {
87
+ return value;
88
+ }
89
+ (0, _array.validateIndexSourceSize)(value, index);
90
+ return value.clone().subset(index, _broadcastReplacement(replacement, index), defaultValue);
87
91
  },
92
+ 'Array, Index, any, any': typed.referTo('Matrix, Index, any, any', function (subsetRef) {
93
+ return function (value, index, replacement, defaultValue) {
94
+ var subsetResult = subsetRef(matrix(value), index, replacement, defaultValue);
95
+ return subsetResult.isMatrix ? subsetResult.valueOf() : subsetResult;
96
+ };
97
+ }),
98
+ 'Array, Index, any': typed.referTo('Matrix, Index, any, any', function (subsetRef) {
99
+ return function (value, index, replacement) {
100
+ return subsetRef(matrix(value), index, replacement, undefined).valueOf();
101
+ };
102
+ }),
103
+ 'Matrix, Index, any': typed.referTo('Matrix, Index, any, any', function (subsetRef) {
104
+ return function (value, index, replacement) {
105
+ return subsetRef(value, index, replacement, undefined);
106
+ };
107
+ }),
88
108
  'string, Index, string': _setSubstring,
89
109
  'string, Index, string, string': _setSubstring,
90
110
  'Object, Index, any': _setObjectProperty
91
111
  });
112
+
113
+ /**
114
+ * Broadcasts a replacment value to be the same size as index
115
+ * @param {number | BigNumber | Array | Matrix} replacement Replacement value to try to broadcast
116
+ * @param {*} index Index value
117
+ * @returns broadcasted replacement that matches the size of index
118
+ */
119
+
120
+ function _broadcastReplacement(replacement, index) {
121
+ if (typeof replacement === 'string') {
122
+ throw new Error('can\'t boradcast a string');
123
+ }
124
+ if (index._isScalar) {
125
+ return replacement;
126
+ }
127
+ var indexSize = index.size();
128
+ if (indexSize.every(function (d) {
129
+ return d > 0;
130
+ })) {
131
+ try {
132
+ return add(replacement, zeros(indexSize));
133
+ } catch (error) {
134
+ return replacement;
135
+ }
136
+ } else {
137
+ return replacement;
138
+ }
139
+ }
92
140
  });
93
141
 
94
142
  /**
@@ -104,6 +152,10 @@ function _getSubstring(str, index) {
104
152
  // TODO: better error message
105
153
  throw new TypeError('Index expected');
106
154
  }
155
+ if ((0, _array.isEmptyIndex)(index)) {
156
+ return '';
157
+ }
158
+ (0, _array.validateIndexSourceSize)(Array.from(str), index);
107
159
  if (index.size().length !== 1) {
108
160
  throw new _DimensionError.DimensionError(index.size().length, 1);
109
161
  }
@@ -125,7 +177,7 @@ function _getSubstring(str, index) {
125
177
  * @param {string} str string to be replaced
126
178
  * @param {Index} index An index or list of indices (character positions)
127
179
  * @param {string} replacement Replacement string
128
- * @param {string} [defaultValue] Default value to be uses when resizing
180
+ * @param {string} [defaultValue] Default value to be used when resizing
129
181
  * the string. is ' ' by default
130
182
  * @returns {string} result
131
183
  * @private
@@ -135,6 +187,10 @@ function _setSubstring(str, index, replacement, defaultValue) {
135
187
  // TODO: better error message
136
188
  throw new TypeError('Index expected');
137
189
  }
190
+ if ((0, _array.isEmptyIndex)(index)) {
191
+ return str;
192
+ }
193
+ (0, _array.validateIndexSourceSize)(Array.from(str), index);
138
194
  if (index.size().length !== 1) {
139
195
  throw new _DimensionError.DimensionError(index.size().length, 1);
140
196
  }
@@ -184,6 +240,9 @@ function _setSubstring(str, index, replacement, defaultValue) {
184
240
  * @private
185
241
  */
186
242
  function _getObjectProperty(object, index) {
243
+ if ((0, _array.isEmptyIndex)(index)) {
244
+ return undefined;
245
+ }
187
246
  if (index.size().length !== 1) {
188
247
  throw new _DimensionError.DimensionError(index.size(), 1);
189
248
  }
@@ -203,6 +262,9 @@ function _getObjectProperty(object, index) {
203
262
  * @private
204
263
  */
205
264
  function _setObjectProperty(object, index, replacement) {
265
+ if ((0, _array.isEmptyIndex)(index)) {
266
+ return object;
267
+ }
206
268
  if (index.size().length !== 1) {
207
269
  throw new _DimensionError.DimensionError(index.size(), 1);
208
270
  }
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createZeta = void 0;
7
+ var _factory = require("../../utils/factory.js");
8
+ var name = 'zeta';
9
+ var dependencies = ['typed', 'config', 'multiply', 'pow', 'divide', 'factorial', 'equal', 'smallerEq', 'isNegative', 'gamma', 'sin', 'subtract', 'add', '?Complex', '?BigNumber', 'pi'];
10
+ var createZeta = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
11
+ var typed = _ref.typed,
12
+ config = _ref.config,
13
+ multiply = _ref.multiply,
14
+ pow = _ref.pow,
15
+ divide = _ref.divide,
16
+ factorial = _ref.factorial,
17
+ equal = _ref.equal,
18
+ smallerEq = _ref.smallerEq,
19
+ isNegative = _ref.isNegative,
20
+ gamma = _ref.gamma,
21
+ sin = _ref.sin,
22
+ subtract = _ref.subtract,
23
+ add = _ref.add,
24
+ Complex = _ref.Complex,
25
+ _BigNumber = _ref.BigNumber,
26
+ pi = _ref.pi;
27
+ /**
28
+ * Compute the Riemann Zeta function of a value using an infinite series for
29
+ * all of the complex plane using Riemann's Functional equation.
30
+ *
31
+ * Based off the paper by Xavier Gourdon and Pascal Sebah
32
+ * ( http://numbers.computation.free.fr/Constants/Miscellaneous/zetaevaluations.pdf )
33
+ *
34
+ * Implementation and slight modification by Anik Patel
35
+ *
36
+ * Note: the implementation is accurate up to about 6 digits.
37
+ *
38
+ * Syntax:
39
+ *
40
+ * math.zeta(n)
41
+ *
42
+ * Examples:
43
+ *
44
+ * math.zeta(5) // returns 1.0369277551433895
45
+ * math.zeta(-0.5) // returns -0.2078862249773449
46
+ * math.zeta(math.i) // returns 0.0033002236853253153 - 0.4181554491413212i
47
+ *
48
+ *
49
+ * @param {number | Complex | BigNumber} s A Real, Complex or BigNumber parameter to the Riemann Zeta Function
50
+ * @return {number | Complex | BigNumber} The Riemann Zeta of `s`
51
+ */
52
+ return typed(name, {
53
+ number: function number(s) {
54
+ return zetaNumeric(s, function (value) {
55
+ return value;
56
+ }, function () {
57
+ return 20;
58
+ });
59
+ },
60
+ BigNumber: function BigNumber(s) {
61
+ return zetaNumeric(s, function (value) {
62
+ return new _BigNumber(value);
63
+ }, function () {
64
+ // epsilon is for example 1e-12. Extract the positive exponent 12 from that
65
+ return Math.abs(Math.log10(config.epsilon));
66
+ });
67
+ },
68
+ Complex: zetaComplex
69
+ });
70
+
71
+ /**
72
+ * @param {number | BigNumber} s
73
+ * @param {(value: number) => number | BigNumber} createValue
74
+ * @param {(value: number | BigNumber | Complex) => number} determineDigits
75
+ * @returns {number | BigNumber}
76
+ */
77
+ function zetaNumeric(s, createValue, determineDigits) {
78
+ if (equal(s, 0)) {
79
+ return createValue(-0.5);
80
+ }
81
+ if (equal(s, 1)) {
82
+ return createValue(NaN);
83
+ }
84
+ if (!isFinite(s)) {
85
+ return isNegative(s) ? createValue(NaN) : createValue(1);
86
+ }
87
+ return zeta(s, createValue, determineDigits, function (s) {
88
+ return s;
89
+ });
90
+ }
91
+
92
+ /**
93
+ * @param {Complex} s
94
+ * @returns {Complex}
95
+ */
96
+ function zetaComplex(s) {
97
+ if (s.re === 0 && s.im === 0) {
98
+ return new Complex(-0.5);
99
+ }
100
+ if (s.re === 1) {
101
+ return new Complex(NaN, NaN);
102
+ }
103
+ if (s.re === Infinity && s.im === 0) {
104
+ return new Complex(1);
105
+ }
106
+ if (s.im === Infinity || s.re === -Infinity) {
107
+ return new Complex(NaN, NaN);
108
+ }
109
+ return zeta(s, function (value) {
110
+ return value;
111
+ }, function (s) {
112
+ return Math.round(1.3 * 15 + 0.9 * Math.abs(s.im));
113
+ }, function (s) {
114
+ return s.re;
115
+ });
116
+ }
117
+
118
+ /**
119
+ * @param {number | BigNumber | Complex} s
120
+ * @param {(value: number) => number | BigNumber | Complex} createValue
121
+ * @param {(value: number | BigNumber | Complex) => number} determineDigits
122
+ * @param {(value: number | BigNumber | Complex) => number} getRe
123
+ * @returns {*|number}
124
+ */
125
+ function zeta(s, createValue, determineDigits, getRe) {
126
+ var n = determineDigits(s);
127
+ if (getRe(s) > -(n - 1) / 2) {
128
+ return f(s, createValue(n), createValue);
129
+ } else {
130
+ // Function Equation for reflection to x < 1
131
+ var c = multiply(pow(2, s), pow(createValue(pi), subtract(s, 1)));
132
+ c = multiply(c, sin(multiply(divide(createValue(pi), 2), s)));
133
+ c = multiply(c, gamma(subtract(1, s)));
134
+ return multiply(c, zeta(subtract(1, s), createValue, determineDigits, getRe));
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Calculate a portion of the sum
140
+ * @param {number | BigNumber} k a positive integer
141
+ * @param {number | BigNumber} n a positive integer
142
+ * @return {number} the portion of the sum
143
+ **/
144
+ function d(k, n) {
145
+ var S = k;
146
+ for (var j = k; smallerEq(j, n); j = add(j, 1)) {
147
+ var factor = divide(multiply(factorial(add(n, subtract(j, 1))), pow(4, j)), multiply(factorial(subtract(n, j)), factorial(multiply(2, j))));
148
+ S = add(S, factor);
149
+ }
150
+ return multiply(n, S);
151
+ }
152
+
153
+ /**
154
+ * Calculate the positive Riemann Zeta function
155
+ * @param {number} s a real or complex number with s.re > 1
156
+ * @param {number} n a positive integer
157
+ * @param {(number) => number | BigNumber | Complex} createValue
158
+ * @return {number} Riemann Zeta of s
159
+ **/
160
+ function f(s, n, createValue) {
161
+ var c = divide(1, multiply(d(createValue(0), n), subtract(1, pow(2, subtract(1, s)))));
162
+ var S = createValue(0);
163
+ for (var k = createValue(1); smallerEq(k, n); k = add(k, 1)) {
164
+ S = add(S, divide(multiply(Math.pow(-1, k - 1), d(k, n)), pow(k, s)));
165
+ }
166
+ return multiply(c, S);
167
+ }
168
+ });
169
+ exports.createZeta = createZeta;
@@ -5,17 +5,18 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createQuantileSeq = void 0;
7
7
  var _is = require("../../utils/is.js");
8
- var _number = require("../../utils/number.js");
9
8
  var _array = require("../../utils/array.js");
10
9
  var _factory = require("../../utils/factory.js");
10
+ var _apply = require("../matrix/apply.js");
11
11
  var name = 'quantileSeq';
12
- var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare'];
12
+ var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
13
13
  var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
14
14
  var typed = _ref.typed,
15
15
  add = _ref.add,
16
16
  multiply = _ref.multiply,
17
17
  partitionSelect = _ref.partitionSelect,
18
- compare = _ref.compare;
18
+ compare = _ref.compare,
19
+ isInteger = _ref.isInteger;
19
20
  /**
20
21
  * Compute the prob order quantile of a matrix or a list with values.
21
22
  * The sequence is sorted and the middle value is returned.
@@ -50,6 +51,40 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
50
51
  * @param {Boolean} sorted=false is data sorted in ascending order
51
52
  * @return {Number, BigNumber, Unit, Array} Quantile(s)
52
53
  */
54
+
55
+ var apply = (0, _apply.createApply)({
56
+ typed: typed,
57
+ isInteger: isInteger
58
+ });
59
+ /**
60
+ * Check if array value types are valid, throw error otherwise.
61
+ * @param {number | BigNumber | Unit} x
62
+ * @param {number | BigNumber | Unit} x
63
+ * @private
64
+ */
65
+ var validate = typed({
66
+ 'number | BigNumber | Unit': function numberBigNumberUnit(x) {
67
+ return x;
68
+ }
69
+ });
70
+ return typed(name, {
71
+ 'Array|Matrix, number|BigNumber|Array': function ArrayMatrixNumberBigNumberArray(data, prob) {
72
+ return quantileSeq(data, prob, false);
73
+ },
74
+ 'Array|Matrix, number|BigNumber|Array, boolean': quantileSeq,
75
+ 'Array|Matrix, number|BigNumber|Array, number': function ArrayMatrixNumberBigNumberArrayNumber(data, prob, dim) {
76
+ return _quantileSeqDim(data, prob, false, dim);
77
+ },
78
+ 'Array|Matrix, number|BigNumber|Array, boolean, number': function ArrayMatrixNumberBigNumberArrayBooleanNumber(data, prob, sorted, dim) {
79
+ return _quantileSeqDim(data, prob, sorted, dim);
80
+ }
81
+ });
82
+ function _quantileSeqDim(data, prob, sorted, dim) {
83
+ // return [1.3, 1.2]
84
+ return apply(data, dim, function (x) {
85
+ return quantileSeq(x, prob, sorted);
86
+ });
87
+ }
53
88
  function quantileSeq(data, probOrN, sorted) {
54
89
  var probArr, dataArr, one;
55
90
  if (arguments.length < 2 || arguments.length > 3) {
@@ -69,7 +104,7 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
69
104
  }
70
105
  if (probOrN > 1) {
71
106
  // quantileSeq([a, b, c, d, ...], N[,sorted])
72
- if (!(0, _number.isInteger)(probOrN)) {
107
+ if (!isInteger(probOrN)) {
73
108
  throw new Error('N must be a positive integer');
74
109
  }
75
110
  var nPlusOne = probOrN + 1;
@@ -223,18 +258,5 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
223
258
  var one = new fracPart.constructor(1);
224
259
  return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));
225
260
  }
226
-
227
- /**
228
- * Check if array value types are valid, throw error otherwise.
229
- * @param {number | BigNumber | Unit} x
230
- * @param {number | BigNumber | Unit} x
231
- * @private
232
- */
233
- var validate = typed({
234
- 'number | BigNumber | Unit': function numberBigNumberUnit(x) {
235
- return x;
236
- }
237
- });
238
- return quantileSeq;
239
261
  });
240
262
  exports.createQuantileSeq = createQuantileSeq;
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 11.9.1
10
- * @date 2023-07-24
9
+ * @version 11.10.0
10
+ * @date 2023-08-23
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2023 Jos de Jong <wjosdejong@gmail.com>
@@ -339,6 +339,18 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
339
339
  } else {
340
340
  // set a submatrix
341
341
 
342
+ // broadcast submatrix
343
+ if (!(0, _object.deepStrictEqual)(sSize, iSize)) {
344
+ try {
345
+ if (sSize.length === 0) {
346
+ submatrix = (0, _array.broadcastTo)([submatrix], iSize);
347
+ } else {
348
+ submatrix = (0, _array.broadcastTo)(submatrix, iSize);
349
+ }
350
+ sSize = (0, _array.arraySize)(submatrix);
351
+ } catch (_unused) {}
352
+ }
353
+
342
354
  // validate dimensions
343
355
  if (iSize.length < matrix._size.length) {
344
356
  throw new _DimensionError.DimensionError(iSize.length, matrix._size.length, '<');
@@ -975,19 +987,17 @@ var createDenseMatrixClass = /* #__PURE__ */(0, _factory.factory)(name, dependen
975
987
 
976
988
  /**
977
989
  * Preprocess data, which can be an Array or DenseMatrix with nested Arrays and
978
- * Matrices. Replaces all nested Matrices with Arrays
990
+ * Matrices. Clones all (nested) Arrays, and replaces all nested Matrices with Arrays
979
991
  * @memberof DenseMatrix
980
- * @param {Array} data
992
+ * @param {Array | Matrix} data
981
993
  * @return {Array} data
982
994
  */
983
995
  function preprocess(data) {
984
- for (var i = 0, ii = data.length; i < ii; i++) {
985
- var elem = data[i];
986
- if ((0, _is.isArray)(elem)) {
987
- data[i] = preprocess(elem);
988
- } else if (elem && elem.isMatrix === true) {
989
- data[i] = preprocess(elem.valueOf());
990
- }
996
+ if ((0, _is.isMatrix)(data)) {
997
+ return preprocess(data.valueOf());
998
+ }
999
+ if ((0, _is.isArray)(data)) {
1000
+ return data.map(preprocess);
991
1001
  }
992
1002
  return data;
993
1003
  }