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,71 @@
1
+ import { Expression } from '../classes/expression/Expression';
2
+ import { BaseConverter } from './BaseConverter';
3
+ import type { OptionsObject } from '../classes/parser/types';
4
+ import type { FracArray } from '../classes/parser/types';
5
+ import type { Rational } from '../classes/rational/Rational';
6
+ import type { ExpressionInput } from '../types';
7
+ export declare class Pattern extends BaseConverter {
8
+ private allEqualArguments;
9
+ private args;
10
+ private c;
11
+ private constCount;
12
+ private expression;
13
+ private multiplier;
14
+ private p;
15
+ private powerCount;
16
+ private referenceMap;
17
+ private reuseReferences;
18
+ private v;
19
+ private variables;
20
+ patternString: string;
21
+ references: {
22
+ [label: string]: Expression;
23
+ };
24
+ stack: Expression[];
25
+ constructor(expression: ExpressionInput, variables?: string[], options?: OptionsObject);
26
+ /**
27
+ * Shows the structure of a pattern with respect to x
28
+ * @param str
29
+ * @returns
30
+ */
31
+ static showStructure(str: string, variable?: string): string;
32
+ protected convertPower(input: Expression, power: Expression, options: OptionsObject): string;
33
+ protected createConstantReference(input: Expression, toPower?: boolean): string;
34
+ protected createVariableReference(input: Expression, options: OptionsObject): string;
35
+ protected finalizePowerAndInput(power: Expression, input: Expression, _options?: OptionsObject): [Expression, Expression];
36
+ protected hasAsVariable(input: Expression): boolean;
37
+ protected isBracketed(v: string): boolean;
38
+ protected multiplyToMultiplier(input: Expression): void;
39
+ protected requiresMultiplicationSymbol(_input: Expression): boolean;
40
+ protected setMultiplier(m: Rational, multiplierArray: FracArray, _input: Expression, _options?: OptionsObject): void;
41
+ protected toFraction(n: string, d: string): string;
42
+ protected value(input: Expression, isInverted: boolean, isNegative: boolean, options: OptionsObject): FracArray;
43
+ private addReference;
44
+ private formatFunctionCall;
45
+ private getReferenceFromMap;
46
+ private handlePatternProduct;
47
+ private handlePatternSum;
48
+ private initializeVariables;
49
+ private nextConstant;
50
+ private nextPower;
51
+ /**
52
+ * Checks to make sure that all the arguments match
53
+ * @returns
54
+ */
55
+ argumentsMatch(): boolean;
56
+ /**
57
+ * Checks if one or more values equals a given value
58
+ * @param references
59
+ * @param value
60
+ * @returns
61
+ */
62
+ equal(references: string, value: string): boolean;
63
+ equal(references: string[], value: string): boolean;
64
+ fromPattern(p: string): Expression;
65
+ /**
66
+ * Gets the value of a reference
67
+ * @param reference
68
+ * @returns
69
+ */
70
+ get(reference: string): Expression;
71
+ }
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Pattern = void 0;
4
+ const array_1 = require("../../utils/array");
5
+ const Expression_1 = require("../classes/expression/Expression");
6
+ const shortcuts_1 = require("../classes/expression/shortcuts");
7
+ const constants_1 = require("../classes/parser/constants");
8
+ const errors_1 = require("../errors");
9
+ const BaseConverter_1 = require("./BaseConverter");
10
+ class Pattern extends BaseConverter_1.BaseConverter {
11
+ // Caching elements
12
+ allEqualArguments = undefined;
13
+ args = [];
14
+ c;
15
+ constCount = 0;
16
+ expression;
17
+ multiplier = '';
18
+ p;
19
+ powerCount = 0;
20
+ referenceMap = {};
21
+ reuseReferences;
22
+ v;
23
+ variables = {};
24
+ patternString = '';
25
+ references = {};
26
+ stack = [];
27
+ constructor(expression, variables = [], options) {
28
+ super();
29
+ this.setMode('text');
30
+ this.expression = Expression_1.Expression.create(expression);
31
+ const defaults = {
32
+ constantSymbol: 'a',
33
+ powerSymbol: 'n',
34
+ variableSymbol: 'x',
35
+ reuseReferences: false,
36
+ };
37
+ const resolvedOptions = { ...defaults, ...options };
38
+ this.v = resolvedOptions.variableSymbol;
39
+ this.p = resolvedOptions.powerSymbol;
40
+ this.c = resolvedOptions.constantSymbol;
41
+ this.reuseReferences = resolvedOptions.reuseReferences;
42
+ this.initializeVariables(variables);
43
+ this.patternString = this.convert(this.expression, resolvedOptions);
44
+ }
45
+ /**
46
+ * Shows the structure of a pattern with respect to x
47
+ * @param str
48
+ * @returns
49
+ */
50
+ static showStructure(str, variable = 'x') {
51
+ let output = `Input: ${str}\n`;
52
+ const pattern = new Pattern(str, [variable]);
53
+ output += `patternString: ${pattern.patternString}\n`;
54
+ output += 'references: {\n';
55
+ for (const r in pattern.references) {
56
+ output += ` ${r}: ${pattern.references[r]}\n`;
57
+ }
58
+ output += '}';
59
+ return output;
60
+ }
61
+ convertPower(input, power, options) {
62
+ if (input.isEXP()) {
63
+ // Explicitly include the multiplier
64
+ return this.inBrackets(this.convert(power, { ...options, ignoreMultiplier: false }));
65
+ }
66
+ // If it doesn't have a variable then it's just a constants and does not require a power
67
+ // Products don't carry powers at the upper level so it's always 1. No need to add it.
68
+ if (!this.hasAsVariable(input) || input.isProduct()) {
69
+ return '';
70
+ }
71
+ return this.createConstantReference(power, true);
72
+ }
73
+ createConstantReference(input, toPower = false) {
74
+ const isNumeric = input.isNUM();
75
+ // Namespace the cache key so constant and power references don't collide.
76
+ const key = `${toPower ? 'pow' : 'cnt'}_${input.text()}`;
77
+ if (!isNumeric) {
78
+ const existing = this.referenceMap[key];
79
+ if (existing) {
80
+ return existing;
81
+ }
82
+ }
83
+ const ref = toPower ? this.nextPower(input) : this.nextConstant(input);
84
+ this.addReference(ref, input);
85
+ if (!isNumeric) {
86
+ this.referenceMap[key] = ref;
87
+ }
88
+ return ref;
89
+ }
90
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
91
+ createVariableReference(input, options) {
92
+ const value = this.variables[input.value];
93
+ this.addReference(value, input);
94
+ return value;
95
+ }
96
+ finalizePowerAndInput(power, input, _options) {
97
+ // The power gets stripped from the input e.g. 2^x -> [2, x]
98
+ // This check fails because the power and not the base now contains the variable.
99
+ // Return an EXP with power one. This is a workable solution since this expression
100
+ // is short-lived.
101
+ let e = input.toLinearAndUnitMultiplier();
102
+ if (input.isEXP() && !e.isEXP() && this.hasAsVariable(power)) {
103
+ e = Expression_1.Expression.toEXP(e, (0, shortcuts_1.one)());
104
+ }
105
+ return [power, e];
106
+ }
107
+ hasAsVariable(input) {
108
+ if (input.isVAR()) {
109
+ return !!this.variables[input.value];
110
+ }
111
+ return Object.keys(this.variables).some(variable => input.hasVariable(variable));
112
+ }
113
+ isBracketed(v) {
114
+ return /^\(.+\)$/.test(v);
115
+ }
116
+ multiplyToMultiplier(input) {
117
+ this.references[this.multiplier] = this.references[this.multiplier].times(input);
118
+ }
119
+ requiresMultiplicationSymbol(_input) {
120
+ return true;
121
+ // return input.isSum() || input.isEXP();
122
+ }
123
+ setMultiplier(m, multiplierArray, _input, _options) {
124
+ const ref = this.createConstantReference(new Expression_1.Expression(m));
125
+ this.multiplier = ref;
126
+ multiplierArray[0] = ref;
127
+ }
128
+ toFraction(n, d) {
129
+ const wrapIfNeeded = (s) => {
130
+ if (/[*+]/.test(s) && !this.isBracketed(s)) {
131
+ return this.inBrackets(s);
132
+ }
133
+ return s;
134
+ };
135
+ return `${wrapIfNeeded(n)}/${wrapIfNeeded(d)}`;
136
+ }
137
+ value(input, isInverted, isNegative, options) {
138
+ const v = ['', ''];
139
+ const index = isInverted ? 1 : 0;
140
+ if (input.isNUM()) {
141
+ return v;
142
+ }
143
+ if (!this.hasAsVariable(input) && !input.isEXP()) {
144
+ this.multiplyToMultiplier(input);
145
+ return v;
146
+ }
147
+ if (input.isEXP()) {
148
+ const arg = input.getBase();
149
+ v[index] = this.inBrackets(this.convert(arg, { ...options, ignoreMultiplier: false }));
150
+ }
151
+ else if (input.isInf()) {
152
+ v[index] = constants_1.INFINITY[0];
153
+ }
154
+ else if (!(input.elements || input.args)) {
155
+ v[index] = this.createVariableReference(input, options);
156
+ }
157
+ else if (input.isFunction()) {
158
+ v[index] = this.formatFunctionCall(input, options);
159
+ }
160
+ else if (input.isSum()) {
161
+ v[index] = this.handlePatternSum(input, options);
162
+ }
163
+ else if (input.isProduct()) {
164
+ return this.handlePatternProduct(input, isInverted, options);
165
+ }
166
+ return v;
167
+ }
168
+ addReference(ref, input) {
169
+ if (!this.references[ref]) {
170
+ this.references[ref] = input;
171
+ }
172
+ }
173
+ formatFunctionCall(input, options) {
174
+ const args = input.getArguments();
175
+ // Make a references to the arguments
176
+ this.args.push(args.map(x => x.text()).join(','));
177
+ // Ignoring the multiplier is explicitly false
178
+ const argList = args
179
+ .map(arg => this.convert(arg, { ...options, ignoreMultiplier: false }))
180
+ .join(', ');
181
+ return `${input.name}${this.inBrackets(argList)}`;
182
+ }
183
+ getReferenceFromMap(input, toPower = false) {
184
+ if (input && !input.isNUM()) {
185
+ const key = `${toPower ? 'pow' : 'cnt'}_${input.text()}`;
186
+ return this.referenceMap[key];
187
+ }
188
+ }
189
+ handlePatternProduct(input, isInverted, options) {
190
+ const mul = this.getMultiplicationSymbol();
191
+ const numOutput = [];
192
+ const denOutput = [];
193
+ for (let element of input.elementsArray()) {
194
+ if (!this.hasAsVariable(element)) {
195
+ this.multiplyToMultiplier(element);
196
+ continue;
197
+ }
198
+ if (element.isFunction(constants_1.WRAP)) {
199
+ element = element.getArguments()[0];
200
+ }
201
+ // FIX: Account for whether the entire product is inverted
202
+ const elementPowerSign = element.getPower().sign();
203
+ const isInDenominator = isInverted
204
+ ? elementPowerSign !== -1 // If product is inverted, positive powers go to denominator
205
+ : elementPowerSign === -1; // Normal case: negative powers go to denominator
206
+ const target = isInDenominator ? denOutput : numOutput;
207
+ if (isInDenominator && !isInverted) {
208
+ element = element.invert();
209
+ }
210
+ else if (!isInDenominator && isInverted) {
211
+ // Element stays as-is when inverted product with positive power
212
+ }
213
+ let output = this.convert(element, { ...options, ignoreMultiplier: true });
214
+ if (element.isSum() && element.isLinear() && this.mode === 'text') {
215
+ output = this.inBrackets(output);
216
+ }
217
+ target.push(output);
218
+ }
219
+ return [numOutput.join(mul), denOutput.join(mul)];
220
+ }
221
+ handlePatternSum(input, options) {
222
+ let constants = (0, shortcuts_1.zero)();
223
+ const elements = input.elementsArray();
224
+ const converted = [];
225
+ for (const element of elements) {
226
+ if (this.hasAsVariable(element)) {
227
+ converted.push(this.convert(element, { ...options, ignoreMultiplier: false }));
228
+ // converted.push(this.convert(element, options));
229
+ }
230
+ else {
231
+ constants = constants.plus(element);
232
+ }
233
+ }
234
+ // Add the constants if they're not zero
235
+ if (!constants.isZero()) {
236
+ converted.push(this.createConstantReference(constants));
237
+ }
238
+ return this.inBrackets(converted.join('+'));
239
+ }
240
+ initializeVariables(variables) {
241
+ let counter = 1;
242
+ variables
243
+ .slice()
244
+ .sort()
245
+ .forEach(x => {
246
+ this.variables[x] = this.v + counter++;
247
+ });
248
+ }
249
+ nextConstant(constant) {
250
+ const existing = this.getReferenceFromMap(constant, /*toPower*/ false);
251
+ return this.reuseReferences && existing ? existing : `${this.c}${++this.constCount}`;
252
+ // return existing || `${this.c}${++this.constCount}`;
253
+ }
254
+ nextPower(power) {
255
+ const existing = this.getReferenceFromMap(power, /*toPower*/ true);
256
+ return this.reuseReferences && existing ? existing : `${this.p}${++this.powerCount}`;
257
+ // return existing || `${this.p}${++this.powerCount}`;
258
+ }
259
+ /**
260
+ * Checks to make sure that all the arguments match
261
+ * @returns
262
+ */
263
+ argumentsMatch() {
264
+ if (this.allEqualArguments === undefined) {
265
+ this.allEqualArguments = (0, array_1.allEqual)(this.args);
266
+ }
267
+ return this.allEqualArguments;
268
+ }
269
+ equal(references, value) {
270
+ if (typeof references === 'string') {
271
+ return this.get(references).eq(value);
272
+ }
273
+ else {
274
+ if (references.length == 0) {
275
+ return false;
276
+ }
277
+ // The subsequent
278
+ for (let i = 0; i < references.length; i++) {
279
+ if (!this.get(references[i]).eq(value)) {
280
+ return false;
281
+ }
282
+ }
283
+ }
284
+ return true;
285
+ }
286
+ fromPattern(p) {
287
+ return Expression_1.Expression.create(p, this.references);
288
+ }
289
+ /**
290
+ * Gets the value of a reference
291
+ * @param reference
292
+ * @returns
293
+ */
294
+ get(reference) {
295
+ const ref = this.references[reference];
296
+ if (!ref) {
297
+ throw new errors_1.MissingReferenceError((0, errors_1.message)('missingReference', { ref: reference }));
298
+ }
299
+ return ref;
300
+ }
301
+ }
302
+ exports.Pattern = Pattern;
@@ -0,0 +1,34 @@
1
+ import type { Scope } from './common/classes/Scope';
2
+ import type { ParserEntity } from './types';
3
+ export type RegisteredMathFunction = (...args: never[]) => ParserEntity;
4
+ export type ParserUsage = 'notation' | 'scripting';
5
+ export type ParserRegistrationLevel = 'system' | 'user';
6
+ export interface MathFunctionEntry {
7
+ /** The function to be called */
8
+ fn: RegisteredMathFunction;
9
+ /** The minimum arguments allowed. Use -1 for variadic. */
10
+ minArgs: number;
11
+ /** The maximum arguments allowed. Use -1 for variadic. */
12
+ maxArgs: number;
13
+ /** The maximum precision available for the function */
14
+ maxPrecision?: number;
15
+ /** Argument positions that explicitly accept Equation values. */
16
+ equationArgs?: number[];
17
+ /** Whether Vector and Matrix arguments are distributed element-wise. */
18
+ distElWise?: boolean;
19
+ /** Whether argument evaluation is controlled by the registered function. */
20
+ deferArguments?: boolean;
21
+ /** Optional syntax normalization applied to deferred argument scopes before evaluation. */
22
+ normalizeDeferredArguments?: (argumentScopes: Scope[]) => Scope[];
23
+ /** Whether bracketless notation consumes the rest of the current statement expression. */
24
+ bracketlessStatement?: boolean;
25
+ /** Whether parser dispatch consumes an escaping top-level RETURN from this function. */
26
+ returnBoundary?: boolean;
27
+ /** Whether the entry belongs to ordinary Nerdamer notation or Nerdamer scripting. */
28
+ usage: ParserUsage;
29
+ /** Whether this function was registered at the system or user level */
30
+ level: ParserRegistrationLevel;
31
+ }
32
+ export declare const mathFunctionRegistry: {
33
+ [functionName: string]: MathFunctionEntry;
34
+ };