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,323 @@
1
+ "use strict";
2
+ /**
3
+ * @module arith
4
+ *
5
+ * Low-level integer and modular arithmetic helpers used throughout the library.
6
+ *
7
+ * - All integer arithmetic is done with `bigint`.
8
+ * - Modular routines assume a prime modulus `p` when inverses are required.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.GcdBudgetExceededError = exports.PrimeSelectionError = void 0;
12
+ exports.abs = abs;
13
+ exports.gcd = gcd;
14
+ exports.pow = pow;
15
+ exports.powN = powN;
16
+ exports.bigIntSqrt = bigIntSqrt;
17
+ exports.intNthRootExact = intNthRootExact;
18
+ exports.getDivisors = getDivisors;
19
+ exports.modNorm = modNorm;
20
+ exports.modSymmetric = modSymmetric;
21
+ exports.modInv = modInv;
22
+ exports.contentBigint = contentBigint;
23
+ exports.bigintBitLength = bigintBitLength;
24
+ exports.nextPrime32 = nextPrime32;
25
+ /**
26
+ * Shared integer + modular arithmetic primitives used across Zippel GCD and
27
+ * multivariate factorization.
28
+ *
29
+ * Design goals:
30
+ * - BigInt-only arithmetic for coefficient paths.
31
+ * - Small, stable surface area: use `abs`, `gcd`, `pow`.
32
+ */
33
+ // ============================================================================
34
+ // Integer arithmetic
35
+ // ============================================================================
36
+ /** Absolute value for BigInt. */
37
+ function abs(a) {
38
+ return a < 0n ? -a : a;
39
+ }
40
+ /**
41
+ * Euclidean GCD for BigInt.
42
+ *
43
+ * Returns a nonnegative gcd. gcd(0,0) = 0.
44
+ */
45
+ function gcd(a, b) {
46
+ a = abs(a);
47
+ b = abs(b);
48
+ while (b !== 0n) {
49
+ [a, b] = [b, a % b];
50
+ }
51
+ return a;
52
+ }
53
+ /**
54
+ * Integer exponentiation for BigInt with a nonnegative exponent.
55
+ *
56
+ * This is NOT modular exponentiation (see {@link modPow}).
57
+ */
58
+ function pow(base, exp) {
59
+ if (exp < 0n) {
60
+ throw new Error('pow: negative exponent');
61
+ }
62
+ let b = base;
63
+ let e = exp;
64
+ let r = 1n;
65
+ while (e > 0n) {
66
+ if (e & 1n) {
67
+ r *= b;
68
+ }
69
+ b *= b;
70
+ e >>= 1n;
71
+ }
72
+ return r;
73
+ }
74
+ /**
75
+ * Integer exponentiation for BigInt with a small nonnegative JS number exponent.
76
+ *
77
+ * Convenience wrapper used throughout factorization code where exponents are known
78
+ * to fit in a number.
79
+ */
80
+ function powN(base, exp) {
81
+ if (!Number.isInteger(exp) || exp < 0) {
82
+ throw new Error('powN: exponent must be a nonnegative integer');
83
+ }
84
+ return pow(base, BigInt(exp));
85
+ }
86
+ // ============================================================================
87
+ // Number theory helpers (BigInt)
88
+ // ============================================================================
89
+ /**
90
+ * Integer square root: floor(sqrt(n)) for n >= 0.
91
+ */
92
+ function bigIntSqrt(n) {
93
+ if (n < 0n) {
94
+ throw new Error('bigIntSqrt: negative input');
95
+ }
96
+ if (n < 2n) {
97
+ return n;
98
+ }
99
+ // Newton iteration.
100
+ let x0 = n;
101
+ let x1 = (x0 + 1n) >> 1n;
102
+ while (x1 < x0) {
103
+ x0 = x1;
104
+ x1 = (x1 + n / x1) >> 1n;
105
+ }
106
+ return x0;
107
+ }
108
+ /**
109
+ * Exact n-th root if it exists.
110
+ * Returns r such that r^n === value, or null if value is not a perfect n-th power.
111
+ */
112
+ function intNthRootExact(value, n) {
113
+ if (!Number.isInteger(n) || n <= 0) {
114
+ throw new Error('intNthRootExact: n must be a positive integer');
115
+ }
116
+ if (value < 0n) {
117
+ // Only odd roots exist for negative values.
118
+ if ((n & 1) === 0) {
119
+ return null;
120
+ }
121
+ const r = intNthRootExact(-value, n);
122
+ return r === null ? null : -r;
123
+ }
124
+ if (value === 0n) {
125
+ return 0n;
126
+ }
127
+ if (value === 1n) {
128
+ return 1n;
129
+ }
130
+ // Exponential search for an upper bound.
131
+ let lo = 0n;
132
+ let hi = 1n;
133
+ while (powN(hi, n) < value) {
134
+ hi <<= 1n;
135
+ }
136
+ // Binary search.
137
+ while (lo + 1n < hi) {
138
+ const mid = (lo + hi) >> 1n;
139
+ const p = powN(mid, n);
140
+ if (p === value) {
141
+ return mid;
142
+ }
143
+ if (p < value) {
144
+ lo = mid;
145
+ }
146
+ else {
147
+ hi = mid;
148
+ }
149
+ }
150
+ return powN(hi, n) === value ? hi : powN(lo, n) === value ? lo : null;
151
+ }
152
+ /**
153
+ * Return positive divisors of n (n > 0) by trial division.
154
+ *
155
+ * NOTE: This is intended for small integers used in factoring heuristics.
156
+ */
157
+ function getDivisors(n) {
158
+ if (n <= 0n) {
159
+ throw new Error('getDivisors: n must be positive');
160
+ }
161
+ const out = [];
162
+ const r = bigIntSqrt(n);
163
+ for (let d = 1n; d <= r; d++) {
164
+ if (n % d === 0n) {
165
+ out.push(d);
166
+ const q = n / d;
167
+ if (q !== d) {
168
+ out.push(q);
169
+ }
170
+ }
171
+ }
172
+ out.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
173
+ return out;
174
+ }
175
+ /**
176
+ * Extended Euclidean algorithm.
177
+ *
178
+ * Returns `{ g, x, y }` such that `a*x + b*y = g = gcd(a,b)` (up to sign).
179
+ */
180
+ function egcd(a, b) {
181
+ let old_r = a, r = b;
182
+ let old_s = 1n, s = 0n;
183
+ let old_t = 0n, t = 1n;
184
+ while (r !== 0n) {
185
+ const q = old_r / r;
186
+ [old_r, r] = [r, old_r - q * r];
187
+ [old_s, s] = [s, old_s - q * s];
188
+ [old_t, t] = [t, old_t - q * t];
189
+ }
190
+ return { g: old_r, x: old_s, y: old_t };
191
+ }
192
+ // ============================================================================
193
+ // Modular arithmetic
194
+ // ============================================================================
195
+ /** Normalize a into the range [0, |p|). Throws if p is zero. */
196
+ function modNorm(a, p) {
197
+ if (p === 0n) {
198
+ throw new Error('modNorm: modulus must be nonzero');
199
+ }
200
+ const m = abs(p);
201
+ const r = a % m;
202
+ return r < 0n ? r + m : r;
203
+ }
204
+ /** Map a to the symmetric residue class (-|p|/2, |p|/2]. */
205
+ function modSymmetric(a, p) {
206
+ if (p === 0n) {
207
+ throw new Error('modSymmetric: modulus must be nonzero');
208
+ }
209
+ const m = abs(p);
210
+ const r = modNorm(a, m);
211
+ const half = m / 2n;
212
+ return r > half ? r - m : r;
213
+ }
214
+ /** Modular multiplicative inverse of a mod p, where gcd(a,p)=1. */
215
+ function modInv(a, p) {
216
+ const aa = modNorm(a, p);
217
+ if (aa === 0n) {
218
+ throw new Error('modInv: non-invertible (0)');
219
+ }
220
+ const { g, x } = egcd(aa, p);
221
+ if (g !== 1n && g !== -1n) {
222
+ throw new Error('modInv: non-invertible');
223
+ }
224
+ return modNorm(x, p);
225
+ }
226
+ // ============================================================================
227
+ // Coefficient utilities
228
+ // ============================================================================
229
+ /**
230
+ * Content (GCD of coefficients) for an iterable of bigint coefficients.
231
+ * Returns 0n for the all-zero collection.
232
+ */
233
+ function contentBigint(coeffs) {
234
+ let g0 = 0n;
235
+ for (const c of coeffs) {
236
+ const a = abs(c);
237
+ g0 = gcd(g0, a);
238
+ if (g0 === 1n) {
239
+ return 1n;
240
+ }
241
+ }
242
+ return g0;
243
+ }
244
+ // ---------------------------------------------------------------------------
245
+ // Univariate polynomial arithmetic over F_p (coeff arrays low->high)
246
+ // ---------------------------------------------------------------------------
247
+ // ============================================================================
248
+ // Misc small utilities
249
+ // ============================================================================
250
+ /** Bit-length of a bigint (0 -> 0). */
251
+ function bigintBitLength(a) {
252
+ if (a < 0n) {
253
+ a = -a;
254
+ }
255
+ let bits = 0;
256
+ while (a > 0n) {
257
+ bits++;
258
+ a >>= 1n;
259
+ }
260
+ return bits;
261
+ }
262
+ /** Simple primality test for 32-bit positive integers. */
263
+ function isPrime32(n) {
264
+ if (!Number.isInteger(n) || n < 2) {
265
+ return false;
266
+ }
267
+ if (n === 2 || n === 3) {
268
+ return true;
269
+ }
270
+ if ((n & 1) === 0) {
271
+ return false;
272
+ }
273
+ if (n % 3 === 0) {
274
+ return false;
275
+ }
276
+ const limit = Math.floor(Math.sqrt(n));
277
+ for (let d = 5; d <= limit; d += 6) {
278
+ if (n % d === 0 || n % (d + 2) === 0) {
279
+ return false;
280
+ }
281
+ }
282
+ return true;
283
+ }
284
+ /** Next prime >= start. */
285
+ function nextPrime32(start) {
286
+ let n = start;
287
+ if (n <= 2) {
288
+ return 2;
289
+ }
290
+ if ((n & 1) === 0) {
291
+ n++;
292
+ }
293
+ while (!isPrime32(n)) {
294
+ n += 2;
295
+ }
296
+ return n;
297
+ }
298
+ class AlgebraError extends Error {
299
+ /** Additional structured debugging info. Always present (possibly empty). */
300
+ details;
301
+ phase;
302
+ constructor(message, phase = 'unknown', details) {
303
+ super(message);
304
+ this.name = this.constructor.name;
305
+ this.phase = phase;
306
+ this.details = details ?? {};
307
+ }
308
+ }
309
+ class PrimeSelectionError extends AlgebraError {
310
+ constructor(message, details) {
311
+ super(message, 'prime-selection', details);
312
+ }
313
+ }
314
+ exports.PrimeSelectionError = PrimeSelectionError;
315
+ /**
316
+ * Thrown when Zippel-style multivariate GCD exceeds its specialization / interpolation budget.
317
+ */
318
+ class GcdBudgetExceededError extends AlgebraError {
319
+ constructor(message, details) {
320
+ super(message, 'budget', details);
321
+ }
322
+ }
323
+ exports.GcdBudgetExceededError = GcdBudgetExceededError;
@@ -0,0 +1,3 @@
1
+ export { factorPoly } from './factorMultivariate';
2
+ export type { PolyFactor, FactorsObject } from './factorMultivariate';
3
+ export type { Vars, InternalPoly } from './poly';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.factorPoly = void 0;
4
+ var factorMultivariate_1 = require("./factorMultivariate");
5
+ Object.defineProperty(exports, "factorPoly", { enumerable: true, get: function () { return factorMultivariate_1.factorPoly; } });
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @module factor_multivariate
3
+ *
4
+ * Multivariate polynomial factorization over Z[x1, x2, ..., xn].
5
+ */
6
+ import { MultiPoly } from './multiPoly/MultiPoly';
7
+ import { type Vars } from './poly';
8
+ export type { Vars };
9
+ /**
10
+ * Get all combinations of k elements from array
11
+ */
12
+ /**
13
+ * Main entry point for multivariate factorization
14
+ */
15
+ export type PolyFactor = {
16
+ poly: MultiPoly;
17
+ multiplicity: number;
18
+ };
19
+ export type FactorsObject = {
20
+ content: bigint;
21
+ factors: PolyFactor[];
22
+ };
23
+ export declare function factorPoly(f: MultiPoly, vars: string[]): FactorsObject;