mathjs 14.7.0 → 14.8.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 (32) hide show
  1. package/HISTORY.md +5 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/entry/dependenciesAny/dependenciesNullish.generated.js +25 -0
  6. package/lib/cjs/entry/dependenciesAny/dependenciesNullishTransform.generated.js +25 -0
  7. package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
  8. package/lib/cjs/entry/impureFunctionsAny.generated.js +8 -0
  9. package/lib/cjs/entry/pureFunctionsAny.generated.js +10 -3
  10. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  11. package/lib/cjs/expression/embeddedDocs/function/logical/nullish.js +14 -0
  12. package/lib/cjs/expression/operators.js +7 -0
  13. package/lib/cjs/expression/parse.js +17 -1
  14. package/lib/cjs/expression/transform/nullish.transform.js +43 -0
  15. package/lib/cjs/factoriesAny.js +14 -0
  16. package/lib/cjs/function/logical/nullish.js +87 -0
  17. package/lib/cjs/header.js +2 -2
  18. package/lib/cjs/version.js +1 -1
  19. package/lib/esm/entry/dependenciesAny/dependenciesNullish.generated.js +18 -0
  20. package/lib/esm/entry/dependenciesAny/dependenciesNullishTransform.generated.js +18 -0
  21. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  22. package/lib/esm/entry/impureFunctionsAny.generated.js +10 -2
  23. package/lib/esm/entry/pureFunctionsAny.generated.js +8 -1
  24. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  25. package/lib/esm/expression/embeddedDocs/function/logical/nullish.js +8 -0
  26. package/lib/esm/expression/operators.js +7 -0
  27. package/lib/esm/expression/parse.js +17 -1
  28. package/lib/esm/expression/transform/nullish.transform.js +37 -0
  29. package/lib/esm/factoriesAny.js +2 -0
  30. package/lib/esm/function/logical/nullish.js +81 -0
  31. package/lib/esm/version.js +1 -1
  32. package/package.json +5 -5
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.nullishDependencies = void 0;
7
+ var _dependenciesDeepEqualGenerated = require("./dependenciesDeepEqual.generated.js");
8
+ var _dependenciesFlattenGenerated = require("./dependenciesFlatten.generated.js");
9
+ var _dependenciesMatrixGenerated = require("./dependenciesMatrix.generated.js");
10
+ var _dependenciesSizeGenerated = require("./dependenciesSize.generated.js");
11
+ var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
12
+ var _factoriesAny = require("../../factoriesAny.js");
13
+ /**
14
+ * THIS FILE IS AUTO-GENERATED
15
+ * DON'T MAKE CHANGES HERE
16
+ */
17
+
18
+ const nullishDependencies = exports.nullishDependencies = {
19
+ deepEqualDependencies: _dependenciesDeepEqualGenerated.deepEqualDependencies,
20
+ flattenDependencies: _dependenciesFlattenGenerated.flattenDependencies,
21
+ matrixDependencies: _dependenciesMatrixGenerated.matrixDependencies,
22
+ sizeDependencies: _dependenciesSizeGenerated.sizeDependencies,
23
+ typedDependencies: _dependenciesTypedGenerated.typedDependencies,
24
+ createNullish: _factoriesAny.createNullish
25
+ };
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.nullishTransformDependencies = void 0;
7
+ var _dependenciesDeepEqualGenerated = require("./dependenciesDeepEqual.generated.js");
8
+ var _dependenciesFlattenGenerated = require("./dependenciesFlatten.generated.js");
9
+ var _dependenciesMatrixGenerated = require("./dependenciesMatrix.generated.js");
10
+ var _dependenciesSizeGenerated = require("./dependenciesSize.generated.js");
11
+ var _dependenciesTypedGenerated = require("./dependenciesTyped.generated.js");
12
+ var _factoriesAny = require("../../factoriesAny.js");
13
+ /**
14
+ * THIS FILE IS AUTO-GENERATED
15
+ * DON'T MAKE CHANGES HERE
16
+ */
17
+
18
+ const nullishTransformDependencies = exports.nullishTransformDependencies = {
19
+ deepEqualDependencies: _dependenciesDeepEqualGenerated.deepEqualDependencies,
20
+ flattenDependencies: _dependenciesFlattenGenerated.flattenDependencies,
21
+ matrixDependencies: _dependenciesMatrixGenerated.matrixDependencies,
22
+ sizeDependencies: _dependenciesSizeGenerated.sizeDependencies,
23
+ typedDependencies: _dependenciesTypedGenerated.typedDependencies,
24
+ createNullishTransform: _factoriesAny.createNullishTransform
25
+ };
@@ -1443,6 +1443,18 @@ Object.defineProperty(exports, "nullDependencies", {
1443
1443
  return _dependenciesNullGenerated.nullDependencies;
1444
1444
  }
1445
1445
  });
