math-exercises 2.0.6 → 2.0.9
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/lib/exercises/calculLitteral/equation/index.d.ts +0 -2
- package/lib/exercises/calculLitteral/equation/index.d.ts.map +1 -1
- package/lib/exercises/calculLitteral/equation/index.js +0 -2
- package/lib/exercises/calculLitteral/simplifying/index.d.ts +0 -2
- package/lib/exercises/calculLitteral/simplifying/index.d.ts.map +1 -1
- package/lib/exercises/calculLitteral/simplifying/index.js +0 -2
- package/lib/exercises/complex/argumentFromAlgebraicComplex.d.ts +6 -0
- package/lib/exercises/complex/argumentFromAlgebraicComplex.d.ts.map +1 -1
- package/lib/exercises/complex/argumentFromAlgebraicComplex.js +62 -51
- package/lib/exercises/complex/index.d.ts +1 -0
- package/lib/exercises/complex/index.d.ts.map +1 -1
- package/lib/exercises/complex/index.js +1 -0
- package/lib/exercises/exercise.d.ts +1 -1
- package/lib/exercises/exercise.d.ts.map +1 -1
- package/lib/exercises/functions/basics/graphicEquation.d.ts +8 -0
- package/lib/exercises/functions/basics/graphicEquation.d.ts.map +1 -0
- package/lib/exercises/functions/basics/graphicEquation.js +109 -0
- package/lib/exercises/functions/basics/graphicInequation.d.ts +16 -0
- package/lib/exercises/functions/basics/graphicInequation.d.ts.map +1 -0
- package/lib/exercises/functions/basics/graphicInequation.js +147 -0
- package/lib/exercises/functions/basics/index.d.ts +2 -0
- package/lib/exercises/functions/basics/index.d.ts.map +1 -1
- package/lib/exercises/functions/basics/index.js +2 -0
- package/lib/exercises/functions/exponential/expEquation.d.ts +9 -0
- package/lib/exercises/functions/exponential/expEquation.d.ts.map +1 -0
- package/lib/exercises/functions/exponential/expEquation.js +75 -0
- package/lib/exercises/functions/exponential/expSimplifiying.d.ts +10 -0
- package/lib/exercises/functions/exponential/expSimplifiying.d.ts.map +1 -0
- package/lib/exercises/functions/exponential/expSimplifiying.js +116 -0
- package/lib/exercises/functions/exponential/index.d.ts +3 -0
- package/lib/exercises/functions/exponential/index.d.ts.map +1 -0
- package/lib/exercises/functions/exponential/index.js +18 -0
- package/lib/exercises/functions/index.d.ts +2 -0
- package/lib/exercises/functions/index.d.ts.map +1 -1
- package/lib/exercises/functions/index.js +2 -0
- package/lib/exercises/functions/logarithm/index.d.ts +5 -0
- package/lib/exercises/functions/logarithm/index.d.ts.map +1 -0
- package/lib/exercises/functions/logarithm/index.js +20 -0
- package/lib/exercises/functions/logarithm/log10PowerSimplifying.d.ts +7 -0
- package/lib/exercises/functions/logarithm/log10PowerSimplifying.d.ts.map +1 -0
- package/lib/exercises/functions/logarithm/log10PowerSimplifying.js +54 -0
- package/lib/exercises/functions/logarithm/logEquation.d.ts +9 -0
- package/lib/exercises/functions/logarithm/logEquation.d.ts.map +1 -0
- package/lib/exercises/functions/logarithm/logEquation.js +74 -0
- package/lib/exercises/functions/logarithm/logPowerEquation.d.ts +12 -0
- package/lib/exercises/functions/logarithm/logPowerEquation.d.ts.map +1 -0
- package/lib/exercises/functions/logarithm/logPowerEquation.js +103 -0
- package/lib/exercises/functions/logarithm/logSimplifiying.d.ts +9 -0
- package/lib/exercises/functions/logarithm/logSimplifiying.d.ts.map +1 -0
- package/lib/exercises/functions/logarithm/logSimplifiying.js +77 -0
- package/lib/exercises/sets/intervals/inequalityToInterval.d.ts.map +1 -1
- package/lib/exercises/trigonometry/associatePoint.d.ts +7 -0
- package/lib/exercises/trigonometry/associatePoint.d.ts.map +1 -0
- package/lib/exercises/trigonometry/associatePoint.js +64 -0
- package/lib/exercises/trigonometry/index.d.ts +1 -0
- package/lib/exercises/trigonometry/index.d.ts.map +1 -1
- package/lib/exercises/trigonometry/index.js +1 -0
- package/lib/exercises/trigonometry/remarkableValues.d.ts +1 -1
- package/lib/exercises/trigonometry/remarkableValues.d.ts.map +1 -1
- package/lib/exercises/trigonometry/remarkableValues.js +9 -7
- package/lib/index.d.ts +43 -18
- package/lib/index.d.ts.map +1 -1
- package/lib/math/complex/complex.d.ts +1 -1
- package/lib/math/numbers/logarithms/ln.d.ts +12 -0
- package/lib/math/numbers/logarithms/ln.d.ts.map +1 -0
- package/lib/math/numbers/logarithms/ln.js +18 -0
- package/lib/math/numbers/nombre.js +1 -1
- package/lib/math/numbers/reals/extendedRingElement.d.ts +2 -1
- package/lib/math/numbers/reals/extendedRingElement.d.ts.map +1 -1
- package/lib/math/polynomials/trinom.d.ts +2 -2
- package/lib/math/trigonometry/remarkableValue.d.ts +3 -10
- package/lib/math/trigonometry/remarkableValue.d.ts.map +1 -1
- package/lib/math/trigonometry/remarkableValue.js +5 -15
- package/lib/math/trigonometry/remarkableValues.d.ts +7 -1
- package/lib/math/trigonometry/remarkableValues.d.ts.map +1 -1
- package/lib/math/trigonometry/remarkableValues.js +63 -13
- package/lib/math/utils/arithmetic/gcd.js +1 -1
- package/lib/server.js +1 -7
- package/lib/tree/nodes/algebraicNode.d.ts +3 -0
- package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/absNode.d.ts +3 -1
- package/lib/tree/nodes/functions/absNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/absNode.js +5 -1
- package/lib/tree/nodes/functions/cosNode.d.ts +3 -1
- package/lib/tree/nodes/functions/cosNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/cosNode.js +21 -0
- package/lib/tree/nodes/functions/expNode.d.ts +3 -1
- package/lib/tree/nodes/functions/expNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/expNode.js +4 -0
- package/lib/tree/nodes/functions/functionNode.d.ts +3 -2
- package/lib/tree/nodes/functions/functionNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/functionNode.js +3 -2
- package/lib/tree/nodes/functions/log10Node.d.ts +20 -0
- package/lib/tree/nodes/functions/log10Node.d.ts.map +1 -0
- package/lib/tree/nodes/functions/log10Node.js +82 -0
- package/lib/tree/nodes/functions/logNode.d.ts +3 -1
- package/lib/tree/nodes/functions/logNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/logNode.js +33 -1
- package/lib/tree/nodes/functions/oppositeNode.d.ts +3 -0
- package/lib/tree/nodes/functions/oppositeNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/oppositeNode.js +7 -0
- package/lib/tree/nodes/functions/sinNode.d.ts +3 -1
- package/lib/tree/nodes/functions/sinNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/sinNode.js +21 -0
- package/lib/tree/nodes/functions/sqrtNode.d.ts +3 -0
- package/lib/tree/nodes/functions/sqrtNode.d.ts.map +1 -1
- package/lib/tree/nodes/functions/sqrtNode.js +41 -0
- package/lib/tree/nodes/geometry/lengthNode.d.ts +5 -1
- package/lib/tree/nodes/geometry/lengthNode.d.ts.map +1 -1
- package/lib/tree/nodes/geometry/lengthNode.js +12 -1
- package/lib/tree/nodes/inequations/inequationSolutionNode.d.ts +3 -2
- package/lib/tree/nodes/inequations/inequationSolutionNode.d.ts.map +1 -1
- package/lib/tree/nodes/inequations/inequationSolutionNode.js +15 -6
- package/lib/tree/nodes/node.d.ts +1 -0
- package/lib/tree/nodes/node.d.ts.map +1 -1
- package/lib/tree/nodes/node.js +14 -1
- package/lib/tree/nodes/numbers/constantNode.d.ts +3 -0
- package/lib/tree/nodes/numbers/constantNode.d.ts.map +1 -1
- package/lib/tree/nodes/numbers/constantNode.js +7 -0
- package/lib/tree/nodes/numbers/numberNode.d.ts +3 -0
- package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
- package/lib/tree/nodes/numbers/numberNode.js +7 -0
- package/lib/tree/nodes/operators/addNode.d.ts +3 -0
- package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/addNode.js +175 -0
- package/lib/tree/nodes/operators/divideNode.d.ts +3 -0
- package/lib/tree/nodes/operators/divideNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/divideNode.js +12 -0
- package/lib/tree/nodes/operators/fractionNode.d.ts +3 -0
- package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/fractionNode.js +86 -0
- package/lib/tree/nodes/operators/multiplyNode.d.ts +5 -0
- package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/multiplyNode.js +127 -10
- package/lib/tree/nodes/operators/powerNode.d.ts +3 -0
- package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/powerNode.js +46 -0
- package/lib/tree/nodes/operators/substractNode.d.ts +3 -0
- package/lib/tree/nodes/operators/substractNode.d.ts.map +1 -1
- package/lib/tree/nodes/operators/substractNode.js +12 -0
- package/lib/tree/nodes/sets/discreteSetNode.d.ts +3 -1
- package/lib/tree/nodes/sets/discreteSetNode.d.ts.map +1 -1
- package/lib/tree/nodes/sets/discreteSetNode.js +7 -1
- package/lib/tree/nodes/sets/intervalNode.d.ts +3 -1
- package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
- package/lib/tree/nodes/sets/intervalNode.js +7 -1
- package/lib/tree/nodes/sets/setNode.d.ts +9 -1
- package/lib/tree/nodes/sets/setNode.d.ts.map +1 -1
- package/lib/tree/nodes/sets/setNode.js +12 -0
- package/lib/tree/nodes/sets/unionIntervalNode.d.ts +3 -1
- package/lib/tree/nodes/sets/unionIntervalNode.d.ts.map +1 -1
- package/lib/tree/nodes/sets/unionIntervalNode.js +7 -1
- package/lib/tree/nodes/variables/variableNode.d.ts +3 -0
- package/lib/tree/nodes/variables/variableNode.d.ts.map +1 -1
- package/lib/tree/nodes/variables/variableNode.js +10 -0
- package/package.json +1 -1
|
@@ -6,12 +6,14 @@ export declare class AbsNode implements FunctionNode {
|
|
|
6
6
|
id: FunctionsIds;
|
|
7
7
|
child: AlgebraicNode;
|
|
8
8
|
type: NodeType;
|
|
9
|
+
isNumeric: boolean;
|
|
9
10
|
constructor(child: AlgebraicNode);
|
|
10
11
|
toMathString(): string;
|
|
11
12
|
toTex(): string;
|
|
12
13
|
toEquivalentNodes(): AlgebraicNode[];
|
|
13
14
|
toAllValidTexs(): string[];
|
|
14
|
-
simplify():
|
|
15
|
+
simplify(): AbsNode;
|
|
15
16
|
evaluate(vars: Record<string, number>): number;
|
|
17
|
+
equals(node: AlgebraicNode): boolean;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=absNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"absNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/absNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"absNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/absNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa;IAOhC,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAOf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAG1B,QAAQ;IAIR,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,MAAM,CAAC,IAAI,EAAE,aAAa;CAG3B"}
|
|
@@ -13,6 +13,7 @@ class AbsNode {
|
|
|
13
13
|
this.id = functionNode_1.FunctionsIds.abs;
|
|
14
14
|
this.child = child;
|
|
15
15
|
this.type = node_1.NodeType.function;
|
|
16
|
+
this.isNumeric = child.isNumeric;
|
|
16
17
|
}
|
|
17
18
|
toMathString() {
|
|
18
19
|
return `abs(${this.child.toMathString()})`;
|
|
@@ -35,10 +36,13 @@ class AbsNode {
|
|
|
35
36
|
return this.toEquivalentNodes().map((node) => node.toTex());
|
|
36
37
|
}
|
|
37
38
|
simplify() {
|
|
38
|
-
return this;
|
|
39
|
+
return new AbsNode(this.child.simplify());
|
|
39
40
|
}
|
|
40
41
|
evaluate(vars) {
|
|
41
42
|
return Math.abs(this.child.evaluate(vars));
|
|
42
43
|
}
|
|
44
|
+
equals(node) {
|
|
45
|
+
return isAbsNode(node) && node.child.equals(this.child);
|
|
46
|
+
}
|
|
43
47
|
}
|
|
44
48
|
exports.AbsNode = AbsNode;
|
|
@@ -6,12 +6,14 @@ export declare class CosNode implements FunctionNode {
|
|
|
6
6
|
id: FunctionsIds;
|
|
7
7
|
child: AlgebraicNode;
|
|
8
8
|
type: NodeType;
|
|
9
|
+
isNumeric: boolean;
|
|
9
10
|
constructor(child: AlgebraicNode);
|
|
10
11
|
toMathString(): string;
|
|
11
12
|
toEquivalentNodes(): AlgebraicNode[];
|
|
12
13
|
toAllValidTexs(): string[];
|
|
13
14
|
toTex(): string;
|
|
14
|
-
simplify():
|
|
15
|
+
simplify(): AlgebraicNode | this;
|
|
15
16
|
evaluate(vars: Record<string, number>): number;
|
|
17
|
+
equals(node: AlgebraicNode): boolean;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=cosNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/cosNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"cosNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/cosNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAmB,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa;IAOhC,YAAY,IAAI,MAAM;IAItB,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAI1B,KAAK,IAAI,MAAM;IAQf,QAAQ;IAkBR,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,MAAM,CAAC,IAAI,EAAE,aAAa;CAG3B"}
|
|
@@ -4,6 +4,7 @@ exports.CosNode = exports.isCosNode = void 0;
|
|
|
4
4
|
// import { cos } from "mathjs";
|
|
5
5
|
const node_1 = require("../node");
|
|
6
6
|
const functionNode_1 = require("./functionNode");
|
|
7
|
+
const remarkableValues_1 = require("../../../math/trigonometry/remarkableValues");
|
|
7
8
|
function isCosNode(a) {
|
|
8
9
|
return (0, functionNode_1.isFunctionNode)(a) && a.id === functionNode_1.FunctionsIds.cos;
|
|
9
10
|
}
|
|
@@ -13,6 +14,7 @@ class CosNode {
|
|
|
13
14
|
this.id = functionNode_1.FunctionsIds.opposite;
|
|
14
15
|
this.child = child;
|
|
15
16
|
this.type = node_1.NodeType.function;
|
|
17
|
+
this.isNumeric = child.isNumeric;
|
|
16
18
|
}
|
|
17
19
|
toMathString() {
|
|
18
20
|
return `cos(${this.child.toMathString()})`;
|
|
@@ -35,10 +37,29 @@ class CosNode {
|
|
|
35
37
|
// return cos(this.child.toMathjs());
|
|
36
38
|
// }
|
|
37
39
|
simplify() {
|
|
40
|
+
const simplifiedChild = this.child.simplify();
|
|
41
|
+
if (!(0, node_1.hasVariableNode)(simplifiedChild)) {
|
|
42
|
+
const value = simplifiedChild.evaluate({});
|
|
43
|
+
const moduled = Math.abs(value % (2 * Math.PI));
|
|
44
|
+
const trigoPoint = remarkableValues_1.remarkableTrigoValues.find((value) => value.angle.evaluate({}) === moduled);
|
|
45
|
+
if (!trigoPoint)
|
|
46
|
+
return this;
|
|
47
|
+
else
|
|
48
|
+
return trigoPoint.cos;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
//écrire les regles albgeiruqe
|
|
52
|
+
//chaque simplification doit relancer tout le simplify
|
|
53
|
+
//cos(x+2PI)
|
|
54
|
+
//cos(-x)
|
|
55
|
+
}
|
|
38
56
|
return this;
|
|
39
57
|
}
|
|
40
58
|
evaluate(vars) {
|
|
41
59
|
return Math.cos(this.child.evaluate(vars));
|
|
42
60
|
}
|
|
61
|
+
equals(node) {
|
|
62
|
+
return isCosNode(node) && node.child.equals(this.child);
|
|
63
|
+
}
|
|
43
64
|
}
|
|
44
65
|
exports.CosNode = CosNode;
|
|
@@ -7,12 +7,14 @@ export declare class ExpNode implements FunctionNode {
|
|
|
7
7
|
id: FunctionsIds;
|
|
8
8
|
child: AlgebraicNode;
|
|
9
9
|
type: NodeType;
|
|
10
|
+
isNumeric: boolean;
|
|
10
11
|
constructor(child: AlgebraicNode, opts?: NodeOptions);
|
|
11
12
|
toMathString(): string;
|
|
12
13
|
toTex(): string;
|
|
13
14
|
toEquivalentNodes(): AlgebraicNode[];
|
|
14
15
|
toAllValidTexs(): string[];
|
|
15
|
-
simplify():
|
|
16
|
+
simplify(): this;
|
|
16
17
|
evaluate(vars: Record<string, number>): number;
|
|
18
|
+
equals(node: AlgebraicNode): boolean;
|
|
17
19
|
}
|
|
18
20
|
//# sourceMappingURL=expNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/expNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"expNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/expNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAQpD,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAgBf,iBAAiB,IAAI,aAAa,EAAE;IAUpC,cAAc,IAAI,MAAM,EAAE;IAI1B,QAAQ;IAGR,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,MAAM,CAAC,IAAI,EAAE,aAAa;CAG3B"}
|
|
@@ -14,6 +14,7 @@ class ExpNode {
|
|
|
14
14
|
this.child = child;
|
|
15
15
|
this.type = node_1.NodeType.function;
|
|
16
16
|
this.opts = opts;
|
|
17
|
+
this.isNumeric = child.isNumeric;
|
|
17
18
|
}
|
|
18
19
|
toMathString() {
|
|
19
20
|
return `e^(${this.child.toMathString()})`;
|
|
@@ -52,5 +53,8 @@ class ExpNode {
|
|
|
52
53
|
evaluate(vars) {
|
|
53
54
|
return Math.exp(this.child.evaluate(vars));
|
|
54
55
|
}
|
|
56
|
+
equals(node) {
|
|
57
|
+
return isExpNode(node) && node.child.equals(this.child);
|
|
58
|
+
}
|
|
55
59
|
}
|
|
56
60
|
exports.ExpNode = ExpNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/functionNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAY,MAAM,SAAS,CAAC;AAEzC,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,oBAAY,YAAY;IACtB,QAAQ,IAAA;IACR,IAAI,IAAA;IACJ,GAAG,IAAA;IACH,GAAG,IAAA;IACH,GAAG,IAAA;IACH,GAAG,IAAA;IACH,GAAG,IAAA;CACJ;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;CAOtB"}
|
|
1
|
+
{"version":3,"file":"functionNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/functionNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAY,MAAM,SAAS,CAAC;AAEzC,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAED,oBAAY,YAAY;IACtB,QAAQ,IAAA;IACR,IAAI,IAAA;IACJ,GAAG,IAAA;IACH,GAAG,IAAA;IACH,GAAG,IAAA;IACH,KAAK,IAAA;IACL,GAAG,IAAA;IACH,GAAG,IAAA;CACJ;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;CAOtB"}
|
|
@@ -13,6 +13,7 @@ var FunctionsIds;
|
|
|
13
13
|
FunctionsIds[FunctionsIds["cos"] = 2] = "cos";
|
|
14
14
|
FunctionsIds[FunctionsIds["sin"] = 3] = "sin";
|
|
15
15
|
FunctionsIds[FunctionsIds["log"] = 4] = "log";
|
|
16
|
-
FunctionsIds[FunctionsIds["
|
|
17
|
-
FunctionsIds[FunctionsIds["
|
|
16
|
+
FunctionsIds[FunctionsIds["log10"] = 5] = "log10";
|
|
17
|
+
FunctionsIds[FunctionsIds["exp"] = 6] = "exp";
|
|
18
|
+
FunctionsIds[FunctionsIds["abs"] = 7] = "abs";
|
|
18
19
|
})(FunctionsIds || (exports.FunctionsIds = FunctionsIds = {}));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Node, NodeOptions, NodeType } from "../node";
|
|
2
|
+
import { FunctionNode, FunctionsIds } from "./functionNode";
|
|
3
|
+
import { AlgebraicNode } from "../algebraicNode";
|
|
4
|
+
export declare function isLog10Node(a: Node): a is Log10Node;
|
|
5
|
+
export declare class Log10Node implements FunctionNode {
|
|
6
|
+
id: FunctionsIds;
|
|
7
|
+
child: AlgebraicNode;
|
|
8
|
+
type: NodeType;
|
|
9
|
+
opts?: NodeOptions;
|
|
10
|
+
isNumeric: boolean;
|
|
11
|
+
constructor(child: AlgebraicNode, opts?: NodeOptions);
|
|
12
|
+
toMathString(): string;
|
|
13
|
+
toTex(): string;
|
|
14
|
+
toEquivalentNodes(): AlgebraicNode[];
|
|
15
|
+
toAllValidTexs(): string[];
|
|
16
|
+
simplify(): AlgebraicNode;
|
|
17
|
+
evaluate(vars: Record<string, number>): number;
|
|
18
|
+
equals(node: AlgebraicNode): boolean;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=log10Node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log10Node.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/log10Node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AACD,qBAAa,SAAU,YAAW,YAAY;IAC5C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAQpD,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAaf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAG1B,QAAQ,IAAI,aAAa;IA0BzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;CAGrC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Log10Node = exports.isLog10Node = void 0;
|
|
4
|
+
// import { log } from "mathjs";
|
|
5
|
+
const node_1 = require("../node");
|
|
6
|
+
const functionNode_1 = require("./functionNode");
|
|
7
|
+
const absNode_1 = require("./absNode");
|
|
8
|
+
const numberNode_1 = require("../numbers/numberNode");
|
|
9
|
+
const isInt_1 = require("../../../utils/isInt");
|
|
10
|
+
const powerNode_1 = require("../operators/powerNode");
|
|
11
|
+
const multiplyNode_1 = require("../operators/multiplyNode");
|
|
12
|
+
const primeFactors_1 = require("../../../math/utils/arithmetic/primeFactors");
|
|
13
|
+
function isLog10Node(a) {
|
|
14
|
+
return (0, functionNode_1.isFunctionNode)(a) && a.id === functionNode_1.FunctionsIds.log10;
|
|
15
|
+
}
|
|
16
|
+
exports.isLog10Node = isLog10Node;
|
|
17
|
+
class Log10Node {
|
|
18
|
+
constructor(child, opts) {
|
|
19
|
+
this.id = functionNode_1.FunctionsIds.log10;
|
|
20
|
+
this.child = child;
|
|
21
|
+
this.type = node_1.NodeType.function;
|
|
22
|
+
this.opts = opts;
|
|
23
|
+
this.isNumeric = child.isNumeric;
|
|
24
|
+
}
|
|
25
|
+
toMathString() {
|
|
26
|
+
return `log_{10}(${this.child.toMathString()})`;
|
|
27
|
+
}
|
|
28
|
+
toTex() {
|
|
29
|
+
const tex = this.child.toTex();
|
|
30
|
+
if (!this.opts?.allowLnOfOne && tex === "1") {
|
|
31
|
+
return "0";
|
|
32
|
+
}
|
|
33
|
+
const shouldntUseBrackets = (0, absNode_1.isAbsNode)(this.child);
|
|
34
|
+
if (shouldntUseBrackets)
|
|
35
|
+
return `\\log${tex}`;
|
|
36
|
+
else
|
|
37
|
+
return `\\log\\left(${tex}\\right)`;
|
|
38
|
+
}
|
|
39
|
+
// toMathjs() {
|
|
40
|
+
// return log(this.child.toMathjs());
|
|
41
|
+
// }
|
|
42
|
+
toEquivalentNodes() {
|
|
43
|
+
const res = [];
|
|
44
|
+
const childNodes = this.child.toEquivalentNodes();
|
|
45
|
+
childNodes.forEach((childNode) => {
|
|
46
|
+
res.push(new Log10Node(childNode));
|
|
47
|
+
});
|
|
48
|
+
return res;
|
|
49
|
+
}
|
|
50
|
+
toAllValidTexs() {
|
|
51
|
+
return this.toEquivalentNodes().map((node) => node.toTex());
|
|
52
|
+
}
|
|
53
|
+
simplify() {
|
|
54
|
+
const simplifiedChild = this.child.simplify();
|
|
55
|
+
if ((0, numberNode_1.isNumberNode)(simplifiedChild)) {
|
|
56
|
+
const value = simplifiedChild.value;
|
|
57
|
+
const log10 = Math.log10(value);
|
|
58
|
+
if ((0, isInt_1.isInt)(log10))
|
|
59
|
+
return new numberNode_1.NumberNode(log10);
|
|
60
|
+
if ((0, isInt_1.isInt)(value)) {
|
|
61
|
+
const factors = (0, primeFactors_1.primeFactors)(value);
|
|
62
|
+
if (factors.length === 1)
|
|
63
|
+
return this; //isPrime
|
|
64
|
+
if (factors.every((nb) => nb === factors[0])) {
|
|
65
|
+
return new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(factors.length), new Log10Node(new numberNode_1.NumberNode(factors[0]))).simplify();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//si int il faut voir si on peut écrire a^b
|
|
70
|
+
if ((0, powerNode_1.isPowerNode)(simplifiedChild)) {
|
|
71
|
+
return new multiplyNode_1.MultiplyNode(simplifiedChild.rightChild, new Log10Node(simplifiedChild.leftChild)).simplify();
|
|
72
|
+
}
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
evaluate(vars) {
|
|
76
|
+
return Math.log10(this.child.evaluate(vars));
|
|
77
|
+
}
|
|
78
|
+
equals(node) {
|
|
79
|
+
return isLog10Node(node) && node.child.equals(this.child);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.Log10Node = Log10Node;
|
|
@@ -7,12 +7,14 @@ export declare class LogNode implements FunctionNode {
|
|
|
7
7
|
child: AlgebraicNode;
|
|
8
8
|
type: NodeType;
|
|
9
9
|
opts?: NodeOptions;
|
|
10
|
+
isNumeric: boolean;
|
|
10
11
|
constructor(child: AlgebraicNode, opts?: NodeOptions);
|
|
11
12
|
toMathString(): string;
|
|
12
13
|
toTex(): string;
|
|
13
14
|
toEquivalentNodes(): AlgebraicNode[];
|
|
14
15
|
toAllValidTexs(): string[];
|
|
15
|
-
simplify():
|
|
16
|
+
simplify(): AlgebraicNode;
|
|
16
17
|
evaluate(vars: Record<string, number>): number;
|
|
18
|
+
equals(node: AlgebraicNode): boolean;
|
|
17
19
|
}
|
|
18
20
|
//# sourceMappingURL=logNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/logNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"logNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/logNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAQpD,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAaf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAG1B,QAAQ,IAAI,aAAa;IA6BzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;CAGrC"}
|
|
@@ -5,16 +5,23 @@ exports.LogNode = exports.isLogNode = void 0;
|
|
|
5
5
|
const node_1 = require("../node");
|
|
6
6
|
const functionNode_1 = require("./functionNode");
|
|
7
7
|
const absNode_1 = require("./absNode");
|
|
8
|
+
const multiplyNode_1 = require("../operators/multiplyNode");
|
|
9
|
+
const powerNode_1 = require("../operators/powerNode");
|
|
10
|
+
const numberNode_1 = require("../numbers/numberNode");
|
|
11
|
+
const isInt_1 = require("../../../utils/isInt");
|
|
12
|
+
const primeFactors_1 = require("../../../math/utils/arithmetic/primeFactors");
|
|
13
|
+
const expNode_1 = require("./expNode");
|
|
8
14
|
function isLogNode(a) {
|
|
9
15
|
return (0, functionNode_1.isFunctionNode)(a) && a.id === functionNode_1.FunctionsIds.log;
|
|
10
16
|
}
|
|
11
17
|
exports.isLogNode = isLogNode;
|
|
12
18
|
class LogNode {
|
|
13
19
|
constructor(child, opts) {
|
|
14
|
-
this.id = functionNode_1.FunctionsIds.
|
|
20
|
+
this.id = functionNode_1.FunctionsIds.log;
|
|
15
21
|
this.child = child;
|
|
16
22
|
this.type = node_1.NodeType.function;
|
|
17
23
|
this.opts = opts;
|
|
24
|
+
this.isNumeric = child.isNumeric;
|
|
18
25
|
}
|
|
19
26
|
toMathString() {
|
|
20
27
|
return `log(${this.child.toMathString()})`;
|
|
@@ -45,10 +52,35 @@ class LogNode {
|
|
|
45
52
|
return this.toEquivalentNodes().map((node) => node.toTex());
|
|
46
53
|
}
|
|
47
54
|
simplify() {
|
|
55
|
+
const simplifiedChild = this.child.simplify();
|
|
56
|
+
if ((0, numberNode_1.isNumberNode)(simplifiedChild)) {
|
|
57
|
+
const value = simplifiedChild.value;
|
|
58
|
+
const log = Math.log(value);
|
|
59
|
+
if ((0, isInt_1.isInt)(log))
|
|
60
|
+
return new numberNode_1.NumberNode(log);
|
|
61
|
+
if ((0, isInt_1.isInt)(value)) {
|
|
62
|
+
const factors = (0, primeFactors_1.primeFactors)(value);
|
|
63
|
+
if (factors.length === 1)
|
|
64
|
+
return this; //isPrime
|
|
65
|
+
if (factors.every((nb) => nb === factors[0])) {
|
|
66
|
+
return new multiplyNode_1.MultiplyNode(new numberNode_1.NumberNode(factors.length), new LogNode(new numberNode_1.NumberNode(factors[0]))).simplify();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if ((0, expNode_1.isExpNode)(simplifiedChild)) {
|
|
71
|
+
return simplifiedChild.child;
|
|
72
|
+
}
|
|
73
|
+
//si int il faut voir si on peut écrire a^b
|
|
74
|
+
if ((0, powerNode_1.isPowerNode)(simplifiedChild)) {
|
|
75
|
+
return new multiplyNode_1.MultiplyNode(simplifiedChild.rightChild, new LogNode(simplifiedChild.leftChild)).simplify();
|
|
76
|
+
}
|
|
48
77
|
return this;
|
|
49
78
|
}
|
|
50
79
|
evaluate(vars) {
|
|
51
80
|
return Math.log(this.child.evaluate(vars));
|
|
52
81
|
}
|
|
82
|
+
equals(node) {
|
|
83
|
+
return isLogNode(node) && node.child.equals(this.child);
|
|
84
|
+
}
|
|
53
85
|
}
|
|
54
86
|
exports.LogNode = LogNode;
|
|
@@ -7,6 +7,7 @@ export declare class OppositeNode implements FunctionNode {
|
|
|
7
7
|
child: AlgebraicNode;
|
|
8
8
|
type: NodeType;
|
|
9
9
|
opts?: NodeOptions;
|
|
10
|
+
isNumeric: boolean;
|
|
10
11
|
constructor(child: AlgebraicNode, opts?: NodeOptions);
|
|
11
12
|
toMathString(): string;
|
|
12
13
|
toTex(): string;
|
|
@@ -18,5 +19,7 @@ export declare class OppositeNode implements FunctionNode {
|
|
|
18
19
|
*/
|
|
19
20
|
toAllValidTexs(opts?: NodeOptions): string[];
|
|
20
21
|
evaluate(vars: Record<string, number>): number;
|
|
22
|
+
simplify(): this;
|
|
23
|
+
equals(node: AlgebraicNode): boolean;
|
|
21
24
|
}
|
|
22
25
|
//# sourceMappingURL=oppositeNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oppositeNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/oppositeNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAGD,qBAAa,YAAa,YAAW,YAAY;IAC/C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;
|
|
1
|
+
{"version":3,"file":"oppositeNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/oppositeNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AAGD,qBAAa,YAAa,YAAW,YAAY;IAC/C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,YAAY,IAAI,MAAM;IAGtB,KAAK,IAAI,MAAM;IAef,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IAgCtD;;;;OAIG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE;IAQ5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;CAG3B"}
|
|
@@ -18,6 +18,7 @@ class OppositeNode {
|
|
|
18
18
|
this.child = child;
|
|
19
19
|
this.type = node_1.NodeType.function;
|
|
20
20
|
this.opts = opts;
|
|
21
|
+
this.isNumeric = child.isNumeric;
|
|
21
22
|
}
|
|
22
23
|
toMathString() {
|
|
23
24
|
return `-(${this.child.toMathString()})`;
|
|
@@ -68,5 +69,11 @@ class OppositeNode {
|
|
|
68
69
|
evaluate(vars) {
|
|
69
70
|
return -this.child.evaluate(vars);
|
|
70
71
|
}
|
|
72
|
+
simplify() {
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
equals(node) {
|
|
76
|
+
return isOppositeNode(node) && node.child.equals(this.child);
|
|
77
|
+
}
|
|
71
78
|
}
|
|
72
79
|
exports.OppositeNode = OppositeNode;
|
|
@@ -6,12 +6,14 @@ export declare class SinNode implements FunctionNode {
|
|
|
6
6
|
id: FunctionsIds;
|
|
7
7
|
child: AlgebraicNode;
|
|
8
8
|
type: NodeType;
|
|
9
|
+
isNumeric: boolean;
|
|
9
10
|
constructor(child: AlgebraicNode);
|
|
10
11
|
toMathString(): string;
|
|
11
12
|
toTex(): string;
|
|
12
13
|
toEquivalentNodes(): AlgebraicNode[];
|
|
13
14
|
toAllValidTexs(): string[];
|
|
14
|
-
simplify():
|
|
15
|
+
simplify(): AlgebraicNode;
|
|
15
16
|
evaluate(vars: Record<string, number>): number;
|
|
17
|
+
equals(node: AlgebraicNode): boolean;
|
|
16
18
|
}
|
|
17
19
|
//# sourceMappingURL=sinNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sinNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/sinNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"sinNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/sinNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAmB,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,OAAO,CAE/C;AACD,qBAAa,OAAQ,YAAW,YAAY;IAC1C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa;IAOhC,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAMf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAI1B,QAAQ,IAAI,aAAa;IAkBzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;CAGrC"}
|
|
@@ -4,6 +4,7 @@ exports.SinNode = exports.isSinNode = void 0;
|
|
|
4
4
|
// import { sin } from "mathjs";
|
|
5
5
|
const node_1 = require("../node");
|
|
6
6
|
const functionNode_1 = require("./functionNode");
|
|
7
|
+
const remarkableValues_1 = require("../../../math/trigonometry/remarkableValues");
|
|
7
8
|
function isSinNode(a) {
|
|
8
9
|
return (0, functionNode_1.isFunctionNode)(a) && a.id === functionNode_1.FunctionsIds.sin;
|
|
9
10
|
}
|
|
@@ -13,6 +14,7 @@ class SinNode {
|
|
|
13
14
|
this.id = functionNode_1.FunctionsIds.opposite;
|
|
14
15
|
this.child = child;
|
|
15
16
|
this.type = node_1.NodeType.function;
|
|
17
|
+
this.isNumeric = child.isNumeric;
|
|
16
18
|
}
|
|
17
19
|
toMathString() {
|
|
18
20
|
return `sin(${this.child.toMathString()})`;
|
|
@@ -35,10 +37,29 @@ class SinNode {
|
|
|
35
37
|
return this.toEquivalentNodes().map((node) => node.toTex());
|
|
36
38
|
}
|
|
37
39
|
simplify() {
|
|
40
|
+
const simplifiedChild = this.child.simplify();
|
|
41
|
+
if (!(0, node_1.hasVariableNode)(simplifiedChild)) {
|
|
42
|
+
const value = simplifiedChild.evaluate({});
|
|
43
|
+
const moduled = Math.abs(value % (2 * Math.PI));
|
|
44
|
+
const trigoPoint = remarkableValues_1.remarkableTrigoValues.find((value) => value.angle.evaluate({}) === moduled);
|
|
45
|
+
if (!trigoPoint)
|
|
46
|
+
return this;
|
|
47
|
+
else
|
|
48
|
+
return trigoPoint.cos;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
//écrire les regles albgeiruqe
|
|
52
|
+
//chaque simplification doit relancer tout le simplify
|
|
53
|
+
//cos(x+2PI)
|
|
54
|
+
//cos(-x)
|
|
55
|
+
}
|
|
38
56
|
return this;
|
|
39
57
|
}
|
|
40
58
|
evaluate(vars) {
|
|
41
59
|
return Math.sin(this.child.evaluate(vars));
|
|
42
60
|
}
|
|
61
|
+
equals(node) {
|
|
62
|
+
return isSinNode(node) && node.child.equals(this.child);
|
|
63
|
+
}
|
|
43
64
|
}
|
|
44
65
|
exports.SinNode = SinNode;
|
|
@@ -7,11 +7,14 @@ export declare class SqrtNode implements FunctionNode {
|
|
|
7
7
|
child: AlgebraicNode;
|
|
8
8
|
type: NodeType;
|
|
9
9
|
opts?: NodeOptions;
|
|
10
|
+
isNumeric: boolean;
|
|
10
11
|
constructor(child: AlgebraicNode, opts?: NodeOptions);
|
|
11
12
|
toMathString(): string;
|
|
12
13
|
toTex(): string;
|
|
13
14
|
toEquivalentNodes(opts?: NodeOptions): AlgebraicNode[];
|
|
14
15
|
toAllValidTexs(): string[];
|
|
15
16
|
evaluate(vars: Record<string, number>): number;
|
|
17
|
+
simplify(): AlgebraicNode;
|
|
18
|
+
equals(node: AlgebraicNode): boolean;
|
|
16
19
|
}
|
|
17
20
|
//# sourceMappingURL=sqrtNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqrtNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/sqrtNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAK5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sqrtNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/functions/sqrtNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAK5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,QAAQ,CAEjD;AACD,qBAAa,QAAS,YAAW,YAAY;IAC3C,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;gBACP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,YAAY,IAAI,MAAM;IAMtB,KAAK,IAAI,MAAM;IAIf,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,EAAE;IAwBtD,cAAc,IAAI,MAAM,EAAE;IAG1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGrC,QAAQ;IAmCR,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO;CAGrC"}
|
|
@@ -8,6 +8,7 @@ const real_1 = require("../../../math/numbers/reals/real");
|
|
|
8
8
|
const numberNode_1 = require("../numbers/numberNode");
|
|
9
9
|
const multiplyNode_1 = require("../operators/multiplyNode");
|
|
10
10
|
const isInt_1 = require("../../../utils/isInt");
|
|
11
|
+
const operatorComposition_1 = require("../../../tree/utilities/operatorComposition");
|
|
11
12
|
function isSqrtNode(a) {
|
|
12
13
|
return (0, functionNode_1.isFunctionNode)(a) && a.id === functionNode_1.FunctionsIds.sqrt;
|
|
13
14
|
}
|
|
@@ -18,6 +19,7 @@ class SqrtNode {
|
|
|
18
19
|
this.child = child;
|
|
19
20
|
this.type = node_1.NodeType.function;
|
|
20
21
|
this.opts = opts;
|
|
22
|
+
this.isNumeric = child.isNumeric;
|
|
21
23
|
}
|
|
22
24
|
toMathString() {
|
|
23
25
|
return `sqr(${this.child.toMathString()})`;
|
|
@@ -53,5 +55,44 @@ class SqrtNode {
|
|
|
53
55
|
evaluate(vars) {
|
|
54
56
|
return Math.sqrt(this.child.evaluate(vars));
|
|
55
57
|
}
|
|
58
|
+
simplify() {
|
|
59
|
+
const simplifiedChild = this.child.simplify();
|
|
60
|
+
const copy = new SqrtNode(simplifiedChild, this.opts);
|
|
61
|
+
const externals = [];
|
|
62
|
+
//ex [3, x^2] pour sqrt(3x^2)
|
|
63
|
+
//TODO fractions
|
|
64
|
+
const recursive = (node) => {
|
|
65
|
+
if ((0, multiplyNode_1.isMultiplyNode)(node)) {
|
|
66
|
+
recursive(node.leftChild);
|
|
67
|
+
recursive(node.rightChild);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
externals.push(node);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
recursive(copy.child);
|
|
74
|
+
const simplifyExternalNodes = (a) => {
|
|
75
|
+
if ((0, numberNode_1.isNumberNode)(a)) {
|
|
76
|
+
const sqrt = new real_1.SquareRoot(a.value);
|
|
77
|
+
return sqrt.simplify().toTree();
|
|
78
|
+
}
|
|
79
|
+
//TODO diviser par 2 les puissances (dont exp)
|
|
80
|
+
return new SqrtNode(a);
|
|
81
|
+
};
|
|
82
|
+
const simplifyIteration = () => {
|
|
83
|
+
for (let i = 0; i < externals.length; i++) {
|
|
84
|
+
const simplified = simplifyExternalNodes(externals[i]);
|
|
85
|
+
externals[i] = simplified;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
simplifyIteration();
|
|
90
|
+
if (externals.length === 1)
|
|
91
|
+
return externals[0];
|
|
92
|
+
return (0, operatorComposition_1.operatorComposition)(multiplyNode_1.MultiplyNode, externals).simplify();
|
|
93
|
+
}
|
|
94
|
+
equals(node) {
|
|
95
|
+
return isSqrtNode(node) && node.child.equals(this.child);
|
|
96
|
+
}
|
|
56
97
|
}
|
|
57
98
|
exports.SqrtNode = SqrtNode;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { AlgebraicNode } from "../algebraicNode";
|
|
2
|
-
import { NodeOptions, NodeType } from "../node";
|
|
2
|
+
import { Node, NodeOptions, NodeType } from "../node";
|
|
3
|
+
export declare function isLengthNode(a: Node): a is LengthNode;
|
|
3
4
|
export declare class LengthNode implements AlgebraicNode {
|
|
4
5
|
opts?: NodeOptions | undefined;
|
|
5
6
|
segmentName: string;
|
|
6
7
|
type: NodeType;
|
|
8
|
+
isNumeric: boolean;
|
|
7
9
|
constructor(segmentName: string, opts?: NodeOptions);
|
|
8
10
|
toAllValidTexs(): string[];
|
|
9
11
|
toEquivalentNodes(opts?: NodeOptions): LengthNode[];
|
|
@@ -11,5 +13,7 @@ export declare class LengthNode implements AlgebraicNode {
|
|
|
11
13
|
toMathjs(): string;
|
|
12
14
|
toTex(): string;
|
|
13
15
|
evaluate(vars: Record<string, number>): number;
|
|
16
|
+
simplify(): this;
|
|
17
|
+
equals(node: AlgebraicNode): boolean;
|
|
14
18
|
}
|
|
15
19
|
//# sourceMappingURL=lengthNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lengthNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/geometry/lengthNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"lengthNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/geometry/lengthNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,UAAU,CAErD;AACD,qBAAa,UAAW,YAAW,aAAa;IAC9C,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;gBACP,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IAUnD,cAAc;IAId,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW;IAOpC,YAAY;IAGZ,QAAQ;IAIR,KAAK;IAIL,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQrC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;CAG3B"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LengthNode = void 0;
|
|
3
|
+
exports.LengthNode = exports.isLengthNode = void 0;
|
|
4
4
|
const node_1 = require("../node");
|
|
5
|
+
function isLengthNode(a) {
|
|
6
|
+
return a.type === node_1.NodeType.mesure;
|
|
7
|
+
}
|
|
8
|
+
exports.isLengthNode = isLengthNode;
|
|
5
9
|
class LengthNode {
|
|
6
10
|
constructor(segmentName, opts) {
|
|
7
11
|
this.type = node_1.NodeType.mesure;
|
|
8
12
|
this.opts = opts;
|
|
9
13
|
this.segmentName = segmentName;
|
|
14
|
+
this.isNumeric = false;
|
|
10
15
|
}
|
|
11
16
|
// toAllTexs() {
|
|
12
17
|
// return [this.segmentName, this.segmentName.split("").reverse().join()];
|
|
@@ -36,5 +41,11 @@ class LengthNode {
|
|
|
36
41
|
throw Error(`Can't evaluate length ${this.segmentName}`);
|
|
37
42
|
return value;
|
|
38
43
|
}
|
|
44
|
+
simplify() {
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
equals(node) {
|
|
48
|
+
return isLengthNode(node) && node.segmentName === this.segmentName;
|
|
49
|
+
}
|
|
39
50
|
}
|
|
40
51
|
exports.LengthNode = LengthNode;
|