nerdamer 1.1.13 → 2.0.0-rc.2

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 (387) hide show
  1. package/BREAKING_CHANGES.md +244 -5
  2. package/LICENSE.md +184 -0
  3. package/README.md +232 -318
  4. package/dist/bundle.js +2 -0
  5. package/dist/bundle.js.LICENSE.txt +7 -0
  6. package/dist/parser.js +2 -0
  7. package/dist/parser.js.LICENSE.txt +7 -0
  8. package/docs-data/parser-functions.json +2248 -0
  9. package/index.d.ts +10 -426
  10. package/output/algebra/adapters.d.ts +3 -0
  11. package/output/algebra/adapters.js +11 -0
  12. package/output/algebra/algorithms/arith.d.ts +84 -0
  13. package/output/algebra/algorithms/arith.js +324 -0
  14. package/output/algebra/algorithms/groebnerBase.d.ts +161 -0
  15. package/output/algebra/algorithms/groebnerBase.js +929 -0
  16. package/output/algebra/dispatch.d.ts +1 -0
  17. package/output/algebra/dispatch.js +25 -0
  18. package/output/algebra/factor/factor.d.ts +77 -0
  19. package/output/algebra/factor/factor.js +245 -0
  20. package/output/algebra/gcd/gcd.d.ts +30 -0
  21. package/output/algebra/gcd/gcd.js +95 -0
  22. package/output/algebra/groebner.d.ts +21 -0
  23. package/output/algebra/groebner.js +36 -0
  24. package/output/algebra/partfrac.d.ts +19 -0
  25. package/output/algebra/partfrac.js +365 -0
  26. package/output/algebra/polynomial/ModularSparsePolynomial.d.ts +131 -0
  27. package/output/algebra/polynomial/ModularSparsePolynomial.js +378 -0
  28. package/output/algebra/polynomial/ModularSparsePolynomialFactor.d.ts +40 -0
  29. package/output/algebra/polynomial/ModularSparsePolynomialFactor.js +661 -0
  30. package/output/algebra/polynomial/SparsePolynomialFactor.d.ts +64 -0
  31. package/output/algebra/polynomial/SparsePolynomialFactor.js +492 -0
  32. package/output/algebra/polynomial/SparsePolynomialGcd.d.ts +29 -0
  33. package/output/algebra/polynomial/SparsePolynomialGcd.js +259 -0
  34. package/output/algebra/polynomial/SparsePolynomialMultivariateFactor.d.ts +82 -0
  35. package/output/algebra/polynomial/SparsePolynomialMultivariateFactor.js +604 -0
  36. package/output/algebra/polynomial/modularGcd.d.ts +40 -0
  37. package/output/algebra/polynomial/modularGcd.js +365 -0
  38. package/output/algebra/polynomialize.d.ts +20 -0
  39. package/output/algebra/polynomialize.js +26 -0
  40. package/output/algebra/simplify/complexsimp.d.ts +7 -0
  41. package/output/algebra/simplify/complexsimp.js +24 -0
  42. package/output/algebra/simplify/factorCommon.d.ts +13 -0
  43. package/output/algebra/simplify/factorCommon.js +136 -0
  44. package/output/algebra/simplify/funcsimp.d.ts +26 -0
  45. package/output/algebra/simplify/funcsimp.js +633 -0
  46. package/output/algebra/simplify/invtrigrewrite.d.ts +10 -0
  47. package/output/algebra/simplify/invtrigrewrite.js +96 -0
  48. package/output/algebra/simplify/ratsimp.d.ts +21 -0
  49. package/output/algebra/simplify/ratsimp.js +140 -0
  50. package/output/algebra/simplify/simplify.d.ts +25 -0
  51. package/output/algebra/simplify/simplify.js +237 -0
  52. package/output/algebra/simplify/trigreduce.d.ts +38 -0
  53. package/output/algebra/simplify/trigreduce.js +424 -0
  54. package/output/algebra/simplify/trigrewrite.d.ts +17 -0
  55. package/output/algebra/simplify/trigrewrite.js +156 -0
  56. package/output/algebra/simplify/trigsimp.d.ts +11 -0
  57. package/output/algebra/simplify/trigsimp.js +369 -0
  58. package/output/algebra/simplify/utils.d.ts +32 -0
  59. package/output/algebra/simplify/utils.js +56 -0
  60. package/output/algebra/utils.d.ts +32 -0
  61. package/output/algebra/utils.js +48 -0
  62. package/output/api/advanced.d.ts +8 -0
  63. package/output/api/advanced.js +18 -0
  64. package/output/api/algebra.d.ts +17 -0
  65. package/output/api/algebra.js +35 -0
  66. package/output/api/assumptions.d.ts +4 -0
  67. package/output/api/assumptions.js +11 -0
  68. package/output/api/calculus.d.ts +10 -0
  69. package/output/api/calculus.js +22 -0
  70. package/output/api/core.d.ts +17 -0
  71. package/output/api/core.js +41 -0
  72. package/output/api/debug.d.ts +16 -0
  73. package/output/api/debug.js +23 -0
  74. package/output/api/languages/deu.d.ts +3 -0
  75. package/output/api/languages/deu.js +266 -0
  76. package/output/api/languages/fra.d.ts +3 -0
  77. package/output/api/languages/fra.js +266 -0
  78. package/output/api/languages/ita.d.ts +3 -0
  79. package/output/api/languages/ita.js +266 -0
  80. package/output/api/languages/nld.d.ts +3 -0
  81. package/output/api/languages/nld.js +266 -0
  82. package/output/api/languages/por.d.ts +3 -0
  83. package/output/api/languages/por.js +266 -0
  84. package/output/api/languages/spa.d.ts +3 -0
  85. package/output/api/languages/spa.js +266 -0
  86. package/output/api/parser.d.ts +93 -0
  87. package/output/api/parser.js +18 -0
  88. package/output/api/solve.d.ts +10 -0
  89. package/output/api/solve.js +17 -0
  90. package/output/api/structures.d.ts +10 -0
  91. package/output/api/structures.js +23 -0
  92. package/output/calculus/adapters.d.ts +8 -0
  93. package/output/calculus/adapters.js +41 -0
  94. package/output/calculus/derivative/diff.d.ts +30 -0
  95. package/output/calculus/derivative/diff.js +241 -0
  96. package/output/calculus/dispatch.d.ts +1 -0
  97. package/output/calculus/dispatch.js +25 -0
  98. package/output/calculus/fresnel.d.ts +16 -0
  99. package/output/calculus/fresnel.js +39 -0
  100. package/output/calculus/integrate/byParts.d.ts +18 -0
  101. package/output/calculus/integrate/byParts.js +339 -0
  102. package/output/calculus/integrate/bySubstitution.d.ts +135 -0
  103. package/output/calculus/integrate/bySubstitution.js +411 -0
  104. package/output/calculus/integrate/integrate.d.ts +38 -0
  105. package/output/calculus/integrate/integrate.js +652 -0
  106. package/output/calculus/integrate/integrationTable.d.ts +2 -0
  107. package/output/calculus/integrate/integrationTable.js +914 -0
  108. package/output/calculus/integrate/utils.d.ts +28 -0
  109. package/output/calculus/integrate/utils.js +96 -0
  110. package/output/calculus/laplace/ilaplace.d.ts +31 -0
  111. package/output/calculus/laplace/ilaplace.js +192 -0
  112. package/output/calculus/laplace/ilaplaceTable.d.ts +2 -0
  113. package/output/calculus/laplace/ilaplaceTable.js +200 -0
  114. package/output/calculus/laplace/laplace.d.ts +22 -0
  115. package/output/calculus/laplace/laplace.js +109 -0
  116. package/output/calculus/laplace/laplaceTable.d.ts +2 -0
  117. package/output/calculus/laplace/laplaceTable.js +187 -0
  118. package/output/calculus/limit/limit.d.ts +35 -0
  119. package/output/calculus/limit/limit.js +1183 -0
  120. package/output/calculus/limit/limitsTable.d.ts +2 -0
  121. package/output/calculus/limit/limitsTable.js +7 -0
  122. package/output/core/Settings.d.ts +32 -0
  123. package/output/core/Settings.js +68 -0
  124. package/output/core/classes/assumption/Assumption.d.ts +218 -0
  125. package/output/core/classes/assumption/Assumption.js +609 -0
  126. package/output/core/classes/assumption/assertiveFunctions.d.ts +6 -0
  127. package/output/core/classes/assumption/assertiveFunctions.js +64 -0
  128. package/output/core/classes/assumption/assume.d.ts +90 -0
  129. package/output/core/classes/assumption/assume.js +145 -0
  130. package/output/core/classes/assumption/dispatch.d.ts +1 -0
  131. package/output/core/classes/assumption/dispatch.js +11 -0
  132. package/output/core/classes/collection/Collection.d.ts +107 -0
  133. package/output/core/classes/collection/Collection.js +240 -0
  134. package/output/core/classes/complex/Complex.d.ts +109 -0
  135. package/output/core/classes/complex/Complex.js +153 -0
  136. package/output/core/classes/decimalSet/DecimalSet.d.ts +226 -0
  137. package/output/core/classes/decimalSet/DecimalSet.js +454 -0
  138. package/output/core/classes/dictionary/Dictionary.d.ts +102 -0
  139. package/output/core/classes/dictionary/Dictionary.js +216 -0
  140. package/output/core/classes/equation/Equation.d.ts +256 -0
  141. package/output/core/classes/equation/Equation.js +350 -0
  142. package/output/core/classes/expression/CoeffObject.d.ts +100 -0
  143. package/output/core/classes/expression/CoeffObject.js +197 -0
  144. package/output/core/classes/expression/Expression.d.ts +1691 -0
  145. package/output/core/classes/expression/Expression.js +2381 -0
  146. package/output/core/classes/expression/analysis.d.ts +25 -0
  147. package/output/core/classes/expression/analysis.js +218 -0
  148. package/output/core/classes/expression/collect.d.ts +9 -0
  149. package/output/core/classes/expression/collect.js +49 -0
  150. package/output/core/classes/expression/format.d.ts +54 -0
  151. package/output/core/classes/expression/format.js +340 -0
  152. package/output/core/classes/expression/products.d.ts +23 -0
  153. package/output/core/classes/expression/products.js +115 -0
  154. package/output/core/classes/expression/shortcuts.d.ts +35 -0
  155. package/output/core/classes/expression/shortcuts.js +129 -0
  156. package/output/core/classes/expression/traversal.d.ts +31 -0
  157. package/output/core/classes/expression/traversal.js +216 -0
  158. package/output/core/classes/expression/trig.d.ts +25 -0
  159. package/output/core/classes/expression/trig.js +40 -0
  160. package/output/core/classes/expression/utils.d.ts +61 -0
  161. package/output/core/classes/expression/utils.js +235 -0
  162. package/output/core/classes/lookupTable/LookupTable.d.ts +12 -0
  163. package/output/core/classes/lookupTable/LookupTable.js +55 -0
  164. package/output/core/classes/matrix/Matrix.d.ts +227 -0
  165. package/output/core/classes/matrix/Matrix.js +901 -0
  166. package/output/core/classes/matrix/Sylvester.d.ts +11 -0
  167. package/output/core/classes/matrix/Sylvester.js +54 -0
  168. package/output/core/classes/matrix/dispatch.d.ts +1 -0
  169. package/output/core/classes/matrix/dispatch.js +19 -0
  170. package/output/core/classes/matrix/functions.d.ts +28 -0
  171. package/output/core/classes/matrix/functions.js +57 -0
  172. package/output/core/classes/matrix/utils.d.ts +9 -0
  173. package/output/core/classes/matrix/utils.js +22 -0
  174. package/output/core/classes/parser/Parser.d.ts +493 -0
  175. package/output/core/classes/parser/Parser.js +1863 -0
  176. package/output/core/classes/parser/Token.d.ts +58 -0
  177. package/output/core/classes/parser/Token.js +137 -0
  178. package/output/core/classes/parser/constants.d.ts +162 -0
  179. package/output/core/classes/parser/constants.js +229 -0
  180. package/output/core/classes/parser/controlFlowSignals.d.ts +38 -0
  181. package/output/core/classes/parser/controlFlowSignals.js +60 -0
  182. package/output/core/classes/parser/helpers.d.ts +21 -0
  183. package/output/core/classes/parser/helpers.js +42 -0
  184. package/output/core/classes/parser/operations/add.d.ts +15 -0
  185. package/output/core/classes/parser/operations/add.js +236 -0
  186. package/output/core/classes/parser/operations/comma.d.ts +7 -0
  187. package/output/core/classes/parser/operations/comma.js +11 -0
  188. package/output/core/classes/parser/operations/compare.d.ts +21 -0
  189. package/output/core/classes/parser/operations/compare.js +474 -0
  190. package/output/core/classes/parser/operations/divide.d.ts +2 -0
  191. package/output/core/classes/parser/operations/divide.js +72 -0
  192. package/output/core/classes/parser/operations/functions.d.ts +46 -0
  193. package/output/core/classes/parser/operations/functions.js +438 -0
  194. package/output/core/classes/parser/operations/multiply.d.ts +11 -0
  195. package/output/core/classes/parser/operations/multiply.js +328 -0
  196. package/output/core/classes/parser/operations/power.d.ts +48 -0
  197. package/output/core/classes/parser/operations/power.js +673 -0
  198. package/output/core/classes/parser/operations/subtract.d.ts +3 -0
  199. package/output/core/classes/parser/operations/subtract.js +36 -0
  200. package/output/core/classes/parser/preprocess.d.ts +7 -0
  201. package/output/core/classes/parser/preprocess.js +246 -0
  202. package/output/core/classes/parser/scripting/controlFlow.d.ts +23 -0
  203. package/output/core/classes/parser/scripting/controlFlow.js +279 -0
  204. package/output/core/classes/parser/scripting/deferred.d.ts +4 -0
  205. package/output/core/classes/parser/scripting/deferred.js +65 -0
  206. package/output/core/classes/parser/scripting/dispatch.d.ts +1 -0
  207. package/output/core/classes/parser/scripting/dispatch.js +62 -0
  208. package/output/core/classes/parser/scripting/evaluate.d.ts +23 -0
  209. package/output/core/classes/parser/scripting/evaluate.js +128 -0
  210. package/output/core/classes/parser/scripting/functions.d.ts +14 -0
  211. package/output/core/classes/parser/scripting/functions.js +59 -0
  212. package/output/core/classes/parser/scripting/scope.d.ts +8 -0
  213. package/output/core/classes/parser/scripting/scope.js +132 -0
  214. package/output/core/classes/parser/types.d.ts +130 -0
  215. package/output/core/classes/parser/types.js +2 -0
  216. package/output/core/classes/parser/wrappers/IndexedReference.d.ts +31 -0
  217. package/output/core/classes/parser/wrappers/IndexedReference.js +68 -0
  218. package/output/core/classes/parser/wrappers/KeyValuePair.d.ts +24 -0
  219. package/output/core/classes/parser/wrappers/KeyValuePair.js +51 -0
  220. package/output/core/classes/polynomial/Polynomial.d.ts +504 -0
  221. package/output/core/classes/polynomial/Polynomial.js +1195 -0
  222. package/output/core/classes/polynomial/SparsePolynomial.d.ts +221 -0
  223. package/output/core/classes/polynomial/SparsePolynomial.js +824 -0
  224. package/output/core/classes/polynomial/SparsePolynomialAdapter.d.ts +56 -0
  225. package/output/core/classes/polynomial/SparsePolynomialAdapter.js +241 -0
  226. package/output/core/classes/polynomial/Term.d.ts +222 -0
  227. package/output/core/classes/polynomial/Term.js +430 -0
  228. package/output/core/classes/polynomial/adapters.d.ts +18 -0
  229. package/output/core/classes/polynomial/adapters.js +33 -0
  230. package/output/core/classes/polynomial/dispatch.d.ts +1 -0
  231. package/output/core/classes/polynomial/dispatch.js +14 -0
  232. package/output/core/classes/polynomial/functions.d.ts +77 -0
  233. package/output/core/classes/polynomial/functions.js +189 -0
  234. package/output/core/classes/polynomial/utils.d.ts +62 -0
  235. package/output/core/classes/polynomial/utils.js +207 -0
  236. package/output/core/classes/rational/Rational.d.ts +501 -0
  237. package/output/core/classes/rational/Rational.js +829 -0
  238. package/output/core/classes/seq/SEQ.d.ts +13 -0
  239. package/output/core/classes/seq/SEQ.js +137 -0
  240. package/output/core/classes/valuesSet/ValuesSet.d.ts +187 -0
  241. package/output/core/classes/valuesSet/ValuesSet.js +399 -0
  242. package/output/core/classes/vector/Vector.d.ts +222 -0
  243. package/output/core/classes/vector/Vector.js +501 -0
  244. package/output/core/classes/vector/dispatch.d.ts +1 -0
  245. package/output/core/classes/vector/dispatch.js +11 -0
  246. package/output/core/classes/vector/functions.d.ts +28 -0
  247. package/output/core/classes/vector/functions.js +47 -0
  248. package/output/core/common/classes/MathematicalAggregate.d.ts +53 -0
  249. package/output/core/common/classes/MathematicalAggregate.js +149 -0
  250. package/output/core/common/classes/Scope.d.ts +62 -0
  251. package/output/core/common/classes/Scope.js +122 -0
  252. package/output/core/common/classes/StructuredEntity.d.ts +55 -0
  253. package/output/core/common/classes/StructuredEntity.js +151 -0
  254. package/output/core/common/common.d.ts +62 -0
  255. package/output/core/common/common.js +74 -0
  256. package/output/core/common/functions/functions.d.ts +14 -0
  257. package/output/core/common/functions/functions.js +33 -0
  258. package/output/core/common/functions/structuredEntityUtils.d.ts +27 -0
  259. package/output/core/common/functions/structuredEntityUtils.js +40 -0
  260. package/output/core/converters/BaseConverter.d.ts +97 -0
  261. package/output/core/converters/BaseConverter.js +405 -0
  262. package/output/core/converters/Converter.d.ts +111 -0
  263. package/output/core/converters/Converter.js +806 -0
  264. package/output/core/converters/Pattern.d.ts +71 -0
  265. package/output/core/converters/Pattern.js +302 -0
  266. package/output/core/dispatch.d.ts +52 -0
  267. package/output/core/dispatch.js +26 -0
  268. package/output/core/errors.d.ts +316 -0
  269. package/output/core/errors.js +349 -0
  270. package/output/core/fullFunctions.d.ts +7 -0
  271. package/output/core/fullFunctions.js +31 -0
  272. package/output/core/functions/bigint/bigint.d.ts +133 -0
  273. package/output/core/functions/bigint/bigint.js +444 -0
  274. package/output/core/functions/bigint/primeFactor.d.ts +51 -0
  275. package/output/core/functions/bigint/primeFactor.js +267 -0
  276. package/output/core/functions/bigint/primes.d.ts +1 -0
  277. package/output/core/functions/bigint/primes.js +11 -0
  278. package/output/core/functions/build/definitions.d.ts +12 -0
  279. package/output/core/functions/build/definitions.js +139 -0
  280. package/output/core/functions/build/index.d.ts +32 -0
  281. package/output/core/functions/build/index.js +136 -0
  282. package/output/core/functions/complex.d.ts +90 -0
  283. package/output/core/functions/complex.dispatch.d.ts +1 -0
  284. package/output/core/functions/complex.dispatch.js +16 -0
  285. package/output/core/functions/complex.js +482 -0
  286. package/output/core/functions/decimal.d.ts +24 -0
  287. package/output/core/functions/decimal.js +665 -0
  288. package/output/core/functions/expand/expand.d.ts +42 -0
  289. package/output/core/functions/expand/expand.js +376 -0
  290. package/output/core/functions/fresnelNumeric.d.ts +12 -0
  291. package/output/core/functions/fresnelNumeric.js +123 -0
  292. package/output/core/functions/numeric.d.ts +140 -0
  293. package/output/core/functions/numeric.js +790 -0
  294. package/output/core/functions/rationalNormalization.d.ts +11 -0
  295. package/output/core/functions/rationalNormalization.js +117 -0
  296. package/output/core/functions/setFunction.d.ts +19 -0
  297. package/output/core/functions/setFunction.js +75 -0
  298. package/output/core/functions/string.d.ts +26 -0
  299. package/output/core/functions/string.js +102 -0
  300. package/output/core/functions/subst.d.ts +90 -0
  301. package/output/core/functions/subst.js +506 -0
  302. package/output/core/functions/utils.d.ts +24 -0
  303. package/output/core/functions/utils.js +51 -0
  304. package/output/core/parserFunctions.d.ts +7 -0
  305. package/output/core/parserFunctions.js +25 -0
  306. package/output/core/types.d.ts +48 -0
  307. package/output/core/types.js +2 -0
  308. package/output/index.d.ts +359 -0
  309. package/output/index.js +739 -0
  310. package/output/math/defint/defint.d.ts +18 -0
  311. package/output/math/defint/defint.js +60 -0
  312. package/output/math/defint/defintDecimal.d.ts +37 -0
  313. package/output/math/defint/defintDecimal.js +321 -0
  314. package/output/math/defint/defintNative.d.ts +57 -0
  315. package/output/math/defint/defintNative.js +281 -0
  316. package/output/math/dispatch.d.ts +1 -0
  317. package/output/math/dispatch.js +101 -0
  318. package/output/math/geometry.d.ts +12 -0
  319. package/output/math/geometry.js +55 -0
  320. package/output/math/math.d.ts +695 -0
  321. package/output/math/math.js +1955 -0
  322. package/output/math/trig.d.ts +518 -0
  323. package/output/math/trig.js +1444 -0
  324. package/output/math/trunc.d.ts +19 -0
  325. package/output/math/trunc.js +36 -0
  326. package/output/math/utils.d.ts +66 -0
  327. package/output/math/utils.js +219 -0
  328. package/output/solve/classes/DecimalMatrix.d.ts +17 -0
  329. package/output/solve/classes/DecimalMatrix.js +86 -0
  330. package/output/solve/classes/FunctionSolver.d.ts +135 -0
  331. package/output/solve/classes/FunctionSolver.js +433 -0
  332. package/output/solve/classes/MultivariateSolver.d.ts +84 -0
  333. package/output/solve/classes/MultivariateSolver.js +240 -0
  334. package/output/solve/classes/PolynomialSolver.d.ts +104 -0
  335. package/output/solve/classes/PolynomialSolver.js +492 -0
  336. package/output/solve/classes/SolutionSet.d.ts +172 -0
  337. package/output/solve/classes/SolutionSet.js +434 -0
  338. package/output/solve/classes/Solver.d.ts +17 -0
  339. package/output/solve/classes/Solver.js +132 -0
  340. package/output/solve/classes/SymbolicSolver.d.ts +74 -0
  341. package/output/solve/classes/SymbolicSolver.js +601 -0
  342. package/output/solve/dispatch.d.ts +1 -0
  343. package/output/solve/dispatch.js +13 -0
  344. package/output/solve/linsolve.d.ts +53 -0
  345. package/output/solve/linsolve.js +233 -0
  346. package/output/solve/solve.d.ts +44 -0
  347. package/output/solve/solve.js +368 -0
  348. package/output/solve/solveSystem.d.ts +31 -0
  349. package/output/solve/solveSystem.js +266 -0
  350. package/output/solve/utils.d.ts +10 -0
  351. package/output/solve/utils.js +58 -0
  352. package/output/utils/array.d.ts +42 -0
  353. package/output/utils/array.js +98 -0
  354. package/output/utils/debug.d.ts +131 -0
  355. package/output/utils/debug.js +296 -0
  356. package/output/utils/decimal.d.ts +3 -0
  357. package/output/utils/decimal.js +16 -0
  358. package/output/utils/numeric.d.ts +14 -0
  359. package/output/utils/numeric.js +51 -0
  360. package/output/utils/object.d.ts +26 -0
  361. package/output/utils/object.js +56 -0
  362. package/package.json +178 -57
  363. package/.travis.yml +0 -3
  364. package/Algebra.js +0 -4568
  365. package/CODE_OF_CONDUCT.md +0 -46
  366. package/CONTRIBUTING.md +0 -14
  367. package/Calculus.js +0 -2675
  368. package/Extra.js +0 -622
  369. package/Solve.js +0 -1783
  370. package/all.js +0 -16
  371. package/all.min.js +0 -1
  372. package/gulpfile.js +0 -16
  373. package/index.html +0 -158
  374. package/license.txt +0 -19
  375. package/nerdamer.core.js +0 -12510
  376. package/spec/LaTeX.spec.js +0 -302
  377. package/spec/TeXConvert.spec.js +0 -8
  378. package/spec/algebra.spec.js +0 -287
  379. package/spec/basic_parser.spec.js +0 -134
  380. package/spec/build.spec.js +0 -131
  381. package/spec/calculus.spec.js +0 -183
  382. package/spec/core.spec.js +0 -2970
  383. package/spec/extra.spec.js +0 -54
  384. package/spec/solve.spec.js +0 -126
  385. package/spec/support/jasmine.json +0 -11
  386. package/spec/support/utils.js +0 -42
  387. package/spec/text.spec.js +0 -132
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ /**
3
+ * @module sparsePolynomialGcd
4
+ *
5
+ * Integer GCD reconstruction for the exact sparse polynomial representation.
6
+ *
7
+ * External references consulted:
8
+ * - SymPy multivariate Chinese remainder reconstruction and modular GCD loop:
9
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/polys/zippel.py
10
+ * - SymPy Chinese Remainder Theorem implementation:
11
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/ntheory/modular.py
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.combinePolynomialCongruences = combinePolynomialCongruences;
15
+ exports.sparsePolynomialGcd = sparsePolynomialGcd;
16
+ const SparsePolynomial_1 = require("../../core/classes/polynomial/SparsePolynomial");
17
+ const errors_1 = require("../../core/errors");
18
+ const bigint_1 = require("../../core/functions/bigint/bigint");
19
+ const primeFactor_1 = require("../../core/functions/bigint/primeFactor");
20
+ const modularGcd_1 = require("./modularGcd");
21
+ const ModularSparsePolynomial_1 = require("./ModularSparsePolynomial");
22
+ // SymPy's integer Zippel loop starts near 10^9 because larger fields sharply reduce
23
+ // failed evaluations during sparse interpolation.
24
+ const INITIAL_GCD_PRIME = 1000000007n;
25
+ /** Maps a residue to the symmetric representative for one positive modulus. */
26
+ function symmetricResidue(value, modulus) {
27
+ const residue = (0, bigint_1.mod)(value, modulus);
28
+ return residue * 2n > modulus ? residue - modulus : residue;
29
+ }
30
+ /** Looks up a term coefficient without interpreting the monomial key. */
31
+ function termMap(polynomial) {
32
+ const terms = new Map();
33
+ for (const term of polynomial.terms()) {
34
+ terms.set(term.exponents.join(','), term);
35
+ }
36
+ return terms;
37
+ }
38
+ /**
39
+ * Combines two sparse polynomial congruences with coprime positive moduli.
40
+ *
41
+ * Missing monomials are treated as zero residues. Exponent vectors are retained
42
+ * from the source term and never reconstructed from the map key.
43
+ */
44
+ function combinePolynomialCongruences(left, leftModulus, right, rightModulus) {
45
+ if (left.variableCount !== right.variableCount) {
46
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'Polynomial CRT', requirement: (0, errors_1.message)('polyReqSamePolynomialRing') }));
47
+ }
48
+ if (leftModulus <= 0n || rightModulus <= 0n) {
49
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'Polynomial CRT', requirement: (0, errors_1.message)('polyReqPositiveModuli') }));
50
+ }
51
+ if ((0, bigint_1.GCD)(leftModulus, rightModulus) !== 1n) {
52
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'Polynomial CRT', requirement: (0, errors_1.message)('polyReqCoprimeModuli') }));
53
+ }
54
+ const inverse = (0, bigint_1.invMod)(leftModulus, rightModulus);
55
+ if (inverse < 0n) {
56
+ throw new RangeError((0, errors_1.message)('polyCrtModuliInvertible'));
57
+ }
58
+ const leftTerms = termMap(left);
59
+ const rightTerms = termMap(right);
60
+ const keys = new Set([...leftTerms.keys(), ...rightTerms.keys()]);
61
+ const modulus = leftModulus * rightModulus;
62
+ const terms = [];
63
+ for (const key of keys) {
64
+ const leftTerm = leftTerms.get(key);
65
+ const rightTerm = rightTerms.get(key);
66
+ const leftCoefficient = leftTerm?.coefficient ?? 0n;
67
+ const rightCoefficient = rightTerm?.coefficient ?? 0n;
68
+ const correction = (0, bigint_1.mod)((rightCoefficient - leftCoefficient) * inverse, rightModulus);
69
+ const coefficient = symmetricResidue(leftCoefficient + leftModulus * correction, modulus);
70
+ if (coefficient !== 0n) {
71
+ terms.push({
72
+ coefficient,
73
+ exponents: leftTerm?.exponents ?? rightTerm?.exponents ?? [],
74
+ });
75
+ }
76
+ }
77
+ return {
78
+ polynomial: new SparsePolynomial_1.SparsePolynomial(left.variableCount, terms),
79
+ modulus,
80
+ };
81
+ }
82
+ /**
83
+ * Returns the integer leading coefficient after making one variable primary.
84
+ *
85
+ * Ties follow the remaining ring coordinates in their existing order, matching a
86
+ * lexicographic view with variableIndex moved to the front.
87
+ */
88
+ function leadingCoefficientForVariable(polynomial, variableIndex) {
89
+ polynomial.degree(variableIndex);
90
+ const terms = polynomial.terms();
91
+ if (terms.length === 0) {
92
+ return 0n;
93
+ }
94
+ let leading = terms[0];
95
+ for (let termIndex = 1; termIndex < terms.length; termIndex++) {
96
+ const term = terms[termIndex];
97
+ if (term.exponents[variableIndex] !== leading.exponents[variableIndex]) {
98
+ if (term.exponents[variableIndex] > leading.exponents[variableIndex]) {
99
+ leading = term;
100
+ }
101
+ continue;
102
+ }
103
+ for (let index = 0; index < polynomial.variableCount; index++) {
104
+ if (index === variableIndex) {
105
+ continue;
106
+ }
107
+ if (term.exponents[index] === leading.exponents[index]) {
108
+ continue;
109
+ }
110
+ if (term.exponents[index] > leading.exponents[index]) {
111
+ leading = term;
112
+ }
113
+ break;
114
+ }
115
+ }
116
+ return leading.coefficient;
117
+ }
118
+ /** Converts an integer sparse polynomial to canonical residues modulo prime. */
119
+ function reduceModulo(polynomial, prime) {
120
+ return new ModularSparsePolynomial_1.ModularSparsePolynomial(polynomial.variableCount, prime, polynomial.terms());
121
+ }
122
+ /** Returns the selected-variable degree vector used to compare modular images. */
123
+ function degreeVector(polynomial, variables) {
124
+ return variables.map(variableIndex => polynomial.degree(variableIndex) ?? 0n);
125
+ }
126
+ /**
127
+ * Computes the integer GCD of two sparse polynomials by modular images and CRT.
128
+ *
129
+ * variables must follow polynomial-ring order and contain every active variable.
130
+ * The returned GCD has positive leading coefficient under lexicographic order.
131
+ */
132
+ function sparsePolynomialGcd(left, right, variables) {
133
+ if (left.variableCount !== right.variableCount) {
134
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'Sparse polynomial GCD', requirement: (0, errors_1.message)('polyReqSamePolynomialRing') }));
135
+ }
136
+ if (variables.length === 0) {
137
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'Sparse polynomial GCD', requirement: (0, errors_1.message)('polyReqAtLeastOneVariable') }));
138
+ }
139
+ const selected = new Set();
140
+ let previousVariable = -1;
141
+ for (const variableIndex of variables) {
142
+ left.degree(variableIndex);
143
+ right.degree(variableIndex);
144
+ if (selected.has(variableIndex)) {
145
+ throw new RangeError((0, errors_1.message)('polyVariablesUnique', { operation: 'Sparse polynomial GCD' }));
146
+ }
147
+ if (variableIndex <= previousVariable) {
148
+ throw new RangeError((0, errors_1.message)('polyVariablesRingOrder', { operation: 'Sparse polynomial GCD' }));
149
+ }
150
+ selected.add(variableIndex);
151
+ previousVariable = variableIndex;
152
+ }
153
+ for (const activeVariable of [...left.variables(), ...right.variables()]) {
154
+ if (!selected.has(activeVariable)) {
155
+ throw new RangeError((0, errors_1.message)('polyInputsSelectedOnly', { operation: 'Sparse polynomial GCD' }));
156
+ }
157
+ }
158
+ if (left.isZero()) {
159
+ return right.isZero() ? right : right.normalizeLeadingSign('lex');
160
+ }
161
+ if (right.isZero()) {
162
+ return left.normalizeLeadingSign('lex');
163
+ }
164
+ const leftContent = left.content();
165
+ const rightContent = right.content();
166
+ const commonContent = (0, bigint_1.GCD)(leftContent, rightContent);
167
+ const primitiveLeft = left.primitivePart().normalizeLeadingSign('lex');
168
+ const primitiveRight = right.primitivePart().normalizeLeadingSign('lex');
169
+ const leftLeading = primitiveLeft.leadingTerm('lex');
170
+ const rightLeading = primitiveRight.leadingTerm('lex');
171
+ if (leftLeading === null || rightLeading === null) {
172
+ return SparsePolynomial_1.SparsePolynomial.zero(left.variableCount);
173
+ }
174
+ if (primitiveLeft.isConstant() || primitiveRight.isConstant()) {
175
+ return SparsePolynomial_1.SparsePolynomial.constant(left.variableCount, commonContent);
176
+ }
177
+ if (primitiveLeft.equals(primitiveRight)) {
178
+ return primitiveLeft.scale(commonContent);
179
+ }
180
+ if (primitiveLeft.divideExact(primitiveRight) !== null) {
181
+ return primitiveRight.scale(commonContent);
182
+ }
183
+ if (primitiveRight.divideExact(primitiveLeft) !== null) {
184
+ return primitiveLeft.scale(commonContent);
185
+ }
186
+ const leadingGcd = (0, bigint_1.GCD)(leftLeading.coefficient, rightLeading.coefficient);
187
+ const badPrimeFactors = variables.map(variableIndex => (0, bigint_1.GCD)(leadingCoefficientForVariable(primitiveLeft, variableIndex), leadingCoefficientForVariable(primitiveRight, variableIndex)));
188
+ let prime = (0, primeFactor_1.nextPrimeBig)(INITIAL_GCD_PRIME);
189
+ let accumulated = null;
190
+ let accumulatedModulus = 1n;
191
+ let expectedDegrees = null;
192
+ while (true) {
193
+ while (badPrimeFactors.some(factor => factor % prime === 0n)) {
194
+ prime = (0, primeFactor_1.nextPrimeBig)(prime + 1n);
195
+ }
196
+ const modularLeft = reduceModulo(primitiveLeft, prime);
197
+ const modularRight = reduceModulo(primitiveRight, prime);
198
+ const modularGcd = (0, modularGcd_1.modularGcdFiniteField)(modularLeft, modularRight, variables);
199
+ if (modularGcd === null) {
200
+ prime = (0, primeFactor_1.nextPrimeBig)(prime + 1n);
201
+ continue;
202
+ }
203
+ if (modularGcd.isConstant() && !modularGcd.isZero()) {
204
+ return SparsePolynomial_1.SparsePolynomial.constant(left.variableCount, commonContent);
205
+ }
206
+ const imageDegrees = degreeVector(modularGcd, variables);
207
+ if (expectedDegrees !== null) {
208
+ let degreeComparison = 0;
209
+ for (let index = 0; index < imageDegrees.length; index++) {
210
+ if (imageDegrees[index] < expectedDegrees[index]) {
211
+ degreeComparison = -1;
212
+ break;
213
+ }
214
+ if (imageDegrees[index] > expectedDegrees[index]) {
215
+ degreeComparison = 1;
216
+ break;
217
+ }
218
+ }
219
+ if (degreeComparison > 0) {
220
+ prime = (0, primeFactor_1.nextPrimeBig)(prime + 1n);
221
+ continue;
222
+ }
223
+ if (degreeComparison < 0) {
224
+ expectedDegrees = imageDegrees;
225
+ accumulated = null;
226
+ accumulatedModulus = 1n;
227
+ }
228
+ }
229
+ else {
230
+ expectedDegrees = imageDegrees;
231
+ }
232
+ const scaledImage = modularGcd.scale(leadingGcd);
233
+ const liftedImage = scaledImage.toSymmetricIntegerPolynomial();
234
+ let reconstructed;
235
+ let reconstructedModulus;
236
+ if (accumulated === null) {
237
+ reconstructed = liftedImage;
238
+ reconstructedModulus = prime;
239
+ }
240
+ else {
241
+ const combined = combinePolynomialCongruences(accumulated, accumulatedModulus, liftedImage, prime);
242
+ reconstructed = combined.polynomial;
243
+ reconstructedModulus = combined.modulus;
244
+ }
245
+ const stable = accumulated !== null && reconstructed.equals(accumulated);
246
+ accumulated = reconstructed;
247
+ accumulatedModulus = reconstructedModulus;
248
+ if (stable) {
249
+ const primitiveCandidate = reconstructed
250
+ .primitivePart()
251
+ .normalizeLeadingSign('lex');
252
+ const candidate = primitiveCandidate.scale(commonContent);
253
+ if (left.divideExact(candidate) !== null && right.divideExact(candidate) !== null) {
254
+ return candidate;
255
+ }
256
+ }
257
+ prime = (0, primeFactor_1.nextPrimeBig)(prime + 1n);
258
+ }
259
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @module sparsePolynomialMultivariateFactor
3
+ *
4
+ * Evaluation configuration for Wang/EEZ multivariate integer factorization.
5
+ *
6
+ * External references consulted:
7
+ * - Wang/EEZ evaluation-point tests and lifting pipeline:
8
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/polys/factortools.py
9
+ */
10
+ import { SparsePolynomial } from '../../core/classes/polynomial/SparsePolynomial';
11
+ import type { SparsePolynomialSquareFreeFactorization } from './SparsePolynomialFactor';
12
+ type WangSpecialization = Readonly<{
13
+ values: readonly bigint[];
14
+ content: bigint;
15
+ polynomial: SparsePolynomial;
16
+ }>;
17
+ export type WangEvaluation = WangSpecialization & Readonly<{
18
+ factors: readonly SparsePolynomial[];
19
+ }>;
20
+ export type WangConfiguration = Readonly<{
21
+ evaluation: WangEvaluation;
22
+ polynomial: SparsePolynomial;
23
+ factors: readonly SparsePolynomial[];
24
+ leadingCoefficients: readonly SparsePolynomial[];
25
+ }>;
26
+ export type WangBivariateConfiguration = WangConfiguration;
27
+ /**
28
+ * Tests one Wang/EEZ specialization.
29
+ *
30
+ * The first selected variable remains symbolic and every later variable is replaced by
31
+ * the corresponding integer value. A usable specialization preserves the degree in the
32
+ * main variable and has square-free primitive part.
33
+ */
34
+ export declare function testWangEvaluationPoint(polynomial: SparsePolynomial, variables: readonly number[], values: readonly bigint[]): WangEvaluation | null;
35
+ /**
36
+ * Builds a Wang configuration with reconstructed factor leading coefficients.
37
+ *
38
+ * The main-variable leading coefficient is factored recursively over the tail
39
+ * variables. A single active tail variable uses the univariate factorizer; larger
40
+ * coefficient rings recurse through multivariate factorization.
41
+ */
42
+ export declare function testWangConfiguration(polynomial: SparsePolynomial, variables: readonly number[], values: readonly bigint[]): WangConfiguration | null;
43
+ /** Builds a bivariate Wang configuration through the general reconstruction path. */
44
+ export declare function testWangBivariateConfiguration(polynomial: SparsePolynomial, variables: readonly number[], value: bigint): WangBivariateConfiguration | null;
45
+ /** Lifts a Wang configuration using the reusable multivariate Hensel implementation. */
46
+ export declare function liftWangConfiguration(configuration: WangConfiguration, variables: readonly number[], prime: bigint): readonly SparsePolynomial[] | null;
47
+ /** Lifts one bivariate Wang configuration modulo a prime. */
48
+ export declare function liftWangBivariateConfiguration(configuration: WangBivariateConfiguration, variables: readonly number[], prime: bigint): readonly SparsePolynomial[] | null;
49
+ /**
50
+ * Factors a primitive square-free multivariate integer polynomial.
51
+ *
52
+ * A Wang configuration supplies the specialized factors and reconstructed leading
53
+ * coefficients. Modular lifts are retried with increasing primes until centered integer
54
+ * factors reconstruct the original polynomial exactly.
55
+ */
56
+ export declare function factorSquareFreeMultivariateInteger(polynomial: SparsePolynomial, variables: readonly number[]): readonly SparsePolynomial[];
57
+ /** Factors a primitive square-free bivariate polynomial over the integers. */
58
+ export declare function factorSquareFreeBivariateInteger(polynomial: SparsePolynomial, variables: readonly number[]): readonly SparsePolynomial[];
59
+ /**
60
+ * Completely factors a multivariate integer polynomial.
61
+ *
62
+ * Numeric content is returned separately. Main-variable content is factored in the
63
+ * remaining variables before the primitive portion enters Wang lifting.
64
+ */
65
+ export declare function factorMultivariateInteger(polynomial: SparsePolynomial, variables: readonly number[]): SparsePolynomialSquareFreeFactorization;
66
+ /** Completely factors a bivariate integer polynomial. */
67
+ export declare function factorBivariateInteger(polynomial: SparsePolynomial, variables: readonly number[]): SparsePolynomialSquareFreeFactorization;
68
+ /**
69
+ * Finds the nearest Wang configuration whose leading coefficients can be reconstructed
70
+ * from the specialized factorization.
71
+ */
72
+ export declare function findWangConfiguration(polynomial: SparsePolynomial, variables: readonly number[]): WangConfiguration;
73
+ /** Finds the nearest bivariate Wang configuration. */
74
+ export declare function findWangBivariateConfiguration(polynomial: SparsePolynomial, variables: readonly number[]): WangBivariateConfiguration;
75
+ /**
76
+ * Finds the nearest usable Wang/EEZ evaluation point in deterministic integer shells.
77
+ *
78
+ * The origin is tested first, followed by the boundary of [-1,1]^n, [-2,2]^n, and so
79
+ * on. Search continues until a specialization preserves leading degree and is square-free.
80
+ */
81
+ export declare function findWangEvaluationPoint(polynomial: SparsePolynomial, variables: readonly number[]): WangEvaluation;
82
+ export {};