mathjs 10.2.0 → 10.4.1
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 +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;
|