mathjs 11.11.0 → 11.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. package/HISTORY.md +11 -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/dependenciesGcd.generated.js +4 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesPrintTransform.generated.js +24 -0
  8. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
  10. package/lib/cjs/entry/dependenciesAny.generated.js +7 -0
  11. package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
  12. package/lib/cjs/entry/impureFunctionsAny.generated.js +23 -11
  13. package/lib/cjs/entry/impureFunctionsNumber.generated.js +13 -13
  14. package/lib/cjs/entry/pureFunctionsAny.generated.js +55 -43
  15. package/lib/cjs/entry/pureFunctionsNumber.generated.js +20 -15
  16. package/lib/cjs/expression/embeddedDocs/function/utils/print.js +1 -1
  17. package/lib/cjs/expression/node/FunctionNode.js +3 -1
  18. package/lib/cjs/expression/transform/print.transform.js +47 -0
  19. package/lib/cjs/expression/transform/quantileSeq.transform.js +27 -5
  20. package/lib/cjs/factoriesAny.js +8 -1
  21. package/lib/cjs/function/algebra/simplify/util.js +2 -2
  22. package/lib/cjs/function/arithmetic/gcd.js +40 -4
  23. package/lib/cjs/function/arithmetic/mod.js +32 -3
  24. package/lib/cjs/function/numeric/solveODE.js +2 -2
  25. package/lib/cjs/function/statistics/quantileSeq.js +90 -167
  26. package/lib/cjs/function/string/print.js +5 -1
  27. package/lib/cjs/header.js +2 -2
  28. package/lib/cjs/plain/number/arithmetic.js +4 -12
  29. package/lib/cjs/type/unit/Unit.js +2 -2
  30. package/lib/cjs/utils/print.js +8 -0
  31. package/lib/cjs/utils/snapshot.js +8 -8
  32. package/lib/cjs/version.js +1 -1
  33. package/lib/esm/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
  34. package/lib/esm/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
  35. package/lib/esm/entry/dependenciesAny/dependenciesPrintTransform.generated.js +16 -0
  36. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
  37. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
  38. package/lib/esm/entry/dependenciesAny.generated.js +1 -0
  39. package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
  40. package/lib/esm/entry/impureFunctionsAny.generated.js +25 -13
  41. package/lib/esm/entry/impureFunctionsNumber.generated.js +15 -15
  42. package/lib/esm/entry/pureFunctionsAny.generated.js +51 -39
  43. package/lib/esm/entry/pureFunctionsNumber.generated.js +19 -14
  44. package/lib/esm/expression/embeddedDocs/function/utils/print.js +1 -1
  45. package/lib/esm/expression/node/FunctionNode.js +3 -1
  46. package/lib/esm/expression/transform/print.transform.js +42 -0
  47. package/lib/esm/expression/transform/quantileSeq.transform.js +23 -5
  48. package/lib/esm/factoriesAny.js +2 -1
  49. package/lib/esm/function/algebra/simplify/util.js +2 -2
  50. package/lib/esm/function/arithmetic/gcd.js +40 -4
  51. package/lib/esm/function/arithmetic/mod.js +32 -3
  52. package/lib/esm/function/numeric/solveODE.js +2 -2
  53. package/lib/esm/function/statistics/quantileSeq.js +82 -165
  54. package/lib/esm/function/string/print.js +5 -1
  55. package/lib/esm/plain/number/arithmetic.js +4 -12
  56. package/lib/esm/type/unit/Unit.js +2 -2
  57. package/lib/esm/utils/print.js +1 -0
  58. package/lib/esm/utils/snapshot.js +2 -2
  59. package/lib/esm/version.js +1 -1
  60. package/package.json +20 -20
@@ -8,7 +8,7 @@ var _factory = require("../../utils/factory.js");
8
8
  var _quantileSeq = require("../../function/statistics/quantileSeq.js");
9
9
  var _lastDimToZeroBase = require("./utils/lastDimToZeroBase.js");
10
10
  var name = 'quantileSeq';
