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
@@ -1,632 +0,0 @@
1
- import {
2
- LsodaContext, LsodaCommon, LsodaOpt, LsodaFunc, NordsieckSnapshot, ETA,
3
- } from './common';
4
- import {vmnorm} from './blas';
5
- import {intdy} from './intdy';
6
- import {stoda} from './stoda';
7
- import {DenseOutput} from './dense';
8
-
9
- // ---- Internal helpers ----
10
-
11
- function captureSnapshot(c: LsodaCommon, neq: number): NordsieckSnapshot {
12
- const nq = c.nq;
13
- const yh: Float64Array[] = new Array(nq + 1);
14
- for (let j = 0; j <= nq; j++) {
15
- const row = new Float64Array(neq);
16
- for (let i = 0; i < neq; i++)
17
- row[i] = c.yh[j + 1][i + 1]; // convert 1-based to 0-based
18
- yh[j] = row;
19
- }
20
- return {tn: c.tn, h: c.h, hu: c.hu, nq, yh};
21
- }
22
-
23
- function ewset(ctx: LsodaContext, ycur: Float64Array): void {
24
- const c = ctx.common!;
25
- const neq = ctx.neq;
26
- const rtol = ctx.opt!.rtol;
27
- const atol = ctx.opt!.atol;
28
- for (let i = 1; i <= neq; i++)
29
- c.ewt[i] = rtol[i] * Math.abs(ycur[i]) + atol[i];
30
- for (let i = 1; i <= neq; i++)
31
- c.ewt[i] = 1. / c.ewt[i];
32
- }
33
-
34
- function checkOpt(ctx: LsodaContext, opt: LsodaOpt): boolean {
35
- const mxstp0 = 500;
36
- const mord = [0, 12, 5];
37
-
38
- if (ctx.state === 0) ctx.state = 1;
39
- if (ctx.state === 1) {
40
- opt.h0 = 0.;
41
- opt.mxordn = mord[1];
42
- opt.mxords = mord[2];
43
- }
44
-
45
- if (ctx.neq <= 0) {
46
- ctx.error = `[lsoda] neq = ${ctx.neq} is less than 1`;
47
- return false;
48
- }
49
-
50
- // Check rtol and atol (1-indexed)
51
- if (ctx.state === 1 || ctx.state === 3) {
52
- for (let i = 1; i <= ctx.neq; i++) {
53
- if (opt.rtol[i] < 0.) {
54
- ctx.error = `[lsoda] rtol = ${opt.rtol[i]} is less than 0.`;
55
- return false;
56
- }
57
- if (opt.atol[i] < 0.) {
58
- ctx.error = `[lsoda] atol = ${opt.atol[i]} is less than 0.`;
59
- return false;
60
- }
61
- }
62
- }
63
-
64
- if (opt.itask === 0) opt.itask = 1;
65
- if (opt.itask < 1 || opt.itask > 5) {
66
- ctx.error = `[lsoda] illegal itask = ${opt.itask}`;
67
- return false;
68
- }
69
- if (opt.ixpr < 0 || opt.ixpr > 1) {
70
- ctx.error = `[lsoda] ixpr = ${opt.ixpr} is illegal`;
71
- return false;
72
- }
73
- if (opt.mxstep < 0) {
74
- ctx.error = '[lsoda] mxstep < 0';
75
- return false;
76
- }
77
- if (opt.mxstep === 0) opt.mxstep = mxstp0;
78
- if (opt.mxhnil < 0) {
79
- ctx.error = '[lsoda] mxhnil < 0';
80
- return false;
81
- }
82
-
83
- if (ctx.state === 1) {
84
- if (opt.mxordn < 0) {
85
- ctx.error = `[lsoda] mxordn = ${opt.mxordn} is less than 0`;
86
- return false;
87
- }
88
- if (opt.mxordn === 0) opt.mxordn = 100;
89
- opt.mxordn = Math.min(opt.mxordn, mord[1]);
90
- if (opt.mxords < 0) {
91
- ctx.error = `[lsoda] mxords = ${opt.mxords} is less than 0`;
92
- return false;
93
- }
94
- if (opt.mxords === 0) opt.mxords = 100;
95
- opt.mxords = Math.min(opt.mxords, mord[2]);
96
- }
97
-
98
- if (opt.hmax < 0.) {
99
- ctx.error = '[lsoda] hmax < 0.';
100
- return false;
101
- }
102
- opt.hmxi = 0.;
103
- if (opt.hmax > 0)
104
- opt.hmxi = 1. / opt.hmax;
105
- if (opt.hmin < 0.) {
106
- ctx.error = '[lsoda] hmin < 0.';
107
- return false;
108
- }
109
- return true;
110
- }
111
-
112
- function allocMem(ctx: LsodaContext): boolean {
113
- const c = ctx.common!;
114
- const nyh = ctx.neq;
115
- const lenyh = 1 + Math.max(ctx.opt!.mxordn, ctx.opt!.mxords);
116
-
117
- // yh: array of (lenyh+1) Float64Arrays, each of size (nyh+1)
118
- c.yh = new Array(lenyh + 1);
119
- for (let i = 0; i <= lenyh; i++)
120
- c.yh[i] = new Float64Array(nyh + 1);
121
-
122
- // wm: array of (nyh+1) Float64Arrays, each of size (nyh+1)
123
- c.wm = new Array(nyh + 1);
124
- for (let i = 0; i <= nyh; i++)
125
- c.wm[i] = new Float64Array(nyh + 1);
126
-
127
- c.ewt = new Float64Array(nyh + 1);
128
- c.savf = new Float64Array(nyh + 1);
129
- c.acor = new Float64Array(nyh + 1);
130
- c.ipvt = new Int32Array(nyh + 1);
131
-
132
- // Allocate elco and tesco
133
- c.elco = new Array(13);
134
- for (let i = 0; i < 13; i++)
135
- c.elco[i] = new Float64Array(14);
136
- c.tesco = new Array(13);
137
- for (let i = 0; i < 13; i++)
138
- c.tesco[i] = new Float64Array(4);
139
-
140
- return true;
141
- }
142
-
143
- // ---- Public API ----
144
-
145
- /**
146
- * Prepare a context with options. Must be called before lsoda().
147
- * Returns true on success.
148
- */
149
- export function lsodaPrepare(ctx: LsodaContext, opt: LsodaOpt): boolean {
150
- ctx.common = new LsodaCommon();
151
- ctx.opt = opt;
152
- if (!checkOpt(ctx, opt)) return false;
153
- return allocMem(ctx);
154
- }
155
-
156
- /**
157
- * Reset context for reuse with a different problem.
158
- * All options are preserved, internal state is zeroed.
159
- */
160
- export function lsodaReset(ctx: LsodaContext): void {
161
- const c = ctx.common!;
162
- // Zero all scalar state
163
- c.h = 0; c.hu = 0; c.rc = 0; c.tn = 0; c.tsw = 0; c.pdnorm = 0;
164
- c.crate = 0; c.hold = 0; c.rmax = 0; c.pdest = 0; c.pdlast = 0;
165
- c.ialth = 0; c.ipup = 0; c.nslp = 0; c.icount = 0; c.irflag = 0;
166
- c.imxer = 0; c.illin = 0; c.nhnil = 0; c.nslast = 0; c.jcur = 0;
167
- c.meth = 0; c.mused = 0; c.nq = 0; c.nst = 0; c.ncf = 0;
168
- c.nfe = 0; c.nje = 0; c.nqu = 0; c.miter = 0;
169
- c.el.fill(0);
170
- // Zero arrays
171
- for (let i = 0; i < c.yh.length; i++) c.yh[i].fill(0);
172
- for (let i = 0; i < c.wm.length; i++) c.wm[i].fill(0);
173
- c.ewt.fill(0); c.savf.fill(0); c.acor.fill(0); c.ipvt.fill(0);
174
- for (let i = 0; i < c.elco.length; i++) c.elco[i].fill(0);
175
- for (let i = 0; i < c.tesco.length; i++) c.tesco[i].fill(0);
176
- ctx.state = 1;
177
- ctx.error = null;
178
- }
179
-
180
- /**
181
- * Free context resources. In JS/TS, this is mostly a no-op (GC handles it).
182
- */
183
- export function lsodaFree(ctx: LsodaContext): void {
184
- if (ctx.error)
185
- console.error(`unhandled error message: ${ctx.error}`);
186
-
187
- ctx.common = null;
188
- }
189
-
190
- /**
191
- * Main solver. Integrates from t towards tout.
192
- * y: 1-indexed Float64Array (y[0] unused, y[1..neq] are state values)
193
- * Returns { t, state } — updated time and solver state.
194
- */
195
- export function lsoda(
196
- ctx: LsodaContext, y: Float64Array, tIn: number, tout: number,
197
- ): { t: number; state: number } {
198
- const c = ctx.common!;
199
- const opt = ctx.opt!;
200
- const neq = ctx.neq;
201
- let t = tIn;
202
-
203
- let kflag: number;
204
- let jstart: number = 0;
205
- let ihit = 0;
206
-
207
- // Helper functions matching C macros
208
- function hardfailure(msg: string): { t: number; state: number } {
209
- ctx.error = msg;
210
- ctx.state = -3;
211
- return {t, state: ctx.state};
212
- }
213
-
214
- function softfailure(code: number, msg: string): { t: number; state: number } {
215
- ctx.error = msg;
216
- for (let i = 1; i <= neq; i++)
217
- y[i] = c.yh[1][i];
218
- t = c.tn;
219
- ctx.state = code;
220
- return {t, state: ctx.state};
221
- }
222
-
223
- function successreturn(): { t: number; state: number } {
224
- for (let i = 1; i <= neq; i++)
225
- y[i] = c.yh[1][i];
226
- t = c.tn;
227
- if (itask === 4 || itask === 5) {
228
- if (ihit)
229
- t = tcrit;
230
- }
231
- ctx.state = 2;
232
- return {t, state: ctx.state};
233
- }
234
-
235
- function intdyreturn(): { t: number; state: number } {
236
- const iflag = intdy(ctx, tout, 0, y);
237
- if (iflag !== 0) {
238
- ctx.error = `[lsoda] trouble from intdy, itask = ${itask}, tout = ${tout}`;
239
- for (let i = 1; i <= neq; i++)
240
- y[i] = c.yh[1][i];
241
- t = c.tn;
242
- }
243
- t = tout;
244
- ctx.state = 2;
245
- return {t, state: ctx.state};
246
- }
247
-
248
- if (c === null)
249
- return hardfailure('[lsoda] illegal common block did you call lsoda_prepare?');
250
-
251
-
252
- // Block b: initial/continuation call setup
253
- let h0: number = 0;
254
- let tcrit: number = 0;
255
- const rtol = opt.rtol;
256
- const atol = opt.atol;
257
-
258
- if (ctx.state === 1 || ctx.state === 3) {
259
- h0 = opt.h0;
260
- if (ctx.state === 1) {
261
- if ((tout - t) * h0 < 0.)
262
- return hardfailure(`[lsoda] tout = ${tout} behind t = ${t}. integration direction is given by ${h0}`);
263
- }
264
- }
265
-
266
- const itask = opt.itask;
267
-
268
- if (ctx.state === 3)
269
- jstart = -1;
270
-
271
-
272
- // Block c: initial call only (state == 1)
273
- if (ctx.state === 1) {
274
- c.meth = 1;
275
- c.tn = t;
276
- c.tsw = t;
277
-
278
- if (itask === 4 || itask === 5) {
279
- tcrit = opt.tcrit;
280
- if ((tcrit - tout) * (tout - t) < 0.)
281
- return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tout');
282
-
283
- if (h0 !== 0. && (t + h0 - tcrit) * h0 > 0.)
284
- h0 = tcrit - t;
285
- }
286
-
287
- jstart = 0;
288
- c.nq = 1;
289
-
290
- // Initial call to f
291
- ctx.func(t, y.subarray(1), c.yh[2].subarray(1), ctx.data);
292
- c.nfe = 1;
293
-
294
- // Load initial value vector
295
- for (let i = 1; i <= neq; i++)
296
- c.yh[1][i] = y[i];
297
-
298
- // Load and invert ewt
299
- ewset(ctx, y);
300
- for (let i = 1; i <= neq; i++) {
301
- if (c.ewt[i] <= 0.)
302
- return hardfailure(`[lsoda] ewt[${i}] = ${c.ewt[i]} <= 0.`);
303
- }
304
-
305
- // Compute initial step size h0 if not given
306
- if (h0 === 0.) {
307
- const tdist = Math.abs(tout - t);
308
- const w0 = Math.max(Math.abs(t), Math.abs(tout));
309
- if (tdist < 2. * ETA * w0)
310
- return hardfailure('[lsoda] tout too close to t to start integration');
311
-
312
- let tol = 0.;
313
- for (let i = 1; i <= neq; i++)
314
- tol = Math.max(tol, rtol[i]);
315
- if (tol <= 0.) {
316
- for (let i = 1; i <= neq; i++) {
317
- const atoli = atol[i];
318
- const ayi = Math.abs(y[i]);
319
- if (ayi !== 0.)
320
- tol = Math.max(tol, atoli / ayi);
321
- }
322
- }
323
- tol = Math.max(tol, 100. * ETA);
324
- tol = Math.min(tol, 0.001);
325
- const sum = vmnorm(neq, c.yh[2], c.ewt);
326
- const sumSq = 1. / (tol * w0 * w0) + tol * sum * sum;
327
- h0 = 1. / Math.sqrt(sumSq);
328
- h0 = Math.min(h0, tdist);
329
- h0 = h0 * ((tout - t >= 0.) ? 1. : -1.);
330
- }
331
-
332
- // Adjust h0 for hmax
333
- const rh = Math.abs(h0) * opt.hmxi;
334
- if (rh > 1.) h0 /= rh;
335
-
336
- // Load h and scale yh[2]
337
- c.h = h0;
338
- for (let i = 1; i <= neq; i++)
339
- c.yh[2][i] *= h0;
340
- }
341
-
342
- // Block d: continuation calls (state == 2 or 3)
343
- if (ctx.state === 2 || ctx.state === 3) {
344
- jstart = 1;
345
- c.nslast = c.nst;
346
-
347
- switch (itask) {
348
- case 1:
349
- if ((c.tn - tout) * c.h >= 0.)
350
- return intdyreturn();
351
-
352
- break;
353
- case 2:
354
- break;
355
- case 3: {
356
- const tp = c.tn - c.hu * (1. + 100. * ETA);
357
- if ((tp - tout) * c.h > 0.)
358
- return hardfailure(`[lsoda] itask = ${itask} and tout behind tcur - hu`);
359
-
360
- if ((c.tn - tout) * c.h < 0.) break;
361
- return successreturn();
362
- }
363
- case 4:
364
- tcrit = opt.tcrit;
365
- if ((c.tn - tcrit) * c.h > 0.)
366
- return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tcur');
367
-
368
- if ((tcrit - tout) * c.h < 0.)
369
- return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tout');
370
-
371
- if ((c.tn - tout) * c.h >= 0.)
372
- return intdyreturn();
373
-
374
- // fall through to case 5 logic
375
- // eslint-disable-next-line no-fallthrough
376
- case 5:
377
- if (itask === 5) {
378
- tcrit = opt.tcrit;
379
- if ((c.tn - tcrit) * c.h > 0.)
380
- return hardfailure('[lsoda] itask = 4 or 5 and tcrit behind tcur');
381
- }
382
- {
383
- const hmx = Math.abs(c.tn) + Math.abs(c.h);
384
- ihit = Math.abs(c.tn - tcrit) <= (100. * ETA * hmx) ? 1 : 0;
385
- if (ihit) {
386
- t = tcrit;
387
- return successreturn();
388
- }
389
- const tnext = c.tn + c.h * (1. + 4. * ETA);
390
- if ((tnext - tcrit) * c.h <= 0.) break;
391
- c.h = (tcrit - c.tn) * (1. - 4. * ETA);
392
- if (ctx.state === 2) jstart = -2;
393
- }
394
- break;
395
- }
396
- }
397
-
398
- // Block e: main integration loop
399
- while (true) {
400
- if (ctx.state !== 1 || c.nst !== 0) {
401
- if ((c.nst - c.nslast) >= opt.mxstep)
402
- return softfailure(-1, `[lsoda] ${opt.mxstep} steps taken before reaching tout`);
403
-
404
- ewset(ctx, c.yh[1]);
405
- for (let i = 1; i <= neq; i++) {
406
- if (c.ewt[i] <= 0.)
407
- return softfailure(-6, `[lsoda] ewt[${i}] = ${c.ewt[i]} <= 0.`);
408
- }
409
- }
410
-
411
- const tolsf = ETA * vmnorm(neq, c.yh[1], c.ewt);
412
- if (tolsf > 0.01) {
413
- const scaled = tolsf * 200.;
414
- if (c.nst === 0) {
415
- return hardfailure(
416
- 'lsoda -- at start of problem, too much accuracy requested' +
417
- ` for precision of machine, suggested scaling factor = ${scaled}`,
418
- );
419
- }
420
- return softfailure(-2,
421
- `lsoda -- at t = ${t}, too much accuracy requested` +
422
- ` for precision of machine, suggested scaling factor = ${scaled}`,
423
- );
424
- }
425
-
426
- if ((c.tn + c.h) === c.tn) {
427
- c.nhnil++;
428
- if (c.nhnil <= opt.mxhnil) {
429
- console.error(`lsoda -- warning..internal t = ${c.tn} and h = ${c.h} are` +
430
- ' such that t + h = t on the next step');
431
- if (c.nhnil === opt.mxhnil) {
432
- console.error(`lsoda -- above warning has been issued ${c.nhnil}` +
433
- ' times, it will not be issued again for this problem');
434
- }
435
- }
436
- }
437
-
438
- // Call stoda
439
- kflag = stoda(ctx, y, jstart);
440
-
441
- if (kflag === 0) {
442
- // Block f: successful return from stoda
443
- // Dense output: capture snapshot
444
- if (ctx.snapshots)
445
- ctx.snapshots.push(captureSnapshot(c, neq));
446
-
447
- jstart = 1;
448
- if (c.meth !== c.mused) {
449
- c.tsw = c.tn;
450
- jstart = -1;
451
- if (opt.ixpr) {
452
- if (c.meth === 2) {
453
- console.error('[lsoda] a switch to the stiff method has occurred' +
454
- ` at t = ${c.tn}, tentative step size h = ${c.h}, step nst = ${c.nst}`);
455
- }
456
- if (c.meth === 1) {
457
- console.error('[lsoda] a switch to the nonstiff method has occurred' +
458
- ` at t = ${c.tn}, tentative step size h = ${c.h}, step nst = ${c.nst}`);
459
- }
460
- }
461
- }
462
-
463
- if (itask === 1) {
464
- if ((c.tn - tout) * c.h < 0.) continue;
465
- return intdyreturn();
466
- }
467
- if (itask === 2)
468
- return successreturn();
469
-
470
- if (itask === 3) {
471
- if ((c.tn - tout) * c.h >= 0.)
472
- return successreturn();
473
-
474
- continue;
475
- }
476
- if (itask === 4) {
477
- tcrit = opt.tcrit;
478
- if ((c.tn - tout) * c.h >= 0.)
479
- return intdyreturn();
480
- else {
481
- const hmx = Math.abs(c.tn) + Math.abs(c.h);
482
- ihit = Math.abs(c.tn - tcrit) <= (100. * ETA * hmx) ? 1 : 0;
483
- if (ihit)
484
- return successreturn();
485
-
486
- const tnext = c.tn + c.h * (1. + 4. * ETA);
487
- if ((tnext - tcrit) * c.h <= 0.) continue;
488
- c.h = (tcrit - c.tn) * (1. - 4. * ETA);
489
- jstart = -2;
490
- continue;
491
- }
492
- }
493
- if (itask === 5) {
494
- tcrit = opt.tcrit;
495
- const hmx = Math.abs(c.tn) + Math.abs(c.h);
496
- ihit = Math.abs(c.tn - tcrit) <= (100. * ETA * hmx) ? 1 : 0;
497
- return successreturn();
498
- }
499
- }
500
-
501
- // kflag == -1 or -2: error test / convergence failures
502
- if (kflag === -1 || kflag === -2) {
503
- let big = 0.;
504
- c.imxer = 1;
505
- for (let i = 1; i <= neq; i++) {
506
- const size = Math.abs(c.acor[i]) * c.ewt[i];
507
- if (big < size) {
508
- big = size;
509
- c.imxer = i;
510
- }
511
- }
512
- if (kflag === -1) {
513
- return softfailure(-4,
514
- `lsoda -- at t = ${c.tn} and step size h = ${c.h},` +
515
- ' the error test failed repeatedly or with abs(h) = hmin',
516
- );
517
- }
518
- if (kflag === -2) {
519
- return softfailure(-5,
520
- `lsoda -- at t = ${c.tn} and step size h = ${c.h},` +
521
- ' the corrector convergence failed repeatedly or with abs(h) = hmin',
522
- );
523
- }
524
- }
525
- }
526
- }
527
-
528
- // ---- High-level convenience API ----
529
-
530
- /**
531
- * User-facing ODE function signature (0-based arrays).
532
- */
533
- export type OdeFunction = (t: number, y: Float64Array, ydot: Float64Array, data?: any) => number;
534
-
535
- export interface LsodaSolveResult {
536
- y: Float64Array;
537
- t: number;
538
- }
539
-
540
- /**
541
- * High-level LSODA solver class with 0-based public interface.
542
- */
543
- export class Lsoda {
544
- private ctx: LsodaContext;
545
- private internalY: Float64Array;
546
- private denseEnabled: boolean = false;
547
-
548
- constructor(
549
- f: OdeFunction, neq: number,
550
- opt?: Partial<LsodaOpt & { dense: boolean }>, data?: any,
551
- ) {
552
- // Wrap user's 0-based function to internal 1-based convention
553
- const wrappedFunc: LsodaFunc = (t, y, ydot, data) => {
554
- return f(t, y, ydot, data);
555
- };
556
-
557
- this.ctx = new LsodaContext(wrappedFunc, neq, data);
558
- this.internalY = new Float64Array(neq + 1); // 1-indexed
559
-
560
- // Build full options with defaults
561
- const fullOpt: LsodaOpt = {
562
- ixpr: 0, mxstep: 0, mxhnil: 0, mxordn: 0, mxords: 0,
563
- tcrit: 0, h0: 0, hmax: 0, hmin: 0, hmxi: 0, itask: 1,
564
- rtol: new Float64Array(neq + 1),
565
- atol: new Float64Array(neq + 1),
566
- ...opt,
567
- };
568
-
569
- // If rtol/atol provided as partial, make sure they're 1-indexed Float64Arrays
570
- if (opt?.rtol) {
571
- if (opt.rtol.length === neq) {
572
- // User provided 0-based, convert to 1-based
573
- const r = new Float64Array(neq + 1);
574
- for (let i = 0; i < neq; i++) r[i + 1] = opt.rtol[i];
575
- fullOpt.rtol = r;
576
- } else
577
- fullOpt.rtol = opt.rtol;
578
- }
579
- if (opt?.atol) {
580
- if (opt.atol.length === neq) {
581
- const a = new Float64Array(neq + 1);
582
- for (let i = 0; i < neq; i++) a[i + 1] = opt.atol[i];
583
- fullOpt.atol = a;
584
- } else
585
- fullOpt.atol = opt.atol;
586
- }
587
-
588
- lsodaPrepare(this.ctx, fullOpt);
589
-
590
- if (opt?.dense) {
591
- this.denseEnabled = true;
592
- this.ctx.snapshots = [];
593
- }
594
- }
595
-
596
- /**
597
- * Integrate from current t to tout.
598
- * y: 0-based array of state values.
599
- * Returns updated { y, t }.
600
- */
601
- solve(y: ArrayLike<number>, t: number, tout: number): LsodaSolveResult {
602
- const neq = this.ctx.neq;
603
- // Copy 0-based user y into 1-based internal array
604
- for (let i = 0; i < neq; i++)
605
- this.internalY[i + 1] = y[i];
606
-
607
- const result = lsoda(this.ctx, this.internalY, t, tout);
608
-
609
- // Copy back to 0-based
610
- const out = new Float64Array(neq);
611
- for (let i = 0; i < neq; i++)
612
- out[i] = this.internalY[i + 1];
613
-
614
- return {y: out, t: result.t};
615
- }
616
-
617
- get state(): number {return this.ctx.state;}
618
- get error(): string | null {return this.ctx.error;}
619
-
620
- /** Returns a DenseOutput interpolator from collected snapshots. */
621
- getDenseOutput(): DenseOutput {
622
- if (!this.ctx.snapshots || this.ctx.snapshots.length === 0)
623
- throw new Error('[Lsoda] dense output not enabled or no steps taken — pass { dense: true } in options');
624
- return new DenseOutput(this.ctx.snapshots, this.ctx.neq);
625
- }
626
-
627
- reset(): void {
628
- lsodaReset(this.ctx);
629
- if (this.denseEnabled)
630
- this.ctx.snapshots = [];
631
- }
632
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"methodswitch.js","sourceRoot":"","sources":["methodswitch.ts"],"names":[],"mappings":"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"}