nerdamer 1.1.13 → 2.0.0-rc.1

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 (341) hide show
  1. package/LICENSE.md +184 -0
  2. package/README.md +293 -312
  3. package/dist/bundle.js +2 -0
  4. package/dist/bundle.js.LICENSE.txt +7 -0
  5. package/dist/parser.js +2 -0
  6. package/dist/parser.js.LICENSE.txt +7 -0
  7. package/docs-data/parser-functions.json +1960 -0
  8. package/index.d.ts +10 -426
  9. package/output/algebra/adapters.d.ts +33 -0
  10. package/output/algebra/adapters.js +109 -0
  11. package/output/algebra/algorithms/arith.d.ts +84 -0
  12. package/output/algebra/algorithms/arith.js +323 -0
  13. package/output/algebra/algorithms/factor.d.ts +3 -0
  14. package/output/algebra/algorithms/factor.js +5 -0
  15. package/output/algebra/algorithms/factorMultivariate.d.ts +23 -0
  16. package/output/algebra/algorithms/factorMultivariate.js +2393 -0
  17. package/output/algebra/algorithms/factorUnivariate.d.ts +72 -0
  18. package/output/algebra/algorithms/factorUnivariate.js +1072 -0
  19. package/output/algebra/algorithms/gcd.d.ts +22 -0
  20. package/output/algebra/algorithms/gcd.js +690 -0
  21. package/output/algebra/algorithms/groebnerBase.d.ts +157 -0
  22. package/output/algebra/algorithms/groebnerBase.js +1166 -0
  23. package/output/algebra/algorithms/multiPoly/MultiPoly.d.ts +137 -0
  24. package/output/algebra/algorithms/multiPoly/MultiPoly.js +346 -0
  25. package/output/algebra/algorithms/poly.d.ts +228 -0
  26. package/output/algebra/algorithms/poly.js +1299 -0
  27. package/output/algebra/algorithms/rational.d.ts +17 -0
  28. package/output/algebra/algorithms/rational.js +115 -0
  29. package/output/algebra/factor/factor.d.ts +62 -0
  30. package/output/algebra/factor/factor.js +158 -0
  31. package/output/algebra/gcd/gcd.d.ts +29 -0
  32. package/output/algebra/gcd/gcd.js +141 -0
  33. package/output/algebra/groebner.d.ts +21 -0
  34. package/output/algebra/groebner.js +42 -0
  35. package/output/algebra/partfrac.d.ts +19 -0
  36. package/output/algebra/partfrac.js +398 -0
  37. package/output/algebra/polynomialize.d.ts +20 -0
  38. package/output/algebra/polynomialize.js +24 -0
  39. package/output/algebra/simplify/complexsimp.d.ts +7 -0
  40. package/output/algebra/simplify/complexsimp.js +24 -0
  41. package/output/algebra/simplify/factorCommon.d.ts +13 -0
  42. package/output/algebra/simplify/factorCommon.js +136 -0
  43. package/output/algebra/simplify/funcsimp.d.ts +26 -0
  44. package/output/algebra/simplify/funcsimp.js +633 -0
  45. package/output/algebra/simplify/invtrigrewrite.d.ts +10 -0
  46. package/output/algebra/simplify/invtrigrewrite.js +96 -0
  47. package/output/algebra/simplify/ratsimp.d.ts +21 -0
  48. package/output/algebra/simplify/ratsimp.js +140 -0
  49. package/output/algebra/simplify/simplify.d.ts +25 -0
  50. package/output/algebra/simplify/simplify.js +228 -0
  51. package/output/algebra/simplify/trigreduce.d.ts +38 -0
  52. package/output/algebra/simplify/trigreduce.js +424 -0
  53. package/output/algebra/simplify/trigrewrite.d.ts +17 -0
  54. package/output/algebra/simplify/trigrewrite.js +156 -0
  55. package/output/algebra/simplify/trigsimp.d.ts +11 -0
  56. package/output/algebra/simplify/trigsimp.js +369 -0
  57. package/output/algebra/simplify/utils.d.ts +32 -0
  58. package/output/algebra/simplify/utils.js +56 -0
  59. package/output/algebra/utils.d.ts +32 -0
  60. package/output/algebra/utils.js +48 -0
  61. package/output/api/advanced.d.ts +7 -0
  62. package/output/api/advanced.js +18 -0
  63. package/output/api/algebra.d.ts +17 -0
  64. package/output/api/algebra.js +32 -0
  65. package/output/api/assumptions.d.ts +4 -0
  66. package/output/api/assumptions.js +11 -0
  67. package/output/api/calculus.d.ts +9 -0
  68. package/output/api/calculus.js +21 -0
  69. package/output/api/core.d.ts +17 -0
  70. package/output/api/core.js +41 -0
  71. package/output/api/debug.d.ts +16 -0
  72. package/output/api/debug.js +23 -0
  73. package/output/api/parser.d.ts +85 -0
  74. package/output/api/parser.js +16 -0
  75. package/output/api/solve.d.ts +10 -0
  76. package/output/api/solve.js +16 -0
  77. package/output/api/structures.d.ts +10 -0
  78. package/output/api/structures.js +22 -0
  79. package/output/calculus/derivative/diff.d.ts +30 -0
  80. package/output/calculus/derivative/diff.js +238 -0
  81. package/output/calculus/fresnel.d.ts +16 -0
  82. package/output/calculus/fresnel.js +39 -0
  83. package/output/calculus/integrate/byParts.d.ts +18 -0
  84. package/output/calculus/integrate/byParts.js +339 -0
  85. package/output/calculus/integrate/bySubstitution.d.ts +135 -0
  86. package/output/calculus/integrate/bySubstitution.js +411 -0
  87. package/output/calculus/integrate/integrate.d.ts +38 -0
  88. package/output/calculus/integrate/integrate.js +652 -0
  89. package/output/calculus/integrate/integrationTable.d.ts +2 -0
  90. package/output/calculus/integrate/integrationTable.js +914 -0
  91. package/output/calculus/integrate/utils.d.ts +28 -0
  92. package/output/calculus/integrate/utils.js +96 -0
  93. package/output/calculus/laplace/ilaplace.d.ts +31 -0
  94. package/output/calculus/laplace/ilaplace.js +192 -0
  95. package/output/calculus/laplace/ilaplaceTable.d.ts +2 -0
  96. package/output/calculus/laplace/ilaplaceTable.js +200 -0
  97. package/output/calculus/laplace/laplace.d.ts +22 -0
  98. package/output/calculus/laplace/laplace.js +109 -0
  99. package/output/calculus/laplace/laplaceTable.d.ts +2 -0
  100. package/output/calculus/laplace/laplaceTable.js +187 -0
  101. package/output/calculus/limit/limit.d.ts +35 -0
  102. package/output/calculus/limit/limit.js +1183 -0
  103. package/output/calculus/limit/limitsTable.d.ts +2 -0
  104. package/output/calculus/limit/limitsTable.js +7 -0
  105. package/output/core/Settings.d.ts +32 -0
  106. package/output/core/Settings.js +68 -0
  107. package/output/core/adapters.d.ts +18 -0
  108. package/output/core/adapters.js +40 -0
  109. package/output/core/classes/assumption/Assumption.d.ts +218 -0
  110. package/output/core/classes/assumption/Assumption.js +605 -0
  111. package/output/core/classes/assumption/assertiveFunctions.d.ts +6 -0
  112. package/output/core/classes/assumption/assertiveFunctions.js +64 -0
  113. package/output/core/classes/assumption/assume.d.ts +90 -0
  114. package/output/core/classes/assumption/assume.js +145 -0
  115. package/output/core/classes/collection/Collection.d.ts +107 -0
  116. package/output/core/classes/collection/Collection.js +231 -0
  117. package/output/core/classes/complex/Complex.d.ts +99 -0
  118. package/output/core/classes/complex/Complex.js +135 -0
  119. package/output/core/classes/decimalSet/DecimalSet.d.ts +226 -0
  120. package/output/core/classes/decimalSet/DecimalSet.js +453 -0
  121. package/output/core/classes/dictionary/Dictionary.d.ts +102 -0
  122. package/output/core/classes/dictionary/Dictionary.js +213 -0
  123. package/output/core/classes/equation/Equation.d.ts +256 -0
  124. package/output/core/classes/equation/Equation.js +350 -0
  125. package/output/core/classes/expression/CoeffObject.d.ts +100 -0
  126. package/output/core/classes/expression/CoeffObject.js +198 -0
  127. package/output/core/classes/expression/Expression.d.ts +1674 -0
  128. package/output/core/classes/expression/Expression.js +2332 -0
  129. package/output/core/classes/expression/analysis.d.ts +25 -0
  130. package/output/core/classes/expression/analysis.js +218 -0
  131. package/output/core/classes/expression/collect.d.ts +9 -0
  132. package/output/core/classes/expression/collect.js +49 -0
  133. package/output/core/classes/expression/format.d.ts +45 -0
  134. package/output/core/classes/expression/format.js +217 -0
  135. package/output/core/classes/expression/products.d.ts +23 -0
  136. package/output/core/classes/expression/products.js +115 -0
  137. package/output/core/classes/expression/shortcuts.d.ts +35 -0
  138. package/output/core/classes/expression/shortcuts.js +129 -0
  139. package/output/core/classes/expression/traversal.d.ts +31 -0
  140. package/output/core/classes/expression/traversal.js +216 -0
  141. package/output/core/classes/expression/trig.d.ts +25 -0
  142. package/output/core/classes/expression/trig.js +40 -0
  143. package/output/core/classes/expression/utils.d.ts +52 -0
  144. package/output/core/classes/expression/utils.js +189 -0
  145. package/output/core/classes/lookupTable/LookupTable.d.ts +12 -0
  146. package/output/core/classes/lookupTable/LookupTable.js +55 -0
  147. package/output/core/classes/matrix/Matrix.d.ts +227 -0
  148. package/output/core/classes/matrix/Matrix.js +889 -0
  149. package/output/core/classes/matrix/Sylvester.d.ts +11 -0
  150. package/output/core/classes/matrix/Sylvester.js +54 -0
  151. package/output/core/classes/matrix/functions.d.ts +26 -0
  152. package/output/core/classes/matrix/functions.js +52 -0
  153. package/output/core/classes/matrix/utils.d.ts +9 -0
  154. package/output/core/classes/matrix/utils.js +22 -0
  155. package/output/core/classes/parser/Parser.d.ts +480 -0
  156. package/output/core/classes/parser/Parser.js +1812 -0
  157. package/output/core/classes/parser/Token.d.ts +58 -0
  158. package/output/core/classes/parser/Token.js +137 -0
  159. package/output/core/classes/parser/constants.d.ts +160 -0
  160. package/output/core/classes/parser/constants.js +227 -0
  161. package/output/core/classes/parser/helpers.d.ts +21 -0
  162. package/output/core/classes/parser/helpers.js +42 -0
  163. package/output/core/classes/parser/operations/add.d.ts +15 -0
  164. package/output/core/classes/parser/operations/add.js +238 -0
  165. package/output/core/classes/parser/operations/comma.d.ts +7 -0
  166. package/output/core/classes/parser/operations/comma.js +11 -0
  167. package/output/core/classes/parser/operations/compare.d.ts +21 -0
  168. package/output/core/classes/parser/operations/compare.js +461 -0
  169. package/output/core/classes/parser/operations/divide.d.ts +2 -0
  170. package/output/core/classes/parser/operations/divide.js +72 -0
  171. package/output/core/classes/parser/operations/functions.d.ts +46 -0
  172. package/output/core/classes/parser/operations/functions.js +430 -0
  173. package/output/core/classes/parser/operations/multiply.d.ts +11 -0
  174. package/output/core/classes/parser/operations/multiply.js +321 -0
  175. package/output/core/classes/parser/operations/power.d.ts +48 -0
  176. package/output/core/classes/parser/operations/power.js +673 -0
  177. package/output/core/classes/parser/operations/subtract.d.ts +3 -0
  178. package/output/core/classes/parser/operations/subtract.js +35 -0
  179. package/output/core/classes/parser/preprocess.d.ts +14 -0
  180. package/output/core/classes/parser/preprocess.js +259 -0
  181. package/output/core/classes/parser/scripting/controlFlow.d.ts +121 -0
  182. package/output/core/classes/parser/scripting/controlFlow.js +355 -0
  183. package/output/core/classes/parser/scripting/evaluate.d.ts +10 -0
  184. package/output/core/classes/parser/scripting/evaluate.js +112 -0
  185. package/output/core/classes/parser/scripting/functions.d.ts +14 -0
  186. package/output/core/classes/parser/scripting/functions.js +59 -0
  187. package/output/core/classes/parser/scripting/scope.d.ts +35 -0
  188. package/output/core/classes/parser/scripting/scope.js +155 -0
  189. package/output/core/classes/parser/types.d.ts +125 -0
  190. package/output/core/classes/parser/types.js +2 -0
  191. package/output/core/classes/parser/wrappers/IndexedReference.d.ts +31 -0
  192. package/output/core/classes/parser/wrappers/IndexedReference.js +68 -0
  193. package/output/core/classes/parser/wrappers/KeyValuePair.d.ts +24 -0
  194. package/output/core/classes/parser/wrappers/KeyValuePair.js +51 -0
  195. package/output/core/classes/polynomial/Polynomial.d.ts +500 -0
  196. package/output/core/classes/polynomial/Polynomial.js +1149 -0
  197. package/output/core/classes/polynomial/Term.d.ts +222 -0
  198. package/output/core/classes/polynomial/Term.js +430 -0
  199. package/output/core/classes/polynomial/functions.d.ts +69 -0
  200. package/output/core/classes/polynomial/functions.js +126 -0
  201. package/output/core/classes/polynomial/utils.d.ts +62 -0
  202. package/output/core/classes/polynomial/utils.js +206 -0
  203. package/output/core/classes/rational/Rational.d.ts +504 -0
  204. package/output/core/classes/rational/Rational.js +779 -0
  205. package/output/core/classes/seq/SEQ.d.ts +13 -0
  206. package/output/core/classes/seq/SEQ.js +137 -0
  207. package/output/core/classes/valuesSet/ValuesSet.d.ts +179 -0
  208. package/output/core/classes/valuesSet/ValuesSet.js +381 -0
  209. package/output/core/classes/vector/Vector.d.ts +222 -0
  210. package/output/core/classes/vector/Vector.js +497 -0
  211. package/output/core/classes/vector/functions.d.ts +28 -0
  212. package/output/core/classes/vector/functions.js +47 -0
  213. package/output/core/common/classes/MathematicalAggregate.d.ts +53 -0
  214. package/output/core/common/classes/MathematicalAggregate.js +140 -0
  215. package/output/core/common/classes/Scope.d.ts +62 -0
  216. package/output/core/common/classes/Scope.js +122 -0
  217. package/output/core/common/classes/StructuredEntity.d.ts +55 -0
  218. package/output/core/common/classes/StructuredEntity.js +151 -0
  219. package/output/core/common/common.d.ts +63 -0
  220. package/output/core/common/common.js +279 -0
  221. package/output/core/common/functions/functions.d.ts +14 -0
  222. package/output/core/common/functions/functions.js +33 -0
  223. package/output/core/common/functions/structuredEntityUtils.d.ts +27 -0
  224. package/output/core/common/functions/structuredEntityUtils.js +40 -0
  225. package/output/core/converters/BaseConverter.d.ts +97 -0
  226. package/output/core/converters/BaseConverter.js +405 -0
  227. package/output/core/converters/Converter.d.ts +111 -0
  228. package/output/core/converters/Converter.js +802 -0
  229. package/output/core/converters/Pattern.d.ts +71 -0
  230. package/output/core/converters/Pattern.js +302 -0
  231. package/output/core/dispatch.d.ts +34 -0
  232. package/output/core/dispatch.js +304 -0
  233. package/output/core/errors.d.ts +531 -0
  234. package/output/core/errors.js +621 -0
  235. package/output/core/functions/bigint/bigint.d.ts +121 -0
  236. package/output/core/functions/bigint/bigint.js +392 -0
  237. package/output/core/functions/bigint/primeFactor.d.ts +49 -0
  238. package/output/core/functions/bigint/primeFactor.js +267 -0
  239. package/output/core/functions/bigint/primes.d.ts +1 -0
  240. package/output/core/functions/bigint/primes.js +11 -0
  241. package/output/core/functions/build/definitions.d.ts +12 -0
  242. package/output/core/functions/build/definitions.js +133 -0
  243. package/output/core/functions/build/index.d.ts +32 -0
  244. package/output/core/functions/build/index.js +136 -0
  245. package/output/core/functions/complex.d.ts +90 -0
  246. package/output/core/functions/complex.js +482 -0
  247. package/output/core/functions/decimal.d.ts +24 -0
  248. package/output/core/functions/decimal.js +664 -0
  249. package/output/core/functions/expand/expand.d.ts +42 -0
  250. package/output/core/functions/expand/expand.js +376 -0
  251. package/output/core/functions/fresnelNumeric.d.ts +12 -0
  252. package/output/core/functions/fresnelNumeric.js +123 -0
  253. package/output/core/functions/numeric.d.ts +140 -0
  254. package/output/core/functions/numeric.js +790 -0
  255. package/output/core/functions/rationalNormalization.d.ts +11 -0
  256. package/output/core/functions/rationalNormalization.js +117 -0
  257. package/output/core/functions/setFunction.d.ts +19 -0
  258. package/output/core/functions/setFunction.js +75 -0
  259. package/output/core/functions/string.d.ts +26 -0
  260. package/output/core/functions/string.js +101 -0
  261. package/output/core/functions/subst.d.ts +90 -0
  262. package/output/core/functions/subst.js +498 -0
  263. package/output/core/functions/utils.d.ts +24 -0
  264. package/output/core/functions/utils.js +51 -0
  265. package/output/core/types.d.ts +48 -0
  266. package/output/core/types.js +2 -0
  267. package/output/index.d.ts +339 -0
  268. package/output/index.js +715 -0
  269. package/output/math/defint/defintDecimal.d.ts +37 -0
  270. package/output/math/defint/defintDecimal.js +320 -0
  271. package/output/math/defint/defintNative.d.ts +57 -0
  272. package/output/math/defint/defintNative.js +292 -0
  273. package/output/math/geometry.d.ts +8 -0
  274. package/output/math/geometry.js +32 -0
  275. package/output/math/math.d.ts +655 -0
  276. package/output/math/math.js +1811 -0
  277. package/output/math/trig.d.ts +518 -0
  278. package/output/math/trig.js +1444 -0
  279. package/output/math/trunc.d.ts +19 -0
  280. package/output/math/trunc.js +36 -0
  281. package/output/math/utils.d.ts +60 -0
  282. package/output/math/utils.js +180 -0
  283. package/output/solve/classes/DecimalMatrix.d.ts +17 -0
  284. package/output/solve/classes/DecimalMatrix.js +86 -0
  285. package/output/solve/classes/FunctionSolver.d.ts +135 -0
  286. package/output/solve/classes/FunctionSolver.js +433 -0
  287. package/output/solve/classes/MultivariateSolver.d.ts +84 -0
  288. package/output/solve/classes/MultivariateSolver.js +240 -0
  289. package/output/solve/classes/PolynomialSolver.d.ts +85 -0
  290. package/output/solve/classes/PolynomialSolver.js +292 -0
  291. package/output/solve/classes/SolutionSet.d.ts +153 -0
  292. package/output/solve/classes/SolutionSet.js +357 -0
  293. package/output/solve/classes/Solver.d.ts +17 -0
  294. package/output/solve/classes/Solver.js +132 -0
  295. package/output/solve/classes/SymbolicSolver.d.ts +74 -0
  296. package/output/solve/classes/SymbolicSolver.js +601 -0
  297. package/output/solve/linsolve.d.ts +51 -0
  298. package/output/solve/linsolve.js +225 -0
  299. package/output/solve/solve.d.ts +34 -0
  300. package/output/solve/solve.js +260 -0
  301. package/output/solve/solveSystem.d.ts +31 -0
  302. package/output/solve/solveSystem.js +290 -0
  303. package/output/solve/utils.d.ts +9 -0
  304. package/output/solve/utils.js +62 -0
  305. package/output/utils/array.d.ts +42 -0
  306. package/output/utils/array.js +98 -0
  307. package/output/utils/debug.d.ts +131 -0
  308. package/output/utils/debug.js +295 -0
  309. package/output/utils/decimal.d.ts +3 -0
  310. package/output/utils/decimal.js +16 -0
  311. package/output/utils/numeric.d.ts +14 -0
  312. package/output/utils/numeric.js +51 -0
  313. package/output/utils/object.d.ts +26 -0
  314. package/output/utils/object.js +56 -0
  315. package/package.json +213 -57
  316. package/.travis.yml +0 -3
  317. package/Algebra.js +0 -4568
  318. package/BREAKING_CHANGES.md +0 -5
  319. package/CODE_OF_CONDUCT.md +0 -46
  320. package/CONTRIBUTING.md +0 -14
  321. package/Calculus.js +0 -2675
  322. package/Extra.js +0 -622
  323. package/Solve.js +0 -1783
  324. package/all.js +0 -16
  325. package/all.min.js +0 -1
  326. package/gulpfile.js +0 -16
  327. package/index.html +0 -158
  328. package/license.txt +0 -19
  329. package/nerdamer.core.js +0 -12510
  330. package/spec/LaTeX.spec.js +0 -302
  331. package/spec/TeXConvert.spec.js +0 -8
  332. package/spec/algebra.spec.js +0 -287
  333. package/spec/basic_parser.spec.js +0 -134
  334. package/spec/build.spec.js +0 -131
  335. package/spec/calculus.spec.js +0 -183
  336. package/spec/core.spec.js +0 -2970
  337. package/spec/extra.spec.js +0 -54
  338. package/spec/solve.spec.js +0 -126
  339. package/spec/support/jasmine.json +0 -11
  340. package/spec/support/utils.js +0 -42
  341. package/spec/text.spec.js +0 -132
