diff-grok 1.1.0 → 1.3.0

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 (487) hide show
  1. package/LICENSE +1 -1
  2. package/README.MD +80 -31
  3. package/dist/index.d.ts +6 -0
  4. package/{index.js → dist/index.js} +2 -1
  5. package/dist/index.js.map +1 -0
  6. package/dist/src/examples/basic-use.d.ts +10 -0
  7. package/dist/src/examples/basic-use.js.map +1 -0
  8. package/dist/src/examples/check-methods.d.ts +1 -0
  9. package/{src → dist/src}/examples/check-methods.js +15 -3
  10. package/dist/src/examples/check-methods.js.map +1 -0
  11. package/dist/src/examples/corr-probs.d.ts +15 -0
  12. package/{src → dist/src}/examples/corr-probs.js +2 -2
  13. package/dist/src/examples/corr-probs.js.map +1 -0
  14. package/dist/src/examples/cyclic-model.d.ts +6 -0
  15. package/dist/src/examples/cyclic-model.js.map +1 -0
  16. package/dist/src/examples/e5.d.ts +15 -0
  17. package/dist/src/examples/e5.js.map +1 -0
  18. package/dist/src/examples/hires.d.ts +15 -0
  19. package/dist/src/examples/hires.js.map +1 -0
  20. package/dist/src/examples/index.d.ts +22 -0
  21. package/dist/src/examples/index.js.map +1 -0
  22. package/dist/src/examples/model-updates.d.ts +6 -0
  23. package/dist/src/examples/model-updates.js.map +1 -0
  24. package/dist/src/examples/orego.d.ts +15 -0
  25. package/dist/src/examples/orego.js.map +1 -0
  26. package/dist/src/examples/pipeline-use.d.ts +6 -0
  27. package/dist/src/examples/pipeline-use.js.map +1 -0
  28. package/dist/src/examples/pollution.d.ts +15 -0
  29. package/dist/src/examples/pollution.js.map +1 -0
  30. package/{src/examples/print-benchmark.ts → dist/src/examples/print-benchmark.d.ts} +8 -58
  31. package/dist/src/examples/print-benchmark.js.map +1 -0
  32. package/dist/src/examples/robertson.d.ts +15 -0
  33. package/{src → dist/src}/examples/robertson.js +2 -2
  34. package/dist/src/examples/robertson.js.map +1 -0
  35. package/dist/src/examples/scripting.d.ts +1 -0
  36. package/dist/src/examples/scripting.js.map +1 -0
  37. package/dist/src/examples/vdpol.d.ts +15 -0
  38. package/dist/src/examples/vdpol.js.map +1 -0
  39. package/dist/src/latex-export/examples/advanced-to-latex.d.ts +2 -0
  40. package/dist/src/latex-export/examples/advanced-to-latex.js +41 -0
  41. package/dist/src/latex-export/examples/advanced-to-latex.js.map +1 -0
  42. package/dist/src/latex-export/examples/basic-to-latex.d.ts +2 -0
  43. package/dist/src/latex-export/examples/basic-to-latex.js +17 -0
  44. package/dist/src/latex-export/examples/basic-to-latex.js.map +1 -0
  45. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.d.ts +2 -0
  46. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js +145 -0
  47. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js.map +1 -0
  48. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.d.ts +2 -0
  49. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js +41 -0
  50. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js.map +1 -0
  51. package/dist/src/latex-export/examples/energy-n-control-to-markdown.d.ts +2 -0
  52. package/dist/src/latex-export/examples/energy-n-control-to-markdown.js +58 -0
  53. package/dist/src/latex-export/examples/energy-n-control-to-markdown.js.map +1 -0
  54. package/dist/src/latex-export/examples/extended-to-markdown.d.ts +2 -0
  55. package/dist/src/latex-export/examples/extended-to-markdown.js +37 -0
  56. package/dist/src/latex-export/examples/extended-to-markdown.js.map +1 -0
  57. package/dist/src/latex-export/examples/fermentation-to-latex.d.ts +2 -0
  58. package/dist/src/latex-export/examples/fermentation-to-latex.js +32 -0
  59. package/dist/src/latex-export/examples/fermentation-to-latex.js.map +1 -0
  60. package/dist/src/latex-export/examples/ga-production-to-markdown.d.ts +2 -0
  61. package/dist/src/latex-export/examples/ga-production-to-markdown.js +58 -0
  62. package/dist/src/latex-export/examples/ga-production-to-markdown.js.map +1 -0
  63. package/dist/src/latex-export/examples/nimotuzumab-to-latex.d.ts +2 -0
  64. package/dist/src/latex-export/examples/nimotuzumab-to-latex.js +53 -0
  65. package/dist/src/latex-export/examples/nimotuzumab-to-latex.js.map +1 -0
  66. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.d.ts +2 -0
  67. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js +50 -0
  68. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js.map +1 -0
  69. package/dist/src/latex-export/examples/pk-to-markdown.d.ts +2 -0
  70. package/dist/src/latex-export/examples/pk-to-markdown.js +35 -0
  71. package/dist/src/latex-export/examples/pk-to-markdown.js.map +1 -0
  72. package/dist/src/latex-export/examples/pollution-to-latex.d.ts +2 -0
  73. package/dist/src/latex-export/examples/pollution-to-latex.js +141 -0
  74. package/dist/src/latex-export/examples/pollution-to-latex.js.map +1 -0
  75. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.d.ts +2 -0
  76. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js +25 -0
  77. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js.map +1 -0
  78. package/dist/src/latex-export/generator/bracket-manager.d.ts +19 -0
  79. package/dist/src/latex-export/generator/bracket-manager.js +58 -0
  80. package/dist/src/latex-export/generator/bracket-manager.js.map +1 -0
  81. package/dist/src/latex-export/generator/document-builder.d.ts +13 -0
  82. package/dist/src/latex-export/generator/document-builder.js +433 -0
  83. package/dist/src/latex-export/generator/document-builder.js.map +1 -0
  84. package/dist/src/latex-export/generator/latex-generator.d.ts +23 -0
  85. package/dist/src/latex-export/generator/latex-generator.js +176 -0
  86. package/dist/src/latex-export/generator/latex-generator.js.map +1 -0
  87. package/dist/src/latex-export/index.d.ts +8 -0
  88. package/dist/src/latex-export/index.js +25 -0
  89. package/dist/src/latex-export/index.js.map +1 -0
  90. package/dist/src/latex-export/output/md-formatter.d.ts +16 -0
  91. package/dist/src/latex-export/output/md-formatter.js +27 -0
  92. package/dist/src/latex-export/output/md-formatter.js.map +1 -0
  93. package/dist/src/latex-export/output/tex-formatter.d.ts +5 -0
  94. package/dist/src/latex-export/output/tex-formatter.js +20 -0
  95. package/dist/src/latex-export/output/tex-formatter.js.map +1 -0
  96. package/dist/src/latex-export/parser/ast-parser.d.ts +7 -0
  97. package/dist/src/latex-export/parser/ast-parser.js +153 -0
  98. package/dist/src/latex-export/parser/ast-parser.js.map +1 -0
  99. package/dist/src/latex-export/parser/ivp-parser.d.ts +6 -0
  100. package/dist/src/latex-export/parser/ivp-parser.js +219 -0
  101. package/dist/src/latex-export/parser/ivp-parser.js.map +1 -0
  102. package/dist/src/latex-export/parser/line-joiner.d.ts +25 -0
  103. package/dist/src/latex-export/parser/line-joiner.js +80 -0
  104. package/dist/src/latex-export/parser/line-joiner.js.map +1 -0
  105. package/dist/src/latex-export/parser/tokenizer.d.ts +7 -0
  106. package/dist/src/latex-export/parser/tokenizer.js +143 -0
  107. package/dist/src/latex-export/parser/tokenizer.js.map +1 -0
  108. package/dist/src/latex-export/transformer/functions.d.ts +12 -0
  109. package/dist/src/latex-export/transformer/functions.js +47 -0
  110. package/dist/src/latex-export/transformer/functions.js.map +1 -0
  111. package/dist/src/latex-export/transformer/identifier.d.ts +23 -0
  112. package/dist/src/latex-export/transformer/identifier.js +194 -0
  113. package/dist/src/latex-export/transformer/identifier.js.map +1 -0
  114. package/dist/src/latex-export/transformer/operators.d.ts +9 -0
  115. package/dist/src/latex-export/transformer/operators.js +41 -0
  116. package/dist/src/latex-export/transformer/operators.js.map +1 -0
  117. package/dist/src/latex-export/types.d.ts +122 -0
  118. package/dist/src/latex-export/types.js +10 -0
  119. package/dist/src/latex-export/types.js.map +1 -0
  120. package/{src/pipeline/basic-pipeline-creator.ts → dist/src/pipeline/basic-pipeline-creator.d.ts} +11 -28
  121. package/dist/src/pipeline/basic-pipeline-creator.js.map +1 -0
  122. package/dist/src/pipeline/constants.d.ts +14 -0
  123. package/dist/src/pipeline/constants.js.map +1 -0
  124. package/dist/src/pipeline/index.d.ts +7 -0
  125. package/dist/src/pipeline/index.js.map +1 -0
  126. package/dist/src/pipeline/input.d.ts +3 -0
  127. package/dist/src/pipeline/input.js.map +1 -0
  128. package/dist/src/pipeline/loops-pipeline-creator.d.ts +124 -0
  129. package/dist/src/pipeline/loops-pipeline-creator.js.map +1 -0
  130. package/dist/src/pipeline/output.d.ts +10 -0
  131. package/{src → dist/src}/pipeline/output.js +1 -1
  132. package/dist/src/pipeline/output.js.map +1 -0
  133. package/dist/src/pipeline/pipeline-creator.d.ts +12 -0
  134. package/{src → dist/src}/pipeline/pipeline-creator.js +2 -0
  135. package/dist/src/pipeline/pipeline-creator.js.map +1 -0
  136. package/{src/pipeline/pipeline.ts → dist/src/pipeline/pipeline.d.ts} +10 -97
  137. package/dist/src/pipeline/pipeline.js.map +1 -0
  138. package/{src/pipeline/updates-pipeline-creator.ts → dist/src/pipeline/updates-pipeline-creator.d.ts} +15 -131
  139. package/dist/src/pipeline/updates-pipeline-creator.js.map +1 -0
  140. package/dist/src/scripting-tools/constants.d.ts +59 -0
  141. package/dist/src/scripting-tools/constants.js.map +1 -0
  142. package/dist/src/scripting-tools/index.d.ts +3 -0
  143. package/dist/src/scripting-tools/index.js.map +1 -0
  144. package/dist/src/scripting-tools/model-error.d.ts +10 -0
  145. package/{src → dist/src}/scripting-tools/model-error.js +2 -1
  146. package/dist/src/scripting-tools/model-error.js.map +1 -0
  147. package/dist/src/scripting-tools/scripting-tools.d.ts +277 -0
  148. package/{src → dist/src}/scripting-tools/scripting-tools.js +2 -4
  149. package/dist/src/scripting-tools/scripting-tools.js.map +1 -0
  150. package/dist/src/solver-tools/ab4-method.d.ts +46 -0
  151. package/{src → dist/src}/solver-tools/ab4-method.js +3 -3
  152. package/dist/src/solver-tools/ab4-method.js.map +1 -0
  153. package/dist/src/solver-tools/ab5-method.d.ts +46 -0
  154. package/{src → dist/src}/solver-tools/ab5-method.js +3 -3
  155. package/dist/src/solver-tools/ab5-method.js.map +1 -0
  156. package/dist/src/solver-tools/callbacks/callback-base.d.ts +8 -0
  157. package/dist/src/solver-tools/callbacks/callback-base.js.map +1 -0
  158. package/dist/src/solver-tools/callbacks/callback-tools.d.ts +6 -0
  159. package/dist/src/solver-tools/callbacks/callback-tools.js.map +1 -0
  160. package/dist/src/solver-tools/callbacks/iter-checker-callback.d.ts +12 -0
  161. package/{src → dist/src}/solver-tools/callbacks/iter-checker-callback.js +2 -0
  162. package/dist/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -0
  163. package/dist/src/solver-tools/callbacks/time-checker-callback.d.ts +12 -0
  164. package/{src → dist/src}/solver-tools/callbacks/time-checker-callback.js +2 -2
  165. package/dist/src/solver-tools/callbacks/time-checker-callback.js.map +1 -0
  166. package/dist/src/solver-tools/cvode/common.d.ts +395 -0
  167. package/dist/src/solver-tools/cvode/common.js +483 -0
  168. package/dist/src/solver-tools/cvode/common.js.map +1 -0
  169. package/dist/src/solver-tools/cvode/cvode.d.ts +23 -0
  170. package/dist/src/solver-tools/cvode/cvode.js +1062 -0
  171. package/dist/src/solver-tools/cvode/cvode.js.map +1 -0
  172. package/dist/src/solver-tools/cvode/cvode_adams.d.ts +22 -0
  173. package/dist/src/solver-tools/cvode/cvode_adams.js +124 -0
  174. package/dist/src/solver-tools/cvode/cvode_adams.js.map +1 -0
  175. package/dist/src/solver-tools/cvode/cvode_bdf.d.ts +37 -0
  176. package/dist/src/solver-tools/cvode/cvode_bdf.js +153 -0
  177. package/dist/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
  178. package/dist/src/solver-tools/cvode/cvode_class.d.ts +116 -0
  179. package/dist/src/solver-tools/cvode/cvode_class.js +163 -0
  180. package/dist/src/solver-tools/cvode/cvode_class.js.map +1 -0
  181. package/dist/src/solver-tools/cvode/cvode_hin.d.ts +24 -0
  182. package/dist/src/solver-tools/cvode/cvode_hin.js +119 -0
  183. package/dist/src/solver-tools/cvode/cvode_hin.js.map +1 -0
  184. package/dist/src/solver-tools/cvode/cvode_io.d.ts +98 -0
  185. package/dist/src/solver-tools/cvode/cvode_io.js +202 -0
  186. package/dist/src/solver-tools/cvode/cvode_io.js.map +1 -0
  187. package/dist/src/solver-tools/cvode/cvode_ls.d.ts +23 -0
  188. package/dist/src/solver-tools/cvode/cvode_ls.js +210 -0
  189. package/dist/src/solver-tools/cvode/cvode_ls.js.map +1 -0
  190. package/dist/src/solver-tools/cvode/cvode_nls.d.ts +25 -0
  191. package/dist/src/solver-tools/cvode/cvode_nls.js +220 -0
  192. package/dist/src/solver-tools/cvode/cvode_nls.js.map +1 -0
  193. package/dist/src/solver-tools/cvode/cvode_root.d.ts +64 -0
  194. package/dist/src/solver-tools/cvode/cvode_root.js +415 -0
  195. package/dist/src/solver-tools/cvode/cvode_root.js.map +1 -0
  196. package/dist/src/solver-tools/cvode/dense_linalg.d.ts +50 -0
  197. package/dist/src/solver-tools/cvode/dense_linalg.js +131 -0
  198. package/dist/src/solver-tools/cvode/dense_linalg.js.map +1 -0
  199. package/dist/src/solver-tools/cvode/index.d.ts +24 -0
  200. package/dist/src/solver-tools/cvode/index.js +26 -0
  201. package/dist/src/solver-tools/cvode/index.js.map +1 -0
  202. package/dist/src/solver-tools/cvode-method.d.ts +47 -0
  203. package/dist/src/solver-tools/cvode-method.js +114 -0
  204. package/dist/src/solver-tools/cvode-method.js.map +1 -0
  205. package/dist/src/solver-tools/index.d.ts +16 -0
  206. package/{src → dist/src}/solver-tools/index.js +1 -0
  207. package/dist/src/solver-tools/index.js.map +1 -0
  208. package/dist/src/solver-tools/lin-alg-tools.d.ts +6 -0
  209. package/dist/src/solver-tools/lin-alg-tools.js.map +1 -0
  210. package/dist/src/solver-tools/lsoda/blas.d.ts +59 -0
  211. package/{src → dist/src}/solver-tools/lsoda/blas.js +11 -0
  212. package/dist/src/solver-tools/lsoda/blas.js.map +1 -0
  213. package/dist/src/solver-tools/lsoda/cfode.d.ts +18 -0
  214. package/{src → dist/src}/solver-tools/lsoda/cfode.js +11 -0
  215. package/dist/src/solver-tools/lsoda/cfode.js.map +1 -0
  216. package/dist/src/solver-tools/lsoda/common.d.ts +85 -0
  217. package/dist/src/solver-tools/lsoda/common.js +96 -0
  218. package/dist/src/solver-tools/lsoda/common.js.map +1 -0
  219. package/dist/src/solver-tools/lsoda/corfailure.d.ts +18 -0
  220. package/{src → dist/src}/solver-tools/lsoda/corfailure.js +11 -0
  221. package/dist/src/solver-tools/lsoda/corfailure.js.map +1 -0
  222. package/dist/src/solver-tools/lsoda/correction.d.ts +23 -0
  223. package/{src → dist/src}/solver-tools/lsoda/correction.js +11 -0
  224. package/dist/src/solver-tools/lsoda/correction.js.map +1 -0
  225. package/dist/src/solver-tools/lsoda/dense.d.ts +47 -0
  226. package/{src → dist/src}/solver-tools/lsoda/dense.js +13 -0
  227. package/dist/src/solver-tools/lsoda/dense.js.map +1 -0
  228. package/dist/src/solver-tools/lsoda/index.d.ts +16 -0
  229. package/dist/src/solver-tools/lsoda/index.js +15 -0
  230. package/dist/src/solver-tools/lsoda/index.js.map +1 -0
  231. package/dist/src/solver-tools/lsoda/intdy.d.ts +19 -0
  232. package/{src → dist/src}/solver-tools/lsoda/intdy.js +11 -0
  233. package/dist/src/solver-tools/lsoda/intdy.js.map +1 -0
  234. package/dist/src/solver-tools/lsoda/lsoda.d.ts +66 -0
  235. package/{src → dist/src}/solver-tools/lsoda/lsoda.js +24 -5
  236. package/dist/src/solver-tools/lsoda/lsoda.js.map +1 -0
  237. package/dist/src/solver-tools/lsoda/methodswitch.d.ts +21 -0
  238. package/{src → dist/src}/solver-tools/lsoda/methodswitch.js +11 -0
  239. package/dist/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  240. package/dist/src/solver-tools/lsoda/orderswitch.d.ts +21 -0
  241. package/{src → dist/src}/solver-tools/lsoda/orderswitch.js +11 -0
  242. package/dist/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  243. package/dist/src/solver-tools/lsoda/prja.d.ts +18 -0
  244. package/{src → dist/src}/solver-tools/lsoda/prja.js +11 -0
  245. package/dist/src/solver-tools/lsoda/prja.js.map +1 -0
  246. package/dist/src/solver-tools/lsoda/scaleh.d.ts +16 -0
  247. package/{src → dist/src}/solver-tools/lsoda/scaleh.js +11 -0
  248. package/dist/src/solver-tools/lsoda/scaleh.js.map +1 -0
  249. package/dist/src/solver-tools/lsoda/solsy.d.ts +17 -0
  250. package/dist/src/solver-tools/lsoda/solsy.js +25 -0
  251. package/dist/src/solver-tools/lsoda/solsy.js.map +1 -0
  252. package/dist/src/solver-tools/lsoda/stoda.d.ts +19 -0
  253. package/{src → dist/src}/solver-tools/lsoda/stoda.js +11 -0
  254. package/dist/src/solver-tools/lsoda/stoda.js.map +1 -0
  255. package/dist/src/solver-tools/lsoda-method.d.ts +46 -0
  256. package/{src → dist/src}/solver-tools/lsoda-method.js +23 -9
  257. package/dist/src/solver-tools/lsoda-method.js.map +1 -0
  258. package/dist/src/solver-tools/mrt-method.d.ts +47 -0
  259. package/{src → dist/src}/solver-tools/mrt-method.js +2 -2
  260. package/dist/src/solver-tools/mrt-method.js.map +1 -0
  261. package/dist/src/solver-tools/rk3-method.d.ts +46 -0
  262. package/{src → dist/src}/solver-tools/rk3-method.js +2 -2
  263. package/dist/src/solver-tools/rk3-method.js.map +1 -0
  264. package/dist/src/solver-tools/rk4-method.d.ts +46 -0
  265. package/{src → dist/src}/solver-tools/rk4-method.js +2 -2
  266. package/dist/src/solver-tools/rk4-method.js.map +1 -0
  267. package/dist/src/solver-tools/rkdp-method.d.ts +46 -0
  268. package/{src → dist/src}/solver-tools/rkdp-method.js +2 -2
  269. package/dist/src/solver-tools/rkdp-method.js.map +1 -0
  270. package/dist/src/solver-tools/ros34prw-method.d.ts +46 -0
  271. package/{src → dist/src}/solver-tools/ros34prw-method.js +2 -2
  272. package/dist/src/solver-tools/ros34prw-method.js.map +1 -0
  273. package/dist/src/solver-tools/ros3prw-method.d.ts +46 -0
  274. package/{src → dist/src}/solver-tools/ros3prw-method.js +2 -2
  275. package/dist/src/solver-tools/ros3prw-method.js.map +1 -0
  276. package/{src/solver-tools/solver-defs.ts → dist/src/solver-tools/solver-defs.d.ts} +45 -84
  277. package/{src → dist/src}/solver-tools/solver-defs.js +1 -0
  278. package/dist/src/solver-tools/solver-defs.js.map +1 -0
  279. package/dist/src/worker-tools/index.d.ts +2 -0
  280. package/dist/src/worker-tools/index.js.map +1 -0
  281. package/{src/worker-tools/scripting.ts → dist/src/worker-tools/scripting.d.ts} +9 -91
  282. package/dist/src/worker-tools/scripting.js.map +1 -0
  283. package/dist/src/worker-tools/solving.d.ts +7 -0
  284. package/{src → dist/src}/worker-tools/solving.js +3 -1
  285. package/dist/src/worker-tools/solving.js.map +1 -0
  286. package/package.json +13 -12
  287. package/.claude/settings.local.json +0 -11
  288. package/.eslintrc.json +0 -45
  289. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
  290. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  291. package/.github/PULL_REQUEST_TEMPLATE.md +0 -22
  292. package/.github/scripts/bump-js-api-version.sh +0 -106
  293. package/.github/scripts/check-output.sh +0 -20
  294. package/.github/scripts/iac-cfn-deploy.sh +0 -90
  295. package/.github/scripts/slack_api_request.sh +0 -65
  296. package/.github/scripts/test_package.sh +0 -270
  297. package/.github/workflows/deploy-docs.yml +0 -15
  298. package/.github/workflows/libraries.yaml +0 -305
  299. package/.github/workflows/test.yaml +0 -19
  300. package/CLAUDE.md +0 -98
  301. package/CONTRIBUTING.md +0 -74
  302. package/eslintrc.json +0 -45
  303. package/images/E5.png +0 -0
  304. package/images/HIRES.png +0 -0
  305. package/images/OREGO.png +0 -0
  306. package/images/POLL-full.png +0 -0
  307. package/images/POLL.png +0 -0
  308. package/images/ROBER.png +0 -0
  309. package/images/VDP0L.png +0 -0
  310. package/images/VDPOL.png +0 -0
  311. package/images/acid-prod.gif +0 -0
  312. package/index.js.map +0 -1
  313. package/index.ts +0 -17
  314. package/jest.config.js +0 -13
  315. package/src/examples/basic-use.js.map +0 -1
  316. package/src/examples/basic-use.ts +0 -44
  317. package/src/examples/bioreactor.js +0 -125
  318. package/src/examples/bioreactor.js.map +0 -1
  319. package/src/examples/bioreactor.ts +0 -132
  320. package/src/examples/check-methods.js.map +0 -1
  321. package/src/examples/check-methods.ts +0 -81
  322. package/src/examples/corr-probs.js.map +0 -1
  323. package/src/examples/corr-probs.ts +0 -155
  324. package/src/examples/cyclic-model.js.map +0 -1
  325. package/src/examples/cyclic-model.ts +0 -112
  326. package/src/examples/e5.js.map +0 -1
  327. package/src/examples/e5.ts +0 -36
  328. package/src/examples/hires.js.map +0 -1
  329. package/src/examples/hires.ts +0 -40
  330. package/src/examples/index.js.map +0 -1
  331. package/src/examples/index.ts +0 -34
  332. package/src/examples/model-updates.js.map +0 -1
  333. package/src/examples/model-updates.ts +0 -122
  334. package/src/examples/orego.js.map +0 -1
  335. package/src/examples/orego.ts +0 -25
  336. package/src/examples/pipeline-use.js.map +0 -1
  337. package/src/examples/pipeline-use.ts +0 -98
  338. package/src/examples/pollution.js.map +0 -1
  339. package/src/examples/pollution.ts +0 -133
  340. package/src/examples/print-benchmark.js.map +0 -1
  341. package/src/examples/robertson.js.map +0 -1
  342. package/src/examples/robertson.ts +0 -19
  343. package/src/examples/scripting.js.map +0 -1
  344. package/src/examples/scripting.ts +0 -35
  345. package/src/examples/vdpol.js.map +0 -1
  346. package/src/examples/vdpol.ts +0 -17
  347. package/src/pipeline/basic-pipeline-creator.js.map +0 -1
  348. package/src/pipeline/constants.js.map +0 -1
  349. package/src/pipeline/constants.ts +0 -21
  350. package/src/pipeline/index.js.map +0 -1
  351. package/src/pipeline/index.ts +0 -7
  352. package/src/pipeline/input.js.map +0 -1
  353. package/src/pipeline/input.ts +0 -55
  354. package/src/pipeline/loops-pipeline-creator.js.map +0 -1
  355. package/src/pipeline/loops-pipeline-creator.ts +0 -252
  356. package/src/pipeline/output.js.map +0 -1
  357. package/src/pipeline/output.ts +0 -201
  358. package/src/pipeline/pipeline-creator.js.map +0 -1
  359. package/src/pipeline/pipeline-creator.ts +0 -20
  360. package/src/pipeline/pipeline.js.map +0 -1
  361. package/src/pipeline/updates-pipeline-creator.js.map +0 -1
  362. package/src/scripting-tools/constants.js.map +0 -1
  363. package/src/scripting-tools/constants.ts +0 -69
  364. package/src/scripting-tools/index.js.map +0 -1
  365. package/src/scripting-tools/index.ts +0 -8
  366. package/src/scripting-tools/model-error.js.map +0 -1
  367. package/src/scripting-tools/model-error.ts +0 -21
  368. package/src/scripting-tools/scripting-tools.js.map +0 -1
  369. package/src/scripting-tools/scripting-tools.ts +0 -1582
  370. package/src/solver-tools/ab4-method.js.map +0 -1
  371. package/src/solver-tools/ab4-method.ts +0 -395
  372. package/src/solver-tools/ab5-method.js.map +0 -1
  373. package/src/solver-tools/ab5-method.ts +0 -397
  374. package/src/solver-tools/callbacks/callback-base.js.map +0 -1
  375. package/src/solver-tools/callbacks/callback-base.ts +0 -12
  376. package/src/solver-tools/callbacks/callback-tools.js.map +0 -1
  377. package/src/solver-tools/callbacks/callback-tools.ts +0 -22
  378. package/src/solver-tools/callbacks/iter-checker-callback.js.map +0 -1
  379. package/src/solver-tools/callbacks/iter-checker-callback.ts +0 -25
  380. package/src/solver-tools/callbacks/time-checker-callback.js.map +0 -1
  381. package/src/solver-tools/callbacks/time-checker-callback.ts +0 -23
  382. package/src/solver-tools/index.js.map +0 -1
  383. package/src/solver-tools/index.ts +0 -15
  384. package/src/solver-tools/lin-alg-tools.js.map +0 -1
  385. package/src/solver-tools/lin-alg-tools.ts +0 -75
  386. package/src/solver-tools/lsoda/blas.js.map +0 -1
  387. package/src/solver-tools/lsoda/blas.ts +0 -267
  388. package/src/solver-tools/lsoda/cfode.js.map +0 -1
  389. package/src/solver-tools/lsoda/cfode.ts +0 -83
  390. package/src/solver-tools/lsoda/common.js +0 -94
  391. package/src/solver-tools/lsoda/common.js.map +0 -1
  392. package/src/solver-tools/lsoda/common.ts +0 -135
  393. package/src/solver-tools/lsoda/corfailure.js.map +0 -1
  394. package/src/solver-tools/lsoda/corfailure.ts +0 -30
  395. package/src/solver-tools/lsoda/correction.js.map +0 -1
  396. package/src/solver-tools/lsoda/correction.ts +0 -119
  397. package/src/solver-tools/lsoda/dense.js.map +0 -1
  398. package/src/solver-tools/lsoda/dense.ts +0 -129
  399. package/src/solver-tools/lsoda/index.js +0 -4
  400. package/src/solver-tools/lsoda/index.js.map +0 -1
  401. package/src/solver-tools/lsoda/index.ts +0 -5
  402. package/src/solver-tools/lsoda/intdy.js.map +0 -1
  403. package/src/solver-tools/lsoda/intdy.ts +0 -50
  404. package/src/solver-tools/lsoda/lsoda.js.map +0 -1
  405. package/src/solver-tools/lsoda/lsoda.ts +0 -632
  406. package/src/solver-tools/lsoda/methodswitch.js.map +0 -1
  407. package/src/solver-tools/lsoda/methodswitch.ts +0 -107
  408. package/src/solver-tools/lsoda/orderswitch.js.map +0 -1
  409. package/src/solver-tools/lsoda/orderswitch.ts +0 -95
  410. package/src/solver-tools/lsoda/prja.js.map +0 -1
  411. package/src/solver-tools/lsoda/prja.ts +0 -49
  412. package/src/solver-tools/lsoda/scaleh.js.map +0 -1
  413. package/src/solver-tools/lsoda/scaleh.ts +0 -33
  414. package/src/solver-tools/lsoda/solsy.js +0 -14
  415. package/src/solver-tools/lsoda/solsy.js.map +0 -1
  416. package/src/solver-tools/lsoda/solsy.ts +0 -18
  417. package/src/solver-tools/lsoda/stoda.js.map +0 -1
  418. package/src/solver-tools/lsoda/stoda.ts +0 -286
  419. package/src/solver-tools/lsoda-method.js.map +0 -1
  420. package/src/solver-tools/lsoda-method.ts +0 -136
  421. package/src/solver-tools/mrt-method.js.map +0 -1
  422. package/src/solver-tools/mrt-method.ts +0 -398
  423. package/src/solver-tools/rk3-method.js.map +0 -1
  424. package/src/solver-tools/rk3-method.ts +0 -257
  425. package/src/solver-tools/rk4-method.js.map +0 -1
  426. package/src/solver-tools/rk4-method.ts +0 -286
  427. package/src/solver-tools/rkdp-method.js.map +0 -1
  428. package/src/solver-tools/rkdp-method.ts +0 -300
  429. package/src/solver-tools/ros34prw-method.js.map +0 -1
  430. package/src/solver-tools/ros34prw-method.ts +0 -373
  431. package/src/solver-tools/ros3prw-method.js.map +0 -1
  432. package/src/solver-tools/ros3prw-method.ts +0 -342
  433. package/src/solver-tools/solver-defs.js.map +0 -1
  434. package/src/tests/correctness.test.js +0 -15
  435. package/src/tests/correctness.test.js.map +0 -1
  436. package/src/tests/correctness.test.ts +0 -16
  437. package/src/tests/lsoda-lib-correctness.test.js +0 -223
  438. package/src/tests/lsoda-lib-correctness.test.js.map +0 -1
  439. package/src/tests/lsoda-lib-correctness.test.ts +0 -283
  440. package/src/tests/lsoda-lib-performance.test.js +0 -95
  441. package/src/tests/lsoda-lib-performance.test.js.map +0 -1
  442. package/src/tests/lsoda-lib-performance.test.ts +0 -126
  443. package/src/tests/performance.test.js +0 -16
  444. package/src/tests/performance.test.js.map +0 -1
  445. package/src/tests/performance.test.ts +0 -17
  446. package/src/tests/pipeline.test.js +0 -10
  447. package/src/tests/pipeline.test.js.map +0 -1
  448. package/src/tests/pipeline.test.ts +0 -11
  449. package/src/tests/test-defs.js +0 -207
  450. package/src/tests/test-defs.js.map +0 -1
  451. package/src/tests/test-defs.ts +0 -225
  452. package/src/tests/test-utils.js +0 -28
  453. package/src/tests/test-utils.js.map +0 -1
  454. package/src/tests/test-utils.ts +0 -37
  455. package/src/worker-tools/index.js.map +0 -1
  456. package/src/worker-tools/index.ts +0 -2
  457. package/src/worker-tools/scripting.js.map +0 -1
  458. package/src/worker-tools/solving.js.map +0 -1
  459. package/src/worker-tools/solving.ts +0 -83
  460. package/tsconfig.json +0 -71
  461. package/typedoc.json +0 -8
  462. /package/{src → dist/src}/examples/basic-use.js +0 -0
  463. /package/{src → dist/src}/examples/cyclic-model.js +0 -0
  464. /package/{src → dist/src}/examples/e5.js +0 -0
  465. /package/{src → dist/src}/examples/hires.js +0 -0
  466. /package/{src → dist/src}/examples/index.js +0 -0
  467. /package/{src → dist/src}/examples/model-updates.js +0 -0
  468. /package/{src → dist/src}/examples/orego.js +0 -0
  469. /package/{src → dist/src}/examples/pipeline-use.js +0 -0
  470. /package/{src → dist/src}/examples/pollution.js +0 -0
  471. /package/{src → dist/src}/examples/print-benchmark.js +0 -0
  472. /package/{src → dist/src}/examples/scripting.js +0 -0
  473. /package/{src → dist/src}/examples/vdpol.js +0 -0
  474. /package/{src → dist/src}/pipeline/basic-pipeline-creator.js +0 -0
  475. /package/{src → dist/src}/pipeline/constants.js +0 -0
  476. /package/{src → dist/src}/pipeline/index.js +0 -0
  477. /package/{src → dist/src}/pipeline/input.js +0 -0
  478. /package/{src → dist/src}/pipeline/loops-pipeline-creator.js +0 -0
  479. /package/{src → dist/src}/pipeline/pipeline.js +0 -0
  480. /package/{src → dist/src}/pipeline/updates-pipeline-creator.js +0 -0
  481. /package/{src → dist/src}/scripting-tools/constants.js +0 -0
  482. /package/{src → dist/src}/scripting-tools/index.js +0 -0
  483. /package/{src → dist/src}/solver-tools/callbacks/callback-base.js +0 -0
  484. /package/{src → dist/src}/solver-tools/callbacks/callback-tools.js +0 -0
  485. /package/{src → dist/src}/solver-tools/lin-alg-tools.js +0 -0
  486. /package/{src → dist/src}/worker-tools/index.js +0 -0
  487. /package/{src → dist/src}/worker-tools/scripting.js +0 -0
