mathjs 14.1.0 → 14.2.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 (104) 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/core/function/import.js +14 -4
  6. package/lib/cjs/entry/dependenciesAny/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
  7. package/lib/cjs/entry/dependenciesAny/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
  8. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  9. package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
  10. package/lib/cjs/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
  11. package/lib/cjs/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
  12. package/lib/cjs/entry/dependenciesAny.generated.js +14 -14
  13. package/lib/cjs/entry/dependenciesNumber/{dependenciesApply.generated.js → dependenciesMapSlices.generated.js} +3 -3
  14. package/lib/cjs/entry/dependenciesNumber/{dependenciesApplyTransform.generated.js → dependenciesMapSlicesTransform.generated.js} +3 -3
  15. package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  16. package/lib/cjs/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
  17. package/lib/cjs/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
  18. package/lib/cjs/entry/dependenciesNumber.generated.js +14 -14
  19. package/lib/cjs/entry/impureFunctionsAny.generated.js +86 -85
  20. package/lib/cjs/entry/impureFunctionsNumber.generated.js +13 -13
  21. package/lib/cjs/entry/pureFunctionsAny.generated.js +328 -326
  22. package/lib/cjs/entry/pureFunctionsNumber.generated.js +13 -11
  23. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  24. package/lib/cjs/expression/embeddedDocs/function/matrix/mapSlices.js +17 -0
  25. package/lib/cjs/expression/transform/index.transform.js +2 -2
  26. package/lib/cjs/expression/transform/{apply.transform.js → mapSlices.transform.js} +11 -10
  27. package/lib/cjs/expression/transform/quantileSeq.transform.js +5 -3
  28. package/lib/cjs/expression/transform/variance.transform.js +3 -3
  29. package/lib/cjs/factoriesAny.js +14 -14
  30. package/lib/cjs/factoriesNumber.js +16 -15
  31. package/lib/cjs/function/arithmetic/ceil.js +34 -26
  32. package/lib/cjs/function/arithmetic/fix.js +3 -0
  33. package/lib/cjs/function/arithmetic/floor.js +41 -26
  34. package/lib/cjs/function/arithmetic/round.js +4 -0
  35. package/lib/cjs/function/matrix/ctranspose.js +1 -1
  36. package/lib/cjs/function/matrix/{apply.js → mapSlices.js} +19 -12
  37. package/lib/cjs/function/matrix/matrixFromFunction.js +36 -3
  38. package/lib/cjs/function/matrix/range.js +54 -5
  39. package/lib/cjs/function/statistics/quantileSeq.js +4 -9
  40. package/lib/cjs/function/statistics/variance.js +3 -3
  41. package/lib/cjs/function/string/hex.js +1 -1
  42. package/lib/cjs/function/trigonometry/acoth.js +1 -1
  43. package/lib/cjs/function/trigonometry/acsc.js +1 -1
  44. package/lib/cjs/function/trigonometry/asin.js +1 -1
  45. package/lib/cjs/function/trigonometry/atan2.js +2 -1
  46. package/lib/cjs/function/trigonometry/cos.js +1 -1
  47. package/lib/cjs/function/trigonometry/sin.js +1 -1
  48. package/lib/cjs/header.js +2 -2
  49. package/lib/cjs/type/matrix/MatrixIndex.js +6 -3
  50. package/lib/cjs/type/matrix/Range.js +15 -8
  51. package/lib/cjs/utils/factory.js +5 -2
  52. package/lib/cjs/utils/snapshot.js +8 -1
  53. package/lib/cjs/version.js +1 -1
  54. package/lib/esm/core/function/import.js +14 -4
  55. package/lib/esm/entry/{dependenciesNumber/dependenciesApply.generated.js → dependenciesAny/dependenciesMapSlices.generated.js} +3 -3
  56. package/lib/esm/entry/{dependenciesNumber/dependenciesApplyTransform.generated.js → dependenciesAny/dependenciesMapSlicesTransform.generated.js} +3 -3
  57. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +2 -0
  58. package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +2 -0
  59. package/lib/esm/entry/dependenciesAny/dependenciesVariance.generated.js +2 -2
  60. package/lib/esm/entry/dependenciesAny/dependenciesVarianceTransform.generated.js +2 -2
  61. package/lib/esm/entry/dependenciesAny.generated.js +2 -2
  62. package/lib/esm/entry/{dependenciesAny/dependenciesApply.generated.js → dependenciesNumber/dependenciesMapSlices.generated.js} +3 -3
  63. package/lib/esm/entry/{dependenciesAny/dependenciesApplyTransform.generated.js → dependenciesNumber/dependenciesMapSlicesTransform.generated.js} +3 -3
  64. package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +2 -0
  65. package/lib/esm/entry/dependenciesNumber/dependenciesVariance.generated.js +2 -2
  66. package/lib/esm/entry/dependenciesNumber/dependenciesVarianceTransform.generated.js +2 -2
  67. package/lib/esm/entry/dependenciesNumber.generated.js +2 -2
  68. package/lib/esm/entry/impureFunctionsAny.generated.js +88 -87
  69. package/lib/esm/entry/impureFunctionsNumber.generated.js +15 -15
  70. package/lib/esm/entry/pureFunctionsAny.generated.js +326 -324
  71. package/lib/esm/entry/pureFunctionsNumber.generated.js +12 -10
  72. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  73. package/lib/esm/expression/embeddedDocs/function/matrix/mapSlices.js +11 -0
  74. package/lib/esm/expression/transform/index.transform.js +3 -3
  75. package/lib/esm/expression/transform/mapSlices.transform.js +47 -0
  76. package/lib/esm/expression/transform/quantileSeq.transform.js +5 -3
  77. package/lib/esm/expression/transform/variance.transform.js +3 -3
  78. package/lib/esm/factoriesAny.js +2 -2
  79. package/lib/esm/factoriesNumber.js +2 -2
  80. package/lib/esm/function/arithmetic/ceil.js +35 -27
  81. package/lib/esm/function/arithmetic/fix.js +3 -0
  82. package/lib/esm/function/arithmetic/floor.js +42 -27
  83. package/lib/esm/function/arithmetic/round.js +4 -0
  84. package/lib/esm/function/matrix/ctranspose.js +1 -1
  85. package/lib/esm/function/matrix/{apply.js → mapSlices.js} +18 -11
  86. package/lib/esm/function/matrix/matrixFromFunction.js +36 -3
  87. package/lib/esm/function/matrix/range.js +54 -5
  88. package/lib/esm/function/statistics/quantileSeq.js +4 -9
  89. package/lib/esm/function/statistics/variance.js +3 -3
  90. package/lib/esm/function/string/hex.js +1 -1
  91. package/lib/esm/function/trigonometry/acoth.js +1 -1
  92. package/lib/esm/function/trigonometry/acsc.js +1 -1
  93. package/lib/esm/function/trigonometry/asin.js +1 -1
  94. package/lib/esm/function/trigonometry/atan2.js +2 -1
  95. package/lib/esm/function/trigonometry/cos.js +1 -1
  96. package/lib/esm/function/trigonometry/sin.js +1 -1
  97. package/lib/esm/type/matrix/MatrixIndex.js +6 -3
  98. package/lib/esm/type/matrix/Range.js +16 -9
  99. package/lib/esm/utils/factory.js +5 -2
  100. package/lib/esm/utils/snapshot.js +8 -1
  101. package/lib/esm/version.js +1 -1
  102. package/package.json +1 -1
  103. package/types/index.d.ts +75 -12
  104. package/lib/esm/expression/transform/apply.transform.js +0 -44
