mathjs 10.2.0 → 10.4.1
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +43 -0
- package/docs/expressions/syntax.md +31 -2
- package/docs/reference/functions/cumsum.md +57 -0
- package/docs/reference/functions/format.md +1 -1
- package/docs/reference/functions/map.md +22 -5
- package/docs/reference/functions/subset.md +10 -2
- package/docs/reference/functions/sum.md +2 -1
- package/docs/reference/functions/symbolicEqual.md +62 -0
- package/docs/reference/functions.md +3 -1
- package/lib/browser/math.js +6 -6
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesCumSum.generated.js +26 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesCumSumTransform.generated.js +26 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +29 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +24 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesCumSum.generated.js +26 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesCumSumTransform.generated.js +26 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +16 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +22 -8
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +6 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +18 -12
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +8 -2
- package/lib/cjs/expression/embeddedDocs/construction/fraction.js +3 -3
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +240 -234
- package/lib/cjs/expression/embeddedDocs/function/algebra/symbolicEqual.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/matrix/subset.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/statistics/cumsum.js +15 -0
- package/lib/cjs/expression/node/FunctionNode.js +74 -55
- package/lib/cjs/expression/parse.js +12 -8
- package/lib/cjs/expression/transform/cumsum.transform.js +57 -0
- package/lib/cjs/expression/transform/sum.transform.js +1 -1
- package/lib/cjs/factoriesAny.js +24 -0
- package/lib/cjs/factoriesNumber.js +18 -2
- package/lib/cjs/function/algebra/simplify.js +8 -0
- package/lib/cjs/function/algebra/simplifyCore.js +2 -2
- package/lib/cjs/function/algebra/symbolicEqual.js +88 -0
- package/lib/cjs/function/matrix/eigs/complexEigs.js +39 -28
- package/lib/cjs/function/matrix/map.js +53 -15
- package/lib/cjs/function/matrix/subset.js +15 -5
- package/lib/cjs/function/statistics/cumsum.js +151 -0
- package/lib/cjs/function/statistics/sum.js +1 -1
- package/lib/cjs/function/string/format.js +1 -1
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/fraction/function/fraction.js +20 -8
- package/lib/cjs/utils/collection.js +3 -27
- package/lib/cjs/utils/switch.js +31 -0
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesCumSum.generated.js +14 -0
- package/lib/esm/entry/dependenciesAny/dependenciesCumSumTransform.generated.js +14 -0
- package/lib/esm/entry/dependenciesAny/dependenciesSymbolicEqual.generated.js +16 -0
- package/lib/esm/entry/dependenciesAny.generated.js +3 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesCumSum.generated.js +14 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesCumSumTransform.generated.js +14 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +22 -9
- package/lib/esm/entry/impureFunctionsNumber.generated.js +8 -2
- package/lib/esm/entry/pureFunctionsAny.generated.js +13 -8
- package/lib/esm/entry/pureFunctionsNumber.generated.js +6 -1
- package/lib/esm/expression/embeddedDocs/construction/fraction.js +3 -3
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +220 -216
- package/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/matrix/subset.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/statistics/cumsum.js +8 -0
- package/lib/esm/expression/node/FunctionNode.js +70 -53
- package/lib/esm/expression/parse.js +12 -8
- package/lib/esm/expression/transform/cumsum.transform.js +48 -0
- package/lib/esm/expression/transform/sum.transform.js +1 -1
- package/lib/esm/factoriesAny.js +3 -0
- package/lib/esm/factoriesNumber.js +2 -0
- package/lib/esm/function/algebra/simplify.js +8 -0
- package/lib/esm/function/algebra/simplifyCore.js +2 -2
- package/lib/esm/function/algebra/symbolicEqual.js +80 -0
- package/lib/esm/function/matrix/eigs/complexEigs.js +36 -25
- package/lib/esm/function/matrix/map.js +53 -15
- package/lib/esm/function/matrix/subset.js +15 -5
- package/lib/esm/function/statistics/cumsum.js +139 -0
- package/lib/esm/function/statistics/sum.js +1 -1
- package/lib/esm/function/string/format.js +1 -1
- package/lib/esm/type/fraction/function/fraction.js +20 -8
- package/lib/esm/utils/collection.js +1 -26
- package/lib/esm/utils/switch.js +24 -0
- package/lib/esm/version.js +1 -1
- package/package.json +15 -11
- package/types/index.d.ts +209 -23
- package/types/index.ts +274 -57
- package/types/tsconfig.json +2 -1
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.symbolicEqualDocs = void 0;
|
7
|
+
var symbolicEqualDocs = {
|
8
|
+
name: 'symbolicEqual',
|
9
|
+
category: 'Algebra',
|
10
|
+
syntax: ['symbolicEqual(expr1, expr2)', 'symbolicEqual(expr1, expr2, options)'],
|
11
|
+
description: 'Returns true if the difference of the expressions simplifies to 0',
|
12
|
+
examples: ['symbolicEqual("x*y","y*x")', 'symbolicEqual("abs(x^2)", "x^2")', 'symbolicEqual("abs(x)", "x", {context: {abs: {trivial: true}}})'],
|
13
|
+
seealso: ['simplify', 'evaluate']
|
14
|
+
};
|
15
|
+
exports.symbolicEqualDocs = symbolicEqualDocs;
|
@@ -8,8 +8,8 @@ var subsetDocs = {
|
|
8
8
|
name: 'subset',
|
9
9
|
category: 'Matrix',
|
10
10
|
syntax: ['value(index)', 'value(index) = replacement', 'subset(value, [index])', 'subset(value, [index], replacement)'],
|
11
|
-
description: 'Get or set a subset of a matrix or string. ' + 'Indexes are one-based. ' + '
|
12
|
-
examples: ['d = [1, 2; 3, 4]', 'e = []', 'e[1, 1:2] = [5, 6]', 'e[2, :] = [7, 8]', 'f = d * e', 'f[2, 1]', 'f[:, 1]'],
|
11
|
+
description: 'Get or set a subset of the entries of a matrix or ' + 'characters of a string. ' + 'Indexes are one-based. There should be one index specification for ' + 'each dimension of the target. Each specification can be a single ' + 'index, a list of indices, or a range in colon notation `l:u`. ' + 'In a range, both the lower bound l and upper bound u are included; ' + 'and if a bound is omitted it defaults to the most extreme valid value. ' + 'The cartesian product of the indices specified in each dimension ' + 'determines the target of the operation.',
|
12
|
+
examples: ['d = [1, 2; 3, 4]', 'e = []', 'e[1, 1:2] = [5, 6]', 'e[2, :] = [7, 8]', 'f = d * e', 'f[2, 1]', 'f[:, 1]', 'f[[1,2], [1,3]] = [9, 10; 11, 12]', 'f'],
|
13
13
|
seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'trace', 'transpose', 'zeros']
|
14
14
|
};
|
15
15
|
exports.subsetDocs = subsetDocs;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.cumSumDocs = void 0;
|
7
|
+
var cumSumDocs = {
|
8
|
+
name: 'cumsum',
|
9
|
+
category: 'Statistics',
|
10
|
+
syntax: ['cumsum(a, b, c, ...)', 'cumsum(A)'],
|
11
|
+
description: 'Compute the cumulative sum of all values.',
|
12
|
+
examples: ['cumsum(2, 3, 4, 1)', 'cumsum([2, 3, 4, 1])', 'cumsum([1, 2; 3, 4])', 'cumsum([1, 2; 3, 4], 1)', 'cumsum([1, 2; 3, 4], 2)'],
|
13
|
+
seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']
|
14
|
+
};
|
15
|
+
exports.cumSumDocs = cumSumDocs;
|
@@ -97,78 +97,97 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
97
97
|
});
|
98
98
|
|
99
99
|
if ((0, _is.isSymbolNode)(this.fn)) {
|
100
|
-
// we can statically determine whether the function has an rawArgs property
|
101
100
|
var _name = this.fn.name;
|
102
|
-
var fn = _name in math ? (0, _customs.getSafeProperty)(math, _name) : undefined;
|
103
|
-
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
104
101
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
102
|
+
if (!argNames[_name]) {
|
103
|
+
// we can statically determine whether the function has an rawArgs property
|
104
|
+
var fn = _name in math ? (0, _customs.getSafeProperty)(math, _name) : undefined;
|
105
|
+
var isRaw = typeof fn === 'function' && fn.rawArgs === true;
|
109
106
|
|
110
|
-
|
111
|
-
|
112
|
-
|
107
|
+
var resolveFn = function resolveFn(scope) {
|
108
|
+
if (scope.has(_name)) {
|
109
|
+
return scope.get(_name);
|
110
|
+
}
|
113
111
|
|
114
|
-
|
115
|
-
|
112
|
+
if (_name in math) {
|
113
|
+
return (0, _customs.getSafeProperty)(math, _name);
|
114
|
+
}
|
116
115
|
|
117
|
-
|
118
|
-
// pass unevaluated parameters (nodes) to the function
|
119
|
-
// "raw" evaluation
|
120
|
-
var rawArgs = this.args;
|
121
|
-
return function evalFunctionNode(scope, args, context) {
|
122
|
-
var fn = resolveFn(scope);
|
123
|
-
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
116
|
+
return FunctionNode.onUndefinedFunction(_name);
|
124
117
|
};
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
return
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
118
|
+
|
119
|
+
if (isRaw) {
|
120
|
+
// pass unevaluated parameters (nodes) to the function
|
121
|
+
// "raw" evaluation
|
122
|
+
var rawArgs = this.args;
|
123
|
+
return function evalFunctionNode(scope, args, context) {
|
124
|
+
var fn = resolveFn(scope);
|
125
|
+
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args), scope);
|
126
|
+
};
|
127
|
+
} else {
|
128
|
+
// "regular" evaluation
|
129
|
+
switch (evalArgs.length) {
|
130
|
+
case 0:
|
131
|
+
return function evalFunctionNode(scope, args, context) {
|
132
|
+
var fn = resolveFn(scope);
|
133
|
+
return fn();
|
134
|
+
};
|
135
|
+
|
136
|
+
case 1:
|
137
|
+
return function evalFunctionNode(scope, args, context) {
|
138
|
+
var fn = resolveFn(scope);
|
139
|
+
var evalArg0 = evalArgs[0];
|
140
|
+
return fn(evalArg0(scope, args, context));
|
141
|
+
};
|
142
|
+
|
143
|
+
case 2:
|
144
|
+
return function evalFunctionNode(scope, args, context) {
|
145
|
+
var fn = resolveFn(scope);
|
146
|
+
var evalArg0 = evalArgs[0];
|
147
|
+
var evalArg1 = evalArgs[1];
|
148
|
+
return fn(evalArg0(scope, args, context), evalArg1(scope, args, context));
|
149
|
+
};
|
150
|
+
|
151
|
+
default:
|
152
|
+
return function evalFunctionNode(scope, args, context) {
|
153
|
+
var fn = resolveFn(scope);
|
154
|
+
var values = evalArgs.map(function (evalArg) {
|
155
|
+
return evalArg(scope, args, context);
|
156
|
+
});
|
157
|
+
return fn.apply(void 0, (0, _toConsumableArray2.default)(values));
|
158
|
+
};
|
159
|
+
}
|
157
160
|
}
|
161
|
+
} else {
|
162
|
+
// the function symbol is an argName
|
163
|
+
var _rawArgs = this.args;
|
164
|
+
return function evalFunctionNode(scope, args, context) {
|
165
|
+
var fn = args[_name];
|
166
|
+
var isRaw = fn && fn.rawArgs;
|
167
|
+
|
168
|
+
if (isRaw) {
|
169
|
+
return fn(_rawArgs, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
170
|
+
} else {
|
171
|
+
var values = evalArgs.map(function (evalArg) {
|
172
|
+
return evalArg(scope, args, context);
|
173
|
+
});
|
174
|
+
return fn.apply(fn, values);
|
175
|
+
}
|
176
|
+
};
|
158
177
|
}
|
159
178
|
} else if ((0, _is.isAccessorNode)(this.fn) && (0, _is.isIndexNode)(this.fn.index) && this.fn.index.isObjectProperty()) {
|
160
179
|
// execute the function with the right context: the object of the AccessorNode
|
161
180
|
var evalObject = this.fn.object._compile(math, argNames);
|
162
181
|
|
163
182
|
var prop = this.fn.index.getObjectProperty();
|
164
|
-
var
|
183
|
+
var _rawArgs2 = this.args;
|
165
184
|
return function evalFunctionNode(scope, args, context) {
|
166
185
|
var object = evalObject(scope, args, context);
|
167
186
|
(0, _customs.validateSafeMethod)(object, prop);
|
168
187
|
var isRaw = object[prop] && object[prop].rawArgs;
|
169
188
|
|
170
189
|
if (isRaw) {
|
171
|
-
return object[prop](
|
190
|
+
return object[prop](_rawArgs2, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
172
191
|
} else {
|
173
192
|
// "regular" evaluation
|
174
193
|
var values = evalArgs.map(function (evalArg) {
|
@@ -182,13 +201,13 @@ var createFunctionNode = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
182
201
|
// we have to dynamically determine whether the function has a rawArgs property
|
183
202
|
var evalFn = this.fn._compile(math, argNames);
|
184
203
|
|
185
|
-
var
|
204
|
+
var _rawArgs3 = this.args;
|
186
205
|
return function evalFunctionNode(scope, args, context) {
|
187
206
|
var fn = evalFn(scope, args, context);
|
188
207
|
var isRaw = fn && fn.rawArgs;
|
189
208
|
|
190
209
|
if (isRaw) {
|
191
|
-
return fn(
|
210
|
+
return fn(_rawArgs3, math, (0, _scope.createSubScope)(scope, args), scope); // "raw" evaluation
|
192
211
|
} else {
|
193
212
|
// "regular" evaluation
|
194
213
|
var values = evalArgs.map(function (evalArg) {
|
@@ -253,18 +253,22 @@ var createParse = /* #__PURE__ */(0, _factory.factory)(name, dependencies, funct
|
|
253
253
|
function getToken(state) {
|
254
254
|
state.tokenType = TOKENTYPE.NULL;
|
255
255
|
state.token = '';
|
256
|
-
state.comment = ''; // skip over
|
257
|
-
// space, tab, and newline when inside parameters
|
256
|
+
state.comment = ''; // skip over ignored characters:
|
258
257
|
|
259
|
-
while (
|
260
|
-
|
261
|
-
|
258
|
+
while (true) {
|
259
|
+
// comments:
|
260
|
+
if (currentCharacter(state) === '#') {
|
261
|
+
while (currentCharacter(state) !== '\n' && currentCharacter(state) !== '') {
|
262
|
+
state.comment += currentCharacter(state);
|
263
|
+
next(state);
|
264
|
+
}
|
265
|
+
} // whitespace: space, tab, and newline when inside parameters
|
262
266
|
|
263
267
|
|
264
|
-
|
265
|
-
while (currentCharacter(state) !== '\n' && currentCharacter(state) !== '') {
|
266
|
-
state.comment += currentCharacter(state);
|
268
|
+
if (parse.isWhitespace(currentCharacter(state), state.nestingLevel)) {
|
267
269
|
next(state);
|
270
|
+
} else {
|
271
|
+
break;
|
268
272
|
}
|
269
273
|
} // check for end of expression
|
270
274
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createCumSumTransform = void 0;
|
7
|
+
|
8
|
+
var _is = require("../../utils/is.js");
|
9
|
+
|
10
|
+
var _factory = require("../../utils/factory.js");
|
11
|
+
|
12
|
+
var _errorTransform = require("./utils/errorTransform.js");
|
13
|
+
|
14
|
+
var _cumsum = require("../../function/statistics/cumsum.js");
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Attach a transform function to math.sum
|
18
|
+
* Adds a property transform containing the transform function.
|
19
|
+
*
|
20
|
+
* This transform changed the last `dim` parameter of function sum
|
21
|
+
* from one-based to zero based
|
22
|
+
*/
|
23
|
+
var name = 'cumsum';
|
24
|
+
var dependencies = ['typed', 'add', 'unaryPlus'];
|
25
|
+
var createCumSumTransform = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
26
|
+
var typed = _ref.typed,
|
27
|
+
add = _ref.add,
|
28
|
+
unaryPlus = _ref.unaryPlus;
|
29
|
+
var cumsum = (0, _cumsum.createCumSum)({
|
30
|
+
typed: typed,
|
31
|
+
add: add,
|
32
|
+
unaryPlus: unaryPlus
|
33
|
+
});
|
34
|
+
return typed(name, {
|
35
|
+
'...any': function any(args) {
|
36
|
+
// change last argument dim from one-based to zero-based
|
37
|
+
if (args.length === 2 && (0, _is.isCollection)(args[0])) {
|
38
|
+
var dim = args[1];
|
39
|
+
|
40
|
+
if ((0, _is.isNumber)(dim)) {
|
41
|
+
args[1] = dim - 1;
|
42
|
+
} else if ((0, _is.isBigNumber)(dim)) {
|
43
|
+
args[1] = dim.minus(1);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
try {
|
48
|
+
return cumsum.apply(null, args);
|
49
|
+
} catch (err) {
|
50
|
+
throw (0, _errorTransform.errorTransform)(err);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
});
|
54
|
+
}, {
|
55
|
+
isTransformFunction: true
|
56
|
+
});
|
57
|
+
exports.createCumSumTransform = createCumSumTransform;
|
@@ -17,7 +17,7 @@ var _lastDimToZeroBase = require("./utils/lastDimToZeroBase.js");
|
|
17
17
|
* Attach a transform function to math.sum
|
18
18
|
* Adds a property transform containing the transform function.
|
19
19
|
*
|
20
|
-
* This transform changed the last `dim` parameter of function
|
20
|
+
* This transform changed the last `dim` parameter of function sum
|
21
21
|
* from one-based to zero based
|
22
22
|
*/
|
23
23
|
var name = 'sum';
|
package/lib/cjs/factoriesAny.js
CHANGED
@@ -447,6 +447,18 @@ Object.defineProperty(exports, "createCube", {
|
|
447
447
|
return _cube.createCube;
|
448
448
|
}
|
449
449
|
});
|
450
|
+
Object.defineProperty(exports, "createCumSum", {
|
451
|
+
enumerable: true,
|
452
|
+
get: function get() {
|
453
|
+
return _cumsum.createCumSum;
|
454
|
+
}
|
455
|
+
});
|
456
|
+
Object.defineProperty(exports, "createCumSumTransform", {
|
457
|
+
enumerable: true,
|
458
|
+
get: function get() {
|
459
|
+
return _cumsumTransform.createCumSumTransform;
|
460
|
+
}
|
461
|
+
});
|
450
462
|
Object.defineProperty(exports, "createDeepEqual", {
|
451
463
|
enumerable: true,
|
452
464
|
get: function get() {
|
@@ -1857,6 +1869,12 @@ Object.defineProperty(exports, "createSymbolNode", {
|
|
1857
1869
|
return _SymbolNode.createSymbolNode;
|
1858
1870
|
}
|
1859
1871
|
});
|
1872
|
+
Object.defineProperty(exports, "createSymbolicEqual", {
|
1873
|
+
enumerable: true,
|
1874
|
+
get: function get() {
|
1875
|
+
return _symbolicEqual.createSymbolicEqual;
|
1876
|
+
}
|
1877
|
+
});
|
1860
1878
|
Object.defineProperty(exports, "createTan", {
|
1861
1879
|
enumerable: true,
|
1862
1880
|
get: function get() {
|
@@ -2472,6 +2490,8 @@ var _intersect = require("./function/geometry/intersect.js");
|
|
2472
2490
|
|
2473
2491
|
var _sum = require("./function/statistics/sum.js");
|
2474
2492
|
|
2493
|
+
var _cumsum = require("./function/statistics/cumsum.js");
|
2494
|
+
|
2475
2495
|
var _mean = require("./function/statistics/mean.js");
|
2476
2496
|
|
2477
2497
|
var _median = require("./function/statistics/median.js");
|
@@ -2520,6 +2540,8 @@ var _simplifyCore = require("./function/algebra/simplifyCore.js");
|
|
2520
2540
|
|
2521
2541
|
var _resolve = require("./function/algebra/resolve.js");
|
2522
2542
|
|
2543
|
+
var _symbolicEqual = require("./function/algebra/symbolicEqual.js");
|
2544
|
+
|
2523
2545
|
var _derivative = require("./function/algebra/derivative.js");
|
2524
2546
|
|
2525
2547
|
var _rationalize = require("./function/algebra/rationalize.js");
|
@@ -2564,4 +2586,6 @@ var _stdTransform = require("./expression/transform/std.transform.js");
|
|
2564
2586
|
|
2565
2587
|
var _sumTransform = require("./expression/transform/sum.transform.js");
|
2566
2588
|
|
2589
|
+
var _cumsumTransform = require("./expression/transform/cumsum.transform.js");
|
2590
|
+
|
2567
2591
|
var _varianceTransform = require("./expression/transform/variance.transform.js");
|
@@ -131,6 +131,18 @@ Object.defineProperty(exports, "createConstantNode", {
|
|
131
131
|
}
|
132
132
|
});
|
133
133
|
exports.createCube = exports.createCsch = exports.createCsc = exports.createCoth = exports.createCot = exports.createCosh = exports.createCos = void 0;
|
134
|
+
Object.defineProperty(exports, "createCumSum", {
|
135
|
+
enumerable: true,
|
136
|
+
get: function get() {
|
137
|
+
return _cumsum.createCumSum;
|
138
|
+
}
|
139
|
+
});
|
140
|
+
Object.defineProperty(exports, "createCumSumTransform", {
|
141
|
+
enumerable: true,
|
142
|
+
get: function get() {
|
143
|
+
return _cumsumTransform.createCumSumTransform;
|
144
|
+
}
|
145
|
+
});
|
134
146
|
Object.defineProperty(exports, "createDeepEqual", {
|
135
147
|
enumerable: true,
|
136
148
|
get: function get() {
|
@@ -325,8 +337,8 @@ Object.defineProperty(exports, "createLargerEq", {
|
|
325
337
|
return _largerEq.createLargerEqNumber;
|
326
338
|
}
|
327
339
|
});
|
328
|
-
exports.
|
329
|
-
exports.createLog2 = exports.createLog1p = exports.createLog10 = exports.createLog =
|
340
|
+
exports.createLeftShift = exports.createLcm = void 0;
|
341
|
+
exports.createLog2 = exports.createLog1p = exports.createLog10 = exports.createLog = void 0;
|
330
342
|
Object.defineProperty(exports, "createMad", {
|
331
343
|
enumerable: true,
|
332
344
|
get: function get() {
|
@@ -914,6 +926,8 @@ var _min = require("./function/statistics/min.js");
|
|
914
926
|
|
915
927
|
var _sum = require("./function/statistics/sum.js");
|
916
928
|
|
929
|
+
var _cumsum = require("./function/statistics/cumsum.js");
|
930
|
+
|
917
931
|
var _mean = require("./function/statistics/mean.js");
|
918
932
|
|
919
933
|
var _median = require("./function/statistics/median.js");
|
@@ -950,6 +964,8 @@ var _stdTransform = require("./expression/transform/std.transform.js");
|
|
950
964
|
|
951
965
|
var _sumTransform = require("./expression/transform/sum.transform.js");
|
952
966
|
|
967
|
+
var _cumsumTransform = require("./expression/transform/cumsum.transform.js");
|
968
|
+
|
953
969
|
var _varianceTransform = require("./expression/transform/variance.transform.js");
|
954
970
|
|
955
971
|
var _clone = require("./function/utils/clone.js");
|
@@ -343,6 +343,14 @@ var createSimplify = /* #__PURE__ */(0, _factory.factory)(name, dependencies, fu
|
|
343
343
|
total: true
|
344
344
|
}
|
345
345
|
}
|
346
|
+
}, {
|
347
|
+
s: 'n-n -> 0',
|
348
|
+
// partial alternative when we can't always subtract
|
349
|
+
assuming: {
|
350
|
+
subtract: {
|
351
|
+
total: false
|
352
|
+
}
|
353
|
+
}
|
346
354
|
}, {
|
347
355
|
s: '-(c*v) -> v * (-c)',
|
348
356
|
// make non-constant terms positive
|
@@ -215,9 +215,9 @@ var createSimplifyCore = /* #__PURE__ */(0, _factory.factory)(name, dependencies
|
|
215
215
|
}
|
216
216
|
}
|
217
217
|
}
|
218
|
-
|
219
|
-
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
220
218
|
}
|
219
|
+
|
220
|
+
return new OperatorNode(node.op, node.fn, [_a, a1]);
|
221
221
|
} else if ((0, _is.isFunctionNode)(node)) {
|
222
222
|
return new FunctionNode(simplifyCore(node.fn), node.args.map(function (n) {
|
223
223
|
return simplifyCore(n, options);
|
@@ -0,0 +1,88 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createSymbolicEqual = void 0;
|
7
|
+
|
8
|
+
var _is = require("../../utils/is.js");
|
9
|
+
|
10
|
+
var _factory = require("../../utils/factory.js");
|
11
|
+
|
12
|
+
var name = 'symbolicEqual';
|
13
|
+
var dependencies = ['parse', 'simplify', 'typed', 'OperatorNode'];
|
14
|
+
var createSymbolicEqual = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
15
|
+
var parse = _ref.parse,
|
16
|
+
simplify = _ref.simplify,
|
17
|
+
typed = _ref.typed,
|
18
|
+
OperatorNode = _ref.OperatorNode;
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Attempts to determine if two expressions are symbolically equal, i.e.
|
22
|
+
* one is the result of valid algebraic manipulations on the other.
|
23
|
+
* Currently, this simply checks if the difference of the two expressions
|
24
|
+
* simplifies down to 0. So there are two important caveats:
|
25
|
+
* 1. whether two expressions are symbolically equal depends on the
|
26
|
+
* manipulations allowed. Therefore, this function takes an optional
|
27
|
+
* third argument, which are the options that control the behavior
|
28
|
+
* as documented for the `simplify()` function.
|
29
|
+
* 2. it is in general intractable to find the minimal simplification of
|
30
|
+
* an arbitrarily complicated expression. So while a `true` value
|
31
|
+
* of `symbolicEqual` ensures that the two expressions can be manipulated
|
32
|
+
* to match each other, a `false` value does not absolutely rule this out.
|
33
|
+
*
|
34
|
+
* Syntax:
|
35
|
+
*
|
36
|
+
* symbolicEqual(expr1, expr2)
|
37
|
+
* symbolicEqual(expr1, expr2, options)
|
38
|
+
*
|
39
|
+
* Examples:
|
40
|
+
*
|
41
|
+
* symbolicEqual('x*y', 'y*x') // true
|
42
|
+
* symbolicEqual('x*y', 'y*x', {context: {multiply: {commutative: false}}})
|
43
|
+
* //false
|
44
|
+
* symbolicEqual('x/y', '(y*x^(-1))^(-1)') // true
|
45
|
+
* symbolicEqual('abs(x)','x') // false
|
46
|
+
* symbolicEqual('abs(x)','x', simplify.positiveContext) // true
|
47
|
+
*
|
48
|
+
* See also:
|
49
|
+
*
|
50
|
+
* simplify, evaluate
|
51
|
+
*
|
52
|
+
* @param {Node|string} expr1 The first expression to compare
|
53
|
+
* @param {Node|string} expr2 The second expression to compare
|
54
|
+
* @param {Object} [options] Optional option object, passed to simplify
|
55
|
+
* @returns {boolean}
|
56
|
+
* Returns true if a valid manipulation making the expressions equal
|
57
|
+
* is found.
|
58
|
+
*/
|
59
|
+
return typed(name, {
|
60
|
+
'string, string': function stringString(s1, s2) {
|
61
|
+
return this(parse(s1), parse(s2), {});
|
62
|
+
},
|
63
|
+
'string, string, Object': function stringStringObject(s1, s2, options) {
|
64
|
+
return this(parse(s1), parse(s2), options);
|
65
|
+
},
|
66
|
+
'Node, string': function NodeString(e1, s2) {
|
67
|
+
return this(e1, parse(s2), {});
|
68
|
+
},
|
69
|
+
'Node, string, Object': function NodeStringObject(e1, s2, options) {
|
70
|
+
return this(e1, parse(s2), options);
|
71
|
+
},
|
72
|
+
'string, Node': function stringNode(s1, e2) {
|
73
|
+
return this(parse(s1), e2, {});
|
74
|
+
},
|
75
|
+
'string, Node, Object': function stringNodeObject(s1, e2, options) {
|
76
|
+
return this(parse(s1), e2, options);
|
77
|
+
},
|
78
|
+
'Node, Node': function NodeNode(e1, e2) {
|
79
|
+
return this(e1, e2, {});
|
80
|
+
},
|
81
|
+
'Node, Node, Object': function NodeNodeObject(e1, e2, options) {
|
82
|
+
var diff = new OperatorNode('-', 'subtract', [e1, e2]);
|
83
|
+
var simplified = simplify(diff, {}, options);
|
84
|
+
return (0, _is.isConstantNode)(simplified) && !simplified.value;
|
85
|
+
}
|
86
|
+
});
|
87
|
+
});
|
88
|
+
exports.createSymbolicEqual = createSymbolicEqual;
|