pimath 0.0.120 → 0.0.122

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 (175) hide show
  1. package/.idea/PI.iml +7 -1
  2. package/.idea/shelf/Uncommitted_changes_before_Update_at_24_07_2023_15_31_[Default_Changelist]/shelved.patch +90 -0
  3. package/.idea/shelf/Uncommitted_changes_before_Update_at_24_07_2023_15_31_[Default_Changelist]1/shelved.patch +107 -0
  4. package/.idea/shelf/Uncommitted_changes_before_Update_at_24_07_2023_15_31__Default_Changelist_.xml +4 -0
  5. package/.idea/shelf/Uncommitted_changes_before_Update_at_24_07_2023_15_31__Default_Changelist_1.xml +4 -0
  6. package/LICENSE.md +1 -1
  7. package/dev/pimath.js +7929 -0
  8. package/dev/pimath.js.map +1 -0
  9. package/dist/{pi.js → pimath.js} +7613 -7840
  10. package/dist/pimath.js.map +1 -0
  11. package/dist/pimath.min.js +2 -0
  12. package/dist/pimath.min.js.map +1 -0
  13. package/docs/assets/main.js +58 -58
  14. package/docs/assets/search.js +1 -1
  15. package/docs/assets/style.css +1367 -1280
  16. package/docs/classes/Logicalset.Logicalset.html +221 -212
  17. package/docs/classes/Polynom.Rational.html +391 -388
  18. package/docs/classes/Vector-1.Vector.html +494 -448
  19. package/docs/classes/Vector.Point.html +341 -342
  20. package/docs/classes/algebra_equation.Equation.html +796 -753
  21. package/docs/classes/algebra_linearSystem.LinearSystem.html +408 -397
  22. package/docs/classes/algebra_monom.Monom.html +967 -910
  23. package/docs/classes/algebra_polynom.Polynom.html +1281 -1260
  24. package/docs/classes/coefficients_fraction.Fraction.html +939 -931
  25. package/docs/classes/geometry_circle.Circle.html +476 -476
  26. package/docs/classes/geometry_line.Line.html +779 -719
  27. package/docs/classes/geometry_triangle.Triangle.html +429 -420
  28. package/docs/classes/numeric.Numeric.html +269 -263
  29. package/docs/classes/shutingyard.Shutingyard.html +259 -248
  30. package/docs/enums/algebra_equation.PARTICULAR_SOLUTION.html +89 -88
  31. package/docs/enums/geometry_line.LinePropriety.html +102 -102
  32. package/docs/enums/shutingyard.ShutingyardMode.html +106 -102
  33. package/docs/enums/shutingyard.ShutingyardType.html +120 -116
  34. package/docs/index.html +63 -65
  35. package/docs/interfaces/algebra_equation.ISolution.html +111 -109
  36. package/docs/interfaces/algebra_polynom.IEuclidian.html +93 -92
  37. package/docs/interfaces/geometry_triangle.remarquableLines.html +150 -150
  38. package/docs/modules/Logicalset.html +69 -74
  39. package/docs/modules/Polynom.html +69 -74
  40. package/docs/modules/Vector-1.html +69 -74
  41. package/docs/modules/Vector.html +69 -74
  42. package/docs/modules/algebra_equation.html +75 -81
  43. package/docs/modules/algebra_linearSystem.html +65 -71
  44. package/docs/modules/algebra_monom.html +70 -76
  45. package/docs/modules/algebra_polynom.html +75 -81
  46. package/docs/modules/coefficients_fraction.html +70 -76
  47. package/docs/modules/geometry_circle.html +65 -71
  48. package/docs/modules/geometry_line.html +70 -76
  49. package/docs/modules/geometry_triangle.html +70 -76
  50. package/docs/modules/numeric.html +65 -71
  51. package/docs/modules/shutingyard.html +84 -90
  52. package/docs/types/algebra_monom.literalType.html +66 -70
  53. package/docs/types/algebra_polynom.PolynomParsingType.html +62 -66
  54. package/docs/types/coefficients_fraction.FractionParsingType.html +61 -65
  55. package/docs/types/shutingyard.Token.html +72 -76
  56. package/docs/types/shutingyard.tokenType.html +77 -81
  57. package/docs/variables/shutingyard.tokenConstant.html +70 -74
  58. package/esm/index.d.ts +38 -41
  59. package/esm/index.js +43 -46
  60. package/esm/index.js.map +1 -1
  61. package/esm/maths/algebra/equation.d.ts +119 -117
  62. package/esm/maths/algebra/equation.js +796 -785
  63. package/esm/maths/algebra/equation.js.map +1 -1
  64. package/esm/maths/algebra/linearSystem.d.ts +39 -38
  65. package/esm/maths/algebra/linearSystem.js +278 -262
  66. package/esm/maths/algebra/linearSystem.js.map +1 -1
  67. package/esm/maths/algebra/logicalset.d.ts +28 -28
  68. package/esm/maths/algebra/logicalset.js +157 -157
  69. package/esm/maths/algebra/monom.d.ts +206 -206
  70. package/esm/maths/algebra/monom.js +908 -908
  71. package/esm/maths/algebra/monom.js.map +1 -1
  72. package/esm/maths/algebra/polynom.d.ts +157 -157
  73. package/esm/maths/algebra/polynom.js +1277 -1277
  74. package/esm/maths/algebra/rational.d.ts +45 -45
  75. package/esm/maths/algebra/rational.js +183 -183
  76. package/esm/maths/algebra/study/rationalStudy.d.ts +28 -28
  77. package/esm/maths/algebra/study/rationalStudy.js +243 -243
  78. package/esm/maths/algebra/study.d.ts +143 -142
  79. package/esm/maths/algebra/study.js +378 -377
  80. package/esm/maths/algebra/study.js.map +1 -1
  81. package/esm/maths/coefficients/fraction.d.ts +90 -90
  82. package/esm/maths/coefficients/fraction.js +516 -516
  83. package/esm/maths/coefficients/fraction.js.map +1 -1
  84. package/esm/maths/coefficients/nthRoot.d.ts +23 -23
  85. package/esm/maths/coefficients/nthRoot.js +136 -136
  86. package/esm/maths/geometry/circle.d.ts +45 -45
  87. package/esm/maths/geometry/circle.js +323 -323
  88. package/esm/maths/geometry/line.d.ts +99 -99
  89. package/esm/maths/geometry/line.js +481 -481
  90. package/esm/maths/geometry/line.js.map +1 -1
  91. package/esm/maths/geometry/point.d.ts +34 -34
  92. package/esm/maths/geometry/point.js +166 -166
  93. package/esm/maths/geometry/point.js.map +1 -1
  94. package/esm/maths/geometry/triangle.d.ts +85 -85
  95. package/esm/maths/geometry/triangle.js +268 -268
  96. package/esm/maths/geometry/vector.d.ts +41 -41
  97. package/esm/maths/geometry/vector.js +197 -197
  98. package/esm/maths/geometry/vector.js.map +1 -1
  99. package/esm/maths/numeric.d.ts +28 -28
  100. package/esm/maths/numeric.js +180 -180
  101. package/esm/maths/numexp.d.ts +19 -0
  102. package/esm/maths/numexp.js +186 -0
  103. package/esm/maths/numexp.js.map +1 -0
  104. package/esm/maths/randomization/random.d.ts +23 -23
  105. package/esm/maths/randomization/random.js +78 -78
  106. package/esm/maths/randomization/random.js.map +1 -1
  107. package/esm/maths/randomization/randomCore.d.ts +7 -7
  108. package/esm/maths/randomization/randomCore.js +21 -21
  109. package/esm/maths/randomization/rndFraction.d.ts +12 -12
  110. package/esm/maths/randomization/rndFraction.js +43 -43
  111. package/esm/maths/randomization/rndGeometryLine.d.ts +12 -12
  112. package/esm/maths/randomization/rndGeometryLine.js +45 -45
  113. package/esm/maths/randomization/rndGeometryPoint.d.ts +12 -12
  114. package/esm/maths/randomization/rndGeometryPoint.js +60 -60
  115. package/esm/maths/randomization/rndHelpers.d.ts +23 -23
  116. package/esm/maths/randomization/rndHelpers.js +76 -76
  117. package/esm/maths/randomization/rndMonom.d.ts +12 -12
  118. package/esm/maths/randomization/rndMonom.js +52 -52
  119. package/esm/maths/randomization/rndPolynom.d.ts +13 -13
  120. package/esm/maths/randomization/rndPolynom.js +74 -74
  121. package/esm/maths/randomization/rndTypes.d.ts +34 -34
  122. package/esm/maths/randomization/rndTypes.js +2 -2
  123. package/esm/maths/shutingyard.d.ts +59 -59
  124. package/esm/maths/shutingyard.js +442 -442
  125. package/esm/maths/shutingyard.js.map +1 -1
  126. package/package.json +11 -11
  127. package/public/index.html +50 -81
  128. package/public/playground.html +7 -8
  129. package/src/index.ts +1 -4
  130. package/src/maths/algebra/equation.ts +16 -0
  131. package/src/maths/algebra/linearSystem.ts +20 -0
  132. package/src/maths/algebra/study.ts +12 -10
  133. package/src/maths/{expressions/numexp.ts → numexp.ts} +2 -2
  134. package/tests/algebra/equation.test.ts +19 -5
  135. package/tests/algebra/linear.test.ts +3 -11
  136. package/tests/algebra/polynom.test.ts +7 -8
  137. package/tests/algebra/rationnal.test.ts +1 -1
  138. package/tests/algebra/study.test.ts +2 -9
  139. package/tests/coefficients/fraction.test.ts +8 -8
  140. package/tests/custom.test.ts +33 -37
  141. package/tests/numeric.test.ts +1 -2
  142. package/tests/numexp.test.ts +13 -5
  143. package/tests/shutingyard.test.ts +3 -3
  144. package/webpack-production-min.config.js +1 -1
  145. package/webpack-production.config.js +1 -1
  146. package/webpack.config.js +1 -1
  147. package/dist/pi.js.map +0 -1
  148. package/dist/pi.min.js +0 -2
  149. package/dist/pi.min.js.map +0 -1
  150. package/docs/classes/expressions_numexp.NumExp.html +0 -236
  151. package/docs/classes/expressions_polynomexp.PolynomExpFactor.html +0 -317
  152. package/docs/classes/expressions_polynomexp.PolynomExpProduct.html +0 -285
  153. package/docs/modules/expressions_numexp.html +0 -71
  154. package/docs/modules/expressions_polynomexp.html +0 -73
  155. package/docs/modules.html +0 -76
  156. package/graph.svg +0 -1033
  157. package/src/maths/expressions/ExpressionTree.ts +0 -172
  158. package/src/maths/expressions/expression.ts +0 -286
  159. package/src/maths/expressions/expressionFactor.ts +0 -190
  160. package/src/maths/expressions/expressionMember.ts +0 -233
  161. package/src/maths/expressions/expressionOperators.ts +0 -49
  162. package/src/maths/expressions/expressionParser.ts +0 -295
  163. package/src/maths/expressions/factors/ExpFactor.ts +0 -39
  164. package/src/maths/expressions/factors/ExpFactorConstant.ts +0 -60
  165. package/src/maths/expressions/factors/ExpFactorExponential.ts +0 -26
  166. package/src/maths/expressions/factors/ExpFactorNumber.ts +0 -72
  167. package/src/maths/expressions/factors/ExpFactorPower.ts +0 -42
  168. package/src/maths/expressions/factors/ExpFactorTrigo.ts +0 -53
  169. package/src/maths/expressions/factors/ExpFactorVariable.ts +0 -45
  170. package/src/maths/expressions/internals.ts +0 -14
  171. package/src/maths/expressions/polynomexp.bkp.ts +0 -221
  172. package/src/maths/expressions/polynomexp.ts +0 -310
  173. package/tests/expressions/expressions.test.ts +0 -145
  174. package/tests/expressions/expressiontree.test.ts +0 -11
  175. package/tests/polynomexp.test.ts +0 -12
