mathjs 11.10.1 → 11.11.1

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 +21 -2
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +4 -4
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/dependenciesAny/dependenciesCorr.generated.js +36 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesPrintTransform.generated.js +24 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
  11. package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
  12. package/lib/cjs/entry/dependenciesNumber/dependenciesCorr.generated.js +36 -0
  13. package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
  14. package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
  15. package/lib/cjs/entry/impureFunctionsAny.generated.js +48 -35
  16. package/lib/cjs/entry/impureFunctionsNumber.generated.js +17 -16
  17. package/lib/cjs/entry/pureFunctionsAny.generated.js +101 -76
  18. package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -28
  19. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  20. package/lib/cjs/expression/embeddedDocs/function/statistics/corr.js +15 -0
  21. package/lib/cjs/expression/embeddedDocs/function/utils/print.js +1 -1
  22. package/lib/cjs/expression/node/FunctionNode.js +3 -1
  23. package/lib/cjs/expression/transform/print.transform.js +47 -0
  24. package/lib/cjs/expression/transform/quantileSeq.transform.js +27 -5
  25. package/lib/cjs/factoriesAny.js +15 -1
  26. package/lib/cjs/factoriesNumber.js +10 -4
  27. package/lib/cjs/function/algebra/simplify/util.js +2 -2
  28. package/lib/cjs/function/arithmetic/gcd.js +40 -4
  29. package/lib/cjs/function/arithmetic/mod.js +32 -3
  30. package/lib/cjs/function/numeric/solveODE.js +2 -2
  31. package/lib/cjs/function/statistics/corr.js +85 -0
  32. package/lib/cjs/function/statistics/quantileSeq.js +90 -167
  33. package/lib/cjs/function/string/print.js +5 -1
  34. package/lib/cjs/header.js +2 -2
  35. package/lib/cjs/plain/number/arithmetic.js +4 -12
  36. package/lib/cjs/type/unit/Unit.js +2 -2
  37. package/lib/cjs/utils/print.js +8 -0
  38. package/lib/cjs/utils/snapshot.js +8 -8
  39. package/lib/cjs/version.js +1 -1
  40. package/lib/esm/entry/dependenciesAny/dependenciesCorr.generated.js +28 -0
  41. package/lib/esm/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
  42. package/lib/esm/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
  43. package/lib/esm/entry/dependenciesAny/dependenciesPrintTransform.generated.js +16 -0
  44. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
  45. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
  46. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  47. package/lib/esm/entry/dependenciesNumber/dependenciesCorr.generated.js +28 -0
  48. package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
  49. package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
  50. package/lib/esm/entry/impureFunctionsAny.generated.js +49 -36
  51. package/lib/esm/entry/impureFunctionsNumber.generated.js +19 -18
  52. package/lib/esm/entry/pureFunctionsAny.generated.js +85 -61
  53. package/lib/esm/entry/pureFunctionsNumber.generated.js +39 -22
  54. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  55. package/lib/esm/expression/embeddedDocs/function/statistics/corr.js +8 -0
  56. package/lib/esm/expression/embeddedDocs/function/utils/print.js +1 -1
  57. package/lib/esm/expression/node/FunctionNode.js +3 -1
  58. package/lib/esm/expression/transform/print.transform.js +42 -0
  59. package/lib/esm/expression/transform/quantileSeq.transform.js +23 -5
  60. package/lib/esm/factoriesAny.js +3 -1
  61. package/lib/esm/factoriesNumber.js +1 -0
  62. package/lib/esm/function/algebra/simplify/util.js +2 -2
  63. package/lib/esm/function/arithmetic/gcd.js +40 -4
  64. package/lib/esm/function/arithmetic/mod.js +32 -3
  65. package/lib/esm/function/numeric/solveODE.js +2 -2
  66. package/lib/esm/function/statistics/corr.js +74 -0
  67. package/lib/esm/function/statistics/quantileSeq.js +82 -165
  68. package/lib/esm/function/string/print.js +5 -1
  69. package/lib/esm/plain/number/arithmetic.js +4 -12
  70. package/lib/esm/type/unit/Unit.js +2 -2
  71. package/lib/esm/utils/print.js +1 -0
  72. package/lib/esm/utils/snapshot.js +2 -2
  73. package/lib/esm/version.js +1 -1
  74. package/package.json +21 -21
  75. package/types/index.d.ts +8 -0
