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
@@ -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
  }