math-exercises 2.2.69 → 2.2.71

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 (213) hide show
  1. package/lib/exercises/math/calcul/arithmetics/divisorsList.d.ts.map +1 -1
  2. package/lib/exercises/math/calcul/arithmetics/divisorsList.js +2 -1
  3. package/lib/exercises/math/calcul/arithmetics/primeNumbers.d.ts.map +1 -1
  4. package/lib/exercises/math/calcul/arithmetics/primeNumbers.js +2 -1
  5. package/lib/exercises/math/calcul/fractions/fractionsOperations.d.ts.map +1 -1
  6. package/lib/exercises/math/calcul/fractions/fractionsOperations.js +6 -1
  7. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts +12 -0
  8. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.d.ts.map +1 -0
  9. package/lib/exercises/math/calculLitteral/distributivity/doubleDistributivitySubstract.js +128 -0
  10. package/lib/exercises/math/calculLitteral/distributivity/index.d.ts +1 -0
  11. package/lib/exercises/math/calculLitteral/distributivity/index.d.ts.map +1 -1
  12. package/lib/exercises/math/calculLitteral/distributivity/index.js +1 -0
  13. package/lib/exercises/math/calculLitteral/equation/equationType1Exercise.d.ts.map +1 -1
  14. package/lib/exercises/math/calculLitteral/equation/equationType1Exercise.js +3 -6
  15. package/lib/exercises/math/calculLitteral/equation/equationType2Exercise.d.ts.map +1 -1
  16. package/lib/exercises/math/calculLitteral/equation/equationType2Exercise.js +3 -8
  17. package/lib/exercises/math/calculLitteral/equation/equationType3Exercise.d.ts.map +1 -1
  18. package/lib/exercises/math/calculLitteral/equation/equationType3Exercise.js +7 -9
  19. package/lib/exercises/math/calculLitteral/equation/equationType4Exercise.d.ts.map +1 -1
  20. package/lib/exercises/math/calculLitteral/equation/equationType4Exercise.js +6 -19
  21. package/lib/exercises/math/calculLitteral/factorisation/factoByX.d.ts +8 -0
  22. package/lib/exercises/math/calculLitteral/factorisation/factoByX.d.ts.map +1 -0
  23. package/lib/exercises/math/calculLitteral/factorisation/factoByX.js +146 -0
  24. package/lib/exercises/math/calculLitteral/factorisation/index.d.ts +1 -0
  25. package/lib/exercises/math/calculLitteral/factorisation/index.d.ts.map +1 -1
  26. package/lib/exercises/math/calculLitteral/factorisation/index.js +1 -0
  27. package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.d.ts.map +1 -1
  28. package/lib/exercises/math/functions/absolute/absolueValueAffineEquation.js +2 -5
  29. package/lib/exercises/math/functions/trinoms/coefficientsIdentification.js +3 -3
  30. package/lib/exercises/math/functions/trinoms/findSecondRoot.d.ts +2 -2
  31. package/lib/exercises/math/functions/trinoms/findSecondRoot.d.ts.map +1 -1
  32. package/lib/exercises/math/functions/trinoms/findSecondRoot.js +5 -5
  33. package/lib/exercises/math/functions/trinoms/rootsProduct.d.ts +2 -2
  34. package/lib/exercises/math/functions/trinoms/rootsProduct.d.ts.map +1 -1
  35. package/lib/exercises/math/functions/trinoms/rootsProduct.js +6 -6
  36. package/lib/exercises/math/functions/trinoms/rootsSum.d.ts +2 -2
  37. package/lib/exercises/math/functions/trinoms/rootsSum.d.ts.map +1 -1
  38. package/lib/exercises/math/functions/trinoms/rootsSum.js +7 -7
  39. package/lib/exercises/math/functions/trinoms/trinomSignFromRoots.js +6 -6
  40. package/lib/exercises/math/geometry/angles/index.d.ts +2 -0
  41. package/lib/exercises/math/geometry/angles/index.d.ts.map +1 -0
  42. package/lib/exercises/math/geometry/angles/index.js +17 -0
  43. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts +11 -0
  44. package/lib/exercises/math/geometry/angles/recognizeAngleType.d.ts.map +1 -0
  45. package/lib/exercises/math/geometry/angles/recognizeAngleType.js +272 -0
  46. package/lib/exercises/math/geometry/areas/rightTriangleArea.d.ts +3 -1
  47. package/lib/exercises/math/geometry/areas/rightTriangleArea.d.ts.map +1 -1
  48. package/lib/exercises/math/geometry/areas/rightTriangleArea.js +10 -22
  49. package/lib/exercises/math/geometry/areas/triangleArea.d.ts +6 -1
  50. package/lib/exercises/math/geometry/areas/triangleArea.d.ts.map +1 -1
  51. package/lib/exercises/math/geometry/areas/triangleArea.js +34 -48
  52. package/lib/exercises/math/geometry/euclidianConstructions/pointImageFromTranslation.js +1 -1
  53. package/lib/exercises/math/geometry/index.d.ts +2 -0
  54. package/lib/exercises/math/geometry/index.d.ts.map +1 -1
  55. package/lib/exercises/math/geometry/index.js +2 -0
  56. package/lib/exercises/math/geometry/pythagore/isTriangleRight.d.ts.map +1 -1
  57. package/lib/exercises/math/geometry/pythagore/pythagore.d.ts +0 -3
  58. package/lib/exercises/math/geometry/pythagore/pythagore.d.ts.map +1 -1
  59. package/lib/exercises/math/geometry/pythagore/pythagore.js +19 -25
  60. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts +1 -2
  61. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.d.ts.map +1 -1
  62. package/lib/exercises/math/geometry/pythagore/pythagoreCalcul.js +30 -65
  63. package/lib/exercises/math/geometry/quadrilaterals/index.d.ts +2 -0
  64. package/lib/exercises/math/geometry/quadrilaterals/index.d.ts.map +1 -0
  65. package/lib/exercises/math/geometry/quadrilaterals/index.js +17 -0
  66. package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.d.ts +14 -0
  67. package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.d.ts.map +1 -0
  68. package/lib/exercises/math/geometry/quadrilaterals/quadrilateralRecognition.js +221 -0
  69. package/lib/exercises/math/geometry/thales/index.d.ts.map +1 -1
  70. package/lib/exercises/math/geometry/thales/index.js +0 -1
  71. package/lib/exercises/math/geometry/thales/thales.js +2 -2
  72. package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts +3 -4
  73. package/lib/exercises/math/geometry/thales/thalesCalcul.d.ts.map +1 -1
  74. package/lib/exercises/math/geometry/thales/thalesCalcul.js +69 -78
  75. package/lib/exercises/math/geometry/volumes/parallelepipedVolume.js +3 -3
  76. package/lib/exercises/math/geometry/volumes/sphereVolume.js +1 -1
  77. package/lib/exercises/math/trigonometry/trigonometry.d.ts +2 -3
  78. package/lib/exercises/math/trigonometry/trigonometry.d.ts.map +1 -1
  79. package/lib/exercises/math/trigonometry/trigonometry.js +32 -31
  80. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts +3 -2
  81. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.d.ts.map +1 -1
  82. package/lib/exercises/math/trigonometry/trigonometryAngleCalcul.js +18 -28
  83. package/lib/exercises/math/trigonometry/trigonometrySideCalcul.d.ts +5 -4
  84. package/lib/exercises/math/trigonometry/trigonometrySideCalcul.d.ts.map +1 -1
  85. package/lib/exercises/math/trigonometry/trigonometrySideCalcul.js +60 -56
  86. package/lib/exercises/pc/index.d.ts +0 -4
  87. package/lib/exercises/pc/index.d.ts.map +1 -1
  88. package/lib/exercises/pc/index.js +6 -4
  89. package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts +1 -0
  90. package/lib/exercises/utils/geogebra/toGGBCommandsProps.d.ts.map +1 -1
  91. package/lib/exercises/vea/equationVEA.d.ts +2 -0
  92. package/lib/exercises/vea/equationVEA.d.ts.map +1 -0
  93. package/lib/exercises/vea/equationVEA.js +24 -0
  94. package/lib/exercises/vea/rationalVEA.d.ts.map +1 -1
  95. package/lib/exercises/vea/sqrtVEA.d.ts +6 -0
  96. package/lib/exercises/vea/sqrtVEA.d.ts.map +1 -0
  97. package/lib/exercises/vea/sqrtVEA.js +30 -0
  98. package/lib/geogebra/geogebraConstructor.d.ts +2 -0
  99. package/lib/geogebra/geogebraConstructor.d.ts.map +1 -1
  100. package/lib/geogebra/geogebraConstructor.js +7 -0
  101. package/lib/index.d.ts +39 -46
  102. package/lib/index.d.ts.map +1 -1
  103. package/lib/math/complex/complex.d.ts +1 -1
  104. package/lib/math/geometry/angle.d.ts +47 -0
  105. package/lib/math/geometry/angle.d.ts.map +1 -0
  106. package/lib/math/geometry/angle.js +210 -0
  107. package/lib/math/geometry/line.d.ts +7 -1
  108. package/lib/math/geometry/line.d.ts.map +1 -1
  109. package/lib/math/geometry/line.js +33 -0
  110. package/lib/math/geometry/parallelogram.d.ts +23 -0
  111. package/lib/math/geometry/parallelogram.d.ts.map +1 -0
  112. package/lib/math/geometry/parallelogram.js +70 -0
  113. package/lib/math/geometry/point.d.ts +4 -0
  114. package/lib/math/geometry/point.d.ts.map +1 -1
  115. package/lib/math/geometry/point.js +20 -0
  116. package/lib/math/geometry/quadrilateral.d.ts +15 -0
  117. package/lib/math/geometry/quadrilateral.d.ts.map +1 -0
  118. package/lib/math/geometry/quadrilateral.js +38 -0
  119. package/lib/math/geometry/rectangle.d.ts +24 -0
  120. package/lib/math/geometry/rectangle.d.ts.map +1 -0
  121. package/lib/math/geometry/rectangle.js +64 -0
  122. package/lib/math/geometry/rhombus.d.ts +19 -0
  123. package/lib/math/geometry/rhombus.d.ts.map +1 -0
  124. package/lib/math/geometry/rhombus.js +46 -0
  125. package/lib/math/geometry/rightTriangle.d.ts +31 -0
  126. package/lib/math/geometry/rightTriangle.d.ts.map +1 -0
  127. package/lib/math/geometry/rightTriangle.js +113 -0
  128. package/lib/math/geometry/segment.d.ts +24 -6
  129. package/lib/math/geometry/segment.d.ts.map +1 -1
  130. package/lib/math/geometry/segment.js +70 -4
  131. package/lib/math/geometry/square.d.ts +22 -0
  132. package/lib/math/geometry/square.d.ts.map +1 -0
  133. package/lib/math/geometry/square.js +43 -0
  134. package/lib/math/geometry/triangle.d.ts +45 -45
  135. package/lib/math/geometry/triangle.d.ts.map +1 -1
  136. package/lib/math/geometry/triangle.js +159 -186
  137. package/lib/math/geometry/vector.d.ts +5 -2
  138. package/lib/math/geometry/vector.d.ts.map +1 -1
  139. package/lib/math/geometry/vector.js +27 -9
  140. package/lib/math/numbers/rationals/rational.d.ts +1 -1
  141. package/lib/math/numbers/reals/extendedRingElement.d.ts +1 -1
  142. package/lib/math/numbers/reals/real.d.ts.map +1 -1
  143. package/lib/math/numbers/reals/real.js +3 -0
  144. package/lib/math/polynomials/generalAffine.d.ts +3 -0
  145. package/lib/math/polynomials/generalAffine.d.ts.map +1 -1
  146. package/lib/math/polynomials/generalAffine.js +5 -1
  147. package/lib/math/polynomials/polynomial.d.ts +1 -1
  148. package/lib/math/polynomials/trinom.d.ts +2 -2
  149. package/lib/math/utils/geometry/pythagoricianTriplets.d.ts +1 -0
  150. package/lib/math/utils/geometry/pythagoricianTriplets.d.ts.map +1 -1
  151. package/lib/math/utils/geometry/pythagoricianTriplets.js +14 -1
  152. package/lib/math/utils/random/randfloat.d.ts +1 -1
  153. package/lib/math/utils/random/randfloat.d.ts.map +1 -1
  154. package/lib/math/utils/random/randfloat.js +8 -1
  155. package/lib/math/utils/random/randint.d.ts +8 -1
  156. package/lib/math/utils/random/randint.d.ts.map +1 -1
  157. package/lib/math/utils/random/randint.js +6 -1
  158. package/lib/playground.d.ts.map +1 -1
  159. package/lib/playground.js +1 -8
  160. package/lib/tree/nodes/functions/absNode.d.ts +1 -1
  161. package/lib/tree/nodes/functions/functionNode.d.ts +2 -2
  162. package/lib/tree/nodes/functions/functionNode.d.ts.map +1 -1
  163. package/lib/tree/nodes/functions/oppositeNode.d.ts +5 -5
  164. package/lib/tree/nodes/functions/oppositeNode.d.ts.map +1 -1
  165. package/lib/tree/nodes/node.d.ts +6 -2
  166. package/lib/tree/nodes/node.d.ts.map +1 -1
  167. package/lib/tree/nodes/node.js +3 -0
  168. package/lib/tree/nodes/nodeConstructor.d.ts.map +1 -1
  169. package/lib/tree/nodes/nodeConstructor.js +8 -0
  170. package/lib/tree/nodes/numbers/numberNode.d.ts +2 -0
  171. package/lib/tree/nodes/numbers/numberNode.d.ts.map +1 -1
  172. package/lib/tree/nodes/numbers/numberNode.js +6 -1
  173. package/lib/tree/nodes/operators/addNode.d.ts.map +1 -1
  174. package/lib/tree/nodes/operators/addNode.js +123 -89
  175. package/lib/tree/nodes/operators/multiplyNode.d.ts.map +1 -1
  176. package/lib/tree/nodes/operators/multiplyNode.js +3 -3
  177. package/lib/tree/nodes/polynomials/monomNode.d.ts +47 -0
  178. package/lib/tree/nodes/polynomials/monomNode.d.ts.map +1 -0
  179. package/lib/tree/nodes/polynomials/monomNode.js +214 -0
  180. package/lib/tree/nodes/polynomials/trinomNode.d.ts +70 -0
  181. package/lib/tree/nodes/polynomials/trinomNode.d.ts.map +1 -0
  182. package/lib/tree/nodes/polynomials/trinomNode.js +156 -0
  183. package/lib/tree/nodes/variables/variableNode.d.ts.map +1 -1
  184. package/lib/tree/nodes/variables/variableNode.js +1 -1
  185. package/lib/tree/parsers/affineParser.d.ts.map +1 -1
  186. package/lib/tree/parsers/affineParser.js +2 -1
  187. package/lib/tree/parsers/discreteSetParser.d.ts +3 -0
  188. package/lib/tree/parsers/discreteSetParser.d.ts.map +1 -0
  189. package/lib/tree/parsers/discreteSetParser.js +23 -0
  190. package/lib/tree/parsers/equationSolutionParser.d.ts +1 -1
  191. package/lib/tree/parsers/equationSolutionParser.d.ts.map +1 -1
  192. package/lib/tree/parsers/equationSolutionParser.js +15 -4
  193. package/lib/tree/parsers/latexParser.d.ts +5 -1
  194. package/lib/tree/parsers/latexParser.d.ts.map +1 -1
  195. package/lib/tree/parsers/latexParser.js +17 -3
  196. package/lib/tree/parsers/monomParser.d.ts +2 -2
  197. package/lib/tree/parsers/monomParser.d.ts.map +1 -1
  198. package/lib/tree/parsers/monomParser.js +61 -8
  199. package/lib/tree/parsers/rationalParser.d.ts +1 -1
  200. package/lib/tree/parsers/rationalParser.d.ts.map +1 -1
  201. package/lib/tree/parsers/rationalParser.js +28 -24
  202. package/lib/tree/parsers/sqrtParser.d.ts +9 -0
  203. package/lib/tree/parsers/sqrtParser.d.ts.map +1 -0
  204. package/lib/tree/parsers/sqrtParser.js +52 -0
  205. package/lib/tree/parsers/trinomParser.d.ts +1 -1
  206. package/lib/tree/parsers/trinomParser.d.ts.map +1 -1
  207. package/lib/tree/parsers/trinomParser.js +14 -2
  208. package/lib/tree/utilities/functionComposition.d.ts +1 -1
  209. package/lib/tree/utilities/functionComposition.d.ts.map +1 -1
  210. package/lib/utils/arrays/rotation.d.ts +8 -0
  211. package/lib/utils/arrays/rotation.d.ts.map +1 -0
  212. package/lib/utils/arrays/rotation.js +17 -0
  213. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ import { AlgebraicNode, SimplifyOptions } from "../algebraicNode";