@@ -237,6 +237,7 @@ export { createMad } from './function/statistics/mad.js';
237
237
  export { createVariance } from './function/statistics/variance.js';
238
238
  export { createQuantileSeq } from './function/statistics/quantileSeq.js';
239
239
  export { createStd } from './function/statistics/std.js';
240
+ export { createCorr } from './function/statistics/corr.js';
240
241
  export { createCombinations } from './function/probability/combinations.js';
241
242
  export { createCombinationsWithRep } from './function/probability/combinationsWithRep.js';
242
243
  export { createGamma } from './function/probability/gamma.js';
@@ -286,4 +287,5 @@ export { createStdTransform } from './expression/transform/std.transform.js';
286
287
  export { createSumTransform } from './expression/transform/sum.transform.js';
287
288
  export { createQuantileSeqTransform } from './expression/transform/quantileSeq.transform.js';
288
289
  export { createCumSumTransform } from './expression/transform/cumsum.transform.js';
289
- export { createVarianceTransform } from './expression/transform/variance.transform.js';
290
+ export { createVarianceTransform } from './expression/transform/variance.transform.js';
291
+ export { createPrintTransform } from './expression/transform/print.transform.js';
@@ -175,6 +175,7 @@ export { createMad } from './function/statistics/mad.js';
175
175
  export { createVariance } from './function/statistics/variance.js';
176
176
  export { createQuantileSeq } from './function/statistics/quantileSeq.js';
177
177
  export { createStd } from './function/statistics/std.js';
178
+ export { createCorr } from './function/statistics/corr.js';
178
179
 
179
180
  // string
180
181
  export { createFormat } from './function/string/format.js';
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
4
  import { isFunctionNode, isOperatorNode, isParenthesisNode } from '../../../utils/is.js';
5
5
  import { factory } from '../../../utils/factory.js';
6
6
  import { hasOwnProperty } from '../../../utils/object.js';
@@ -1,12 +1,13 @@
1
+ import { isInteger } from '../../utils/number.js';
1
2
  import { factory } from '../../utils/factory.js';
3
+ import { createMod } from './mod.js';
2
4
  import { createMatAlgo01xDSid } from '../../type/matrix/utils/matAlgo01xDSid.js';
3
5
  import { createMatAlgo04xSidSid } from '../../type/matrix/utils/matAlgo04xSidSid.js';
4
6
  import { createMatAlgo10xSids } from '../../type/matrix/utils/matAlgo10xSids.js';
5
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
6
- import { gcdNumber } from '../../plain/number/index.js';
7
8
  import { ArgumentsError } from '../../error/ArgumentsError.js';
8
9
  var name = 'gcd';
9
- var dependencies = ['typed', 'matrix', 'equalScalar', 'BigNumber', 'DenseMatrix', 'concat'];
10
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix', 'concat'];
10
11
  var gcdTypes = 'number | BigNumber | Fraction | Matrix | Array';
11
12
  var gcdManyTypesSignature = "".concat(gcdTypes, ", ").concat(gcdTypes, ", ...").concat(gcdTypes);