11
- var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
11
+ var dependencies = ['typed', 'bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
12
12
 
13
13
  /**
14
14
  * Attach a transform function to math.quantileSeq
@@ -19,25 +19,47 @@ var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'i
19
19
  */
20
20
  var createQuantileSeqTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
21
21
  var typed = _ref.typed,
22
+ bignumber = _ref.bignumber,
22
23
  add = _ref.add,
24
+ subtract = _ref.subtract,
25
+ divide = _ref.divide,
23
26
  multiply = _ref.multiply,
24
27
  partitionSelect = _ref.partitionSelect,
25
28
  compare = _ref.compare,
26
- isInteger = _ref.isInteger;
29
+ isInteger = _ref.isInteger,
30
+ smaller = _ref.smaller,
31
+ smallerEq = _ref.smallerEq,
32
+ larger = _ref.larger;
27
33
  var quantileSeq = (0, _quantileSeq.createQuantileSeq)({
28
34
  typed: typed,
35
+ bignumber: bignumber,
29
36
  add: add,
37
+ subtract: subtract,
38
+ divide: divide,
30
39
  multiply: multiply,
31
40
  partitionSelect: partitionSelect,
32
41
  compare: compare,
33
- isInteger: isInteger
42
+ isInteger: isInteger,
43
+ smaller: smaller,
44
+ smallerEq: smallerEq,
45
+ larger: larger
34
46
  });
35
47
  return typed('quantileSeq', {
36
- 'Array|Matrix, number|BigNumber|Array, number': function ArrayMatrixNumberBigNumberArrayNumber(arr, prob, dim) {
48
+ 'Array | Matrix, number | BigNumber': quantileSeq,
49
+ 'Array | Matrix, number | BigNumber, number': function ArrayMatrixNumberBigNumberNumber(arr, prob, dim) {
37
50
  return quantileSeq(arr, prob, dimToZeroBase(dim));
38
51
  },
39
- 'Array|Matrix, number|BigNumber|Array, boolean, number': function ArrayMatrixNumberBigNumberArrayBooleanNumber(arr, prob, sorted, dim) {
52
+ 'Array | Matrix, number | BigNumber, boolean': quantileSeq,
53
+ 'Array | Matrix, number | BigNumber, boolean, number': function ArrayMatrixNumberBigNumberBooleanNumber(arr, prob, sorted, dim) {
40
54
  return quantileSeq(arr, prob, sorted, dimToZeroBase(dim));
55
+ },
56
+ 'Array | Matrix, Array | Matrix': quantileSeq,
57
+ 'Array | Matrix, Array | Matrix, number': function ArrayMatrixArrayMatrixNumber(data, prob, dim) {
58
+ return quantileSeq(data, prob, dimToZeroBase(dim));
59
+ },
60
+ 'Array | Matrix, Array | Matrix, boolean': quantileSeq,
61
+ 'Array | Matrix, Array | Matrix, boolean, number': function ArrayMatrixArrayMatrixBooleanNumber(data, prob, sorted, dim) {
62
+ return quantileSeq(data, prob, sorted, dimToZeroBase(dim));
41
63
  }
42
64
  });
43
65
  function dimToZeroBase(dim) {
@@ -1467,6 +1467,12 @@ Object.defineProperty(exports, "createPrint", {
1467
1467
  return _print.createPrint;
1468
1468
  }
1469
1469
  });
1470
+ Object.defineProperty(exports, "createPrintTransform", {
1471
+ enumerable: true,
1472
+ get: function get() {
1473
+ return _printTransform.createPrintTransform;
1474
+ }
1475
+ });
1470
1476
  Object.defineProperty(exports, "createProd", {
1471
1477
  enumerable: true,
1472
1478
  get: function get() {
@@ -2420,4 +2426,5 @@ var _stdTransform = require("./expression/transform/std.transform.js");
2420
2426
  var _sumTransform = require("./expression/transform/sum.transform.js");
2421
2427
  var _quantileSeqTransform = require("./expression/transform/quantileSeq.transform.js");
2422
2428
  var _cumsumTransform = require("./expression/transform/cumsum.transform.js");
2423
- var _varianceTransform = require("./expression/transform/variance.transform.js");
2429
+ var _varianceTransform = require("./expression/transform/variance.transform.js");
2430
+ var _printTransform = require("./expression/transform/print.transform.js");
@@ -9,8 +9,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
9
9
  var _is = require("../../../utils/is.js");
10
10
  var _factory = require("../../../utils/factory.js");
11
11
  var _object = require("../../../utils/object.js");
12
- 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; }
13
- 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) { (0, _defineProperty2["default"])(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; }
12
+ 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; }
13
+ 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) { (0, _defineProperty2["default"])(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; }
14
14
  var name = 'simplifyUtil';
15
15
  var dependencies = ['FunctionNode', 'OperatorNode', 'SymbolNode'];
16
16
  var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
@@ -7,15 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.createGcd = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _number = require("../../utils/number.js");
10
11
  var _factory = require("../../utils/factory.js");
12
+ var _mod = require("./mod.js");
11
13
  var _matAlgo01xDSid = require("../../type/matrix/utils/matAlgo01xDSid.js");
12
14
  var _matAlgo04xSidSid = require("../../type/matrix/utils/matAlgo04xSidSid.js");
13
15
  var _matAlgo10xSids = require("../../type/matrix/utils/matAlgo10xSids.js");
14
16
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
15
- var _index = require("../../plain/number/index.js");
16
17
  var _ArgumentsError = require("../../error/ArgumentsError.js");
17
18
  var name = 'gcd';
18
- var dependencies = ['typed', 'matrix', 'equalScalar', 'BigNumber', 'DenseMatrix', 'concat'];
19
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix', 'concat'];
19
20
  var gcdTypes = 'number | BigNumber | Fraction | Matrix | Array';
20
21
  var gcdManyTypesSignature = "".concat(gcdTypes, ", ").concat(gcdTypes, ", ...").concat(gcdTypes);
21
22
  function is1d(array) {
@@ -27,10 +28,23 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
27
28
  var _typed;
28
29
  var typed = _ref.typed,
29
30
  matrix = _ref.matrix,
31
+ config = _ref.config,
32
+ round = _ref.round,
30
33
  equalScalar = _ref.equalScalar,
34
+ zeros = _ref.zeros,
31
35
  BigNumber = _ref.BigNumber,
32
36
  DenseMatrix = _ref.DenseMatrix,
33
37
  concat = _ref.concat;
38
+ var mod = (0, _mod.createMod)({
39
+ typed: typed,
40
+ config: config,
41
+ round: round,
42
+ matrix: matrix,
43
+ equalScalar: equalScalar,
44
+ zeros: zeros,
45
+ DenseMatrix: DenseMatrix,
46
+ concat: concat
47
+ });
34
48
  var matAlgo01xDSid = (0, _matAlgo01xDSid.createMatAlgo01xDSid)({
35
49
  typed: typed
36
50
  });
@@ -74,7 +88,7 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
74
88
  * @return {number | BigNumber | Fraction | Array | Matrix} The greatest common divisor
75
89
  */
76
90
  return typed(name, {
77
- 'number, number': _index.gcdNumber,
91
+ 'number, number': _gcdNumber,
78
92
  'BigNumber, BigNumber': _gcdBigNumber,
79
93
  'Fraction, Fraction': function FractionFraction(x, y) {
80
94
  return x.gcd(y);
@@ -107,6 +121,28 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
107
121
  };
108
122
  })), _typed));
109
123
 
124
+ /**
125
+ * Calculate gcd for numbers
126
+ * @param {number} a
127
+ * @param {number} b
128
+ * @returns {number} Returns the greatest common denominator of a and b
129
+ * @private
130
+ */
131
+ function _gcdNumber(a, b) {
132
+ if (!(0, _number.isInteger)(a) || !(0, _number.isInteger)(b)) {
133
+ throw new Error('Parameters in function gcd must be integer numbers');
134
+ }
135
+
136
+ // https://en.wikipedia.org/wiki/Euclidean_algorithm
137
+ var r;
138
+ while (b !== 0) {
139
+ r = mod(a, b);
140
+ a = b;
141
+ b = r;
142
+ }
143
+ return a < 0 ? -a : a;
144
+ }
145
+
110
146
  /**
111
147
  * Calculate gcd for BigNumbers
112
148
  * @param {BigNumber} a
@@ -122,7 +158,7 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
122
158
  // https://en.wikipedia.org/wiki/Euclidean_algorithm
123
159
  var zero = new BigNumber(0);
124
160
  while (!b.isZero()) {
125
- var r = a.mod(b);
161
+ var r = mod(a, b);
126
162
  a = b;
127
163
  b = r;
128
164
  }
@@ -5,21 +5,33 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createMod = void 0;
7
7
  var _factory = require("../../utils/factory.js");
8
+ var _floor = require("./floor.js");
8
9
  var _matAlgo02xDS = require("../../type/matrix/utils/matAlgo02xDS0.js");
9
10
  var _matAlgo03xDSf = require("../../type/matrix/utils/matAlgo03xDSf.js");
10
11
  var _matAlgo05xSfSf = require("../../type/matrix/utils/matAlgo05xSfSf.js");
11
12
  var _matAlgo11xS0s = require("../../type/matrix/utils/matAlgo11xS0s.js");
12
13
  var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
13
- var _index = require("../../plain/number/index.js");
14
14
  var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
15
15
  var name = 'mod';
16
- var dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix', 'concat'];
16
+ var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix', 'concat'];
17
17
  var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
18
18
  var typed = _ref.typed,
19
+ config = _ref.config,
20
+ round = _ref.round,
19
21
  matrix = _ref.matrix,
20
22
  equalScalar = _ref.equalScalar,
23
+ zeros = _ref.zeros,
21
24
  DenseMatrix = _ref.DenseMatrix,
22
25
  concat = _ref.concat;
26
+ var floor = (0, _floor.createFloor)({
27
+ typed: typed,
28
+ config: config,
29
+ round: round,
30
+ matrix: matrix,
31
+ equalScalar: equalScalar,
32
+ zeros: zeros,
33
+ DenseMatrix: DenseMatrix
34
+ });
23
35
  var matAlgo02xDS0 = (0, _matAlgo02xDS.createMatAlgo02xDS0)({
24
36
  typed: typed,
25
37
  equalScalar: equalScalar
@@ -81,7 +93,7 @@ var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
81
93
  * @return {number | BigNumber | Fraction | Array | Matrix} Returns the remainder of `x` divided by `y`.
82
94
  */
83
95
  return typed(name, {
84
- 'number, number': _index.modNumber,
96
+ 'number, number': _modNumber,
85
97
  'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
86
98
  if (y.isNeg()) {
87
99
  throw new Error('Cannot calculate mod for a negative divisor');
@@ -102,5 +114,22 @@ var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
102
114
  Ss: matAlgo11xS0s,
103
115
  sS: matAlgo12xSfs
104
116
  }));
117
+
118
+ /**
119
+ * Calculate the modulus of two numbers
120
+ * @param {number} x
121
+ * @param {number} y
122
+ * @returns {number} res
123
+ * @private
124
+ */
125
+ function _modNumber(x, y) {
126
+ // We don't use JavaScript's % operator here as this doesn't work
127
+ // correctly for x < 0 and x === 0
128
+ // see https://en.wikipedia.org/wiki/Modulo_operation
129
+
130
+ // We use mathjs floor to handle errors associated with
131
+ // precision float approximation
132
+ return y === 0 ? x : x - y * floor(x / y);
133
+ }
105
134
  });