1446
+ Object.defineProperty(exports, "nullishDependencies", {
1447
+ enumerable: true,
1448
+ get: function () {
1449
+ return _dependenciesNullishGenerated.nullishDependencies;
1450
+ }
1451
+ });
1452
+ Object.defineProperty(exports, "nullishTransformDependencies", {
1453
+ enumerable: true,
1454
+ get: function () {
1455
+ return _dependenciesNullishTransformGenerated.nullishTransformDependencies;
1456
+ }
1457
+ });
1446
1458
  Object.defineProperty(exports, "numberDependencies", {
1447
1459
  enumerable: true,
1448
1460
  get: function () {
@@ -2416,6 +2428,8 @@ var _dependenciesNthRootGenerated = require("./dependenciesAny/dependenciesNthRo
2416
2428
  var _dependenciesNthRootsGenerated = require("./dependenciesAny/dependenciesNthRoots.generated.js");
2417
2429
  var _dependenciesNuclearMagnetonGenerated = require("./dependenciesAny/dependenciesNuclearMagneton.generated.js");
2418
2430
  var _dependenciesNullGenerated = require("./dependenciesAny/dependenciesNull.generated.js");
2431
+ var _dependenciesNullishGenerated = require("./dependenciesAny/dependenciesNullish.generated.js");
2432
+ var _dependenciesNullishTransformGenerated = require("./dependenciesAny/dependenciesNullishTransform.generated.js");
2419
2433
  var _dependenciesNumberGenerated = require("./dependenciesAny/dependenciesNumber.generated.js");
2420
2434
  var _dependenciesNumericGenerated = require("./dependenciesAny/dependenciesNumeric.generated.js");
2421
2435
  var _dependenciesObjectNodeGenerated = require("./dependenciesAny/dependenciesObjectNode.generated.js");
@@ -416,6 +416,7 @@ const help = exports.help = (0, _factoriesAny.createHelp)({
416
416
  min: _pureFunctionsAnyGenerated.min,
417
417
  mod: _pureFunctionsAnyGenerated.mod,
418
418
  nthRoots: _pureFunctionsAnyGenerated.nthRoots,
419
+ nullish: _pureFunctionsAnyGenerated.nullish,
419
420
  or: _pureFunctionsAnyGenerated.or,
420
421
  partitionSelect: _pureFunctionsAnyGenerated.partitionSelect,
421
422
  qr: _pureFunctionsAnyGenerated.qr,
@@ -631,6 +632,13 @@ const help = exports.help = (0, _factoriesAny.createHelp)({
631
632
  smaller: _pureFunctionsAnyGenerated.smaller,
632
633
  typed: _pureFunctionsAnyGenerated.typed
633
634
  }),
635
+ nullish: (0, _factoriesAny.createNullishTransform)({
636
+ deepEqual: _pureFunctionsAnyGenerated.deepEqual,
637
+ flatten: _pureFunctionsAnyGenerated.flatten,
638
+ matrix: _pureFunctionsAnyGenerated.matrix,
639
+ size: _pureFunctionsAnyGenerated.size,
640
+ typed: _pureFunctionsAnyGenerated.typed
641
+ }),
634
642
  subset: (0, _factoriesAny.createSubsetTransform)({
635
643
  add: _pureFunctionsAnyGenerated.add,
636
644
  matrix: _pureFunctionsAnyGenerated.matrix,
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.dotPow = exports.dotMultiply = exports.dotDivide = exports.dot = exports.divideScalar = exports.divide = exports.distance = exports.diff = exports.diag = exports.deuteronMass = exports.det = exports.deepEqual = exports.cumsum = exports.cube = exports.ctranspose = exports.csch = exports.csc = exports.cross = exports.createUnit = exports.count = exports.coulombConstant = exports.coulomb = exports.coth = exports.cot = exports.cosh = exports.cos = exports.corr = exports.conj = exports.conductanceQuantum = exports.concat = exports.composition = exports.complex = exports.compareText = exports.compareNatural = exports.compare = exports.combinationsWithRep = exports.combinations = exports.column = exports.clone = exports.classicalElectronRadius = exports.ceil = exports.cbrt = exports.catalan = exports.boolean = exports.boltzmann = exports.bohrRadius = exports.bohrMagneton = exports.bitXor = exports.bitOr = exports.bitNot = exports.bitAnd = exports.bin = exports.bignumber = exports.bigint = exports.bellNumbers = exports.avogadro = exports.atomicMass = exports.atanh = exports.atan2 = exports.atan = exports.asinh = exports.asin = exports.asech = exports.asec = exports.arg = exports.apply = exports.and = exports.addScalar = exports.add = exports.acsch = exports.acsc = exports.acoth = exports.acot = exports.acosh = exports.acos = exports.abs = exports._true = exports._null = exports._false = exports._NaN = exports._Infinity = exports.Unit = exports.SparseMatrix = exports.Spa = exports.SQRT2 = exports.SQRT1_2 = exports.ResultSet = exports.Range = exports.Matrix = exports.LOG2E = exports.LOG10E = exports.LN2 = exports.LN10 = exports.Index = exports.ImmutableDenseMatrix = exports.Fraction = exports.FibonacciHeap = exports.DenseMatrix = exports.Complex = exports.BigNumber = void 0;
7
- exports.number = exports.nuclearMagneton = exports.nthRoots = exports.nthRoot = exports.not = exports.norm = exports.neutronMass = exports.multiplyScalar = exports.multiply = exports.multinomial = exports.molarVolume = exports.molarPlanckConstant = exports.molarMassC12 = exports.molarMass = exports.mode = exports.mod = exports.min = exports.median = exports.mean = exports.max = exports.matrixFromRows = exports.matrixFromFunction = exports.matrixFromColumns = exports.matrix = exports.mapSlices = exports.map = exports.magneticFluxQuantum = exports.magneticConstant = exports.mad = exports.lyap = exports.lusolve = exports.lup = exports.lsolveAll = exports.lsolve = exports.loschmidt = exports.log2 = exports.log1p = exports.log10 = exports.log = exports.lgamma = exports.leftShift = exports.lcm = exports.largerEq = exports.larger = exports.kron = exports.klitzing = exports.kldivergence = exports.isZero = exports.isPrime = exports.isPositive = exports.isNumeric = exports.isNegative = exports.isNaN = exports.isInteger = exports.invmod = exports.inverseConductanceQuantum = exports.inv = exports.intersect = exports.index = exports.im = exports.ifft = exports.identity = exports.i = exports.hypot = exports.hex = exports.hasNumericValue = exports.hartreeEnergy = exports.gravity = exports.gravitationConstant = exports.getMatrixDataType = exports.gcd = exports.gasConstant = exports.gamma = exports.freqz = exports.fraction = exports.format = exports.forEach = exports.floor = exports.flatten = exports.fix = exports.firstRadiation = exports.fineStructure = exports.filter = exports.fft = exports.fermiCoupling = exports.faraday = exports.factorial = exports.expm1 = exports.expm = exports.exp = exports.erf = exports.equalText = exports.equalScalar = exports.equal = exports.elementaryCharge = exports.electronMass = exports.electricConstant = exports.eigs = exports.efimovFactor = exports.e = void 0;
8
- exports.wienDisplacement = exports.weakMixingAngle = exports.version = exports.variance = exports.vacuumImpedance = exports.usolveAll = exports.usolve = exports.unit = exports.unequal = exports.unaryPlus = exports.unaryMinus = exports.typed = exports.typeOf = exports.transpose = exports.trace = exports.toBest = exports.to = exports.thomsonCrossSection = exports.tau = exports.tanh = exports.tan = exports.sylvester = exports.sum = exports.subtractScalar = exports.subtract = exports.subset = exports.string = exports.stirlingS2 = exports.stefanBoltzmann = exports.std = exports.squeeze = exports.square = exports.sqrtm = exports.sqrt = exports.splitUnit = exports.speedOfLight = exports.sparse = exports.sort = exports.solveODE = exports.smallerEq = exports.smaller = exports.slu = exports.size = exports.sinh = exports.sin = exports.sign = exports.setUnion = exports.setSymDifference = exports.setSize = exports.setPowerset = exports.setMultiplicity = exports.setIsSubset = exports.setIntersect = exports.setDistinct = exports.setDifference = exports.setCartesian = exports.secondRadiation = exports.sech = exports.sec = exports.schur = exports.sackurTetrode = exports.rydberg = exports.row = exports.round = exports.rotationMatrix = exports.rotate = exports.rightLogShift = exports.rightArithShift = exports.resize = exports.reshape = exports.replacer = exports.reducedPlanckConstant = exports.re = exports.range = exports.randomInt = exports.random = exports.quantumOfCirculation = exports.quantileSeq = exports.qr = exports.protonMass = exports.prod = exports.print = exports.pow = exports.polynomialRoot = exports.planckTime = exports.planckTemperature = exports.planckMass = exports.planckLength = exports.planckConstant = exports.planckCharge = exports.pinv = exports.pickRandom = exports.pi = exports.phi = exports.permutations = exports.partitionSelect = exports.or = exports.ones = exports.oct = exports.numeric = void 0;
9
- exports.zpk2tf = exports.zeta = exports.zeros = exports.xor = exports.xgcd = void 0;
7
+ exports.nullish = exports.nuclearMagneton = exports.nthRoots = exports.nthRoot = exports.not = exports.norm = exports.neutronMass = exports.multiplyScalar = exports.multiply = exports.multinomial = exports.molarVolume = exports.molarPlanckConstant = exports.molarMassC12 = exports.molarMass = exports.mode = exports.mod = exports.min = exports.median = exports.mean = exports.max = exports.matrixFromRows = exports.matrixFromFunction = exports.matrixFromColumns = exports.matrix = exports.mapSlices = exports.map = exports.magneticFluxQuantum = exports.magneticConstant = exports.mad = exports.lyap = exports.lusolve = exports.lup = exports.lsolveAll = exports.lsolve = exports.loschmidt = exports.log2 = exports.log1p = exports.log10 = exports.log = exports.lgamma = exports.leftShift = exports.lcm = exports.largerEq = exports.larger = exports.kron = exports.klitzing = exports.kldivergence = exports.isZero = exports.isPrime = exports.isPositive = exports.isNumeric = exports.isNegative = exports.isNaN = exports.isInteger = exports.invmod = exports.inverseConductanceQuantum = exports.inv = exports.intersect = exports.index = exports.im = exports.ifft = exports.identity = exports.i = exports.hypot = exports.hex = exports.hasNumericValue = exports.hartreeEnergy = exports.gravity = exports.gravitationConstant = exports.getMatrixDataType = exports.gcd = exports.gasConstant = exports.gamma = exports.freqz = exports.fraction = exports.format = exports.forEach = exports.floor = exports.flatten = exports.fix = exports.firstRadiation = exports.fineStructure = exports.filter = exports.fft = exports.fermiCoupling = exports.faraday = exports.factorial = exports.expm1 = exports.expm = exports.exp = exports.erf = exports.equalText = exports.equalScalar = exports.equal = exports.elementaryCharge = exports.electronMass = exports.electricConstant = exports.eigs = exports.efimovFactor = exports.e = void 0;
8
+ exports.weakMixingAngle = exports.version = exports.variance = exports.vacuumImpedance = exports.usolveAll = exports.usolve = exports.unit = exports.unequal = exports.unaryPlus = exports.unaryMinus = exports.typed = exports.typeOf = exports.transpose = exports.trace = exports.toBest = exports.to = exports.thomsonCrossSection = exports.tau = exports.tanh = exports.tan = exports.sylvester = exports.sum = exports.subtractScalar = exports.subtract = exports.subset = exports.string = exports.stirlingS2 = exports.stefanBoltzmann = exports.std = exports.squeeze = exports.square = exports.sqrtm = exports.sqrt = exports.splitUnit = exports.speedOfLight = exports.sparse = exports.sort = exports.solveODE = exports.smallerEq = exports.smaller = exports.slu = exports.size = exports.sinh = exports.sin = exports.sign = exports.setUnion = exports.setSymDifference = exports.setSize = exports.setPowerset = exports.setMultiplicity = exports.setIsSubset = exports.setIntersect = exports.setDistinct = exports.setDifference = exports.setCartesian = exports.secondRadiation = exports.sech = exports.sec = exports.schur = exports.sackurTetrode = exports.rydberg = exports.row = exports.round = exports.rotationMatrix = exports.rotate = exports.rightLogShift = exports.rightArithShift = exports.resize = exports.reshape = exports.replacer = exports.reducedPlanckConstant = exports.re = exports.range = exports.randomInt = exports.random = exports.quantumOfCirculation = exports.quantileSeq = exports.qr = exports.protonMass = exports.prod = exports.print = exports.pow = exports.polynomialRoot = exports.planckTime = exports.planckTemperature = exports.planckMass = exports.planckLength = exports.planckConstant = exports.planckCharge = exports.pinv = exports.pickRandom = exports.pi = exports.phi = exports.permutations = exports.partitionSelect = exports.or = exports.ones = exports.oct = exports.numeric = exports.number = void 0;
9
+ exports.zpk2tf = exports.zeta = exports.zeros = exports.xor = exports.xgcd = exports.wienDisplacement = void 0;
10
10
  var _configReadonly = require("./configReadonly.js");
11
11
  var _factoriesAny = require("../factoriesAny.js");
12
12
  /**
@@ -779,6 +779,13 @@ const nthRoots = exports.nthRoots = /* #__PURE__ */(0, _factoriesAny.createNthRo
779
779
  divideScalar,
780
780
  typed
781
781
  });
782
+ const nullish = exports.nullish = /* #__PURE__ */(0, _factoriesAny.createNullish)({
783
+ deepEqual,
784
+ flatten,
785
+ matrix,
786
+ size,
787
+ typed
788
+ });
782
789
  const or = exports.or = /* #__PURE__ */(0, _factoriesAny.createOr)({
783
790
  DenseMatrix,
784
791
  concat,
@@ -118,6 +118,7 @@ var _distance = require("./function/geometry/distance.js");
118
118
  var _intersect = require("./function/geometry/intersect.js");
119
119
  var _and = require("./function/logical/and.js");
120
120
  var _not = require("./function/logical/not.js");
121
+ var _nullish = require("./function/logical/nullish.js");
121
122
  var _or = require("./function/logical/or.js");
122
123
  var _xor = require("./function/logical/xor.js");
123
124
  var _mapSlices = require("./function/matrix/mapSlices.js");
@@ -587,6 +588,7 @@ const embeddedDocs = exports.embeddedDocs = {
587
588
  // functions - logical
588
589
  and: _and.andDocs,
589
590
  not: _not.notDocs,
591
+ nullish: _nullish.nullishDocs,
590
592
  or: _or.orDocs,
591
593
  xor: _xor.xorDocs,
592
594
  // functions - matrix
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.nullishDocs = void 0;
7
+ const nullishDocs = exports.nullishDocs = {
8
+ name: 'nullish',
9
+ category: 'Logical',
10
+ syntax: ['x ?? y', 'nullish(x, y)'],
11
+ description: 'Nullish coalescing operator. Returns the right-hand operand when the left-hand operand is null or undefined, and otherwise returns the left-hand operand.',
12
+ examples: ['null ?? 42', 'undefined ?? 42', '0 ?? 42', 'false ?? 42', 'null ?? undefined ?? 42'],
13
+ seealso: ['and', 'or', 'not']
14
+ };
@@ -232,6 +232,13 @@ const properties = exports.properties = [{
232
232
  associativity: 'right',
233
233
  associativeWith: []
234
234
  }
235
+ }, {
236
+ // nullish coalescing
237
+ 'OperatorNode:nullish': {
238
+ op: '??',
239
+ associativity: 'left',
240
+ associativeWith: []
241
+ }
235
242
  }, {
236
243
  // factorial
237
244
  'OperatorNode:factorial': {
@@ -136,6 +136,7 @@ const createParse = exports.createParse = /* #__PURE__ */(0, _factory.factory)(n
136
136
  '=': true,
137
137
  ':': true,
138
138
  '?': true,
139
+ '??': true,
139
140
  '==': true,
140
141
  '!=': true,
141
142
  '<': true,
@@ -1115,7 +1116,7 @@ const createParse = exports.createParse = /* #__PURE__ */(0, _factory.factory)(n
1115
1116
  */
1116
1117
  function parsePow(state) {
1117
1118
  let node, name, fn, params;
1118
- node = parseLeftHandOperators(state);
1119
+ node = parseNullishCoalescing(state);
1119
1120
  if (state.token === '^' || state.token === '.^') {
1120
1121
  name = state.token;
1121
1122
  fn = name === '^' ? 'pow' : 'dotPow';
@@ -1126,6 +1127,21 @@ const createParse = exports.createParse = /* #__PURE__ */(0, _factory.factory)(n
1126
1127
  return node;
1127
1128
  }
1128
1129
 
1130
+ /**
1131
+ * nullish coalescing operator
1132
+ * @return {Node} node
1133
+ * @private
1134
+ */
1135
+ function parseNullishCoalescing(state) {
1136
+ let node = parseLeftHandOperators(state);
1137
+ while (state.token === '??') {
1138
+ // eslint-disable-line no-unmodified-loop-condition
1139
+ getTokenSkipNewline(state);
1140
+ node = new OperatorNode('??', 'nullish', [node, parseLeftHandOperators(state)]);
1141
+ }
1142
+ return node;
1143
+ }
1144
+
1129
1145
  /**
1130
1146
  * Left hand operators: factorial x!, ctranspose x'
1131
1147
  * @return {Node} node
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createNullishTransform = void 0;
7
+ var _nullish = require("../../function/logical/nullish.js");
8
+ var _factory = require("../../utils/factory.js");
9
+ var _is = require("../../utils/is.js");
10
+ const name = 'nullish';
11
+ const dependencies = ['typed', 'matrix', 'size', 'flatten', 'deepEqual'];
12
+ const createNullishTransform = exports.createNullishTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
13
+ let {
14
+ typed,
15
+ matrix,
16
+ size,
17
+ flatten,
18
+ deepEqual
19
+ } = _ref;
20
+ const nullish = (0, _nullish.createNullish)({
21
+ typed,
22
+ matrix,
23
+ size,
24
+ flatten,
25
+ deepEqual
26
+ });
27
+ function nullishTransform(args, math, scope) {
28
+ const left = args[0].compile().evaluate(scope);
29
+
30
+ // If left is not a collection and not nullish, short-circuit and return it
31
+ if (!(0, _is.isCollection)(left) && left != null && left !== undefined) {
32
+ return left;
33
+ }
34
+
35
+ // Otherwise evaluate right and apply full nullish semantics (incl. element-wise)
36
+ const right = args[1].compile().evaluate(scope);
37
+ return nullish(left, right);
38
+ }
39
+ nullishTransform.rawArgs = true;
40
+ return nullishTransform;
41
+ }, {
42
+ isTransformFunction: true
43
+ });
@@ -1341,6 +1341,18 @@ Object.defineProperty(exports, "createNull", {
1341
1341
  return _constants.createNull;
1342
1342
  }
1343
1343
  });
1344
+ Object.defineProperty(exports, "createNullish", {
1345
+ enumerable: true,
1346
+ get: function () {
1347
+ return _nullish.createNullish;
1348
+ }
1349
+ });
1350
+ Object.defineProperty(exports, "createNullishTransform", {
1351
+ enumerable: true,
1352
+ get: function () {
1353
+ return _nullishTransform.createNullishTransform;
1354
+ }
1355
+ });
1344
1356
  Object.defineProperty(exports, "createNumber", {
1345
1357
  enumerable: true,
1346
1358
  get: function () {
@@ -2255,6 +2267,7 @@ var _conj = require("./function/complex/conj.js");
2255
2267
  var _im = require("./function/complex/im.js");
2256
2268
  var _re = require("./function/complex/re.js");
2257
2269
  var _not = require("./function/logical/not.js");
2270
+ var _nullish = require("./function/logical/nullish.js");
2258
2271
  var _or = require("./function/logical/or.js");
2259
2272
  var _xor = require("./function/logical/xor.js");
2260
2273
  var _concat = require("./function/matrix/concat.js");
@@ -2481,5 +2494,6 @@ var _varianceTransform = require("./expression/transform/variance.transform.js")
2481
2494
  var _printTransform = require("./expression/transform/print.transform.js");
2482
2495
  var _andTransform = require("./expression/transform/and.transform.js");
2483
2496
  var _orTransform = require("./expression/transform/or.transform.js");
2497
+ var _nullishTransform = require("./expression/transform/nullish.transform.js");
2484
2498
  var _bitAndTransform = require("./expression/transform/bitAnd.transform.js");
2485
2499
  var _bitOrTransform = require("./expression/transform/bitOr.transform.js");
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createNullish = void 0;
7
+ var _factory = require("../../utils/factory.js");
8
+ var _matAlgo03xDSf = require("../../type/matrix/utils/matAlgo03xDSf.js");
9
+ var _matAlgo14xDs = require("../../type/matrix/utils/matAlgo14xDs.js");
10
+ var _matAlgo13xDD = require("../../type/matrix/utils/matAlgo13xDD.js");
11
+ var _DimensionError = require("../../error/DimensionError.js");
12
+ const name = 'nullish';
13
+ const dependencies = ['typed', 'matrix', 'size', 'flatten', 'deepEqual'];
14
+ const createNullish = exports.createNullish = /* #__PURE__ */(0, _factory.factory)(name, dependencies, _ref => {
15
+ let {
16
+ typed,
17
+ matrix,
18
+ size,
19
+ flatten,
20
+ deepEqual
21
+ } = _ref;
22
+ const matAlgo03xDSf = (0, _matAlgo03xDSf.createMatAlgo03xDSf)({
23
+ typed
24
+ });
25
+ const matAlgo14xDs = (0, _matAlgo14xDs.createMatAlgo14xDs)({
26
+ typed
27
+ });
28
+ const matAlgo13xDD = (0, _matAlgo13xDD.createMatAlgo13xDD)({
29
+ typed
30
+ });
31
+
32
+ /**
33
+ * Nullish coalescing operator (??). Returns the right-hand side operand
34
+ * when the left-hand side operand is null or undefined, and otherwise
35
+ * returns the left-hand side operand.
36
+ *
37
+ * For matrices, the function is evaluated element wise.
38
+ *
39
+ * Syntax:
40
+ *
41
+ * math.nullish(x, y)
42
+ *
43
+ * Examples:
44
+ *
45
+ * math.nullish(null, 42) // returns 42
46
+ * math.nullish(undefined, 42) // returns 42
47
+ * math.nullish(0, 42) // returns 0
48
+ * math.nullish(false, 42) // returns false
49
+ * math.nullish('', 42) // returns ''
50
+ *
51
+ * // Object property access with fallback
52
+ * const obj = {foo: 7, bar: 3}
53
+ * math.nullish(obj.baz, 0) // returns 0
54
+ *
55
+ * See also:
56
+ *
57
+ * and, or, not
58
+ *
59
+ * @param {*} x First value to check
60
+ * @param {*} y Fallback value
61
+ * @return {*} Returns y when x is null or undefined, otherwise returns x
62
+ */
63
+
64
+ return typed(name, {
65
+ // Scalar and SparseMatrix-first short-circuit handlers
66
+ 'number|bigint|Complex|BigNumber|Fraction|Unit|string|boolean|SparseMatrix, any': (x, _y) => x,
67
+ 'null, any': (_x, y) => y,
68
+ 'undefined, any': (_x, y) => y,
69
+ // SparseMatrix-first with collection RHS: enforce exact shape match
70
+ 'SparseMatrix, Array | Matrix': (x, y) => {
71
+ const sx = flatten(size(x).valueOf()); // work around #3529/#3530
72
+ const sy = flatten(size(y).valueOf());
73
+ if (deepEqual(sx, sy)) return x;
74
+ throw new _DimensionError.DimensionError(sx, sy);
75
+ },
76
+ // DenseMatrix-first handlers (no broadcasting between collections)
77
+ 'DenseMatrix, DenseMatrix': typed.referToSelf(self => (x, y) => matAlgo13xDD(x, y, self)),
78
+ 'DenseMatrix, SparseMatrix': typed.referToSelf(self => (x, y) => matAlgo03xDSf(x, y, self, false)),
79
+ 'DenseMatrix, Array': typed.referToSelf(self => (x, y) => matAlgo13xDD(x, matrix(y), self)),
80
+ 'DenseMatrix, any': typed.referToSelf(self => (x, y) => matAlgo14xDs(x, y, self, false)),
81
+ // Array-first handlers (bridge via matrix() where needed)
82
+ 'Array, Array': typed.referToSelf(self => (x, y) => matAlgo13xDD(matrix(x), matrix(y), self).valueOf()),
83
+ 'Array, DenseMatrix': typed.referToSelf(self => (x, y) => matAlgo13xDD(matrix(x), y, self)),
84
+ 'Array, SparseMatrix': typed.referToSelf(self => (x, y) => matAlgo03xDSf(matrix(x), y, self, false)),
85
+ 'Array, any': typed.referToSelf(self => (x, y) => matAlgo14xDs(matrix(x), y, self, false).valueOf())
86
+ });
87
+ });
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 14.7.0
10
- * @date 2025-09-05
9
+ * @version 14.8.0
10
+ * @date 2025-09-24
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2025 Jos de Jong <wjosdejong@gmail.com>
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '14.7.0';
7
+ const version = exports.version = '14.8.0';
8
8
  // Note: This file is automatically generated when building math.js.
9
9
  // Changes made in this file will be overwritten.
@@ -0,0 +1,18 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { deepEqualDependencies } from './dependenciesDeepEqual.generated.js';
6
+ import { flattenDependencies } from './dependenciesFlatten.generated.js';
7
+ import { matrixDependencies } from './dependenciesMatrix.generated.js';
8
+ import { sizeDependencies } from './dependenciesSize.generated.js';
9
+ import { typedDependencies } from './dependenciesTyped.generated.js';
10
+ import { createNullish } from '../../factoriesAny.js';
11
+ export var nullishDependencies = {
12
+ deepEqualDependencies,
13
+ flattenDependencies,
14
+ matrixDependencies,
15
+ sizeDependencies,
16
+ typedDependencies,
17
+ createNullish
18
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * THIS FILE IS AUTO-GENERATED
3
+ * DON'T MAKE CHANGES HERE
4
+ */
5
+ import { deepEqualDependencies } from './dependenciesDeepEqual.generated.js';
6
+ import { flattenDependencies } from './dependenciesFlatten.generated.js';
7
+ import { matrixDependencies } from './dependenciesMatrix.generated.js';
8
+ import { sizeDependencies } from './dependenciesSize.generated.js';
9
+ import { typedDependencies } from './dependenciesTyped.generated.js';
10
+ import { createNullishTransform } from '../../factoriesAny.js';
11
+ export var nullishTransformDependencies = {
12
+ deepEqualDependencies,
13
+ flattenDependencies,
14
+ matrixDependencies,
15
+ sizeDependencies,
16
+ typedDependencies,
17
+ createNullishTransform
18
+ };
@@ -225,6 +225,8 @@ export { nthRootDependencies } from './dependenciesAny/dependenciesNthRoot.gener
225
225
  export { nthRootsDependencies } from './dependenciesAny/dependenciesNthRoots.generated.js';
226
226
  export { nuclearMagnetonDependencies } from './dependenciesAny/dependenciesNuclearMagneton.generated.js';
227
227
  export { nullDependencies } from './dependenciesAny/dependenciesNull.generated.js';
228
+ export { nullishDependencies } from './dependenciesAny/dependenciesNullish.generated.js';
229
+ export { nullishTransformDependencies } from './dependenciesAny/dependenciesNullishTransform.generated.js';
228
230
  export { numberDependencies } from './dependenciesAny/dependenciesNumber.generated.js';
229
231
  export { numericDependencies } from './dependenciesAny/dependenciesNumeric.generated.js';
230
232
  export { ObjectNodeDependencies } from './dependenciesAny/dependenciesObjectNode.generated.js';
@@ -4,10 +4,10 @@ import _extends from "@babel/runtime/helpers/extends";
4
4
  * DON'T MAKE CHANGES HERE
5
5
  */
6
6
  import { config } from './configReadonly.js';
7
- import { createNode, createObjectNode, createOperatorNode, createParenthesisNode, createRelationalNode, createArrayNode, createBlockNode, createConditionalNode, createConstantNode, createRangeNode, createReviver, createChainClass, createFunctionAssignmentNode, createChain, createAccessorNode, createAssignmentNode, createIndexNode, createSymbolNode, createFunctionNode, createParse, createResolve, createSimplifyConstant, createCompile, createSimplifyCore, createEvaluate, createHelpClass, createParserClass, createSimplify, createSymbolicEqual, createLeafCount, createParser, createRationalize, createDerivative, createHelp, createMapSlicesTransform, createFilterTransform, createForEachTransform, createMapTransform, createOrTransform, createAndTransform, createConcatTransform, createIndexTransform, createPrintTransform, createSumTransform, createBitAndTransform, createMinTransform, createSubsetTransform, createBitOrTransform, createCumSumTransform, createDiffTransform, createMaxTransform, createRangeTransform, createRowTransform, createColumnTransform, createMeanTransform, createQuantileSeqTransform, createVarianceTransform, createStdTransform } from '../factoriesAny.js';
7
+ import { createNode, createObjectNode, createOperatorNode, createParenthesisNode, createRelationalNode, createArrayNode, createBlockNode, createConditionalNode, createConstantNode, createRangeNode, createReviver, createChainClass, createFunctionAssignmentNode, createChain, createAccessorNode, createAssignmentNode, createIndexNode, createSymbolNode, createFunctionNode, createParse, createResolve, createSimplifyConstant, createCompile, createSimplifyCore, createEvaluate, createHelpClass, createParserClass, createSimplify, createSymbolicEqual, createLeafCount, createParser, createRationalize, createDerivative, createHelp, createMapSlicesTransform, createFilterTransform, createForEachTransform, createMapTransform, createOrTransform, createAndTransform, createConcatTransform, createIndexTransform, createPrintTransform, createSumTransform, createBitAndTransform, createMinTransform, createNullishTransform, createSubsetTransform, createBitOrTransform, createCumSumTransform, createDiffTransform, createMaxTransform, createRangeTransform, createRowTransform, createColumnTransform, createMeanTransform, createQuantileSeqTransform, createVarianceTransform, createStdTransform } from '../factoriesAny.js';
8
8
  import { BigNumber, Complex, e, _false, fineStructure, Fraction, i, _Infinity, LN10, LOG10E, Matrix, _NaN, _null, phi, Range, ResultSet, SQRT1_2,
9
9
  // eslint-disable-line camelcase
10
- sackurTetrode, tau, _true, version, DenseMatrix, efimovFactor, LN2, pi, replacer, SQRT2, typed, weakMixingAngle, abs, acos, acot, acsc, addScalar, arg, asech, asinh, atan, atanh, bigint, bitNot, boolean, clone, combinations, complex, conj, cos, cot, csc, cube, equalScalar, erf, exp, expm1, filter, flatten, forEach, format, getMatrixDataType, hex, im, isInteger, isNegative, isPositive, isZero, LOG2E, lgamma, log10, log2, map, multiplyScalar, not, number, oct, pickRandom, print, random, re, sec, sign, sin, SparseMatrix, splitUnit, square, string, subtractScalar, tan, toBest, typeOf, acosh, acsch, asec, bignumber, combinationsWithRep, cosh, csch, isNaN, isPrime, mapSlices, matrix, matrixFromFunction, ones, randomInt, reshape, sech, sinh, sparse, sqrt, squeeze, tanh, transpose, xgcd, zeros, acoth, asin, bin, concat, coth, ctranspose, diag, dotMultiply, equal, fraction, identity, isNumeric, kron, largerEq, leftShift, mode, nthRoot, numeric, prod, resize, rightArithShift, round, size, smaller, to, unaryMinus, unequal, xor, add, atan2, bitAnd, bitOr, bitXor, cbrt, compare, compareText, count, deepEqual, divideScalar, dotDivide, equalText, floor, gcd, hasNumericValue, hypot, ImmutableDenseMatrix, Index, larger, log, lsolve, matrixFromColumns, max, min, mod, nthRoots, or, partitionSelect, qr, rightLogShift, smallerEq, subset, subtract, trace, usolve, catalan, compareNatural, composition, diff, distance, dot, FibonacciHeap, index, invmod, lcm, log1p, lsolveAll, matrixFromRows, multiply, range, row, setCartesian, setDistinct, setIsSubset, setPowerset, slu, sort, unaryPlus, usolveAll, zpk2tf, and, ceil, column, cross, det, fix, inv, pinv, pow, setDifference, setMultiplicity, setSymDifference, Spa, sqrtm, sum, Unit, vacuumImpedance, wienDisplacement, atomicMass, bohrMagneton, boltzmann, conductanceQuantum, coulomb, createUnit, deuteronMass, dotPow, electricConstant, elementaryCharge, expm, faraday, fft, gamma, gravitationConstant, hartreeEnergy, ifft, inverseConductanceQuantum, klitzing, loschmidt, magneticConstant, molarMass, molarPlanckConstant, neutronMass, nuclearMagneton, planckCharge, planckLength, planckTemperature, protonMass, quantumOfCirculation, reducedPlanckConstant, rydberg, secondRadiation, setSize, speedOfLight, stefanBoltzmann, thomsonCrossSection, avogadro, bohrRadius, coulombConstant, divide, electronMass, factorial, firstRadiation, gravity, intersect, lup, magneticFluxQuantum, molarMassC12, multinomial, permutations, planckMass, polynomialRoot, setIntersect, solveODE, stirlingS2, unit, bellNumbers, cumsum, eigs, fermiCoupling, gasConstant, kldivergence, lusolve, mean, molarVolume, planckConstant, quantileSeq, setUnion, variance, classicalElectronRadius, median, corr, freqz, mad, std, zeta, norm, rotationMatrix, planckTime, schur, rotate, sylvester, lyap } from './pureFunctionsAny.generated.js';
10
+ sackurTetrode, tau, _true, version, DenseMatrix, efimovFactor, LN2, pi, replacer, SQRT2, typed, weakMixingAngle, abs, acos, acot, acsc, addScalar, arg, asech, asinh, atan, atanh, bigint, bitNot, boolean, clone, combinations, complex, conj, cos, cot, csc, cube, equalScalar, erf, exp, expm1, filter, flatten, forEach, format, getMatrixDataType, hex, im, isInteger, isNegative, isPositive, isZero, LOG2E, lgamma, log10, log2, map, multiplyScalar, not, number, oct, pickRandom, print, random, re, sec, sign, sin, SparseMatrix, splitUnit, square, string, subtractScalar, tan, toBest, typeOf, acosh, acsch, asec, bignumber, combinationsWithRep, cosh, csch, isNaN, isPrime, mapSlices, matrix, matrixFromFunction, ones, randomInt, reshape, sech, sinh, sparse, sqrt, squeeze, tanh, transpose, xgcd, zeros, acoth, asin, bin, concat, coth, ctranspose, diag, dotMultiply, equal, fraction, identity, isNumeric, kron, largerEq, leftShift, mode, nthRoot, numeric, prod, resize, rightArithShift, round, size, smaller, to, unaryMinus, unequal, xor, add, atan2, bitAnd, bitOr, bitXor, cbrt, compare, compareText, count, deepEqual, divideScalar, dotDivide, equalText, floor, gcd, hasNumericValue, hypot, ImmutableDenseMatrix, Index, larger, log, lsolve, matrixFromColumns, max, min, mod, nthRoots, nullish, or, partitionSelect, qr, rightLogShift, smallerEq, subset, subtract, trace, usolve, catalan, compareNatural, composition, diff, distance, dot, FibonacciHeap, index, invmod, lcm, log1p, lsolveAll, matrixFromRows, multiply, range, row, setCartesian, setDistinct, setIsSubset, setPowerset, slu, sort, unaryPlus, usolveAll, zpk2tf, and, ceil, column, cross, det, fix, inv, pinv, pow, setDifference, setMultiplicity, setSymDifference, Spa, sqrtm, sum, Unit, vacuumImpedance, wienDisplacement, atomicMass, bohrMagneton, boltzmann, conductanceQuantum, coulomb, createUnit, deuteronMass, dotPow, electricConstant, elementaryCharge, expm, faraday, fft, gamma, gravitationConstant, hartreeEnergy, ifft, inverseConductanceQuantum, klitzing, loschmidt, magneticConstant, molarMass, molarPlanckConstant, neutronMass, nuclearMagneton, planckCharge, planckLength, planckTemperature, protonMass, quantumOfCirculation, reducedPlanckConstant, rydberg, secondRadiation, setSize, speedOfLight, stefanBoltzmann, thomsonCrossSection, avogadro, bohrRadius, coulombConstant, divide, electronMass, factorial, firstRadiation, gravity, intersect, lup, magneticFluxQuantum, molarMassC12, multinomial, permutations, planckMass, polynomialRoot, setIntersect, solveODE, stirlingS2, unit, bellNumbers, cumsum, eigs, fermiCoupling, gasConstant, kldivergence, lusolve, mean, molarVolume, planckConstant, quantileSeq, setUnion, variance, classicalElectronRadius, median, corr, freqz, mad, std, zeta, norm, rotationMatrix, planckTime, schur, rotate, sylvester, lyap } from './pureFunctionsAny.generated.js';
11
11
  var math = {}; // NOT pure!
12
12
  var mathWithTransform = {}; // NOT pure!
13
13
  var classes = {}; // NOT pure!
@@ -402,6 +402,7 @@ _extends(math, {
402
402
  min,
403
403
  mod,
404
404
  nthRoots,
405
+ nullish,
405
406
  or,
406
407
  partitionSelect,
407
408
  qr,
@@ -617,6 +618,13 @@ _extends(mathWithTransform, math, {
617
618
  smaller,
618
619
  typed
619
620
  }),
621
+ nullish: createNullishTransform({
622
+ deepEqual,
623
+ flatten,
624
+ matrix,
625
+ size,
626
+ typed
627
+ }),
620
628
  subset: createSubsetTransform({
621
629
  add,
622
630
  matrix,
@@ -5,7 +5,7 @@
5
5
  import { config } from './configReadonly.js';
6
6
  import { createBigNumberClass, createComplexClass, createE, createFalse, createFineStructure, createFractionClass, createI, createInfinity, createLN10, createLOG10E, createMatrixClass, createNaN, createNull, createPhi, createRangeClass, createResultSet, createSQRT1_2,
7
7
  // eslint-disable-line camelcase
8
- createSackurTetrode, createTau, createTrue, createVersion, createDenseMatrixClass, createEfimovFactor, createLN2, createPi, createReplacer, createSQRT2, createTyped, createWeakMixingAngle, createAbs, createAcos, createAcot, createAcsc, createAddScalar, createArg, createAsech, createAsinh, createAtan, createAtanh, createBigint, createBitNot, createBoolean, createClone, createCombinations, createComplex, createConj, createCos, createCot, createCsc, createCube, createEqualScalar, createErf, createExp, createExpm1, createFilter, createFlatten, createForEach, createFormat, createGetMatrixDataType, createHex, createIm, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLgamma, createLog10, createLog2, createMap, createMultiplyScalar, createNot, createNumber, createOct, createPickRandom, createPrint, createRandom, createRe, createSec, createSign, createSin, createSparseMatrixClass, createSplitUnit, createSquare, createString, createSubtractScalar, createTan, createToBest, createTypeOf, createAcosh, createAcsch, createAsec, createBignumber, createCombinationsWithRep, createCosh, createCsch, createIsNaN, createIsPrime, createMapSlices, createMatrix, createMatrixFromFunction, createOnes, createRandomInt, createReshape, createSech, createSinh, createSparse, createSqrt, createSqueeze, createTanh, createTranspose, createXgcd, createZeros, createAcoth, createAsin, createBin, createConcat, createCoth, createCtranspose, createDiag, createDotMultiply, createEqual, createFraction, createIdentity, createIsNumeric, createKron, createLargerEq, createLeftShift, createMode, createNthRoot, createNumeric, createProd, createResize, createRightArithShift, createRound, createSize, createSmaller, createTo, createUnaryMinus, createUnequal, createXor, createAdd, createAtan2, createBitAnd, createBitOr, createBitXor, createCbrt, createCompare, createCompareText, createCount, createDeepEqual, createDivideScalar, createDotDivide, createEqualText, createFloor, createGcd, createHasNumericValue, createHypot, createImmutableDenseMatrixClass, createIndexClass, createLarger, createLog, createLsolve, createMatrixFromColumns, createMax, createMin, createMod, createNthRoots, createOr, createPartitionSelect, createQr, createRightLogShift, createSmallerEq, createSubset, createSubtract, createTrace, createUsolve, createCatalan, createCompareNatural, createComposition, createDiff, createDistance, createDot, createFibonacciHeapClass, createIndex, createInvmod, createLcm, createLog1p, createLsolveAll, createMatrixFromRows, createMultiply, createRange, createRow, createSetCartesian, createSetDistinct, createSetIsSubset, createSetPowerset, createSlu, createSort, createUnaryPlus, createUsolveAll, createZpk2tf, createAnd, createCeil, createColumn, createCross, createDet, createFix, createInv, createPinv, createPow, createSetDifference, createSetMultiplicity, createSetSymDifference, createSpaClass, createSqrtm, createSum, createUnitClass, createVacuumImpedance, createWienDisplacement, createAtomicMass, createBohrMagneton, createBoltzmann, createConductanceQuantum, createCoulomb, createCreateUnit, createDeuteronMass, createDotPow, createElectricConstant, createElementaryCharge, createExpm, createFaraday, createFft, createGamma, createGravitationConstant, createHartreeEnergy, createIfft, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMolarMass, createMolarPlanckConstant, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckLength, createPlanckTemperature, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSecondRadiation, createSetSize, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createAvogadro, createBohrRadius, createCoulombConstant, createDivide, createElectronMass, createFactorial, createFirstRadiation, createGravity, createIntersect, createLup, createMagneticFluxQuantum, createMolarMassC12, createMultinomial, createPermutations, createPlanckMass, createPolynomialRoot, createSetIntersect, createSolveODE, createStirlingS2, createUnitFunction, createBellNumbers, createCumSum, createEigs, createFermiCoupling, createGasConstant, createKldivergence, createLusolve, createMean, createMolarVolume, createPlanckConstant, createQuantileSeq, createSetUnion, createVariance, createClassicalElectronRadius, createMedian, createCorr, createFreqz, createMad, createStd, createZeta, createNorm, createRotationMatrix, createPlanckTime, createSchur, createRotate, createSylvester, createLyap } from '../factoriesAny.js';
8
+ createSackurTetrode, createTau, createTrue, createVersion, createDenseMatrixClass, createEfimovFactor, createLN2, createPi, createReplacer, createSQRT2, createTyped, createWeakMixingAngle, createAbs, createAcos, createAcot, createAcsc, createAddScalar, createArg, createAsech, createAsinh, createAtan, createAtanh, createBigint, createBitNot, createBoolean, createClone, createCombinations, createComplex, createConj, createCos, createCot, createCsc, createCube, createEqualScalar, createErf, createExp, createExpm1, createFilter, createFlatten, createForEach, createFormat, createGetMatrixDataType, createHex, createIm, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLgamma, createLog10, createLog2, createMap, createMultiplyScalar, createNot, createNumber, createOct, createPickRandom, createPrint, createRandom, createRe, createSec, createSign, createSin, createSparseMatrixClass, createSplitUnit, createSquare, createString, createSubtractScalar, createTan, createToBest, createTypeOf, createAcosh, createAcsch, createAsec, createBignumber, createCombinationsWithRep, createCosh, createCsch, createIsNaN, createIsPrime, createMapSlices, createMatrix, createMatrixFromFunction, createOnes, createRandomInt, createReshape, createSech, createSinh, createSparse, createSqrt, createSqueeze, createTanh, createTranspose, createXgcd, createZeros, createAcoth, createAsin, createBin, createConcat, createCoth, createCtranspose, createDiag, createDotMultiply, createEqual, createFraction, createIdentity, createIsNumeric, createKron, createLargerEq, createLeftShift, createMode, createNthRoot, createNumeric, createProd, createResize, createRightArithShift, createRound, createSize, createSmaller, createTo, createUnaryMinus, createUnequal, createXor, createAdd, createAtan2, createBitAnd, createBitOr, createBitXor, createCbrt, createCompare, createCompareText, createCount, createDeepEqual, createDivideScalar, createDotDivide, createEqualText, createFloor, createGcd, createHasNumericValue, createHypot, createImmutableDenseMatrixClass, createIndexClass, createLarger, createLog, createLsolve, createMatrixFromColumns, createMax, createMin, createMod, createNthRoots, createNullish, createOr, createPartitionSelect, createQr, createRightLogShift, createSmallerEq, createSubset, createSubtract, createTrace, createUsolve, createCatalan, createCompareNatural, createComposition, createDiff, createDistance, createDot, createFibonacciHeapClass, createIndex, createInvmod, createLcm, createLog1p, createLsolveAll, createMatrixFromRows, createMultiply, createRange, createRow, createSetCartesian, createSetDistinct, createSetIsSubset, createSetPowerset, createSlu, createSort, createUnaryPlus, createUsolveAll, createZpk2tf, createAnd, createCeil, createColumn, createCross, createDet, createFix, createInv, createPinv, createPow, createSetDifference, createSetMultiplicity, createSetSymDifference, createSpaClass, createSqrtm, createSum, createUnitClass, createVacuumImpedance, createWienDisplacement, createAtomicMass, createBohrMagneton, createBoltzmann, createConductanceQuantum, createCoulomb, createCreateUnit, createDeuteronMass, createDotPow, createElectricConstant, createElementaryCharge, createExpm, createFaraday, createFft, createGamma, createGravitationConstant, createHartreeEnergy, createIfft, createInverseConductanceQuantum, createKlitzing, createLoschmidt, createMagneticConstant, createMolarMass, createMolarPlanckConstant, createNeutronMass, createNuclearMagneton, createPlanckCharge, createPlanckLength, createPlanckTemperature, createProtonMass, createQuantumOfCirculation, createReducedPlanckConstant, createRydberg, createSecondRadiation, createSetSize, createSpeedOfLight, createStefanBoltzmann, createThomsonCrossSection, createAvogadro, createBohrRadius, createCoulombConstant, createDivide, createElectronMass, createFactorial, createFirstRadiation, createGravity, createIntersect, createLup, createMagneticFluxQuantum, createMolarMassC12, createMultinomial, createPermutations, createPlanckMass, createPolynomialRoot, createSetIntersect, createSolveODE, createStirlingS2, createUnitFunction, createBellNumbers, createCumSum, createEigs, createFermiCoupling, createGasConstant, createKldivergence, createLusolve, createMean, createMolarVolume, createPlanckConstant, createQuantileSeq, createSetUnion, createVariance, createClassicalElectronRadius, createMedian, createCorr, createFreqz, createMad, createStd, createZeta, createNorm, createRotationMatrix, createPlanckTime, createSchur, createRotate, createSylvester, createLyap } from '../factoriesAny.js';
9
9
  export var BigNumber = /* #__PURE__ */createBigNumberClass({
10
10
  config
11
11
  });
@@ -771,6 +771,13 @@ export var nthRoots = /* #__PURE__ */createNthRoots({
771
771
  divideScalar,
772
772
  typed
773
773
  });
774
+ export var nullish = /* #__PURE__ */createNullish({
775
+ deepEqual,
776
+ flatten,
777
+ matrix,
778
+ size,
779
+ typed
780
+ });
774
781
  export var or = /* #__PURE__ */createOr({
775
782
  DenseMatrix,
776
783
  concat,
@@ -112,6 +112,7 @@ import { distanceDocs } from './function/geometry/distance.js';
112
112
  import { intersectDocs } from './function/geometry/intersect.js';
113
113
  import { andDocs } from './function/logical/and.js';
114
114
  import { notDocs } from './function/logical/not.js';
115
+ import { nullishDocs } from './function/logical/nullish.js';
115
116
  import { orDocs } from './function/logical/or.js';
116
117
  import { xorDocs } from './function/logical/xor.js';
117
118
  import { mapSlicesDocs } from './function/matrix/mapSlices.js';
@@ -581,6 +582,7 @@ export var embeddedDocs = {
581
582
  // functions - logical
582
583
  and: andDocs,
583
584
  not: notDocs,
585
+ nullish: nullishDocs,
584
586
  or: orDocs,
585
587
  xor: xorDocs,
586
588
  // functions - matrix
@@ -0,0 +1,8 @@
1
+ export var nullishDocs = {
2
+ name: 'nullish',
3
+ category: 'Logical',
4
+ syntax: ['x ?? y', 'nullish(x, y)'],
5
+ description: 'Nullish coalescing operator. Returns the right-hand operand when the left-hand operand is null or undefined, and otherwise returns the left-hand operand.',
6
+ examples: ['null ?? 42', 'undefined ?? 42', '0 ?? 42', 'false ?? 42', 'null ?? undefined ?? 42'],
7
+ seealso: ['and', 'or', 'not']
8
+ };
@@ -221,6 +221,13 @@ export var properties = [{
221
221
  associativity: 'right',
222
222
  associativeWith: []
223
223
  }
224
+ }, {
225
+ // nullish coalescing
226
+ 'OperatorNode:nullish': {
227
+ op: '??',
228
+ associativity: 'left',
229
+ associativeWith: []
230
+ }
224
231
  }, {
225
232
  // factorial
226
233
  'OperatorNode:factorial': {
@@ -129,6 +129,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
129
129
  '=': true,
130
130
  ':': true,
131
131
  '?': true,
132
+ '??': true,
132
133
  '==': true,
133
134
  '!=': true,
134
135
  '<': true,
@@ -1108,7 +1109,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1108
1109
  */
1109
1110
  function parsePow(state) {
1110
1111
  var node, name, fn, params;
1111
- node = parseLeftHandOperators(state);
1112
+ node = parseNullishCoalescing(state);
1112
1113
  if (state.token === '^' || state.token === '.^') {
1113
1114
  name = state.token;
1114
1115
  fn = name === '^' ? 'pow' : 'dotPow';
@@ -1119,6 +1120,21 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
1119
1120
  return node;
1120
1121
  }
1121
1122
 
1123
+ /**
1124
+ * nullish coalescing operator
1125
+ * @return {Node} node
1126
+ * @private
1127
+ */
1128
+ function parseNullishCoalescing(state) {
1129
+ var node = parseLeftHandOperators(state);
1130
+ while (state.token === '??') {
1131
+ // eslint-disable-line no-unmodified-loop-condition
1132
+ getTokenSkipNewline(state);
1133
+ node = new OperatorNode('??', 'nullish', [node, parseLeftHandOperators(state)]);
1134
+ }
1135
+ return node;
1136
+ }
1137
+
1122
1138
  /**
1123
1139
  * Left hand operators: factorial x!, ctranspose x'
1124
1140
  * @return {Node} node