diff-grok 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (624) hide show
  1. package/README.MD +56 -8
  2. package/dist/index.d.ts +6 -0
  3. package/{index.js → dist/index.js} +1 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/examples/basic-use.d.ts +10 -0
  6. package/dist/src/examples/basic-use.js.map +1 -0
  7. package/dist/src/examples/check-methods.d.ts +1 -0
  8. package/dist/src/examples/check-methods.js.map +1 -0
  9. package/dist/src/examples/corr-probs.d.ts +15 -0
  10. package/{src → dist/src}/examples/corr-probs.js +2 -2
  11. package/dist/src/examples/corr-probs.js.map +1 -0
  12. package/dist/src/examples/cyclic-model.d.ts +6 -0
  13. package/dist/src/examples/cyclic-model.js.map +1 -0
  14. package/dist/src/examples/e5.d.ts +15 -0
  15. package/dist/src/examples/e5.js.map +1 -0
  16. package/dist/src/examples/hires.d.ts +15 -0
  17. package/dist/src/examples/hires.js.map +1 -0
  18. package/dist/src/examples/index.d.ts +22 -0
  19. package/dist/src/examples/index.js.map +1 -0
  20. package/dist/src/examples/model-updates.d.ts +6 -0
  21. package/dist/src/examples/model-updates.js.map +1 -0
  22. package/dist/src/examples/orego.d.ts +15 -0
  23. package/dist/src/examples/orego.js.map +1 -0
  24. package/dist/src/examples/pipeline-use.d.ts +6 -0
  25. package/dist/src/examples/pipeline-use.js.map +1 -0
  26. package/dist/src/examples/pollution.d.ts +15 -0
  27. package/dist/src/examples/pollution.js.map +1 -0
  28. package/{src/examples/print-benchmark.ts → dist/src/examples/print-benchmark.d.ts} +8 -58
  29. package/dist/src/examples/print-benchmark.js.map +1 -0
  30. package/dist/src/examples/robertson.d.ts +15 -0
  31. package/{docs/media → dist/src/examples}/robertson.js +2 -2
  32. package/dist/src/examples/robertson.js.map +1 -0
  33. package/dist/src/examples/scripting.d.ts +1 -0
  34. package/dist/src/examples/scripting.js.map +1 -0
  35. package/dist/src/examples/vdpol.d.ts +15 -0
  36. package/dist/src/examples/vdpol.js.map +1 -0
  37. package/dist/src/latex-export/examples/advanced-to-latex.d.ts +2 -0
  38. package/dist/src/latex-export/examples/advanced-to-latex.js +41 -0
  39. package/dist/src/latex-export/examples/advanced-to-latex.js.map +1 -0
  40. package/dist/src/latex-export/examples/basic-to-latex.d.ts +2 -0
  41. package/dist/src/latex-export/examples/basic-to-latex.js +17 -0
  42. package/dist/src/latex-export/examples/basic-to-latex.js.map +1 -0
  43. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.d.ts +2 -0
  44. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js +145 -0
  45. package/dist/src/latex-export/examples/bioreactor-to-latex-selective.js.map +1 -0
  46. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.d.ts +2 -0
  47. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js +41 -0
  48. package/dist/src/latex-export/examples/chem-react-to-latex-no-cdot.js.map +1 -0
  49. package/dist/src/latex-export/examples/energy-n-control-to-markdown.d.ts +2 -0
  50. package/dist/src/latex-export/examples/energy-n-control-to-markdown.js +58 -0
  51. package/dist/src/latex-export/examples/energy-n-control-to-markdown.js.map +1 -0
  52. package/dist/src/latex-export/examples/extended-to-markdown.d.ts +2 -0
  53. package/dist/src/latex-export/examples/extended-to-markdown.js +37 -0
  54. package/dist/src/latex-export/examples/extended-to-markdown.js.map +1 -0
  55. package/dist/src/latex-export/examples/fermentation-to-latex.d.ts +2 -0
  56. package/dist/src/latex-export/examples/fermentation-to-latex.js +32 -0
  57. package/dist/src/latex-export/examples/fermentation-to-latex.js.map +1 -0
  58. package/dist/src/latex-export/examples/ga-production-to-markdown.d.ts +2 -0
  59. package/dist/src/latex-export/examples/ga-production-to-markdown.js +58 -0
  60. package/dist/src/latex-export/examples/ga-production-to-markdown.js.map +1 -0
  61. package/dist/src/latex-export/examples/nimotuzumab-to-latex.d.ts +2 -0
  62. package/dist/src/latex-export/examples/nimotuzumab-to-latex.js +53 -0
  63. package/dist/src/latex-export/examples/nimotuzumab-to-latex.js.map +1 -0
  64. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.d.ts +2 -0
  65. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js +50 -0
  66. package/dist/src/latex-export/examples/pk-pd-to-markdown-minimal.js.map +1 -0
  67. package/dist/src/latex-export/examples/pk-to-markdown.d.ts +2 -0
  68. package/dist/src/latex-export/examples/pk-to-markdown.js +35 -0
  69. package/dist/src/latex-export/examples/pk-to-markdown.js.map +1 -0
  70. package/dist/src/latex-export/examples/pollution-to-latex.d.ts +2 -0
  71. package/dist/src/latex-export/examples/pollution-to-latex.js +141 -0
  72. package/dist/src/latex-export/examples/pollution-to-latex.js.map +1 -0
  73. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.d.ts +2 -0
  74. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js +25 -0
  75. package/dist/src/latex-export/examples/robertson-to-latex-no-meta.js.map +1 -0
  76. package/dist/src/latex-export/generator/bracket-manager.d.ts +19 -0
  77. package/dist/src/latex-export/generator/bracket-manager.js +58 -0
  78. package/dist/src/latex-export/generator/bracket-manager.js.map +1 -0
  79. package/dist/src/latex-export/generator/document-builder.d.ts +13 -0
  80. package/dist/src/latex-export/generator/document-builder.js +433 -0
  81. package/dist/src/latex-export/generator/document-builder.js.map +1 -0
  82. package/dist/src/latex-export/generator/latex-generator.d.ts +26 -0
  83. package/dist/src/latex-export/generator/latex-generator.js +180 -0
  84. package/dist/src/latex-export/generator/latex-generator.js.map +1 -0
  85. package/dist/src/latex-export/index.d.ts +8 -0
  86. package/dist/src/latex-export/index.js +25 -0
  87. package/dist/src/latex-export/index.js.map +1 -0
  88. package/dist/src/latex-export/output/md-formatter.d.ts +16 -0
  89. package/dist/src/latex-export/output/md-formatter.js +27 -0
  90. package/dist/src/latex-export/output/md-formatter.js.map +1 -0
  91. package/dist/src/latex-export/output/tex-formatter.d.ts +5 -0
  92. package/dist/src/latex-export/output/tex-formatter.js +20 -0
  93. package/dist/src/latex-export/output/tex-formatter.js.map +1 -0
  94. package/dist/src/latex-export/parser/ast-parser.d.ts +7 -0
  95. package/dist/src/latex-export/parser/ast-parser.js +153 -0
  96. package/dist/src/latex-export/parser/ast-parser.js.map +1 -0
  97. package/dist/src/latex-export/parser/ivp-parser.d.ts +6 -0
  98. package/dist/src/latex-export/parser/ivp-parser.js +219 -0
  99. package/dist/src/latex-export/parser/ivp-parser.js.map +1 -0
  100. package/dist/src/latex-export/parser/line-joiner.d.ts +25 -0
  101. package/dist/src/latex-export/parser/line-joiner.js +80 -0
  102. package/dist/src/latex-export/parser/line-joiner.js.map +1 -0
  103. package/dist/src/latex-export/parser/tokenizer.d.ts +7 -0
  104. package/dist/src/latex-export/parser/tokenizer.js +143 -0
  105. package/dist/src/latex-export/parser/tokenizer.js.map +1 -0
  106. package/dist/src/latex-export/transformer/functions.d.ts +12 -0
  107. package/dist/src/latex-export/transformer/functions.js +47 -0
  108. package/dist/src/latex-export/transformer/functions.js.map +1 -0
  109. package/dist/src/latex-export/transformer/identifier.d.ts +23 -0
  110. package/dist/src/latex-export/transformer/identifier.js +194 -0
  111. package/dist/src/latex-export/transformer/identifier.js.map +1 -0
  112. package/dist/src/latex-export/transformer/operators.d.ts +9 -0
  113. package/dist/src/latex-export/transformer/operators.js +41 -0
  114. package/dist/src/latex-export/transformer/operators.js.map +1 -0
  115. package/dist/src/latex-export/types.d.ts +122 -0
  116. package/dist/src/latex-export/types.js +10 -0
  117. package/dist/src/latex-export/types.js.map +1 -0
  118. package/{src/pipeline/basic-pipeline-creator.ts → dist/src/pipeline/basic-pipeline-creator.d.ts} +11 -28
  119. package/dist/src/pipeline/basic-pipeline-creator.js.map +1 -0
  120. package/dist/src/pipeline/constants.d.ts +14 -0
  121. package/dist/src/pipeline/constants.js.map +1 -0
  122. package/dist/src/pipeline/index.d.ts +7 -0
  123. package/dist/src/pipeline/index.js.map +1 -0
  124. package/dist/src/pipeline/input.d.ts +3 -0
  125. package/dist/src/pipeline/input.js.map +1 -0
  126. package/dist/src/pipeline/loops-pipeline-creator.d.ts +124 -0
  127. package/dist/src/pipeline/loops-pipeline-creator.js.map +1 -0
  128. package/dist/src/pipeline/output.d.ts +10 -0
  129. package/{src → dist/src}/pipeline/output.js +1 -1
  130. package/dist/src/pipeline/output.js.map +1 -0
  131. package/dist/src/pipeline/pipeline-creator.d.ts +12 -0
  132. package/{src → dist/src}/pipeline/pipeline-creator.js +2 -0
  133. package/dist/src/pipeline/pipeline-creator.js.map +1 -0
  134. package/{src/pipeline/pipeline.ts → dist/src/pipeline/pipeline.d.ts} +10 -97
  135. package/dist/src/pipeline/pipeline.js.map +1 -0
  136. package/{src/pipeline/updates-pipeline-creator.ts → dist/src/pipeline/updates-pipeline-creator.d.ts} +15 -131
  137. package/dist/src/pipeline/updates-pipeline-creator.js.map +1 -0
  138. package/dist/src/scripting-tools/constants.d.ts +59 -0
  139. package/dist/src/scripting-tools/constants.js.map +1 -0
  140. package/dist/src/scripting-tools/index.d.ts +3 -0
  141. package/dist/src/scripting-tools/index.js.map +1 -0
  142. package/dist/src/scripting-tools/model-error.d.ts +10 -0
  143. package/{src → dist/src}/scripting-tools/model-error.js +2 -1
  144. package/dist/src/scripting-tools/model-error.js.map +1 -0
  145. package/dist/src/scripting-tools/scripting-tools.d.ts +277 -0
  146. package/{src → dist/src}/scripting-tools/scripting-tools.js +2 -4
  147. package/dist/src/scripting-tools/scripting-tools.js.map +1 -0
  148. package/dist/src/solver-tools/ab4-method.d.ts +46 -0
  149. package/{src → dist/src}/solver-tools/ab4-method.js +3 -3
  150. package/dist/src/solver-tools/ab4-method.js.map +1 -0
  151. package/dist/src/solver-tools/ab5-method.d.ts +46 -0
  152. package/{src → dist/src}/solver-tools/ab5-method.js +3 -3
  153. package/dist/src/solver-tools/ab5-method.js.map +1 -0
  154. package/dist/src/solver-tools/callbacks/callback-base.d.ts +8 -0
  155. package/dist/src/solver-tools/callbacks/callback-base.js.map +1 -0
  156. package/dist/src/solver-tools/callbacks/callback-tools.d.ts +6 -0
  157. package/dist/src/solver-tools/callbacks/callback-tools.js.map +1 -0
  158. package/dist/src/solver-tools/callbacks/iter-checker-callback.d.ts +12 -0
  159. package/{src → dist/src}/solver-tools/callbacks/iter-checker-callback.js +2 -0
  160. package/dist/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -0
  161. package/dist/src/solver-tools/callbacks/time-checker-callback.d.ts +12 -0
  162. package/{src → dist/src}/solver-tools/callbacks/time-checker-callback.js +2 -2
  163. package/dist/src/solver-tools/callbacks/time-checker-callback.js.map +1 -0
  164. package/dist/src/solver-tools/cvode/common.d.ts +395 -0
  165. package/dist/src/solver-tools/cvode/common.js +483 -0
  166. package/dist/src/solver-tools/cvode/common.js.map +1 -0
  167. package/dist/src/solver-tools/cvode/cvode.d.ts +23 -0
  168. package/dist/src/solver-tools/cvode/cvode.js.map +1 -0
  169. package/dist/src/solver-tools/cvode/cvode_adams.d.ts +22 -0
  170. package/dist/src/solver-tools/cvode/cvode_adams.js.map +1 -0
  171. package/dist/src/solver-tools/cvode/cvode_bdf.d.ts +37 -0
  172. package/dist/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
  173. package/dist/src/solver-tools/cvode/cvode_class.d.ts +116 -0
  174. package/{src → dist/src}/solver-tools/cvode/cvode_class.js +9 -4
  175. package/dist/src/solver-tools/cvode/cvode_class.js.map +1 -0
  176. package/dist/src/solver-tools/cvode/cvode_hin.d.ts +24 -0
  177. package/dist/src/solver-tools/cvode/cvode_hin.js.map +1 -0
  178. package/dist/src/solver-tools/cvode/cvode_io.d.ts +98 -0
  179. package/{src → dist/src}/solver-tools/cvode/cvode_io.js +1 -2
  180. package/dist/src/solver-tools/cvode/cvode_io.js.map +1 -0
  181. package/dist/src/solver-tools/cvode/cvode_ls.d.ts +23 -0
  182. package/dist/src/solver-tools/cvode/cvode_ls.js.map +1 -0
  183. package/dist/src/solver-tools/cvode/cvode_nls.d.ts +25 -0
  184. package/dist/src/solver-tools/cvode/cvode_nls.js.map +1 -0
  185. package/dist/src/solver-tools/cvode/cvode_root.d.ts +64 -0
  186. package/dist/src/solver-tools/cvode/cvode_root.js.map +1 -0
  187. package/dist/src/solver-tools/cvode/dense_linalg.d.ts +50 -0
  188. package/dist/src/solver-tools/cvode/dense_linalg.js.map +1 -0
  189. package/dist/src/solver-tools/cvode/index.d.ts +24 -0
  190. package/dist/src/solver-tools/cvode/index.js.map +1 -0
  191. package/dist/src/solver-tools/cvode-method.d.ts +47 -0
  192. package/dist/src/solver-tools/cvode-method.js.map +1 -0
  193. package/dist/src/solver-tools/index.d.ts +16 -0
  194. package/dist/src/solver-tools/index.js.map +1 -0
  195. package/dist/src/solver-tools/lin-alg-tools.d.ts +6 -0
  196. package/dist/src/solver-tools/lin-alg-tools.js.map +1 -0
  197. package/dist/src/solver-tools/lsoda/blas.d.ts +59 -0
  198. package/dist/src/solver-tools/lsoda/blas.js.map +1 -0
  199. package/{src/solver-tools/lsoda/index.ts → dist/src/solver-tools/lsoda/cfode.d.ts} +7 -6
  200. package/dist/src/solver-tools/lsoda/cfode.js.map +1 -0
  201. package/dist/src/solver-tools/lsoda/common.d.ts +85 -0
  202. package/dist/src/solver-tools/lsoda/common.js +96 -0
  203. package/dist/src/solver-tools/lsoda/common.js.map +1 -0
  204. package/{src/solver-tools/lsoda/corfailure.ts → dist/src/solver-tools/lsoda/corfailure.d.ts} +2 -26
  205. package/dist/src/solver-tools/lsoda/corfailure.js.map +1 -0
  206. package/dist/src/solver-tools/lsoda/correction.d.ts +23 -0
  207. package/dist/src/solver-tools/lsoda/correction.js.map +1 -0
  208. package/dist/src/solver-tools/lsoda/dense.d.ts +47 -0
  209. package/{src → dist/src}/solver-tools/lsoda/dense.js +2 -0
  210. package/dist/src/solver-tools/lsoda/dense.js.map +1 -0
  211. package/dist/src/solver-tools/lsoda/index.d.ts +16 -0
  212. package/dist/src/solver-tools/lsoda/index.js.map +1 -0
  213. package/dist/src/solver-tools/lsoda/intdy.d.ts +19 -0
  214. package/dist/src/solver-tools/lsoda/intdy.js.map +1 -0
  215. package/dist/src/solver-tools/lsoda/lsoda.d.ts +66 -0
  216. package/{src → dist/src}/solver-tools/lsoda/lsoda.js +13 -5
  217. package/dist/src/solver-tools/lsoda/lsoda.js.map +1 -0
  218. package/dist/src/solver-tools/lsoda/methodswitch.d.ts +21 -0
  219. package/dist/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  220. package/dist/src/solver-tools/lsoda/orderswitch.d.ts +21 -0
  221. package/dist/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  222. package/dist/src/solver-tools/lsoda/prja.d.ts +18 -0
  223. package/dist/src/solver-tools/lsoda/prja.js.map +1 -0
  224. package/dist/src/solver-tools/lsoda/scaleh.d.ts +16 -0
  225. package/dist/src/solver-tools/lsoda/scaleh.js.map +1 -0
  226. package/{src/solver-tools/lsoda/solsy.ts → dist/src/solver-tools/lsoda/solsy.d.ts} +2 -15
  227. package/dist/src/solver-tools/lsoda/solsy.js.map +1 -0
  228. package/dist/src/solver-tools/lsoda/stoda.d.ts +19 -0
  229. package/dist/src/solver-tools/lsoda/stoda.js.map +1 -0
  230. package/dist/src/solver-tools/lsoda-method.d.ts +46 -0
  231. package/dist/src/solver-tools/lsoda-method.js.map +1 -0
  232. package/dist/src/solver-tools/mrt-method.d.ts +47 -0
  233. package/{src → dist/src}/solver-tools/mrt-method.js +2 -2
  234. package/dist/src/solver-tools/mrt-method.js.map +1 -0
  235. package/dist/src/solver-tools/rk3-method.d.ts +46 -0
  236. package/{src → dist/src}/solver-tools/rk3-method.js +2 -2
  237. package/dist/src/solver-tools/rk3-method.js.map +1 -0
  238. package/dist/src/solver-tools/rk4-method.d.ts +46 -0
  239. package/{src → dist/src}/solver-tools/rk4-method.js +2 -2
  240. package/dist/src/solver-tools/rk4-method.js.map +1 -0
  241. package/dist/src/solver-tools/rkdp-method.d.ts +46 -0
  242. package/{src → dist/src}/solver-tools/rkdp-method.js +2 -2
  243. package/dist/src/solver-tools/rkdp-method.js.map +1 -0
  244. package/dist/src/solver-tools/ros34prw-method.d.ts +46 -0
  245. package/{src → dist/src}/solver-tools/ros34prw-method.js +2 -2
  246. package/dist/src/solver-tools/ros34prw-method.js.map +1 -0
  247. package/dist/src/solver-tools/ros3prw-method.d.ts +46 -0
  248. package/{src → dist/src}/solver-tools/ros3prw-method.js +2 -2
  249. package/dist/src/solver-tools/ros3prw-method.js.map +1 -0
  250. package/{src/solver-tools/solver-defs.ts → dist/src/solver-tools/solver-defs.d.ts} +45 -85
  251. package/dist/src/solver-tools/solver-defs.js.map +1 -0
  252. package/dist/src/worker-tools/index.d.ts +2 -0
  253. package/dist/src/worker-tools/index.js.map +1 -0
  254. package/{src/worker-tools/scripting.ts → dist/src/worker-tools/scripting.d.ts} +9 -91
  255. package/dist/src/worker-tools/scripting.js.map +1 -0
  256. package/dist/src/worker-tools/solving.d.ts +7 -0
  257. package/dist/src/worker-tools/solving.js.map +1 -0
  258. package/package.json +10 -11
  259. package/.claude/settings.local.json +0 -11
  260. package/.claude/skills/license-updater/SKILL.md +0 -149
  261. package/.claude/skills/license-updater/references/compatibility.md +0 -68
  262. package/.claude/skills/license-updater/references/templates.md +0 -151
  263. package/.claude/skills/license-updater/scripts/generate_license_files.py +0 -467
  264. package/.eslintrc.json +0 -45
  265. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -29
  266. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  267. package/.github/PULL_REQUEST_TEMPLATE.md +0 -22
  268. package/.github/scripts/bump-js-api-version.sh +0 -106
  269. package/.github/scripts/check-output.sh +0 -20
  270. package/.github/scripts/iac-cfn-deploy.sh +0 -90
  271. package/.github/scripts/slack_api_request.sh +0 -65
  272. package/.github/scripts/test_package.sh +0 -270
  273. package/.github/workflows/deploy-docs.yml +0 -15
  274. package/.github/workflows/libraries.yaml +0 -305
  275. package/.github/workflows/test.yaml +0 -19
  276. package/CLAUDE.md +0 -104
  277. package/CONTRIBUTING.md +0 -74
  278. package/THIRD_PARTY_LICENSES +0 -135
  279. package/docs/.nojekyll +0 -1
  280. package/docs/assets/hierarchy.js +0 -1
  281. package/docs/assets/highlight.css +0 -99
  282. package/docs/assets/icons.js +0 -18
  283. package/docs/assets/icons.svg +0 -1
  284. package/docs/assets/main.js +0 -60
  285. package/docs/assets/navigation.js +0 -1
  286. package/docs/assets/search.js +0 -1
  287. package/docs/assets/style.css +0 -1633
  288. package/docs/classes/BasicModelPipelineCreator.html +0 -10
  289. package/docs/classes/Callback.html +0 -7
  290. package/docs/classes/CyclicModelPipelineCreator.html +0 -10
  291. package/docs/classes/IterCheckerCallback.html +0 -8
  292. package/docs/classes/PipelineCreator.html +0 -6
  293. package/docs/classes/TimeCheckerCallback.html +0 -8
  294. package/docs/classes/UpdatesModelPipelineCreator.html +0 -10
  295. package/docs/functions/ab4.html +0 -8
  296. package/docs/functions/ab5.html +0 -8
  297. package/docs/functions/applyPipeline.html +0 -9
  298. package/docs/functions/getCallback.html +0 -3
  299. package/docs/functions/getIVP.html +0 -6
  300. package/docs/functions/getInputVector.html +0 -2
  301. package/docs/functions/getIvp2WebWorker.html +0 -6
  302. package/docs/functions/getJScode.html +0 -6
  303. package/docs/functions/getOutputNames.html +0 -4
  304. package/docs/functions/getPipelineCreator.html +0 -7
  305. package/docs/functions/lsoda.html +0 -8
  306. package/docs/functions/mrt.html +0 -11
  307. package/docs/functions/printE5.html +0 -76
  308. package/docs/functions/printHires.html +0 -76
  309. package/docs/functions/printOrego.html +0 -66
  310. package/docs/functions/printPollution.html +0 -163
  311. package/docs/functions/printRobertson.html +0 -60
  312. package/docs/functions/printVdpol.html +0 -66
  313. package/docs/functions/rk3.html +0 -8
  314. package/docs/functions/rk4.html +0 -8
  315. package/docs/functions/rkdp.html +0 -8
  316. package/docs/functions/ros34prw.html +0 -8
  317. package/docs/functions/ros3prw.html +0 -8
  318. package/docs/functions/solveIvp.html +0 -5
  319. package/docs/hierarchy.html +0 -1
  320. package/docs/index.html +0 -768
  321. package/docs/media/CONTRIBUTING.md +0 -74
  322. package/docs/media/E5.png +0 -0
  323. package/docs/media/HIRES.png +0 -0
  324. package/docs/media/OREGO.png +0 -0
  325. package/docs/media/POLL-full.png +0 -0
  326. package/docs/media/POLL.png +0 -0
  327. package/docs/media/ROBER.png +0 -0
  328. package/docs/media/VDP0L.png +0 -0
  329. package/docs/media/VDPOL.png +0 -0
  330. package/docs/media/acid-prod.gif +0 -0
  331. package/docs/media/basic-use.js.map +0 -1
  332. package/docs/media/basic-use.ts +0 -44
  333. package/docs/media/check-methods.js +0 -59
  334. package/docs/media/check-methods.js.map +0 -1
  335. package/docs/media/check-methods.ts +0 -81
  336. package/docs/media/corr-probs.js +0 -132
  337. package/docs/media/corr-probs.js.map +0 -1
  338. package/docs/media/corr-probs.ts +0 -155
  339. package/docs/media/cyclic-model.js.map +0 -1
  340. package/docs/media/cyclic-model.ts +0 -112
  341. package/docs/media/e5.js.map +0 -1
  342. package/docs/media/e5.ts +0 -36
  343. package/docs/media/hires.js.map +0 -1
  344. package/docs/media/hires.ts +0 -40
  345. package/docs/media/model-updates.js.map +0 -1
  346. package/docs/media/model-updates.ts +0 -122
  347. package/docs/media/orego.js.map +0 -1
  348. package/docs/media/orego.ts +0 -25
  349. package/docs/media/pipeline-use.js.map +0 -1
  350. package/docs/media/pipeline-use.ts +0 -98
  351. package/docs/media/pollution.js.map +0 -1
  352. package/docs/media/pollution.ts +0 -133
  353. package/docs/media/print-benchmark.js.map +0 -1
  354. package/docs/media/print-benchmark.ts +0 -594
  355. package/docs/media/robertson.js.map +0 -1
  356. package/docs/media/robertson.ts +0 -19
  357. package/docs/media/scripting.js.map +0 -1
  358. package/docs/media/scripting.ts +0 -35
  359. package/docs/media/vdpol.js.map +0 -1
  360. package/docs/media/vdpol.ts +0 -17
  361. package/docs/modules.html +0 -1
  362. package/docs/types/Arg.html +0 -12
  363. package/docs/types/DifEqs.html +0 -8
  364. package/docs/types/Func.html +0 -7
  365. package/docs/types/IVP.html +0 -40
  366. package/docs/types/IVP2WebWorker.html +0 -12
  367. package/docs/types/Input.html +0 -8
  368. package/docs/types/Loop.html +0 -7
  369. package/docs/types/ODEs.html +0 -31
  370. package/docs/types/Output.html +0 -6
  371. package/docs/types/Pipeline.html +0 -6
  372. package/docs/types/SolverOptions.html +0 -8
  373. package/docs/types/Update.html +0 -9
  374. package/docs/types/Wrapper.html +0 -8
  375. package/eslintrc.json +0 -45
  376. package/images/E5.png +0 -0
  377. package/images/HIRES.png +0 -0
  378. package/images/OREGO.png +0 -0
  379. package/images/POLL-full.png +0 -0
  380. package/images/POLL.png +0 -0
  381. package/images/ROBER.png +0 -0
  382. package/images/VDP0L.png +0 -0
  383. package/images/VDPOL.png +0 -0
  384. package/images/acid-prod.gif +0 -0
  385. package/index.js.map +0 -1
  386. package/index.ts +0 -17
  387. package/jest.config.js +0 -13
  388. package/src/examples/basic-use.js +0 -40
  389. package/src/examples/basic-use.js.map +0 -1
  390. package/src/examples/basic-use.ts +0 -44
  391. package/src/examples/check-methods.js.map +0 -1
  392. package/src/examples/check-methods.ts +0 -96
  393. package/src/examples/corr-probs.js.map +0 -1
  394. package/src/examples/corr-probs.ts +0 -155
  395. package/src/examples/cyclic-model.js +0 -102
  396. package/src/examples/cyclic-model.js.map +0 -1
  397. package/src/examples/cyclic-model.ts +0 -112
  398. package/src/examples/e5.js +0 -36
  399. package/src/examples/e5.js.map +0 -1
  400. package/src/examples/e5.ts +0 -36
  401. package/src/examples/hires.js +0 -39
  402. package/src/examples/hires.js.map +0 -1
  403. package/src/examples/hires.ts +0 -40
  404. package/src/examples/index.js.map +0 -1
  405. package/src/examples/index.ts +0 -34
  406. package/src/examples/model-updates.js +0 -112
  407. package/src/examples/model-updates.js.map +0 -1
  408. package/src/examples/model-updates.ts +0 -122
  409. package/src/examples/orego.js +0 -24
  410. package/src/examples/orego.js.map +0 -1
  411. package/src/examples/orego.ts +0 -25
  412. package/src/examples/pipeline-use.js +0 -87
  413. package/src/examples/pipeline-use.js.map +0 -1
  414. package/src/examples/pipeline-use.ts +0 -98
  415. package/src/examples/pollution.js +0 -132
  416. package/src/examples/pollution.js.map +0 -1
  417. package/src/examples/pollution.ts +0 -133
  418. package/src/examples/print-benchmark.js +0 -581
  419. package/src/examples/print-benchmark.js.map +0 -1
  420. package/src/examples/robertson.js +0 -19
  421. package/src/examples/robertson.js.map +0 -1
  422. package/src/examples/robertson.ts +0 -19
  423. package/src/examples/scripting.js +0 -30
  424. package/src/examples/scripting.js.map +0 -1
  425. package/src/examples/scripting.ts +0 -35
  426. package/src/examples/vdpol.js +0 -17
  427. package/src/examples/vdpol.js.map +0 -1
  428. package/src/examples/vdpol.ts +0 -17
  429. package/src/pipeline/basic-pipeline-creator.js.map +0 -1
  430. package/src/pipeline/constants.js.map +0 -1
  431. package/src/pipeline/constants.ts +0 -21
  432. package/src/pipeline/index.js.map +0 -1
  433. package/src/pipeline/index.ts +0 -7
  434. package/src/pipeline/input.js.map +0 -1
  435. package/src/pipeline/input.ts +0 -55
  436. package/src/pipeline/loops-pipeline-creator.js.map +0 -1
  437. package/src/pipeline/loops-pipeline-creator.ts +0 -252
  438. package/src/pipeline/output.js.map +0 -1
  439. package/src/pipeline/output.ts +0 -201
  440. package/src/pipeline/pipeline-creator.js.map +0 -1
  441. package/src/pipeline/pipeline-creator.ts +0 -20
  442. package/src/pipeline/pipeline.js.map +0 -1
  443. package/src/pipeline/updates-pipeline-creator.js.map +0 -1
  444. package/src/scripting-tools/constants.js.map +0 -1
  445. package/src/scripting-tools/constants.ts +0 -69
  446. package/src/scripting-tools/index.js.map +0 -1
  447. package/src/scripting-tools/index.ts +0 -8
  448. package/src/scripting-tools/model-error.js.map +0 -1
  449. package/src/scripting-tools/model-error.ts +0 -21
  450. package/src/scripting-tools/scripting-tools.js.map +0 -1
  451. package/src/scripting-tools/scripting-tools.ts +0 -1582
  452. package/src/solver-tools/ab4-method.js.map +0 -1
  453. package/src/solver-tools/ab4-method.ts +0 -395
  454. package/src/solver-tools/ab5-method.js.map +0 -1
  455. package/src/solver-tools/ab5-method.ts +0 -397
  456. package/src/solver-tools/callbacks/callback-base.js.map +0 -1
  457. package/src/solver-tools/callbacks/callback-base.ts +0 -12
  458. package/src/solver-tools/callbacks/callback-tools.js.map +0 -1
  459. package/src/solver-tools/callbacks/callback-tools.ts +0 -22
  460. package/src/solver-tools/callbacks/iter-checker-callback.js.map +0 -1
  461. package/src/solver-tools/callbacks/iter-checker-callback.ts +0 -25
  462. package/src/solver-tools/callbacks/time-checker-callback.js.map +0 -1
  463. package/src/solver-tools/callbacks/time-checker-callback.ts +0 -23
  464. package/src/solver-tools/cvode/common.js +0 -487
  465. package/src/solver-tools/cvode/common.js.map +0 -1
  466. package/src/solver-tools/cvode/common.ts +0 -549
  467. package/src/solver-tools/cvode/cvode.js.map +0 -1
  468. package/src/solver-tools/cvode/cvode.ts +0 -1226
  469. package/src/solver-tools/cvode/cvode_adams.js.map +0 -1
  470. package/src/solver-tools/cvode/cvode_adams.ts +0 -142
  471. package/src/solver-tools/cvode/cvode_bdf.js.map +0 -1
  472. package/src/solver-tools/cvode/cvode_bdf.ts +0 -164
  473. package/src/solver-tools/cvode/cvode_class.js.map +0 -1
  474. package/src/solver-tools/cvode/cvode_class.ts +0 -271
  475. package/src/solver-tools/cvode/cvode_hin.js.map +0 -1
  476. package/src/solver-tools/cvode/cvode_hin.ts +0 -150
  477. package/src/solver-tools/cvode/cvode_io.js.map +0 -1
  478. package/src/solver-tools/cvode/cvode_io.ts +0 -258
  479. package/src/solver-tools/cvode/cvode_ls.js.map +0 -1
  480. package/src/solver-tools/cvode/cvode_ls.ts +0 -249
  481. package/src/solver-tools/cvode/cvode_nls.js.map +0 -1
  482. package/src/solver-tools/cvode/cvode_nls.ts +0 -259
  483. package/src/solver-tools/cvode/cvode_root.js.map +0 -1
  484. package/src/solver-tools/cvode/cvode_root.ts +0 -503
  485. package/src/solver-tools/cvode/dense_linalg.js.map +0 -1
  486. package/src/solver-tools/cvode/dense_linalg.ts +0 -144
  487. package/src/solver-tools/cvode/index.js.map +0 -1
  488. package/src/solver-tools/cvode/index.ts +0 -64
  489. package/src/solver-tools/cvode-method.js.map +0 -1
  490. package/src/solver-tools/cvode-method.ts +0 -129
  491. package/src/solver-tools/index.js.map +0 -1
  492. package/src/solver-tools/index.ts +0 -16
  493. package/src/solver-tools/lin-alg-tools.js.map +0 -1
  494. package/src/solver-tools/lin-alg-tools.ts +0 -75
  495. package/src/solver-tools/lsoda/blas.js.map +0 -1
  496. package/src/solver-tools/lsoda/blas.ts +0 -279
  497. package/src/solver-tools/lsoda/cfode.js.map +0 -1
  498. package/src/solver-tools/lsoda/cfode.ts +0 -95
  499. package/src/solver-tools/lsoda/common.js +0 -94
  500. package/src/solver-tools/lsoda/common.js.map +0 -1
  501. package/src/solver-tools/lsoda/common.ts +0 -135
  502. package/src/solver-tools/lsoda/corfailure.js.map +0 -1
  503. package/src/solver-tools/lsoda/correction.js.map +0 -1
  504. package/src/solver-tools/lsoda/correction.ts +0 -131
  505. package/src/solver-tools/lsoda/dense.js.map +0 -1
  506. package/src/solver-tools/lsoda/dense.ts +0 -141
  507. package/src/solver-tools/lsoda/index.js.map +0 -1
  508. package/src/solver-tools/lsoda/intdy.js.map +0 -1
  509. package/src/solver-tools/lsoda/intdy.ts +0 -62
  510. package/src/solver-tools/lsoda/lsoda.js.map +0 -1
  511. package/src/solver-tools/lsoda/lsoda.ts +0 -644
  512. package/src/solver-tools/lsoda/methodswitch.js.map +0 -1
  513. package/src/solver-tools/lsoda/methodswitch.ts +0 -119
  514. package/src/solver-tools/lsoda/orderswitch.js.map +0 -1
  515. package/src/solver-tools/lsoda/orderswitch.ts +0 -107
  516. package/src/solver-tools/lsoda/prja.js.map +0 -1
  517. package/src/solver-tools/lsoda/prja.ts +0 -61
  518. package/src/solver-tools/lsoda/scaleh.js.map +0 -1
  519. package/src/solver-tools/lsoda/scaleh.ts +0 -45
  520. package/src/solver-tools/lsoda/solsy.js.map +0 -1
  521. package/src/solver-tools/lsoda/stoda.js.map +0 -1
  522. package/src/solver-tools/lsoda/stoda.ts +0 -298
  523. package/src/solver-tools/lsoda-method.js.map +0 -1
  524. package/src/solver-tools/lsoda-method.ts +0 -154
  525. package/src/solver-tools/mrt-method.js.map +0 -1
  526. package/src/solver-tools/mrt-method.ts +0 -398
  527. package/src/solver-tools/rk3-method.js.map +0 -1
  528. package/src/solver-tools/rk3-method.ts +0 -257
  529. package/src/solver-tools/rk4-method.js.map +0 -1
  530. package/src/solver-tools/rk4-method.ts +0 -286
  531. package/src/solver-tools/rkdp-method.js.map +0 -1
  532. package/src/solver-tools/rkdp-method.ts +0 -300
  533. package/src/solver-tools/ros34prw-method.js.map +0 -1
  534. package/src/solver-tools/ros34prw-method.ts +0 -373
  535. package/src/solver-tools/ros3prw-method.js.map +0 -1
  536. package/src/solver-tools/ros3prw-method.ts +0 -342
  537. package/src/solver-tools/solver-defs.js.map +0 -1
  538. package/src/tests/correctness.test.js +0 -15
  539. package/src/tests/correctness.test.js.map +0 -1
  540. package/src/tests/correctness.test.ts +0 -16
  541. package/src/tests/cvode-lib-correctness.test.js +0 -404
  542. package/src/tests/cvode-lib-correctness.test.js.map +0 -1
  543. package/src/tests/cvode-lib-correctness.test.ts +0 -505
  544. package/src/tests/cvode-lib-performance.test.js +0 -103
  545. package/src/tests/cvode-lib-performance.test.js.map +0 -1
  546. package/src/tests/cvode-lib-performance.test.ts +0 -128
  547. package/src/tests/lsoda-lib-correctness.test.js +0 -223
  548. package/src/tests/lsoda-lib-correctness.test.js.map +0 -1
  549. package/src/tests/lsoda-lib-correctness.test.ts +0 -283
  550. package/src/tests/lsoda-lib-performance.test.js +0 -95
  551. package/src/tests/lsoda-lib-performance.test.js.map +0 -1
  552. package/src/tests/lsoda-lib-performance.test.ts +0 -126
  553. package/src/tests/performance.test.js +0 -18
  554. package/src/tests/performance.test.js.map +0 -1
  555. package/src/tests/performance.test.ts +0 -19
  556. package/src/tests/pipeline.test.js +0 -10
  557. package/src/tests/pipeline.test.js.map +0 -1
  558. package/src/tests/pipeline.test.ts +0 -11
  559. package/src/tests/test-defs.js +0 -213
  560. package/src/tests/test-defs.js.map +0 -1
  561. package/src/tests/test-defs.ts +0 -232
  562. package/src/tests/test-utils.js +0 -28
  563. package/src/tests/test-utils.js.map +0 -1
  564. package/src/tests/test-utils.ts +0 -37
  565. package/src/worker-tools/index.js.map +0 -1
  566. package/src/worker-tools/index.ts +0 -2
  567. package/src/worker-tools/scripting.js.map +0 -1
  568. package/src/worker-tools/solving.js.map +0 -1
  569. package/src/worker-tools/solving.ts +0 -86
  570. package/tsconfig.json +0 -71
  571. package/typedoc.json +0 -8
  572. /package/{docs/media → dist/src/examples}/basic-use.js +0 -0
  573. /package/{src → dist/src}/examples/check-methods.js +0 -0
  574. /package/{docs/media → dist/src/examples}/cyclic-model.js +0 -0
  575. /package/{docs/media → dist/src/examples}/e5.js +0 -0
  576. /package/{docs/media → dist/src/examples}/hires.js +0 -0
  577. /package/{src → dist/src}/examples/index.js +0 -0
  578. /package/{docs/media → dist/src/examples}/model-updates.js +0 -0
  579. /package/{docs/media → dist/src/examples}/orego.js +0 -0
  580. /package/{docs/media → dist/src/examples}/pipeline-use.js +0 -0
  581. /package/{docs/media → dist/src/examples}/pollution.js +0 -0
  582. /package/{docs/media → dist/src/examples}/print-benchmark.js +0 -0
  583. /package/{docs/media → dist/src/examples}/scripting.js +0 -0
  584. /package/{docs/media → dist/src/examples}/vdpol.js +0 -0
  585. /package/{src → dist/src}/pipeline/basic-pipeline-creator.js +0 -0
  586. /package/{src → dist/src}/pipeline/constants.js +0 -0
  587. /package/{src → dist/src}/pipeline/index.js +0 -0
  588. /package/{src → dist/src}/pipeline/input.js +0 -0
  589. /package/{src → dist/src}/pipeline/loops-pipeline-creator.js +0 -0
  590. /package/{src → dist/src}/pipeline/pipeline.js +0 -0
  591. /package/{src → dist/src}/pipeline/updates-pipeline-creator.js +0 -0
  592. /package/{src → dist/src}/scripting-tools/constants.js +0 -0
  593. /package/{src → dist/src}/scripting-tools/index.js +0 -0
  594. /package/{src → dist/src}/solver-tools/callbacks/callback-base.js +0 -0
  595. /package/{src → dist/src}/solver-tools/callbacks/callback-tools.js +0 -0
  596. /package/{src → dist/src}/solver-tools/cvode/cvode.js +0 -0
  597. /package/{src → dist/src}/solver-tools/cvode/cvode_adams.js +0 -0
  598. /package/{src → dist/src}/solver-tools/cvode/cvode_bdf.js +0 -0
  599. /package/{src → dist/src}/solver-tools/cvode/cvode_hin.js +0 -0
  600. /package/{src → dist/src}/solver-tools/cvode/cvode_ls.js +0 -0
  601. /package/{src → dist/src}/solver-tools/cvode/cvode_nls.js +0 -0
  602. /package/{src → dist/src}/solver-tools/cvode/cvode_root.js +0 -0
  603. /package/{src → dist/src}/solver-tools/cvode/dense_linalg.js +0 -0
  604. /package/{src → dist/src}/solver-tools/cvode/index.js +0 -0
  605. /package/{src → dist/src}/solver-tools/cvode-method.js +0 -0
  606. /package/{src → dist/src}/solver-tools/index.js +0 -0
  607. /package/{src → dist/src}/solver-tools/lin-alg-tools.js +0 -0
  608. /package/{src → dist/src}/solver-tools/lsoda/blas.js +0 -0
  609. /package/{src → dist/src}/solver-tools/lsoda/cfode.js +0 -0
  610. /package/{src → dist/src}/solver-tools/lsoda/corfailure.js +0 -0
  611. /package/{src → dist/src}/solver-tools/lsoda/correction.js +0 -0
  612. /package/{src → dist/src}/solver-tools/lsoda/index.js +0 -0
  613. /package/{src → dist/src}/solver-tools/lsoda/intdy.js +0 -0
  614. /package/{src → dist/src}/solver-tools/lsoda/methodswitch.js +0 -0
  615. /package/{src → dist/src}/solver-tools/lsoda/orderswitch.js +0 -0
  616. /package/{src → dist/src}/solver-tools/lsoda/prja.js +0 -0
  617. /package/{src → dist/src}/solver-tools/lsoda/scaleh.js +0 -0
  618. /package/{src → dist/src}/solver-tools/lsoda/solsy.js +0 -0
  619. /package/{src → dist/src}/solver-tools/lsoda/stoda.js +0 -0
  620. /package/{src → dist/src}/solver-tools/lsoda-method.js +0 -0
  621. /package/{src → dist/src}/solver-tools/solver-defs.js +0 -0
  622. /package/{src → dist/src}/worker-tools/index.js +0 -0
  623. /package/{src → dist/src}/worker-tools/scripting.js +0 -0
  624. /package/{src → dist/src}/worker-tools/solving.js +0 -0