106
135
  exports.createMod = createMod;
@@ -10,8 +10,8 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
11
  var _is = require("../../utils/is.js");
12
12
  var _factory = require("../../utils/factory.js");
13
- 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; }
14
- 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) { (0, _defineProperty2["default"])(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; }
13
+ 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; }
14
+ 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) { (0, _defineProperty2["default"])(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; }
15
15
  var name = 'solveODE';
16
16
  var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'max', 'map', 'abs', 'isPositive', 'isNegative', 'larger', 'smaller', 'matrix', 'bignumber', 'unaryMinus'];
17
17
  var createSolveODE = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
@@ -9,14 +9,25 @@ var _array = require("../../utils/array.js");
9
9
  var _factory = require("../../utils/factory.js");
10
10
  var _apply = require("../matrix/apply.js");
11
11
  var name = 'quantileSeq';
12
- var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
12
+ var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
13
13
  var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
14
14
  var typed = _ref.typed,
15
+ bignumber = _ref.bignumber,
15
16
  add = _ref.add,
17
+ subtract = _ref.subtract,
18
+ divide = _ref.divide,
16
19
  multiply = _ref.multiply,
17
20
  partitionSelect = _ref.partitionSelect,
18
21
  compare = _ref.compare,
19
- isInteger = _ref.isInteger;
22
+ isInteger = _ref.isInteger,
23
+ smaller = _ref.smaller,
24
+ smallerEq = _ref.smallerEq,
25
+ larger = _ref.larger;
26
+ var apply = (0, _apply.createApply)({
27
+ typed: typed,
28
+ isInteger: isInteger
29
+ });
30
+
20
31
  /**
21
32
  * Compute the prob order quantile of a matrix or a list with values.
22
33
  * The sequence is sorted and the middle value is returned.
@@ -51,130 +62,83 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
51
62
  * @param {Boolean} sorted=false is data sorted in ascending order
52
63
  * @return {Number, BigNumber, Unit, Array} Quantile(s)
53
64
  */
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
65
  return typed(name, {
71
- 'Array|Matrix, number|BigNumber|Array': function ArrayMatrixNumberBigNumberArray(data, prob) {
72
- return quantileSeq(data, prob, false);
66
+ 'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(data, p) {
67
+ return _quantileSeqProbNumber(data, p, false);
68
+ },
69
+ 'Array | Matrix, number | BigNumber, number': function ArrayMatrixNumberBigNumberNumber(data, prob, dim) {
70
+ return _quantileSeqDim(data, prob, false, dim, _quantileSeqProbNumber);
71
+ },
72
+ 'Array | Matrix, number | BigNumber, boolean': _quantileSeqProbNumber,
73
+ 'Array | Matrix, number | BigNumber, boolean, number': function ArrayMatrixNumberBigNumberBooleanNumber(data, prob, sorted, dim) {
74
+ return _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbNumber);
73
75
  },
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);
76
+ 'Array | Matrix, Array | Matrix': function ArrayMatrixArrayMatrix(data, p) {
77
+ return _quantileSeqProbCollection(data, p, false);
77
78
  },
