@pie-framework/math-validation 1.4.3 → 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.
Files changed (71) hide show
  1. package/LICENSE +233 -0
  2. package/README.md +41 -110
  3. package/dist/conversion/ast-to-mathjs.d.ts +3 -0
  4. package/dist/conversion/error.d.ts +4 -0
  5. package/dist/conversion/flatten.d.ts +1 -0
  6. package/{lib → dist}/conversion/latex-to-ast.d.ts +13 -12
  7. package/{lib → dist}/conversion/lexer.d.ts +5 -5
  8. package/dist/difference.d.ts +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +1594 -0
  11. package/dist/latex-equal.d.ts +2 -0
  12. package/dist/literal/index.d.ts +3 -0
  13. package/dist/log.d.ts +1 -0
  14. package/dist/mathjs.d.ts +11 -0
  15. package/{lib → dist}/node-sort.d.ts +1 -1
  16. package/dist/options.d.ts +13 -0
  17. package/{lib → dist}/symbolic/compare-compound-inequations.d.ts +2 -2
  18. package/{lib → dist}/symbolic/compare-equations.d.ts +1 -1
  19. package/dist/symbolic/index.d.ts +1 -0
  20. package/dist/symbolic/simplify.d.ts +2 -0
  21. package/{lib → dist}/symbolic/utils.d.ts +3 -3
  22. package/dist/value.d.ts +6 -0
  23. package/package.json +28 -56
  24. package/lib/conversion/ast-to-mathjs.d.ts +0 -12
  25. package/lib/conversion/ast-to-mathjs.js +0 -329
  26. package/lib/conversion/ast-to-mathjs.js.map +0 -1
  27. package/lib/conversion/error.d.ts +0 -5
  28. package/lib/conversion/error.js +0 -13
  29. package/lib/conversion/error.js.map +0 -1
  30. package/lib/conversion/flatten.d.ts +0 -12
  31. package/lib/conversion/flatten.js +0 -103
  32. package/lib/conversion/flatten.js.map +0 -1
  33. package/lib/conversion/latex-to-ast.js +0 -1479
  34. package/lib/conversion/latex-to-ast.js.map +0 -1
  35. package/lib/conversion/lexer.js +0 -135
  36. package/lib/conversion/lexer.js.map +0 -1
  37. package/lib/conversion/util.d.ts +0 -3
  38. package/lib/conversion/util.js +0 -36
  39. package/lib/conversion/util.js.map +0 -1
  40. package/lib/demo.d.ts +0 -4
  41. package/lib/demo.js +0 -173
  42. package/lib/demo.js.map +0 -1
  43. package/lib/difference.d.ts +0 -2
  44. package/lib/difference.js +0 -24
  45. package/lib/difference.js.map +0 -1
  46. package/lib/index.d.ts +0 -5
  47. package/lib/index.js +0 -9
  48. package/lib/index.js.map +0 -1
  49. package/lib/latex-equal.d.ts +0 -10
  50. package/lib/latex-equal.js +0 -41
  51. package/lib/latex-equal.js.map +0 -1
  52. package/lib/literal/index.d.ts +0 -10
  53. package/lib/literal/index.js +0 -22
  54. package/lib/literal/index.js.map +0 -1
  55. package/lib/log.d.ts +0 -1
  56. package/lib/log.js +0 -14
  57. package/lib/log.js.map +0 -1
  58. package/lib/mathjs.d.ts +0 -3
  59. package/lib/mathjs.js +0 -9
  60. package/lib/mathjs.js.map +0 -1
  61. package/lib/node-sort.js +0 -236
  62. package/lib/node-sort.js.map +0 -1
  63. package/lib/symbolic/compare-compound-inequations.js +0 -68
  64. package/lib/symbolic/compare-compound-inequations.js.map +0 -1
  65. package/lib/symbolic/compare-equations.js +0 -106
  66. package/lib/symbolic/compare-equations.js.map +0 -1
  67. package/lib/symbolic/index.d.ts +0 -4
  68. package/lib/symbolic/index.js +0 -340
  69. package/lib/symbolic/index.js.map +0 -1
  70. package/lib/symbolic/utils.js +0 -323
  71. package/lib/symbolic/utils.js.map +0 -1