@@ -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, 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';
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, createMapSlices, createMultiplyScalar, createNthRoot, createPickRandom, createRightArithShift, createSec, createSinh, createSqrt, createTan, createUnaryMinus, createAcosh, createAtan2, createBitOr, createClone, createCoth, createEqual, createFactorial, createHasNumericValue, createIsNaN, createLarger, createLog2, createMode, createNorm, createPartitionSelect, createPrint, createRandomInt, createRound, createSmaller, createSubtractScalar, createTrue, createVariance, createZeta, createAcsch, createCatalan, createCompareNatural, createComposition, createCumSum, createFloor, createHypot, createLgamma, createMedian, createMultinomial, createPermutations, createQuantileSeq, createSign, createStd, createStirlingS2, createAsinh, 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
  });
@@ -286,6 +286,11 @@ export var lcm = /* #__PURE__ */createLcm({
286
286
  export var log10 = /* #__PURE__ */createLog10({
287
287
  typed
288
288
  });
289
+ export var mapSlices = /* #__PURE__ */createMapSlices({
290
+ isInteger,
291
+ typed
292
+ });
293
+ export var apply = mapSlices;
289
294
  export var multiplyScalar = /* #__PURE__ */createMultiplyScalar({
290
295
  typed
291
296
  });
@@ -317,11 +322,7 @@ export var unaryMinus = /* #__PURE__ */createUnaryMinus({
317
322
  export var acosh = /* #__PURE__ */createAcosh({
318
323
  typed
319
324
  });
320
- export var apply = /* #__PURE__ */createApply({
321
- isInteger,
322
- typed
323
- });
324
- export var asinh = /* #__PURE__ */createAsinh({
325
+ export var atan2 = /* #__PURE__ */createAtan2({
325
326
  typed
326
327
  });
327
328
  export var bitOr = /* #__PURE__ */createBitOr({
@@ -390,9 +391,9 @@ export var subtractScalar = /* #__PURE__ */createSubtractScalar({
390
391
  export var _true = /* #__PURE__ */createTrue({});
391
392
  export var variance = /* #__PURE__ */createVariance({
392
393
  add,
393
- apply,
394
394
  divide,
395
395
  isNaN,
396
+ mapSlices,
396
397
  multiply,
397
398
  subtract,
398
399
  typed
@@ -416,9 +417,6 @@ export var zeta = /* #__PURE__ */createZeta({
416
417
  export var acsch = /* #__PURE__ */createAcsch({
417
418
  typed
418
419
  });
419
- export var atan2 = /* #__PURE__ */createAtan2({
420
- typed
421
- });
422
420
  export var catalan = /* #__PURE__ */createCatalan({
423
421
  addScalar,
424
422
  combinations,
@@ -490,6 +488,7 @@ export var quantileSeq = /* #__PURE__ */createQuantileSeq({
490
488
  divide,
491
489
  isInteger,
492
490
  larger,
491
+ mapSlices,
493
492
  multiply,
494
493
  partitionSelect,
495
494
  smaller,
@@ -520,6 +519,9 @@ export var stirlingS2 = /* #__PURE__ */createStirlingS2({
520
519
  subtractScalar,
521
520
  typed
522
521
  });
522
+ export var asinh = /* #__PURE__ */createAsinh({
523
+ typed
524
+ });
523
525
  export var ceil = /* #__PURE__ */createCeil({
524
526
  config,
525
527
  round,
@@ -111,6 +111,7 @@ import { andDocs } from './function/logical/and.js';
111
111
  import { notDocs } from './function/logical/not.js';
112
112
  import { orDocs } from './function/logical/or.js';
113
113
  import { xorDocs } from './function/logical/xor.js';
114
+ import { mapSlicesDocs } from './function/matrix/mapSlices.js';
114
115
  import { columnDocs } from './function/matrix/column.js';
115
116
  import { concatDocs } from './function/matrix/concat.js';
116
117
  import { countDocs } from './function/matrix/count.js';
@@ -572,6 +573,7 @@ export var embeddedDocs = {
572
573
  or: orDocs,
573
574
  xor: xorDocs,
574
575
  // functions - matrix
576
+ mapSlices: mapSlicesDocs,
575
577
  concat: concatDocs,
576
578
  count: countDocs,
577
579
  cross: crossDocs,
@@ -0,0 +1,11 @@
1
+ export var mapSlicesDocs = {
2
+ name: 'mapSlices',
3
+ category: 'Matrix',
4
+ syntax: ['mapSlices(A, dim, callback)'],
5
+ description: 'Generate a matrix one dimension less than A by applying callback to ' + 'each slice of A along dimension dim.',
6
+ examples: ['A = [[1, 2], [3, 4]]', 'mapSlices(A, 1, sum)',
7
+ // returns [4, 6]
8
+ 'mapSlices(A, 2, product)' // returns [2, 12]
9
+ ],
10
+ seealso: ['map', 'forEach']
11
+ };
@@ -1,4 +1,4 @@
1
- import { isArray, isBigNumber, isMatrix, isNumber, isRange } from '../../utils/is.js';
1
+ import { isArray, isBigInt, isBigNumber, isMatrix, isNumber, isRange } from '../../utils/is.js';
2
2
  import { factory } from '../../utils/factory.js';
3
3
  var name = 'index';
4
4
  var dependencies = ['Index', 'getMatrixDataType'];
@@ -32,14 +32,14 @@ export var createIndexTransform = /* #__PURE__ */factory(name, dependencies, _re
32
32
  return v - 1;
33
33
  });
34
34
  }
35
- } else if (isNumber(arg)) {
35
+ } else if (isNumber(arg) || isBigInt(arg)) {
36
36
  arg--;
37
37
  } else if (isBigNumber(arg)) {
38
38
  arg = arg.toNumber() - 1;
39
39
  } else if (typeof arg === 'string') {
40
40
  // leave as is
41
41
  } else {
42
- throw new TypeError('Dimension must be an Array, Matrix, number, string, or Range');
42
+ throw new TypeError('Dimension must be an Array, Matrix, number, bigint, string, or Range');
43
43
  }
44
44
  args[i] = arg;
45
45
  }
@@ -0,0 +1,47 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ import { errorTransform } from './utils/errorTransform.js';
5
+ import { factory } from '../../utils/factory.js';
6
+ import { createMapSlices } from '../../function/matrix/mapSlices.js';
7
+ import { isBigNumber, isNumber } from '../../utils/is.js';
8
+ var name = 'mapSlices';
9
+ var dependencies = ['typed', 'isInteger'];
10
+
11
+ /**
12
+ * Attach a transform function to math.mapSlices
13
+ * Adds a property transform containing the transform function.
14
+ *
15
+ * This transform changed the last `dim` parameter of function mapSlices
16
+ * from one-based to zero based
17
+ */
18
+ export var createMapSlicesTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
19
+ var {
20
+ typed,
21
+ isInteger
22
+ } = _ref;
23
+ var mapSlices = createMapSlices({
24
+ typed,
25
+ isInteger
26
+ });
27
+
28
+ // @see: comment of concat itself
29
+ return typed('mapSlices', {
30
+ '...any': function any(args) {
31
+ // change dim from one-based to zero-based
32
+ var dim = args[1];
33
+ if (isNumber(dim)) {
34
+ args[1] = dim - 1;
35
+ } else if (isBigNumber(dim)) {
36
+ args[1] = dim.minus(1);
37
+ }
38
+ try {
39
+ return mapSlices.apply(null, args);
40
+ } catch (err) {
41
+ throw errorTransform(err);
42
+ }
43
+ }
44
+ });
45
+ }, _objectSpread({
46
+ isTransformFunction: true
47
+ }, createMapSlices.meta));
@@ -2,7 +2,7 @@ import { factory } from '../../utils/factory.js';
2
2
  import { createQuantileSeq } from '../../function/statistics/quantileSeq.js';
3
3
  import { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';
4
4
  var name = 'quantileSeq';
5
- var dependencies = ['typed', 'bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
5
+ var dependencies = ['typed', 'bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger', 'mapSlices'];
6
6
 
7
7
  /**
8
8
  * Attach a transform function to math.quantileSeq
@@ -24,7 +24,8 @@ export var createQuantileSeqTransform = /* #__PURE__ */factory(name, dependencie
24
24
  isInteger,
25
25
  smaller,
26
26
  smallerEq,
27
- larger
27
+ larger,
28
+ mapSlices
28
29
  } = _ref;
29
30
  var quantileSeq = createQuantileSeq({
30
31
  typed,
@@ -38,7 +39,8 @@ export var createQuantileSeqTransform = /* #__PURE__ */factory(name, dependencie
38
39
  isInteger,
39
40
  smaller,
40
41
  smallerEq,
41
- larger
42
+ larger,
43
+ mapSlices
42
44
  });
43
45
  return typed('quantileSeq', {
44
46
  'Array | Matrix, number | BigNumber': quantileSeq,
@@ -3,7 +3,7 @@ import { errorTransform } from './utils/errorTransform.js';
3
3
  import { createVariance } from '../../function/statistics/variance.js';
4
4
  import { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';
5
5
  var name = 'variance';
6
- var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'apply', 'isNaN'];
6
+ var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'mapSlices', 'isNaN'];
7
7
 
8
8
  /**
9
9
  * Attach a transform function to math.var
@@ -19,7 +19,7 @@ export var createVarianceTransform = /* #__PURE__ */factory(name, dependencies,
19
19
  subtract,
20
20
  multiply,
21
21
  divide,
22
- apply,
22
+ mapSlices,
23
23
  isNaN
24
24
  } = _ref;
25
25
  var variance = createVariance({
@@ -28,7 +28,7 @@ export var createVarianceTransform = /* #__PURE__ */factory(name, dependencies,
28
28
  subtract,
29
29
  multiply,
30
30
  divide,
31
- apply,
31
+ mapSlices,
32
32
  isNaN
33
33
  });
34
34
  return typed(name, {
@@ -32,7 +32,7 @@ export { createSplitUnit } from './type/unit/function/splitUnit.js';
32
32
  export { createUnaryMinus } from './function/arithmetic/unaryMinus.js';
33
33
  export { createUnaryPlus } from './function/arithmetic/unaryPlus.js';
34
34
  export { createAbs } from './function/arithmetic/abs.js';
35
- export { createApply } from './function/matrix/apply.js';
35
+ export { createMapSlices } from './function/matrix/mapSlices.js';
36
36
  export { createAddScalar } from './function/arithmetic/addScalar.js';
37
37
  export { createSubtractScalar } from './function/arithmetic/subtractScalar.js';
38
38
  export { createCbrt } from './function/arithmetic/cbrt.js';
@@ -271,7 +271,7 @@ export { createE, createUppercaseE, createFalse, createI, createInfinity, create
271
271
  // eslint-disable-line camelcase
272
272
  createSQRT2, createTau, createTrue, createVersion } from './constants.js';
273
273
  export { createAtomicMass, createAvogadro, createBohrMagneton, createBohrRadius, createBoltzmann, createClassicalElectronRadius, createConductanceQuantum, createCoulomb, createDeuteronMass, createEfimovFactor, createElectricConstant, createElectronMass, createElementaryCharge, createFaraday, createFermiCoupling, createFineStructure, createFirstRadiation, createGasConstant, createGravitationConstant, createGravity, createHartreeEnergy, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMagneticFluxQuantum, createMolarMass, createMolarMassC12, createMolarPlanckConstant, createMolarVolume, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckConstant, createPlanckLength, createPlanckMass, createPlanckTemperature, createPlanckTime, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSackurTetrode, createSecondRadiation, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createVacuumImpedance, createWeakMixingAngle, createWienDisplacement } from './type/unit/physicalConstants.js';
274
- export { createApplyTransform } from './expression/transform/apply.transform.js';
274
+ export { createMapSlicesTransform } from './expression/transform/mapSlices.transform.js';
275
275
  export { createColumnTransform } from './expression/transform/column.transform.js';
276
276
  export { createFilterTransform } from './expression/transform/filter.transform.js';
277
277
  export { createForEachTransform } from './expression/transform/forEach.transform.js';
@@ -121,7 +121,7 @@ export var createOr = /* #__PURE__ */createNumberFactory('or', orNumber);
121
121
  export var createXor = /* #__PURE__ */createNumberFactory('xor', xorNumber);
122
122
 
123
123
  // matrix
124
- export { createApply } from './function/matrix/apply.js';
124
+ export { createMapSlices } from './function/matrix/mapSlices.js';
125
125
  export { createFilter } from './function/matrix/filter.js';
126
126
  export { createForEach } from './function/matrix/forEach.js';
127
127
  export { createMap } from './function/matrix/map.js';
@@ -211,7 +211,7 @@ export var createTan = /* #__PURE__ */createNumberFactory('tan', tanNumber);
211
211
  export var createTanh = /* #__PURE__ */createNumberFactory('tanh', tanhNumber);
212
212
 
213
213
  // transforms
214
- export { createApplyTransform } from './expression/transform/apply.transform.js';
214
+ export { createMapSlicesTransform } from './expression/transform/mapSlices.transform.js';
215
215
  export { createFilterTransform } from './expression/transform/filter.transform.js';
216
216
  export { createForEachTransform } from './expression/transform/forEach.transform.js';
217
217
  export { createMapTransform } from './expression/transform/map.transform.js';
@@ -1,36 +1,41 @@
1
1
  import Decimal from 'decimal.js';
2
2
  import { factory } from '../../utils/factory.js';
3
3
  import { deepMap } from '../../utils/collection.js';
4
- import { nearlyEqual } from '../../utils/number.js';
4
+ import { isInteger, nearlyEqual } from '../../utils/number.js';
5
5
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
6
6
  import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
7
7
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
8
8
  import { createMatAlgo14xDs } from '../../type/matrix/utils/matAlgo14xDs.js';
9
9
  var name = 'ceil';
10
10
  var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];
11
+ var bigTen = new Decimal(10);
11
12
  export var createCeilNumber = /* #__PURE__ */factory(name, ['typed', 'config', 'round'], _ref => {
12
13
  var {
13
14
  typed,
14
15
  config,
15
16
  round
16
17
  } = _ref;
18
+ function _ceilNumber(x) {
19
+ // See ./floor.js _floorNumber for rationale here
20
+ var c = Math.ceil(x);
21
+ var r = round(x);
22
+ if (c === r) return c;
23
+ if (nearlyEqual(x, r, config.relTol, config.absTol) && !nearlyEqual(x, c, config.relTol, config.absTol)) {
24
+ return r;
25
+ }
26
+ return c;
27
+ }
17
28
  return typed(name, {
18
- number: function number(x) {
19
- if (nearlyEqual(x, round(x), config.relTol, config.absTol)) {
20
- return round(x);
21
- } else {
22
- return Math.ceil(x);
23
- }
24
- },
29
+ number: _ceilNumber,
25
30
  'number, number': function number_number(x, n) {
26
- if (nearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
27
- return round(x, n);
28
- } else {
29
- var [number, exponent] = "".concat(x, "e").split('e');
30
- var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
31
- [number, exponent] = "".concat(result, "e").split('e');
32
- return Number("".concat(number, "e").concat(Number(exponent) - n));
31
+ if (!isInteger(n)) {
32
+ throw new RangeError('number of decimals in function ceil must be an integer');
33
+ }
34
+ if (n < 0 || n > 15) {
35
+ throw new RangeError('number of decimals in ceil number must be in range 0-15');
33
36
  }
37
+ var shift = 10 ** n;
38
+ return _ceilNumber(x * shift) / shift;
34
39
  }
35
40
  });
36
41
  });
@@ -60,6 +65,15 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
60
65
  config,
61
66
  round
62
67
  });
68
+ function _bigCeil(x) {
69
+ // see ./floor.js _floorNumber for rationale
70
+ var bne = (a, b) => bigNearlyEqual(a, b, config.relTol, config.absTol);
71
+ var c = x.ceil();
72
+ var r = round(x);
73
+ if (c.eq(r)) return c;
74
+ if (bne(x, r) && !bne(x, c)) return r;
75
+ return c;
76
+ }
63
77
  /**
64
78
  * Round a value towards plus infinity
65
79
  * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
@@ -118,20 +132,14 @@ export var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {
118
132
  'Complex, BigNumber': function Complex_BigNumber(x, n) {
119
133
  return x.ceil(n.toNumber());
120
134
  },
121
- BigNumber: function BigNumber(x) {
122
- if (bigNearlyEqual(x, round(x), config.relTol, config.absTol)) {
123
- return round(x);
124
- } else {
125
- return x.ceil();
126
- }
127
- },
135
+ BigNumber: _bigCeil,
128
136
  'BigNumber, BigNumber': function BigNumber_BigNumber(x, n) {
129
- if (bigNearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
130
- return round(x, n);
131
- } else {
132
- return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_CEIL);
133
- }
137
+ var shift = bigTen.pow(n);
138
+ return _bigCeil(x.mul(shift)).div(shift);
134
139
  },
140
+ bigint: b => b,
141
+ 'bigint, number': (b, _dummy) => b,
142
+ 'bigint, BigNumber': (b, _dummy) => b,
135
143
  Fraction: function Fraction(x) {
136
144
  return x.ceil();
137
145
  },
@@ -106,6 +106,9 @@ export var createFix = /* #__PURE__ */factory(name, dependencies, _ref2 => {
106
106
  'BigNumber, number | BigNumber': function BigNumber_number__BigNumber(x, n) {
107
107
  return x.isNegative() ? ceil(x, n) : floor(x, n);
108
108
  },
109
+ bigint: b => b,
110
+ 'bigint, number': (b, _dummy) => b,
111
+ 'bigint, BigNumber': (b, _dummy) => b,
109
112
  Fraction: function Fraction(x) {
110
113
  return x.s < 0n ? x.ceil() : x.floor();
111
114
  },
@@ -1,36 +1,48 @@
1
1
  import Decimal from 'decimal.js';
2
2
  import { factory } from '../../utils/factory.js';
3
3
  import { deepMap } from '../../utils/collection.js';
4
- import { nearlyEqual } from '../../utils/number.js';
4
+ import { isInteger, nearlyEqual } from '../../utils/number.js';
5
5
  import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
6
6
  import { createMatAlgo11xS0s } from '../../type/matrix/utils/matAlgo11xS0s.js';
7
7
  import { createMatAlgo12xSfs } from '../../type/matrix/utils/matAlgo12xSfs.js';
8
8
  import { createMatAlgo14xDs } from '../../type/matrix/utils/matAlgo14xDs.js';
9
9
  var name = 'floor';
10
10
  var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];
11
+ var bigTen = new Decimal(10);
11
12
  export var createFloorNumber = /* #__PURE__ */factory(name, ['typed', 'config', 'round'], _ref => {
12
13
  var {
13
14
  typed,
14
15
  config,
15
16
  round
16
17
  } = _ref;
18
+ function _floorNumber(x) {
19
+ // First, if the floor and the round are identical we can be
20
+ // quite comfortable that is the best answer:
21
+ var f = Math.floor(x);
22
+ var r = round(x);
23
+ if (f === r) return f;
24
+ // OK, they are different. If x is truly distinct from f but
25
+ // appears indistinguishable from r, presume it really is just
26
+ // the integer r with rounding/computation error, and return that
27
+ if (nearlyEqual(x, r, config.relTol, config.absTol) && !nearlyEqual(x, f, config.relTol, config.absTol)) {
28
+ return r;
29
+ }
30
+ // Otherwise (x distinct from both r and f, or indistinguishable from
31
+ // both r and f) may as well just return f, as that's the best
32
+ // candidate we can discern:
33
+ return f;
34
+ }
17
35
  return typed(name, {
18
- number: function number(x) {
19
- if (nearlyEqual(x, round(x), config.relTol, config.absTol)) {
20
- return round(x);
21
- } else {
22
- return Math.floor(x);
23
- }
24
- },
36
+ number: _floorNumber,
25
37
  'number, number': function number_number(x, n) {
26
- if (nearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
27
- return round(x, n);
28
- } else {
29
- var [number, exponent] = "".concat(x, "e").split('e');
30
- var result = Math.floor(Number("".concat(number, "e").concat(Number(exponent) + n)));
31
- [number, exponent] = "".concat(result, "e").split('e');
32
- return Number("".concat(number, "e").concat(Number(exponent) - n));
38
+ if (!isInteger(n)) {
39
+ throw new RangeError('number of decimals in function floor must be an integer');
40
+ }
41
+ if (n < 0 || n > 15) {
42
+ throw new RangeError('number of decimals in floor number must be in range 0 - 15');
33
43
  }
44
+ var shift = 10 ** n;
45
+ return _floorNumber(x * shift) / shift;
34
46
  }
35
47
  });
36
48
  });
@@ -60,6 +72,15 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref2 => {
60
72
  config,
61
73
  round
62
74
  });
75
+ function _bigFloor(x) {
76
+ // see _floorNumber above for rationale
77
+ var bne = (a, b) => bigNearlyEqual(a, b, config.relTol, config.absTol);
78
+ var f = x.floor();
79
+ var r = round(x);
80
+ if (f.eq(r)) return f;
81
+ if (bne(x, r) && !bne(x, f)) return r;
82
+ return f;
83
+ }
63
84
  /**
64
85
  * Round a value towards minus infinity.
65
86
  * For matrices, the function is evaluated element wise.
@@ -121,20 +142,14 @@ export var createFloor = /* #__PURE__ */factory(name, dependencies, _ref2 => {
121
142
  'Complex, BigNumber': function Complex_BigNumber(x, n) {
122
143
  return x.floor(n.toNumber());
123
144
  },
124
- BigNumber: function BigNumber(x) {
125
- if (bigNearlyEqual(x, round(x), config.relTol, config.absTol)) {
126
- return round(x);
127
- } else {
128
- return x.floor();
129
- }
130
- },
145
+ BigNumber: _bigFloor,
131
146
  'BigNumber, BigNumber': function BigNumber_BigNumber(x, n) {
132
- if (bigNearlyEqual(x, round(x, n), config.relTol, config.absTol)) {
133
- return round(x, n);
134
- } else {
135
- return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_FLOOR);
136
- }
147
+ var shift = bigTen.pow(n);
148
+ return _bigFloor(x.mul(shift)).div(shift);
137
149
  },
150
+ bigint: b => b,
151
+ 'bigint, number': (b, _dummy) => b,
152
+ 'bigint, BigNumber': (b, _dummy) => b,
138
153
  Fraction: function Fraction(x) {
139
154
  return x.floor();
140
155
  },
@@ -137,6 +137,10 @@ export var createRound = /* #__PURE__ */factory(name, dependencies, _ref => {
137
137
  var xSelected = bigNearlyEqual(x, xEpsilon, config.relTol, config.absTol) ? xEpsilon : x;
138
138
  return xSelected.toDecimalPlaces(n.toNumber());
139
139
  },
140
+ // bigints can't be rounded
141
+ bigint: b => b,
142
+ 'bigint, number': (b, _dummy) => b,
143
+ 'bigint, BigNumber': (b, _dummy) => b,
140
144
  Fraction: function Fraction(x) {
141
145
  return x.round();
142
146
  },
@@ -20,7 +20,7 @@ export var createCtranspose = /* #__PURE__ */factory(name, dependencies, _ref =>
20
20
  * Examples:
21
21
  *
22
22
  * const A = [[1, 2, 3], [4, 5, math.complex(6,7)]]
23
- * math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:7}]]
23
+ * math.ctranspose(A) // returns [[1, 4], [2, 5], [3, {re:6,im:-7}]]
24
24
  *
25
25
  * See also:
26
26
  *
@@ -2,9 +2,9 @@ import { factory } from '../../utils/factory.js';
2
2
  import { arraySize } from '../../utils/array.js';
3
3
  import { isMatrix } from '../../utils/is.js';
4
4
  import { IndexError } from '../../error/IndexError.js';
5
- var name = 'apply';
5
+ var name = 'mapSlices';
6
6
  var dependencies = ['typed', 'isInteger'];
7
- export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
7
+ export var createMapSlices = /* #__PURE__ */factory(name, dependencies, _ref => {
8
8
  var {
9
9
  typed,
10
10
  isInteger
@@ -16,7 +16,7 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
16
16
  *
17
17
  * Syntax:
18
18
  *
19
- * math.apply(A, dim, callback)
19
+ * math.mapSlices(A, dim, callback)
20
20
  *
21
21
  * Where:
22
22
  *
@@ -27,19 +27,24 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
27
27
  * const A = [[1, 2], [3, 4]]
28
28
  * const sum = math.sum
29
29
  *
30
- * math.apply(A, 0, sum) // returns [4, 6]
31
- * math.apply(A, 1, sum) // returns [3, 7]
30
+ * math.mapSlices(A, 0, sum) // returns [4, 6]
31
+ * math.mapSlices(A, 1, sum) // returns [3, 7]
32
32
  *
33
33
  * See also:
34
34
  *
35
35
  * map, filter, forEach
36
36
  *
37
+ * Note:
38
+ *
39
+ * `mapSlices()` is also currently available via its deprecated
40
+ * synonym `apply()`.
41
+ *
37
42
  * @param {Array | Matrix} array The input Matrix
38
43
  * @param {number} dim The dimension along which the callback is applied
39
44
  * @param {Function} callback The callback function that is applied. This Function
40
45
  * should take an array or 1-d matrix as an input and
41
46
  * return a number.
42
- * @return {Array | Matrix} res The residual matrix with the function applied over some dimension.
47
+ * @return {Array | Matrix} res The residual matrix with the function mapped on the slices over some dimension.
43
48
  */
44
49
  return typed(name, {
45
50
  'Array | Matrix, number | BigNumber, function': function Array__Matrix_number__BigNumber_function(mat, dim, callback) {
@@ -51,12 +56,14 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
51
56
  throw new IndexError(dim, size.length);
52
57
  }
53
58
  if (isMatrix(mat)) {
54
- return mat.create(_apply(mat.valueOf(), dim, callback), mat.datatype());
59
+ return mat.create(_mapSlices(mat.valueOf(), dim, callback), mat.datatype());
55
60
  } else {
56
- return _apply(mat, dim, callback);
61
+ return _mapSlices(mat, dim, callback);
57
62
  }
58
63
  }
59
64
  });
65
+ }, {
66
+ formerly: 'apply'
60
67
  });
61
68
 
62
69
  /**
@@ -67,7 +74,7 @@ export var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {
67
74
  * @returns {Array} ret
68
75
  * @private
69
76
  */
70
- function _apply(mat, dim, callback) {
77
+ function _mapSlices(mat, dim, callback) {
71
78
  var i, ret, tran;
72
79
  if (dim <= 0) {
73
80
  if (!Array.isArray(mat[0])) {
@@ -76,14 +83,14 @@ function _apply(mat, dim, callback) {
76
83
  tran = _switch(mat);
77
84
  ret = [];
78
85
  for (i = 0; i < tran.length; i++) {
79
- ret[i] = _apply(tran[i], dim - 1, callback);
86
+ ret[i] = _mapSlices(tran[i], dim - 1, callback);
80
87
  }
81
88
  return ret;
82
89
  }
83
90
  } else {
84
91
  ret = [];
85
92
  for (i = 0; i < mat.length; i++) {
86
- ret[i] = _apply(mat[i], dim - 1, callback);
93
+ ret[i] = _mapSlices(mat[i], dim - 1, callback);
87
94
  }
88
95
  return ret;
89
96
  }