@@ -1,77 +1,77 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rndHelpers = void 0;
4
- /**
5
- * Random helpers
6
- */
7
- const numeric_1 = require("../numeric");
8
- class rndHelpers {
9
- /**
10
- * Random boolean with a percent ratio
11
- * @param percent
12
- */
13
- static randomBool(percent = 0.5) {
14
- return Math.random() < percent;
15
- }
16
- /**
17
- * Random integer between two values.
18
- * @param a (number) : From this value to the second value. If the second is ommited, this value is the max value.
19
- * @param b (number) : To this value. If this is ommited.
20
- */
21
- static randomInt(a, b) {
22
- if (b === undefined) {
23
- return this.randomInt(0, a);
24
- }
25
- return Math.floor(Math.random() * (b - a + 1) + a);
26
- }
27
- /**
28
- * Random integer between -max and max value.
29
- * @param max (number) : determine the limits.
30
- * @param zero (bool) : determine if zero is allowed or not.
31
- */
32
- static randomIntSym(max, zero) {
33
- if (zero === false) {
34
- return this.randomBool() ? this.randomInt(1, max) : -this.randomInt(1, max);
35
- }
36
- else {
37
- return this.randomInt(-max, max);
38
- }
39
- }
40
- static randomPrime(max) {
41
- let primes = numeric_1.Numeric.primes();
42
- if (max !== undefined) {
43
- primes = primes.filter(x => x < max);
44
- }
45
- return this.randomItem(primes);
46
- }
47
- static randomArray(arr, number) {
48
- if (number === undefined) {
49
- number = 1;
50
- }
51
- // Return a clone array
52
- if (arr.length <= 0) {
53
- return Object.values(arr);
54
- }
55
- // Randomize the array and return the n first elements.
56
- return rndHelpers.shuffleArray(arr).slice(0, number);
57
- }
58
- static randomItem(arr) {
59
- if (arr.length === 0) {
60
- return '';
61
- }
62
- return this.randomArray(arr, 1)[0];
63
- }
64
- static shuffleArray(arr) {
65
- // The Fisher-Yates algorithm
66
- let shuffleArray = Object.values(arr);
67
- for (let i = shuffleArray.length - 1; i > 0; i--) {
68
- const j = Math.floor(Math.random() * (i + 1));
69
- const temp = shuffleArray[i];
70
- shuffleArray[i] = shuffleArray[j];
71
- shuffleArray[j] = temp;
72
- }
73
- return shuffleArray;
74
- }
75
- }
76
- exports.rndHelpers = rndHelpers;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rndHelpers = void 0;
4
+ /**
5
+ * Random helpers
6
+ */
7
+ const numeric_1 = require("../numeric");
8
+ class rndHelpers {
9
+ /**
10
+ * Random boolean with a percent ratio
11
+ * @param percent
12
+ */
13
+ static randomBool(percent = 0.5) {
14
+ return Math.random() < percent;
15
+ }
16
+ /**
17
+ * Random integer between two values.
18
+ * @param a (number) : From this value to the second value. If the second is ommited, this value is the max value.
19
+ * @param b (number) : To this value. If this is ommited.
20
+ */
21
+ static randomInt(a, b) {
22
+ if (b === undefined) {
23
+ return this.randomInt(0, a);
24
+ }
25
+ return Math.floor(Math.random() * (b - a + 1) + a);
26
+ }
27
+ /**
28
+ * Random integer between -max and max value.
29
+ * @param max (number) : determine the limits.
30
+ * @param zero (bool) : determine if zero is allowed or not.
31
+ */
32
+ static randomIntSym(max, zero) {
33
+ if (zero === false) {
34
+ return this.randomBool() ? this.randomInt(1, max) : -this.randomInt(1, max);
35
+ }
36
+ else {
37
+ return this.randomInt(-max, max);
38
+ }
39
+ }
40
+ static randomPrime(max) {
41
+ let primes = numeric_1.Numeric.primes();
42
+ if (max !== undefined) {
43
+ primes = primes.filter(x => x < max);
44
+ }
45
+ return this.randomItem(primes);
46
+ }
47
+ static randomArray(arr, number) {
48
+ if (number === undefined) {
49
+ number = 1;
50
+ }
51
+ // Return a clone array
52
+ if (arr.length <= 0) {
53
+ return Object.values(arr);
54
+ }
55
+ // Randomize the array and return the n first elements.
56
+ return rndHelpers.shuffleArray(arr).slice(0, number);
57
+ }
58
+ static randomItem(arr) {
59
+ if (arr.length === 0) {
60
+ return '';
61
+ }
62
+ return this.randomArray(arr, 1)[0];
63
+ }
64
+ static shuffleArray(arr) {
65
+ // The Fisher-Yates algorithm
66
+ let shuffleArray = Object.values(arr);
67
+ for (let i = shuffleArray.length - 1; i > 0; i--) {
68
+ const j = Math.floor(Math.random() * (i + 1));
69
+ const temp = shuffleArray[i];
70
+ shuffleArray[i] = shuffleArray[j];
71
+ shuffleArray[j] = temp;
72
+ }
73
+ return shuffleArray;
74
+ }
75
+ }
76
+ exports.rndHelpers = rndHelpers;
77
77
  //# sourceMappingURL=rndHelpers.js.map
