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.
Files changed (156) hide show
  1. package/lib/exercises/calculLitteral/equation/index.d.ts +0 -2
  2. package/lib/exercises/calculLitteral/equation/index.d.ts.map +1 -1
  3. package/lib/exercises/calculLitteral/equation/index.js +0 -2
  4. package/lib/exercises/calculLitteral/simplifying/index.d.ts +0 -2
  5. package/lib/exercises/calculLitteral/simplifying/index.d.ts.map +1 -1
  6. package/lib/exercises/calculLitteral/simplifying/index.js +0 -2
  7. package/lib/exercises/complex/argumentFromAlgebraicComplex.d.ts +6 -0
  8. package/lib/exercises/complex/argumentFromAlgebraicComplex.d.ts.map +1 -1
  9. package/lib/exercises/complex/argumentFromAlgebraicComplex.js +62 -51
  10. package/lib/exercises/complex/index.d.ts +1 -0
  11. package/lib/exercises/complex/index.d.ts.map +1 -1
  12. package/lib/exercises/complex/index.js +1 -0
  13. package/lib/exercises/exercise.d.ts +1 -1
  14. package/lib/exercises/exercise.d.ts.map +1 -1
  15. package/lib/exercises/functions/basics/graphicEquation.d.ts +8 -0
  16. package/lib/exercises/functions/basics/graphicEquation.d.ts.map +1 -0
  17. package/lib/exercises/functions/basics/graphicEquation.js +109 -0
  18. package/lib/exercises/functions/basics/graphicInequation.d.ts +16 -0
  19. package/lib/exercises/functions/basics/graphicInequation.d.ts.map +1 -0
  20. package/lib/exercises/functions/basics/graphicInequation.js +147 -0
  21. package/lib/exercises/functions/basics/index.d.ts +2 -0
  22. package/lib/exercises/functions/basics/index.d.ts.map +1 -1
  23. package/lib/exercises/functions/basics/index.js +2 -0
  24. package/lib/exercises/functions/exponential/expEquation.d.ts +9 -0
  25. package/lib/exercises/functions/exponential/expEquation.d.ts.map +1 -0
  26. package/lib/exercises/functions/exponential/expEquation.js +75 -0
  27. package/lib/exercises/functions/exponential/expSimplifiying.d.ts +10 -0
  28. package/lib/exercises/functions/exponential/expSimplifiying.d.ts.map +1 -0
  29. package/lib/exercises/functions/exponential/expSimplifiying.js +116 -0
  30. package/lib/exercises/functions/exponential/index.d.ts +3 -0
  31. package/lib/exercises/functions/exponential/index.d.ts.map +1 -0
  32. package/lib/exercises/functions/exponential/index.js +18 -0
  33. package/lib/exercises/functions/index.d.ts +2 -0
  34. package/lib/exercises/functions/index.d.ts.map +1 -1
  35. package/lib/exercises/functions/index.js +2 -0
  36. package/lib/exercises/functions/logarithm/index.d.ts +5 -0
  37. package/lib/exercises/functions/logarithm/index.d.ts.map +1 -0
  38. package/lib/exercises/functions/logarithm/index.js +20 -0
  39. package/lib/exercises/functions/logarithm/log10PowerSimplifying.d.ts +7 -0
  40. package/lib/exercises/functions/logarithm/log10PowerSimplifying.d.ts.map +1 -0
  41. package/lib/exercises/functions/logarithm/log10PowerSimplifying.js +54 -0
  42. package/lib/exercises/functions/logarithm/logEquation.d.ts +9 -0
  43. package/lib/exercises/functions/logarithm/logEquation.d.ts.map +1 -0
  44. package/lib/exercises/functions/logarithm/logEquation.js +74 -0
  45. package/lib/exercises/functions/logarithm/logPowerEquation.d.ts +12 -0
  46. package/lib/exercises/functions/logarithm/logPowerEquation.d.ts.map +1 -0
  47. package/lib/exercises/functions/logarithm/logPowerEquation.js +103 -0
  48. package/lib/exercises/functions/logarithm/logSimplifiying.d.ts +9 -0
  49. package/lib/exercises/functions/logarithm/logSimplifiying.d.ts.map +1 -0
  50. package/lib/exercises/functions/logarithm/logSimplifiying.js +77 -0
  51. package/lib/exercises/sets/intervals/inequalityToInterval.d.ts.map +1 -1
  52. package/lib/exercises/trigonometry/associatePoint.d.ts +7 -0
  53. package/lib/exercises/trigonometry/associatePoint.d.ts.map +1 -0
  54. package/lib/exercises/trigonometry/associatePoint.js +64 -0
  55. package/lib/exercises/trigonometry/index.d.ts +1 -0
  56. package/lib/exercises/trigonometry/index.d.ts.map +1 -1
  57. package/lib/exercises/trigonometry/index.js +1 -0
  58. package/lib/exercises/trigonometry/remarkableValues.d.ts +1 -1
  59. package/lib/exercises/trigonometry/remarkableValues.d.ts.map +1 -1
  60. package/lib/exercises/trigonometry/remarkableValues.js +9 -7
  61. package/lib/index.d.ts +43 -18
  62. package/lib/index.d.ts.map +1 -1
  63. package/lib/math/complex/complex.d.ts +1 -1
  64. package/lib/math/numbers/logarithms/ln.d.ts +12 -0
  65. package/lib/math/numbers/logarithms/ln.d.ts.map +1 -0
  66. package/lib/math/numbers/logarithms/ln.js +18 -0
  67. package/lib/math/numbers/nombre.js +1 -1
  68. package/lib/math/numbers/reals/extendedRingElement.d.ts +2 -1
  69. package/lib/math/numbers/reals/extendedRingElement.d.ts.map +1 -1
  70. package/lib/math/polynomials/trinom.d.ts +2 -2
  71. package/lib/math/trigonometry/remarkableValue.d.ts +3 -10
  72. package/lib/math/trigonometry/remarkableValue.d.ts.map +1 -1
  73. package/lib/math/trigonometry/remarkableValue.js +5 -15
  74. package/lib/math/trigonometry/remarkableValues.d.ts +7 -1
  75. package/lib/math/trigonometry/remarkableValues.d.ts.map +1 -1
  76. package/lib/math/trigonometry/remarkableValues.js +63 -13
  77. package/lib/math/utils/arithmetic/gcd.js +1 -1
  78. package/lib/server.js +1 -7
  79. package/lib/tree/nodes/algebraicNode.d.ts +3 -0
  80. package/lib/tree/nodes/algebraicNode.d.ts.map +1 -1
  81. package/lib/tree/nodes/functions/absNode.d.ts +3 -1
  82. package/lib/tree/nodes/functions/absNode.d.ts.map +1 -1
  83. package/lib/tree/nodes/functions/absNode.js +5 -1
  84. package/lib/tree/nodes/functions/cosNode.d.ts +3 -1
  85. package/lib/tree/nodes/functions/cosNode.d.ts.map +1 -1
  86. package/lib/tree/nodes/functions/cosNode.js +21 -0
  87. package/lib/tree/nodes/functions/expNode.d.ts +3 -1
  88. package/lib/tree/nodes/functions/expNode.d.ts.map +1 -1
  89. package/lib/tree/nodes/functions/expNode.js +4 -0
  90. package/lib/tree/nodes/functions/functionNode.d.ts +3 -2
  91. package/lib/tree/nodes/functions/functionNode.d.ts.map +1 -1
  92. package/lib/tree/nodes/functions/functionNode.js +3 -2
  93. package/lib/tree/nodes/functions/log10Node.d.ts +20 -0
  94. package/lib/tree/nodes/functions/log10Node.d.ts.map +1 -0
  95. package/lib/tree/nodes/functions/log10Node.js +82 -0
  96. package/lib/tree/nodes/functions/logNode.d.ts +3 -1
  97. package/lib/tree/nodes/functions/logNode.d.ts.map +1 -1
  98. package/lib/tree/nodes/functions/logNode.js +33 -1
  99. package/lib/tree/nodes/functions/oppositeNode.d.ts +3 -0
  100. package/lib/tree/nodes/functions/oppositeNode.d.ts.map +1 -1
  101. package/lib/tree/nodes/functions/oppositeNode.js +7 -0
  102. package/lib/tree/nodes/functions/sinNode.d.ts +3 -1
  103. package/lib/tree/nodes/functions/sinNode.d.ts.map +1 -1
  104. package/lib/tree/nodes/functions/sinNode.js +21 -0
  105. package/lib/tree/nodes/functions/sqrtNode.d.ts +3 -0
  106. package/lib/tree/nodes/functions/sqrtNode.d.ts.map +1 -1
  107. package/lib/tree/nodes/functions/sqrtNode.js +41 -0
  108. package/lib/tree/nodes/geometry/lengthNode.d.ts +5 -1
  109. package/lib/tree/nodes/geometry/lengthNode.d.ts.map +1 -1
  110. package/lib/tree/nodes/geometry/lengthNode.js +12 -1
  111. package/lib/tree/nodes/inequations/inequationSolutionNode.d.ts +3 -2
  112. package/lib/tree/nodes/inequations/inequationSolutionNode.d.ts.map +1 -1
  113. package/lib/tree/nodes/inequations/inequationSolutionNode.js +15 -6
  114. package/lib/tree/nodes/node.d.ts +1 -0
  115. package/lib/tree/nodes/node.d.ts.map +1 -1
  116. package/lib/tree/nodes/node.js +14 -1
  117. package/lib/tree/nodes/numbers/constantNode.d.ts +3 -0
  118. package/lib/tree/nodes/numbers/constantNode.d.ts.map +1 -1
  119. package/lib/tree/nodes/numbers/constantNode.js +7 -0
  120. package/lib/tree/nodes/numbers/numberNode.d.ts +3 -0
  121. package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
  122. package/lib/tree/nodes/numbers/numberNode.js +7 -0
  123. package/lib/tree/nodes/operators/addNode.d.ts +3 -0
  124. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  125. package/lib/tree/nodes/operators/addNode.js +175 -0
  126. package/lib/tree/nodes/operators/divideNode.d.ts +3 -0
  127. package/lib/tree/nodes/operators/divideNode.d.ts.map +1 -1
  128. package/lib/tree/nodes/operators/divideNode.js +12 -0
  129. package/lib/tree/nodes/operators/fractionNode.d.ts +3 -0
  130. package/lib/tree/nodes/operators/fractionNode.d.ts.map +1 -1
  131. package/lib/tree/nodes/operators/fractionNode.js +86 -0
  132. package/lib/tree/nodes/operators/multiplyNode.d.ts +5 -0
  133. package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
  134. package/lib/tree/nodes/operators/multiplyNode.js +127 -10
  135. package/lib/tree/nodes/operators/powerNode.d.ts +3 -0
  136. package/lib/tree/nodes/operators/powerNode.d.ts.map +1 -1
  137. package/lib/tree/nodes/operators/powerNode.js +46 -0
  138. package/lib/tree/nodes/operators/substractNode.d.ts +3 -0
  139. package/lib/tree/nodes/operators/substractNode.d.ts.map +1 -1
  140. package/lib/tree/nodes/operators/substractNode.js +12 -0
  141. package/lib/tree/nodes/sets/discreteSetNode.d.ts +3 -1
  142. package/lib/tree/nodes/sets/discreteSetNode.d.ts.map +1 -1
  143. package/lib/tree/nodes/sets/discreteSetNode.js +7 -1
  144. package/lib/tree/nodes/sets/intervalNode.d.ts +3 -1
  145. package/lib/tree/nodes/sets/intervalNode.d.ts.map +1 -1
  146. package/lib/tree/nodes/sets/intervalNode.js +7 -1
  147. package/lib/tree/nodes/sets/setNode.d.ts +9 -1
  148. package/lib/tree/nodes/sets/setNode.d.ts.map +1 -1
  149. package/lib/tree/nodes/sets/setNode.js +12 -0
  150. package/lib/tree/nodes/sets/unionIntervalNode.d.ts +3 -1
  151. package/lib/tree/nodes/sets/unionIntervalNode.d.ts.map +1 -1
  152. package/lib/tree/nodes/sets/unionIntervalNode.js +7 -1
  153. package/lib/tree/nodes/variables/variableNode.d.ts +3 -0
  154. package/lib/tree/nodes/variables/variableNode.d.ts.map +1 -1
  155. package/lib/tree/nodes/variables/variableNode.js +10 -0
  156. 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(): Node;
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;gBAEH,KAAK,EAAE,aAAa;IAMhC,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAOf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAG1B,QAAQ,IAAI,IAAI;IAIhB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGtC"}
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(): Node;
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,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;gBAEH,KAAK,EAAE,aAAa;IAMhC,YAAY,IAAI,MAAM;IAItB,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAI1B,KAAK,IAAI,MAAM;IAQf,QAAQ,IAAI,IAAI;IAGhB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGtC"}
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(): Node;
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;gBACH,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAgBf,iBAAiB,IAAI,aAAa,EAAE;IAUpC,cAAc,IAAI,MAAM,EAAE;IAI1B,QAAQ,IAAI,IAAI;IAGhB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGtC"}
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;
@@ -7,8 +7,9 @@ export declare enum FunctionsIds {
7
7
  cos = 2,
8
8
  sin = 3,
9
9
  log = 4,
10
- exp = 5,
11
- abs = 6
10
+ log10 = 5,
11
+ exp = 6,
12
+ abs = 7
12
13
  }
13
14
  export interface FunctionNode extends AlgebraicNode {
14
15
  id: FunctionsIds;
@@ -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["exp"] = 5] = "exp";
17
- FunctionsIds[FunctionsIds["abs"] = 6] = "abs";
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(): Node;
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;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,IAAI,CAAC,EAAE,WAAW,CAAC;gBAEP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAOpD,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAaf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAG1B,QAAQ,IAAI,IAAI;IAGhB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGtC"}
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.opposite;
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;IAMpD,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;CAGtC"}
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(): Node;
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,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;gBAEH,KAAK,EAAE,aAAa;IAMhC,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,MAAM;IAMf,iBAAiB,IAAI,aAAa,EAAE;IASpC,cAAc,IAAI,MAAM,EAAE;IAI1B,QAAQ,IAAI,IAAI;IAGhB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGtC"}
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;AACjD,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;gBAEP,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,WAAW;IAMpD,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;CAGtC"}
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;AAEhD,qBAAa,UAAW,YAAW,aAAa;IAC9C,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,CAAC;gBAEH,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;IASnD,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;CAQtC"}
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;