mathjs 14.0.1 → 14.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. package/HISTORY.md +9 -0
  2. package/NOTICE +1 -1
  3. package/README.md +7 -7
  4. package/bin/cli.js +1 -1
  5. package/lib/browser/math.js +1 -1
  6. package/lib/browser/math.js.LICENSE.txt +5 -5
  7. package/lib/browser/math.js.map +1 -1
  8. package/lib/cjs/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  11. package/lib/cjs/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
  12. package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -1
  13. package/lib/cjs/entry/pureFunctionsAny.generated.js +3 -0
  14. package/lib/cjs/entry/pureFunctionsNumber.generated.js +5 -4
  15. package/lib/cjs/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
  16. package/lib/cjs/function/arithmetic/log.js +12 -5
  17. package/lib/cjs/function/arithmetic/log10.js +15 -7
  18. package/lib/cjs/function/arithmetic/log2.js +9 -4
  19. package/lib/cjs/function/probability/randomInt.js +26 -3
  20. package/lib/cjs/function/relational/larger.js +12 -4
  21. package/lib/cjs/function/relational/smaller.js +12 -4
  22. package/lib/cjs/function/statistics/max.js +1 -1
  23. package/lib/cjs/function/statistics/min.js +1 -1
  24. package/lib/cjs/function/string/print.js +2 -2
  25. package/lib/cjs/function/utils/isInteger.js +1 -1
  26. package/lib/cjs/header.js +3 -3
  27. package/lib/cjs/utils/bigint.js +33 -0
  28. package/lib/cjs/utils/number.js +7 -19
  29. package/lib/cjs/version.js +1 -1
  30. package/lib/esm/entry/dependenciesAny/dependenciesLarger.generated.js +2 -0
  31. package/lib/esm/entry/dependenciesAny/dependenciesRandomInt.generated.js +2 -0
  32. package/lib/esm/entry/dependenciesAny/dependenciesSmaller.generated.js +2 -0
  33. package/lib/esm/entry/dependenciesNumber/dependenciesRandomInt.generated.js +2 -0
  34. package/lib/esm/entry/impureFunctionsNumber.generated.js +2 -2
  35. package/lib/esm/entry/pureFunctionsAny.generated.js +3 -0
  36. package/lib/esm/entry/pureFunctionsNumber.generated.js +6 -5
  37. package/lib/esm/expression/embeddedDocs/function/arithmetic/sign.js +1 -1
  38. package/lib/esm/function/arithmetic/log.js +12 -5
  39. package/lib/esm/function/arithmetic/log10.js +16 -8
  40. package/lib/esm/function/arithmetic/log2.js +9 -4
  41. package/lib/esm/function/probability/randomInt.js +26 -3
  42. package/lib/esm/function/relational/larger.js +12 -4
  43. package/lib/esm/function/relational/smaller.js +12 -4
  44. package/lib/esm/function/statistics/max.js +1 -1
  45. package/lib/esm/function/statistics/min.js +1 -1
  46. package/lib/esm/function/string/print.js +2 -2
  47. package/lib/esm/function/utils/isInteger.js +1 -1
  48. package/lib/esm/header.js +1 -1
  49. package/lib/esm/utils/bigint.js +27 -0
  50. package/lib/esm/utils/number.js +6 -17
  51. package/lib/esm/version.js +1 -1
  52. package/package.json +13 -11
@@ -7,7 +7,7 @@ import { config } from './configReadonly.js';
7
7
  import { createChainClass, createNode, createObjectNode, createRangeNode, createRelationalNode, createReviver, createSymbolNode, createAccessorNode, createAssignmentNode, createBlockNode, createChain, createConditionalNode, createFunctionNode, createIndexNode, createOperatorNode, createConstantNode, createFunctionAssignmentNode, createParenthesisNode, createArrayNode, createSimplifyConstant, createParse, createResolve, createSimplifyCore, createCompile, createEvaluate, createHelpClass, createParserClass, createSimplify, createDerivative, createRationalize, createHelp, createParser, createCumSumTransform, createApplyTransform, createFilterTransform, createForEachTransform, createMapTransform, createMeanTransform, createSubsetTransform, createRangeTransform, createStdTransform, createSumTransform, createMaxTransform, createMinTransform, createVarianceTransform } from '../factoriesNumber.js';
8
8
  import { e, _false, index, _Infinity, LN10, LOG10E, matrix, _NaN, _null, phi, Range, replacer, ResultSet, SQRT1_2,
9
9
  // eslint-disable-line camelcase
10
- subset, tau, typed, unaryPlus, version, xor, abs, acos, acot, acsc, add, and, asec, asin, atan, atanh, bigint, bitNot, bitXor, boolean, cbrt, combinations, compare, compareText, cos, cot, csc, cube, divide, equalScalar, erf, exp, filter, forEach, format, gamma, isInteger, isNegative, isPositive, isZero, LOG2E, largerEq, leftShift, log, log1p, map, mean, mod, multiply, not, number, or, pi, pow, random, rightLogShift, SQRT2, sech, sin, size, smallerEq, square, string, subtract, tanh, typeOf, unequal, xgcd, acoth, addScalar, asech, bitAnd, combinationsWithRep, cosh, csch, divideScalar, equalText, expm1, isNumeric, LN2, lcm, log10, multiplyScalar, nthRoot, pickRandom, randomInt, rightArithShift, sec, sinh, sqrt, tan, unaryMinus, acosh, apply, asinh, bitOr, clone, coth, equal, factorial, hasNumericValue, isNaN, larger, log2, mode, norm, partitionSelect, print, round, smaller, subtractScalar, _true, variance, zeta, acsch, atan2, catalan, compareNatural, composition, cumsum, floor, hypot, lgamma, median, multinomial, permutations, quantileSeq, sign, std, stirlingS2, ceil, deepEqual, fix, isPrime, numeric, prod, bellNumbers, gcd, mad, range, sum, corr, max, min } from './pureFunctionsNumber.generated.js';
10
+ subset, tau, typed, unaryPlus, version, xor, abs, acos, acot, acsc, add, and, asec, asin, atan, atanh, bigint, bitNot, bitXor, boolean, cbrt, combinations, compare, compareText, cos, cot, csc, cube, divide, equalScalar, erf, exp, filter, forEach, format, gamma, isInteger, isNegative, isPositive, isZero, LOG2E, largerEq, leftShift, log, log1p, map, mean, mod, multiply, not, number, or, pi, pow, random, rightLogShift, SQRT2, sech, sin, size, smallerEq, square, string, subtract, tanh, typeOf, unequal, xgcd, acoth, addScalar, asech, bitAnd, combinationsWithRep, cosh, csch, divideScalar, equalText, expm1, isNumeric, LN2, lcm, log10, multiplyScalar, nthRoot, pickRandom, rightArithShift, sec, sinh, sqrt, tan, unaryMinus, acosh, apply, asinh, bitOr, clone, coth, equal, factorial, hasNumericValue, isNaN, larger, log2, mode, norm, partitionSelect, print, randomInt, round, smaller, subtractScalar, _true, variance, zeta, acsch, atan2, catalan, compareNatural, composition, cumsum, floor, hypot, lgamma, median, multinomial, permutations, quantileSeq, sign, std, stirlingS2, ceil, deepEqual, fix, isPrime, numeric, prod, bellNumbers, gcd, mad, range, sum, corr, max, min } from './pureFunctionsNumber.generated.js';
11
11
  var math = {}; // NOT pure!
12
12
  var mathWithTransform = {}; // NOT pure!
13
13
  var classes = {}; // NOT pure!