@@ -1,12 +1,12 @@
1
- import { randomCore } from "./randomCore";
2
- import { randomMonomConfig } from "./rndTypes";
3
- import { Monom } from "../algebra/monom";
4
- /**
5
- * Create a random monom based on a based configuration
6
- */
7
- export declare class rndMonom extends randomCore {
8
- protected _config: randomMonomConfig;
9
- protected _defaultConfig: randomMonomConfig;
10
- constructor(userConfig?: randomMonomConfig);
11
- generate: () => Monom;
12
- }
1
+ import { randomCore } from "./randomCore";
2
+ import { randomMonomConfig } from "./rndTypes";
3
+ import { Monom } from "../algebra/monom";
4
+ /**
5
+ * Create a random monom based on a based configuration
6
+ */
7
+ export declare class rndMonom extends randomCore {
8
+ protected _config: randomMonomConfig;
9
+ protected _defaultConfig: randomMonomConfig;
10
+ constructor(userConfig?: randomMonomConfig);
11
+ generate: () => Monom;
12
+ }
@@ -1,53 +1,53 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rndMonom = void 0;
4
- const randomCore_1 = require("./randomCore");
5
- const random_1 = require("./random");
6
- const monom_1 = require("../algebra/monom");
7
- /**
8
- * Create a random monom based on a based configuration
9
- */
10
- class rndMonom extends randomCore_1.randomCore {
11
- constructor(userConfig) {
12
- super();
13
- this.generate = () => {
14
- // Create a monom instance
15
- let M = new monom_1.Monom();
16
- // Generate the coefficient
17
- if (typeof this._config.fraction === "boolean") {
18
- M.coefficient = random_1.Random.fraction({
19
- zero: this._config.zero,
20
- reduced: true,
21
- natural: !this._config.fraction
22
- });
23
- }
24
- else {
25
- M.coefficient = random_1.Random.fraction(this._config.fraction);
26
- }
27
- // Calculate the degree of the monom
28
- if (this._config.letters.length > 1) {
29
- // Initialise each items...
30
- for (let L of this._config.letters.split('')) {
31
- M.setLetter(L, 0);
32
- }
33
- for (let i = 0; i < this._config.degree; i++) {
34
- const L = random_1.Random.item(this._config.letters.split(""));
35
- M.setLetter(L, M.degree(L).clone().add(1));
36
- }
37
- }
38
- else {
39
- M.setLetter(this._config.letters, this._config.degree);
40
- }
41
- return M;
42
- };
43
- this._defaultConfig = {
44
- letters: 'x',
45
- degree: 2,
46
- fraction: true,
47
- zero: false
48
- };
49
- this._config = this.mergeConfig(userConfig, this._defaultConfig);
50
- }
51
- }
52
- exports.rndMonom = rndMonom;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rndMonom = void 0;
4
+ const randomCore_1 = require("./randomCore");
5
+ const random_1 = require("./random");
6
+ const monom_1 = require("../algebra/monom");
7
+ /**
8
+ * Create a random monom based on a based configuration
9
+ */
10
+ class rndMonom extends randomCore_1.randomCore {
11
+ constructor(userConfig) {
12
+ super();
13
+ this.generate = () => {
14
+ // Create a monom instance
15
+ let M = new monom_1.Monom();
16
+ // Generate the coefficient
17
+ if (typeof this._config.fraction === "boolean") {
18
+ M.coefficient = random_1.Random.fraction({
19
+ zero: this._config.zero,
20
+ reduced: true,
21
+ natural: !this._config.fraction
22
+ });
23
+ }
24
+ else {
25
+ M.coefficient = random_1.Random.fraction(this._config.fraction);
26
+ }
27
+ // Calculate the degree of the monom
28
+ if (this._config.letters.length > 1) {
29
+ // Initialise each items...
30
+ for (let L of this._config.letters.split('')) {
31
+ M.setLetter(L, 0);
32
+ }
33
+ for (let i = 0; i < this._config.degree; i++) {
34
+ const L = random_1.Random.item(this._config.letters.split(""));
35
+ M.setLetter(L, M.degree(L).clone().add(1));
36
+ }
37
+ }
38
+ else {
39
+ M.setLetter(this._config.letters, this._config.degree);
40
+ }
41
+ return M;
42
+ };
43
+ this._defaultConfig = {
44
+ letters: 'x',
45
+ degree: 2,
46
+ fraction: true,
47
+ zero: false
48
+ };
49
+ this._config = this.mergeConfig(userConfig, this._defaultConfig);
50
+ }
51
+ }
52
+ exports.rndMonom = rndMonom;
53
53
  //# sourceMappingURL=rndMonom.js.map