78
- 'Array|Matrix, number|BigNumber|Array, boolean, number': function ArrayMatrixNumberBigNumberArrayBooleanNumber(data, prob, sorted, dim) {
79
- return _quantileSeqDim(data, prob, sorted, dim);
79
+ 'Array | Matrix, Array | Matrix, number': function ArrayMatrixArrayMatrixNumber(data, prob, dim) {
80
+ return _quantileSeqDim(data, prob, false, dim, _quantileSeqProbCollection);
81
+ },
82
+ 'Array | Matrix, Array | Matrix, boolean': _quantileSeqProbCollection,
83
+ 'Array | Matrix, Array | Matrix, boolean, number': function ArrayMatrixArrayMatrixBooleanNumber(data, prob, sorted, dim) {
84
+ return _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection);
80
85
  }
81
86
  });
82
- function _quantileSeqDim(data, prob, sorted, dim) {
83
- // return [1.3, 1.2]
87
+ function _quantileSeqDim(data, prob, sorted, dim, fn) {
84
88
  return apply(data, dim, function (x) {
85
- return quantileSeq(x, prob, sorted);
89
+ return fn(x, prob, sorted);
86
90
  });
87
91
  }
88
- function quantileSeq(data, probOrN, sorted) {
89
- var probArr, dataArr, one;
90
- if (arguments.length < 2 || arguments.length > 3) {
91
- throw new SyntaxError('Function quantileSeq requires two or three parameters');
92
+ function _quantileSeqProbNumber(data, probOrN, sorted) {
93
+ var probArr;
94
+ var dataArr = data.valueOf();
95
+ if (smaller(probOrN, 0)) {
96
+ throw new Error('N/prob must be non-negative');
92
97
  }
93
- if ((0, _is.isCollection)(data)) {
94
- sorted = sorted || false;
95
- if (typeof sorted === 'boolean') {
96
- dataArr = data.valueOf();
97
- if ((0, _is.isNumber)(probOrN)) {
98
- if (probOrN < 0) {
99
- throw new Error('N/prob must be non-negative');
100
- }
101
- if (probOrN <= 1) {
102
- // quantileSeq([a, b, c, d, ...], prob[,sorted])
103
- return _quantileSeq(dataArr, probOrN, sorted);
104
- }
105
- if (probOrN > 1) {
106
- // quantileSeq([a, b, c, d, ...], N[,sorted])
107
- if (!isInteger(probOrN)) {
108
- throw new Error('N must be a positive integer');
109
- }
110
- var nPlusOne = probOrN + 1;
111
- probArr = new Array(probOrN);
112
- for (var i = 0; i < probOrN;) {
113
- probArr[i] = _quantileSeq(dataArr, ++i / nPlusOne, sorted);
114
- }
115
- return probArr;
116
- }
117
- }
118
- if ((0, _is.isBigNumber)(probOrN)) {
119
- var BigNumber = probOrN.constructor;
120
- if (probOrN.isNegative()) {
121
- throw new Error('N/prob must be non-negative');
122
- }
123
- one = new BigNumber(1);
124
- if (probOrN.lte(one)) {
125
- // quantileSeq([a, b, c, d, ...], prob[,sorted])
126
- return new BigNumber(_quantileSeq(dataArr, probOrN, sorted));
127
- }
128
- if (probOrN.gt(one)) {
129
- // quantileSeq([a, b, c, d, ...], N[,sorted])
130
- if (!probOrN.isInteger()) {
131
- throw new Error('N must be a positive integer');
132
- }
133
-
134
- // largest possible Array length is 2^32-1
135
- // 2^32 < 10^15, thus safe conversion guaranteed
136
- var intN = probOrN.toNumber();
137
- if (intN > 4294967295) {
138
- throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
139
- }
140
- var _nPlusOne = new BigNumber(intN + 1);
141
- probArr = new Array(intN);
142
- for (var _i = 0; _i < intN;) {
143
- probArr[_i] = new BigNumber(_quantileSeq(dataArr, new BigNumber(++_i).div(_nPlusOne), sorted));
144
- }
145
- return probArr;
146
- }
147
- }
148
- if ((0, _is.isCollection)(probOrN)) {
149
- // quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
150
- var probOrNArr = probOrN.valueOf();
151
- probArr = new Array(probOrNArr.length);
152
- for (var _i2 = 0; _i2 < probArr.length; ++_i2) {
153
- var currProb = probOrNArr[_i2];
154
- if ((0, _is.isNumber)(currProb)) {
155
- if (currProb < 0 || currProb > 1) {
156
- throw new Error('Probability must be between 0 and 1, inclusive');
157
- }
158
- } else if ((0, _is.isBigNumber)(currProb)) {
159
- one = new currProb.constructor(1);
160
- if (currProb.isNegative() || currProb.gt(one)) {
161
- throw new Error('Probability must be between 0 and 1, inclusive');
162
- }
163
- } else {
164
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
165
- }
166
-
167
- probArr[_i2] = _quantileSeq(dataArr, currProb, sorted);
168
- }
169
- return probArr;
170
- }
171
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
98
+ if (smallerEq(probOrN, 1)) {
99
+ // quantileSeq([a, b, c, d, ...], prob[,sorted])
100
+ return (0, _is.isNumber)(probOrN) ? _quantileSeq(dataArr, probOrN, sorted) : bignumber(_quantileSeq(dataArr, probOrN, sorted));
101
+ }
102
+ if (larger(probOrN, 1)) {
103
+ // quantileSeq([a, b, c, d, ...], N[,sorted])
104
+ if (!isInteger(probOrN)) {
105
+ throw new Error('N must be a positive integer');
172
106
  }
173
107
 
174
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
108
+ // largest possible Array length is 2^32-1
109
+ // 2^32 < 10^15, thus safe conversion guaranteed
110
+ if (larger(probOrN, 4294967295)) {
111
+ throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
112
+ }
113
+ var nPlusOne = add(probOrN, 1);
114
+ probArr = [];
115
+ for (var i = 0; smaller(i, probOrN); i++) {
116
+ var prob = divide(i + 1, nPlusOne);
117
+ probArr.push(_quantileSeq(dataArr, prob, sorted));
118
+ }
119
+ return (0, _is.isNumber)(probOrN) ? probArr : bignumber(probArr);
175
120
  }
121
+ }
122
+
123
+ /**
124
+ * Calculate the prob order quantile of an n-dimensional array.
125
+ *
126
+ * @param {Array, Matrix} array
127
+ * @param {Array, Matrix} prob
128
+ * @param {Boolean} sorted
129
+ * @return {Number, BigNumber, Unit} prob order quantile
130
+ * @private
131
+ */
176
132
 
177
- throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
133
+ function _quantileSeqProbCollection(data, probOrN, sorted) {
134
+ var dataArr = data.valueOf();
135
+ // quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
136
+ var probOrNArr = probOrN.valueOf();
137
+ var probArr = [];
138
+ for (var i = 0; i < probOrNArr.length; ++i) {
139
+ probArr.push(_quantileSeq(dataArr, probOrNArr[i], sorted));
140
+ }
141
+ return probArr;
178
142
  }
179
143
 
180
144
  /**
@@ -192,71 +156,30 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
192
156
  if (len === 0) {
193
157
  throw new Error('Cannot calculate quantile of an empty sequence');
194
158
  }
195
- if ((0, _is.isNumber)(prob)) {
196
- var _index = prob * (len - 1);
197
- var _fracPart = _index % 1;
198
- if (_fracPart === 0) {
199
- var value = sorted ? flat[_index] : partitionSelect(flat, _index);
200
- validate(value);
201
- return value;
202
- }
203
- var _integerPart = Math.floor(_index);
204
- var _left;
205
- var _right;
206
- if (sorted) {
207
- _left = flat[_integerPart];
208
- _right = flat[_integerPart + 1];
209
- } else {
210
- _right = partitionSelect(flat, _integerPart + 1);
211
-
212
- // max of partition is kth largest
213
- _left = flat[_integerPart];
214
- for (var i = 0; i < _integerPart; ++i) {
215
- if (compare(flat[i], _left) > 0) {
216
- _left = flat[i];
217
- }
218
- }
219
- }
220
- validate(_left);
221
- validate(_right);
222
-
223
- // Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
224
- return add(multiply(_left, 1 - _fracPart), multiply(_right, _fracPart));
159
+ var index = (0, _is.isNumber)(prob) ? prob * (len - 1) : prob.times(len - 1);
160
+ var integerPart = (0, _is.isNumber)(prob) ? Math.floor(index) : index.floor().toNumber();
161
+ var fracPart = (0, _is.isNumber)(prob) ? index % 1 : index.minus(integerPart);
162
+ if (isInteger(index)) {
163
+ return sorted ? flat[index] : partitionSelect(flat, (0, _is.isNumber)(prob) ? index : index.valueOf());
225
164
  }
226
-
227
- // If prob is a BigNumber
228
- var index = prob.times(len - 1);
229
- if (index.isInteger()) {
230
- index = index.toNumber();
231
- var _value = sorted ? flat[index] : partitionSelect(flat, index);
232
- validate(_value);
233
- return _value;
234
- }
235
- var integerPart = index.floor();
236
- var fracPart = index.minus(integerPart);
237
- var integerPartNumber = integerPart.toNumber();
238
165
  var left;
239
166
  var right;
240
167
  if (sorted) {
241
- left = flat[integerPartNumber];
242
- right = flat[integerPartNumber + 1];
168
+ left = flat[integerPart];
169
+ right = flat[integerPart + 1];
243
170
  } else {
244
- right = partitionSelect(flat, integerPartNumber + 1);
171
+ right = partitionSelect(flat, integerPart + 1);
245
172
 
246
173
  // max of partition is kth largest
247
- left = flat[integerPartNumber];
248
- for (var _i3 = 0; _i3 < integerPartNumber; ++_i3) {
249
- if (compare(flat[_i3], left) > 0) {
250
- left = flat[_i3];
174
+ left = flat[integerPart];
175
+ for (var i = 0; i < integerPart; ++i) {
176
+ if (compare(flat[i], left) > 0) {
177
+ left = flat[i];
251
178
  }
252
179
  }
253
180
  }
254
- validate(left);
255
- validate(right);
256
-
257
181
  // Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
258
- var one = new fracPart.constructor(1);
259
- return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));
182
+ return add(multiply(left, subtract(1, fracPart)), multiply(right, fracPart));
260
183
  }
261
184
  });
262
185
  exports.createQuantileSeq = createQuantileSeq;
@@ -7,6 +7,7 @@ exports.createPrint = void 0;
7
7
  var _string = require("../../utils/string.js");
8
8
  var _is = require("../../utils/is.js");
9
9
  var _factory = require("../../utils/factory.js");
10
+ var _print2 = require("../../utils/print.js");
10
11
  var name = 'print';
11
12
  var dependencies = ['typed'];
12
13
  var createPrint = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
@@ -72,9 +73,12 @@ var createPrint = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
72
73
  */
73
74
  exports.createPrint = createPrint;
74
75
  function _print(template, values, options) {
75
- return template.replace(/\$([\w.]+)/g, function (original, key) {
76
+ return template.replace(_print2.printTemplate, function (original, key) {
76
77
  var keys = key.split('.');
77
78
  var value = values[keys.shift()];
79
+ if (value !== undefined && value.isMatrix) {
80
+ value = value.toArray();
81
+ }
78
82
  while (keys.length && value !== undefined) {
79
83
  var k = keys.shift();
80
84
  value = k ? value[k] : value + '.';
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.11.0
10
- * @date 2023-09-05
9
+ * @version 11.11.1
10
+ * @date 2023-09-20
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2023 Jos de Jong <wjosdejong@gmail.com>
@@ -177,18 +177,10 @@ log1pNumber.signature = n1;
177
177
  * @private
178
178
  */
179
179
  function modNumber(x, y) {
180
- if (y > 0) {
181
- // We don't use JavaScript's % operator here as this doesn't work
182
- // correctly for x < 0 and x === 0
183
- // see https://en.wikipedia.org/wiki/Modulo_operation
184
- return x - y * Math.floor(x / y);
185
- } else if (y === 0) {
186
- return x;
187
- } else {
188
- // y < 0
189
- // TODO: implement mod for a negative divisor
190
- throw new Error('Cannot calculate mod for a negative divisor');
191
- }
180
+ // We don't use JavaScript's % operator here as this doesn't work
181
+ // correctly for x < 0 and x === 0
182
+ // see https://en.wikipedia.org/wiki/Modulo_operation
183
+ return y === 0 ? x : x - y * Math.floor(x / y);
192
184
  }
193
185
  modNumber.signature = n2;
194
186
 
@@ -14,8 +14,8 @@ var _function = require("../../utils/function.js");
14
14
  var _string = require("../../utils/string.js");
15
15
  var _object = require("../../utils/object.js");
16
16
  var _constants = require("../../utils/bignumber/constants.js");
17
- 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; }
18
- 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) { (0, _defineProperty2["default"])(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; }
17
+ 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; }
18
+ 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) { (0, _defineProperty2["default"])(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; }
19
19
  var name = 'Unit';
20
20
  var dependencies = ['?on', 'config', 'addScalar', 'subtract', 'multiplyScalar', 'divideScalar', 'pow', 'abs', 'fix', 'round', 'equal', 'isNumeric', 'format', 'number', 'Complex', 'BigNumber', 'Fraction'];
21
21
  var createUnitClass = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {