mathjs 14.6.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.
- package/HISTORY.md +17 -0
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/function/config.js +0 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesNullish.generated.js +25 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesNullishTransform.generated.js +25 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +8 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +10 -3
- package/lib/cjs/expression/Parser.js +35 -1
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/logical/nullish.js +14 -0
- package/lib/cjs/expression/node/FunctionAssignmentNode.js +3 -1
- package/lib/cjs/expression/operators.js +7 -0
- package/lib/cjs/expression/parse.js +18 -2
- package/lib/cjs/expression/transform/nullish.transform.js +43 -0
- package/lib/cjs/factoriesAny.js +14 -0
- package/lib/cjs/function/logical/nullish.js +87 -0
- package/lib/cjs/function/matrix/range.js +7 -5
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +21 -17
- package/lib/cjs/type/string.js +4 -4
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/function/config.js +0 -1
- package/lib/esm/entry/dependenciesAny/dependenciesNullish.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny/dependenciesNullishTransform.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +10 -2
- package/lib/esm/entry/pureFunctionsAny.generated.js +8 -1
- package/lib/esm/expression/Parser.js +35 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/logical/nullish.js +8 -0
- package/lib/esm/expression/node/FunctionAssignmentNode.js +3 -1
- package/lib/esm/expression/operators.js +7 -0
- package/lib/esm/expression/parse.js +18 -2
- package/lib/esm/expression/transform/nullish.transform.js +37 -0
- package/lib/esm/factoriesAny.js +2 -0
- package/lib/esm/function/logical/nullish.js +81 -0
- package/lib/esm/function/matrix/range.js +7 -5
- package/lib/esm/type/matrix/DenseMatrix.js +21 -17
- package/lib/esm/type/string.js +4 -4
- package/lib/esm/version.js +1 -1
- package/package.json +15 -16
- package/types/index.d.ts +19 -1
- package/types/tslint.json +0 -6
@@ -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.
|
8
|
-
exports.
|
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,
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.createParserClass = void 0;
|
7
7
|
var _factory = require("../utils/factory.js");
|
8
|
+
var _is = require("../utils/is.js");
|
8
9
|
var _map = require("../utils/map.js");
|
9
10
|
const name = 'Parser';
|
10
11
|
const dependencies = ['evaluate', 'parse'];
|
@@ -160,7 +161,40 @@ const createParserClass = exports.createParserClass = /* #__PURE__ */(0, _factor
|
|
160
161
|
Parser.prototype.clear = function () {
|
161
162
|
this.scope.clear();
|
162
163
|
};
|
164
|
+
Parser.prototype.toJSON = function () {
|
165
|
+
const json = {
|
166
|
+
mathjs: 'Parser',
|
167
|
+
variables: {},
|
168
|
+
functions: {}
|
169
|
+
};
|
170
|
+
for (const [name, value] of this.scope) {
|
171
|
+
if ((0, _is.isFunction)(value)) {
|
172
|
+
if (!isExpressionFunction(value)) {
|
173
|
+
throw new Error(`Cannot serialize external function ${name}`);
|
174
|
+
}
|
175
|
+
json.functions[name] = `${value.syntax} = ${value.expr}`;
|
176
|
+
} else {
|
177
|
+
json.variables[name] = value;
|
178
|
+
}
|
179
|
+
}
|
180
|
+
return json;
|
181
|
+
};
|
182
|
+
Parser.fromJSON = function (json) {
|
183
|
+
const parser = new Parser();
|
184
|
+
Object.entries(json.variables).forEach(_ref2 => {
|
185
|
+
let [name, value] = _ref2;
|
186
|
+
return parser.set(name, value);
|
187
|
+
});
|
188
|
+
Object.entries(json.functions).forEach(_ref3 => {
|
189
|
+
let [_name, fn] = _ref3;
|
190
|
+
return parser.evaluate(fn);
|
191
|
+
});
|
192
|
+
return parser;
|
193
|
+
};
|
163
194
|
return Parser;
|
164
195
|
}, {
|
165
196
|
isClass: true
|
166
|
-
});
|
197
|
+
});
|
198
|
+
function isExpressionFunction(value) {
|
199
|
+
return typeof value === 'function' && typeof value.syntax === 'string' && typeof value.expr === 'string';
|
200
|
+
}
|
@@ -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
|
+
};
|
@@ -105,7 +105,8 @@ const createFunctionAssignmentNode = exports.createFunctionAssignmentNode = /* #
|
|
105
105
|
});
|
106
106
|
|
107
107
|
// compile the function expression with the child args
|
108
|
-
const
|
108
|
+
const expr = this.expr;
|
109
|
+
const evalExpr = expr._compile(math, childArgNames);
|
109
110
|
const name = this.name;
|
110
111
|
const params = this.params;
|
111
112
|
const signature = (0, _array.join)(this.types, ',');
|
@@ -121,6 +122,7 @@ const createFunctionAssignmentNode = exports.createFunctionAssignmentNode = /* #
|
|
121
122
|
};
|
122
123
|
const fn = typed(name, signatures);
|
123
124
|
fn.syntax = syntax;
|
125
|
+
fn.expr = expr.toString();
|
124
126
|
scope.set(name, fn);
|
125
127
|
return fn;
|
126
128
|
};
|
@@ -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': {
|
@@ -54,7 +54,7 @@ const createParse = exports.createParse = /* #__PURE__ */(0, _factory.factory)(n
|
|
54
54
|
* node1.compile().evaluate() // 5
|
55
55
|
*
|
56
56
|
* let scope = {a:3, b:4}
|
57
|
-
* const node2 = math.parse('a * b')
|
57
|
+
* const node2 = math.parse('a * b')
|
58
58
|
* node2.evaluate(scope) // 12
|
59
59
|
* const code2 = node2.compile()
|
60
60
|
* code2.evaluate(scope) // 12
|
@@ -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 =
|
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
|
+
});
|
package/lib/cjs/factoriesAny.js
CHANGED
@@ -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
|
+
});
|
@@ -22,7 +22,7 @@ const createRange = exports.createRange = /* #__PURE__ */(0, _factory.factory)(n
|
|
22
22
|
isPositive
|
23
23
|
} = _ref;
|
24
24
|
/**
|
25
|
-
* Create
|
25
|
+
* Create a matrix or array containing a range of values.
|
26
26
|
* By default, the range end is excluded. This can be customized by providing
|
27
27
|
* an extra parameter `includeEnd`.
|
28
28
|
*
|
@@ -50,10 +50,12 @@ const createRange = exports.createRange = /* #__PURE__ */(0, _factory.factory)(n
|
|
50
50
|
* - `includeEnd: boolean`
|
51
51
|
* Option to specify whether to include the end or not. False by default.
|
52
52
|
*
|
53
|
-
*
|
54
|
-
*
|
55
|
-
*
|
56
|
-
*
|
53
|
+
* The function returns a `DenseMatrix` when the library is configured with
|
54
|
+
* `config = { matrix: 'Matrix' }, and returns an Array otherwise.
|
55
|
+
* Note that the type of the returned values is taken from the type of the
|
56
|
+
* provided start/end value. If only one of these is a built-in `number` type,
|
57
|
+
* it will be promoted to the type of the other endpoint. However, in the case
|
58
|
+
* of Unit values, both endpoints must have compatible units, and the return
|
57
59
|
* value will have compatible units as well.
|
58
60
|
*
|
59
61
|
* Examples:
|
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.
|
10
|
-
* @date 2025-
|
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>
|
@@ -679,24 +679,28 @@ const createDenseMatrixClass = exports.createDenseMatrixClass = /* #__PURE__ */(
|
|
679
679
|
}
|
680
680
|
return;
|
681
681
|
}
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
index[depth] = i;
|
692
|
-
yield {
|
693
|
-
value: value[i],
|
694
|
-
index: index.slice()
|
695
|
-
};
|
696
|
-
}
|
682
|
+
|
683
|
+
// Multi-dimensional matrix: iterate over all elements
|
684
|
+
const index = Array(maxDepth + 1).fill(0);
|
685
|
+
const totalElements = this._size.reduce((a, b) => a * b, 1);
|
686
|
+
for (let count = 0; count < totalElements; count++) {
|
687
|
+
// Traverse to the current element using indices
|
688
|
+
let current = this._data;
|
689
|
+
for (let d = 0; d < maxDepth; d++) {
|
690
|
+
current = current[index[d]];
|
697
691
|
}
|
698
|
-
|
699
|
-
|
692
|
+
yield {
|
693
|
+
value: current[index[maxDepth]],
|
694
|
+
index: index.slice()
|
695
|
+
};
|
696
|
+
|
697
|
+
// Increment indices for next element
|
698
|
+
for (let d = maxDepth; d >= 0; d--) {
|
699
|
+
index[d]++;
|
700
|
+
if (index[d] < this._size[d]) break;
|
701
|
+
index[d] = 0;
|
702
|
+
}
|
703
|
+
}
|
700
704
|
};
|
701
705
|
|
702
706
|
/**
|
package/lib/cjs/type/string.js
CHANGED
@@ -23,13 +23,13 @@ const createString = exports.createString = /* #__PURE__ */(0, _factory.factory)
|
|
23
23
|
*
|
24
24
|
* Examples:
|
25
25
|
*
|
26
|
-
* math.string(4.2)
|
27
|
-
* math.string(math.complex(3, 2) // returns string '3 + 2i'
|
26
|
+
* math.string(4.2) // returns string '4.2'
|
27
|
+
* math.string(math.complex(3, 2)) // returns string '3 + 2i'
|
28
28
|
*
|
29
29
|
* const u = math.unit(5, 'km')
|
30
|
-
* math.string(u.to('m'))
|
30
|
+
* math.string(u.to('m')) // returns string '5000 m'
|
31
31
|
*
|
32
|
-
* math.string([true, false])
|
32
|
+
* math.string([true, false]) // returns ['true', 'false']
|
33
33
|
*
|
34
34
|
* See also:
|
35
35
|
*
|
package/lib/cjs/version.js
CHANGED
@@ -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
|
+
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
|
+
};
|