mathjs 14.0.1 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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",