@@ -1,13 +1,13 @@
1
- import { randomCore } from "./randomCore";
2
- import { randomPolynomConfig } from "./rndTypes";
3
- import { Polynom } from "../algebra/polynom";
4
- /**
5
- * Random polynoms
6
- */
7
- export declare class rndPolynom extends randomCore {
8
- protected _config: randomPolynomConfig;
9
- protected _defaultConfig: randomPolynomConfig;
10
- constructor(userConfig?: randomPolynomConfig);
11
- generate: () => Polynom;
12
- factorable: () => Polynom;
13
- }
1
+ import { randomCore } from "./randomCore";
2
+ import { randomPolynomConfig } from "./rndTypes";
3
+ import { Polynom } from "../algebra/polynom";
4
+ /**
5
+ * Random polynoms
6
+ */
7
+ export declare class rndPolynom extends randomCore {
8
+ protected _config: randomPolynomConfig;
9
+ protected _defaultConfig: randomPolynomConfig;
10
+ constructor(userConfig?: randomPolynomConfig);
11
+ generate: () => Polynom;
12
+ factorable: () => Polynom;
13
+ }
@@ -1,75 +1,75 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rndPolynom = void 0;
4
- const randomCore_1 = require("./randomCore");
5
- const rndMonom_1 = require("./rndMonom");
6
- const random_1 = require("./random");
7
- const polynom_1 = require("../algebra/polynom");
8
- /**
9
- * Random polynoms
10
- */
11
- class rndPolynom extends randomCore_1.randomCore {
12
- constructor(userConfig) {
13
- super();
14
- this.generate = () => {
15
- if (this._config.factorable && this._config.degree > 1) {
16
- return this.factorable();
17
- }
18
- // Create the polynom
19
- let P = new polynom_1.Polynom().empty(), M;
20
- for (let i = this._config.degree; i >= 0; i--) {
21
- // Create monom of corresponding degree.
22
- M = new rndMonom_1.rndMonom({
23
- letters: this._config.letters,
24
- degree: i,
25
- fraction: this._config.fraction,
26
- zero: (i === this._config.degree) ? false : this._config.allowNullMonom
27
- }).generate();
28
- // If degree is the greatest and unit is true, set the monom value to one.
29
- if (this._config.unit && this._config.degree === i) {
30
- M.coefficient.one();
31
- }
32
- // Add to the polynom
33
- P.add(M);
34
- }
35
- // Make sure the first monom is positive.
36
- if (this._config.positive && P.monomByDegree().coefficient.isNegative()) {
37
- P.monomByDegree().coefficient.opposed();
38
- }
39
- // If the number of monoms is greater than the allowed value, remove some of them... except the first one !
40
- if (this._config.numberOfMonoms > 0 && this._config.numberOfMonoms < P.length) {
41
- // Get the greatest degree monom
42
- let M = P.monomByDegree().clone();
43
- P.monoms = random_1.Random.array(P.monoms.slice(1), this._config.numberOfMonoms - 1);
44
- P.add(M).reorder().reduce();
45
- }
46
- return P;
47
- };
48
- this.factorable = () => {
49
- let P = new polynom_1.Polynom().one();
50
- let _factorableConfig = { ...this._config };
51
- _factorableConfig.degree = 1;
52
- _factorableConfig.factorable = false;
53
- for (let i = 0; i < this._config.degree; i++) {
54
- P.multiply(random_1.Random.polynom(_factorableConfig));
55
- }
56
- return P;
57
- };
58
- // Default config for a random polynom
59
- this._defaultConfig = {
60
- letters: 'x',
61
- degree: 2,
62
- fraction: false,
63
- zero: false,
64
- unit: false,
65
- factorable: false,
66
- allowNullMonom: true,
67
- numberOfMonoms: 0,
68
- positive: true
69
- };
70
- // Merge config with initialiser
71
- this._config = this.mergeConfig(userConfig, this._defaultConfig);
72
- }
73
- }
74
- exports.rndPolynom = rndPolynom;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rndPolynom = void 0;
4
+ const randomCore_1 = require("./randomCore");
5
+ const rndMonom_1 = require("./rndMonom");
6
+ const random_1 = require("./random");
7
+ const polynom_1 = require("../algebra/polynom");
8
+ /**
9
+ * Random polynoms
10
+ */
11
+ class rndPolynom extends randomCore_1.randomCore {
12
+ constructor(userConfig) {
13
+ super();
14
+ this.generate = () => {
15
+ if (this._config.factorable && this._config.degree > 1) {
16
+ return this.factorable();
17
+ }
18
+ // Create the polynom
19
+ let P = new polynom_1.Polynom().empty(), M;
20
+ for (let i = this._config.degree; i >= 0; i--) {
21
+ // Create monom of corresponding degree.
22
+ M = new rndMonom_1.rndMonom({
23
+ letters: this._config.letters,
24
+ degree: i,
25
+ fraction: this._config.fraction,
26
+ zero: (i === this._config.degree) ? false : this._config.allowNullMonom
27
+ }).generate();
28
+ // If degree is the greatest and unit is true, set the monom value to one.
29
+ if (this._config.unit && this._config.degree === i) {
30
+ M.coefficient.one();
31
+ }
32
+ // Add to the polynom
33
+ P.add(M);
34
+ }
35
+ // Make sure the first monom is positive.
36
+ if (this._config.positive && P.monomByDegree().coefficient.isNegative()) {
37
+ P.monomByDegree().coefficient.opposed();
38
+ }
39
+ // If the number of monoms is greater than the allowed value, remove some of them... except the first one !
40
+ if (this._config.numberOfMonoms > 0 && this._config.numberOfMonoms < P.length) {
41
+ // Get the greatest degree monom
42
+ let M = P.monomByDegree().clone();
43
+ P.monoms = random_1.Random.array(P.monoms.slice(1), this._config.numberOfMonoms - 1);
44
+ P.add(M).reorder().reduce();
45
+ }
46
+ return P;
47
+ };
48
+ this.factorable = () => {
49
+ let P = new polynom_1.Polynom().one();
50
+ let _factorableConfig = { ...this._config };
51
+ _factorableConfig.degree = 1;
52
+ _factorableConfig.factorable = false;
53
+ for (let i = 0; i < this._config.degree; i++) {
54
+ P.multiply(random_1.Random.polynom(_factorableConfig));
55
+ }
56
+ return P;
57
+ };
58
+ // Default config for a random polynom
59
+ this._defaultConfig = {
60
+ letters: 'x',
61
+ degree: 2,
62
+ fraction: false,
63
+ zero: false,
64
+ unit: false,
65
+ factorable: false,
66
+ allowNullMonom: true,
67
+ numberOfMonoms: 0,
68
+ positive: true
69
+ };
70
+ // Merge config with initialiser
71
+ this._config = this.mergeConfig(userConfig, this._defaultConfig);
72
+ }
73
+ }
74
+ exports.rndPolynom = rndPolynom;
75
75
  //# sourceMappingURL=rndPolynom.js.map
