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,355 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContinueSignal = exports.BreakSignal = exports.ReturnSignal = exports.ControlFlowSignal = exports.CONTINUE_SIGNAL = exports.BREAK_SIGNAL = exports.RETURN_SIGNAL = void 0;
4
+ exports.functionBoundary = functionBoundary;
5
+ exports.RETURN = RETURN;
6
+ exports.BREAK = BREAK;
7
+ exports.CONTINUE = CONTINUE;
8
+ exports.AND = AND;
9
+ exports.OR = OR;
10
+ exports.NOT = NOT;
11
+ exports.XOR = XOR;
12
+ exports.IFERROR = IFERROR;
13
+ exports.ISERROR = ISERROR;
14
+ exports.IF = IF;
15
+ exports.WHILE = WHILE;
16
+ exports.FOR = FOR;
17
+ exports.BLOCK = BLOCK;
18
+ exports.parserReturnBoundary = parserReturnBoundary;
19
+ exports.parserBlock = parserBlock;
20
+ const common_1 = require("../../../common/common");
21
+ const errors_1 = require("../../../errors");
22
+ const Settings_1 = require("../../../Settings");
23
+ const Expression_1 = require("../../expression/Expression");
24
+ const shortcuts_1 = require("../../expression/shortcuts");
25
+ const Vector_1 = require("../../vector/Vector");
26
+ const constants_1 = require("../constants");
27
+ // Internal runtime tags for parser control-flow signals. These are not ParserEntity data types.
28
+ exports.RETURN_SIGNAL = 'RETURN_SIGNAL';
29
+ exports.BREAK_SIGNAL = 'BREAK_SIGNAL';
30
+ exports.CONTINUE_SIGNAL = 'CONTINUE_SIGNAL';
31
+ /** Base class for internal parser control transfers. These signals are not parser errors. */
32
+ class ControlFlowSignal extends Error {
33
+ constructor() {
34
+ super();
35
+ this.name = new.target.name;
36
+ }
37
+ }
38
+ exports.ControlFlowSignal = ControlFlowSignal;
39
+ /**
40
+ * Internal control-flow signal used to carry a symbolic function's return value to its
41
+ * function boundary. It is not a mathematical parser result.
42
+ */
43
+ class ReturnSignal extends ControlFlowSignal {
44
+ value;
45
+ dataType = exports.RETURN_SIGNAL;
46
+ constructor(value) {
47
+ super();
48
+ this.value = value;
49
+ }
50
+ static isReturnSignal(obj) {
51
+ return (0, common_1.isNerdamerNativeType)(obj, exports.RETURN_SIGNAL);
52
+ }
53
+ }
54
+ exports.ReturnSignal = ReturnSignal;
55
+ /** Internal control-flow signal consumed by the nearest parser loop. */
56
+ class BreakSignal extends ControlFlowSignal {
57
+ dataType = exports.BREAK_SIGNAL;
58
+ static isBreakSignal(obj) {
59
+ return (0, common_1.isNerdamerNativeType)(obj, exports.BREAK_SIGNAL);
60
+ }
61
+ }
62
+ exports.BreakSignal = BreakSignal;
63
+ /** Internal control-flow signal consumed by the nearest parser loop. */
64
+ class ContinueSignal extends ControlFlowSignal {
65
+ dataType = exports.CONTINUE_SIGNAL;
66
+ static isContinueSignal(obj) {
67
+ return (0, common_1.isNerdamerNativeType)(obj, exports.CONTINUE_SIGNAL);
68
+ }
69
+ }
70
+ exports.ContinueSignal = ContinueSignal;
71
+ // BREAK and CONTINUE carry no data, so reuse their signals instead of allocating an Error
72
+ // on every control transfer. RETURN carries a value and therefore remains per invocation.
73
+ const BREAK_SIGNAL_INSTANCE = new BreakSignal();
74
+ const CONTINUE_SIGNAL_INSTANCE = new ContinueSignal();
75
+ // Parser control flow is synchronous. Track active execution boundaries so internal signals
76
+ // are consumed by the correct parser construct without leaking across function calls.
77
+ let loopBodyDepth = 0;
78
+ let parserReturnBoundaryDepth = 0;
79
+ let symbolicFunctionDepth = 0;
80
+ /** Returns the parser's boolean interpretation of one evaluated condition. */
81
+ function isTruthy(value) {
82
+ if (!Expression_1.Expression.isExpression(value)) {
83
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('expressionExpected', { type: constants_1.dataTypes[value.dataType] }));
84
+ }
85
+ return !value.isZero();
86
+ }
87
+ /**
88
+ * Evaluates one symbolic-function body and consumes control flow at the function boundary.
89
+ * RETURN becomes the function result, while BREAK and CONTINUE cannot escape a function call.
90
+ */
91
+ function functionBoundary(evaluate) {
92
+ let retval;
93
+ symbolicFunctionDepth++;
94
+ try {
95
+ retval = evaluate();
96
+ }
97
+ catch (error) {
98
+ if (ReturnSignal.isReturnSignal(error)) {
99
+ retval = error.value;
100
+ }
101
+ else if (BreakSignal.isBreakSignal(error)) {
102
+ throw new errors_1.ParserError((0, errors_1.message)('breakOutsideLoop'));
103
+ }
104
+ else if (ContinueSignal.isContinueSignal(error)) {
105
+ throw new errors_1.ParserError((0, errors_1.message)('continueOutsideLoop'));
106
+ }
107
+ else {
108
+ throw error;
109
+ }
110
+ }
111
+ finally {
112
+ symbolicFunctionDepth--;
113
+ }
114
+ return retval;
115
+ }
116
+ /**
117
+ * Returns a value from the current symbolic function.
118
+ * @param x
119
+ * @returns
120
+ */
121
+ function RETURN(x) {
122
+ throw new ReturnSignal(x);
123
+ }
124
+ /** Exits the nearest parser control-flow loop. */
125
+ function BREAK() {
126
+ if (loopBodyDepth === 0) {
127
+ throw new errors_1.ParserError((0, errors_1.message)('breakOutsideLoop'));
128
+ }
129
+ throw BREAK_SIGNAL_INSTANCE;
130
+ }
131
+ /** Skips to the next iteration of the nearest parser control-flow loop. */
132
+ function CONTINUE() {
133
+ if (loopBodyDepth === 0) {
134
+ throw new errors_1.ParserError((0, errors_1.message)('continueOutsideLoop'));
135
+ }
136
+ throw CONTINUE_SIGNAL_INSTANCE;
137
+ }
138
+ /**
139
+ * Returns 1 when every deferred argument is nonzero, otherwise 0.
140
+ * Evaluation stops as soon as a false argument is found.
141
+ */
142
+ function AND(...args) {
143
+ let retval = (0, shortcuts_1.one)();
144
+ for (const arg of args) {
145
+ if (!isTruthy(arg())) {
146
+ retval = (0, shortcuts_1.zero)();
147
+ break;
148
+ }
149
+ }
150
+ return retval;
151
+ }
152
+ /**
153
+ * Returns 1 when at least one deferred argument is nonzero, otherwise 0.
154
+ * Evaluation stops as soon as a true argument is found.
155
+ */
156
+ function OR(...args) {
157
+ let retval = (0, shortcuts_1.zero)();
158
+ for (const arg of args) {
159
+ if (isTruthy(arg())) {
160
+ retval = (0, shortcuts_1.one)();
161
+ break;
162
+ }
163
+ }
164
+ return retval;
165
+ }
166
+ /** Returns 1 when the argument is zero and 0 otherwise. */
167
+ function NOT(value) {
168
+ const retval = isTruthy(value) ? (0, shortcuts_1.zero)() : (0, shortcuts_1.one)();
169
+ return retval;
170
+ }
171
+ /** Returns 1 when an odd number of arguments are nonzero, otherwise 0. */
172
+ function XOR(...args) {
173
+ let odd = false;
174
+ for (const arg of args) {
175
+ if (isTruthy(arg)) {
176
+ odd = !odd;
177
+ }
178
+ }
179
+ const retval = odd ? (0, shortcuts_1.one)() : (0, shortcuts_1.zero)();
180
+ return retval;
181
+ }
182
+ /**
183
+ * Evaluates an expression and returns its result unless evaluation throws an ordinary error.
184
+ * The fallback is evaluated only after an error. Internal parser control-flow signals continue
185
+ * unwinding to their enclosing function or loop boundary.
186
+ */
187
+ function IFERROR(expression, fallback) {
188
+ let retval;
189
+ try {
190
+ retval = expression();
191
+ }
192
+ catch (error) {
193
+ if (error instanceof ControlFlowSignal) {
194
+ throw error;
195
+ }
196
+ retval = fallback();
197
+ }
198
+ return retval;
199
+ }
200
+ /**
201
+ * Returns 1 when deferred evaluation throws an ordinary error and 0 otherwise.
202
+ * Internal parser control-flow signals are not errors and continue unwinding normally.
203
+ */
204
+ function ISERROR(expression) {
205
+ let retval = (0, shortcuts_1.zero)();
206
+ try {
207
+ expression();
208
+ }
209
+ catch (error) {
210
+ if (error instanceof ControlFlowSignal) {
211
+ throw error;
212
+ }
213
+ retval = (0, shortcuts_1.one)();
214
+ }
215
+ return retval;
216
+ }
217
+ /**
218
+ * A branching function. Its arguments are deferred so only the selected branch is evaluated.
219
+ * When the false branch is omitted, a false condition produces the parser's empty result.
220
+ * @param condition
221
+ * @param branch1
222
+ * @param branch2
223
+ * @returns
224
+ */
225
+ function IF(condition, branch1, branch2) {
226
+ const evaluatedCondition = condition();
227
+ let retval;
228
+ if (isTruthy(evaluatedCondition)) {
229
+ retval = branch1();
230
+ }
231
+ else {
232
+ retval = branch2 ? branch2() : new Vector_1.Vector();
233
+ }
234
+ return retval;
235
+ }
236
+ /**
237
+ * Repeatedly evaluates a deferred body while a deferred condition is nonzero.
238
+ * The condition is reevaluated before every iteration. BREAK and CONTINUE are consumed here so
239
+ * they apply only to the nearest loop; other control-flow signals continue to unwind outward.
240
+ * The final completed body result is returned; if the body never completes, an empty Vector is
241
+ * returned.
242
+ * @param condition
243
+ * @param body
244
+ * @returns
245
+ */
246
+ function WHILE(condition, body) {
247
+ let retval = new Vector_1.Vector();
248
+ let continueLoop = true;
249
+ let iterations = 0;
250
+ while (continueLoop) {
251
+ const evaluatedCondition = condition();
252
+ if (!isTruthy(evaluatedCondition)) {
253
+ continueLoop = false;
254
+ }
255
+ else {
256
+ if (iterations >= Settings_1.Settings.MAX_LOOP_ITERATIONS) {
257
+ throw new errors_1.ParserError((0, errors_1.message)('loopIterationLimitExceeded', {
258
+ max: String(Settings_1.Settings.MAX_LOOP_ITERATIONS),
259
+ }));
260
+ }
261
+ loopBodyDepth++;
262
+ try {
263
+ retval = body();
264
+ }
265
+ catch (error) {
266
+ if (BreakSignal.isBreakSignal(error)) {
267
+ continueLoop = false;
268
+ }
269
+ else if (!ContinueSignal.isContinueSignal(error)) {
270
+ throw error;
271
+ }
272
+ }
273
+ finally {
274
+ loopBodyDepth--;
275
+ }
276
+ iterations++;
277
+ }
278
+ }
279
+ return retval;
280
+ }
281
+ /**
282
+ * Evaluates a deferred initializer once, then delegates repeated condition and body evaluation
283
+ * to WHILE. The update runs after each completed body evaluation and also before a CONTINUE
284
+ * advances to the next condition check. BREAK and RETURN skip the pending update. The final
285
+ * completed body result is returned; if the body never completes, WHILE's empty-Vector result
286
+ * is preserved.
287
+ * @param initializer
288
+ * @param condition
289
+ * @param update
290
+ * @param body
291
+ * @returns
292
+ */
293
+ function FOR(initializer, condition, update, body) {
294
+ initializer();
295
+ const retval = WHILE(condition, () => {
296
+ let bodyResult;
297
+ try {
298
+ bodyResult = body();
299
+ }
300
+ catch (error) {
301
+ if (ContinueSignal.isContinueSignal(error)) {
302
+ update();
303
+ }
304
+ throw error;
305
+ }
306
+ update();
307
+ return bodyResult;
308
+ });
309
+ return retval;
310
+ }
311
+ /**
312
+ * Evaluates a sequence of deferred parser commands in order.
313
+ * The final command's result is returned. Control-flow signals are not consumed here, allowing
314
+ * RETURN, BREAK, and CONTINUE to unwind to their enclosing function or loop boundary. An empty
315
+ * block retains the historical empty-vector result.
316
+ * @param args
317
+ * @returns
318
+ */
319
+ function BLOCK(...args) {
320
+ let retval = new Vector_1.Vector();
321
+ for (const arg of args) {
322
+ retval = arg();
323
+ }
324
+ return retval;
325
+ }
326
+ /**
327
+ * Evaluates one parser-dispatched function through the outer return boundary.
328
+ *
329
+ * Nested parser calls keep propagating RETURN. The outermost parser call consumes it when
330
+ * execution is not already inside a symbolic function.
331
+ */
332
+ function parserReturnBoundary(evaluate) {
333
+ const consumesReturn = symbolicFunctionDepth === 0 && parserReturnBoundaryDepth === 0;
334
+ let retval;
335
+ parserReturnBoundaryDepth++;
336
+ try {
337
+ retval = evaluate();
338
+ }
339
+ catch (error) {
340
+ if (consumesReturn && ReturnSignal.isReturnSignal(error)) {
341
+ retval = error.value;
342
+ }
343
+ else {
344
+ throw error;
345
+ }
346
+ }
347
+ finally {
348
+ parserReturnBoundaryDepth--;
349
+ }
350
+ return retval;
351
+ }
352
+ /** Evaluates BLOCK through the parser return boundary. */
353
+ function parserBlock(...args) {
354
+ return parserReturnBoundary(() => BLOCK(...args));
355
+ }
@@ -0,0 +1,10 @@
1
+ import type { ParserEntity } from '../../../types';
2
+ import type { DeferredFunctionArgument } from '../types';
3
+ /**
4
+ * Evaluates a deferred parser value and returns the resolved input if evaluation cannot complete.
5
+ */
6
+ export declare function evaluate(value: DeferredFunctionArgument, substitutions?: DeferredFunctionArgument, point?: DeferredFunctionArgument): ParserEntity;
7
+ /**
8
+ * Evaluates a parser value numerically at a finite significant-digit precision.
9
+ */
10
+ export declare function numeric(value: DeferredFunctionArgument, precision?: DeferredFunctionArgument): ParserEntity;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluate = evaluate;
4
+ exports.numeric = numeric;
5
+ const math_1 = require("../../../../math/math");
6
+ const errors_1 = require("../../../errors");
7
+ const Collection_1 = require("../../collection/Collection");
8
+ const Dictionary_1 = require("../../dictionary/Dictionary");
9
+ const Equation_1 = require("../../equation/Equation");
10
+ const Expression_1 = require("../../expression/Expression");
11
+ const utils_1 = require("../../expression/utils");
12
+ const Matrix_1 = require("../../matrix/Matrix");
13
+ const ValuesSet_1 = require("../../valuesSet/ValuesSet");
14
+ const Vector_1 = require("../../vector/Vector");
15
+ const constants_1 = require("../constants");
16
+ const EVALUATE_FUNCTION = 'evaluate';
17
+ /**
18
+ * Evaluates a deferred parser value and returns the resolved input if evaluation cannot complete.
19
+ */
20
+ function evaluate(value, substitutions, point) {
21
+ const input = value();
22
+ let values;
23
+ if (substitutions) {
24
+ const resolved = substitutions();
25
+ values = {};
26
+ if (point) {
27
+ const resolvedPoint = point();
28
+ if (!Vector_1.Vector.isVector(resolved)) {
29
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('vectorExpected', { type: constants_1.dataTypes[resolved.dataType] }));
30
+ }
31
+ if (!Vector_1.Vector.isVector(resolvedPoint)) {
32
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('vectorExpected', { type: constants_1.dataTypes[resolvedPoint.dataType] }));
33
+ }
34
+ if (resolved.count() !== resolvedPoint.count()) {
35
+ throw new errors_1.DimensionError((0, errors_1.message)('mismatchedDimensions', { function: EVALUATE_FUNCTION }));
36
+ }
37
+ for (let i = 0; i < resolved.count(); i++) {
38
+ const variable = resolved.elements[i];
39
+ if (!Expression_1.Expression.isExpression(variable)) {
40
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('expressionExpected', { type: constants_1.dataTypes[variable.dataType] }));
41
+ }
42
+ values[(0, utils_1.assertPlainVariableAndGetString)(variable)] = resolvedPoint.elements[i];
43
+ }
44
+ }
45
+ else {
46
+ if (!Dictionary_1.Dictionary.isDictionary(resolved)) {
47
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('unsupportedType', { type: constants_1.dataTypes[resolved.dataType] }));
48
+ }
49
+ for (const [name, substitution] of resolved) {
50
+ values[name] = substitution;
51
+ }
52
+ }
53
+ }
54
+ let retval = input;
55
+ try {
56
+ if (values &&
57
+ (Expression_1.Expression.isExpression(input) || Vector_1.Vector.isVector(input) || Matrix_1.Matrix.isMatrix(input))) {
58
+ retval = input.evaluate(values);
59
+ }
60
+ else {
61
+ retval = input.evaluate();
62
+ }
63
+ }
64
+ catch {
65
+ retval = input;
66
+ }
67
+ return retval;
68
+ }
69
+ function applyNumeric(value, precision) {
70
+ let retval;
71
+ if (Expression_1.Expression.isExpression(value)) {
72
+ retval = (0, math_1.numeric)(value, precision);
73
+ }
74
+ else if (Equation_1.Equation.isEquation(value)) {
75
+ retval = value.copy().each(e => Expression_1.Expression.isExpression(e) ? (0, math_1.numeric)(e, precision) : e);
76
+ }
77
+ else if (Vector_1.Vector.isVector(value)) {
78
+ retval = value.copy().each(e => applyNumeric(e, precision));
79
+ }
80
+ else if (Matrix_1.Matrix.isMatrix(value)) {
81
+ retval = value.copy().each(e => (0, math_1.numeric)(e, precision));
82
+ }
83
+ else if (Collection_1.Collection.isCollection(value)) {
84
+ retval = value.copy().each(e => applyNumeric(e, precision));
85
+ }
86
+ else if (Dictionary_1.Dictionary.isDictionary(value)) {
87
+ retval = value.copy().each(e => applyNumeric(e, precision));
88
+ }
89
+ else if (ValuesSet_1.ValuesSet.isValuesSet(value)) {
90
+ retval = value.copy().each(e => applyNumeric(e, precision));
91
+ }
92
+ else {
93
+ retval = value;
94
+ }
95
+ return retval;
96
+ }
97
+ /**
98
+ * Evaluates a parser value numerically at a finite significant-digit precision.
99
+ */
100
+ function numeric(value, precision) {
101
+ const input = value();
102
+ let digits;
103
+ if (precision) {
104
+ const resolved = precision();
105
+ if (!Expression_1.Expression.isExpression(resolved)) {
106
+ throw new errors_1.UnexpectedDataType((0, errors_1.message)('expressionExpected', { type: constants_1.dataTypes[resolved.dataType] }));
107
+ }
108
+ digits = resolved;
109
+ }
110
+ const retval = applyNumeric(input, digits);
111
+ return retval;
112
+ }
@@ -0,0 +1,14 @@
1
+ import type { ParserEntity } from '../../../types';
2
+ import type { DeferredFunctionArgument } from '../types';
3
+ /**
4
+ * Evaluates a symbolic user-function body with call-scoped argument bindings.
5
+ *
6
+ * Arguments temporarily shadow parser known values so ordinary assignment can update a
7
+ * function parameter during the call. Previous bindings are restored afterward, including
8
+ * when RETURN or another error unwinds evaluation. A string body is parsed per invocation;
9
+ * a deferred parser body reuses its compiled RPN while still resolving current parameter and
10
+ * known-value state. RETURN is consumed at the function boundary so its parser entity becomes
11
+ * the function result and cannot escape into the caller. BREAK and CONTINUE are also rejected
12
+ * at that boundary so loop control cannot cross a function call.
13
+ */
14
+ export declare function wrappedFunction(expression: string | DeferredFunctionArgument, argList: string[]): (...inputs: ParserEntity[]) => ParserEntity;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrappedFunction = wrappedFunction;
4
+ const Parser_1 = require("../Parser");
5
+ const controlFlow_1 = require("./controlFlow");
6
+ /**
7
+ * Evaluates a symbolic user-function body with call-scoped argument bindings.
8
+ *
9
+ * Arguments temporarily shadow parser known values so ordinary assignment can update a
10
+ * function parameter during the call. Previous bindings are restored afterward, including
11
+ * when RETURN or another error unwinds evaluation. A string body is parsed per invocation;
12
+ * a deferred parser body reuses its compiled RPN while still resolving current parameter and
13
+ * known-value state. RETURN is consumed at the function boundary so its parser entity becomes
14
+ * the function result and cannot escape into the caller. BREAK and CONTINUE are also rejected
15
+ * at that boundary so loop control cannot cross a function call.
16
+ */
17
+ function wrappedFunction(expression, argList) {
18
+ return (...inputs) => {
19
+ const previousValues = new Map();
20
+ const previouslyUndefined = new Set();
21
+ for (let i = 0; i < argList.length; i++) {
22
+ const name = argList[i];
23
+ if (!previousValues.has(name) && !previouslyUndefined.has(name)) {
24
+ if (Object.prototype.hasOwnProperty.call(Parser_1.Parser.KNOWN_VALUES, name)) {
25
+ previousValues.set(name, Parser_1.Parser.KNOWN_VALUES[name]);
26
+ }
27
+ else {
28
+ previouslyUndefined.add(name);
29
+ }
30
+ }
31
+ Parser_1.Parser.KNOWN_VALUES[name] = inputs[i];
32
+ }
33
+ let retval;
34
+ try {
35
+ retval = (0, controlFlow_1.functionBoundary)(() => {
36
+ let result;
37
+ if (typeof expression === 'string') {
38
+ result = Parser_1.Parser.parse(expression);
39
+ }
40
+ else {
41
+ // Function declarations should not capture temporary Parser.parse(..., values)
42
+ // substitutions from registration. Parameter and persistent known values are
43
+ // resolved from the current call instead.
44
+ result = expression({ inheritValues: false });
45
+ }
46
+ return result;
47
+ });
48
+ }
49
+ finally {
50
+ for (const [name, value] of previousValues) {
51
+ Parser_1.Parser.KNOWN_VALUES[name] = value;
52
+ }
53
+ for (const name of previouslyUndefined) {
54
+ delete Parser_1.Parser.KNOWN_VALUES[name];
55
+ }
56
+ }
57
+ return retval;
58
+ };
59
+ }
@@ -0,0 +1,35 @@
1
+ import { Scope } from '../../../common/classes/Scope';
2
+ import { Expression } from '../../expression/Expression';
3
+ import type { ExpressionInput, ParserEntity } from '../../../types';
4
+ import type { DeferredFunctionArgument } from '../types';
5
+ /**
6
+ * Adds a known value to a variable in the parser
7
+ * @param a
8
+ * @param b
9
+ */
10
+ export declare function assign(a: ExpressionInput, b: ParserEntity | string): ParserEntity;
11
+ /**
12
+ * Converts colon-style LET bindings into the alternating name/value scopes consumed by LET.
13
+ */
14
+ export declare function normalizeLetArguments(argumentScopes: Scope[]): Scope[];
15
+ /**
16
+ * Evaluates sequential local bindings and restores only those bindings after the body.
17
+ *
18
+ * Arguments are alternating variable/value pairs followed by a body expression. Each value
19
+ * is evaluated after earlier bindings have been installed, so later initializers can reference
20
+ * earlier locals. Ordinary assignment is reused for validation and storage. Any assignment to
21
+ * a name not declared by LET keeps its normal parser behavior.
22
+ *
23
+ * @param args Deferred variable/value pairs followed by the deferred body.
24
+ * @returns The body's result.
25
+ */
26
+ export declare function LET(...args: DeferredFunctionArgument[]): ParserEntity;
27
+ /**
28
+ * Removes a known parser value by variable name.
29
+ *
30
+ * Parser calls defer the argument so an assigned variable can be read as its name rather than
31
+ * substituted value. Direct callers may still pass an Expression or string.
32
+ *
33
+ * @param x Variable name or deferred variable-name expression.
34
+ */
35
+ export declare function unassign(x: Expression | string | DeferredFunctionArgument): Expression;