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,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deg = deg;
4
+ exports.content = content;
5
+ exports.coeffs = coeffs;
6
+ exports.div = div;
7
+ exports.divide = divide;
8
+ const Expression_1 = require("../expression/Expression");
9
+ const shortcuts_1 = require("../expression/shortcuts");
10
+ const utils_1 = require("../expression/utils");
11
+ const constants_1 = require("../parser/constants");
12
+ const Vector_1 = require("../vector/Vector");
13
+ const Polynomial_1 = require("./Polynomial");
14
+ const SparsePolynomialAdapter_1 = require("./SparsePolynomialAdapter");
15
+ const utils_2 = require("./utils");
16
+ /**
17
+ * Returns the degree of a polynomial expression.
18
+ *
19
+ * @remarks
20
+ * With no variable, `deg(p)` returns the total degree: the largest sum of powers in any
21
+ * term. With a variable, `deg(p, x)` returns the largest power of `x`, treating the other
22
+ * variables as coefficients. If the input cannot be converted to a polynomial, the call
23
+ * remains symbolic instead of throwing.
24
+ *
25
+ * @param x - Expression-like input or polynomial to inspect.
26
+ * @param variable - Optional variable whose degree should be returned.
27
+ * @returns A numeric expression for polynomial input, otherwise an unevaluated `deg(...)` call.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * deg('x^2*y^3+x').text(); // "5"
32
+ * deg('x^2*y^3+x', 'x').text(); // "2"
33
+ * deg('x^2*y^3+x', 'y').text(); // "3"
34
+ * ```
35
+ */
36
+ function deg(x, variable) {
37
+ let variableExpression;
38
+ let variableName;
39
+ if (variable !== undefined) {
40
+ variableExpression = Expression_1.Expression.create(variable);
41
+ variableName = (0, utils_1.assertPlainVariableAndGetString)(variableExpression);
42
+ }
43
+ let retval = undefined;
44
+ if (Polynomial_1.Polynomial.isPolynomial(x)) {
45
+ retval = Expression_1.Expression.create(x.deg(variableName));
46
+ }
47
+ else {
48
+ const inputExpression = Expression_1.Expression.create(x);
49
+ try {
50
+ const variables = inputExpression.variables().sort();
51
+ const converted = (0, SparsePolynomialAdapter_1.expressionToIntegerSparsePolynomial)(inputExpression, variables);
52
+ let degree;
53
+ if (variableName === undefined) {
54
+ degree = converted.polynomial.totalDegree() ?? 0n;
55
+ }
56
+ else {
57
+ const variableIndex = variables.indexOf(variableName);
58
+ degree =
59
+ variableIndex === -1
60
+ ? 0n
61
+ : (converted.polynomial.degree(variableIndex) ?? 0n);
62
+ }
63
+ retval = Expression_1.Expression.Number(degree);
64
+ }
65
+ catch {
66
+ try {
67
+ retval = Expression_1.Expression.create(new Polynomial_1.Polynomial(inputExpression).deg(variableName));
68
+ }
69
+ catch { }
70
+ }
71
+ }
72
+ const input = Polynomial_1.Polynomial.isPolynomial(x) ? x.getExpression() : x;
73
+ const args = variableExpression === undefined ? [input] : [input, variableExpression];
74
+ return retval ?? Expression_1.Expression.toFunction(constants_1.DEG, args);
75
+ }
76
+ /**
77
+ * Returns the exact numeric content of polynomial expression input.
78
+ *
79
+ * @remarks
80
+ * Content means the greatest common divisor of the polynomial's numeric coefficients.
81
+ * For example, the content of `6*x^2+15*x*y-3*y` is `3`. This function does not choose
82
+ * a main variable or compute a polynomial-valued GCD of symbolic coefficient expressions.
83
+ * If expression conversion fails, the operation remains symbolic as `content(input)`.
84
+ *
85
+ * @param x - Expression-like input or polynomial to inspect.
86
+ * @returns A numeric expression for converted input, otherwise an unevaluated symbolic
87
+ * `content` call.
88
+ *
89
+ * @example
90
+ * ```ts
91
+ * content('6*x^2+15*x-3').text(); // "3"
92
+ * ```
93
+ */
94
+ function content(x) {
95
+ let retval = undefined;
96
+ if (Polynomial_1.Polynomial.isPolynomial(x)) {
97
+ retval = Expression_1.Expression.create(x.content());
98
+ }
99
+ else {
100
+ const inputExpression = Expression_1.Expression.create(x);
101
+ try {
102
+ if (inputExpression.isZero()) {
103
+ retval = Expression_1.Expression.create(new Polynomial_1.Polynomial(inputExpression).content());
104
+ }
105
+ else {
106
+ const variables = inputExpression.variables().sort();
107
+ const converted = (0, SparsePolynomialAdapter_1.expressionToIntegerSparsePolynomial)(inputExpression, variables);
108
+ retval = Expression_1.Expression.Number(converted.polynomial.content()).div(Expression_1.Expression.Number(converted.denominator));
109
+ retval.getMultiplier().asDecimal = inputExpression.hasDecimal();
110
+ }
111
+ }
112
+ catch {
113
+ try {
114
+ retval = Expression_1.Expression.create(new Polynomial_1.Polynomial(inputExpression).content());
115
+ }
116
+ catch { }
117
+ }
118
+ }
119
+ return retval ?? Expression_1.Expression.toFunction(constants_1.CONTENT, [Polynomial_1.Polynomial.isPolynomial(x) ? x.getExpression() : x]);
120
+ }
121
+ /**
122
+ * Returns polynomial coefficients as a dense Vector ordered by ascending power.
123
+ *
124
+ * When no variable is supplied, the first variable in the expression is used, matching
125
+ * the legacy parser helper. A constant expression therefore has the single coefficient
126
+ * at power zero.
127
+ */
128
+ function coeffs(x, variable) {
129
+ const expression = Expression_1.Expression.create(x);
130
+ let variableName;
131
+ if (variable !== undefined) {
132
+ variableName = (0, utils_1.assertPlainVariableAndGetString)(Expression_1.Expression.create(variable));
133
+ }
134
+ else {
135
+ variableName = expression.variables()[0];
136
+ }
137
+ return variableName === undefined
138
+ ? new Vector_1.Vector([expression.copy()])
139
+ : expression.coeffs(variableName).toVector();
140
+ }
141
+ /**
142
+ * Returns the quotient and remainder of polynomial division.
143
+ *
144
+ * @remarks
145
+ * This is the parser-facing compatibility behavior historically exposed as `div(a,b)`.
146
+ * It delegates to the existing polynomial division implementation. When more than one
147
+ * variable is present, Nerdamer treats the input as a multivariable polynomial rather than
148
+ * silently choosing one variable and treating the others as coefficients. If either input
149
+ * is not polynomial-like, the legacy fallback is preserved as `[0, dividend]`. Once both
150
+ * inputs are polynomial, failures from the division engine are allowed to propagate.
151
+ */
152
+ function div(dividend, divisor) {
153
+ const numerator = Expression_1.Expression.create(dividend);
154
+ const denominator = Expression_1.Expression.create(divisor);
155
+ let retval;
156
+ if (numerator.isPolynomialLike() && denominator.isPolynomialLike()) {
157
+ const [quotient, remainder] = (0, utils_2.divide)(numerator, denominator);
158
+ retval = new Vector_1.Vector([quotient, remainder]);
159
+ }
160
+ else {
161
+ retval = new Vector_1.Vector([(0, shortcuts_1.zero)(), numerator]);
162
+ }
163
+ return retval;
164
+ }
165
+ /**
166
+ * Divides two expressions using polynomial quotient/remainder reconstruction when possible.
167
+ *
168
+ * @remarks
169
+ * This restores the parser-facing compatibility behavior historically exposed as
170
+ * `divide(a,b)`: a successful polynomial division is returned as
171
+ * `quotient + remainder/divisor`, so the result is a reusable symbolic expression. When
172
+ * more than one variable is present, Nerdamer treats the input as a multivariable polynomial
173
+ * rather than silently choosing a main variable. Inputs outside the polynomial domain fall
174
+ * back to ordinary symbolic division. Once both inputs are polynomial, failures from the
175
+ * division engine are allowed to propagate.
176
+ */
177
+ function divide(dividend, divisor) {
178
+ const numerator = Expression_1.Expression.create(dividend);
179
+ const denominator = Expression_1.Expression.create(divisor);
180
+ let retval;
181
+ if (numerator.isPolynomialLike() && denominator.isPolynomialLike()) {
182
+ const [quotient, remainder] = (0, utils_2.divide)(numerator, denominator);
183
+ retval = quotient.plus(remainder.div(denominator));
184
+ }
185
+ else {
186
+ retval = numerator.div(denominator);
187
+ }
188
+ return retval;
189
+ }
@@ -0,0 +1,62 @@
1
+ import { Polynomial } from './Polynomial';
2
+ import type { Expression } from '../expression/Expression';
3
+ import type { Ordering, PolyType } from './Polynomial';
4
+ /**
5
+ * Divides a polynomial by given list of divisors
6
+ * See - Ideals Varieties and Algorithms 4th ed. p.81
7
+ *
8
+ * @param Fs The array of divisors
9
+ * @param g The dividend
10
+ * @param ordering The ordering to be used (optional).
11
+ * @returns
12
+ */
13
+ export declare function polyDiv(Fs: PolyType[], g: PolyType, ordering?: Ordering, variables?: string[]): [Expression[], Expression];
14
+ /**
15
+ * Divides one polynomial by another
16
+ *
17
+ * @param f The dividend
18
+ * @param g The divisor
19
+ * @param ordering The ordering to be used (optional).
20
+ * @returns [The quotient, The remainder]
21
+ */
22
+ export declare function divide(f: PolyType, g: PolyType, ordering?: Ordering, variables?: string[]): Expression[];
23
+ /**
24
+ * Computes the S-Polynomial given two polynomials
25
+ *
26
+ * @param f
27
+ * @param g
28
+ * @param ordering
29
+ * @param variables
30
+ * @returns
31
+ */
32
+ export declare function S(f: PolyType, g: PolyType, ordering?: Ordering, variables?: string[]): Polynomial;
33
+ /**
34
+ * Combines all the variables of a set of polynomials
35
+ *
36
+ * @param F
37
+ * @returns
38
+ */
39
+ export declare function combinePolynomialVariables(F: Polynomial[]): string[];
40
+ /**
41
+ * Calculates the polynomial modulus of two polynomials as f mod g
42
+ *
43
+ * @param f
44
+ * @param g
45
+ * @param ordering
46
+ * @param variables
47
+ * @returns
48
+ */
49
+ export declare function polyMod(f: PolyType, g: PolyType, ordering?: Ordering, variables?: string[]): Polynomial;
50
+ export declare function maxCommonVariableOccurrence(f: PolyType, g: PolyType): string | undefined;
51
+ /**
52
+ * Convert number to polynomial form.
53
+ * e.g. polynomialFromNumber (89, 1) = [8, 9] = 8*x+9
54
+ * e.g. polynomialFromNumber (89, 2) = [1, -1, -1] = x^2-x-1
55
+ * Try (x+4)(x+5)
56
+ *
57
+ * @param n The number
58
+ * @param p The power of the lead monomial
59
+ * @param base The base to use for the polynomial. Default = 10
60
+ * @returns
61
+ */
62
+ export declare function polynomialFromNumber(n: number, p: number, base?: number, startingCoeff?: number, endingCoeff?: number): number[];
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.polyDiv = polyDiv;
4
+ exports.divide = divide;
5
+ exports.S = S;
6
+ exports.combinePolynomialVariables = combinePolynomialVariables;
7
+ exports.polyMod = polyMod;
8
+ exports.maxCommonVariableOccurrence = maxCommonVariableOccurrence;
9
+ exports.polynomialFromNumber = polynomialFromNumber;
10
+ const errors_1 = require("../../errors");
11
+ const utils_1 = require("../../functions/utils");
12
+ const shortcuts_1 = require("../expression/shortcuts");
13
+ const Polynomial_1 = require("./Polynomial");
14
+ function normalizePolynomialInputs(inputs, ordering, variables) {
15
+ const provisional = inputs.map(input => Polynomial_1.Polynomial.toPolynomial(input, ordering, variables));
16
+ if (variables !== undefined) {
17
+ return {
18
+ polynomials: provisional,
19
+ variables,
20
+ };
21
+ }
22
+ const resolvedVariables = combinePolynomialVariables(provisional);
23
+ if (resolvedVariables.length === 0) {
24
+ return {
25
+ polynomials: provisional,
26
+ variables: undefined,
27
+ };
28
+ }
29
+ return {
30
+ polynomials: inputs.map(input => Polynomial_1.Polynomial.toPolynomial(input, ordering, resolvedVariables)),
31
+ variables: resolvedVariables,
32
+ };
33
+ }
34
+ /**
35
+ * Divides a polynomial by given list of divisors
36
+ * See - Ideals Varieties and Algorithms 4th ed. p.81
37
+ *
38
+ * @param Fs The array of divisors
39
+ * @param g The dividend
40
+ * @param ordering The ordering to be used (optional).
41
+ * @returns
42
+ */
43
+ function polyDiv(Fs, g, ordering, variables) {
44
+ const { polynomials } = normalizePolynomialInputs([...Fs, g], ordering, variables);
45
+ const F = polynomials.slice(0, Fs.length);
46
+ let p = polynomials[Fs.length].order(ordering);
47
+ // The collection of q's to be returned
48
+ const qArray = Fs.map(() => {
49
+ return (0, shortcuts_1.zero)();
50
+ });
51
+ let r = (0, shortcuts_1.zero)();
52
+ let iter = 0;
53
+ const maxIter = Fs.length * 1000;
54
+ // Begin
55
+ while (!p.isZero()) {
56
+ if (iter++ > maxIter) {
57
+ throw new Error((0, errors_1.message)('polynomialMaximumIterations'));
58
+ }
59
+ let divisionOccurred = false;
60
+ const s = F.length;
61
+ let i = 0; // Use zero since TS arrays are zero based
62
+ while (i < s && !divisionOccurred) {
63
+ const fi = F[i];
64
+ const fiLT = fi.LT();
65
+ const pLT = p.LT();
66
+ if (fiLT.divides(pLT)) {
67
+ const q = pLT.div(fiLT);
68
+ qArray[i] = qArray[i].plus(q.getExpression());
69
+ // Guarantees a reduction at each step
70
+ p = p.minus(fi.times(q)).order(ordering);
71
+ divisionOccurred = true;
72
+ }
73
+ else {
74
+ i++;
75
+ }
76
+ }
77
+ const pLT = p.LT();
78
+ if (!divisionOccurred) {
79
+ r = r.plus(pLT.getExpression());
80
+ p = p.minus(pLT).order(ordering);
81
+ }
82
+ }
83
+ return [qArray, r];
84
+ }
85
+ /**
86
+ * Divides one polynomial by another
87
+ *
88
+ * @param f The dividend
89
+ * @param g The divisor
90
+ * @param ordering The ordering to be used (optional).
91
+ * @returns [The quotient, The remainder]
92
+ */
93
+ function divide(f, g, ordering, variables) {
94
+ const [quo, rem] = polyDiv([g], f, ordering, variables);
95
+ return [quo[0], rem];
96
+ }
97
+ /**
98
+ * Computes the S-Polynomial given two polynomials
99
+ *
100
+ * @param f
101
+ * @param g
102
+ * @param ordering
103
+ * @param variables
104
+ * @returns
105
+ */
106
+ function S(f, g, ordering, variables) {
107
+ const { polynomials: [p, q], } = normalizePolynomialInputs([f, g], ordering, variables);
108
+ const pLT = p.LT();
109
+ const qLT = q.LT();
110
+ const xg = pLT.LCM(qLT);
111
+ return p.times(xg.div(pLT)).minus(q.times(xg.div(qLT)));
112
+ }
113
+ /**
114
+ * Combines all the variables of a set of polynomials
115
+ *
116
+ * @param F
117
+ * @returns
118
+ */
119
+ function combinePolynomialVariables(F) {
120
+ let variables = [];
121
+ F.forEach(f => {
122
+ variables = (0, utils_1.arrayAddUnique)(variables, f.variables);
123
+ });
124
+ variables.sort();
125
+ return variables;
126
+ }
127
+ /**
128
+ * Calculates the polynomial modulus of two polynomials as f mod g
129
+ *
130
+ * @param f
131
+ * @param g
132
+ * @param ordering
133
+ * @param variables
134
+ * @returns
135
+ */
136
+ function polyMod(f, g, ordering, variables) {
137
+ const { variables: resolvedVariables } = normalizePolynomialInputs([f, g], ordering, variables);
138
+ const [, rem] = divide(f, g, ordering, resolvedVariables);
139
+ return Polynomial_1.Polynomial.toPolynomial(rem, ordering, resolvedVariables).order(ordering);
140
+ }
141
+ function maxCommonVariableOccurrence(f, g) {
142
+ const a = Polynomial_1.Polynomial.toPolynomial(f).maxVariableFrequency();
143
+ const b = Polynomial_1.Polynomial.toPolynomial(g).maxVariableFrequency();
144
+ // At this point any variable will do as long as it occurs in both a and b
145
+ for (const x in a) {
146
+ if (x in b) {
147
+ return x;
148
+ }
149
+ }
150
+ }
151
+ /**
152
+ * Convert number to polynomial form.
153
+ * e.g. polynomialFromNumber (89, 1) = [8, 9] = 8*x+9
154
+ * e.g. polynomialFromNumber (89, 2) = [1, -1, -1] = x^2-x-1
155
+ * Try (x+4)(x+5)
156
+ *
157
+ * @param n The number
158
+ * @param p The power of the lead monomial
159
+ * @param base The base to use for the polynomial. Default = 10
160
+ * @returns
161
+ */
162
+ function polynomialFromNumber(n, p, base = 10, startingCoeff, endingCoeff) {
163
+ const remainder = function (a, b) {
164
+ if (a === 0) {
165
+ return 0;
166
+ }
167
+ return Math.abs(a) < Math.abs(b) ? -(b % a) : a % b;
168
+ };
169
+ const coeffs = [];
170
+ for (let i = p; i >= 0; i--) {
171
+ // Calculate the base
172
+ const m = base ** i;
173
+ // console.log(`m: ${m}, n: ${n}`)
174
+ // Get the mod. This will be negative if the
175
+ const rem = remainder(n, m);
176
+ const d = n - rem;
177
+ const coeff = d / m;
178
+ if (i === p && (coeff < 1 || startingCoeff !== undefined)) {
179
+ const c = startingCoeff || 1;
180
+ coeffs.push(c);
181
+ n -= c * m;
182
+ continue;
183
+ }
184
+ // Avoid fractions as coefficients
185
+ if (Math.abs(d) < Math.abs(m)) {
186
+ coeffs.push(0);
187
+ }
188
+ else {
189
+ // console.log(`d: ${d}, rem: ${rem}, n: ${n}, coeff: ${coeff}`)
190
+ // Push the coefficient
191
+ coeffs.push(coeff);
192
+ // Point to the remainder as the new number
193
+ n = rem;
194
+ }
195
+ }
196
+ // Adjust if the ending coeff is provided. If it cannot be adjusted then the current
197
+ // constant will be used
198
+ if (endingCoeff !== undefined) {
199
+ const lastIndex = coeffs.length - 1;
200
+ const newCoeff = coeffs[lastIndex] - endingCoeff;
201
+ if (newCoeff % base === 0) {
202
+ coeffs[lastIndex] = endingCoeff;
203
+ coeffs[lastIndex - 1] += newCoeff / base;
204
+ }
205
+ }
206
+ return coeffs.reverse();
207
+ }