2
+ import { Node, NodeIds, NodeOptions, NodeType } from "../node";
3
+ export declare const monom: (a: AlgebraicNode | number | string, degree: number, opts?: MonomNodeOptions) => MonomNode;
4
+ export declare function isMonomNode(a: Node): a is MonomNode;
5
+ export declare function parseToMonomNode(a: Node, variable?: string): false | MonomNode;
6
+ type MonomNodeOptions = {
7
+ variable: string;
8
+ };
9
+ /**
10
+ * un monom est une expression du type ax^degree
11
+ * avec a réel !==0 et degree > 0 (convention)
12
+ */
13
+ export declare class MonomNode implements AlgebraicNode {
14
+ a: AlgebraicNode;
15
+ degree: number;
16
+ isNumeric: boolean;
17
+ variable: string;
18
+ type: NodeType;
19
+ constructor(a: AlgebraicNode | number, degree: number, opts?: MonomNodeOptions);
20
+ derivative(varName?: string | undefined): AlgebraicNode;
21
+ equals(node: AlgebraicNode): boolean;
22
+ evaluate(vars?: Record<string, number>): number;
23
+ toDetailedEvaluation(vars: Record<string, AlgebraicNode>): AlgebraicNode;
24
+ simplify(opts?: SimplifyOptions): AlgebraicNode;
25
+ toAllValidTexs(opts?: NodeOptions | undefined): string[];
26
+ toEquivalentNodes(opts?: NodeOptions | undefined): AlgebraicNode[];
27
+ toMathString(): string;
28
+ toTree(): AlgebraicNode;
29
+ toTex(): string;
30
+ toIdentifiers(): {
31
+ id: NodeIds;
32
+ a: {
33
+ id: NodeIds;
34
+ } & Record<string, any>;
35
+ degree: number;
36
+ opts: {
37
+ variable: string;
38
+ };
39
+ };
40
+ }
41
+ export declare const parseToMonom: (node: AlgebraicNode, { variable, maxDegree, minDegree }?: {
42
+ variable: string;
43
+ maxDegree: undefined;
44
+ minDegree: number;
45
+ }) => false | MonomNode;
46
+ export {};
47
+ //# sourceMappingURL=monomNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/monomNode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO/D,eAAO,MAAM,KAAK,MACb,aAAa,GAAG,MAAM,GAAG,MAAM,UAC1B,MAAM,SACP,gBAAgB,cAMxB,CAAC;AACF,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,SAAS,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,SAAM,qBAGvD;AACD,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAO7C;;;GAGG;AACH,qBAAa,SAAU,YAAW,aAAa;IAC7C,CAAC,EAAE,aAAa,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAkB;gBAG9B,CAAC,EAAE,aAAa,GAAG,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB;IAUzB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAMvC,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAGtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAGxD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe;IAG/B,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAG7C,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,SAAS;IAGhD,YAAY;IAIZ,MAAM;IAIN,KAAK;IAIL,aAAa;;;;;;;;;;CAQd;AAED,eAAO,MAAM,YAAY,SACjB,aAAa;;;;uBAyIpB,CAAC"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseToMonom = exports.MonomNode = exports.parseToMonomNode = exports.isMonomNode = exports.monom = void 0;
4
+ const algebraicNode_1 = require("../algebraicNode");
5
+ const oppositeNode_1 = require("../functions/oppositeNode");
6
+ const node_1 = require("../node");
7
+ // import { NodeIdentifiers } from "../nodeConstructor";
8
+ const multiplyNode_1 = require("../operators/multiplyNode");
9
+ const powerNode_1 = require("../operators/powerNode");
10
+ const variableNode_1 = require("../variables/variableNode");
11
+ const monom = (a, degree, opts) => {
12
+ const coeff = typeof a === "number" ? a.toTree() : typeof a === "string" ? a.toTree() : a;
13
+ return new MonomNode(coeff, degree, opts);
14
+ };
15
+ exports.monom = monom;
16
+ function isMonomNode(a) {
17
+ return a.type === node_1.NodeType.monom;
18
+ }
19
+ exports.isMonomNode = isMonomNode;
20
+ function parseToMonomNode(a, variable = "x") {
21
+ if (!(0, algebraicNode_1.isAlgebraicNode)(a))
22
+ return false;
23
+ return (0, exports.parseToMonom)(a, { variable, minDegree: 1, maxDegree: undefined });
24
+ }
25
+ exports.parseToMonomNode = parseToMonomNode;
26
+ /**
27
+ * un monom est une expression du type ax^degree
28
+ * avec a réel !==0 et degree > 0 (convention)
29
+ */
30
+ class MonomNode {
31
+ // roots: AlgebraicNode[];
32
+ constructor(a, degree, opts) {
33
+ this.type = node_1.NodeType.monom;
34
+ // super([c, b, a], opts?.variable ?? "x");
35
+ this.a = typeof a === "number" ? a.toTree() : a;
36
+ if (this.a.evaluate() === 0)
37
+ throw new Error("Monom with coeff null");
38
+ this.degree = degree;
39
+ this.isNumeric = false;
40
+ this.variable = opts?.variable ?? "x";
41
+ }
42
+ derivative(varName) {
43
+ return (0, multiplyNode_1.multiply)((0, multiplyNode_1.multiply)(this.a, this.degree), (0, powerNode_1.power)(this.variable, this.degree - 1)).simplify();
44
+ }
45
+ equals(node) {
46
+ return this.toTree().equals(node);
47
+ }
48
+ evaluate(vars) {
49
+ return this.toTree().evaluate(vars);
50
+ }
51
+ toDetailedEvaluation(vars) {
52
+ return this.toTree().toDetailedEvaluation(vars);
53
+ }
54
+ simplify(opts) {
55
+ return this.toTree().simplify(opts);
56
+ }
57
+ toAllValidTexs(opts) {
58
+ return this.toTree().toAllValidTexs(opts);
59
+ }
60
+ toEquivalentNodes(opts) {
61
+ return this.toTree().toEquivalentNodes(opts);
62
+ }
63
+ toMathString() {
64
+ return this.toTree().toMathString();
65
+ }
66
+ toTree() {
67
+ return (0, multiplyNode_1.multiply)(this.a, (0, powerNode_1.power)(this.variable, this.degree)).simplify();
68
+ }
69
+ toTex() {
70
+ return this.toTree().toTex();
71
+ }
72
+ toIdentifiers() {
73
+ return {
74
+ id: node_1.NodeIds.monom,
75
+ a: this.a.toIdentifiers(),
76
+ degree: this.degree,
77
+ opts: { variable: this.variable },
78
+ };
79
+ }
80
+ }
81
+ exports.MonomNode = MonomNode;
82
+ const parseToMonom = (node, { variable, maxDegree, minDegree } = {
83
+ variable: "x",
84
+ maxDegree: undefined,
85
+ minDegree: 1,
86
+ }) => {
87
+ variable = variable ?? "x";
88
+ maxDegree = maxDegree ?? undefined;
89
+ minDegree = minDegree ?? 1;
90
+ if (isMonomNode(node)) {
91
+ if (node.variable !== variable)
92
+ return false;
93
+ if (maxDegree && node.degree > maxDegree)
94
+ return false;
95
+ if (minDegree && node.degree < minDegree)
96
+ return false;
97
+ return node;
98
+ }
99
+ if (node.isNumeric)
100
+ return false;
101
+ if ((0, variableNode_1.isVariableNode)(node) && node.name === variable && minDegree < 2)
102
+ return new MonomNode(1, 1, { variable });
103
+ if ((0, oppositeNode_1.isOppositeNode)(node) &&
104
+ (0, variableNode_1.isVariableNode)(node.child) &&
105
+ node.child.name === variable &&
106
+ minDegree < 2)
107
+ return new MonomNode(-1, 1, { variable });
108
+ if ((0, powerNode_1.isSquareNode)(node)) {
109
+ if (minDegree > 2)
110
+ return false;
111
+ if (maxDegree && maxDegree < 2)
112
+ return false;
113
+ if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
114
+ return false;
115
+ return new MonomNode(1, 2, { variable });
116
+ }
117
+ if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isSquareNode)(node.child)) {
118
+ if (minDegree > 2)
119
+ return false;
120
+ if (maxDegree && maxDegree < 2)
121
+ return false;
122
+ if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
123
+ node.child.leftChild.name !== variable)
124
+ return false;
125
+ return new MonomNode(-1, 2, { variable });
126
+ }
127
+ if ((0, powerNode_1.isPowerNode)(node)) {
128
+ if (!node.rightChild.isNumeric)
129
+ return false;
130
+ const powerEv = node.rightChild.evaluate();
131
+ if (maxDegree && powerEv > maxDegree)
132
+ return false;
133
+ if (minDegree && powerEv < minDegree)
134
+ return false;
135
+ if (!(0, variableNode_1.isVariableNode)(node.leftChild) || node.leftChild.name !== variable)
136
+ return false;
137
+ return new MonomNode(1, powerEv, { variable });
138
+ }
139
+ if ((0, oppositeNode_1.isOppositeNode)(node) && (0, powerNode_1.isPowerNode)(node.child)) {
140
+ if (!node.child.rightChild.isNumeric)
141
+ return false;
142
+ const powerEv = node.child.rightChild.evaluate();
143
+ if (maxDegree && powerEv > maxDegree)
144
+ return false;
145
+ if (minDegree && powerEv < minDegree)
146
+ return false;
147
+ if (!(0, variableNode_1.isVariableNode)(node.child.leftChild) ||
148
+ node.child.leftChild.name !== variable)
149
+ return false;
150
+ return new MonomNode(-1, powerEv, { variable });
151
+ }
152
+ if ((0, multiplyNode_1.isMultiplyNode)(node)) {
153
+ const numericChildPosition = node.leftChild.isNumeric
154
+ ? "left"
155
+ : node.rightChild.isNumeric
156
+ ? "right"
157
+ : undefined;
158
+ if (!numericChildPosition)
159
+ return false;
160
+ const numericChild = numericChildPosition === "left" ? node.leftChild : node.rightChild;
161
+ const varChild = numericChildPosition === "left" ? node.rightChild : node.leftChild;
162
+ if ((0, variableNode_1.isVariableNode)(varChild)) {
163
+ if (varChild.name !== variable || minDegree > 1)
164
+ return false;
165
+ else
166
+ return new MonomNode(numericChild, 1, { variable });
167
+ }
168
+ if ((0, powerNode_1.isSquareNode)(varChild)) {
169
+ if (minDegree > 2)
170
+ return false;
171
+ if (maxDegree && maxDegree < 2)
172
+ return false;
173
+ if (!(0, variableNode_1.isVariableNode)(varChild.leftChild) ||
174
+ varChild.leftChild.name !== variable)
175
+ return false;
176
+ return new MonomNode(numericChild, 2, { variable });
177
+ }
178
+ if ((0, oppositeNode_1.isOppositeNode)(varChild) && (0, powerNode_1.isSquareNode)(varChild.child)) {
179
+ if (minDegree > 2)
180
+ return false;
181
+ if (maxDegree && maxDegree < 2)
182
+ return false;
183
+ if (!(0, variableNode_1.isVariableNode)(varChild.child.leftChild) ||
184
+ varChild.child.leftChild.name !== variable)
185
+ return false;
186
+ return new MonomNode((0, oppositeNode_1.opposite)(numericChild), 2, { variable });
187
+ }
188
+ if ((0, powerNode_1.isPowerNode)(varChild) &&
189
+ (0, variableNode_1.isVariableNode)(varChild.leftChild) &&
190
+ varChild.leftChild.name === variable &&
191
+ varChild.rightChild.isNumeric) {
192
+ const powerEv = varChild.rightChild.evaluate();
193
+ if (maxDegree && powerEv > maxDegree)
194
+ return false;
195
+ if (minDegree && powerEv < minDegree)
196
+ return false;
197
+ return new MonomNode(numericChild, powerEv, { variable });
198
+ }
199
+ if ((0, oppositeNode_1.isOppositeNode)(varChild) &&
200
+ (0, powerNode_1.isPowerNode)(varChild.child) &&
201
+ (0, variableNode_1.isVariableNode)(varChild.child.leftChild) &&
202
+ varChild.child.leftChild.name === variable &&
203
+ varChild.child.rightChild.isNumeric) {
204
+ const powerEv = varChild.child.rightChild.evaluate();
205
+ if (maxDegree && powerEv > maxDegree)
206
+ return false;
207
+ if (minDegree && powerEv < minDegree)
208
+ return false;
209
+ return new MonomNode((0, oppositeNode_1.opposite)(numericChild), powerEv, { variable });
210
+ }
211
+ }
212
+ return false;
213
+ };
214
+ exports.parseToMonom = parseToMonom;
@@ -0,0 +1,70 @@
1
+ import { AlgebraicNode, SimplifyOptions } from "../../../tree/nodes/algebraicNode";
2
+ import { NodeIds, NodeOptions, NodeType } from "../../../tree/nodes/node";
3
+ import { NodeIdentifiers } from "../../../tree/nodes/nodeConstructor";
4
+ export declare abstract class TrinomNodeConstructor {
5
+ static random(aOpts?: {
6
+ min?: number;
7
+ max?: number;
8
+ excludes?: number[];
9
+ }, bOpts?: {
10
+ min?: number;
11
+ max?: number;
12
+ excludes?: number[];
13
+ }, cOpts?: {
14
+ min?: number;
15
+ max?: number;
16
+ excludes?: number[];
17
+ }): TrinomNode;
18
+ static randomCanonical(aOpts?: {
19
+ min?: number;
20
+ max?: number;
21
+ excludes?: number[];
22
+ from?: number[];
23
+ }, alphaOpts?: {
24
+ min?: number;
25
+ max?: number;
26
+ excludes?: number[];
27
+ }, betaOpts?: {
28
+ min?: number;
29
+ max?: number;
30
+ excludes?: number[];
31
+ }): TrinomNode;
32
+ static randomNiceRoots(nbOfRoots?: number): TrinomNode;
33
+ static fromCoeffs(coeffs: number[]): TrinomNode;
34
+ static fromIdentifiers(identifiers: TrinomNodeIdentifiers): TrinomNode;
35
+ }
36
+ export type TrinomNodeIdentifiers = {
37
+ id: NodeIds.trinom;
38
+ a: number | NodeIdentifiers;
39
+ b: number | NodeIdentifiers;
40
+ c: number | NodeIdentifiers;
41
+ opts?: TrinomNodeOptions;
42
+ };
43
+ type TrinomNodeOptions = {
44
+ variable: string;
45
+ };
46
+ export declare class TrinomNode implements AlgebraicNode {
47
+ a: AlgebraicNode;
48
+ b: AlgebraicNode;
49
+ c: AlgebraicNode;
50
+ isNumeric: boolean;
51
+ variable: string;
52
+ type: NodeType;
53
+ constructor(a: AlgebraicNode | number, b: AlgebraicNode | number, c: AlgebraicNode | number, opts?: TrinomNodeOptions);
54
+ getDelta(): AlgebraicNode;
55
+ derivative(varName?: string | undefined): import("../../../tree/nodes/operators/addNode").AddNode;
56
+ equals(node: AlgebraicNode): boolean;
57
+ evaluate(vars?: Record<string, number>): number;
58
+ toDetailedEvaluation(vars: Record<string, AlgebraicNode>): import("../../../tree/nodes/operators/addNode").AddNode | import("../../../tree/nodes/operators/multiplyNode").MultiplyNode;
59
+ simplify(opts?: SimplifyOptions): AlgebraicNode;
60
+ toAllValidTexs(opts?: NodeOptions | undefined): string[];
61
+ toEquivalentNodes(opts?: NodeOptions | undefined): AlgebraicNode[] | import("../../../tree/nodes/operators/multiplyNode").MultiplyNode[];
62
+ toMathString(): string;
63
+ getRoots(): AlgebraicNode[];
64
+ toTree(): import("../../../tree/nodes/operators/addNode").AddNode | import("../../../tree/nodes/operators/multiplyNode").MultiplyNode;
65
+ toTex(): string;
66
+ getCoeffs(): number[];
67
+ toIdentifiers(): TrinomNodeIdentifiers;
68
+ }
69
+ export {};
70
+ //# sourceMappingURL=trinomNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trinomNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/polynomials/trinomNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TrinomNode = exports.TrinomNodeConstructor = void 0;
4
+ const sqrtNode_1 = require("../../../tree/nodes/functions/sqrtNode");
5
+ const addNode_1 = require("../../../tree/nodes/operators/addNode");
6
+ const fractionNode_1 = require("../../../tree/nodes/operators/fractionNode");
7
+ const multiplyNode_1 = require("../../../tree/nodes/operators/multiplyNode");
8
+ const powerNode_1 = require("../../../tree/nodes/operators/powerNode");
9
+ const substractNode_1 = require("../../../tree/nodes/operators/substractNode");
10
+ const oppositeNode_1 = require("../../../tree/nodes/functions/oppositeNode");
11
+ const randint_1 = require("../../../math/utils/random/randint");
12
+ const random_1 = require("../../../utils/alea/random");
13
+ const node_1 = require("../../../tree/nodes/node");
14
+ const nodeConstructor_1 = require("../../../tree/nodes/nodeConstructor");
15
+ class TrinomNodeConstructor {
16
+ static random(aOpts, bOpts, cOpts) {
17
+ const a = (0, randint_1.randint)(aOpts?.min ?? -9, aOpts?.max ?? 10, aOpts?.excludes ?? [0]);
18
+ const b = (0, randint_1.randint)(bOpts?.min ?? -9, bOpts?.max ?? 10, bOpts?.excludes ?? []);
19
+ const c = (0, randint_1.randint)(cOpts?.min ?? -9, cOpts?.max ?? 10, cOpts?.excludes ?? []);
20
+ return new TrinomNode(a, b, c);
21
+ }
22
+ static randomCanonical(aOpts, alphaOpts, betaOpts) {
23
+ const a = aOpts?.from
24
+ ? (0, random_1.random)(aOpts.from)
25
+ : (0, randint_1.randint)(aOpts?.min ?? -9, aOpts?.max ?? 10, aOpts?.excludes ?? [0]);
26
+ const alpha = (0, randint_1.randint)(alphaOpts?.min ?? -9, alphaOpts?.max ?? 10, alphaOpts?.excludes ?? []);
27
+ const beta = (0, randint_1.randint)(betaOpts?.min ?? -9, betaOpts?.max ?? 10, betaOpts?.excludes ?? []);
28
+ const b = -2 * a * alpha;
29
+ const c = a * alpha ** 2 + beta;
30
+ return new TrinomNode(a, b, c);
31
+ }
32
+ static randomNiceRoots(nbOfRoots = 2) {
33
+ if (nbOfRoots === 0) {
34
+ //canonical +c
35
+ const a = (0, randint_1.randint)(-9, 10, [0]);
36
+ const root = (0, randint_1.randint)(-9, 10);
37
+ //a(x-root)^2 = ax^2 -2arootx + aroot^2
38
+ const c = a > 0 ? a * root ** 2 + (0, randint_1.randint)(1, 6) : a * root ** 2 - (0, randint_1.randint)(1, 6);
39
+ return new TrinomNode(a, -2 * a * root, c);
40
+ }
41
+ else if (nbOfRoots === 1) {
42
+ const a = (0, randint_1.randint)(-9, 10, [0]);
43
+ const root = (0, randint_1.randint)(-9, 10);
44
+ //a(x-root)^2 = ax^2 -2arootx + aroot^2
45
+ return new TrinomNode(a, -2 * a * root, a * root ** 2);
46
+ }
47
+ else {
48
+ const a = (0, randint_1.randint)(-9, 10, [0]);
49
+ const x1 = (0, randint_1.randint)(-9, 10, []);
50
+ const x2 = (0, randint_1.randint)(-9, 10, [x1]);
51
+ return new TrinomNode(a, -a * (x1 + x2), a * x1 * x2);
52
+ }
53
+ }
54
+ static fromCoeffs(coeffs) {
55
+ return new TrinomNode(coeffs[2], coeffs[1], coeffs[0]);
56
+ }
57
+ static fromIdentifiers(identifiers) {
58
+ return new TrinomNode(typeof identifiers.a === "number"
59
+ ? identifiers.a
60
+ : nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.a), typeof identifiers.b === "number"
61
+ ? identifiers.b
62
+ : nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.b), typeof identifiers.c === "number"
63
+ ? identifiers.c
64
+ : nodeConstructor_1.NodeConstructor.fromIdentifiers(identifiers.c), identifiers.opts);
65
+ }
66
+ }
67
+ exports.TrinomNodeConstructor = TrinomNodeConstructor;
68
+ class TrinomNode {
69
+ // roots: AlgebraicNode[];
70
+ constructor(a, b, c, opts) {
71
+ this.type = node_1.NodeType.trinom;
72
+ // super([c, b, a], opts?.variable ?? "x");
73
+ this.a = typeof a === "number" ? a.toTree() : a;
74
+ this.b = typeof b === "number" ? b.toTree() : b;
75
+ this.c = typeof c === "number" ? c.toTree() : c;
76
+ this.isNumeric = false;
77
+ this.variable = opts?.variable ?? "x";
78
+ }
79
+ getDelta() {
80
+ return (0, substractNode_1.substract)((0, powerNode_1.square)(this.b), (0, multiplyNode_1.multiply)(4, (0, multiplyNode_1.multiply)(this.a, this.c))).simplify();
81
+ }
82
+ // getRoots() {
83
+ // const delta = this.getDelta();
84
+ // if (delta < 0) return [];
85
+ // if (delta === 0) return [-this.b / (2 * this.a)];
86
+ // return [
87
+ // (-this.b - Math.sqrt(delta)) / (2 * this.a),
88
+ // (-this.b + Math.sqrt(delta)) / (2 * this.a),
89
+ // ].sort((a, b) => a - b);
90
+ // }
91
+ derivative(varName) {
92
+ return (0, addNode_1.add)((0, multiplyNode_1.multiply)(2, (0, multiplyNode_1.multiply)(this.a, "x")), this.b);
93
+ }
94
+ equals(node) {
95
+ return this.toTree().equals(node);
96
+ }
97
+ evaluate(vars) {
98
+ return this.toTree().evaluate(vars);
99
+ }
100
+ toDetailedEvaluation(vars) {
101
+ return this.toTree().toDetailedEvaluation(vars);
102
+ }
103
+ simplify(opts) {
104
+ return this.toTree().simplify(opts);
105
+ }
106
+ toAllValidTexs(opts) {
107
+ return this.toTree().toAllValidTexs(opts);
108
+ }
109
+ toEquivalentNodes(opts) {
110
+ return this.toTree().toEquivalentNodes(opts);
111
+ }
112
+ toMathString() {
113
+ return this.toTree().toMathString();
114
+ }
115
+ getRoots() {
116
+ const delta = this.getDelta();
117
+ const deltaEv = delta.evaluate();
118
+ if (deltaEv < 0)
119
+ return [];
120
+ if (deltaEv === 0)
121
+ return [(0, fractionNode_1.frac)((0, oppositeNode_1.opposite)(this.b), (0, multiplyNode_1.multiply)(2, this.a)).simplify()];
122
+ return [
123
+ (0, fractionNode_1.frac)((0, substractNode_1.substract)((0, oppositeNode_1.opposite)(this.b), (0, sqrtNode_1.sqrt)(delta)), (0, multiplyNode_1.multiply)(2, this.a)).simplify(),
124
+ (0, fractionNode_1.frac)((0, addNode_1.add)((0, oppositeNode_1.opposite)(this.b), (0, sqrtNode_1.sqrt)(delta)), (0, multiplyNode_1.multiply)(2, this.a)).simplify(),
125
+ ].sort((a, b) => a.evaluate() - b.evaluate());
126
+ }
127
+ toTree() {
128
+ const bEv = this.b.evaluate();
129
+ const cEv = this.c.evaluate();
130
+ const highMonom = (0, multiplyNode_1.multiply)(this.a, (0, powerNode_1.square)(this.variable));
131
+ const middleMonom = (0, multiplyNode_1.multiply)(this.b, this.variable);
132
+ if (!bEv && !cEv)
133
+ return highMonom;
134
+ if (!cEv)
135
+ return (0, addNode_1.add)(highMonom, middleMonom);
136
+ if (!bEv)
137
+ return (0, addNode_1.add)(highMonom, this.c);
138
+ return (0, addNode_1.add)(highMonom, (0, addNode_1.add)(middleMonom, this.c));
139
+ }
140
+ toTex() {
141
+ return this.toTree().toTex();
142
+ }
143
+ getCoeffs() {
144
+ return [this.c.evaluate(), this.b.evaluate(), this.a.evaluate()];
145
+ }
146
+ toIdentifiers() {
147
+ return {
148
+ id: node_1.NodeIds.trinom,
149
+ a: this.a.toIdentifiers(),
150
+ b: this.b.toIdentifiers(),
151
+ c: this.c.toIdentifiers(),
152
+ opts: { variable: this.variable },
153
+ };
154
+ }
155
+ }
156
+ exports.TrinomNode = TrinomNode;
@@ -1 +1 @@
1
- {"version":3,"file":"variableNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/variables/variableNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,WAAqB;IACzB,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,MAAM;IAIxB,aAAa;;;;IAMb,KAAK,IAAI,MAAM;IAGf,YAAY,IAAI,MAAM;IAGtB,QAAQ;IAGR,cAAc;IAGd,iBAAiB;IAIjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAStC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAKxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAKxD"}
1
+ {"version":3,"file":"variableNode.d.ts","sourceRoot":"","sources":["../../../../src/tree/nodes/variables/variableNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,YAAY,CAEzD;AACD,qBAAa,YAAa,YAAW,aAAa;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,WAAqB;IACzB,SAAS,EAAE,OAAO,CAAC;gBACP,IAAI,EAAE,MAAM;IAIxB,aAAa;;;;IAMb,KAAK,IAAI,MAAM;IAGf,YAAY,IAAI,MAAM;IAGtB,QAAQ;IAGR,cAAc;IAGd,iBAAiB;IAIjB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQtC,QAAQ;IAGR,MAAM,CAAC,IAAI,EAAE,aAAa;IAG1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAKxD,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa;CAKxD"}
@@ -36,7 +36,7 @@ class VariableNode {
36
36
  evaluate(vars) {
37
37
  const value = vars?.[this.name];
38
38
  if (value === undefined)
39
- throw Error(`Can't evaluate variable ${this.name}`);
39
+ return Number.NaN;
40
40
  return value;
41
41
  }
42
42
  // simplify(): Node {
@@ -1 +1 @@
1
- {"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,qKAqBzD,CAAC"}
1
+ {"version":3,"file":"affineParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/affineParser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,QAAS,MAAM,aAAY,MAAM,qKAuBzD,CAAC"}
@@ -7,6 +7,7 @@ const latexParser_1 = require("./latexParser");
7
7
  const monomParser_1 = require("./monomParser");
8
8
  const affineParser = (ans, variable = "x") => {
9
9
  try {
10
+ //double parse, pas opti
10
11
  const monom = (0, monomParser_1.monomParser)(ans, { variable, maxDegree: 1 });
11
12
  if (monom)
12
13
  return monom;
@@ -20,7 +21,7 @@ const affineParser = (ans, variable = "x") => {
20
21
  if (!numericChild)
21
22
  return false;
22
23
  const varChild = numericChild === "left" ? parsed.rightChild : parsed.leftChild;
23
- return (0, monomParser_1.isMonomNode)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
24
+ return (0, monomParser_1.isMonom)(varChild, { variable, maxDegree: 1 }) ? parsed : false;
24
25
  }
25
26
  return false;
26
27
  }
@@ -0,0 +1,3 @@
1
+ import { AlgebraicNode } from "../nodes/algebraicNode";
2
+ export declare const discreteSetParser: (str: string) => false | AlgebraicNode[];
3
+ //# sourceMappingURL=discreteSetParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discreteSetParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/discreteSetParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAMxE,eAAO,MAAM,iBAAiB,QAAS,MAAM,4BAe5C,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.discreteSetParser = void 0;
4
+ const latexParser_1 = require("./latexParser");
5
+ const discreteSetParser = (str) => {
6
+ try {
7
+ const formated = str
8
+ .replace("S", "")
9
+ .replace("=", "")
10
+ .replace("\\left", "")
11
+ .replace("\\right", "")
12
+ .replace("\\{", "")
13
+ .replace("\\}", "");
14
+ const elements = formated.split(";").map((e) => (0, latexParser_1.parseAlgebraic)(e));
15
+ if (elements.some((e) => !e))
16
+ return false;
17
+ return elements;
18
+ }
19
+ catch (err) {
20
+ return false;
21
+ }
22
+ };
23
+ exports.discreteSetParser = discreteSetParser;
@@ -1,3 +1,3 @@
1
1
  import { AlgebraicNode } from "../nodes/algebraicNode";
2
- export declare const equationSolutionParser: (str: string) => false | AlgebraicNode;
2
+ export declare const equationSolutionParser: (str: string, variable?: string) => false | AlgebraicNode;
3
3
  //# sourceMappingURL=equationSolutionParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"equationSolutionParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/equationSolutionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAKxE,eAAO,MAAM,sBAAsB,QAAS,MAAM,0BAgBjD,CAAC"}
1
+ {"version":3,"file":"equationSolutionParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/equationSolutionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAC;AAMxE,eAAO,MAAM,sBAAsB,QAAS,MAAM,6CAyBjD,CAAC"}
@@ -3,19 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.equationSolutionParser = void 0;
4
4
  const algebraicNode_1 = require("../nodes/algebraicNode");
5
5
  const equalNode_1 = require("../nodes/equations/equalNode");
6
- const hasVariableNode_1 = require("../nodes/hasVariableNode");
6
+ const variableNode_1 = require("../nodes/variables/variableNode");
7
7
  const latexParser_1 = require("./latexParser");
8
- const equationSolutionParser = (str) => {
8
+ const equationSolutionParser = (str, variable = "x") => {
9
9
  try {
10
10
  const parsed = (0, latexParser_1.parseLatex)(str);
11
11
  if ((0, equalNode_1.isEqualNode)(parsed)) {
12
12
  const children = [parsed.leftChild, parsed.rightChild];
13
- const scalar = children.find((e) => !(0, hasVariableNode_1.hasVariableNode)(e));
14
- if (!scalar)
13
+ const varNode = (0, variableNode_1.isVariableNode)(parsed.leftChild)
14
+ ? 0
15
+ : (0, variableNode_1.isVariableNode)(parsed.rightChild)
16
+ ? 1
17
+ : undefined;
18
+ if (varNode === undefined)
19
+ return false;
20
+ if (children[varNode].name !== "x")
21
+ return false;
22
+ const scalar = children[(varNode + 1) % 2];
23
+ if (!(0, algebraicNode_1.isAlgebraicNode)(scalar) || !scalar.isNumeric)
15
24
  return false;
16
25
  return scalar;
17
26
  }
18
27
  else if ((0, algebraicNode_1.isAlgebraicNode)(parsed)) {
28
+ if (!parsed.isNumeric)
29
+ return false;
19
30
  return parsed;
20
31
  }
21
32
  else {
@@ -2,6 +2,10 @@ import { AlgebraicNode } from "../nodes/algebraicNode";
2
2
  import { EqualNode } from "../nodes/equations/equalNode";
3
3
  import { InequationNode } from "../nodes/inequations/inequationNode";
4
4
  export declare const tokenize: (latex: string) => string[];
5
- export declare const parseAlgebraic: (latex: string) => AlgebraicNode;
5
+ type ParserOptions = {
6
+ allowStartingPower?: boolean;
7
+ };
8
+ export declare const parseAlgebraic: (latex: string, opts?: ParserOptions) => AlgebraicNode;
6
9
  export declare const parseLatex: (latex: string) => AlgebraicNode | EqualNode | InequationNode;
10
+ export {};
7
11
  //# sourceMappingURL=latexParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"latexParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/latexParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAkDrE,eAAO,MAAM,QAAQ,UAAW,MAAM,aA4BrC,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,MAAM,kBAa3C,CAAC;AAEF,eAAO,MAAM,UAAU,UAAW,MAAM,+CA2CvC,CAAC"}
1
+ {"version":3,"file":"latexParser.d.ts","sourceRoot":"","sources":["../../../src/tree/parsers/latexParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAkDrE,eAAO,MAAM,QAAQ,UAAW,MAAM,aA4BrC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AACF,eAAO,MAAM,cAAc,UAAW,MAAM,SAAS,aAAa,kBAyBjE,CAAC;AAEF,eAAO,MAAM,UAAU,UAAW,MAAM,+CA2CvC,CAAC"}