12
13
  function is1d(array) {
@@ -16,11 +17,24 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
16
17
  var {
17
18
  typed,
18
19
  matrix,
20
+ config,
21
+ round,
19
22
  equalScalar,
23
+ zeros,
20
24
  BigNumber,
21
25
  DenseMatrix,
22
26
  concat
23
27
  } = _ref;
28
+ var mod = createMod({
29
+ typed,
30
+ config,
31
+ round,
32
+ matrix,
33
+ equalScalar,
34
+ zeros,
35
+ DenseMatrix,
36
+ concat
37
+ });
24
38
  var matAlgo01xDSid = createMatAlgo01xDSid({
25
39
  typed
26
40
  });
@@ -64,7 +78,7 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
64
78
  * @return {number | BigNumber | Fraction | Array | Matrix} The greatest common divisor
65
79
  */
66
80
  return typed(name, {
67
- 'number, number': gcdNumber,
81
+ 'number, number': _gcdNumber,
68
82
  'BigNumber, BigNumber': _gcdBigNumber,
69
83
  'Fraction, Fraction': (x, y) => x.gcd(y)
70
84
  }, matrixAlgorithmSuite({
@@ -93,6 +107,28 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
93
107
  })
94
108
  });
95
109
 
110
+ /**
111
+ * Calculate gcd for numbers
112
+ * @param {number} a
113
+ * @param {number} b
114
+ * @returns {number} Returns the greatest common denominator of a and b
115
+ * @private
116
+ */
117
+ function _gcdNumber(a, b) {
118
+ if (!isInteger(a) || !isInteger(b)) {
119
+ throw new Error('Parameters in function gcd must be integer numbers');
120
+ }
121
+
122
+ // https://en.wikipedia.org/wiki/Euclidean_algorithm
123
+ var r;
124
+ while (b !== 0) {
125
+ r = mod(a, b);
126
+ a = b;
127
+ b = r;
128
+ }
129
+ return a < 0 ? -a : a;
130
+ }
131
+
96
132
  /**
97
133
  * Calculate gcd for BigNumbers
98
134
  * @param {BigNumber} a
@@ -108,7 +144,7 @@ export var createGcd = /* #__PURE__ */factory(name, dependencies, _ref => {
108
144
  // https://en.wikipedia.org/wiki/Euclidean_algorithm
109
145
  var zero = new BigNumber(0);
110
146
  while (!b.isZero()) {
111
- var r = a.mod(b);
147
+ var r = mod(a, b);
112
148
  a = b;
113
149
  b = r;
114
150
  }
@@ -1,21 +1,33 @@
1
1
  import { factory } from '../../utils/factory.js';
2
+ import { createFloor } from './floor.js';
2
3
  import { createMatAlgo02xDS0 } from '../../type/matrix/utils/matAlgo02xDS0.js';
3
4
  import { createMatAlgo03xDSf } from '../../type/matrix/utils/matAlgo03xDSf.js';
4
5
  import { createMatAlgo05xSfSf } from '../../type/matrix/utils/matAlgo05xSfSf.js';
5
6
  import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
6
7
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
- import { modNumber } from '../../plain/number/index.js';
8
8
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
9
9
  var name = 'mod';
10
- var dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix', 'concat'];
10
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix', 'concat'];
11
11
  export var createMod = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
+ config,
15
+ round,
14
16
  matrix,
15
17
  equalScalar,
18
+ zeros,
16
19
  DenseMatrix,
17
20
  concat
18
21
  } = _ref;
22
+ var floor = createFloor({
23
+ typed,
24
+ config,
25
+ round,
26
+ matrix,
27
+ equalScalar,
28
+ zeros,
29
+ DenseMatrix
30
+ });
19
31
  var matAlgo02xDS0 = createMatAlgo02xDS0({
20
32
  typed,
21
33
  equalScalar
@@ -77,7 +89,7 @@ export var createMod = /* #__PURE__ */factory(name, dependencies, _ref => {
77
89
  * @return {number | BigNumber | Fraction | Array | Matrix} Returns the remainder of `x` divided by `y`.
78
90
  */
79
91
  return typed(name, {
80
- 'number, number': modNumber,
92
+ 'number, number': _modNumber,
81
93
  'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
82
94
  if (y.isNeg()) {
83
95
  throw new Error('Cannot calculate mod for a negative divisor');
@@ -98,4 +110,21 @@ export var createMod = /* #__PURE__ */factory(name, dependencies, _ref => {
98
110
  Ss: matAlgo11xS0s,
99
111
  sS: matAlgo12xSfs
100
112
  }));
113
+
114
+ /**
115
+ * Calculate the modulus of two numbers
116
+ * @param {number} x
117
+ * @param {number} y
118
+ * @returns {number} res
119
+ * @private
120
+ */
121
+ function _modNumber(x, y) {
122
+ // We don't use JavaScript's % operator here as this doesn't work
123
+ // correctly for x < 0 and x === 0
124
+ // see https://en.wikipedia.org/wiki/Modulo_operation
125
+
126
+ // We use mathjs floor to handle errors associated with
127
+ // precision float approximation
128
+ return y === 0 ? x : x - y * floor(x / y);
129
+ }
101
130
  });
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
4
  import { isUnit, isNumber, isBigNumber } from '../../utils/is.js';
5
5
  import { factory } from '../../utils/factory.js';
6
6
  var name = 'solveODE';
@@ -0,0 +1,74 @@
1
+ import { factory } from '../../utils/factory.js';
2
+ var name = 'corr';
3
+ var dependencies = ['typed', 'matrix', 'mean', 'sqrt', 'sum', 'add', 'subtract', 'multiply', 'pow', 'divide'];
4
+ export var createCorr = /* #__PURE__ */factory(name, dependencies, _ref => {
5
+ var {
6
+ typed,
7
+ matrix,
8
+ sqrt,
9
+ sum,
10
+ add,
11
+ subtract,
12
+ multiply,
13
+ pow,
14
+ divide
15
+ } = _ref;
16
+ /**
17
+ * Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.
18
+ *
19
+ * Syntax:
20
+ *
21
+ * math.corr(A, B)
22
+ *
23
+ * Examples:
24
+ *
25
+ * math.corr([1, 2, 3, 4, 5], [4, 5, 6, 7, 8]) // returns 1
26
+ * math.corr([1, 2.2, 3, 4.8, 5], [4, 5.3, 6.6, 7, 8]) // returns 0.9569941688503644
27
+ * math.corr(math.matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), math.matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]])) // returns DenseMatrix [0.9569941688503644, 1]
28
+ *
29
+ * See also:
30
+ *
31
+ * median, mean, min, max, sum, prod, std, variance
32
+ *
33
+ * @param {Array | Matrix} A The first array or matrix to compute correlation coefficient
34
+ * @param {Array | Matrix} B The second array or matrix to compute correlation coefficient
35
+ * @return {*} The correlation coefficient
36
+ */
37
+ return typed(name, {
38
+ 'Array, Array': function ArrayArray(A, B) {
39
+ return _corr(A, B);
40
+ },
41
+ 'Matrix, Matrix': function MatrixMatrix(xMatrix, yMatrix) {
42
+ return matrix(_corr(xMatrix.toArray(), yMatrix.toArray()));
43
+ }
44
+ });
45
+ /**
46
+ * Calculate the correlation coefficient between two arrays or matrices.
47
+ * @param {Array | Matrix} A
48
+ * @param {Array | Matrix} B
49
+ * @return {*} correlation coefficient
50
+ * @private
51
+ */
52
+ function _corr(A, B) {
53
+ if (Array.isArray(A[0]) && Array.isArray(B[0])) {
54
+ var correlations = [];
55
+ for (var i = 0; i < A.length; i++) {
56
+ correlations.push(correlation(A[i], B[i]));
57
+ }
58
+ return correlations;
59
+ } else {
60
+ return correlation(A, B);
61
+ }
62
+ }
63
+ function correlation(A, B) {
64
+ var n = A.length;
65
+ var sumX = sum(A);
66
+ var sumY = sum(B);
67
+ var sumXY = A.reduce((acc, x, index) => add(acc, multiply(x, B[index])), 0);
68
+ var sumXSquare = sum(A.map(x => pow(x, 2)));
69
+ var sumYSquare = sum(B.map(y => pow(y, 2)));
70
+ var numerator = subtract(multiply(n, sumXY), multiply(sumX, sumY));
71
+ var denominator = sqrt(multiply(subtract(multiply(n, sumXSquare), pow(sumX, 2)), subtract(multiply(n, sumYSquare), pow(sumY, 2))));
72
+ return divide(numerator, denominator);
73
+ }
74
+ });
@@ -1,18 +1,29 @@
1
- import { isBigNumber, isCollection, isNumber } from '../../utils/is.js';
1
+ import { isNumber } from '../../utils/is.js';
2
2
  import { flatten } from '../../utils/array.js';
3
3
  import { factory } from '../../utils/factory.js';
4
4
  import { createApply } from '../matrix/apply.js';
5
5
  var name = 'quantileSeq';
6
- var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
6
+ var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
7
7
  export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
10
+ bignumber,
10
11
  add,
12
+ subtract,
13
+ divide,
11
14
  multiply,
12
15
  partitionSelect,
13
16
  compare,
14
- isInteger
17
+ isInteger,
18
+ smaller,
19
+ smallerEq,
20
+ larger
15
21
  } = _ref;
22
+ var apply = createApply({
23
+ typed,
24
+ isInteger
25
+ });
26
+
16
27
  /**
17
28
  * Compute the prob order quantile of a matrix or a list with values.
18
29
  * The sequence is sorted and the middle value is returned.
@@ -47,122 +58,69 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
47
58
  * @param {Boolean} sorted=false is data sorted in ascending order
48
59
  * @return {Number, BigNumber, Unit, Array} Quantile(s)
49
60
  */
50
-
51
- var apply = createApply({
52
- typed,
53
- isInteger
54
- });
55
- /**
56
- * Check if array value types are valid, throw error otherwise.
57
- * @param {number | BigNumber | Unit} x
58
- * @param {number | BigNumber | Unit} x
59
- * @private
60
- */
61
- var validate = typed({
62
- 'number | BigNumber | Unit': function numberBigNumberUnit(x) {
63
- return x;
64
- }
65
- });
66
61
  return typed(name, {
67
- 'Array|Matrix, number|BigNumber|Array': (data, prob) => quantileSeq(data, prob, false),
68
- 'Array|Matrix, number|BigNumber|Array, boolean': quantileSeq,
69
- 'Array|Matrix, number|BigNumber|Array, number': (data, prob, dim) => _quantileSeqDim(data, prob, false, dim),
70
- 'Array|Matrix, number|BigNumber|Array, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim)
62
+ 'Array | Matrix, number | BigNumber': (data, p) => _quantileSeqProbNumber(data, p, false),
63
+ 'Array | Matrix, number | BigNumber, number': (data, prob, dim) => _quantileSeqDim(data, prob, false, dim, _quantileSeqProbNumber),
64
+ 'Array | Matrix, number | BigNumber, boolean': _quantileSeqProbNumber,
65
+ 'Array | Matrix, number | BigNumber, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbNumber),
66
+ 'Array | Matrix, Array | Matrix': (data, p) => _quantileSeqProbCollection(data, p, false),
67
+ 'Array | Matrix, Array | Matrix, number': (data, prob, dim) => _quantileSeqDim(data, prob, false, dim, _quantileSeqProbCollection),
68
+ 'Array | Matrix, Array | Matrix, boolean': _quantileSeqProbCollection,
69
+ 'Array | Matrix, Array | Matrix, boolean, number': (data, prob, sorted, dim) => _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection)
71
70
  });
72
- function _quantileSeqDim(data, prob, sorted, dim) {
73
- // return [1.3, 1.2]
74
- return apply(data, dim, x => quantileSeq(x, prob, sorted));
71
+ function _quantileSeqDim(data, prob, sorted, dim, fn) {
72
+ return apply(data, dim, x => fn(x, prob, sorted));
75
73
  }
76
- function quantileSeq(data, probOrN, sorted) {
77
- var probArr, dataArr, one;
78
- if (arguments.length < 2 || arguments.length > 3) {
79
- throw new SyntaxError('Function quantileSeq requires two or three parameters');
74
+ function _quantileSeqProbNumber(data, probOrN, sorted) {
75
+ var probArr;
76
+ var dataArr = data.valueOf();
77
+ if (smaller(probOrN, 0)) {
78
+ throw new Error('N/prob must be non-negative');
80
79
  }
81
- if (isCollection(data)) {
82
- sorted = sorted || false;
83
- if (typeof sorted === 'boolean') {
84
- dataArr = data.valueOf();
85
- if (isNumber(probOrN)) {
86
- if (probOrN < 0) {
87
- throw new Error('N/prob must be non-negative');
88
- }
89
- if (probOrN <= 1) {
90
- // quantileSeq([a, b, c, d, ...], prob[,sorted])
91
- return _quantileSeq(dataArr, probOrN, sorted);
92
- }
93
- if (probOrN > 1) {
94
- // quantileSeq([a, b, c, d, ...], N[,sorted])
95
- if (!isInteger(probOrN)) {
96
- throw new Error('N must be a positive integer');
97
- }
98
- var nPlusOne = probOrN + 1;
99
- probArr = new Array(probOrN);
100
- for (var i = 0; i < probOrN;) {
101
- probArr[i] = _quantileSeq(dataArr, ++i / nPlusOne, sorted);
102
- }
103
- return probArr;
104
- }
105
- }
106
- if (isBigNumber(probOrN)) {
107
- var BigNumber = probOrN.constructor;
108
- if (probOrN.isNegative()) {
109
- throw new Error('N/prob must be non-negative');
110
- }
111
- one = new BigNumber(1);
112
- if (probOrN.lte(one)) {
113
- // quantileSeq([a, b, c, d, ...], prob[,sorted])
114
- return new BigNumber(_quantileSeq(dataArr, probOrN, sorted));
115
- }
116
- if (probOrN.gt(one)) {
117
- // quantileSeq([a, b, c, d, ...], N[,sorted])
118
- if (!probOrN.isInteger()) {
119
- throw new Error('N must be a positive integer');
120
- }
121
-
122
- // largest possible Array length is 2^32-1
123
- // 2^32 < 10^15, thus safe conversion guaranteed
124
- var intN = probOrN.toNumber();
125
- if (intN > 4294967295) {
126
- throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
127
- }
128
- var _nPlusOne = new BigNumber(intN + 1);
129
- probArr = new Array(intN);
130
- for (var _i = 0; _i < intN;) {
131
- probArr[_i] = new BigNumber(_quantileSeq(dataArr, new BigNumber(++_i).div(_nPlusOne), sorted));
132
- }
133
- return probArr;
134
- }
135
- }
136
- if (isCollection(probOrN)) {
137
- // quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
138
- var probOrNArr = probOrN.valueOf();
139
- probArr = new Array(probOrNArr.length);
140
- for (var _i2 = 0; _i2 < probArr.length; ++_i2) {
141
- var currProb = probOrNArr[_i2];
142
- if (isNumber(currProb)) {
143
- if (currProb < 0 || currProb > 1) {
144
- throw new Error('Probability must be between 0 and 1, inclusive');
145
- }
146
- } else if (isBigNumber(currProb)) {
147
- one = new currProb.constructor(1);
148
- if (currProb.isNegative() || currProb.gt(one)) {
149
- throw new Error('Probability must be between 0 and 1, inclusive');
150
- }
151
- } else {
152
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
153
- }
154
-
155
- probArr[_i2] = _quantileSeq(dataArr, currProb, sorted);
156
- }
157
- return probArr;
158
- }
159
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
80
+ if (smallerEq(probOrN, 1)) {
81
+ // quantileSeq([a, b, c, d, ...], prob[,sorted])
82
+ return isNumber(probOrN) ? _quantileSeq(dataArr, probOrN, sorted) : bignumber(_quantileSeq(dataArr, probOrN, sorted));
83
+ }
84
+ if (larger(probOrN, 1)) {
85
+ // quantileSeq([a, b, c, d, ...], N[,sorted])
86
+ if (!isInteger(probOrN)) {
87
+ throw new Error('N must be a positive integer');
160
88
  }
161
89
 
162
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
90
+ // largest possible Array length is 2^32-1
91
+ // 2^32 < 10^15, thus safe conversion guaranteed
92
+ if (larger(probOrN, 4294967295)) {
93
+ throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
94
+ }
95
+ var nPlusOne = add(probOrN, 1);
96
+ probArr = [];
97
+ for (var i = 0; smaller(i, probOrN); i++) {
98
+ var prob = divide(i + 1, nPlusOne);
99
+ probArr.push(_quantileSeq(dataArr, prob, sorted));
100
+ }
101
+ return isNumber(probOrN) ? probArr : bignumber(probArr);
163
102
  }
103
+ }
164
104
 
165
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
105
+ /**
106
+ * Calculate the prob order quantile of an n-dimensional array.
107
+ *
108
+ * @param {Array, Matrix} array
109
+ * @param {Array, Matrix} prob
110
+ * @param {Boolean} sorted
111
+ * @return {Number, BigNumber, Unit} prob order quantile
112
+ * @private
113
+ */
114
+
115
+ function _quantileSeqProbCollection(data, probOrN, sorted) {
116
+ var dataArr = data.valueOf();
117
+ // quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
118
+ var probOrNArr = probOrN.valueOf();
119
+ var probArr = [];
120
+ for (var i = 0; i < probOrNArr.length; ++i) {
121
+ probArr.push(_quantileSeq(dataArr, probOrNArr[i], sorted));
122
+ }
123
+ return probArr;
166
124
  }
167
125
 
168
126
  /**
@@ -180,70 +138,29 @@ export var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref =
180
138
  if (len === 0) {
181
139
  throw new Error('Cannot calculate quantile of an empty sequence');
182
140
  }
183
- if (isNumber(prob)) {
184
- var _index = prob * (len - 1);
185
- var _fracPart = _index % 1;
186
- if (_fracPart === 0) {
187
- var value = sorted ? flat[_index] : partitionSelect(flat, _index);
188
- validate(value);
189
- return value;
190
- }
191
- var _integerPart = Math.floor(_index);
192
- var _left;
193
- var _right;
194
- if (sorted) {
195
- _left = flat[_integerPart];
196
- _right = flat[_integerPart + 1];
197
- } else {
198
- _right = partitionSelect(flat, _integerPart + 1);
199
-
200
- // max of partition is kth largest
201
- _left = flat[_integerPart];
202
- for (var i = 0; i < _integerPart; ++i) {
203
- if (compare(flat[i], _left) > 0) {
204
- _left = flat[i];
205
- }
206
- }
207
- }
208
- validate(_left);
209
- validate(_right);
210
-
211
- // Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
212
- return add(multiply(_left, 1 - _fracPart), multiply(_right, _fracPart));
213
- }
214
-
215
- // If prob is a BigNumber
216
- var index = prob.times(len - 1);
217
- if (index.isInteger()) {
218
- index = index.toNumber();
219
- var _value = sorted ? flat[index] : partitionSelect(flat, index);
220
- validate(_value);
221
- return _value;
141
+ var index = isNumber(prob) ? prob * (len - 1) : prob.times(len - 1);
142
+ var integerPart = isNumber(prob) ? Math.floor(index) : index.floor().toNumber();
143
+ var fracPart = isNumber(prob) ? index % 1 : index.minus(integerPart);
144
+ if (isInteger(index)) {
145
+ return sorted ? flat[index] : partitionSelect(flat, isNumber(prob) ? index : index.valueOf());
222
146
  }
223
- var integerPart = index.floor();
224
- var fracPart = index.minus(integerPart);
225
- var integerPartNumber = integerPart.toNumber();
226
147
  var left;
227
148
  var right;
228
149
  if (sorted) {
229
- left = flat[integerPartNumber];
230
- right = flat[integerPartNumber + 1];
150
+ left = flat[integerPart];
151
+ right = flat[integerPart + 1];
231
152
  } else {
232
- right = partitionSelect(flat, integerPartNumber + 1);
153
+ right = partitionSelect(flat, integerPart + 1);
233
154
 
234
155
  // max of partition is kth largest
235
- left = flat[integerPartNumber];
236
- for (var _i3 = 0; _i3 < integerPartNumber; ++_i3) {
237
- if (compare(flat[_i3], left) > 0) {
238
- left = flat[_i3];
156
+ left = flat[integerPart];
157
+ for (var i = 0; i < integerPart; ++i) {
158
+ if (compare(flat[i], left) > 0) {
159
+ left = flat[i];
239
160
  }
240
161
  }
241
162
  }
242
- validate(left);
243
- validate(right);
244
-
245
163
  // Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
246
- var one = new fracPart.constructor(1);
247
- return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));
164
+ return add(multiply(left, subtract(1, fracPart)), multiply(right, fracPart));
248
165
  }
249
166
  });
@@ -1,6 +1,7 @@
1
1
  import { format } from '../../utils/string.js';
2
2
  import { isString } from '../../utils/is.js';
3
3
  import { factory } from '../../utils/factory.js';
4
+ import { printTemplate } from '../../utils/print.js';
4
5
  var name = 'print';
5
6
  var dependencies = ['typed'];
6
7
  export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -67,9 +68,12 @@ export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
67
68
  * @private
68
69
  */
69
70
  function _print(template, values, options) {
70
- return template.replace(/\$([\w.]+)/g, function (original, key) {
71
+ return template.replace(printTemplate, function (original, key) {
71
72
  var keys = key.split('.');
72
73
  var value = values[keys.shift()];
74
+ if (value !== undefined && value.isMatrix) {
75
+ value = value.toArray();
76
+ }
73
77
  while (keys.length && value !== undefined) {
74
78
  var k = keys.shift();
75
79
  value = k ? value[k] : value + '.';
@@ -146,18 +146,10 @@ log1pNumber.signature = n1;
146
146
  * @private
147
147
  */
148
148
  export function modNumber(x, y) {
149
- if (y > 0) {
150
- // We don't use JavaScript's % operator here as this doesn't work
151
- // correctly for x < 0 and x === 0
152
- // see https://en.wikipedia.org/wiki/Modulo_operation
153
- return x - y * Math.floor(x / y);
154
- } else if (y === 0) {
155
- return x;
156
- } else {
157
- // y < 0
158
- // TODO: implement mod for a negative divisor
159
- throw new Error('Cannot calculate mod for a negative divisor');
160
- }
149
+ // We don't use JavaScript's % operator here as this doesn't work
150
+ // correctly for x < 0 and x === 0
151
+ // see https://en.wikipedia.org/wiki/Modulo_operation
152
+ return y === 0 ? x : x - y * Math.floor(x / y);
161
153
  }
162
154
  modNumber.signature = n2;
163
155
 
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _extends from "@babel/runtime/helpers/extends";
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
5
  import { isComplex, isUnit, typeOf } from '../../utils/is.js';
6
6
  import { factory } from '../../utils/factory.js';
7
7
  import { memoize } from '../../utils/function.js';
@@ -0,0 +1 @@
1
+ export var printTemplate = /\$([\w.]+)/g;
@@ -1,7 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
5
  /**
6
6
  * This file contains helper methods to create expected snapshot structures
7
7
  * of both instance and ES6 exports.