@@ -1,323 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.equationsHaveTheSameVariables = exports.solveLinearEquation = exports.solveQuadraticEquation = exports.getCoefficients = exports.getVariables = exports.transformEqualityInExpression = exports.areEquationsNumericallyEquivalent = exports.areNumericallyEquivalent = exports.getSamplePoints = exports.hasSymbolicExponent = exports.expressionsCanBeCompared = void 0;
4
- const mathjs_1 = require("../mathjs");
5
- const mathjs_2 = require("mathjs");
6
- const _1 = require("./");
7
- const { simplify } = mathjs_1.mathjs;
8
- const m = mathjs_1.mathjs;
9
- // plain floating-point instance for numeric checks; the shared instance works with fractions
10
- const numeric = (0, mathjs_2.create)(mathjs_2.all);
11
- let simplifyRules = [
12
- { l: "-((n1)*(n2))", r: "(n1)*(n2)" },
13
- { l: "(n1-n2)/n3", r: "n1/n3-n2/n3" },
14
- { l: "(n1+n2)/n3", r: "n1/n3+n2/n3" },
15
- { l: "(n1-n2)*n3/n4", r: "(n1*n3)/n4-(n2*n3)/n4" },
16
- { l: "(n1+n2)*n3/n4", r: "(n1*n3)/n4+(n2*n3)/n4" },
17
- ];
18
- const customRound = (number) => Math.round(number * 10000000000000) / 10000000000000;
19
- // expressions can be compared if we have at least one symbol node and has no function node or array; do not treat math series as equations
20
- const expressionsCanBeCompared = (firstEquation, secondEquation) => {
21
- let noFunctionOrArray = true;
22
- let firstSymbolNode = false;
23
- let symbolNode = false;
24
- let seriesNode = false;
25
- firstEquation.traverse(function (node, path, parent) {
26
- if (node.isSymbolNode) {
27
- firstSymbolNode = true;
28
- seriesNode = seriesNode || node.name.includes("[");
29
- }
30
- noFunctionOrArray =
31
- noFunctionOrArray || node.isFunctionNode || node.isArrayNode;
32
- });
33
- secondEquation.traverse(function (node, path, parent) {
34
- if (node.isFunctionNode || node.isArrayNode) {
35
- noFunctionOrArray = false;
36
- }
37
- if (node.isSymbolNode && firstSymbolNode)
38
- symbolNode = true;
39
- });
40
- return noFunctionOrArray && symbolNode && !seriesNode;
41
- };
42
- exports.expressionsCanBeCompared = expressionsCanBeCompared;
43
- const hasSymbolicExponent = (node) => {
44
- let found = false;
45
- node.traverse((n) => {
46
- var _a;
47
- if (n.isOperatorNode &&
48
- n.op === "^" &&
49
- !((_a = n.args[1]) === null || _a === void 0 ? void 0 : _a.isConstantNode) // Exponent is symbolic or compound
50
- ) {
51
- found = true;
52
- }
53
- });
54
- return found;
55
- };
56
- exports.hasSymbolicExponent = hasSymbolicExponent;
57
- // deterministic pseudo-random generator (mulberry32), so numeric checks give the same result on every run
58
- const seededRandom = (seed) => () => {
59
- seed = (seed + 0x6d2b79f5) | 0;
60
- let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
61
- t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
62
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
63
- };
64
- // sample points where every variable gets its own non-integer value between 0.5 and 4.5 in size,
65
- // so that expressions like x^2 and y^2 can be told apart; the sign is random too,
66
- // so that expressions like |x| and x, or sqrt(x^6) and x^3, can be told apart
67
- const getSamplePoints = (variables, count = 12) => {
68
- const random = seededRandom(443);
69
- return Array.from({ length: count }, () => variables.reduce((acc, v) => {
70
- const size = 0.5 + 4 * random();
71
- acc[v] = random() < 0.5 ? -size : size;
72
- return acc;
73
- }, {}));
74
- };
75
- exports.getSamplePoints = getSamplePoints;
76
- // evaluate an expression at each sample point; NaN where it can't be evaluated to a real number
77
- const evaluateAtPoints = (expr, points) => {
78
- let compiled;
79
- try {
80
- compiled = numeric.compile(expr.toString());
81
- }
82
- catch (_a) {
83
- return points.map(() => NaN);
84
- }
85
- return points.map((scope) => {
86
- try {
87
- const result = compiled.evaluate(Object.assign({}, scope));
88
- return typeof result === "number" ? result : NaN;
89
- }
90
- catch (_a) {
91
- return NaN;
92
- }
93
- });
94
- };
95
- const areClose = (a, b, tolerance) => Math.abs(a - b) <= tolerance * Math.max(1, Math.abs(a), Math.abs(b));
96
- // points where either side can't be evaluated to a real number (e.g. sqrt of a negative number) are skipped
97
- const areNumericallyEquivalent = (exprA, exprB, variables, tolerance = 1e-10) => {
98
- const points = (0, exports.getSamplePoints)(variables);
99
- const valuesA = evaluateAtPoints(exprA, points);
100
- const valuesB = evaluateAtPoints(exprB, points);
101
- const compared = valuesA.filter((a, i) => Number.isFinite(a) && Number.isFinite(valuesB[i]));
102
- return (compared.length >= 3 &&
103
- valuesA.every((a, i) => !Number.isFinite(a) ||
104
- !Number.isFinite(valuesB[i]) ||
105
- areClose(a, valuesB[i], tolerance)));
106
- };
107
- exports.areNumericallyEquivalent = areNumericallyEquivalent;
108
- // exponent combinations for a factor such as x, 1/y or x*y^2, used when both sides of an equation were multiplied by variables
109
- const getVariableFactors = (variables, maxPower) => variables.reduce((factors, v) => factors.reduce((acc, factor) => acc.concat(Array.from({ length: 2 * maxPower + 1 }, (_, i) => (Object.assign(Object.assign({}, factor), { [v]: i - maxPower })))), []), [{}]);
110
- const haveProportionalValues = (firstExpression, secondExpression, variables, { allowVariableFactor = false, positiveOnly = false, } = {}) => {
111
- const tolerance = 1e-9;
112
- const points = (0, exports.getSamplePoints)(variables);
113
- const firstValues = evaluateAtPoints(firstExpression, points);
114
- const secondValues = evaluateAtPoints(secondExpression, points);
115
- const ratios = [];
116
- for (let i = 0; i < points.length; i++) {
117
- const f = firstValues[i];
118
- const g = secondValues[i];
119
- if (!Number.isFinite(f) || !Number.isFinite(g)) {
120
- continue;
121
- }
122
- const fIsZero = Math.abs(f) < tolerance;
123
- const gIsZero = Math.abs(g) < tolerance;
124
- // the point lies on both curves
125
- if (fIsZero && gIsZero) {
126
- continue;
127
- }
128
- // the point lies on only one of the curves
129
- if (fIsZero || gIsZero) {
130
- return false;
131
- }
132
- ratios.push({ point: points[i], ratio: f / g });
133
- }
134
- // not enough points to decide
135
- if (ratios.length < 3) {
136
- return false;
137
- }
138
- // for inequalities only even powers are allowed, since an odd power of a variable can be negative and reverse the sign
139
- const factors = allowVariableFactor
140
- ? getVariableFactors(variables, 2).filter((factor) => !positiveOnly || Object.values(factor).every((power) => power % 2 === 0))
141
- : [{}];
142
- return factors.some((factor) => {
143
- const scaled = ratios.map(({ point, ratio }) => Object.keys(factor).reduce((acc, v) => acc / Math.pow(point[v], factor[v]), ratio));
144
- return ((!positiveOnly || scaled[0] > 0) &&
145
- scaled.every((r) => areClose(r, scaled[0], tolerance)));
146
- });
147
- };
148
- // the numerator N of F written as a single fraction N/D, or undefined when F has no variable denominator;
149
- // F = 0 exactly where N = 0, so this undoes both sides being multiplied by an expression such as x-2
150
- // rationalize expands powers, which gets very slow for high powers or long expressions, so those are left as they are
151
- const MAX_NUMERATOR_POWER = 4;
152
- const MAX_NUMERATOR_NODES = 60;
153
- const isTooLargeToRationalize = (expr) => {
154
- let nodes = 0;
155
- let tooLarge = false;
156
- expr.traverse((n) => {
157
- var _a;
158
- nodes++;
159
- tooLarge =
160
- tooLarge ||
161
- (n.isOperatorNode &&
162
- n.op === "^" &&
163
- ((_a = n.args[1]) === null || _a === void 0 ? void 0 : _a.isConstantNode) &&
164
- Math.abs(Number(n.args[1].value)) > MAX_NUMERATOR_POWER);
165
- });
166
- return tooLarge || nodes > MAX_NUMERATOR_NODES;
167
- };
168
- const getNumerator = (expr) => {
169
- if (isTooLargeToRationalize(expr)) {
170
- return undefined;
171
- }
172
- try {
173
- const { numerator, denominator } = numeric.rationalize(expr.toString(), {}, true);
174
- return denominator ? numerator : undefined;
175
- }
176
- catch (_a) {
177
- return undefined;
178
- }
179
- };
180
- // two equations F = 0 and G = 0 describe the same solutions when F is a nonzero constant multiple of G;
181
- // with allowVariableFactor, F may also be G multiplied by a power of each variable (e.g. both sides multiplied by x)
182
- // set positiveOnly for inequalities, where multiplying by a negative number reverses the sign
183
- const areEquationsNumericallyEquivalent = (firstExpression, secondExpression, variables, options = {}) => {
184
- if (haveProportionalValues(firstExpression, secondExpression, variables, options)) {
185
- return true;
186
- }
187
- // multiplying both sides of an inequality by an expression may reverse the sign, so only equations compare numerators
188
- if (options.positiveOnly) {
189
- return false;
190
- }
191
- const firstNumerator = getNumerator(firstExpression);
192
- const secondNumerator = getNumerator(secondExpression);
193
- return ((firstNumerator !== undefined || secondNumerator !== undefined) &&
194
- haveProportionalValues(firstNumerator || firstExpression, secondNumerator || secondExpression, variables, options));
195
- };
196
- exports.areEquationsNumericallyEquivalent = areEquationsNumericallyEquivalent;
197
- // move the terms of the equations to the left hand side
198
- const transformEqualityInExpression = (equality) =>
199
- // remove added/subtracted numbers/variables from both sides of the equation
200
- (0, _1.simplify)(new m.OperatorNode("-", "subtract", equality.args));
201
- exports.transformEqualityInExpression = transformEqualityInExpression;
202
- // check if equation is valid and find out the number of variables and their name
203
- const getVariables = (equation) => {
204
- let variableNames = [];
205
- equation.traverse(function (node, path, parent) {
206
- if (node.isSymbolNode &&
207
- (node === null || node === void 0 ? void 0 : node.name.length) === 1 &&
208
- !variableNames.includes(node.name)) {
209
- variableNames.push(node.name);
210
- }
211
- });
212
- return variableNames.sort();
213
- };
214
- exports.getVariables = getVariables;
215
- const getCoefficients = (equation, isInequality) => {
216
- // coefficients will be determined if equation has only one variable
217
- try {
218
- const rationalizedEquation = m.rationalize(equation, {}, true);
219
- let coefficients = rationalizedEquation.coefficients;
220
- let allNegatives = coefficients.every((coefficient) => coefficient < 0);
221
- return allNegatives
222
- ? coefficients.map((coefficient) => Math.abs(coefficient))
223
- : coefficients;
224
- }
225
- catch (e) {
226
- // rationalize may fail if variable is isolated in a fraction
227
- // we give it another try to rationalize after applying a new round of simplify to separate the variable
228
- if (isInequality) {
229
- equation = simplify(equation, simplifyRules);
230
- }
231
- else {
232
- simplifyRules.push({ l: "-(n)", r: "n" });
233
- equation = simplify(equation, simplifyRules);
234
- }
235
- try {
236
- const rationalizedEquation = m.rationalize(equation, {}, true);
237
- return rationalizedEquation.coefficients;
238
- }
239
- catch (e) { }
240
- }
241
- return [1, 0];
242
- };
243
- exports.getCoefficients = getCoefficients;
244
- // quadratic equation solver for a second-order polynomial equation such as ax^2 + bx + c = 0 for x, where a is not zero
245
- // quadratic formula
246
- const solveQuadraticEquation = (coefficients) => {
247
- const [c, b, a] = coefficients;
248
- const discriminant = b * b - 4 * a * c;
249
- let addDiscriminant;
250
- let subtractDiscriminant;
251
- try {
252
- addDiscriminant = m.compile(m.fraction(-b + m.sqrt(discriminant)) / (2 * a));
253
- }
254
- catch (_a) {
255
- addDiscriminant = m.compile("(-b+sqrt(discriminant))/(2*a)");
256
- }
257
- try {
258
- subtractDiscriminant = m.compile(m.fraction(-b - m.sqrt(discriminant)) / (2 * a));
259
- }
260
- catch (_b) {
261
- subtractDiscriminant = m.compile("(-b-sqrt(discriminant))/(2*a)");
262
- }
263
- let firstRoot = addDiscriminant.evaluate({
264
- discriminant: discriminant,
265
- a: a,
266
- b: b,
267
- });
268
- let secondRoot = subtractDiscriminant.evaluate({
269
- discriminant: discriminant,
270
- a: a,
271
- b: b,
272
- });
273
- // roots are real numbers
274
- if (!firstRoot.im) {
275
- firstRoot = customRound(firstRoot);
276
- secondRoot = customRound(secondRoot);
277
- return [
278
- { re: firstRoot, im: 0 },
279
- { re: secondRoot, im: 0 },
280
- ];
281
- }
282
- return [
283
- {
284
- re: customRound(firstRoot.re),
285
- im: customRound(firstRoot.im),
286
- },
287
- {
288
- re: customRound(secondRoot.re),
289
- im: customRound(secondRoot.im),
290
- },
291
- ];
292
- };
293
- exports.solveQuadraticEquation = solveQuadraticEquation;
294
- // solve x
295
- const solveLinearEquation = (coefficients) => {
296
- let result;
297
- if (!coefficients) {
298
- return undefined;
299
- }
300
- if (coefficients.length === 3 && coefficients[0] === 0) {
301
- coefficients = coefficients.splice(1, 2);
302
- }
303
- if (coefficients.length === 2) {
304
- if (coefficients[0] === 0 && coefficients[1] === 0) {
305
- return Infinity;
306
- }
307
- if (coefficients[0] === 0) {
308
- return 0;
309
- }
310
- // equation with no solution : if coefficient for x is 0 => division by zero => result == -Infinity
311
- result = customRound(m.divide(coefficients[0], -1 * coefficients[1]));
312
- }
313
- return result;
314
- };
315
- exports.solveLinearEquation = solveLinearEquation;
316
- const equationsHaveTheSameVariables = (firstEquationVariables, secondEquationVariables) => {
317
- return (Array.isArray(firstEquationVariables) &&
318
- Array.isArray(secondEquationVariables) &&
319
- firstEquationVariables.length === secondEquationVariables.length &&
320
- firstEquationVariables.every((variable, index) => variable === secondEquationVariables[index]));
321
- };
322
- exports.equationsHaveTheSameVariables = equationsHaveTheSameVariables;
323
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/symbolic/utils.ts"],"names":[],"mappings":"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"}