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,378 @@
1
+ "use strict";
2
+ /**
3
+ * @module modularSparsePolynomial
4
+ *
5
+ * Sparse polynomial arithmetic over integer residue classes.
6
+ *
7
+ * External references consulted for modular coefficient arithmetic and sparse
8
+ * polynomial division:
9
+ * - SymPy finite-field polynomial arithmetic:
10
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/polys/galoistools.py
11
+ * - SymPy sparse polynomial substitution, evaluation, and term division:
12
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/polys/sparsetools.py
13
+ * - SymPy variable-relative leading coefficient operations used by modular GCD:
14
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/polys/zippel.py
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ModularSparsePolynomial = void 0;
18
+ const SparsePolynomial_1 = require("../../core/classes/polynomial/SparsePolynomial");
19
+ const errors_1 = require("../../core/errors");
20
+ const bigint_1 = require("../../core/functions/bigint/bigint");
21
+ /**
22
+ * Sparse polynomial whose coefficients are stored as canonical residues modulo
23
+ * a positive integer greater than one.
24
+ *
25
+ * The modulus is part of the polynomial ring. Prime moduli provide finite-field
26
+ * arithmetic; composite moduli remain valid for addition and multiplication but
27
+ * may not provide multiplicative inverses required by monic normalization or
28
+ * polynomial division.
29
+ */
30
+ class ModularSparsePolynomial {
31
+ polynomial;
32
+ modulus;
33
+ variableCount;
34
+ constructor(variableCount, modulus, terms = []) {
35
+ if (modulus <= 1n) {
36
+ throw new RangeError((0, errors_1.message)('polyModulusGreaterThanOne'));
37
+ }
38
+ let combined;
39
+ if (terms instanceof SparsePolynomial_1.SparsePolynomial) {
40
+ if (terms.variableCount !== variableCount) {
41
+ throw new RangeError((0, errors_1.message)('polyVariableCountMatch'));
42
+ }
43
+ combined = terms;
44
+ }
45
+ else {
46
+ combined = new SparsePolynomial_1.SparsePolynomial(variableCount, terms);
47
+ }
48
+ this.modulus = modulus;
49
+ this.polynomial = combined.mapCoefficients(coefficient => (0, bigint_1.mod)(coefficient, modulus));
50
+ this.variableCount = this.polynomial.variableCount;
51
+ }
52
+ /** Creates a constant polynomial in the selected residue ring. */
53
+ static constant(variableCount, modulus, coefficient) {
54
+ return new ModularSparsePolynomial(variableCount, modulus, [
55
+ {
56
+ coefficient,
57
+ exponents: new Array(variableCount).fill(0n),
58
+ },
59
+ ]);
60
+ }
61
+ /**
62
+ * Reconstructs a polynomial in one variable from specialized images.
63
+ *
64
+ * Each sample polynomial must be independent of the interpolated variable.
65
+ * Evaluation values are compared as residues in the shared coefficient ring.
66
+ */
67
+ static interpolateVariable(variableIndex, samples) {
68
+ if (samples.length === 0) {
69
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'ModularSparsePolynomial interpolation', requirement: (0, errors_1.message)('polyReqAtLeastOneSample') }));
70
+ }
71
+ const first = samples[0].polynomial;
72
+ first.degree(variableIndex);
73
+ const x = ModularSparsePolynomial.variable(first.variableCount, first.modulus, variableIndex);
74
+ let result = ModularSparsePolynomial.zero(first.variableCount, first.modulus);
75
+ for (let i = 0; i < samples.length; i++) {
76
+ const sample = samples[i];
77
+ first.assertCompatible(sample.polynomial);
78
+ const sampleDegree = sample.polynomial.degree(variableIndex);
79
+ if (sampleDegree !== null && sampleDegree !== 0n) {
80
+ throw new RangeError((0, errors_1.message)('polyInterpolationCannotDepend'));
81
+ }
82
+ const value = (0, bigint_1.mod)(sample.value, first.modulus);
83
+ let denominator = 1n;
84
+ let basis = ModularSparsePolynomial.constant(first.variableCount, first.modulus, 1n);
85
+ for (let j = 0; j < samples.length; j++) {
86
+ if (i === j) {
87
+ continue;
88
+ }
89
+ const otherValue = (0, bigint_1.mod)(samples[j].value, first.modulus);
90
+ basis = basis.multiply(x.subtract(ModularSparsePolynomial.constant(first.variableCount, first.modulus, otherValue)));
91
+ denominator = (0, bigint_1.mod)(denominator * (0, bigint_1.mod)(value - otherValue, first.modulus), first.modulus);
92
+ }
93
+ const inverse = (0, bigint_1.invMod)(denominator, first.modulus);
94
+ if (inverse < 0n) {
95
+ throw new RangeError((0, errors_1.message)('polyInterpolationInvertibleDifferences'));
96
+ }
97
+ result = result.add(sample.polynomial.multiply(basis.scale(inverse)));
98
+ }
99
+ return result;
100
+ }
101
+ /** Creates a one-term polynomial in the selected residue ring. */
102
+ static monomial(variableCount, modulus, coefficient, exponents) {
103
+ return new ModularSparsePolynomial(variableCount, modulus, [{ coefficient, exponents }]);
104
+ }
105
+ /** Creates one polynomial variable with coefficient one. */
106
+ static variable(variableCount, modulus, variableIndex) {
107
+ const variable = SparsePolynomial_1.SparsePolynomial.variable(variableCount, variableIndex);
108
+ return new ModularSparsePolynomial(variableCount, modulus, variable);
109
+ }
110
+ /** Creates the zero polynomial in the selected residue ring. */
111
+ static zero(variableCount, modulus) {
112
+ return new ModularSparsePolynomial(variableCount, modulus);
113
+ }
114
+ /** Verifies that another polynomial belongs to the same residue ring. */
115
+ assertCompatible(other) {
116
+ if (this.variableCount !== other.variableCount || this.modulus !== other.modulus) {
117
+ throw new RangeError((0, errors_1.message)('polyRequires', { operation: 'ModularSparsePolynomial operations', requirement: (0, errors_1.message)('polyReqSamePolynomialRing') }));
118
+ }
119
+ }
120
+ /** Adds another polynomial in the same residue ring. */
121
+ add(other) {
122
+ this.assertCompatible(other);
123
+ const sum = this.polynomial.add(other.polynomial);
124
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, sum);
125
+ }
126
+ /** Returns the canonical residue coefficient of one monomial. */
127
+ coefficient(exponents) {
128
+ return this.polynomial.coefficient(exponents);
129
+ }
130
+ /**
131
+ * Returns the coefficient polynomial at one exact power of a selected variable.
132
+ *
133
+ * The selected variable remains in the ring with exponent zero.
134
+ */
135
+ coefficientIn(variableIndex, exponent) {
136
+ this.polynomial.degree(variableIndex);
137
+ if (exponent < 0n) {
138
+ throw new RangeError((0, errors_1.message)('polyCoefficientExponentNonnegative'));
139
+ }
140
+ const terms = [];
141
+ for (const term of this.polynomial.terms()) {
142
+ if (term.exponents[variableIndex] === exponent) {
143
+ const exponents = [...term.exponents];
144
+ exponents[variableIndex] = 0n;
145
+ terms.push({
146
+ coefficient: term.coefficient,
147
+ exponents,
148
+ });
149
+ }
150
+ }
151
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, terms);
152
+ }
153
+ /** Returns the canonical residue of the constant coefficient. */
154
+ constantTerm() {
155
+ return this.polynomial.constantTerm();
156
+ }
157
+ /** Returns the degree in one variable, or null for the zero polynomial. */
158
+ degree(variableIndex) {
159
+ return this.polynomial.degree(variableIndex);
160
+ }
161
+ /**
162
+ * Differentiates with respect to one ring variable in the residue ring.
163
+ */
164
+ derivative(variableIndex) {
165
+ this.polynomial.degree(variableIndex);
166
+ const terms = [];
167
+ for (const term of this.polynomial.terms()) {
168
+ const exponent = term.exponents[variableIndex];
169
+ if (exponent === 0n) {
170
+ continue;
171
+ }
172
+ const exponents = [...term.exponents];
173
+ exponents[variableIndex] = exponent - 1n;
174
+ terms.push({
175
+ coefficient: (0, bigint_1.mod)(term.coefficient * exponent, this.modulus),
176
+ exponents,
177
+ });
178
+ }
179
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, terms);
180
+ }
181
+ /**
182
+ * Divides by one polynomial when the remainder is zero.
183
+ */
184
+ divideExact(divisor, order = 'lex') {
185
+ const division = this.divideWithRemainder(divisor, order);
186
+ return division.remainder.isZero() ? division.quotient : null;
187
+ }
188
+ /**
189
+ * Divides by one polynomial and returns quotient and remainder.
190
+ *
191
+ * The leading coefficient of the divisor must be invertible modulo the ring
192
+ * modulus.
193
+ */
194
+ divideWithRemainder(divisor, order = 'lex') {
195
+ this.assertCompatible(divisor);
196
+ const divisorLeading = divisor.leadingTerm(order);
197
+ if (divisorLeading === null) {
198
+ throw new RangeError((0, errors_1.message)('polyCannotDivideZero'));
199
+ }
200
+ const divisorLeadingInverse = (0, bigint_1.invMod)(divisorLeading.coefficient, this.modulus);
201
+ if (divisorLeadingInverse < 0n) {
202
+ throw new RangeError((0, errors_1.message)('polyDivisorLeadingCoefficientInvertible'));
203
+ }
204
+ let quotient = ModularSparsePolynomial.zero(this.variableCount, this.modulus);
205
+ let remainder = ModularSparsePolynomial.zero(this.variableCount, this.modulus);
206
+ let working = new ModularSparsePolynomial(this.variableCount, this.modulus, this.polynomial);
207
+ while (!working.isZero()) {
208
+ const leading = working.leadingTerm(order);
209
+ if (leading === null) {
210
+ break;
211
+ }
212
+ let divides = true;
213
+ const exponents = new Array(this.variableCount);
214
+ for (let variableIndex = 0; variableIndex < this.variableCount; variableIndex++) {
215
+ if (leading.exponents[variableIndex] < divisorLeading.exponents[variableIndex]) {
216
+ divides = false;
217
+ break;
218
+ }
219
+ exponents[variableIndex] =
220
+ leading.exponents[variableIndex] - divisorLeading.exponents[variableIndex];
221
+ }
222
+ if (divides) {
223
+ const coefficient = (0, bigint_1.mod)(leading.coefficient * divisorLeadingInverse, this.modulus);
224
+ const quotientTerm = ModularSparsePolynomial.monomial(this.variableCount, this.modulus, coefficient, exponents);
225
+ quotient = quotient.add(quotientTerm);
226
+ working = working.subtract(divisor.multiply(quotientTerm));
227
+ }
228
+ else {
229
+ const remainderTerm = ModularSparsePolynomial.monomial(this.variableCount, this.modulus, leading.coefficient, leading.exponents);
230
+ remainder = remainder.add(remainderTerm);
231
+ working = working.subtract(remainderTerm);
232
+ }
233
+ }
234
+ return { quotient, remainder };
235
+ }
236
+ /** Returns whether two polynomials have the same residue ring and exact terms. */
237
+ equals(other) {
238
+ return this.modulus === other.modulus && this.polynomial.equals(other.polynomial);
239
+ }
240
+ /**
241
+ * Substitutes one variable with a residue while keeping the same ring dimension.
242
+ *
243
+ * Terms that become like terms after substitution are combined by the sparse
244
+ * polynomial constructor.
245
+ */
246
+ evaluateVariable(variableIndex, value) {
247
+ this.polynomial.degree(variableIndex);
248
+ const residue = (0, bigint_1.mod)(value, this.modulus);
249
+ const terms = [];
250
+ for (const term of this.polynomial.terms()) {
251
+ const exponent = term.exponents[variableIndex];
252
+ const exponents = [...term.exponents];
253
+ exponents[variableIndex] = 0n;
254
+ terms.push({
255
+ coefficient: (0, bigint_1.mod)(term.coefficient * (0, bigint_1.powMod)(residue, exponent, this.modulus), this.modulus),
256
+ exponents,
257
+ });
258
+ }
259
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, terms);
260
+ }
261
+ /** Returns whether the polynomial is zero or contains only a constant term. */
262
+ isConstant() {
263
+ return this.polynomial.isConstant();
264
+ }
265
+ /** Returns whether the polynomial has no nonzero terms. */
266
+ isZero() {
267
+ return this.polynomial.isZero();
268
+ }
269
+ /**
270
+ * Returns the coefficient polynomial of the highest power of one variable.
271
+ *
272
+ * The selected variable remains in the ring with exponent zero so recursive
273
+ * algorithms can preserve a stable variable layout.
274
+ */
275
+ leadingCoefficientIn(variableIndex) {
276
+ const degree = this.degree(variableIndex);
277
+ return degree === null ? null : this.coefficientIn(variableIndex, degree);
278
+ }
279
+ /** Returns the leading term under the requested monomial order. */
280
+ leadingTerm(order = 'lex') {
281
+ return this.polynomial.leadingTerm(order);
282
+ }
283
+ /**
284
+ * Scales the polynomial so its leading coefficient is one.
285
+ *
286
+ * Zero remains zero. A nonzero leading coefficient that has no inverse modulo
287
+ * the modulus is rejected.
288
+ */
289
+ monic(order = 'lex') {
290
+ const leading = this.leadingTerm(order);
291
+ if (leading === null || leading.coefficient === 1n) {
292
+ return this;
293
+ }
294
+ const inverse = (0, bigint_1.invMod)(leading.coefficient, this.modulus);
295
+ if (inverse < 0n) {
296
+ throw new RangeError((0, errors_1.message)('polyLeadingCoefficientInvertible'));
297
+ }
298
+ return this.scale(inverse);
299
+ }
300
+ /** Multiplies by another polynomial in the same residue ring. */
301
+ multiply(other) {
302
+ this.assertCompatible(other);
303
+ const product = this.polynomial.multiply(other.polynomial);
304
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, product);
305
+ }
306
+ /** Returns the additive inverse in the residue ring. */
307
+ negate() {
308
+ const negated = this.polynomial.negate();
309
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, negated);
310
+ }
311
+ /** Raises the polynomial to a non-negative exact integer power. */
312
+ pow(exponent) {
313
+ if (exponent < 0n) {
314
+ throw new RangeError((0, errors_1.message)('polyExponentNonnegative'));
315
+ }
316
+ let result = ModularSparsePolynomial.constant(this.variableCount, this.modulus, 1n);
317
+ let power = exponent;
318
+ if (power === 0n) {
319
+ return result;
320
+ }
321
+ if ((power & 1n) === 1n) {
322
+ result = result.multiply(this);
323
+ }
324
+ power >>= 1n;
325
+ if (power === 0n) {
326
+ return result;
327
+ }
328
+ let factor = this.multiply(this);
329
+ while (power > 0n) {
330
+ if ((power & 1n) === 1n) {
331
+ result = result.multiply(factor);
332
+ }
333
+ power >>= 1n;
334
+ if (power > 0n) {
335
+ factor = factor.multiply(factor);
336
+ }
337
+ }
338
+ return result;
339
+ }
340
+ /** Multiplies every coefficient by one residue-ring scalar. */
341
+ scale(scalar) {
342
+ const scaled = this.polynomial.scale((0, bigint_1.mod)(scalar, this.modulus));
343
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, scaled);
344
+ }
345
+ /** Subtracts another polynomial in the same residue ring. */
346
+ subtract(other) {
347
+ this.assertCompatible(other);
348
+ const difference = this.polynomial.subtract(other.polynomial);
349
+ return new ModularSparsePolynomial(this.variableCount, this.modulus, difference);
350
+ }
351
+ /** Number of stored nonzero terms. */
352
+ get termCount() {
353
+ return this.polynomial.termCount;
354
+ }
355
+ /** Returns the stored canonical residue terms. */
356
+ terms() {
357
+ return this.polynomial.terms();
358
+ }
359
+ /** Converts canonical residues to centered integer representatives. */
360
+ toSymmetricIntegerPolynomial() {
361
+ const half = this.modulus / 2n;
362
+ return new SparsePolynomial_1.SparsePolynomial(this.variableCount, this.terms().map(term => ({
363
+ coefficient: term.coefficient > half
364
+ ? term.coefficient - this.modulus
365
+ : term.coefficient,
366
+ exponents: term.exponents,
367
+ })));
368
+ }
369
+ /** Returns the largest total degree, or null for the zero polynomial. */
370
+ totalDegree() {
371
+ return this.polynomial.totalDegree();
372
+ }
373
+ /** Returns the variable indices that occur with a positive exponent. */
374
+ variables() {
375
+ return this.polynomial.variables();
376
+ }
377
+ }
378
+ exports.ModularSparsePolynomial = ModularSparsePolynomial;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @module modularSparsePolynomialFactor
3
+ *
4
+ * Finite-field factorization and Hensel lifting for sparse polynomials.
5
+ *
6
+ * External references consulted for Berlekamp factorization:
7
+ * - SymPy finite-field factorization:
8
+ * https://github.com/sympy/sympy/blob/120ee85f346f6292b763cc195afda4f907260d4a/sympy/polys/galoistools.py
9
+ */
10
+ import { ModularSparsePolynomial } from './ModularSparsePolynomial';
11
+ import type { SparsePolynomial } from '../../core/classes/polynomial/SparsePolynomial';
12
+ export declare function modularExtendedGcdUnivariate(left: ModularSparsePolynomial, right: ModularSparsePolynomial, variableIndex: number): Readonly<{
13
+ gcd: ModularSparsePolynomial;
14
+ leftCoefficient: ModularSparsePolynomial;
15
+ rightCoefficient: ModularSparsePolynomial;
16
+ }>;
17
+ /**
18
+ * Lifts specialized factors through one or more tail variables modulo a prime.
19
+ *
20
+ * Callers supply the fully specialized factors, the corresponding main-variable
21
+ * leading coefficients, and one evaluation value for each tail variable. The factors
22
+ * are lifted one tail variable at a time and verified against the target after every
23
+ * stage.
24
+ */
25
+ export declare function henselLiftMultivariateFactors(polynomial: SparsePolynomial, factors: readonly SparsePolynomial[], leadingCoefficients: readonly SparsePolynomial[], variables: readonly number[], evaluationValues: readonly bigint[], prime: bigint): readonly SparsePolynomial[] | null;
26
+ /**
27
+ * Lifts pairwise-coprime monic factors from F_p[x] to a larger prime-power modulus.
28
+ *
29
+ * The achieved modulus is obtained by repeated quadratic Hensel steps, so callers
30
+ * should pass a prime power of the form p^(2^k). The lifted factors remain monic and
31
+ * reconstruct the integer polynomial after multiplication by its leading coefficient.
32
+ */
33
+ export declare function henselLiftUnivariateFactors(polynomial: SparsePolynomial, prime: bigint, factors: readonly ModularSparsePolynomial[], variableIndex: number, targetModulus: bigint): readonly ModularSparsePolynomial[];
34
+ /**
35
+ * Factors a square-free univariate polynomial over a prime field with Berlekamp's method.
36
+ *
37
+ * The result contains monic irreducible factors whose product is the monic input.
38
+ * Constants return an empty list.
39
+ */
40
+ export declare function factorSquareFreeUnivariateFiniteField(polynomial: ModularSparsePolynomial, variableIndex: number): readonly ModularSparsePolynomial[];