@pie-framework/math-validation 1.4.2 → 2.0.0-next.20261110063142
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/LICENSE +233 -0
- package/README.md +41 -110
- package/dist/conversion/ast-to-mathjs.d.ts +3 -0
- package/dist/conversion/error.d.ts +4 -0
- package/dist/conversion/flatten.d.ts +1 -0
- package/{lib → dist}/conversion/latex-to-ast.d.ts +14 -13
- package/{lib → dist}/conversion/lexer.d.ts +7 -7
- package/dist/difference.d.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1594 -0
- package/dist/latex-equal.d.ts +2 -0
- package/dist/literal/index.d.ts +3 -0
- package/dist/log.d.ts +1 -0
- package/dist/mathjs.d.ts +11 -0
- package/{lib → dist}/node-sort.d.ts +1 -1
- package/dist/options.d.ts +13 -0
- package/{lib → dist}/symbolic/compare-compound-inequations.d.ts +4 -4
- package/{lib → dist}/symbolic/compare-equations.d.ts +1 -1
- package/dist/symbolic/index.d.ts +1 -0
- package/dist/symbolic/simplify.d.ts +2 -0
- package/{lib → dist}/symbolic/utils.d.ts +8 -4
- package/dist/value.d.ts +6 -0
- package/package.json +32 -53
- package/lib/conversion/ast-to-mathjs.d.ts +0 -12
- package/lib/conversion/ast-to-mathjs.js +0 -329
- package/lib/conversion/ast-to-mathjs.js.map +0 -1
- package/lib/conversion/error.d.ts +0 -5
- package/lib/conversion/error.js +0 -13
- package/lib/conversion/error.js.map +0 -1
- package/lib/conversion/flatten.d.ts +0 -12
- package/lib/conversion/flatten.js +0 -103
- package/lib/conversion/flatten.js.map +0 -1
- package/lib/conversion/latex-to-ast.js +0 -1479
- package/lib/conversion/latex-to-ast.js.map +0 -1
- package/lib/conversion/lexer.js +0 -135
- package/lib/conversion/lexer.js.map +0 -1
- package/lib/conversion/util.d.ts +0 -3
- package/lib/conversion/util.js +0 -36
- package/lib/conversion/util.js.map +0 -1
- package/lib/demo.d.ts +0 -4
- package/lib/demo.js +0 -173
- package/lib/demo.js.map +0 -1
- package/lib/difference.d.ts +0 -2
- package/lib/difference.js +0 -24
- package/lib/difference.js.map +0 -1
- package/lib/index.d.ts +0 -5
- package/lib/index.js +0 -9
- package/lib/index.js.map +0 -1
- package/lib/latex-equal.d.ts +0 -10
- package/lib/latex-equal.js +0 -41
- package/lib/latex-equal.js.map +0 -1
- package/lib/literal/index.d.ts +0 -10
- package/lib/literal/index.js +0 -22
- package/lib/literal/index.js.map +0 -1
- package/lib/log.d.ts +0 -1
- package/lib/log.js +0 -14
- package/lib/log.js.map +0 -1
- package/lib/mathjs.d.ts +0 -3
- package/lib/mathjs.js +0 -9
- package/lib/mathjs.js.map +0 -1
- package/lib/node-sort.js +0 -236
- package/lib/node-sort.js.map +0 -1
- package/lib/symbolic/compare-compound-inequations.js +0 -68
- package/lib/symbolic/compare-compound-inequations.js.map +0 -1
- package/lib/symbolic/compare-equations.js +0 -108
- package/lib/symbolic/compare-equations.js.map +0 -1
- package/lib/symbolic/index.d.ts +0 -4
- package/lib/symbolic/index.js +0 -215
- package/lib/symbolic/index.js.map +0 -1
- package/lib/symbolic/utils.js +0 -207
- package/lib/symbolic/utils.js.map +0 -1
package/lib/log.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.logger = void 0;
|
|
4
|
-
const logger = (name) => {
|
|
5
|
-
if (typeof process !== "undefined" && process.env.NODE_ENV === "test") {
|
|
6
|
-
const debug = require("debug");
|
|
7
|
-
return debug(name);
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
return () => { };
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
exports.logger = logger;
|
|
14
|
-
//# sourceMappingURL=log.js.map
|
package/lib/log.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":";;;AAAO,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;IACrC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;QACrE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;KACpB;SAAM;QACL,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;KACjB;AACH,CAAC,CAAC;AAPW,QAAA,MAAM,UAOjB"}
|
package/lib/mathjs.d.ts
DELETED
package/lib/mathjs.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.replacer = exports.parse = exports.mathjs = void 0;
|
|
4
|
-
const mathjs_1 = require("mathjs");
|
|
5
|
-
exports.mathjs = mathjs_1.create(mathjs_1.all, { number: "Fraction" });
|
|
6
|
-
exports.parse = exports.mathjs.parse;
|
|
7
|
-
// @ts-ignore
|
|
8
|
-
exports.replacer = exports.mathjs.replacer;
|
|
9
|
-
//# sourceMappingURL=mathjs.js.map
|
package/lib/mathjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mathjs.js","sourceRoot":"","sources":["../src/mathjs.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AACxB,QAAA,MAAM,GAAG,eAAM,CAAC,YAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3C,aAAK,GAAK,cAAM,OAAC;AAEhC,aAAa;AACA,QAAA,QAAQ,GAAG,cAAM,CAAC,QAAQ,CAAC"}
|
package/lib/node-sort.js
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sort = exports.sortRelationalNode = exports.flattenNode = void 0;
|
|
4
|
-
const log_1 = require("./log");
|
|
5
|
-
const mathjs_1 = require("./mathjs");
|
|
6
|
-
const m = mathjs_1.mathjs;
|
|
7
|
-
const log = log_1.logger("mv:node-sort");
|
|
8
|
-
//import { string } from "mathjs";
|
|
9
|
-
/**
|
|
10
|
-
* The plan with node sort was to sort all the nodes in an expression where possible
|
|
11
|
-
* This means any commutative operators aka + and *.
|
|
12
|
-
*
|
|
13
|
-
* With symbols sorted - we shoud be able to call `node.equals(other)` and avoid having to call evaluate.
|
|
14
|
-
*/
|
|
15
|
-
const newCompare = (a, b) => {
|
|
16
|
-
// log(a.type);
|
|
17
|
-
log("[compareNodes]: a:", a.toString(), a.type);
|
|
18
|
-
log("[compareNodes]: b:", b.toString(), b.type);
|
|
19
|
-
if (a.isSymbolNode && b.isSymbolNode) {
|
|
20
|
-
// log(a.name, "> ", b.name);
|
|
21
|
-
return a.name.localeCompare(b.name);
|
|
22
|
-
}
|
|
23
|
-
// both constants - sort by value
|
|
24
|
-
if (a.isConstantNode && b.isConstantNode) {
|
|
25
|
-
log("a.value", a.value);
|
|
26
|
-
log("b.value", b.value);
|
|
27
|
-
return a.value - b.value; //(b.name);
|
|
28
|
-
}
|
|
29
|
-
// constants before any other node
|
|
30
|
-
if (a.isConstantNode && !b.isConstantNode) {
|
|
31
|
-
return -1;
|
|
32
|
-
}
|
|
33
|
-
if (b.isConstantNode && !a.isConstantNode) {
|
|
34
|
-
return 1;
|
|
35
|
-
}
|
|
36
|
-
// symbolNode before operatorNode
|
|
37
|
-
if (a.isSymbolNode && (b.isOperatorNode || b.isFunctionNode)) {
|
|
38
|
-
return -1;
|
|
39
|
-
}
|
|
40
|
-
if (b.isSymbolNode && (a.isOperatorNode || b.isFunctionNode)) {
|
|
41
|
-
return 1;
|
|
42
|
-
}
|
|
43
|
-
if (a.isOperatorNode && b.isOperatorNode) {
|
|
44
|
-
const localeCompareResult = a.args
|
|
45
|
-
.toString()
|
|
46
|
-
.localeCompare(b.args.toString());
|
|
47
|
-
return -localeCompareResult;
|
|
48
|
-
}
|
|
49
|
-
if (!a.isFunctionNode && b.isFunctionNode) {
|
|
50
|
-
return -1;
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
const applySort = (node) => {
|
|
54
|
-
// log("node: ", node.toString());
|
|
55
|
-
// log("path: ", path);
|
|
56
|
-
// log("parent: ", parent);
|
|
57
|
-
if (node.fn === "add" || node.fn === "multiply") {
|
|
58
|
-
node.args = node.args.sort(newCompare);
|
|
59
|
-
node.args = node.args.map(applySort);
|
|
60
|
-
}
|
|
61
|
-
return node;
|
|
62
|
-
};
|
|
63
|
-
const firstChildOperator = (args, operator) => {
|
|
64
|
-
let result = false;
|
|
65
|
-
args.forEach((arg) => {
|
|
66
|
-
if (arg.fn === operator) {
|
|
67
|
-
result = true;
|
|
68
|
-
}
|
|
69
|
-
return result;
|
|
70
|
-
});
|
|
71
|
-
return result;
|
|
72
|
-
};
|
|
73
|
-
const flattenNode = (node) => {
|
|
74
|
-
while (node.isParenthesisNode && node.content) {
|
|
75
|
-
node = node.content;
|
|
76
|
-
}
|
|
77
|
-
node = node.transform((currentNode, path, parent) => {
|
|
78
|
-
if (currentNode.isParenthesisNode &&
|
|
79
|
-
((parent === null || parent === void 0 ? void 0 : parent.op) != "*" ||
|
|
80
|
-
((parent === null || parent === void 0 ? void 0 : parent.op) == "*" && currentNode.content.op != "+"))) {
|
|
81
|
-
while (currentNode.isParenthesisNode)
|
|
82
|
-
currentNode = currentNode.content;
|
|
83
|
-
}
|
|
84
|
-
return currentNode;
|
|
85
|
-
});
|
|
86
|
-
if (node.fn === "multiply" && node["implicit"]) {
|
|
87
|
-
node["implicit"] = false;
|
|
88
|
-
}
|
|
89
|
-
let resultNode = node;
|
|
90
|
-
resultNode = resultNode.transform((currentNode, path, parent) => {
|
|
91
|
-
while (firstChildOperator(currentNode, currentNode.fn) &&
|
|
92
|
-
!currentNode.isArrayNode) {
|
|
93
|
-
const flatten = currentNode;
|
|
94
|
-
flatten.traverse((node, path, parent) => {
|
|
95
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.fn) === node.fn) {
|
|
96
|
-
const indexToRemove = path.replace(/[^0-9]/g, "");
|
|
97
|
-
parent.args.splice(+indexToRemove, 1) || [];
|
|
98
|
-
let argstoAdd = parent.args;
|
|
99
|
-
node.args.forEach((arg) => {
|
|
100
|
-
argstoAdd.push(arg);
|
|
101
|
-
});
|
|
102
|
-
node = new m.OperatorNode(node.op, node.fn, argstoAdd);
|
|
103
|
-
if (node.fn === "multiply" && node["implicit"]) {
|
|
104
|
-
node["implicit"] = false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return node;
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
return currentNode;
|
|
111
|
-
});
|
|
112
|
-
resultNode = resultNode.transform((currentNode, path, parent) => {
|
|
113
|
-
if (currentNode.fn === "multiply" &&
|
|
114
|
-
firstChildOperator(currentNode.args, "divide")) {
|
|
115
|
-
let divisionNode = currentNode;
|
|
116
|
-
if (divisionNode.fn === "multiply" &&
|
|
117
|
-
firstChildOperator(divisionNode, "divide")) {
|
|
118
|
-
let newNode;
|
|
119
|
-
divisionNode = divisionNode.traverse((node, path, parent) => {
|
|
120
|
-
if (parent && parent.fn === "multiply" && node.fn === "divide") {
|
|
121
|
-
if (node.args[0].isOperatorNode) {
|
|
122
|
-
parent.args.forEach((arg) => {
|
|
123
|
-
if (!arg.isOperatorNode) {
|
|
124
|
-
node.args[0].args.push(arg);
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
const newArgs = [];
|
|
130
|
-
newArgs.push(node.args[0]);
|
|
131
|
-
parent.args.forEach((arg) => {
|
|
132
|
-
if (!arg.isOperatorNode) {
|
|
133
|
-
newArgs.push(arg);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
node.args[0] = new m.OperatorNode("*", "multiply", newArgs);
|
|
137
|
-
}
|
|
138
|
-
newNode = node;
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return newNode;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
currentNode = currentNode;
|
|
146
|
-
}
|
|
147
|
-
return currentNode;
|
|
148
|
-
});
|
|
149
|
-
return resultNode;
|
|
150
|
-
};
|
|
151
|
-
exports.flattenNode = flattenNode;
|
|
152
|
-
const sortRelationalNode = (node) => {
|
|
153
|
-
log("THIS IS THE START ++++", JSON.stringify(node));
|
|
154
|
-
const smaller = ["smaller", "smallerEq"];
|
|
155
|
-
const bigger = ["larger", "largerEq"];
|
|
156
|
-
const resultNode = node.transform((node, path, parent) => {
|
|
157
|
-
let reverse = false;
|
|
158
|
-
if (node.conditionals) {
|
|
159
|
-
const smallerAndBigger = smaller.some((small) => node.conditionals.includes(small)) &&
|
|
160
|
-
bigger.some((big) => node.conditionals.includes(big));
|
|
161
|
-
if (node.conditionals.includes("equal")) {
|
|
162
|
-
node.params.sort(newCompare);
|
|
163
|
-
}
|
|
164
|
-
else if (smallerAndBigger && node.params) {
|
|
165
|
-
if (newCompare(node.params[0], node.params[node.params.length - 1]) > -1) {
|
|
166
|
-
node.params.reverse();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
node.conditionals = node.conditionals.map((cond) => {
|
|
171
|
-
if (cond === "smaller") {
|
|
172
|
-
reverse = true;
|
|
173
|
-
cond = "larger";
|
|
174
|
-
}
|
|
175
|
-
else if (cond === "smallerEq") {
|
|
176
|
-
reverse = true;
|
|
177
|
-
cond = "largerEq";
|
|
178
|
-
}
|
|
179
|
-
return cond;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
if (node.params && reverse) {
|
|
184
|
-
node.conditionals.reverse();
|
|
185
|
-
node.params.reverse();
|
|
186
|
-
}
|
|
187
|
-
if (parent && parent.type === "RelationalNode" && node.args) {
|
|
188
|
-
node = exports.sort(node);
|
|
189
|
-
}
|
|
190
|
-
return node;
|
|
191
|
-
});
|
|
192
|
-
return resultNode;
|
|
193
|
-
};
|
|
194
|
-
exports.sortRelationalNode = sortRelationalNode;
|
|
195
|
-
const sort = (node) => {
|
|
196
|
-
let resultNode = node;
|
|
197
|
-
if (node.type === "RelationalNode") {
|
|
198
|
-
return exports.sortRelationalNode(node);
|
|
199
|
-
}
|
|
200
|
-
if (node.isOperatorNode && node.fn === "smaller") {
|
|
201
|
-
node.op = ">";
|
|
202
|
-
node.fn = "larger";
|
|
203
|
-
node.args = node.args.reverse();
|
|
204
|
-
}
|
|
205
|
-
if (node.isOperatorNode && node.fn === "smallerEq") {
|
|
206
|
-
node.op = ">=";
|
|
207
|
-
node.fn = "largerEq";
|
|
208
|
-
node.args = node.args.reverse();
|
|
209
|
-
}
|
|
210
|
-
const relationOperators = "=|NE|≃|≈|≈|≉|~|≃|≁|≅|≆";
|
|
211
|
-
if (node.isFunctionNode &&
|
|
212
|
-
// @ts-ignore
|
|
213
|
-
node.fn.name.match(relationOperators)) {
|
|
214
|
-
node.args = node.args.sort(newCompare);
|
|
215
|
-
}
|
|
216
|
-
if (node.isOperatorNode &&
|
|
217
|
-
(node.fn == "larger" ||
|
|
218
|
-
node.fn == "largerEq" ||
|
|
219
|
-
node.fn == "equal" ||
|
|
220
|
-
node.fn == "unequal")) {
|
|
221
|
-
node.args = node.args.map(exports.sort);
|
|
222
|
-
if (node.fn === "equal" || node.fn === "unequal") {
|
|
223
|
-
node.args = node.args.sort(newCompare);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
if (node.isArrayNode) {
|
|
227
|
-
// @ts-ignore
|
|
228
|
-
node.items = node.items.sort(newCompare);
|
|
229
|
-
return node;
|
|
230
|
-
}
|
|
231
|
-
const flattened = exports.flattenNode(node);
|
|
232
|
-
resultNode = flattened.transform(applySort);
|
|
233
|
-
return resultNode;
|
|
234
|
-
};
|
|
235
|
-
exports.sort = sort;
|
|
236
|
-
//# sourceMappingURL=node-sort.js.map
|
package/lib/node-sort.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"node-sort.js","sourceRoot":"","sources":["../src/node-sort.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compareCompoundInequations = exports.getLimit = exports.splitInequality = void 0;
|
|
4
|
-
const mathjs_1 = require("../mathjs");
|
|
5
|
-
const utils_1 = require("./utils");
|
|
6
|
-
const m = mathjs_1.mathjs;
|
|
7
|
-
const operation = (signName) => {
|
|
8
|
-
switch (signName) {
|
|
9
|
-
case "smaller":
|
|
10
|
-
return "<";
|
|
11
|
-
case "smallerEq":
|
|
12
|
-
return "<=";
|
|
13
|
-
case "larger":
|
|
14
|
-
return ">";
|
|
15
|
-
case "largerEq":
|
|
16
|
-
return ">=";
|
|
17
|
-
case "equal":
|
|
18
|
-
return "==";
|
|
19
|
-
case "unequal":
|
|
20
|
-
return "!=";
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
// splitInequality takes in a RelationalNode with 2 conditionals and 3 params and returns 2 operatorNodes each containing a 2-way inequality
|
|
24
|
-
const splitInequality = (compoundInequality) => ({
|
|
25
|
-
left: new m.OperatorNode(operation(compoundInequality.conditionals[0]), compoundInequality.conditionals[0], [compoundInequality.params[0], compoundInequality.params[1]]),
|
|
26
|
-
right: new m.OperatorNode(operation(compoundInequality.conditionals[1]), compoundInequality.conditionals[1], [compoundInequality.params[1], compoundInequality.params[2]]),
|
|
27
|
-
});
|
|
28
|
-
exports.splitInequality = splitInequality;
|
|
29
|
-
// get interval inferior/superior limits
|
|
30
|
-
const getLimit = (expressionsPair, limitType) => {
|
|
31
|
-
const expressionR = utils_1.transformEqualityInExpression(expressionsPair.right);
|
|
32
|
-
const expressionL = utils_1.transformEqualityInExpression(expressionsPair.left);
|
|
33
|
-
const xFirstInequality = utils_1.solveLinearEquation(utils_1.getCoefficients(expressionR, true));
|
|
34
|
-
const xSecondInequality = utils_1.solveLinearEquation(utils_1.getCoefficients(expressionL, true));
|
|
35
|
-
if (limitType === "inferior") {
|
|
36
|
-
return Math.min(xFirstInequality, xSecondInequality);
|
|
37
|
-
}
|
|
38
|
-
return Math.max(xFirstInequality, xSecondInequality);
|
|
39
|
-
};
|
|
40
|
-
exports.getLimit = getLimit;
|
|
41
|
-
const compareCompoundInequations = (firstInequation, secondInequation) => {
|
|
42
|
-
if (!utils_1.expressionsCanBeCompared(firstInequation, secondInequation)) {
|
|
43
|
-
return false;
|
|
44
|
-
}
|
|
45
|
-
const firstInequalityVariablesName = utils_1.getVariables(firstInequation);
|
|
46
|
-
const secondInequalityVariablesName = utils_1.getVariables(secondInequation);
|
|
47
|
-
if (!utils_1.equationsHaveTheSameVariables(firstInequalityVariablesName, secondInequalityVariablesName) &&
|
|
48
|
-
(firstInequalityVariablesName === null || firstInequalityVariablesName === void 0 ? void 0 : firstInequalityVariablesName.length) === 1) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
const firstInequalities = exports.splitInequality(firstInequation);
|
|
52
|
-
const secondInequalities = exports.splitInequality(secondInequation);
|
|
53
|
-
// find out interval for inequality solution;
|
|
54
|
-
// it does not matter whether we have an open, or half-open/half-close interval, the signs are already compared and at this point they match
|
|
55
|
-
let firstInequalitiesSolution = {
|
|
56
|
-
min: exports.getLimit(firstInequalities, "inferior"),
|
|
57
|
-
max: exports.getLimit(firstInequalities, "superior"),
|
|
58
|
-
};
|
|
59
|
-
let secondInequalitiesSolution = {
|
|
60
|
-
min: exports.getLimit(secondInequalities, "inferior"),
|
|
61
|
-
max: exports.getLimit(secondInequalities, "superior"),
|
|
62
|
-
};
|
|
63
|
-
// if interval limits are the same for both inequalities then we can say that inequalities are equivalent
|
|
64
|
-
return (firstInequalitiesSolution.min === secondInequalitiesSolution.min &&
|
|
65
|
-
firstInequalitiesSolution.max === secondInequalitiesSolution.max);
|
|
66
|
-
};
|
|
67
|
-
exports.compareCompoundInequations = compareCompoundInequations;
|
|
68
|
-
//# sourceMappingURL=compare-compound-inequations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare-compound-inequations.js","sourceRoot":"","sources":["../../src/symbolic/compare-compound-inequations.ts"],"names":[],"mappings":";;;AAAA,sCAAmC;AAEnC,mCAOiB;AAEjB,MAAM,CAAC,GAAQ,eAAM,CAAC;AAYtB,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;IACrC,QAAQ,QAAQ,EAAE;QAChB,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC;QACb,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC;QACb,KAAK,UAAU;YACb,OAAO,IAAI,CAAC;QACd,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,IAAI,CAAC;KACf;AACH,CAAC,CAAC;AAEF,4IAA4I;AACrI,MAAM,eAAe,GAAG,CAAC,kBAAuB,EAAY,EAAE,CAAC,CAAC;IACrE,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CACtB,SAAS,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC7C,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAClC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7D;IACD,KAAK,EAAE,IAAI,CAAC,CAAC,YAAY,CACvB,SAAS,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC7C,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,EAClC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC7D;CACF,CAAC,CAAC;AAXU,QAAA,eAAe,mBAWzB;AAEH,wCAAwC;AACjC,MAAM,QAAQ,GAAG,CACtB,eAAyB,EACzB,SAAiB,EACT,EAAE;IACV,MAAM,WAAW,GAAG,qCAA6B,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,qCAA6B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAExE,MAAM,gBAAgB,GAAG,2BAAmB,CAAC,uBAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,2BAAmB,CAAC,uBAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAElF,IAAI,SAAS,KAAK,UAAU,EAAE;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;KACtD;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC,CAAC;AAfW,QAAA,QAAQ,YAenB;AAEK,MAAM,0BAA0B,GAAG,CACxC,eAAoB,EACpB,gBAAqB,EACrB,EAAE;IAEF,IAAI,CAAC,gCAAwB,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE;QAChE,OAAO,KAAK,CAAC;KACd;IAED,MAAM,4BAA4B,GAAG,oBAAY,CAAC,eAAe,CAAC,CAAC;IACnE,MAAM,6BAA6B,GAAG,oBAAY,CAAC,gBAAgB,CAAC,CAAC;IAErE,IACE,CAAC,qCAA6B,CAC5B,4BAA4B,EAC5B,6BAA6B,CAC9B;QACD,CAAA,4BAA4B,aAA5B,4BAA4B,uBAA5B,4BAA4B,CAAE,MAAM,MAAK,CAAC,EAC1C;QACA,OAAO,KAAK,CAAC;KACd;IAED,MAAM,iBAAiB,GAAG,uBAAe,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,kBAAkB,GAAG,uBAAe,CAAC,gBAAgB,CAAC,CAAC;IAE7D,6CAA6C;IAC7C,4IAA4I;IAC5I,IAAI,yBAAyB,GAAU;QACrC,GAAG,EAAE,gBAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC;QAC5C,GAAG,EAAE,gBAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC;KAC7C,CAAC;IAEF,IAAI,0BAA0B,GAAU;QACtC,GAAG,EAAE,gBAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC;QAC7C,GAAG,EAAE,gBAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC;KAC9C,CAAC;IAEF,yGAAyG;IACzG,OAAO,CACL,yBAAyB,CAAC,GAAG,KAAK,0BAA0B,CAAC,GAAG;QAChE,yBAAyB,CAAC,GAAG,KAAK,0BAA0B,CAAC,GAAG,CACjE,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,0BAA0B,8BA0CrC"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compareEquations = void 0;
|
|
4
|
-
const mathjs_1 = require("../mathjs");
|
|
5
|
-
const utils_1 = require("./utils");
|
|
6
|
-
const m = mathjs_1.mathjs;
|
|
7
|
-
const compareCoefficients = (firstEqCoeff, secondEqCoeff) => Array.isArray(firstEqCoeff) &&
|
|
8
|
-
Array.isArray(secondEqCoeff) &&
|
|
9
|
-
firstEqCoeff.length === secondEqCoeff.length &&
|
|
10
|
-
firstEqCoeff.every((val, index) => val === secondEqCoeff[index]);
|
|
11
|
-
const compareEquations = (firstEquation, secondEquation, isInequality) => {
|
|
12
|
-
let equivalence = false;
|
|
13
|
-
if (utils_1.expressionsCanBeCompared(firstEquation, secondEquation)) {
|
|
14
|
-
let firstExpression = utils_1.transformEqualityInExpression(firstEquation);
|
|
15
|
-
let secondExpression = utils_1.transformEqualityInExpression(secondEquation);
|
|
16
|
-
if (firstExpression.equals(secondExpression)) {
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
let firstEquationVariablesName = utils_1.getVariables(firstExpression);
|
|
20
|
-
let secondEquationVariablesName = utils_1.getVariables(secondExpression);
|
|
21
|
-
if (!utils_1.equationsHaveTheSameVariables(firstEquationVariablesName, secondEquationVariablesName)) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
let firstEquationCoefficients;
|
|
25
|
-
let secondEquationCoefficients;
|
|
26
|
-
if (utils_1.hasSymbolicExponent(firstExpression) ||
|
|
27
|
-
utils_1.hasSymbolicExponent(secondExpression)) {
|
|
28
|
-
const isEquivalent = utils_1.areNumericallyEquivalent(firstExpression, secondExpression, firstEquationVariablesName);
|
|
29
|
-
return isEquivalent;
|
|
30
|
-
}
|
|
31
|
-
if (firstEquationVariablesName.length === 1) {
|
|
32
|
-
firstEquationCoefficients = utils_1.getCoefficients(firstExpression, isInequality);
|
|
33
|
-
secondEquationCoefficients = utils_1.getCoefficients(secondExpression, isInequality);
|
|
34
|
-
// if coefficients are equal, there is no need for further calculations => equations are equivalent
|
|
35
|
-
if (compareCoefficients(firstEquationCoefficients, secondEquationCoefficients)) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
// check for second-order polynomial equation such as ax^2 + bx + c = 0 where a is not zero
|
|
39
|
-
if ((firstEquationCoefficients.length === 3 &&
|
|
40
|
-
secondEquationCoefficients.length === 3 &&
|
|
41
|
-
!isInequality &&
|
|
42
|
-
firstEquationCoefficients[0] !== 0) ||
|
|
43
|
-
(firstEquationCoefficients.length === 4 &&
|
|
44
|
-
firstEquationCoefficients[0] === 0 &&
|
|
45
|
-
secondEquationCoefficients[0] === 0)) {
|
|
46
|
-
if (firstEquationCoefficients[0] === 0) {
|
|
47
|
-
firstEquationCoefficients = firstEquationCoefficients.splice(1, 3);
|
|
48
|
-
secondEquationCoefficients = secondEquationCoefficients.splice(1, 3);
|
|
49
|
-
}
|
|
50
|
-
let rootsFirstEquation = utils_1.solveQuadraticEquation(firstEquationCoefficients);
|
|
51
|
-
let rootsSecondEquation = utils_1.solveQuadraticEquation(secondEquationCoefficients);
|
|
52
|
-
let firstRoot = m.complex(rootsFirstEquation);
|
|
53
|
-
let secondRoot = m.complex(rootsSecondEquation);
|
|
54
|
-
if (rootsFirstEquation[0].im === 0 && rootsFirstEquation[1].im === 0) {
|
|
55
|
-
return ((firstRoot[0].equals(secondRoot[0]) &&
|
|
56
|
-
firstRoot[1].equals(secondRoot[1])) ||
|
|
57
|
-
(firstRoot[0].equals(secondRoot[1]) &&
|
|
58
|
-
firstRoot[1].equals(secondRoot[0])));
|
|
59
|
-
}
|
|
60
|
-
//@ts-ignore
|
|
61
|
-
return (rootsFirstEquation[0].re === rootsSecondEquation[0].re &&
|
|
62
|
-
rootsFirstEquation[1].re === rootsSecondEquation[1].re &&
|
|
63
|
-
rootsFirstEquation[0].im.toFixed(13) ===
|
|
64
|
-
rootsSecondEquation[0].im.toFixed(13) &&
|
|
65
|
-
rootsFirstEquation[1].im.toFixed(13) ===
|
|
66
|
-
rootsSecondEquation[1].im.toFixed(13));
|
|
67
|
-
}
|
|
68
|
-
// if both equations are linear in one variable then we solve "x" for both. If x has the same value then equations are equivalent
|
|
69
|
-
// solve linear equations
|
|
70
|
-
const solutionForFirstEquation = utils_1.solveLinearEquation(firstEquationCoefficients);
|
|
71
|
-
const solutionForSecondEquation = utils_1.solveLinearEquation(secondEquationCoefficients);
|
|
72
|
-
equivalence =
|
|
73
|
-
solutionForFirstEquation === solutionForSecondEquation &&
|
|
74
|
-
solutionForFirstEquation !== undefined;
|
|
75
|
-
}
|
|
76
|
-
// if both equations are linear in two variabled then we give value "1" for both "x". Doing this we get a linear equation in one variable "y". Then we solve "y" for both. If y has the same value then equations are equivalent
|
|
77
|
-
if (firstEquationVariablesName.length === 2) {
|
|
78
|
-
let x = firstEquationVariablesName[0];
|
|
79
|
-
// solve expression for x=1
|
|
80
|
-
let expraNoX = utils_1.setXToOne(firstExpression, x);
|
|
81
|
-
firstEquationCoefficients = utils_1.getCoefficients(expraNoX, isInequality);
|
|
82
|
-
let exprbNoX = utils_1.setXToOne(secondExpression, x);
|
|
83
|
-
secondEquationCoefficients = utils_1.getCoefficients(exprbNoX, isInequality);
|
|
84
|
-
// find y for both equations, where x equals 1
|
|
85
|
-
let yFromFirstExpression = utils_1.solveLinearEquation(firstEquationCoefficients);
|
|
86
|
-
let yFromSecondExpression = utils_1.solveLinearEquation(secondEquationCoefficients);
|
|
87
|
-
// if y has the same value, for the same x then the expressions should be equivalent
|
|
88
|
-
equivalence = yFromFirstExpression === yFromSecondExpression;
|
|
89
|
-
}
|
|
90
|
-
// determine equivalence between 2-way inequalities with 1 or 2 variables:
|
|
91
|
-
// we treat 2-way inequalities the same way as linear equations in 1 or 2 variables; we find out the solutions that solve the inequality then compare them
|
|
92
|
-
// we have one distinct case, when multiplying both parts of an inequality with a negative number, the sign must change direction
|
|
93
|
-
if (equivalence && isInequality) {
|
|
94
|
-
// check if direction should be changed
|
|
95
|
-
return !((m.isPositive(firstEquationCoefficients[0]) &&
|
|
96
|
-
m.isNegative(firstEquationCoefficients[1]) &&
|
|
97
|
-
m.isNegative(secondEquationCoefficients[0]) &&
|
|
98
|
-
m.isPositive(secondEquationCoefficients[1])) ||
|
|
99
|
-
(m.isNegative(firstEquationCoefficients[0]) &&
|
|
100
|
-
m.isPositive(firstEquationCoefficients[1]) &&
|
|
101
|
-
m.isPositive(secondEquationCoefficients[0]) &&
|
|
102
|
-
m.isNegative(secondEquationCoefficients[1])));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return equivalence;
|
|
106
|
-
};
|
|
107
|
-
exports.compareEquations = compareEquations;
|
|
108
|
-
//# sourceMappingURL=compare-equations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compare-equations.js","sourceRoot":"","sources":["../../src/symbolic/compare-equations.ts"],"names":[],"mappings":"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"}
|
package/lib/symbolic/index.d.ts
DELETED