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,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasDerivedInverseTrig = hasDerivedInverseTrig;
4
+ exports.rewriteInverseTrig = rewriteInverseTrig;
5
+ const Expression_1 = require("../../core/classes/expression/Expression");
6
+ const shortcuts_1 = require("../../core/classes/expression/shortcuts");
7
+ const constants_1 = require("../../core/classes/parser/constants");
8
+ /**
9
+ * Determines whether an expression contains any asec, acsc, or acot functions.
10
+ */
11
+ function hasDerivedInverseTrig(x) {
12
+ let found = false;
13
+ x.forEveryElement(e => {
14
+ if (e.isFunction(constants_1.ASEC) || e.isFunction(constants_1.ACSC) || e.isFunction(constants_1.ACOT)) {
15
+ found = true;
16
+ }
17
+ return e;
18
+ });
19
+ return found;
20
+ }
21
+ /**
22
+ * Rewrites a single inverse trig element to its primary form.
23
+ *
24
+ * asec(u)^n → acos(1/u)^n
25
+ * acsc(u)^n → asin(1/u)^n
26
+ * acot(u)^n → atan(1/u)^n
27
+ *
28
+ * Multiplier and power are preserved.
29
+ */
30
+ function rewriteInverseTrigElement(e) {
31
+ const m = e.getMultiplier();
32
+ const p = e.getPower();
33
+ const args = e.getArguments();
34
+ if (e.isFunction(constants_1.ASEC) && args.length > 0) {
35
+ const u = args[0];
36
+ // asec(u) = acos(1/u)
37
+ const rewritten = Expression_1.Expression.create(`acos(x)`, { x: (0, shortcuts_1.one)().div(u) });
38
+ return Expression_1.Expression.fromRational(m).times(rewritten.pow(p));
39
+ }
40
+ if (e.isFunction(constants_1.ACSC) && args.length > 0) {
41
+ const u = args[0];
42
+ // acsc(u) = asin(1/u)
43
+ const rewritten = Expression_1.Expression.create(`asin(x)`, { x: (0, shortcuts_1.one)().div(u) });
44
+ return Expression_1.Expression.fromRational(m).times(rewritten.pow(p));
45
+ }
46
+ if (e.isFunction(constants_1.ACOT) && args.length > 0) {
47
+ const u = args[0];
48
+ // acot(u) = atan(1/u)
49
+ const rewritten = Expression_1.Expression.create(`atan(x)`, { x: (0, shortcuts_1.one)().div(u) });
50
+ return Expression_1.Expression.fromRational(m).times(rewritten.pow(p));
51
+ }
52
+ return e;
53
+ }
54
+ /**
55
+ * Recursively rewrites all asec, acsc, acot in an expression tree to acos, asin, atan.
56
+ * Descends into sums, products, and function arguments.
57
+ */
58
+ function rewriteInverseTrig(x) {
59
+ // Direct derived inverse trig function
60
+ if (x.isFunction(constants_1.ASEC) || x.isFunction(constants_1.ACSC) || x.isFunction(constants_1.ACOT)) {
61
+ return rewriteInverseTrigElement(x);
62
+ }
63
+ // For sums: rewrite each term
64
+ if (x.isSum()) {
65
+ const m = x.getMultiplier();
66
+ const p = x.getPower();
67
+ let result = (0, shortcuts_1.zero)();
68
+ for (const term of x.elementsArray()) {
69
+ result = result.plus(rewriteInverseTrig(term));
70
+ }
71
+ if (!p.isOne()) {
72
+ result = result.pow(p);
73
+ }
74
+ if (!m.isOne()) {
75
+ result = result.times(Expression_1.Expression.fromRational(m));
76
+ }
77
+ return result;
78
+ }
79
+ // For products: rewrite each factor
80
+ if (x.isProduct()) {
81
+ const m = x.getMultiplier();
82
+ const p = x.getPower();
83
+ let result = (0, shortcuts_1.one)();
84
+ for (const element of x.elementsArray()) {
85
+ result = result.times(rewriteInverseTrig(element));
86
+ }
87
+ if (!p.isOne()) {
88
+ result = result.pow(p);
89
+ }
90
+ if (!m.isOne()) {
91
+ result = result.times(Expression_1.Expression.fromRational(m));
92
+ }
93
+ return result;
94
+ }
95
+ return x;
96
+ }
@@ -0,0 +1,21 @@
1
+ import { Expression } from '../../core/classes/expression/Expression';
2
+ import { toCommonDenominator } from '../../core/functions/rationalNormalization';
3
+ export { toCommonDenominator };
4
+ /**
5
+ * Simplifies the expression through rationalizing
6
+ * @param x
7
+ * @returns
8
+ */
9
+ export declare function rationalize(x: Expression): Expression;
10
+ /**
11
+ * Attempts to simplify radicals in the expression. Convert 2/√2 to √2.
12
+ * @param x
13
+ * @returns
14
+ */
15
+ export declare function simplifyRadicals(x: Expression): Expression;
16
+ /**
17
+ * Eliminates common factors from the numerator and denominators give that they're two polynomials
18
+ * @param x
19
+ * @returns
20
+ */
21
+ export declare function cancelCommonFactors(x: Expression): Expression;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toCommonDenominator = void 0;
4
+ exports.rationalize = rationalize;
5
+ exports.simplifyRadicals = simplifyRadicals;
6
+ exports.cancelCommonFactors = cancelCommonFactors;
7
+ const Expression_1 = require("../../core/classes/expression/Expression");
8
+ const shortcuts_1 = require("../../core/classes/expression/shortcuts");
9
+ const Polynomial_1 = require("../../core/classes/polynomial/Polynomial");
10
+ const utils_1 = require("../../core/classes/polynomial/utils");
11
+ const rationalNormalization_1 = require("../../core/functions/rationalNormalization");
12
+ Object.defineProperty(exports, "toCommonDenominator", { enumerable: true, get: function () { return rationalNormalization_1.toCommonDenominator; } });
13
+ const subst_1 = require("../../core/functions/subst");
14
+ const factor_1 = require("../factor/factor");
15
+ /**
16
+ * Simplifies the expression through rationalizing
17
+ * @param x
18
+ * @returns
19
+ */
20
+ function rationalize(x) {
21
+ const num = x.getNumerator();
22
+ const den = x.getDenominator();
23
+ // Nothing to do if the denominator is one
24
+ // Nothing to do if the power in the denominator is 1
25
+ if (den.isOne() || (!den.isProduct() && den.isLinear())) {
26
+ return x;
27
+ }
28
+ const q = den.getPower();
29
+ const f = den.toLinearAndUnitMultiplier();
30
+ const retval = num.div(f.times(den.getMultiplier())).times(f.pow((0, shortcuts_1.one)().minus(q)));
31
+ return retval;
32
+ }
33
+ /**
34
+ * Attempts to simplify radicals in the expression. Convert 2/√2 to √2.
35
+ * @param x
36
+ * @returns
37
+ */
38
+ function simplifyRadicals(x) {
39
+ // This function only works if it's a product
40
+ if (!x.isProduct()) {
41
+ return x;
42
+ }
43
+ const m = x.getMultiplier();
44
+ const p = x.getPower();
45
+ let retval = (0, shortcuts_1.one)();
46
+ const linearized = x.toLinearAndUnitMultiplier();
47
+ const linearMultiplier = linearized.getMultiplier();
48
+ const elements = linearized.elementsArray().map(e => {
49
+ // Only rationalize if it actually has a radical (fractional power)
50
+ if (e.hasRadical()) {
51
+ return rationalize(e);
52
+ }
53
+ return e;
54
+ });
55
+ // The array of indices that have already been used
56
+ const seen = [];
57
+ for (let i = 0; i < elements.length; i++) {
58
+ // Nothing to do if it's already been multiplied out
59
+ if (seen.includes(i)) {
60
+ continue;
61
+ }
62
+ let a = elements[i];
63
+ const p = a.getPower();
64
+ for (let j = i + 1; j < elements.length; j++) {
65
+ const b = elements[j];
66
+ if (p.eq(b.getPower())) {
67
+ // Powers are stored directly on several expression node types. Extracting
68
+ // the base through the common Expression API avoids assuming an EXP node
69
+ // or a function wrapper for symbolic radicals.
70
+ const u = a.toLinearAndUnitMultiplier();
71
+ const v = b.toLinearAndUnitMultiplier();
72
+ // Principal radicals can be combined when both radicands are known nonnegative.
73
+ // Reciprocals still require a strictly signed base because a zero denominator
74
+ // cannot be admitted by the sign proof for a negative power.
75
+ if (!u.isComplex() && !v.isComplex() && u.gte(0) && v.gte(0)) {
76
+ const multiplier = a.getMultiplier().times(b.getMultiplier());
77
+ if (u.isNUM() && v.isNUM()) {
78
+ // Preserve exact numeric reduction when the combined radicand is numeric.
79
+ a = u.times(v).pow(p).times(multiplier);
80
+ }
81
+ else {
82
+ // Set the outer power directly so the normal power operation does not
83
+ // distribute it back across the known-positive product.
84
+ a = Expression_1.Expression.setPower(u.times(v), p).times(multiplier);
85
+ }
86
+ seen.push(j);
87
+ }
88
+ }
89
+ }
90
+ retval = retval.times(a);
91
+ }
92
+ return retval.pow(p).times(m).times(linearMultiplier);
93
+ }
94
+ /**
95
+ * Eliminates common factors from the numerator and denominators give that they're two polynomials
96
+ * @param x
97
+ * @returns
98
+ */
99
+ function cancelCommonFactors(x) {
100
+ if (!x.isProduct() || !x.isLinear()) {
101
+ return x;
102
+ }
103
+ let retval = x;
104
+ const [radFree, radicalSubs] = (0, subst_1.subRadicals)(x);
105
+ // Mathematical constants need the same temporary variable treatment as radicals
106
+ // before entering the exact polynomial layer. Restore both substitution sets below.
107
+ const [polynomialReady, subs] = (0, subst_1.uSubConstants)(radFree, radicalSubs);
108
+ let num = polynomialReady.getNumerator();
109
+ let den = polynomialReady.getDenominator();
110
+ function reduce(a, b) {
111
+ const f = new Polynomial_1.Polynomial(a);
112
+ // Factor both
113
+ for (const e of (0, factor_1.polyFactorExpressions)(b)) {
114
+ // Don't risk entering Q by dividing by a constant
115
+ if (e.isNUM()) {
116
+ continue;
117
+ }
118
+ const g = new Polynomial_1.Polynomial(e);
119
+ const [q, r] = (0, utils_1.divide)(f, g);
120
+ if (r.isZero()) {
121
+ // Update the numerator with the new values
122
+ a = q;
123
+ // Update the denominator
124
+ const [q2, _r2] = (0, utils_1.divide)(b, g);
125
+ b = q2;
126
+ }
127
+ }
128
+ return [a, b];
129
+ }
130
+ if (num.isPolynomialLike() && den.isPolynomialLike()) {
131
+ // Reduce the numerator by the denominator
132
+ [num, den] = reduce(num, den);
133
+ // Reduce the denominator by the numerator
134
+ [den, num] = reduce(den, num);
135
+ // Return the quotient
136
+ retval = num.div(den);
137
+ }
138
+ // First try to reduce the denominator
139
+ return (0, subst_1.uUnSub)(retval, subs);
140
+ }
@@ -0,0 +1,25 @@
1
+ import { Expression } from '../../core/classes/expression/Expression';
2
+ /**
3
+ * Applies Nerdamer's finite symbolic simplification strategy to an expression.
4
+ *
5
+ * @remarks
6
+ * Simplification first normalizes rational structure, recursively simplifies function
7
+ * arguments, and then selects targeted transformations for factorial ratios, complex
8
+ * forms, irrational denominators, sums, or linear products. The final numerator and
9
+ * denominator are factored. This is a heuristic transformation pipeline rather than a
10
+ * proof of globally minimal form, and branch-sensitive identities are limited to the
11
+ * safeguards implemented by the selected rewrite routines.
12
+ *
13
+ * Intermediate expressions may be reused while the pipeline runs, but callers should
14
+ * treat the return value as the simplified result rather than expecting `x` to be updated
15
+ * in place. Decimal-origin formatting is propagated to the result's outer multiplier.
16
+ * The `modifiers` object is internal recursion state; its `image` value prevents another
17
+ * simplification round when the canonical text has stopped changing.
18
+ *
19
+ * @param x - Expression or parser text to simplify.
20
+ * @param modifiers - Internal recursion markers used to detect an unchanged image.
21
+ * @returns The simplified expression, which may retain forms unsupported by the finite strategy set.
22
+ */
23
+ export declare function simplify(x: Expression | string, modifiers?: {
24
+ [name: string]: string;
25
+ }): Expression;
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.simplify = simplify;
4
+ const Expression_1 = require("../../core/classes/expression/Expression");
5
+ const shortcuts_1 = require("../../core/classes/expression/shortcuts");
6
+ const utils_1 = require("../../math/utils");
7
+ const factor_1 = require("../factor/factor");
8
+ const complexsimp_1 = require("./complexsimp");
9
+ const factorCommon_1 = require("./factorCommon");
10
+ const funcsimp_1 = require("./funcsimp");
11
+ const invtrigrewrite_1 = require("./invtrigrewrite");
12
+ const ratsimp_1 = require("./ratsimp");
13
+ const trigrewrite_1 = require("./trigrewrite");
14
+ const trigsimp_1 = require("./trigsimp");
15
+ const utils_2 = require("./utils");
16
+ /**
17
+ * Applies Nerdamer's finite symbolic simplification strategy to an expression.
18
+ *
19
+ * @remarks
20
+ * Simplification first normalizes rational structure, recursively simplifies function
21
+ * arguments, and then selects targeted transformations for factorial ratios, complex
22
+ * forms, irrational denominators, sums, or linear products. The final numerator and
23
+ * denominator are factored. This is a heuristic transformation pipeline rather than a
24
+ * proof of globally minimal form, and branch-sensitive identities are limited to the
25
+ * safeguards implemented by the selected rewrite routines.
26
+ *
27
+ * Intermediate expressions may be reused while the pipeline runs, but callers should
28
+ * treat the return value as the simplified result rather than expecting `x` to be updated
29
+ * in place. Decimal-origin formatting is propagated to the result's outer multiplier.
30
+ * The `modifiers` object is internal recursion state; its `image` value prevents another
31
+ * simplification round when the canonical text has stopped changing.
32
+ *
33
+ * @param x - Expression or parser text to simplify.
34
+ * @param modifiers - Internal recursion markers used to detect an unchanged image.
35
+ * @returns The simplified expression, which may retain forms unsupported by the finite strategy set.
36
+ */
37
+ function simplify(x, modifiers = {}) {
38
+ if (typeof x === 'string') {
39
+ x = Expression_1.Expression.create(x);
40
+ }
41
+ const asDecimal = x.hasDecimal();
42
+ if ((0, invtrigrewrite_1.hasDerivedInverseTrig)(x)) {
43
+ x = (0, invtrigrewrite_1.rewriteInverseTrig)(x);
44
+ }
45
+ x = (0, ratsimp_1.toCommonDenominator)(x);
46
+ x = x.getNumerator().expand().div(x.getDenominator().expand());
47
+ // No changes from last round — nothing left to do
48
+ let retval = x;
49
+ const unchanged = modifiers.image === x.text();
50
+ if (!unchanged) {
51
+ retval = simplifyArguments(retval);
52
+ // Early factorial simplification for bare factorial ratios
53
+ if (retval.isProduct() && (0, utils_2.hasFactorialRatio)(retval)) {
54
+ retval = (0, funcsimp_1.simplifyFactorials)(retval);
55
+ }
56
+ // Only enter the main simplification if factorials didn't fully resolve,
57
+ // or the expression wasn't a factorial ratio to begin with
58
+ if ((0, utils_2.hasFactorialRatio)(retval) || !x.isProduct() || !(0, utils_2.hasFactorialRatio)(x)) {
59
+ if (x.isComplex()) {
60
+ retval = (0, complexsimp_1.complexSimplify)(retval);
61
+ }
62
+ else if ((0, utils_2.hasIrrationalDenominator)(retval)) {
63
+ retval = (0, ratsimp_1.rationalize)(retval);
64
+ }
65
+ else if (retval.isSum()) {
66
+ retval = (0, trigrewrite_1.tryRewriteTrig)(retval);
67
+ retval = (0, trigsimp_1.simplifyTrigSum)(retval);
68
+ retval = (0, factorCommon_1.factorCommonPower)(retval);
69
+ retval = (0, funcsimp_1.simplifyLogs)(retval);
70
+ }
71
+ else if (retval.isProduct() && retval.isLinear()) {
72
+ retval = (0, funcsimp_1.simplifyFactorials)(retval);
73
+ retval = (0, ratsimp_1.simplifyRadicals)(retval);
74
+ retval = cancelNestedFactors(retval);
75
+ retval = (0, ratsimp_1.cancelCommonFactors)(retval);
76
+ retval = (0, trigrewrite_1.tryRewriteTrig)(retval);
77
+ }
78
+ }
79
+ }
80
+ retval = factorResult(retval);
81
+ if (asDecimal) {
82
+ retval.getMultiplier().asDecimal = true;
83
+ }
84
+ return retval;
85
+ }
86
+ function simplifyArguments(x) {
87
+ let retval = undefined;
88
+ const m = x.getMultiplier();
89
+ const p = x.getPower();
90
+ if (x.isFunction()) {
91
+ retval = Expression_1.Expression.toFunction(x.name, x.getArguments().map(e => simplify(e)));
92
+ }
93
+ else if (x.isProduct()) {
94
+ retval = (0, shortcuts_1.one)();
95
+ for (const element of x.elementsArray()) {
96
+ const simplified = simplifyArguments(element);
97
+ retval = retval.times(simplified);
98
+ }
99
+ }
100
+ else if (x.isSum()) {
101
+ retval = (0, shortcuts_1.zero)();
102
+ for (const element of x.elementsArray()) {
103
+ retval = retval.plus(simplifyArguments(element));
104
+ }
105
+ }
106
+ if (retval) {
107
+ retval = retval.pow(p).times(m);
108
+ }
109
+ else {
110
+ retval = x;
111
+ }
112
+ return retval;
113
+ }
114
+ /** Shared exit: factor numerator and denominator, or return as-is for pure numbers. */
115
+ function factorResult(x) {
116
+ if (x.isNUM()) {
117
+ return x;
118
+ }
119
+ function rebuildFactorResult(original, factors) {
120
+ let retval = (0, utils_1.product)(...factors);
121
+ if (original.hasDecimal() && factors.length === 1 && factors[0].eq(original)) {
122
+ retval = original;
123
+ }
124
+ return retval;
125
+ }
126
+ const numerator = x.getNumerator();
127
+ const denominator = x.getDenominator();
128
+ const num = rebuildFactorResult(numerator, (0, factor_1.polyFactorExpressions)(numerator));
129
+ const den = rebuildFactorResult(denominator, (0, factor_1.polyFactorExpressions)(denominator));
130
+ return num.div(den);
131
+ }
132
+ /**
133
+ * Cancels common factors between top-level elements and elements nested inside
134
+ * inverted products. Handles cases like fact(n) * (fact(n)*(1+n))^-1 → (1+n)^-1
135
+ * where the denominator is a product raised to -1 and contains a factor that
136
+ * matches a numerator element.
137
+ */
138
+ function cancelNestedFactors(x) {
139
+ if (!x.isProduct()) {
140
+ return x;
141
+ }
142
+ const numFactors = [];
143
+ const denCompounds = [];
144
+ const otherDen = [];
145
+ let idx = 0;
146
+ for (const element of x.elementsArray()) {
147
+ const p = element.getPower();
148
+ if (p.sign() === -1 && p.isMinusOne?.()) {
149
+ // This is something^-1. Check if the base is a product.
150
+ const base = element.invert();
151
+ if (base.isProduct()) {
152
+ denCompounds.push({ base, index: idx });
153
+ }
154
+ else {
155
+ otherDen.push(element);
156
+ }
157
+ }
158
+ else if (p.sign() === 1) {
159
+ numFactors.push(element);
160
+ }
161
+ else {
162
+ otherDen.push(element);
163
+ }
164
+ idx++;
165
+ }
166
+ // Nothing to do if there are no compound denominators
167
+ if (denCompounds.length === 0 || numFactors.length === 0) {
168
+ return x;
169
+ }
170
+ let changed = false;
171
+ const usedNum = new Set();
172
+ for (const compound of denCompounds) {
173
+ const denElements = compound.base.elementsArray();
174
+ const denMultiplier = compound.base.getMultiplier();
175
+ const survivingDen = [];
176
+ let compoundChanged = false;
177
+ for (const de of denElements) {
178
+ let cancelled = false;
179
+ for (let i = 0; i < numFactors.length; i++) {
180
+ if (usedNum.has(i)) {
181
+ continue;
182
+ }
183
+ // Compare ignoring multipliers
184
+ const numUnit = numFactors[i].toUnitMultiplier();
185
+ const denUnit = de.toUnitMultiplier();
186
+ if (numUnit.eq(denUnit)) {
187
+ // Cancel, keeping ratio of multipliers
188
+ const mRatio = numFactors[i].getMultiplier().div(de.getMultiplier());
189
+ if (!mRatio.isOne()) {
190
+ // Replace the numerator factor with the multiplier ratio
191
+ numFactors[i] = Expression_1.Expression.fromRational(mRatio);
192
+ }
193
+ else {
194
+ usedNum.add(i);
195
+ }
196
+ cancelled = true;
197
+ compoundChanged = true;
198
+ changed = true;
199
+ break;
200
+ }
201
+ }
202
+ if (!cancelled) {
203
+ survivingDen.push(de);
204
+ }
205
+ }
206
+ if (compoundChanged) {
207
+ // Rebuild the denominator from surviving elements
208
+ if (survivingDen.length === 0) {
209
+ // Entire denominator cancelled — just the multiplier remains
210
+ otherDen.push(Expression_1.Expression.fromRational(denMultiplier).invert());
211
+ }
212
+ else {
213
+ let newDen = Expression_1.Expression.fromRational(denMultiplier);
214
+ for (const s of survivingDen) {
215
+ newDen = newDen.times(s);
216
+ }
217
+ otherDen.push(newDen.invert());
218
+ }
219
+ }
220
+ else {
221
+ otherDen.push(compound.base.invert());
222
+ }
223
+ }
224
+ if (!changed) {
225
+ return x;
226
+ }
227
+ let result = Expression_1.Expression.fromRational(x.getMultiplier());
228
+ for (let i = 0; i < numFactors.length; i++) {
229
+ if (!usedNum.has(i)) {
230
+ result = result.times(numFactors[i]);
231
+ }
232
+ }
233
+ for (const d of otherDen) {
234
+ result = result.times(d);
235
+ }
236
+ return result;
237
+ }
@@ -0,0 +1,38 @@
1
+ import { Expression } from '../../core/classes/expression/Expression';
2
+ /**
3
+ * Applies power reduction to a single trig function with an integer power ≥ 2.
4
+ *
5
+ * sin(u)^(2k) → expanded using repeated application of half-angle
6
+ * cos(u)^(2k) → expanded using repeated application of half-angle
7
+ * sin(u)^(2k+1) → sin(u) · [sin(u)^(2k) reduced]
8
+ * cos(u)^(2k+1) → cos(u) · [cos(u)^(2k) reduced]
9
+ *
10
+ * Only applies when the power is an integer ≥ 2 (or ≤ -2).
11
+ * Fractional powers like sin(x)^(1/2) are left unchanged.
12
+ */
13
+ export declare function reduceTrigPower(e: Expression): Expression;
14
+ /**
15
+ * Applies power reduction to all trig powers in an expression.
16
+ * Descends into sums and products.
17
+ */
18
+ export declare function trigReduce(x: Expression): Expression;
19
+ /**
20
+ * Expands all double-angle trig functions in an expression.
21
+ */
22
+ export declare function expandDoubleAngle(x: Expression): Expression;
23
+ /**
24
+ * Converts a product of two trig functions to a sum using product-to-sum identities.
25
+ *
26
+ * sin(a)·cos(b) → (1/2)[sin(a+b) + sin(a-b)]
27
+ * cos(a)·cos(b) → (1/2)[cos(a-b) + cos(a+b)]
28
+ * sin(a)·sin(b) → (1/2)[cos(a-b) - cos(a+b)]
29
+ */
30
+ export declare function productToSum(x: Expression): Expression;
31
+ /**
32
+ * Converts sin(u)·cos(u) products into double-angle form.
33
+ *
34
+ * k·sin(u)·cos(u) → (k/2)·sin(2u)
35
+ *
36
+ * This is the reverse of expandDoubleAngle for sin.
37
+ */
38
+ export declare function convertToDoubleAngle(x: Expression): Expression;