@@ -0,0 +1,13 @@
1
+ export declare class Sequence {
2
+ private coefficients;
3
+ private maxPower;
4
+ private seq;
5
+ private startsAt;
6
+ constructor(sequence: (number | bigint)[], opts?: {
7
+ startsAt?: number;
8
+ maxPower?: number;
9
+ });
10
+ private differenceTable;
11
+ analyze(): this;
12
+ toPolynomialString(): string;
13
+ }
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /* SEQ.ts – corrected & optimized */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Sequence = void 0;
5
+ const DEFAULT_MAX_POWER = 50;
6
+ /* ---------- helpers ---------- */
7
+ function factorial(n) {
8
+ let r = 1n;
9
+ for (let i = 2; i <= n; i++) {
10
+ r *= BigInt(i);
11
+ }
12
+ return r;
13
+ }
14
+ function binomial(n, k) {
15
+ if (k < 0 || k > n) {
16
+ return 0n;
17
+ }
18
+ k = Math.min(k, n - k);
19
+ let r = 1n;
20
+ for (let i = 1; i <= k; i++) {
21
+ r = (r * BigInt(n - k + i)) / BigInt(i);
22
+ }
23
+ return r;
24
+ }
25
+ /* Precompute signed Stirling numbers of the first kind */
26
+ function stirlingTable(maxN) {
27
+ const S = Array.from({ length: maxN + 1 }, () => Array(maxN + 1).fill(0n));
28
+ S[0][0] = 1n;
29
+ for (let n = 1; n <= maxN; n++) {
30
+ for (let k = 1; k <= n; k++) {
31
+ S[n][k] = S[n - 1][k - 1] - BigInt(n - 1) * S[n - 1][k];
32
+ }
33
+ }
34
+ return S;
35
+ }
36
+ /* ---------- main ---------- */
37
+ class Sequence {
38
+ coefficients = null;
39
+ maxPower;
40
+ seq;
41
+ startsAt;
42
+ constructor(sequence, opts) {
43
+ this.seq = sequence.map(v => BigInt(v));
44
+ this.startsAt = opts?.startsAt ?? 0;
45
+ this.maxPower = opts?.maxPower ?? DEFAULT_MAX_POWER;
46
+ if (!Number.isInteger(this.startsAt)) {
47
+ throw new Error('startsAt must be an integer');
48
+ }
49
+ }
50
+ differenceTable() {
51
+ const table = [this.seq];
52
+ while (table[table.length - 1].length > 1) {
53
+ const prev = table[table.length - 1];
54
+ const next = [];
55
+ for (let i = 1; i < prev.length; i++) {
56
+ next.push(prev[i] - prev[i - 1]);
57
+ }
58
+ table.push(next);
59
+ }
60
+ return table;
61
+ }
62
+ analyze() {
63
+ if (this.coefficients) {
64
+ return this;
65
+ }
66
+ const table = this.differenceTable();
67
+ let degree = -1;
68
+ /* stop at FIRST constant row */
69
+ for (let i = 0; i < table.length; i++) {
70
+ const row = table[i];
71
+ if (row.length >= 2 && row.every(v => v === row[0])) {
72
+ degree = i;
73
+ break;
74
+ }
75
+ }
76
+ if (degree < 0 || degree > this.maxPower) {
77
+ throw new Error('Sequence is not a polynomial or exceeds maxPower');
78
+ }
79
+ if (this.seq.length <= degree) {
80
+ throw new Error('Insufficient data points for detected degree');
81
+ }
82
+ const s = BigInt(this.startsAt);
83
+ const stirling = stirlingTable(degree);
84
+ /* Newton basis coefficients */
85
+ const tPoly = [];
86
+ for (let k = 0; k <= degree; k++) {
87
+ tPoly[k] = table[k][0] / factorial(k);
88
+ }
89
+ /* precompute (-s)^n */
90
+ const negSPowers = Array(degree + 1).fill(1n);
91
+ for (let i = 1; i <= degree; i++) {
92
+ negSPowers[i] = negSPowers[i - 1] * -s;
93
+ }
94
+ /* convert to monomial basis (with proper shift) */
95
+ const poly = Array(degree + 1).fill(0n);
96
+ for (let k = 0; k <= degree; k++) {
97
+ for (let m = 0; m <= k; m++) {
98
+ const sKm = stirling[k][m];
99
+ if (sKm === 0n) {
100
+ continue;
101
+ }
102
+ for (let j = 0; j <= m; j++) {
103
+ poly[j] += tPoly[k] * sKm * binomial(m, j) * negSPowers[m - j];
104
+ }
105
+ }
106
+ }
107
+ this.coefficients = poly;
108
+ return this;
109
+ }
110
+ toPolynomialString() {
111
+ if (!this.coefficients) {
112
+ this.analyze();
113
+ }
114
+ const coeffs = this.coefficients;
115
+ let out = '';
116
+ for (let i = coeffs.length - 1; i >= 0; i--) {
117
+ const c = coeffs[i];
118
+ if (c === 0n) {
119
+ continue;
120
+ }
121
+ const sign = c < 0n ? '-' : out ? '+' : '';
122
+ const abs = c < 0n ? -c : c;
123
+ out += sign;
124
+ if (i === 0 || abs !== 1n) {
125
+ out += abs.toString();
126
+ }
127
+ if (i >= 1) {
128
+ out += 'x';
129
+ }
130
+ if (i >= 2) {
131
+ out += '^' + i;
132
+ }
133
+ }
134
+ return out || '0';
135
+ }
136
+ }
137
+ exports.Sequence = Sequence;
@@ -0,0 +1,179 @@
1
+ import { MathematicalAggregate } from '../../common/classes/MathematicalAggregate';
2
+ import { SET, SOLUTIONS_SET } from '../parser/constants';
3
+ import type { NerdamerInput, ParserEntity } from '../../types';
4
+ /**
5
+ * A finite mathematical set of Nerdamer parser values.
6
+ *
7
+ * @remarks
8
+ * Membership and uniqueness use each element's `eq()` method rather than JavaScript
9
+ * reference identity. Two members are considered equal only when both directional equality
10
+ * checks agree, which keeps mixed-type membership independent of insertion order. This treatment is
11
+ * conservative for symbolic values: if Nerdamer cannot establish that two
12
+ * elements are equal, they remain distinct. Values whose entity types cannot be compared are
13
+ * likewise treated as distinct members. In particular, set membership does not attempt theorem
14
+ * proving beyond the equality semantics of the stored values.
15
+ *
16
+ * `ValuesSet` owns its elements. Values passed to the constructor or {@link add} are copied,
17
+ * and {@link elements}, {@link at}, and indexed reads return copies. This prevents a caller
18
+ * from changing a stored mutable object behind the set and silently violating uniqueness.
19
+ * Mutation therefore goes through the set methods, which re-establish set uniqueness
20
+ * after every supported change.
21
+ *
22
+ * Iteration order is deterministic insertion order so text output and direct traversal are
23
+ * reproducible, but that order has no mathematical meaning. Equality and subset/superset
24
+ * comparisons are membership-based and ignore order.
25
+ *
26
+ * The arithmetic methods inherited by other structured entities are rejected
27
+ * here. Pairing two sets by insertion index would make arithmetic depend on a non-mathematical
28
+ * ordering. Use the explicit finite-set operations on this class instead.
29
+ */
30
+ export declare class ValuesSet extends MathematicalAggregate<ValuesSet> {
31
+ private _elements;
32
+ dataType: typeof SET | typeof SOLUTIONS_SET;
33
+ isEnumerable: boolean;
34
+ precision?: number | undefined;
35
+ constructor(values?: Iterable<ParserEntity>);
36
+ /**
37
+ * Tests whether a value is a `ValuesSet` or a specialized `ValuesSet` subtype such as
38
+ * `SolutionSet`.
39
+ */
40
+ static isValuesSet(obj: unknown): obj is ValuesSet;
41
+ protected getValuesArray(): ParserEntity[];
42
+ protected setValuesArray(values: ParserEntity[]): void;
43
+ private indexOf;
44
+ private membersEqual;
45
+ /**
46
+ * Reads an element for parser indexing.
47
+ *
48
+ * @throws A `RangeError` if the index is outside the current set size.
49
+ */
50
+ __get__(indices: number[]): ParserEntity;
51
+ /**
52
+ * Replaces the insertion-order element at an index while preserving uniqueness.
53
+ *
54
+ * @remarks
55
+ * If the replacement is already present elsewhere in the set, the indexed element is
56
+ * removed instead of creating a duplicate. Indexed mutation is provided for parser
57
+ * compatibility; the index is not part of the mathematical identity of a set.
58
+ *
59
+ * @throws A `RangeError` if the index is outside the current set size.
60
+ */
61
+ __set__(indices: number[], value: ParserEntity): void;
62
+ /** Adds an element if no semantically equal member is already present. */
63
+ add(x: ParserEntity): ValuesSet;
64
+ /** Adds every value in the iterable while preserving set uniqueness. */
65
+ addMany(x: Iterable<ParserEntity>): ValuesSet;
66
+ /**
67
+ * Returns a copy of the element at the requested insertion-order index.
68
+ *
69
+ * @returns A copy of the stored value, or `undefined` when the index is out of range.
70
+ */
71
+ at(i: number): ParserEntity | undefined;
72
+ /** Removes every member from the set. */
73
+ clear(): this;
74
+ /** Returns an independent set containing independent copies of all members. */
75
+ copy(): ValuesSet;
76
+ /** Returns the current number of set members. */
77
+ count(): number;
78
+ /** Removes the member semantically equal to `x`, if one is present. */
79
+ delete(x: ParserEntity): boolean;
80
+ /** Returns a new set containing members of this set that are absent from `other`. */
81
+ difference(other: ValuesSet): ValuesSet;
82
+ /** Returns the one-dimensional storage size used by parser indexing. */
83
+ dimensions(): number[];
84
+ /**
85
+ * Rejects binary division because finite sets do not define elementwise quotients.
86
+ *
87
+ * @throws {@link core!UnsupportedOperationError} Always.
88
+ */
89
+ div(_x: NerdamerInput): ValuesSet;
90
+ /**
91
+ * Visits or maps the current members in insertion order.
92
+ *
93
+ * Duplicate mapped values collapse to their first occurrence. The callback receives a
94
+ * copy of each stored member, so mutating an input inside the callback cannot alter the
95
+ * set unless that value is returned. Returning `void` leaves the current member unchanged.
96
+ */
97
+ each(callback: (e: ParserEntity, i?: string | number, j?: string | number) => ParserEntity | void): this;
98
+ /**
99
+ * Returns a deep-copied snapshot of the set's current elements.
100
+ *
101
+ * Mutating the returned array or its members does not change this set. Use the set's
102
+ * mutation methods when the stored membership should change.
103
+ */
104
+ get elements(): ParserEntity[];
105
+ /** Tests set equality by membership, independent of insertion order. */
106
+ eq(other: ParserEntity): boolean;
107
+ /** Evaluates every member and returns a new set, collapsing equal results. */
108
+ evaluate(): ValuesSet;
109
+ /** Expands every member and returns a new set, collapsing equal results. */
110
+ expand(): ValuesSet;
111
+ /**
112
+ * Returns the proper-superset relation for compatibility with parser comparison syntax.
113
+ * Prefer {@link isProperSupersetOf} in direct set-oriented code.
114
+ */
115
+ gt(other: ParserEntity): boolean;
116
+ /**
117
+ * Returns the superset relation for compatibility with parser comparison syntax.
118
+ * Prefer {@link isSupersetOf} in direct set-oriented code.
119
+ */
120
+ gte(other: ParserEntity): boolean;
121
+ /** Tests whether a semantically equal member is present. */
122
+ has(x: ParserEntity): boolean;
123
+ /** Returns a new set containing only members present in both sets. */
124
+ intersection(other: ValuesSet): ValuesSet;
125
+ /** Returns `true` when this set has no member in common with `other`. */
126
+ isDisjointFrom(other: ValuesSet): boolean;
127
+ /** Returns `true` when this set is a strict subset of `other`. */
128
+ isProperSubsetOf(other: ValuesSet): boolean;
129
+ /** Returns `true` when this set is a strict superset of `other`. */
130
+ isProperSupersetOf(other: ValuesSet): boolean;
131
+ /** Returns `true` when every member of this set is present in `other`. */
132
+ isSubsetOf(other: ValuesSet): boolean;
133
+ /** Returns `true` when every member of `other` is present in this set. */
134
+ isSupersetOf(other: ValuesSet): boolean;
135
+ /**
136
+ * Returns the proper-subset relation for compatibility with parser comparison syntax.
137
+ * Prefer {@link isProperSubsetOf} in direct set-oriented code.
138
+ */
139
+ lt(other: ParserEntity): boolean;
140
+ /**
141
+ * Returns the subset relation for compatibility with parser comparison syntax.
142
+ * Prefer {@link isSubsetOf} in direct set-oriented code.
143
+ */
144
+ lte(other: ParserEntity): boolean;
145
+ /**
146
+ * Rejects binary subtraction because finite sets do not define elementwise subtraction.
147
+ *
148
+ * @throws {@link core!UnsupportedOperationError} Always.
149
+ */
150
+ minus(_x: NerdamerInput): ValuesSet;
151
+ /**
152
+ * Binary addition is not defined for finite sets. Use {@link union} for set union.
153
+ *
154
+ * @throws {@link core!UnsupportedOperationError} Always.
155
+ */
156
+ plus(_x: NerdamerInput): ValuesSet;
157
+ /**
158
+ * Rejects binary exponentiation because finite sets do not define elementwise powers.
159
+ *
160
+ * @throws {@link core!UnsupportedOperationError} Always.
161
+ */
162
+ pow(_x: NerdamerInput): ValuesSet;
163
+ /**
164
+ * Sorts the deterministic iteration order without changing mathematical membership.
165
+ * A custom comparator receives copies so it cannot mutate stored members as a side effect.
166
+ */
167
+ sort(compareFn?: (a: ParserEntity, b: ParserEntity) => number): this;
168
+ /** Returns a new set containing members present in exactly one of the two sets. */
169
+ symmetricDifference(other: ValuesSet): ValuesSet;
170
+ text(): string;
171
+ /**
172
+ * Rejects binary multiplication because finite sets do not define elementwise products.
173
+ *
174
+ * @throws {@link core!UnsupportedOperationError} Always.
175
+ */
176
+ times(_x: NerdamerInput): ValuesSet;
177
+ /** Returns a new set containing members present in either set. */
178
+ union(other: ValuesSet): ValuesSet;
179
+ }