mathjs 11.11.0 → 11.11.1

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 (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) {