@@ -1,34 +1,34 @@
1
- import { Fraction } from "../coefficients/fraction";
2
- export type randomCoefficientConfig = {
3
- negative?: boolean;
4
- max?: number;
5
- reduced?: boolean;
6
- zero?: boolean;
7
- natural?: boolean;
8
- };
9
- export type randomMonomConfig = {
10
- letters?: string;
11
- degree?: number;
12
- fraction?: boolean | randomCoefficientConfig;
13
- zero?: boolean;
14
- };
15
- export type randomPolynomConfig = randomMonomConfig & {
16
- unit?: boolean;
17
- factorable?: boolean;
18
- allowNullMonom?: boolean;
19
- numberOfMonoms?: number;
20
- positive?: boolean;
21
- };
22
- export type randomGeometryLineConfig = {
23
- A: {
24
- x: number | Fraction;
25
- y: number | Fraction;
26
- };
27
- slope?: Fraction | string | number;
28
- };
29
- export type randomGeometryPointConfig = {
30
- quadrant?: number;
31
- axis?: string | boolean;
32
- fraction?: boolean;
33
- max?: number;
34
- };
1
+ import { Fraction } from "../coefficients/fraction";
2
+ export type randomCoefficientConfig = {
3
+ negative?: boolean;
4
+ max?: number;
5
+ reduced?: boolean;
6
+ zero?: boolean;
7
+ natural?: boolean;
8
+ };
9
+ export type randomMonomConfig = {
10
+ letters?: string;
11
+ degree?: number;
12
+ fraction?: boolean | randomCoefficientConfig;
13
+ zero?: boolean;
14
+ };
15
+ export type randomPolynomConfig = randomMonomConfig & {
16
+ unit?: boolean;
17
+ factorable?: boolean;
18
+ allowNullMonom?: boolean;
19
+ numberOfMonoms?: number;
20
+ positive?: boolean;
21
+ };
22
+ export type randomGeometryLineConfig = {
23
+ A: {
24
+ x: number | Fraction;
25
+ y: number | Fraction;
26
+ };
27
+ slope?: Fraction | string | number;
28
+ };
29
+ export type randomGeometryPointConfig = {
30
+ quadrant?: number;
31
+ axis?: string | boolean;
32
+ fraction?: boolean;
33
+ max?: number;
34
+ };
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=rndTypes.js.map
@@ -1,59 +1,59 @@
1
- export type tokenType = {
2
- [key: string]: {
3
- precedence: number;
4
- associative: string;
5
- type: string;
6
- };
7
- };
8
- export declare const tokenConstant: {
9
- [Key: string]: number;
10
- };
11
- export declare enum ShutingyardType {
12
- VARIABLE = "variable",
13
- COEFFICIENT = "coefficient",
14
- OPERATION = "operation",
15
- CONSTANT = "constant",
16
- FUNCTION = "function",
17
- MONOM = "monom"
18
- }
19
- export declare enum ShutingyardMode {
20
- EXPRESSION = "expression",
21
- POLYNOM = "polynom",
22
- SET = "set",
23
- NUMERIC = "numeric"
24
- }
25
- export type Token = {
26
- token: string;
27
- tokenType: string;
28
- };
29
- export declare class Shutingyard {
30
- readonly _mode: ShutingyardMode;
31
- private _rpn;
32
- private _tokenConfig;
33
- private _tokenConstant;
34
- private _tokenKeys;
35
- private _uniformize;
36
- constructor(mode?: ShutingyardMode);
37
- get rpn(): Token[];
38
- get rpnToken(): string[];
39
- /**
40
- * Determin if the token is a defined operation
41
- * Defined operations: + - * / ^ sin cos tan
42
- * @param token
43
- */
44
- tokenConfigInitialization(): tokenType;
45
- /**
46
- * Get the next token to analyse.
47
- * @param expr (string) Expression to analyse
48
- * @param start (number) CUrrent position in the expr string.
49
- */
50
- NextToken(expr: string, start: number): [string, number, string];
51
- normalize(expr: string): string;
52
- /**
53
- * Parse an expression using the shutting yard tree algorithms
54
- * @param expr (string) Expression to analyse
55
- * Returns a RPN list of items.
56
- * @param uniformize
57
- */
58
- parse(expr: string, uniformize?: boolean): Shutingyard;
59
- }
1
+ export type tokenType = {
2
+ [key: string]: {
3
+ precedence: number;
4
+ associative: string;
5
+ type: string;
6
+ };
7
+ };
8
+ export declare const tokenConstant: {
9
+ [Key: string]: number;
10
+ };
11
+ export declare enum ShutingyardType {
12
+ VARIABLE = "variable",
13
+ COEFFICIENT = "coefficient",
14
+ OPERATION = "operation",
15
+ CONSTANT = "constant",
16
+ FUNCTION = "function",
17
+ MONOM = "monom"
18
+ }
19
+ export declare enum ShutingyardMode {
20
+ EXPRESSION = "expression",
21
+ POLYNOM = "polynom",
22
+ SET = "set",
23
+ NUMERIC = "numeric"
24
+ }
25
+ export type Token = {
26
+ token: string;
27
+ tokenType: string;
28
+ };
29
+ export declare class Shutingyard {
30
+ readonly _mode: ShutingyardMode;
31
+ private _rpn;
32
+ private _tokenConfig;
33
+ private _tokenConstant;
34
+ private _tokenKeys;
35
+ private _uniformize;
36
+ constructor(mode?: ShutingyardMode);
37
+ get rpn(): Token[];
38
+ get rpnToken(): string[];
39
+ /**
40
+ * Determin if the token is a defined operation
41
+ * Defined operations: + - * / ^ sin cos tan
42
+ * @param token
43
+ */
44
+ tokenConfigInitialization(): tokenType;
45
+ /**
46
+ * Get the next token to analyse.
47
+ * @param expr (string) Expression to analyse
48
+ * @param start (number) CUrrent position in the expr string.
49
+ */
50
+ NextToken(expr: string, start: number): [string, number, string];
51
+ normalize(expr: string): string;
52
+ /**
53
+ * Parse an expression using the shutting yard tree algorithms
54
+ * @param expr (string) Expression to analyse
55
+ * Returns a RPN list of items.
56
+ * @param uniformize
57
+ */
58
+ parse(expr: string, uniformize?: boolean): Shutingyard;
59
+ }