@@ -325,7 +325,6 @@ _extends(math, {
325
325
  multiplyScalar,
326
326
  nthRoot,
327
327
  pickRandom,
328
- randomInt,
329
328
  rightArithShift,
330
329
  sec,
331
330
  sinh,
@@ -348,6 +347,7 @@ _extends(math, {
348
347
  norm,
349
348
  partitionSelect,
350
349
  print,
350
+ randomInt,
351
351
  round,
352
352
  smaller,
353
353
  subtractScalar,
@@ -344,6 +344,7 @@ export var isPrime = /* #__PURE__ */createIsPrime({
344
344
  });
345
345
  export var randomInt = /* #__PURE__ */createRandomInt({
346
346
  config,
347
+ log2,
347
348
  typed
348
349
  });
349
350
  export var sech = /* #__PURE__ */createSech({
@@ -604,6 +605,7 @@ export var round = /* #__PURE__ */createRound({
604
605
  export var smaller = /* #__PURE__ */createSmaller({
605
606
  DenseMatrix,
606
607
  SparseMatrix,
608
+ bignumber,
607
609
  concat,
608
610
  config,
609
611
  matrix,
@@ -783,6 +785,7 @@ export var Index = /* #__PURE__ */createIndexClass({
783
785
  export var larger = /* #__PURE__ */createLarger({
784
786
  DenseMatrix,
785
787
  SparseMatrix,
788
+ bignumber,
786
789
  concat,
787
790
  config,
788
791
  matrix,
@@ -5,7 +5,7 @@
5
5
  import { config } from './configReadonly.js';
6
6
  import { createE, createFalse, createIndex, createInfinity, createLN10, createLOG10E, createMatrix, createNaN, createNull, createPhi, createRangeClass, createReplacer, createResultSet, createSQRT1_2,
7
7
  // eslint-disable-line camelcase
8
- createSubset, createTau, createTyped, createUnaryPlus, createVersion, createXor, createAbs, createAcos, createAcot, createAcsc, createAdd, createAnd, createAsec, createAsin, createAtan, createAtanh, createBigint, createBitNot, createBitXor, createBoolean, createCbrt, createCombinations, createCompare, createCompareText, createCos, createCot, createCsc, createCube, createDivide, createEqualScalar, createErf, createExp, createFilter, createForEach, createFormat, createGamma, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLargerEq, createLeftShift, createLog, createLog1p, createMap, createMean, createMod, createMultiply, createNot, createNumber, createOr, createPi, createPow, createRandom, createRightLogShift, createSQRT2, createSech, createSin, createSize, createSmallerEq, createSquare, createString, createSubtract, createTanh, createTypeOf, createUnequal, createXgcd, createAcoth, createAddScalar, createAsech, createBitAnd, createCombinationsWithRep, createCosh, createCsch, createDivideScalar, createEqualText, createExpm1, createIsNumeric, createLN2, createLcm, createLog10, createMultiplyScalar, createNthRoot, createPickRandom, createRandomInt, createRightArithShift, createSec, createSinh, createSqrt, createTan, createUnaryMinus, createAcosh, createApply, createAsinh, createBitOr, createClone, createCoth, createEqual, createFactorial, createHasNumericValue, createIsNaN, createLarger, createLog2, createMode, createNorm, createPartitionSelect, createPrint, createRound, createSmaller, createSubtractScalar, createTrue, createVariance, createZeta, createAcsch, createAtan2, createCatalan, createCompareNatural, createComposition, createCumSum, createFloor, createHypot, createLgamma, createMedian, createMultinomial, createPermutations, createQuantileSeq, createSign, createStd, createStirlingS2, createCeil, createDeepEqual, createFix, createIsPrime, createNumeric, createProd, createBellNumbers, createGcd, createMad, createRange, createSum, createCorr, createMax, createMin } from '../factoriesNumber.js';
8
+ createSubset, createTau, createTyped, createUnaryPlus, createVersion, createXor, createAbs, createAcos, createAcot, createAcsc, createAdd, createAnd, createAsec, createAsin, createAtan, createAtanh, createBigint, createBitNot, createBitXor, createBoolean, createCbrt, createCombinations, createCompare, createCompareText, createCos, createCot, createCsc, createCube, createDivide, createEqualScalar, createErf, createExp, createFilter, createForEach, createFormat, createGamma, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLargerEq, createLeftShift, createLog, createLog1p, createMap, createMean, createMod, createMultiply, createNot, createNumber, createOr, createPi, createPow, createRandom, createRightLogShift, createSQRT2, createSech, createSin, createSize, createSmallerEq, createSquare, createString, createSubtract, createTanh, createTypeOf, createUnequal, createXgcd, createAcoth, createAddScalar, createAsech, createBitAnd, createCombinationsWithRep, createCosh, createCsch, createDivideScalar, createEqualText, createExpm1, createIsNumeric, createLN2, createLcm, createLog10, createMultiplyScalar, createNthRoot, createPickRandom, createRightArithShift, createSec, createSinh, createSqrt, createTan, createUnaryMinus, createAcosh, createApply, createAsinh, createBitOr, createClone, createCoth, createEqual, createFactorial, createHasNumericValue, createIsNaN, createLarger, createLog2, createMode, createNorm, createPartitionSelect, createPrint, createRandomInt, createRound, createSmaller, createSubtractScalar, createTrue, createVariance, createZeta, createAcsch, createAtan2, createCatalan, createCompareNatural, createComposition, createCumSum, createFloor, createHypot, createLgamma, createMedian, createMultinomial, createPermutations, createQuantileSeq, createSign, createStd, createStirlingS2, createCeil, createDeepEqual, createFix, createIsPrime, createNumeric, createProd, createBellNumbers, createGcd, createMad, createRange, createSum, createCorr, createMax, createMin } from '../factoriesNumber.js';
9
9
  export var e = /* #__PURE__ */createE({
10
10
  config
11
11
  });
@@ -296,10 +296,6 @@ export var pickRandom = /* #__PURE__ */createPickRandom({
296
296
  config,
297
297
  typed
298
298
  });
299
- export var randomInt = /* #__PURE__ */createRandomInt({
300
- config,
301
- typed
302
- });
303
299
  export var rightArithShift = /* #__PURE__ */createRightArithShift({
304
300
  typed
305
301
  });
@@ -376,6 +372,11 @@ export var partitionSelect = /* #__PURE__ */createPartitionSelect({
376
372
  export var print = /* #__PURE__ */createPrint({
377
373
  typed
378
374
  });
375
+ export var randomInt = /* #__PURE__ */createRandomInt({
376
+ config,
377
+ log2,
378
+ typed
379
+ });
379
380
  export var round = /* #__PURE__ */createRound({
380
381
  typed
381
382
  });
@@ -2,7 +2,7 @@ export var signDocs = {
2
2
  name: 'sign',
3
3
  category: 'Arithmetic',
4
4
  syntax: ['sign(x)'],
5
- description: 'Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.',
5
+ description: 'Compute the sign of a value. The sign of a value x is 1 when x>0, -1 when x<0, and 0 when x=0.',
6
6
  examples: ['sign(3.5)', 'sign(-4.2)', 'sign(0)'],
7
7
  seealso: ['abs']
8
8
  };
@@ -1,7 +1,9 @@
1
1
  import { factory } from '../../utils/factory.js';
2
+ import { promoteLogarithm } from '../../utils/bigint.js';
2
3
  import { logNumber } from '../../plain/number/index.js';
3
4
  var name = 'log';
4
5
  var dependencies = ['config', 'typed', 'typeOf', 'divideScalar', 'Complex'];
6
+ var nlg16 = Math.log(16);
5
7
  export var createLog = /* #__PURE__ */factory(name, dependencies, _ref => {
6
8
  var {
7
9
  typed,
@@ -45,24 +47,29 @@ export var createLog = /* #__PURE__ */factory(name, dependencies, _ref => {
45
47
  * @return {number | BigNumber | Fraction | Complex}
46
48
  * Returns the logarithm of `x`
47
49
  */
50
+ function complexLog(c) {
51
+ return c.log();
52
+ }
53
+ function complexLogNumber(x) {
54
+ return complexLog(new Complex(x, 0));
55
+ }
48
56
  return typed(name, {
49
57
  number: function number(x) {
50
58
  if (x >= 0 || config.predictable) {
51
59
  return logNumber(x);
52
60
  } else {
53
61
  // negative value -> complex value computation
54
- return new Complex(x, 0).log();
62
+ return complexLogNumber(x);
55
63
  }
56
64
  },
57
- Complex: function Complex(x) {
58
- return x.log();
59
- },
65
+ bigint: promoteLogarithm(nlg16, logNumber, config, complexLogNumber),
66
+ Complex: complexLog,
60
67
  BigNumber: function BigNumber(x) {
61
68
  if (!x.isNegative() || config.predictable) {
62
69
  return x.ln();
63
70
  } else {
64
71
  // downgrade to number, return Complex valued result
65
- return new Complex(x.toNumber(), 0).log();
72
+ return complexLogNumber(x.toNumber());
66
73
  }
67
74
  },
68
75
  'any, any': typed.referToSelf(self => (x, base) => {
@@ -1,13 +1,15 @@
1
- import { factory } from '../../utils/factory.js';
2
- import { deepMap } from '../../utils/collection.js';
3
1
  import { log10Number } from '../../plain/number/index.js';
2
+ import { promoteLogarithm } from '../../utils/bigint.js';
3
+ import { deepMap } from '../../utils/collection.js';
4
+ import { factory } from '../../utils/factory.js';
4
5
  var name = 'log10';
5
6
  var dependencies = ['typed', 'config', 'Complex'];
7
+ var log16 = log10Number(16);
6
8
  export var createLog10 = /* #__PURE__ */factory(name, dependencies, _ref => {
7
9
  var {
8
10
  typed,
9
11
  config,
10
- Complex: _Complex
12
+ Complex
11
13
  } = _ref;
12
14
  /**
13
15
  * Calculate the 10-base logarithm of a value. This is the same as calculating `log(x, 10)`.
@@ -34,24 +36,30 @@ export var createLog10 = /* #__PURE__ */factory(name, dependencies, _ref => {
34
36
  * @return {number | BigNumber | Complex | Array | Matrix}
35
37
  * Returns the 10-base logarithm of `x`
36
38
  */
39
+
40
+ function complexLog(c) {
41
+ return c.log().div(Math.LN10);
42
+ }
43
+ function complexLogNumber(x) {
44
+ return complexLog(new Complex(x, 0));
45
+ }
37
46
  return typed(name, {
38
47
  number: function number(x) {
39
48
  if (x >= 0 || config.predictable) {
40
49
  return log10Number(x);
41
50
  } else {
42
51
  // negative value -> complex value computation
43
- return new _Complex(x, 0).log().div(Math.LN10);
52
+ return complexLogNumber(x);
44
53
  }
45
54
  },
46
- Complex: function Complex(x) {
47
- return new _Complex(x).log().div(Math.LN10);
48
- },
55
+ bigint: promoteLogarithm(log16, log10Number, config, complexLogNumber),
56
+ Complex: complexLog,
49
57
  BigNumber: function BigNumber(x) {
50
58
  if (!x.isNegative() || config.predictable) {
51
59
  return x.log();
52
60
  } else {
53
61
  // downgrade to number, return Complex valued result
54
- return new _Complex(x.toNumber(), 0).log().div(Math.LN10);
62
+ return complexLogNumber(x.toNumber());
55
63
  }
56
64
  },
57
65
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
@@ -1,6 +1,7 @@
1
- import { factory } from '../../utils/factory.js';
2
- import { deepMap } from '../../utils/collection.js';
3
1
  import { log2Number } from '../../plain/number/index.js';
2
+ import { promoteLogarithm } from '../../utils/bigint.js';
3
+ import { deepMap } from '../../utils/collection.js';
4
+ import { factory } from '../../utils/factory.js';
4
5
  var name = 'log2';
5
6
  var dependencies = ['typed', 'config', 'Complex'];
6
7
  export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
@@ -34,22 +35,26 @@ export var createLog2 = /* #__PURE__ */factory(name, dependencies, _ref => {
34
35
  * @return {number | BigNumber | Complex | Array | Matrix}
35
36
  * Returns the 2-base logarithm of `x`
36
37
  */
38
+ function complexLog2Number(x) {
39
+ return _log2Complex(new Complex(x, 0));
40
+ }
37
41
  return typed(name, {
38
42
  number: function number(x) {
39
43
  if (x >= 0 || config.predictable) {
40
44
  return log2Number(x);
41
45
  } else {
42
46
  // negative value -> complex value computation
43
- return _log2Complex(new Complex(x, 0));
47
+ return complexLog2Number(x);
44
48
  }
45
49
  },
50
+ bigint: promoteLogarithm(4, log2Number, config, complexLog2Number),
46
51
  Complex: _log2Complex,
47
52
  BigNumber: function BigNumber(x) {
48
53
  if (!x.isNegative() || config.predictable) {
49
54
  return x.log(2);
50
55
  } else {
51
56
  // downgrade to number, return Complex valued result
52
- return _log2Complex(new Complex(x.toNumber(), 0));
57
+ return complexLog2Number(x.toNumber());
53
58
  }
54
59
  },
55
60
  'Array | Matrix': typed.referToSelf(self => x => deepMap(x, self))
@@ -3,11 +3,13 @@ import { randomMatrix } from './util/randomMatrix.js';
3
3
  import { createRng } from './util/seededRNG.js';
4
4
  import { isMatrix } from '../../utils/is.js';
5
5
  var name = 'randomInt';
6
- var dependencies = ['typed', 'config', '?on'];
6
+ var dependencies = ['typed', 'config', 'log2', '?on'];
7
+ var simpleCutoff = 2n ** 30n;
7
8
  export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => {
8
9
  var {
9
10
  typed,
10
11
  config,
12
+ log2,
11
13
  on
12
14
  } = _ref;
13
15
  // seeded pseudo random number generator
@@ -26,7 +28,7 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
26
28
  *
27
29
  * Syntax:
28
30
  *
29
- * math.randomInt() // generate a random integer between 0 and 1
31
+ * math.randomInt() // generate either 0 or 1, randomly
30
32
  * math.randomInt(max) // generate a random integer between 0 and max
31
33
  * math.randomInt(min, max) // generate a random integer between min and max
32
34
  * math.randomInt(size) // generate a matrix with random integer between 0 and 1
@@ -50,9 +52,11 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
50
52
  * @return {number | Array | Matrix} A random integer value
51
53
  */
52
54
  return typed(name, {
53
- '': () => _randomInt(0, 1),
55
+ '': () => _randomInt(0, 2),
54
56
  number: max => _randomInt(0, max),
55
57
  'number, number': (min, max) => _randomInt(min, max),
58
+ bigint: max => _randomBigint(0n, max),
59
+ 'bigint, bigint': _randomBigint,
56
60
  'Array | Matrix': size => _randomIntMatrix(size, 0, 1),
57
61
  'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),
58
62
  'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)
@@ -64,4 +68,23 @@ export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref =>
64
68
  function _randomInt(min, max) {
65
69
  return Math.floor(min + rng() * (max - min));
66
70
  }
71
+ function _randomBigint(min, max) {
72
+ var width = max - min; // number of choices
73
+ if (width <= simpleCutoff) {
74
+ // do it with number type
75
+ return min + BigInt(_randomInt(0, Number(width)));
76
+ }
77
+ // Too big to choose accurately that way. Instead, choose the correct
78
+ // number of random bits to cover the width, and repeat until the
79
+ // resulting number falls within the width
80
+ var bits = log2(width);
81
+ var picked = width;
82
+ while (picked >= width) {
83
+ picked = 0n;
84
+ for (var i = 0; i < bits; ++i) {
85
+ picked = 2n * picked + (rng() < 0.5 ? 0n : 1n);
86
+ }
87
+ }
88
+ return min + picked;
89
+ }
67
90
  });
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'larger';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
10
+ var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
11
11
  export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
+ bignumber,
15
16
  matrix,
16
17
  DenseMatrix,
17
18
  concat,
@@ -68,16 +69,23 @@ export var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {
68
69
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
69
70
  * @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false
70
71
  */
72
+ function bignumLarger(x, y) {
73
+ return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
74
+ }
71
75
  return typed(name, createLargerNumber({
72
76
  typed,
73
77
  config
74
78
  }), {
75
79
  'boolean, boolean': (x, y) => x > y,
76
- 'BigNumber, BigNumber': function BigNumber_BigNumber(x, y) {
77
- return x.gt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
78
- },
80
+ 'BigNumber, BigNumber': bignumLarger,
79
81
  'bigint, bigint': (x, y) => x > y,
80
82
  'Fraction, Fraction': (x, y) => x.compare(y) === 1,
83
+ 'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
84
+ return bignumLarger(bignumber(x), y);
85
+ },
86
+ 'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
87
+ return bignumLarger(x, bignumber(y));
88
+ },
81
89
  'Complex, Complex': function Complex_Complex() {
82
90
  throw new TypeError('No ordering relation is defined for complex numbers');
83
91
  }
@@ -7,11 +7,12 @@ import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
7
7
  import { createMatrixAlgorithmSuite } from '../../type/matrix/utils/matrixAlgorithmSuite.js';
8
8
  import { createCompareUnits } from './compareUnits.js';
9
9
  var name = 'smaller';
10
- var dependencies = ['typed', 'config', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
10
+ var dependencies = ['typed', 'config', 'bignumber', 'matrix', 'DenseMatrix', 'concat', 'SparseMatrix'];
11
11
  export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
12
12
  var {
13
13
  typed,
14
14
  config,
15
+ bignumber,
15
16
  matrix,
16
17
  DenseMatrix,
17
18
  concat,
@@ -68,16 +69,23 @@ export var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {
68
69
  * @param {number | BigNumber | bigint | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare
69
70
  * @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false
70
71
  */
72
+ function bignumSmaller(x, y) {
73
+ return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
74
+ }
71
75
  return typed(name, createSmallerNumber({
72
76
  typed,
73
77
  config
74
78
  }), {
75
79
  'boolean, boolean': (x, y) => x < y,
76
- 'BigNumber, BigNumber': function BigNumber_BigNumber(x, y) {
77
- return x.lt(y) && !bigNearlyEqual(x, y, config.relTol, config.absTol);
78
- },
80
+ 'BigNumber, BigNumber': bignumSmaller,
79
81
  'bigint, bigint': (x, y) => x < y,
80
82
  'Fraction, Fraction': (x, y) => x.compare(y) === -1,
83
+ 'Fraction, BigNumber': function Fraction_BigNumber(x, y) {
84
+ return bignumSmaller(bignumber(x), y);
85
+ },
86
+ 'BigNumber, Fraction': function BigNumber_Fraction(x, y) {
87
+ return bignumSmaller(x, bignumber(y));
88
+ },
81
89
  'Complex, Complex': function Complex_Complex(x, y) {
82
90
  throw new TypeError('No ordering relation is defined for complex numbers');
83
91
  }
@@ -83,7 +83,7 @@ export var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {
83
83
  var res;
84
84
  deepForEach(array, function (value) {
85
85
  try {
86
- if (isNaN(value) && typeof value === 'number') {
86
+ if (typeof value === 'number' && isNaN(value)) {
87
87
  res = NaN;
88
88
  } else if (res === undefined || larger(value, res)) {
89
89
  res = value;
@@ -83,7 +83,7 @@ export var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {
83
83
  var min;
84
84
  deepForEach(array, function (value) {
85
85
  try {
86
- if (isNaN(value) && typeof value === 'number') {
86
+ if (typeof value === 'number' && isNaN(value)) {
87
87
  min = NaN;
88
88
  } else if (min === undefined || smaller(value, min)) {
89
89
  min = value;
@@ -25,12 +25,12 @@ export var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {
25
25
  * // the following outputs: 'The value of pi is 3.141592654'
26
26
  * math.print('The value of pi is $pi', {pi: math.pi}, 10)
27
27
  *
28
- * // the following outputs: 'hello Mary! The date is 2013-03-23'
28
+ * // the following outputs: 'Hello Mary! The date is 2013-03-23'
29
29
  * math.print('Hello $user.name! The date is $date', {
30
30
  * user: {
31
31
  * name: 'Mary',
32
32
  * },
33
- * date: new Date(2013, 2, 23).toISOString().substring(0, 10)
33
+ * date: '2013-03-23'
34
34
  * })
35
35
  *
36
36
  * // the following outputs: 'My favorite fruits are apples and bananas !'
@@ -26,7 +26,7 @@ export var createIsInteger = /* #__PURE__ */factory(name, dependencies, _ref =>
26
26
  * math.isInteger(math.fraction(4)) // returns true
27
27
  * math.isInteger('3') // returns true
28
28
  * math.isInteger([3, 0.5, -2]) // returns [true, false, true]
29
- * math.isInteger(math.complex('2-4i')) // throws an error
29
+ * math.isInteger(math.complex('2-4i')) // throws TypeError
30
30
  *
31
31
  * See also:
32
32
  *
package/lib/esm/header.js CHANGED
@@ -10,7 +10,7 @@
10
10
  * @date @@date
11
11
  *
12
12
  * @license
13
- * Copyright (C) 2013-2024 Jos de Jong <wjosdejong@gmail.com>
13
+ * Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
14
14
  *
15
15
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
16
16
  * use this file except in compliance with the License. You may obtain a copy
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Build a bigint logarithm function from a number logarithm,
3
+ * still returning a number. The idea is that 15 hexadecimal digits
4
+ * (60 bits) saturates the mantissa of the log, and each additional hex
5
+ * digit effectively just adds the log of 16 to the resulting value. So
6
+ * convert the most significant 15 hex digits to a number and take its
7
+ * log, and then add the log of 16 for each additional hex digit that
8
+ * was in the bigint.
9
+ * For negative numbers (complex logarithms), following the bignum
10
+ * implementation, it just downgrades to number and uses the complex result.
11
+ * @param {number} log16 the log of 16
12
+ * @param {(number) -> number} numberLog the logarithm function for numbers
13
+ * @param {ConfigurationObject} config the mathjs configuration
14
+ * @param {(number) -> Complex} cplx the associated Complex log
15
+ * @returns {(bigint) -> number} the corresponding logarithm for bigints
16
+ */
17
+ export function promoteLogarithm(log16, numberLog, config, cplx) {
18
+ return function (b) {
19
+ if (b > 0 || config.predictable) {
20
+ if (b <= 0) return NaN;
21
+ var s = b.toString(16);
22
+ var s15 = s.substring(0, 15);
23
+ return log16 * (s.length - s15.length) + numberLog(Number('0x' + s15));
24
+ }
25
+ return cplx(b.toNumber());
26
+ };
27
+ }
@@ -16,16 +16,6 @@ export function isInteger(value) {
16
16
  return isFinite(value) ? value === Math.round(value) : false;
17
17
  }
18
18
 
19
- /**
20
- * Check if a string contains an integer
21
- * @param {string} str
22
- * @return {boolean} isInteger
23
- */
24
- export function isIntegerStr(str) {
25
- // regex matching strings like "123" and "-123"
26
- return /^-?\d+$/.test(str);
27
- }
28
-
29
19
  /**
30
20
  * Ensure the number type is compatible with the provided value.
31
21
  * If not, return 'number' instead.
@@ -45,8 +35,12 @@ export function isIntegerStr(str) {
45
35
  * @returns {'number' | 'BigNumber' | 'bigint' | 'Fraction'}
46
36
  */
47
37
  export function safeNumberType(numberStr, config) {
48
- if (config.number === 'bigint' && !isIntegerStr(numberStr)) {
49
- return config.numberFallback;
38
+ if (config.number === 'bigint') {
39
+ try {
40
+ BigInt(numberStr);
41
+ } catch (_unused) {
42
+ return config.numberFallback;
43
+ }
50
44
  }
51
45
  return config.number;
52
46
  }
@@ -610,11 +604,6 @@ export function digits(value) {
610
604
  .length;
611
605
  }
612
606
 
613
- /**
614
- * Minimum number added to one that makes the result different than one
615
- */
616
- export var DBL_EPSILON = Number.EPSILON || 2.2204460492503130808472633361816E-16;
617
-
618
607
  /**
619
608
  * Compares two floating point numbers.
620
609
  * @param {number} a - First value to compare
@@ -1,3 +1,3 @@
1
- export var version = '14.0.1';
1
+ export var version = '14.1.0';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "14.0.1",
3
+ "version": "14.1.0",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
@@ -26,6 +26,7 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "@babel/runtime": "^7.25.7",
29
+ "@lambdatest/node-tunnel": "^4.0.8",
29
30
  "complex.js": "^2.2.5",
30
31
  "decimal.js": "^10.4.3",
31
32
  "escape-latex": "^1.2.0",
@@ -44,13 +45,13 @@
44
45
  "@babel/register": "7.25.9",
45
46
  "@types/assert": "1.5.11",
46
47
  "@types/mocha": "10.0.10",
47
- "@typescript-eslint/eslint-plugin": "8.18.0",
48
- "@typescript-eslint/parser": "8.18.0",
48
+ "@typescript-eslint/eslint-plugin": "8.21.0",
49
+ "@typescript-eslint/parser": "8.21.0",
49
50
  "assert": "2.1.0",
50
51
  "babel-loader": "9.2.1",
51
52
  "c8": "10.1.3",
52
53
  "codecov": "3.8.3",
53
- "core-js": "3.39.0",
54
+ "core-js": "3.40.0",
54
55
  "del": "8.0.0",
55
56
  "dtslint": "4.2.1",
56
57
  "eigen": "0.2.2",
@@ -60,24 +61,25 @@
60
61
  "eslint-plugin-import": "2.31.0",
61
62
  "eslint-plugin-mocha": "10.5.0",
62
63
  "eslint-plugin-n": "16.6.2",
63
- "eslint-plugin-prettier": "5.2.1",
64
+ "eslint-plugin-prettier": "5.2.3",
64
65
  "eslint-plugin-promise": "6.6.0",
65
66
  "expect-type": "1.1.0",
66
67
  "expr-eval": "2.0.2",
67
68
  "fancy-log": "2.0.0",
68
- "glob": "11.0.0",
69
+ "glob": "11.0.1",
69
70
  "gulp": "5.0.0",
70
71
  "gulp-babel": "8.0.0",
71
72
  "handlebars": "4.7.8",
72
73
  "jsep": "1.4.0",
73
74
  "karma": "6.4.4",
74
- "karma-browserstack-launcher": "1.6.0",
75
75
  "karma-firefox-launcher": "2.1.3",
76
76
  "karma-mocha": "2.0.1",
77
77
  "karma-mocha-reporter": "2.2.5",
78
+ "karma-spec-reporter": "0.0.36",
79
+ "karma-webdriver-launcher": "1.0.8",
78
80
  "karma-webpack": "5.0.1",
79
81
  "mkdirp": "3.0.1",
80
- "mocha": "11.0.1",
82
+ "mocha": "11.1.0",
81
83
  "mocha-junit-reporter": "2.2.1",
82
84
  "ndarray": "1.0.19",
83
85
  "ndarray-determinant": "1.0.0",
@@ -89,9 +91,9 @@
89
91
  "process": "0.11.10",
90
92
  "sinon": "19.0.2",
91
93
  "sylvester": "0.0.21",
92
- "tinybench": "3.0.7",
94
+ "tinybench": "3.1.0",
93
95
  "ts-node": "10.9.2",
94
- "typescript": "5.7.2",
96
+ "typescript": "5.7.3",
95
97
  "webpack": "5.97.1",
96
98
  "zeros": "1.0.0"
97
99
  },
@@ -151,7 +153,7 @@
151
153
  "test:node": "mocha test/node-tests/*.test.js test/node-tests/**/*.test.js",
152
154
  "test:all": "npm run test:src && npm run test:generated && npm run test:node && npm run test:types",
153
155
  "test:browser": "karma start test/browser-test-config/local-karma.js",
154
- "test:browserstack": "karma start test/browser-test-config/browserstack-karma.js",
156
+ "test:lambdatest": "karma start test/browser-test-config/lambdatest-karma.js",
155
157
  "test:types": " tsc -p ./tsconfig.json && node --loader ts-node/esm ./test/typescript-tests/testTypes.ts",
156
158
  "coverage": "c8 --reporter=lcov --reporter=text-summary mocha test/unit-tests && echo \"\nDetailed coverage report is available at ./coverage/lcov-report/index.html\"",
157
159
  "prepublishOnly": "npm run test:all && npm run lint",