@@ -0,0 +1,80 @@
1
+ /* Line preprocessor: strips comments, annotations, and joins multi-line formulas. */
2
+ /** Remove everything from `//` to end of line.
3
+ * @param line raw line of text
4
+ * @returns line with comment removed
5
+ */
6
+ export function stripComments(line) {
7
+ const idx = line.indexOf('//');
8
+ if (idx === -1)
9
+ return line;
10
+ return line.substring(0, idx).trimEnd();
11
+ }
12
+ /** Remove `{...}` annotation blocks and `[...]` tooltip blocks from a line.
13
+ * @param line line containing annotations
14
+ * @returns line with only the name = value portion
15
+ */
16
+ export function stripAnnotations(line) {
17
+ return line.replace(/\s*\{[^}]*\}/, '').replace(/\s*\[[^\]]*\]/, '').trimEnd();
18
+ }
19
+ /** Parse `{key1: val1; key2: val2}` annotation string into a Record.
20
+ * @param annotation annotation string including braces
21
+ * @returns key-value pairs (units, caption, category, min, max, step)
22
+ */
23
+ export function parseAnnotations(annotation) {
24
+ const result = {};
25
+ // Remove surrounding braces
26
+ const inner = annotation.replace(/^\{|\}$/g, '').trim();
27
+ if (!inner)
28
+ return result;
29
+ const pairs = inner.split(';');
30
+ for (const pair of pairs) {
31
+ const colonIdx = pair.indexOf(':');
32
+ if (colonIdx === -1)
33
+ continue;
34
+ const key = pair.substring(0, colonIdx).trim();
35
+ const val = pair.substring(colonIdx + 1).trim();
36
+ if (key)
37
+ result[key] = val;
38
+ }
39
+ return result;
40
+ }
41
+ /** Extract tooltip text from `[...]` at the end of a line.
42
+ * @param line line that may contain a tooltip
43
+ * @returns tooltip text or undefined
44
+ */
45
+ export function parseTooltip(line) {
46
+ const match = line.match(/\[([^\]]*)\]\s*$/);
47
+ return match ? match[1] : undefined;
48
+ }
49
+ /** Join multi-line formulas (continuation lines without top-level `=`).
50
+ * @param lines pre-stripped lines (comments already removed)
51
+ * @returns array of joined formula strings
52
+ */
53
+ export function joinMultiLineFormulas(lines) {
54
+ const result = [];
55
+ for (const line of lines) {
56
+ if (line.trim() === '')
57
+ continue;
58
+ const isIndented = /^\s/.test(line);
59
+ const hasTopLevelEquals = hasTopLevelEqual(line);
60
+ if (isIndented && !hasTopLevelEquals && result.length > 0)
61
+ result[result.length - 1] += ' ' + line.trim();
62
+ else
63
+ result.push(line);
64
+ }
65
+ return result;
66
+ }
67
+ /** Check if a line contains `=` at the top level (outside parentheses). */
68
+ function hasTopLevelEqual(line) {
69
+ let depth = 0;
70
+ for (let i = 0; i < line.length; i++) {
71
+ if (line[i] === '(')
72
+ depth++;
73
+ else if (line[i] === ')')
74
+ depth--;
75
+ else if (line[i] === '=' && depth === 0)
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+ //# sourceMappingURL=line-joiner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-joiner.js","sourceRoot":"","sources":["../../../../src/latex-export/parser/line-joiner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Token } from '../types';
2
+ export type { Token } from '../types';
3
+ /** Tokenize a mathematical expression string.
4
+ * @param expr expression string (RHS of a formula)
5
+ * @returns array of tokens
6
+ */
7
+ export declare function tokenize(expr: string): Token[];
@@ -0,0 +1,143 @@
1
+ /* Expression tokenizer: converts a mathematical expression string into a flat array of tokens. */
2
+ /** Tokenize a mathematical expression string.
3
+ * @param expr expression string (RHS of a formula)
4
+ * @returns array of tokens
5
+ */
6
+ export function tokenize(expr) {
7
+ const tokens = [];
8
+ let i = 0;
9
+ const len = expr.length;
10
+ while (i < len) {
11
+ const ch = expr[i];
12
+ // Skip whitespace
13
+ if (ch === ' ' || ch === '\t' || ch === '\r' || ch === '\n') {
14
+ i++;
15
+ continue;
16
+ }
17
+ // Numbers: digits or dot followed by digit
18
+ if (isDigit(ch) || (ch === '.' && i + 1 < len && isDigit(expr[i + 1]))) {
19
+ const start = i;
20
+ // Integer part
21
+ while (i < len && isDigit(expr[i]))
22
+ i++;
23
+ // Decimal part
24
+ if (i < len && expr[i] === '.' && i + 1 < len && isDigit(expr[i + 1])) {
25
+ i++; // skip dot
26
+ while (i < len && isDigit(expr[i]))
27
+ i++;
28
+ }
29
+ // Scientific notation: e/E followed by optional +/- and digits
30
+ if (i < len && (expr[i] === 'e' || expr[i] === 'E')) {
31
+ const next = i + 1 < len ? expr[i + 1] : '';
32
+ if (isDigit(next) || ((next === '-' || next === '+') && i + 2 < len && isDigit(expr[i + 2]))) {
33
+ i++; // skip e/E
34
+ if (expr[i] === '-' || expr[i] === '+')
35
+ i++; // skip sign
36
+ while (i < len && isDigit(expr[i]))
37
+ i++;
38
+ }
39
+ }
40
+ tokens.push({ type: 'NUMBER', value: expr.slice(start, i), position: start });
41
+ continue;
42
+ }
43
+ // Identifiers: letters, digits, underscores; also Math.ceil / Math.floor
44
+ if (isAlpha(ch) || ch === '_') {
45
+ const start = i;
46
+ while (i < len && (isAlphaNum(expr[i]) || expr[i] === '_'))
47
+ i++;
48
+ // Handle Math.xxx
49
+ if (expr.slice(start, i) === 'Math' && i < len && expr[i] === '.') {
50
+ i++; // skip dot
51
+ while (i < len && (isAlphaNum(expr[i]) || expr[i] === '_'))
52
+ i++;
53
+ }
54
+ tokens.push({ type: 'IDENTIFIER', value: expr.slice(start, i), position: start });
55
+ continue;
56
+ }
57
+ // Two-character tokens
58
+ if (i + 1 < len) {
59
+ const two = expr[i] + expr[i + 1];
60
+ if (two === '=>') {
61
+ tokens.push({ type: 'ARROW', value: '=>', position: i });
62
+ i += 2;
63
+ continue;
64
+ }
65
+ if (two === '**') {
66
+ tokens.push({ type: 'OPERATOR', value: '**', position: i });
67
+ i += 2;
68
+ continue;
69
+ }
70
+ if (two === '>=' || two === '<=' || two === '==' || two === '!=') {
71
+ tokens.push({ type: 'COMPARISON', value: two, position: i });
72
+ i += 2;
73
+ continue;
74
+ }
75
+ if (two === '+=') {
76
+ tokens.push({ type: 'ASSIGN', value: '+=', position: i });
77
+ i += 2;
78
+ continue;
79
+ }
80
+ }
81
+ // Single-character tokens
82
+ if (ch === '(') {
83
+ tokens.push({ type: 'LPAREN', value: '(', position: i });
84
+ i++;
85
+ continue;
86
+ }
87
+ if (ch === ')') {
88
+ tokens.push({ type: 'RPAREN', value: ')', position: i });
89
+ i++;
90
+ continue;
91
+ }
92
+ if (ch === ',') {
93
+ tokens.push({ type: 'COMMA', value: ',', position: i });
94
+ i++;
95
+ continue;
96
+ }
97
+ if (ch === '?') {
98
+ tokens.push({ type: 'QUESTION', value: '?', position: i });
99
+ i++;
100
+ continue;
101
+ }
102
+ if (ch === ':') {
103
+ tokens.push({ type: 'COLON', value: ':', position: i });
104
+ i++;
105
+ continue;
106
+ }
107
+ if (ch === ';') {
108
+ tokens.push({ type: 'SEMICOLON', value: ';', position: i });
109
+ i++;
110
+ continue;
111
+ }
112
+ if (ch === '=') {
113
+ tokens.push({ type: 'ASSIGN', value: '=', position: i });
114
+ i++;
115
+ continue;
116
+ }
117
+ // Comparison: single < or >
118
+ if (ch === '>' || ch === '<') {
119
+ tokens.push({ type: 'COMPARISON', value: ch, position: i });
120
+ i++;
121
+ continue;
122
+ }
123
+ // Operators: + - * /
124
+ if (ch === '+' || ch === '-' || ch === '*' || ch === '/') {
125
+ tokens.push({ type: 'OPERATOR', value: ch, position: i });
126
+ i++;
127
+ continue;
128
+ }
129
+ // Unknown character — skip
130
+ i++;
131
+ }
132
+ return tokens;
133
+ }
134
+ function isDigit(ch) {
135
+ return ch >= '0' && ch <= '9';
136
+ }
137
+ function isAlpha(ch) {
138
+ return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
139
+ }
140
+ function isAlphaNum(ch) {
141
+ return isDigit(ch) || isAlpha(ch);
142
+ }
143
+ //# sourceMappingURL=tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../../src/latex-export/parser/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Convert a function call to LaTeX.
2
+ * @param name function name (e.g. 'sin', 'pow', 'Math.ceil')
3
+ * @param args array of already-rendered LaTeX argument strings
4
+ * @returns LaTeX string for the function call
5
+ */
6
+ export declare function functionToLatex(name: string, args: string[]): string;
7
+ /** Determine if an argument string is "simple" (single token, no binary ops).
8
+ * Used by pow() to decide whether the base needs parentheses.
9
+ * @param arg rendered LaTeX argument string
10
+ * @returns true if the argument has no top-level binary operators
11
+ */
12
+ export declare function isSimpleArg(arg: string): boolean;
@@ -0,0 +1,47 @@
1
+ /* Function call to LaTeX transformer: maps math function calls to their LaTeX equivalents. */
2
+ /** Convert a function call to LaTeX.
3
+ * @param name function name (e.g. 'sin', 'pow', 'Math.ceil')
4
+ * @param args array of already-rendered LaTeX argument strings
5
+ * @returns LaTeX string for the function call
6
+ */
7
+ export function functionToLatex(name, args) {
8
+ switch (name) {
9
+ case 'sin':
10
+ case 'cos':
11
+ case 'tan':
12
+ return `\\${name}\\!\\left(${args[0]}\\right)`;
13
+ case 'exp':
14
+ return `e^{${args[0]}}`;
15
+ case 'sqrt':
16
+ return `\\sqrt{${args[0]}}`;
17
+ case 'pow': {
18
+ const base = isSimpleArg(args[0]) ? args[0] : `\\left(${args[0]}\\right)`;
19
+ return `${base}^{${args[1]}}`;
20
+ }
21
+ case 'log':
22
+ return `\\ln\\!\\left(${args[0]}\\right)`;
23
+ case 'log10':
24
+ return `\\log_{10}\\!\\left(${args[0]}\\right)`;
25
+ case 'abs':
26
+ return `\\left\\lvert ${args[0]} \\right\\rvert`;
27
+ case 'Math.ceil':
28
+ case 'ceil':
29
+ return `\\left\\lceil ${args[0]} \\right\\rceil`;
30
+ case 'Math.floor':
31
+ return `\\left\\lfloor ${args[0]} \\right\\rfloor`;
32
+ default:
33
+ return `\\mathrm{${name}}\\!\\left(${args.join(', ')}\\right)`;
34
+ }
35
+ }
36
+ /** Determine if an argument string is "simple" (single token, no binary ops).
37
+ * Used by pow() to decide whether the base needs parentheses.
38
+ * @param arg rendered LaTeX argument string
39
+ * @returns true if the argument has no top-level binary operators
40
+ */
41
+ export function isSimpleArg(arg) {
42
+ // Simple if it doesn't contain binary operators at the top level
43
+ // A simple arg: single identifier, number, or LaTeX command without + - * /
44
+ // We check for unescaped +, -, spaces around operators
45
+ return !/(?:^|[^\\])[+]/.test(arg) && !/\s-\s/.test(arg) && !/\s\*\s/.test(arg) && !/\s\/\s/.test(arg);
46
+ }
47
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../../src/latex-export/transformer/functions.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAc;IAC1D,QAAQ,IAAI,EAAE,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACR,OAAO,KAAK,IAAI,aAAa,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAEjD,KAAK,KAAK;YACR,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAE1B,KAAK,MAAM;YACT,OAAO,UAAU,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAE9B,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1E,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,CAAC;QAED,KAAK,KAAK;YACR,OAAO,iBAAiB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAE5C,KAAK,OAAO;YACV,OAAO,uBAAuB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAElD,KAAK,KAAK;YACR,OAAO,iBAAiB,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAEnD,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,iBAAiB,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAEnD,KAAK,YAAY;YACf,OAAO,kBAAkB,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAErD;YACE,OAAO,YAAY,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,iEAAiE;IACjE,4EAA4E;IAC5E,uDAAuD;IACvD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzG,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** Convert an identifier to its LaTeX representation.
2
+ * @param name identifier name (e.g. "alpha1", "CO2", "x")
3
+ * @returns LaTeX string
4
+ */
5
+ export declare function identifierToLatex(name: string): string;
6
+ /** Check if an identifier is a known Greek letter (exact match).
7
+ * @param name identifier name
8
+ * @returns LaTeX command or undefined
9
+ */
10
+ export declare function matchGreekExact(name: string): string | undefined;
11
+ /** Check if an identifier starts with a Greek letter name followed by digits only.
12
+ * @param name identifier name (e.g. "alpha1")
13
+ * @returns latex command and digit suffix, or undefined
14
+ */
15
+ export declare function matchGreekPrefix(name: string): {
16
+ latex: string;
17
+ suffix: string;
18
+ } | undefined;
19
+ /** Detect and format chemical formula patterns like CO2, N2O5, SO4.
20
+ * @param name identifier name
21
+ * @returns LaTeX string or undefined if not a chemical formula
22
+ */
23
+ export declare function matchChemicalFormula(name: string): string | undefined;
@@ -0,0 +1,194 @@
1
+ /* Identifier-to-LaTeX transformer: converts identifier names to their LaTeX representations. */
2
+ const SPECIAL = {
3
+ 'PI': '\\pi',
4
+ 'Inf': '\\infty',
5
+ 'inf': '\\infty',
6
+ };
7
+ const GREEK_LOWER = [
8
+ ['varepsilon', '\\varepsilon'],
9
+ ['varsigma', '\\varsigma'],
10
+ ['vartheta', '\\vartheta'],
11
+ ['epsilon', '\\epsilon'],
12
+ ['omicron', 'o'],
13
+ ['upsilon', '\\upsilon'],
14
+ ['lambda', '\\lambda'],
15
+ ['varphi', '\\varphi'],
16
+ ['varrho', '\\varrho'],
17
+ ['alpha', '\\alpha'],
18
+ ['delta', '\\delta'],
19
+ ['gamma', '\\gamma'],
20
+ ['kappa', '\\kappa'],
21
+ ['omega', '\\omega'],
22
+ ['sigma', '\\sigma'],
23
+ ['theta', '\\theta'],
24
+ ['beta', '\\beta'],
25
+ ['iota', '\\iota'],
26
+ ['zeta', '\\zeta'],
27
+ ['chi', '\\chi'],
28
+ ['eta', '\\eta'],
29
+ ['phi', '\\phi'],
30
+ ['psi', '\\psi'],
31
+ ['rho', '\\rho'],
32
+ ['tau', '\\tau'],
33
+ ['mu', '\\mu'],
34
+ ['nu', '\\nu'],
35
+ ['pi', '\\pi'],
36
+ ['xi', '\\xi'],
37
+ ];
38
+ const GREEK_UPPER = [
39
+ ['Epsilon', '\\mathrm{E}'],
40
+ ['Omicron', '\\mathrm{O}'],
41
+ ['Upsilon', '\\Upsilon'],
42
+ ['Lambda', '\\Lambda'],
43
+ ['Kappa', '\\mathrm{K}'],
44
+ ['Sigma', '\\Sigma'],
45
+ ['Theta', '\\Theta'],
46
+ ['Omega', '\\Omega'],
47
+ ['Alpha', '\\mathrm{A}'],
48
+ ['Delta', '\\Delta'],
49
+ ['Gamma', '\\Gamma'],
50
+ ['Beta', '\\mathrm{B}'],
51
+ ['Zeta', '\\mathrm{Z}'],
52
+ ['Iota', '\\mathrm{I}'],
53
+ ['Eta', '\\mathrm{H}'],
54
+ ['Chi', '\\mathrm{X}'],
55
+ ['Mu', '\\mathrm{M}'],
56
+ ['Nu', '\\mathrm{N}'],
57
+ ['Phi', '\\Phi'],
58
+ ['Psi', '\\Psi'],
59
+ ['Rho', '\\mathrm{P}'],
60
+ ['Tau', '\\mathrm{T}'],
61
+ ['Pi', '\\Pi'],
62
+ ['Xi', '\\Xi'],
63
+ ];
64
+ // Combined, sorted by key length descending
65
+ const ALL_GREEK = [...GREEK_LOWER, ...GREEK_UPPER]
66
+ .sort((a, b) => b[0].length - a[0].length);
67
+ // Quick lookup for exact matches
68
+ const GREEK_MAP = new Map(ALL_GREEK);
69
+ /** Convert an identifier to its LaTeX representation.
70
+ * @param name identifier name (e.g. "alpha1", "CO2", "x")
71
+ * @returns LaTeX string
72
+ */
73
+ export function identifierToLatex(name) {
74
+ // 1. Special constants
75
+ if (name in SPECIAL)
76
+ return SPECIAL[name];
77
+ // 2. Greek exact match
78
+ const greek = matchGreekExact(name);
79
+ if (greek !== undefined)
80
+ return greek;
81
+ // 3. Greek prefix + digit suffix
82
+ const greekPrefix = matchGreekPrefix(name);
83
+ if (greekPrefix !== undefined)
84
+ return `${greekPrefix.latex}_{${greekPrefix.suffix}}`;
85
+ // 4. Single letter (no digits)
86
+ if (name.length === 1)
87
+ return name;
88
+ // 5. Single letter + digits
89
+ if (name.length > 1 && isLetter(name[0]) && isAllDigits(name, 1))
90
+ return `${name[0]}_{${name.slice(1)}}`;
91
+ // 6. Chemical formula (all uppercase letters + digits, at least one digit)
92
+ const chem = matchChemicalFormula(name);
93
+ if (chem !== undefined)
94
+ return chem;
95
+ // 7. Multi-letter → \mathrm{name}
96
+ return `\\mathrm{${name}}`;
97
+ }
98
+ /** Check if an identifier is a known Greek letter (exact match).
99
+ * @param name identifier name
100
+ * @returns LaTeX command or undefined
101
+ */
102
+ export function matchGreekExact(name) {
103
+ return GREEK_MAP.get(name);
104
+ }
105
+ /** Check if an identifier starts with a Greek letter name followed by digits only.
106
+ * @param name identifier name (e.g. "alpha1")
107
+ * @returns latex command and digit suffix, or undefined
108
+ */
109
+ export function matchGreekPrefix(name) {
110
+ for (const [key, latex] of ALL_GREEK) {
111
+ if (name.length > key.length && name.startsWith(key)) {
112
+ const suffix = name.slice(key.length);
113
+ // Only match if suffix is all digits (not starting with a letter)
114
+ if (isAllDigits(suffix, 0))
115
+ return { latex, suffix };
116
+ // Suffix starts with a letter → not Greek
117
+ return undefined;
118
+ }
119
+ }
120
+ return undefined;
121
+ }
122
+ /** Detect and format chemical formula patterns like CO2, N2O5, SO4.
123
+ * @param name identifier name
124
+ * @returns LaTeX string or undefined if not a chemical formula
125
+ */
126
+ export function matchChemicalFormula(name) {
127
+ // Chemical formula: all letters are uppercase, contains at least one digit
128
+ let hasDigit = false;
129
+ let hasMultipleLetters = false;
130
+ let letterCount = 0;
131
+ for (let i = 0; i < name.length; i++) {
132
+ const ch = name[i];
133
+ if (isDigit(ch))
134
+ hasDigit = true;
135
+ else if (isUpperCase(ch))
136
+ letterCount++;
137
+ else {
138
+ // lowercase letter or other char → not a chemical formula
139
+ return undefined;
140
+ }
141
+ }
142
+ hasMultipleLetters = letterCount >= 2;
143
+ if (!hasDigit || !hasMultipleLetters)
144
+ return undefined;
145
+ // Parse into segments: alternating letter groups and digit groups
146
+ const segments = [];
147
+ let i = 0;
148
+ while (i < name.length) {
149
+ let letters = '';
150
+ while (i < name.length && isUpperCase(name[i]))
151
+ letters += name[i++];
152
+ let digits = '';
153
+ while (i < name.length && isDigit(name[i]))
154
+ digits += name[i++];
155
+ if (letters || digits)
156
+ segments.push({ letters, digits });
157
+ }
158
+ // Count how many segments have digits
159
+ const segmentsWithDigits = segments.filter((s) => s.digits).length;
160
+ if (segmentsWithDigits <= 1) {
161
+ // Simple case: trailing digits only (CO2, HO2, MEO2, SO4)
162
+ const allLetters = segments.map((s) => s.letters).join('');
163
+ const trailingDigits = segments[segments.length - 1].digits;
164
+ if (trailingDigits)
165
+ return `\\mathrm{${allLetters}}_{${trailingDigits}}`;
166
+ return `\\mathrm{${allLetters}}`;
167
+ }
168
+ // Interleaved case: N2O5, C2O3
169
+ let inner = '';
170
+ for (const seg of segments) {
171
+ inner += seg.letters;
172
+ if (seg.digits)
173
+ inner += `_{${seg.digits}}`;
174
+ }
175
+ return `\\mathrm{${inner}}`;
176
+ }
177
+ function isLetter(ch) {
178
+ return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
179
+ }
180
+ function isUpperCase(ch) {
181
+ return ch >= 'A' && ch <= 'Z';
182
+ }
183
+ function isDigit(ch) {
184
+ return ch >= '0' && ch <= '9';
185
+ }
186
+ function isAllDigits(str, from) {
187
+ if (from >= str.length)
188
+ return false;
189
+ for (let i = from; i < str.length; i++)
190
+ if (!isDigit(str[i]))
191
+ return false;
192
+ return true;
193
+ }
194
+ //# sourceMappingURL=identifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../../src/latex-export/transformer/identifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { OperatorContext } from '../types';
2
+ /** Render a binary operator with its operands as LaTeX.
3
+ * @param op operator string (+, -, *, /, **, <, >, <=, >=, ==, !=)
4
+ * @param left already-rendered LaTeX for the left operand
5
+ * @param right already-rendered LaTeX for the right operand
6
+ * @param context optional context flags
7
+ * @returns LaTeX string
8
+ */
9
+ export declare function operatorToLatex(op: string, left: string, right: string, context?: OperatorContext): string;
@@ -0,0 +1,41 @@
1
+ /* Operator-to-LaTeX transformer: renders binary and comparison operators as LaTeX. */
2
+ /** Render a binary operator with its operands as LaTeX.
3
+ * @param op operator string (+, -, *, /, **, <, >, <=, >=, ==, !=)
4
+ * @param left already-rendered LaTeX for the left operand
5
+ * @param right already-rendered LaTeX for the right operand
6
+ * @param context optional context flags
7
+ * @returns LaTeX string
8
+ */
9
+ export function operatorToLatex(op, left, right, context) {
10
+ switch (op) {
11
+ case '+':
12
+ case '-':
13
+ return `${left} ${op} ${right}`;
14
+ case '*':
15
+ if (context?.useCdot === false)
16
+ return `${left} \\, ${right}`;
17
+ return `${left} \\cdot ${right}`;
18
+ case '/':
19
+ if (context?.insideExponent)
20
+ return `${left} / ${right}`;
21
+ return `\\frac{${left}}{${right}}`;
22
+ case '**': {
23
+ const base = context?.baseIsCompound ? `\\left(${left}\\right)` : left;
24
+ return `${base}^{${right}}`;
25
+ }
26
+ case '>=':
27
+ return `${left} \\geq ${right}`;
28
+ case '<=':
29
+ return `${left} \\leq ${right}`;
30
+ case '!=':
31
+ return `${left} \\neq ${right}`;
32
+ case '==':
33
+ return `${left} = ${right}`;
34
+ case '<':
35
+ case '>':
36
+ return `${left} ${op} ${right}`;
37
+ default:
38
+ return `${left} ${op} ${right}`;
39
+ }
40
+ }
41
+ //# sourceMappingURL=operators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.js","sourceRoot":"","sources":["../../../../src/latex-export/transformer/operators.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAItF;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAU,EACV,IAAY,EACZ,KAAa,EACb,OAAyB;IAEzB,QAAQ,EAAE,EAAE,CAAC;QACb,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAElC,KAAK,GAAG;YACN,IAAI,OAAO,EAAE,OAAO,KAAK,KAAK;gBAC5B,OAAO,GAAG,IAAI,QAAQ,KAAK,EAAE,CAAC;YAChC,OAAO,GAAG,IAAI,WAAW,KAAK,EAAE,CAAC;QAEnC,KAAK,GAAG;YACN,IAAI,OAAO,EAAE,cAAc;gBACzB,OAAO,GAAG,IAAI,MAAM,KAAK,EAAE,CAAC;YAC9B,OAAO,UAAU,IAAI,KAAK,KAAK,GAAG,CAAC;QAErC,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,IAAI,GAAG,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;QAC9B,CAAC;QAED,KAAK,IAAI;YACP,OAAO,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;QAClC,KAAK,IAAI;YACP,OAAO,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;QAClC,KAAK,IAAI;YACP,OAAO,GAAG,IAAI,UAAU,KAAK,EAAE,CAAC;QAClC,KAAK,IAAI;YACP,OAAO,GAAG,IAAI,MAAM,KAAK,EAAE,CAAC;QAE9B,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAElC;YACE,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;IAClC,CAAC;AACH,CAAC"}