@@ -1,503 +0,0 @@
1
- /**
2
- * TypeScript port of SUNDIALS CVODE v7.5.0 (https://github.com/LLNL/sundials)
3
- *
4
- * Copyright (c) 2025, Lawrence Livermore National Security, University of
5
- * Maryland Baltimore County, and the SUNDIALS contributors.
6
- * Copyright (c) 2013-2025, Lawrence Livermore National Security and
7
- * Southern Methodist University.
8
- * Copyright (c) 2002-2013, Lawrence Livermore National Security.
9
- * Copyright (c) 2026 Datagrok.
10
- *
11
- * Licensed under the BSD-3-Clause License. See THIRD_PARTY_LICENSES
12
- * for the full license text and provenance chain of the original code.
13
- */
14
-
15
- // CVODE rootfinding routines
16
- // Ported from SUNDIALS cvode.c v7.5.0 (rootfinding section, lines ~821-4737)
17
-
18
- import {
19
- CvodeMem,
20
- CvodeRootFn,
21
- cvodeGetDky,
22
- vLinearSum,
23
- vScale,
24
- CV_SUCCESS,
25
- CV_RTFUNC_FAIL,
26
- RTFOUND,
27
- CLOSERT,
28
- UROUND,
29
- FUZZ_FACTOR,
30
- CV_NORMAL,
31
- CV_ONE_STEP,
32
- } from './common';
33
-
34
- // ============================================================================
35
- // Local constants (matching SUNDIALS cvode.c)
36
- // ============================================================================
37
-
38
- const ZERO = 0.0;
39
- const HALF = 0.5;
40
- const ONE = 1.0;
41
- const TWO = 2.0;
42
- const FIVE = 5.0;
43
- const HUNDRED = 100.0;
44
- const PT1 = 0.1;
45
-
46
- // ============================================================================
47
- // Exported functions
48
- // ============================================================================
49
-
50
- /**
51
- * CVodeRootInit - Initialize rootfinding for CVODE.
52
- *
53
- * C reference: CVodeRootInit (cvode.c, lines ~821-1012)
54
- *
55
- * If nrtfn <= 0, disables rootfinding and returns CV_SUCCESS.
56
- * Otherwise, allocates arrays for root functions and sets defaults.
57
- *
58
- * @param mem - CVODE memory block
59
- * @param nrtfn - number of root functions
60
- * @param g - root function callback
61
- * @returns CV_SUCCESS on success
62
- */
63
- export function cvodeRootInit(mem: CvodeMem, nrtfn: number, g: CvodeRootFn): number {
64
- // If nrtfn <= 0, disable rootfinding
65
- if (nrtfn <= 0) {
66
- mem.cv_nrtfn = 0;
67
- mem.cv_gfun = null;
68
- return CV_SUCCESS;
69
- }
70
-
71
- mem.cv_nrtfn = nrtfn;
72
- mem.cv_gfun = g;
73
-
74
- // Allocate Float64Arrays for g values
75
- mem.cv_glo = new Float64Array(nrtfn);
76
- mem.cv_ghi = new Float64Array(nrtfn);
77
- mem.cv_grout = new Float64Array(nrtfn);
78
-
79
- // Allocate Int32Arrays for root info and direction
80
- mem.cv_iroots = new Int32Array(nrtfn);
81
- mem.cv_rootdir = new Int32Array(nrtfn);
82
-
83
- // Allocate Uint8Array for active flags
84
- mem.cv_gactive = new Uint8Array(nrtfn);
85
-
86
- // Set default values: rootdir = 0 (both directions), gactive = 1 (all active)
87
- mem.cv_rootdir.fill(0);
88
- mem.cv_gactive.fill(1);
89
-
90
- return CV_SUCCESS;
91
- }
92
-
93
- /**
94
- * cvRcheck1 - First-step root check.
95
- *
96
- * C reference: cvRcheck1 (cvode.c, lines ~4251-4300)
97
- *
98
- * Completes initialization of rootfinding memory and checks whether g
99
- * has a zero both at and very near the initial point of the IVP.
100
- *
101
- * @param mem - CVODE memory block
102
- * @returns CV_SUCCESS or CV_RTFUNC_FAIL
103
- */
104
- export function cvRcheck1(mem: CvodeMem): number {
105
- const nrtfn = mem.cv_nrtfn;
106
- const N = mem.cv_N;
107
-
108
- for (let i = 0; i < nrtfn; i++)
109
- mem.cv_iroots[i] = 0;
110
-
111
-
112
- mem.cv_tlo = mem.cv_tn;
113
- mem.cv_ttol = (Math.abs(mem.cv_tn) + Math.abs(mem.cv_h)) * UROUND * HUNDRED;
114
-
115
- // Evaluate g at initial t and check for zero values
116
- const retval = mem.cv_gfun!(mem.cv_tlo, mem.cv_zn[0], mem.cv_glo, mem.cv_user_data);
117
- mem.cv_nge = 1;
118
- if (retval !== 0)
119
- return CV_RTFUNC_FAIL;
120
-
121
-
122
- let zroot = false;
123
- for (let i = 0; i < nrtfn; i++) {
124
- if (Math.abs(mem.cv_glo[i]) === ZERO) {
125
- zroot = true;
126
- mem.cv_gactive[i] = 0; // SUNFALSE
127
- }
128
- }
129
- if (!zroot)
130
- return CV_SUCCESS;
131
-
132
-
133
- // Some g_i is zero at t0; look at g at t0+(small increment)
134
- const hratio = Math.max(mem.cv_ttol / Math.abs(mem.cv_h), PT1);
135
- const smallh = hratio * mem.cv_h;
136
- const tplus = mem.cv_tlo + smallh;
137
-
138
- // y = zn[0] + hratio * zn[1]
139
- vLinearSum(ONE, mem.cv_zn[0], hratio, mem.cv_zn[1], mem.cv_y, N);
140
-
141
- const retval2 = mem.cv_gfun!(tplus, mem.cv_y, mem.cv_ghi, mem.cv_user_data);
142
- mem.cv_nge++;
143
- if (retval2 !== 0)
144
- return CV_RTFUNC_FAIL;
145
-
146
-
147
- // Re-activate components where g moved away from zero
148
- for (let i = 0; i < nrtfn; i++) {
149
- if (mem.cv_gactive[i] === 0 && Math.abs(mem.cv_ghi[i]) !== ZERO) {
150
- mem.cv_gactive[i] = 1; // SUNTRUE
151
- mem.cv_glo[i] = mem.cv_ghi[i];
152
- }
153
- }
154
-
155
- return CV_SUCCESS;
156
- }
157
-
158
- /**
159
- * cvRcheck2 - Subsequent-step root check for exact zeros at last root.
160
- *
161
- * C reference: cvRcheck2 (cvode.c, lines ~4323-4385)
162
- *
163
- * Checks for exact zeros of g at the last root found, for close pairs
164
- * of zeros (error condition), and for a new root at a nearby point.
165
- *
166
- * @param mem - CVODE memory block
167
- * @returns CV_SUCCESS, CLOSERT, RTFOUND, or CV_RTFUNC_FAIL
168
- */
169
- export function cvRcheck2(mem: CvodeMem): number {
170
- const nrtfn = mem.cv_nrtfn;
171
- const N = mem.cv_N;
172
-
173
- if (mem.cv_irfnd === 0)
174
- return CV_SUCCESS;
175
-
176
-
177
- // Get y at tlo via interpolation
178
- cvodeGetDky(mem, mem.cv_tlo, 0, mem.cv_y);
179
-
180
- // Evaluate g(tlo, y)
181
- let retval = mem.cv_gfun!(mem.cv_tlo, mem.cv_y, mem.cv_glo, mem.cv_user_data);
182
- mem.cv_nge++;
183
- if (retval !== 0)
184
- return CV_RTFUNC_FAIL;
185
-
186
-
187
- let zroot = false;
188
- for (let i = 0; i < nrtfn; i++)
189
- mem.cv_iroots[i] = 0;
190
-
191
- for (let i = 0; i < nrtfn; i++) {
192
- if (mem.cv_gactive[i] === 0) continue;
193
- if (Math.abs(mem.cv_glo[i]) === ZERO) {
194
- zroot = true;
195
- mem.cv_iroots[i] = 1;
196
- }
197
- }
198
- if (!zroot)
199
- return CV_SUCCESS;
200
-
201
-
202
- // One or more g_i has a zero at tlo. Check g at tlo+smallh.
203
- mem.cv_ttol = (Math.abs(mem.cv_tn) + Math.abs(mem.cv_h)) * UROUND * HUNDRED;
204
- const smallh = (mem.cv_h > ZERO) ? mem.cv_ttol : -mem.cv_ttol;
205
- const tplus = mem.cv_tlo + smallh;
206
-
207
- if ((tplus - mem.cv_tn) * mem.cv_h >= ZERO) {
208
- const hratio = smallh / mem.cv_h;
209
- // y = y + hratio * zn[1]
210
- vLinearSum(ONE, mem.cv_y, hratio, mem.cv_zn[1], mem.cv_y, N);
211
- } else
212
- cvodeGetDky(mem, tplus, 0, mem.cv_y);
213
-
214
-
215
- retval = mem.cv_gfun!(tplus, mem.cv_y, mem.cv_ghi, mem.cv_user_data);
216
- mem.cv_nge++;
217
- if (retval !== 0)
218
- return CV_RTFUNC_FAIL;
219
-
220
-
221
- // Check for close roots (error return), new zero at tlo+smallh,
222
- // and g_i that changed from zero to nonzero.
223
- zroot = false;
224
- for (let i = 0; i < nrtfn; i++) {
225
- if (mem.cv_gactive[i] === 0) continue;
226
- if (Math.abs(mem.cv_ghi[i]) === ZERO) {
227
- if (mem.cv_iroots[i] === 1)
228
- return CLOSERT;
229
-
230
- zroot = true;
231
- mem.cv_iroots[i] = 1;
232
- } else {
233
- if (mem.cv_iroots[i] === 1)
234
- mem.cv_glo[i] = mem.cv_ghi[i];
235
- }
236
- }
237
- if (zroot)
238
- return RTFOUND;
239
-
240
-
241
- return CV_SUCCESS;
242
- }
243
-
244
- /**
245
- * cvRcheck3 - Root search between tlo and tn (or tout).
246
- *
247
- * C reference: cvRcheck3 (cvode.c, lines ~4400-4453)
248
- *
249
- * Interfaces to cvRootfind to look for a root of g between tlo and
250
- * either tn or tout, whichever comes first.
251
- *
252
- * @param mem - CVODE memory block
253
- * @returns CV_SUCCESS, RTFOUND, or CV_RTFUNC_FAIL
254
- */
255
- export function cvRcheck3(mem: CvodeMem): number {
256
- const nrtfn = mem.cv_nrtfn;
257
- const N = mem.cv_N;
258
-
259
- // Set thi = tn or tout, whichever comes first; set y = y(thi)
260
- if (mem.cv_taskc === CV_ONE_STEP) {
261
- mem.cv_thi = mem.cv_tn;
262
- vScale(ONE, mem.cv_zn[0], mem.cv_y, N);
263
- }
264
- if (mem.cv_taskc === CV_NORMAL) {
265
- if ((mem.cv_toutc - mem.cv_tn) * mem.cv_h >= ZERO) {
266
- mem.cv_thi = mem.cv_tn;
267
- vScale(ONE, mem.cv_zn[0], mem.cv_y, N);
268
- } else {
269
- mem.cv_thi = mem.cv_toutc;
270
- cvodeGetDky(mem, mem.cv_thi, 0, mem.cv_y);
271
- }
272
- }
273
-
274
- // Evaluate g(thi, y) and call cvRootfind
275
- const retval = mem.cv_gfun!(mem.cv_thi, mem.cv_y, mem.cv_ghi, mem.cv_user_data);
276
- mem.cv_nge++;
277
- if (retval !== 0)
278
- return CV_RTFUNC_FAIL;
279
-
280
-
281
- mem.cv_ttol = (Math.abs(mem.cv_tn) + Math.abs(mem.cv_h)) * UROUND * HUNDRED;
282
- const ier = cvRootfind(mem);
283
- if (ier === CV_RTFUNC_FAIL)
284
- return CV_RTFUNC_FAIL;
285
-
286
-
287
- // Re-activate g components that moved away from zero
288
- for (let i = 0; i < nrtfn; i++) {
289
- if (mem.cv_gactive[i] === 0 && mem.cv_grout[i] !== ZERO)
290
- mem.cv_gactive[i] = 1; // SUNTRUE
291
- }
292
-
293
- mem.cv_tlo = mem.cv_trout;
294
- for (let i = 0; i < nrtfn; i++)
295
- mem.cv_glo[i] = mem.cv_grout[i];
296
-
297
-
298
- // If no root found, return CV_SUCCESS
299
- if (ier === CV_SUCCESS)
300
- return CV_SUCCESS;
301
-
302
-
303
- // If a root was found, interpolate to get y(trout) and return
304
- cvodeGetDky(mem, mem.cv_trout, 0, mem.cv_y);
305
- return RTFOUND;
306
- }
307
-
308
- // ============================================================================
309
- // Internal (non-exported) functions
310
- // ============================================================================
311
-
312
- /**
313
- * cvRootfind - Illinois algorithm for root finding.
314
- *
315
- * C reference: cvRootfind (cvode.c, lines ~4532-4737)
316
- *
317
- * Solves for a root of g(t) between tlo and thi using a modified secant
318
- * method (Illinois algorithm). Only roots of odd multiplicity (sign changes)
319
- * or exact zeros are found. When multiple roots exist, the one closest to
320
- * tlo is returned.
321
- *
322
- * @param mem - CVODE memory block
323
- * @returns CV_SUCCESS, RTFOUND, or CV_RTFUNC_FAIL
324
- */
325
- function cvRootfind(mem: CvodeMem): number {
326
- const nrtfn = mem.cv_nrtfn;
327
-
328
- let imax = 0;
329
- let alph: number;
330
- let tmid: number;
331
- let gfrac: number;
332
- let maxfrac: number;
333
- let fracint: number;
334
- let fracsub: number;
335
-
336
- // First check for change in sign in ghi or for a zero in ghi.
337
- maxfrac = ZERO;
338
- let zroot = false;
339
- let sgnchg = false;
340
-
341
- for (let i = 0; i < nrtfn; i++) {
342
- if (mem.cv_gactive[i] === 0) continue;
343
- if (Math.abs(mem.cv_ghi[i]) === ZERO) {
344
- if (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)
345
- zroot = true;
346
- } else {
347
- if ((mem.cv_glo[i] * mem.cv_ghi[i] < 0) &&
348
- (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)) {
349
- gfrac = Math.abs(mem.cv_ghi[i] / (mem.cv_ghi[i] - mem.cv_glo[i]));
350
- if (gfrac > maxfrac) {
351
- sgnchg = true;
352
- maxfrac = gfrac;
353
- imax = i;
354
- }
355
- }
356
- }
357
- }
358
-
359
- // If no sign change was found, reset trout and grout.
360
- // Return CV_SUCCESS if no zero was found, or set iroots and return RTFOUND.
361
- if (!sgnchg) {
362
- mem.cv_trout = mem.cv_thi;
363
- for (let i = 0; i < nrtfn; i++)
364
- mem.cv_grout[i] = mem.cv_ghi[i];
365
-
366
- if (!zroot)
367
- return CV_SUCCESS;
368
-
369
- for (let i = 0; i < nrtfn; i++) {
370
- mem.cv_iroots[i] = 0;
371
- if (mem.cv_gactive[i] === 0) continue;
372
- if ((Math.abs(mem.cv_ghi[i]) === ZERO) &&
373
- (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO))
374
- mem.cv_iroots[i] = mem.cv_glo[i] > 0 ? -1 : 1;
375
- }
376
- return RTFOUND;
377
- }
378
-
379
- // Initialize alph
380
- alph = ONE;
381
-
382
- // A sign change was found. Loop to locate nearest root.
383
- let side = 0;
384
- let sideprev = -1;
385
-
386
- for (;;) {
387
- // If interval size is already less than tolerance ttol, break.
388
- if (Math.abs(mem.cv_thi - mem.cv_tlo) <= mem.cv_ttol)
389
- break;
390
-
391
-
392
- // Set weight alph.
393
- // On the first two passes, set alph = 1. Thereafter, reset alph
394
- // according to the side of the subinterval where the sign change was found.
395
- if (sideprev === side)
396
- alph = (side === 2) ? alph * TWO : alph * HALF;
397
- else
398
- alph = ONE;
399
-
400
-
401
- // Set next root approximation tmid and get g(tmid).
402
- // If tmid is too close to tlo or thi, adjust it inward.
403
- tmid = mem.cv_thi -
404
- (mem.cv_thi - mem.cv_tlo) * mem.cv_ghi[imax] /
405
- (mem.cv_ghi[imax] - alph * mem.cv_glo[imax]);
406
-
407
- if (Math.abs(tmid - mem.cv_tlo) < HALF * mem.cv_ttol) {
408
- fracint = Math.abs(mem.cv_thi - mem.cv_tlo) / mem.cv_ttol;
409
- fracsub = (fracint > FIVE) ? PT1 : HALF / fracint;
410
- tmid = mem.cv_tlo + fracsub * (mem.cv_thi - mem.cv_tlo);
411
- }
412
- if (Math.abs(mem.cv_thi - tmid) < HALF * mem.cv_ttol) {
413
- fracint = Math.abs(mem.cv_thi - mem.cv_tlo) / mem.cv_ttol;
414
- fracsub = (fracint > FIVE) ? PT1 : HALF / fracint;
415
- tmid = mem.cv_thi - fracsub * (mem.cv_thi - mem.cv_tlo);
416
- }
417
-
418
- // Interpolate to get y(tmid) and evaluate g(tmid)
419
- cvodeGetDky(mem, tmid, 0, mem.cv_y);
420
- const retval = mem.cv_gfun!(tmid, mem.cv_y, mem.cv_grout, mem.cv_user_data);
421
- mem.cv_nge++;
422
- if (retval !== 0)
423
- return CV_RTFUNC_FAIL;
424
-
425
-
426
- // Check in which subinterval g changes sign, and reset imax.
427
- // Set side = 1 if sign change is on low side, or 2 if on high side.
428
- maxfrac = ZERO;
429
- zroot = false;
430
- sgnchg = false;
431
- sideprev = side;
432
-
433
- for (let i = 0; i < nrtfn; i++) {
434
- if (mem.cv_gactive[i] === 0) continue;
435
- if (Math.abs(mem.cv_grout[i]) === ZERO) {
436
- if (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)
437
- zroot = true;
438
- } else {
439
- if ((mem.cv_glo[i] * mem.cv_grout[i] < 0) &&
440
- (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO)) {
441
- gfrac = Math.abs(mem.cv_grout[i] /
442
- (mem.cv_grout[i] - mem.cv_glo[i]));
443
- if (gfrac > maxfrac) {
444
- sgnchg = true;
445
- maxfrac = gfrac;
446
- imax = i;
447
- }
448
- }
449
- }
450
- }
451
-
452
- if (sgnchg) {
453
- // Sign change found in (tlo, tmid); replace thi with tmid.
454
- mem.cv_thi = tmid;
455
- for (let i = 0; i < nrtfn; i++)
456
- mem.cv_ghi[i] = mem.cv_grout[i];
457
-
458
- side = 1;
459
- // Stop at root thi if converged; otherwise loop.
460
- if (Math.abs(mem.cv_thi - mem.cv_tlo) <= mem.cv_ttol)
461
- break;
462
-
463
- continue;
464
- }
465
-
466
- if (zroot) {
467
- // No sign change in (tlo, tmid), but g = 0 at tmid; return root tmid.
468
- mem.cv_thi = tmid;
469
- for (let i = 0; i < nrtfn; i++)
470
- mem.cv_ghi[i] = mem.cv_grout[i];
471
-
472
- break;
473
- }
474
-
475
- // No sign change in (tlo, tmid), and no zero at tmid.
476
- // Sign change must be in (tmid, thi). Replace tlo with tmid.
477
- mem.cv_tlo = tmid;
478
- for (let i = 0; i < nrtfn; i++)
479
- mem.cv_glo[i] = mem.cv_grout[i];
480
-
481
- side = 2;
482
- // Stop at root thi if converged; otherwise loop back.
483
- if (Math.abs(mem.cv_thi - mem.cv_tlo) <= mem.cv_ttol)
484
- break;
485
- } // End of root-search loop
486
-
487
- // Reset trout and grout, set iroots, and return RTFOUND.
488
- mem.cv_trout = mem.cv_thi;
489
- for (let i = 0; i < nrtfn; i++) {
490
- mem.cv_grout[i] = mem.cv_ghi[i];
491
- mem.cv_iroots[i] = 0;
492
- if (mem.cv_gactive[i] === 0) continue;
493
- if ((Math.abs(mem.cv_ghi[i]) === ZERO) &&
494
- (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO))
495
- mem.cv_iroots[i] = mem.cv_glo[i] > 0 ? -1 : 1;
496
-
497
- if ((mem.cv_glo[i] * mem.cv_ghi[i] < 0) &&
498
- (mem.cv_rootdir[i] * mem.cv_glo[i] <= ZERO))
499
- mem.cv_iroots[i] = mem.cv_glo[i] > 0 ? -1 : 1;
500
- }
501
-
502
- return RTFOUND;
503
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"dense_linalg.js","sourceRoot":"","sources":["dense_linalg.ts"],"names":[],"mappings":"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"}
@@ -1,144 +0,0 @@
1
- /**
2
- * TypeScript port of SUNDIALS CVODE v7.5.0 (https://github.com/LLNL/sundials)
3
- *
4
- * Copyright (c) 2025, Lawrence Livermore National Security, University of
5
- * Maryland Baltimore County, and the SUNDIALS contributors.
6
- * Copyright (c) 2013-2025, Lawrence Livermore National Security and
7
- * Southern Methodist University.
8
- * Copyright (c) 2002-2013, Lawrence Livermore National Security.
9
- * Copyright (c) 2026 Datagrok.
10
- *
11
- * Licensed under the BSD-3-Clause License. See THIRD_PARTY_LICENSES
12
- * for the full license text and provenance chain of the original code.
13
- */
14
-
15
- // Dense linear algebra routines for CVODE (0-based indexing).
16
- //
17
- // These are fresh 0-based implementations of LU factorization with partial
18
- // pivoting and triangular solve. The existing src/blas.ts uses 1-based
19
- // indexing inherited from the Fortran/Linpack convention; CVODE needs 0-based.
20
- //
21
- // Matrix layout: row-major Float64Array[], where a[i][j] is row i, column j.
22
- // This matches the LSODA convention (see CVODE-C-to-TS.md section 2.3) and
23
- // differs from SUNDIALS column-major storage. The algorithms are translated
24
- // from SUNDIALS sundials_dense.c (denseGETRF / denseGETRS) with the storage
25
- // order transposed.
26
-
27
- /**
28
- * LU factorization of an n-by-n dense matrix by Gaussian elimination
29
- * with partial pivoting (row-major, 0-based).
30
- *
31
- * On exit, `a` is overwritten with the LU factors:
32
- * - The upper triangle (including diagonal) holds U.
33
- * - The strict lower triangle holds the multipliers L (unit diagonal implied).
34
- *
35
- * The pivot vector `ipvt` records row interchanges: at step k, row k was
36
- * swapped with row ipvt[k] before elimination.
37
- *
38
- * @param a - n-by-n matrix stored as `Float64Array[]` (a[i] = row i).
39
- * Overwritten with LU factors in place.
40
- * @param n - matrix dimension (number of rows and columns).
41
- * @param ipvt - pivot index output array (`Int32Array` of length n, 0-based).
42
- * @returns 0 on success, or k+1 (1-based) if U[k][k] is exactly zero
43
- * (the matrix is singular or nearly so). A nonzero return means
44
- * the factorization completed but the factor U is singular.
45
- */
46
- export function dgefa(a: Float64Array[], n: number, ipvt: Int32Array): number {
47
- let info = 0;
48
-
49
- for (let k = 0; k < n; k++) {
50
- // --- Find pivot: row index l in [k, n) with largest |a[l][k]| ---
51
- let l = k;
52
- let maxAbs = Math.abs(a[k][k]);
53
- for (let i = k + 1; i < n; i++) {
54
- const v = Math.abs(a[i][k]);
55
- if (v > maxAbs) {
56
- maxAbs = v;
57
- l = i;
58
- }
59
- }
60
- ipvt[k] = l;
61
-
62
- // --- Check for zero pivot ---
63
- if (a[l][k] === 0.0) {
64
- info = k + 1;
65
- continue;
66
- }
67
-
68
- // --- Swap rows k and l (swap row references, O(1)) ---
69
- if (l !== k) {
70
- const tmp = a[k];
71
- a[k] = a[l];
72
- a[l] = tmp;
73
- }
74
-
75
- // --- Compute multipliers: a[i][k] = a[i][k] / a[k][k], i = k+1..n-1 ---
76
- // These multipliers form the strict lower triangle of L.
77
- const pivot = a[k][k];
78
- const mult = 1.0 / pivot;
79
- for (let i = k + 1; i < n; i++)
80
- a[i][k] *= mult;
81
-
82
-
83
- // --- Eliminate: update the trailing (n-k-1)-by-(n-k-1) submatrix ---
84
- // a[i][j] -= a[i][k] * a[k][j], for i = k+1..n-1, j = k+1..n-1
85
- for (let i = k + 1; i < n; i++) {
86
- const m = a[i][k]; // multiplier (already computed above)
87
- if (m !== 0.0) {
88
- const rowI = a[i];
89
- const rowK = a[k];
90
- for (let j = k + 1; j < n; j++)
91
- rowI[j] -= m * rowK[j];
92
- }
93
- }
94
- }
95
-
96
- return info;
97
- }
98
-
99
- /**
100
- * Solve A * x = b using the LU factorization produced by {@link dgefa}.
101
- *
102
- * On entry, `b` contains the right-hand side vector. On exit, `b` is
103
- * overwritten with the solution vector x.
104
- *
105
- * The solve proceeds in three stages:
106
- * 1. Permute b according to the pivot vector (row interchanges).
107
- * 2. Forward substitution: solve L * y = P * b.
108
- * 3. Back substitution: solve U * x = y.
109
- *
110
- * @param a - LU-factored n-by-n matrix from dgefa (row-major, 0-based).
111
- * @param n - matrix dimension.
112
- * @param ipvt - pivot indices from dgefa (0-based, length n).
113
- * @param b - right-hand side on input (length n, 0-based), solution on output.
114
- */
115
- export function dgesl(
116
- a: Float64Array[], n: number, ipvt: Int32Array, b: Float64Array,
117
- ): void {
118
- // --- Permute b according to pivot vector ---
119
- for (let k = 0; k < n; k++) {
120
- const p = ipvt[k];
121
- if (p !== k) {
122
- const tmp = b[k];
123
- b[k] = b[p];
124
- b[p] = tmp;
125
- }
126
- }
127
-
128
- // --- Forward substitution: solve L * y = P*b ---
129
- // L has unit diagonal; multipliers are in strict lower triangle of a.
130
- // y[i] = b[i] - sum_{k=0}^{i-1} a[i][k] * y[k], but since we process
131
- // column-by-column (outer loop on k), we update all rows below k:
132
- for (let k = 0; k < n - 1; k++) {
133
- for (let i = k + 1; i < n; i++)
134
- b[i] -= a[i][k] * b[k];
135
- }
136
-
137
- // --- Back substitution: solve U * x = y ---
138
- // U is in the upper triangle (including diagonal) of a.
139
- for (let k = n - 1; k >= 0; k--) {
140
- b[k] /= a[k][k];
141
- for (let i = 0; i < k; i++)
142
- b[i] -= a[i][k] * b[k];
143
- }
144
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,yCAAyC;AACzC,yCAAyC;AAEzC,uBAAuB;AACvB,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AAGpC,2BAA2B;AAC3B,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,KAAK,EAAC,MAAM,SAAS,CAAC;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AACrC,OAAO,EAAC,oBAAoB,EAAE,aAAa,EAAC,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAI3C,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,eAAe,EAAE,cAAc,EAC3C,gBAAgB,EAAE,eAAe,EAAE,cAAc,EACjD,eAAe,EAAE,eAAe,GACjC,MAAM,UAAU,CAAC"}