diff-grok 1.0.10 → 1.2.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 (226) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/.claude/skills/license-updater/SKILL.md +149 -0
  3. package/.claude/skills/license-updater/references/compatibility.md +68 -0
  4. package/.claude/skills/license-updater/references/templates.md +151 -0
  5. package/.claude/skills/license-updater/scripts/generate_license_files.py +467 -0
  6. package/CLAUDE.md +104 -0
  7. package/LICENSE +1 -1
  8. package/README.MD +121 -27
  9. package/THIRD_PARTY_LICENSES +135 -0
  10. package/docs/assets/hierarchy.js +1 -1
  11. package/docs/assets/navigation.js +1 -1
  12. package/docs/assets/search.js +1 -1
  13. package/docs/classes/BasicModelPipelineCreator.html +4 -4
  14. package/docs/classes/Callback.html +5 -5
  15. package/docs/classes/CyclicModelPipelineCreator.html +4 -4
  16. package/docs/classes/IterCheckerCallback.html +5 -5
  17. package/docs/classes/PipelineCreator.html +4 -4
  18. package/docs/classes/TimeCheckerCallback.html +5 -5
  19. package/docs/classes/UpdatesModelPipelineCreator.html +4 -4
  20. package/docs/functions/ab4.html +8 -0
  21. package/docs/functions/ab5.html +8 -0
  22. package/docs/functions/applyPipeline.html +2 -2
  23. package/docs/functions/getCallback.html +2 -2
  24. package/docs/functions/getIVP.html +2 -2
  25. package/docs/functions/getInputVector.html +2 -2
  26. package/docs/functions/getIvp2WebWorker.html +2 -2
  27. package/docs/functions/getJScode.html +2 -2
  28. package/docs/functions/getOutputNames.html +2 -2
  29. package/docs/functions/getPipelineCreator.html +2 -2
  30. package/docs/functions/lsoda.html +8 -0
  31. package/docs/functions/mrt.html +2 -2
  32. package/docs/functions/printE5.html +2 -2
  33. package/docs/functions/printHires.html +2 -2
  34. package/docs/functions/printOrego.html +2 -2
  35. package/docs/functions/printPollution.html +2 -2
  36. package/docs/functions/printRobertson.html +2 -2
  37. package/docs/functions/printVdpol.html +2 -2
  38. package/docs/functions/rk3.html +8 -0
  39. package/docs/functions/rk4.html +8 -0
  40. package/docs/functions/rkdp.html +8 -0
  41. package/docs/functions/ros34prw.html +2 -2
  42. package/docs/functions/ros3prw.html +2 -2
  43. package/docs/functions/solveIvp.html +2 -2
  44. package/docs/hierarchy.html +1 -1
  45. package/docs/index.html +100 -15
  46. package/docs/media/E5.png +0 -0
  47. package/docs/media/HIRES.png +0 -0
  48. package/docs/media/OREGO.png +0 -0
  49. package/docs/media/POLL-full.png +0 -0
  50. package/docs/media/ROBER.png +0 -0
  51. package/docs/media/VDP0L.png +0 -0
  52. package/docs/media/cyclic-model.js +3 -1
  53. package/docs/media/cyclic-model.js.map +1 -1
  54. package/docs/media/cyclic-model.ts +3 -1
  55. package/docs/modules.html +1 -1
  56. package/docs/types/Arg.html +7 -7
  57. package/docs/types/DifEqs.html +4 -4
  58. package/docs/types/Func.html +2 -2
  59. package/docs/types/IVP.html +20 -20
  60. package/docs/types/IVP2WebWorker.html +7 -7
  61. package/docs/types/Input.html +4 -4
  62. package/docs/types/Loop.html +4 -4
  63. package/docs/types/ODEs.html +8 -8
  64. package/docs/types/Output.html +4 -4
  65. package/docs/types/Pipeline.html +4 -4
  66. package/docs/types/SolverOptions.html +5 -5
  67. package/docs/types/Update.html +5 -5
  68. package/docs/types/Wrapper.html +5 -5
  69. package/images/E5.png +0 -0
  70. package/images/HIRES.png +0 -0
  71. package/images/OREGO.png +0 -0
  72. package/images/POLL-full.png +0 -0
  73. package/images/ROBER.png +0 -0
  74. package/images/VDP0L.png +0 -0
  75. package/index.js +1 -1
  76. package/index.js.map +1 -1
  77. package/index.ts +2 -1
  78. package/jest.config.js +1 -0
  79. package/package.json +4 -2
  80. package/src/examples/check-methods.js +15 -3
  81. package/src/examples/check-methods.js.map +1 -1
  82. package/src/examples/check-methods.ts +18 -3
  83. package/src/examples/cyclic-model.js +3 -1
  84. package/src/examples/cyclic-model.js.map +1 -1
  85. package/src/examples/cyclic-model.ts +3 -1
  86. package/src/solver-tools/ab4-method.js +332 -0
  87. package/src/solver-tools/ab4-method.js.map +1 -0
  88. package/src/solver-tools/ab4-method.ts +395 -0
  89. package/src/solver-tools/ab5-method.js +334 -0
  90. package/src/solver-tools/ab5-method.js.map +1 -0
  91. package/src/solver-tools/ab5-method.ts +397 -0
  92. package/src/solver-tools/cvode/common.js +487 -0
  93. package/src/solver-tools/cvode/common.js.map +1 -0
  94. package/src/solver-tools/cvode/common.ts +549 -0
  95. package/src/solver-tools/cvode/cvode.js +1062 -0
  96. package/src/solver-tools/cvode/cvode.js.map +1 -0
  97. package/src/solver-tools/cvode/cvode.ts +1226 -0
  98. package/src/solver-tools/cvode/cvode_adams.js +124 -0
  99. package/src/solver-tools/cvode/cvode_adams.js.map +1 -0
  100. package/src/solver-tools/cvode/cvode_adams.ts +142 -0
  101. package/src/solver-tools/cvode/cvode_bdf.js +153 -0
  102. package/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
  103. package/src/solver-tools/cvode/cvode_bdf.ts +164 -0
  104. package/src/solver-tools/cvode/cvode_class.js +158 -0
  105. package/src/solver-tools/cvode/cvode_class.js.map +1 -0
  106. package/src/solver-tools/cvode/cvode_class.ts +271 -0
  107. package/src/solver-tools/cvode/cvode_hin.js +119 -0
  108. package/src/solver-tools/cvode/cvode_hin.js.map +1 -0
  109. package/src/solver-tools/cvode/cvode_hin.ts +150 -0
  110. package/src/solver-tools/cvode/cvode_io.js +203 -0
  111. package/src/solver-tools/cvode/cvode_io.js.map +1 -0
  112. package/src/solver-tools/cvode/cvode_io.ts +258 -0
  113. package/src/solver-tools/cvode/cvode_ls.js +210 -0
  114. package/src/solver-tools/cvode/cvode_ls.js.map +1 -0
  115. package/src/solver-tools/cvode/cvode_ls.ts +249 -0
  116. package/src/solver-tools/cvode/cvode_nls.js +220 -0
  117. package/src/solver-tools/cvode/cvode_nls.js.map +1 -0
  118. package/src/solver-tools/cvode/cvode_nls.ts +259 -0
  119. package/src/solver-tools/cvode/cvode_root.js +415 -0
  120. package/src/solver-tools/cvode/cvode_root.js.map +1 -0
  121. package/src/solver-tools/cvode/cvode_root.ts +503 -0
  122. package/src/solver-tools/cvode/dense_linalg.js +131 -0
  123. package/src/solver-tools/cvode/dense_linalg.js.map +1 -0
  124. package/src/solver-tools/cvode/dense_linalg.ts +144 -0
  125. package/src/solver-tools/cvode/index.js +26 -0
  126. package/src/solver-tools/cvode/index.js.map +1 -0
  127. package/src/solver-tools/cvode/index.ts +64 -0
  128. package/src/solver-tools/cvode-method.js +114 -0
  129. package/src/solver-tools/cvode-method.js.map +1 -0
  130. package/src/solver-tools/cvode-method.ts +129 -0
  131. package/src/solver-tools/index.js +7 -0
  132. package/src/solver-tools/index.js.map +1 -1
  133. package/src/solver-tools/index.ts +7 -0
  134. package/src/solver-tools/lsoda/blas.js +257 -0
  135. package/src/solver-tools/lsoda/blas.js.map +1 -0
  136. package/src/solver-tools/lsoda/blas.ts +279 -0
  137. package/src/solver-tools/lsoda/cfode.js +84 -0
  138. package/src/solver-tools/lsoda/cfode.js.map +1 -0
  139. package/src/solver-tools/lsoda/cfode.ts +95 -0
  140. package/src/solver-tools/lsoda/common.js +94 -0
  141. package/src/solver-tools/lsoda/common.js.map +1 -0
  142. package/src/solver-tools/lsoda/common.ts +135 -0
  143. package/src/solver-tools/lsoda/corfailure.js +36 -0
  144. package/src/solver-tools/lsoda/corfailure.js.map +1 -0
  145. package/src/solver-tools/lsoda/corfailure.ts +42 -0
  146. package/src/solver-tools/lsoda/correction.js +112 -0
  147. package/src/solver-tools/lsoda/correction.js.map +1 -0
  148. package/src/solver-tools/lsoda/correction.ts +131 -0
  149. package/src/solver-tools/lsoda/dense.js +121 -0
  150. package/src/solver-tools/lsoda/dense.js.map +1 -0
  151. package/src/solver-tools/lsoda/dense.ts +141 -0
  152. package/src/solver-tools/lsoda/index.js +15 -0
  153. package/src/solver-tools/lsoda/index.js.map +1 -0
  154. package/src/solver-tools/lsoda/index.ts +17 -0
  155. package/src/solver-tools/lsoda/intdy.js +54 -0
  156. package/src/solver-tools/lsoda/intdy.js.map +1 -0
  157. package/src/solver-tools/lsoda/intdy.ts +62 -0
  158. package/src/solver-tools/lsoda/lsoda.js +578 -0
  159. package/src/solver-tools/lsoda/lsoda.js.map +1 -0
  160. package/src/solver-tools/lsoda/lsoda.ts +644 -0
  161. package/src/solver-tools/lsoda/methodswitch.js +108 -0
  162. package/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  163. package/src/solver-tools/lsoda/methodswitch.ts +119 -0
  164. package/src/solver-tools/lsoda/orderswitch.js +97 -0
  165. package/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  166. package/src/solver-tools/lsoda/orderswitch.ts +107 -0
  167. package/src/solver-tools/lsoda/prja.js +54 -0
  168. package/src/solver-tools/lsoda/prja.js.map +1 -0
  169. package/src/solver-tools/lsoda/prja.ts +61 -0
  170. package/src/solver-tools/lsoda/scaleh.js +41 -0
  171. package/src/solver-tools/lsoda/scaleh.js.map +1 -0
  172. package/src/solver-tools/lsoda/scaleh.ts +45 -0
  173. package/src/solver-tools/lsoda/solsy.js +25 -0
  174. package/src/solver-tools/lsoda/solsy.js.map +1 -0
  175. package/src/solver-tools/lsoda/solsy.ts +30 -0
  176. package/src/solver-tools/lsoda/stoda.js +270 -0
  177. package/src/solver-tools/lsoda/stoda.js.map +1 -0
  178. package/src/solver-tools/lsoda/stoda.ts +298 -0
  179. package/src/solver-tools/lsoda-method.js +134 -0
  180. package/src/solver-tools/lsoda-method.js.map +1 -0
  181. package/src/solver-tools/lsoda-method.ts +154 -0
  182. package/src/solver-tools/mrt-method.js +81 -18
  183. package/src/solver-tools/mrt-method.js.map +1 -1
  184. package/src/solver-tools/mrt-method.ts +111 -21
  185. package/src/solver-tools/rk3-method.js +210 -0
  186. package/src/solver-tools/rk3-method.js.map +1 -0
  187. package/src/solver-tools/rk3-method.ts +257 -0
  188. package/src/solver-tools/rk4-method.js +236 -0
  189. package/src/solver-tools/rk4-method.js.map +1 -0
  190. package/src/solver-tools/rk4-method.ts +286 -0
  191. package/src/solver-tools/rkdp-method.js +247 -0
  192. package/src/solver-tools/rkdp-method.js.map +1 -0
  193. package/src/solver-tools/rkdp-method.ts +300 -0
  194. package/src/solver-tools/ros34prw-method.js +1 -1
  195. package/src/solver-tools/ros34prw-method.js.map +1 -1
  196. package/src/solver-tools/ros34prw-method.ts +1 -1
  197. package/src/solver-tools/ros3prw-method.js +1 -1
  198. package/src/solver-tools/ros3prw-method.js.map +1 -1
  199. package/src/solver-tools/ros3prw-method.ts +1 -1
  200. package/src/solver-tools/solver-defs.js +7 -0
  201. package/src/solver-tools/solver-defs.js.map +1 -1
  202. package/src/solver-tools/solver-defs.ts +7 -0
  203. package/src/tests/correctness.test.js +6 -4
  204. package/src/tests/correctness.test.js.map +1 -1
  205. package/src/tests/correctness.test.ts +6 -4
  206. package/src/tests/cvode-lib-correctness.test.js +404 -0
  207. package/src/tests/cvode-lib-correctness.test.js.map +1 -0
  208. package/src/tests/cvode-lib-correctness.test.ts +505 -0
  209. package/src/tests/cvode-lib-performance.test.js +103 -0
  210. package/src/tests/cvode-lib-performance.test.js.map +1 -0
  211. package/src/tests/cvode-lib-performance.test.ts +128 -0
  212. package/src/tests/lsoda-lib-correctness.test.js +223 -0
  213. package/src/tests/lsoda-lib-correctness.test.js.map +1 -0
  214. package/src/tests/lsoda-lib-correctness.test.ts +283 -0
  215. package/src/tests/lsoda-lib-performance.test.js +95 -0
  216. package/src/tests/lsoda-lib-performance.test.js.map +1 -0
  217. package/src/tests/lsoda-lib-performance.test.ts +126 -0
  218. package/src/tests/performance.test.js +12 -8
  219. package/src/tests/performance.test.js.map +1 -1
  220. package/src/tests/performance.test.ts +12 -8
  221. package/src/tests/test-defs.js +20 -1
  222. package/src/tests/test-defs.js.map +1 -1
  223. package/src/tests/test-defs.ts +22 -1
  224. package/src/worker-tools/solving.js +15 -1
  225. package/src/worker-tools/solving.js.map +1 -1
  226. package/src/worker-tools/solving.ts +23 -1
package/README.MD CHANGED
@@ -1,15 +1,33 @@
1
1
  # Diff Grok
2
2
 
3
- A lightweight TypeScript library for solving initial value problem ([IVP](https://en.wikipedia.org/wiki/Initial_value_problem)) for ordinary differential equations ([ODEs](https://en.wikipedia.org/wiki/Ordinary_differential_equation)) using numerical methods. This library focuses on solving [stiff equations](https://en.wikipedia.org/wiki/Stiff_equation).
3
+ [![DOI](https://zenodo.org/badge/635090135.svg)](https://doi.org/10.5281/zenodo.17974378)
4
+ [![Docs-stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://datagrok-ai.github.io/diff-grok/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-success.svg)](https://github.com/datagrok-ai/diff-grok/blob/main/LICENSE)
6
+ [![Build Status](https://github.com/datagrok-ai/diff-grok/actions/workflows/libraries.yaml/badge.svg)](https://github.com/datagrok-ai/diff-grok/actions/workflows/libraries.yaml)
7
+ [![Run tests](https://github.com/datagrok-ai/diff-grok/actions/workflows/test.yaml/badge.svg)](https://github.com/datagrok-ai/diff-grok/actions/workflows/test.yaml)
8
+
9
+ A lightweight TypeScript library for solving initial value problem ([IVP](https://en.wikipedia.org/wiki/Initial_value_problem)) for ordinary differential equations ([ODEs](https://en.wikipedia.org/wiki/Ordinary_differential_equation)) using numerical methods. The primary solvers are [LSODA](https://doi.org/10.1137/0904010) — a variable-order method that automatically detects stiffness and switches between Adams (non-stiff) and BDF (stiff) formulations — and [CVODE](https://sundials.readthedocs.io/en/latest/cvode/index.html) — a variable-order, variable-step solver from the SUNDIALS suite supporting both Adams and BDF methods.
4
10
 
5
11
  ## Features
6
12
 
7
13
  * Solving both [stiff](https://en.wikipedia.org/wiki/Stiff_equation) and non-stiff equations
8
14
  * Fast computations
9
- * A set of Rosenbrock–Wanner-type methods:
15
+ * Automatic stiffness-detecting method:
16
+ * [LSODA](https://doi.org/10.1137/0904010) - variable-order Nordsieck-based solver with automatic switching between Adams (non-stiff) and BDF (stiff) methods ([Petzold, 1983](https://doi.org/10.1137/0904010); [Hindmarsh, 1983](https://computing.llnl.gov/sites/default/files/ODEPACK_pub1_u88007.pdf)). Ported to TypeScript from the C library [liblsoda](https://github.com/sdwfrost/liblsoda)
17
+ * Variable-order multistep method:
18
+ * [CVODE](https://sundials.readthedocs.io/en/latest/cvode/index.html) - variable-order, variable-step solver from the [SUNDIALS](https://github.com/LLNL/sundials) suite with BDF (stiff) and Adams (non-stiff) modes ([Hindmarsh et al., 2005](https://doi.org/10.1145/1089014.1089020); [Cohen & Hindmarsh, 1996](https://doi.org/10.1063/1.4822377)). Ported to TypeScript from SUNDIALS CVODE v7.5.0
19
+ * Implicit methods (for stiff ODEs) - Rosenbrock–Wanner type:
10
20
  * The modified Rosenbrock triple ([MRT](https://doi.org/10.1137/S1064827594276424))
11
21
  * The [ROS3PRw](https://doi.org/10.1016/j.cam.2015.03.010) method
12
22
  * The [ROS34PRw](https://doi.org/10.1016/j.cam.2015.03.010) method
23
+ * Explicit methods (for non-stiff ODEs):
24
+ * Runge-Kutta type:
25
+ * The Bogacki-Shampine 3(2) method ([RK3](https://en.wikipedia.org/wiki/Bogacki%E2%80%93Shampine_method))
26
+ * The Runge-Kutta-Fehlberg method ([RK4](https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta%E2%80%93Fehlberg_method))
27
+ * The Dormand-Prince 5(4) method ([RKDP](https://en.wikipedia.org/wiki/Dormand%E2%80%93Prince_method))
28
+ * Adams-Bashforth type:
29
+ * The predictor-corrector method of order 4 ([AB4](https://en.wikipedia.org/wiki/Linear_multistep_method))
30
+ * The predictor-corrector method of order 5 ([AB5](https://en.wikipedia.org/wiki/Linear_multistep_method))
13
31
  * Scripting:
14
32
  * declarative specification of models
15
33
  * auto-generated JavaScript code
@@ -29,20 +47,20 @@ Minimal "Hello World" example:
29
47
  ```typescript
30
48
  // example.ts
31
49
 
32
- import {ODEs, mrt} from 'diff-grok';
50
+ import {ODEs, cvode} from 'diff-grok';
33
51
 
34
52
  const task: ODEs = {
35
53
  name: 'Example',
36
54
  arg: {name: 't', start: 0, finish: 1, step: 0.1},
37
- initial: [1, -1],
55
+ initial: [1],
38
56
  func: (t: number, y: Float64Array, output: Float64Array) => {
39
- out[0] = y[0] - t;
57
+ output[0] = y[0] - t;
40
58
  },
41
59
  tolerance: 1e-7,
42
60
  solutionColNames: ['y(t)'],
43
61
  };
44
62
 
45
- const solution = mrt(task);
63
+ const solution = cvode(task);
46
64
 
47
65
  console.log('t:', solution[0]);
48
66
  console.log('y(t):', solution[1]);
@@ -61,10 +79,26 @@ on the segment $[t_0, t_1]$ with the step $h$:
61
79
 
62
80
  1. Import `ODEs` and a desired numerical method:
63
81
 
82
+ Automatic method:
83
+ * `lsoda` - [LSODA](https://doi.org/10.1137/0904010) variable-order solver with automatic switching between Adams (non-stiff) and BDF (stiff)
84
+
85
+ Variable-order multistep method:
86
+ * `cvode` - [CVODE](https://sundials.readthedocs.io/en/latest/cvode/index.html) variable-order BDF solver from the SUNDIALS suite
87
+
88
+ Implicit methods (for stiff ODEs):
64
89
  * `mrt` - the [MRT](https://doi.org/10.1137/S1064827594276424) method
65
90
  * `ros3prw`- the [ROS3PRw](https://doi.org/10.1016/j.cam.2015.03.010) method
66
91
  * `ros34prw` - the [ROS34PRw](https://doi.org/10.1016/j.cam.2015.03.010) method
67
92
 
93
+ Explicit methods (for non-stiff ODEs) — Runge-Kutta type:
94
+ * `rk3` - the Bogacki-Shampine 3(2) method
95
+ * `rk4` - the Runge-Kutta-Fehlberg 4(5) method
96
+ * `rkdp` - the Dormand-Prince 5(4) method
97
+
98
+ Explicit methods (for non-stiff ODEs) — Adams-Bashforth type:
99
+ * `ab4` - the predictor-corrector method of order 4
100
+ * `ab5` - the predictor-corrector method of order 5
101
+
68
102
  2. Specify `ODEs` object that defines a problem:
69
103
 
70
104
  * `name` - name of a model
@@ -97,10 +131,10 @@ x(0) = 1 \\
97
131
  y(0) = -1
98
132
  \end{cases}$$
99
133
 
100
- To solve it on the segment $[0, 2]$ with the step $0.01$ using the [MRT](https://doi.org/10.1137/S1064827594276424) method with the tolerance $10^{-7}$, we start with imports:
134
+ To solve it on the segment $[0, 2]$ with the step $0.01$ using [LSODA](https://doi.org/10.1137/0904010) with the tolerance $10^{-7}$, we start with imports:
101
135
 
102
136
  ```typescript
103
- import {ODEs, mrt} from 'diff-grok';
137
+ import {ODEs, lsoda} from 'diff-grok';
104
138
  ```
105
139
 
106
140
  Next, we create
@@ -127,7 +161,7 @@ const task: ODEs = {
127
161
  Finally, we call the specified numerical method to solve `task`:
128
162
 
129
163
  ```typescript
130
- const solution = mrt(task);
164
+ const solution = lsoda(task);
131
165
  ```
132
166
 
133
167
  Currently, `solution` contains:
@@ -167,38 +201,72 @@ The following [classic problems](https://archimede.uniba.it/~testset/testsetivps
167
201
  * describes a chemical reaction part of the air pollution model designed at The Dutch National Institute of Public Health and Environmental Protection
168
202
  * [pollution.ts](./src/examples/pollution.ts)
169
203
 
170
- The MRT, ROS3PRw and ROS34PRw methods demonstrate the following time performance (AMD Ryzen 5 5600H 3.30 GHz CPU):
204
+ The LSODA, CVODE, MRT, ROS3PRw and ROS34PRw methods demonstrate the following time performance (AMD Ryzen 5 5600H 3.30 GHz CPU):
205
+
206
+ |Problem|Segment|Points|Tolerance|LSODA, ms|CVODE, ms|MRT, ms|ROS3PRw, ms|ROS34PRw, ms|
207
+ |-|-|-|-|-|-|-|-|-|
208
+ |[Rober](https://archimede.uniba.it/~testset/report/rober.pdf)|[0, 10E+11]|40K|1E-7|67|85|175|446|285|
209
+ |[HIRES](https://archimede.uniba.it/~testset/report/hires.pdf)|[0, 321.8122]|32K|1E-10|125|142|122|362|215|
210
+ |[VDPOL](https://archimede.uniba.it/~testset/report/vdpol.pdf)|[0, 2000]|20K|1E-12|268|352|492|1576|760|
211
+ |[OREGO](https://archimede.uniba.it/~testset/report/orego.pdf)|[0, 360]|36K|1E-8|76|98|205|483|199|
212
+ |[E5](https://archimede.uniba.it/~testset/report/e5.pdf)|[0, 10E+13]|40K|1E-6|7|*|6|17|8|
213
+ |[Pollution](https://archimede.uniba.it/~testset/report/pollu.pdf)|[0, 60]|30K|1E-6|12|15|18|50|23|
171
214
 
172
- |Problem|Segment|Points|Tolerance|MRT, ms|ROS3PRw, ms|ROS34PRw, ms|
173
- |-|-|-|-|-|-|-|
174
- |[Rober](https://archimede.uniba.it/~testset/report/rober.pdf)|[0, 10E+11]|40K|1E-7|103|446|285|
175
- |[HIRES](https://archimede.uniba.it/~testset/report/hires.pdf)|[0, 321.8122]|32K|1E-10|222|362|215|
176
- |[VDPOL](https://archimede.uniba.it/~testset/report/vdpol.pdf)|[0, 2000]|20K|1E-12|963|1576|760|
177
- |[OREGO](https://archimede.uniba.it/~testset/report/orego.pdf)|[0, 360]|36K|1E-8|381|483|199|
178
- |[E5](https://archimede.uniba.it/~testset/report/e5.pdf)|[0, 10E+13]|40K|1E-6|14|17|8|
179
- |[Pollution](https://archimede.uniba.it/~testset/report/pollu.pdf)|[0, 60]|30K|1E-6|36|50|23|
215
+ \* E5 is skipped for CVODE: the extremely stiff rate constants (spanning 20 orders of magnitude) cause convergence failures with the dense direct linear solver.
180
216
 
181
217
  Maximum absolute deviations (MADs) from the reference solutions obtained using SciPy (Radau) are summarized in the table below:
182
218
 
183
- |Problem|MRT|ROS3PRw|ROS34PRw|
184
- |-|-|-|-|
185
- |[Rober](https://archimede.uniba.it/~testset/report/rober.pdf)|1.87e-8|1.88e-8|1.88e-8|
186
- |[HIRES](https://archimede.uniba.it/~testset/report/hires.pdf)|4.80e-11|1.05e-14|2.87e-14|
187
- |[VDPOL](https://archimede.uniba.it/~testset/report/vdpol.pdf)|5.12e-4|5.12e-4|5.12e-4|
188
- |[OREGO](https://archimede.uniba.it/~testset/report/orego.pdf)|3.05e-5|3.45e-7|2.31e-6|
189
- |[E5](https://archimede.uniba.it/~testset/report/e5.pdf)|1.12e-19| 1.33e-19|3.40e-17|
190
- |[Pollution](https://archimede.uniba.it/~testset/report/pollu.pdf)|4.06e-10|9.16e-12|1.58e-10|
219
+ |Problem|LSODA|CVODE|MRT|ROS3PRw|ROS34PRw|
220
+ |-|-|-|-|-|-|
221
+ |[Rober](https://archimede.uniba.it/~testset/report/rober.pdf)|1.87e-8|1.87e-8|1.87e-8|1.88e-8|1.88e-8|
222
+ |[HIRES](https://archimede.uniba.it/~testset/report/hires.pdf)|1.51e-11|2.10e-11|4.80e-11|1.05e-14|2.87e-14|
223
+ |[VDPOL](https://archimede.uniba.it/~testset/report/vdpol.pdf)|5.12e-4|5.12e-4|5.12e-4|5.12e-4|5.12e-4|
224
+ |[OREGO](https://archimede.uniba.it/~testset/report/orego.pdf)|3.84e-6|5.20e-6|3.05e-5|3.45e-7|2.31e-6|
225
+ |[E5](https://archimede.uniba.it/~testset/report/e5.pdf)|3.02e-19|*|1.12e-19| 1.33e-19|3.40e-17|
226
+ |[Pollution](https://archimede.uniba.it/~testset/report/pollu.pdf)|1.23e-10|2.15e-10|4.06e-10|9.16e-12|1.58e-10|
191
227
 
192
228
  Run [check-methods.ts](./src/examples/check-methods.ts) to reproduce these results (see [here](#examples) how to run scripts standalone).
193
229
 
194
230
  The following charts compare the Diff Grok and Radau solutions for the **van der Pol** system:
195
231
 
196
- ![Pollution](images/VDPOL.png)
232
+ ![VDPOL](images/VDPOL.png)
197
233
 
198
234
  The following graphs present a comparison of the Diff Grok and Radau solutions for the **Pollution** model, highlighting a portion of the functions:
199
235
 
200
236
  ![Pollution](images/POLL.png)
201
237
 
238
+ <details>
239
+ <summary><strong>Gallery</strong></summary>
240
+
241
+ **VDPOL**
242
+
243
+ ![VDPOL](images/VDP0L.png)
244
+
245
+ **HIRES**
246
+
247
+ ![HIRES](images/HIRES.png)
248
+
249
+ **E5**
250
+
251
+ ![E5](images/E5.png)
252
+
253
+ **POLL**
254
+
255
+ ![POLL](images/POLL-full.png)
256
+
257
+ **OREGO**
258
+
259
+ ![OREGO](images/OREGO.png)
260
+
261
+ **Rober**
262
+
263
+ ![ROBER](images/ROBER.png)
264
+
265
+ </details>
266
+
267
+ <details>
268
+ <summary><strong>Run benchmarks</strong></summary>
269
+
202
270
  Run benchmark models and find the reference solutions via the following links to the [Datagrok](https://public.datagrok.ai) platform:
203
271
 
204
272
  |Problem|Diff Grok|Radau|
@@ -212,6 +280,8 @@ Run benchmark models and find the reference solutions via the following links to
212
280
 
213
281
  In the file [print-benchmark.ts](./src/examples/print-benchmark.ts), you can find standalone functions that print the solutions of these problems to the console, as well as Python scripts for computing the solutions using SciPy.
214
282
 
283
+ </details>
284
+
215
285
  ## Scripting
216
286
 
217
287
  The library provides tools for declarative specifying models defined by IVPs. This feature enables a development of "no-code" modeling tools seamlessly integrated with the [Datagrok](https://datagrok.ai) platform.
@@ -530,6 +600,9 @@ Diff Grok contains a set of examples located in the folder [src/examples](./src/
530
600
  |[pipeline-use.ts](./src/examples/pipeline-use.ts)|Considers modeling queues and shows shows how to apply pipelines and models with customized outputs.|
531
601
  |[scripting.ts](./src/examples/scripting.ts)|Shows how to generate JS-script from Diff Grok model.|
532
602
 
603
+ <details>
604
+ <summary><strong>Run examples</strong></summary>
605
+
533
606
  To run examples standalone:
534
607
 
535
608
  1. Install TypeScript locally. If your project does not already include TypeScript:
@@ -567,8 +640,29 @@ tsc src/examples/basic-use.ts
567
640
  node src/examples/basic-use.js
568
641
  ```
569
642
 
643
+ </details>
644
+
645
+ ## References
646
+
647
+ * L. Petzold, "Automatic Selection of Methods for Solving Stiff and Nonstiff Systems of Ordinary Differential Equations," *SIAM J. Sci. Stat. Comput.*, 4(1), 136–148, 1983. [doi:10.1137/0904010](https://doi.org/10.1137/0904010)
648
+ * A. C. Hindmarsh, "ODEPACK, A Systematized Collection of ODE Solvers," *Scientific Computing*, R. S. Stepleman et al. (eds.), North-Holland, Amsterdam, pp. 55–64, 1983. [link](https://computing.llnl.gov/sites/default/files/ODEPACK_pub1_u88007.pdf)
649
+ * The LSODA solver is ported to TypeScript from the C library [liblsoda](https://github.com/sdwfrost/liblsoda)
650
+ * A. C. Hindmarsh et al., "SUNDIALS: Suite of Nonlinear and Differential/Algebraic Equation Solvers," *ACM Trans. Math. Softw.*, 31(3), 363–396, 2005. [doi:10.1145/1089014.1089020](https://doi.org/10.1145/1089014.1089020)
651
+ * S. D. Cohen and A. C. Hindmarsh, "CVODE, a Stiff/Nonstiff ODE Solver in C," *Computers in Physics*, 10(2), 138–143, 1996. [doi:10.1063/1.4822377](https://doi.org/10.1063/1.4822377)
652
+ * The CVODE solver is ported to TypeScript from [SUNDIALS CVODE v7.5.0](https://github.com/LLNL/sundials)
653
+ * T. Rang and L. Angermann, "New Rosenbrock W-Methods of Order 3 for Partial Differential Algebraic Equations of Index 1," *BIT Numer. Math.*, 45, 761–787, 2005. [doi:10.1007/s10543-005-0035-y](https://doi.org/10.1016/j.cam.2015.03.010)
654
+ * E. Hairer and G. Wanner, *Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems*, Springer, 1996. [doi:10.1137/S1064827594276424](https://doi.org/10.1137/S1064827594276424)
655
+
570
656
  ## Contributing
571
657
 
572
658
  We welcome contributions of all kinds - bug reports, feature requests, documentation updates, and pull requests.
573
659
 
574
660
  Before contributing, please read our [Contributing Guidelines](./CONTRIBUTING.md).
661
+
662
+ ## License
663
+
664
+ This project is licensed under the [MIT License](./LICENSE).
665
+
666
+ The LSODA solver is a TypeScript port of [liblsoda](https://github.com/sdwfrost/liblsoda).
667
+ The CVODE solver is a TypeScript port of [SUNDIALS CVODE](https://github.com/LLNL/sundials).
668
+ See [THIRD_PARTY_LICENSES](./THIRD_PARTY_LICENSES) for details on third-party code provenance.
@@ -0,0 +1,135 @@
1
+ Third-Party Licenses
2
+ ====================
3
+
4
+ This file documents the licenses for third-party code included in or adapted
5
+ by this project.
6
+
7
+
8
+ ================================================================================
9
+ liblsoda
10
+ ================================================================================
11
+
12
+ Source: https://github.com/sdwfrost/liblsoda
13
+ License: MIT
14
+ Files: src/solver-tools/lsoda/
15
+
16
+ The LSODA solver implementation in src/solver-tools/lsoda/ is a TypeScript port
17
+ of the liblsoda C library by Simon Frost, which itself is derived from earlier
18
+ work tracing back to the original Fortran LSODA algorithm.
19
+
20
+ Provenance chain:
21
+
22
+ 1. Linda Petzold & Alan Hindmarsh — original LSODA algorithm (Fortran, 1983)
23
+ Part of ODEPACK. Public domain (U.S. government work).
24
+ References:
25
+ - A. C. Hindmarsh, "ODEPACK, A Systematized Collection of ODE Solvers,"
26
+ Scientific Computing, 1983.
27
+ - L. Petzold, "Automatic Selection of Methods for Solving Stiff and
28
+ Nonstiff Systems of Ordinary Differential Equations," SIAM J. Sci.
29
+ Stat. Comput. 4, 1983.
30
+
31
+ 2. Heng Li (lh3) — C translation and refactoring
32
+
33
+ 3. Yu Feng (rainwoodman) — reentrant C refactoring (2011)
34
+ Copyright (c) 2011 Yu Feng, McWilliam Cosmology Center, Carnegie Mellon
35
+ University. Released under MIT/X11 license.
36
+
37
+ 4. Simon Frost (sdwfrost) — shared library packaging (2016)
38
+ Copyright (c) 2016 Simon Frost. Released under MIT license.
39
+
40
+ 5. Datagrok — TypeScript port (2025–2026)
41
+ Copyright (c) 2026 Datagrok. Released under MIT license.
42
+
43
+ Full text of the upstream MIT license (from liblsoda):
44
+
45
+ MIT License
46
+
47
+ Copyright (c) 2016 Simon Frost
48
+
49
+ Permission is hereby granted, free of charge, to any person obtaining a copy
50
+ of this software and associated documentation files (the "Software"), to deal
51
+ in the Software without restriction, including without limitation the rights
52
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
53
+ copies of the Software, and to permit persons to whom the Software is
54
+ furnished to do so, subject to the following conditions:
55
+
56
+ The above copyright notice and this permission notice shall be included in all
57
+ copies or substantial portions of the Software.
58
+
59
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
60
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
61
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
62
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
63
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
64
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
65
+ SOFTWARE.
66
+
67
+
68
+ ================================================================================
69
+ SUNDIALS CVODE
70
+ ================================================================================
71
+
72
+ Source: https://github.com/LLNL/sundials
73
+ License: BSD-3-Clause
74
+ Files: src/solver-tools/cvode/
75
+
76
+ The CVODE solver implementation in src/solver-tools/cvode/ is a TypeScript port
77
+ of the CVODE module from the SUNDIALS library (SUite of Nonlinear and
78
+ DIfferential/ALgebraic equation Solvers) v7.5.0, developed at the Center for
79
+ Applied Scientific Computing, Lawrence Livermore National Laboratory.
80
+
81
+ CVODE is a solver for stiff and nonstiff ODE systems using variable-order,
82
+ variable-step multistep methods: Adams-Moulton (nonstiff) and BDF (stiff).
83
+
84
+ Provenance chain:
85
+
86
+ 1. Lawrence Livermore National Security — original CVODE solver (C, 2002)
87
+ Part of the SUNDIALS suite. Developed under U.S. Department of Energy
88
+ Contract DE-AC52-07NA27344.
89
+ LLNL code release number: UCRL-CODE-155951
90
+
91
+ 2. Lawrence Livermore National Security and Southern Methodist University —
92
+ continued development (2013–2025)
93
+
94
+ 3. Lawrence Livermore National Security, University of Maryland Baltimore
95
+ County, and the SUNDIALS contributors — current maintainers (2025)
96
+ Released under the BSD-3-Clause license.
97
+
98
+ 4. Datagrok — TypeScript port (2025–2026)
99
+ Copyright (c) 2026 Datagrok. Released under MIT license.
100
+
101
+ Full text of the upstream BSD-3-Clause license:
102
+
103
+ BSD 3-Clause License
104
+
105
+ Copyright (c) 2025, Lawrence Livermore National Security, University of
106
+ Maryland Baltimore County, and the SUNDIALS contributors.
107
+ Copyright (c) 2013-2025, Lawrence Livermore National Security and Southern
108
+ Methodist University.
109
+ Copyright (c) 2002-2013, Lawrence Livermore National Security.
110
+ All rights reserved.
111
+
112
+ Redistribution and use in source and binary forms, with or without
113
+ modification, are permitted provided that the following conditions are met:
114
+
115
+ * Redistributions of source code must retain the above copyright notice, this
116
+ list of conditions and the following disclaimer.
117
+
118
+ * Redistributions in binary form must reproduce the above copyright notice,
119
+ this list of conditions and the following disclaimer in the documentation
120
+ and/or other materials provided with the distribution.
121
+
122
+ * Neither the name of the copyright holder nor the names of its
123
+ contributors may be used to endorse or promote products derived from
124
+ this software without specific prior written permission.
125
+
126
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
127
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
128
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
129
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
130
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
131
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
132
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
133
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
134
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
135
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1 +1 @@
1
- window.hierarchyData = "eJyVkj9rwzAQxb/LzUr/WCC7HuupQ6FDO5UMqnTFwmcpSOpQgr97LykFUZI4Wix89x6/x5P2EEPICfp3pUTz0G4FRPwkNNkFz+M9KHX4ej0j9DBoog9tJhAwOW+hv286AV+ReGdIp4Tp9k9zM+aZWHic8z4nuzmYNr8DXoyObETP8FaKTm4XAa0saE8Z4zCimfi4AnxCvpKBgV0JfHUzVgBPyNeBXHJBfHE7JOdxiKhziJdo/6Q19co7JWTTCCmPJfNvEeFRJ2eeg0WqCHPWtF4ABylf1Lehevx51xV8WV75287qjKk2wAXbWoJl+QF6ASdd"
1
+ window.hierarchyData = "eJyVkjFPwzAQhf/LzVdw4rYhHsnEgMQAE+pg7EOx4tiVbQZU5b+jUCFZqG3i5YbTe/qe3t0JgvcpgnhvGfK6OiAE+rSkkvEugjhBy+bp5EggoJPWfkg1AMJgnAZR1Q8IX8GCAGVljBTv/zR3fRot4HkPAlLUm9m0OS8QVG+sDuRmeIMVaw4TQttkuKdEoetJDRTWkC/IF0JMCBXLia9mpALiBfkykddVRnwxR7LGURdIJh9u0f5JSwrmnCHf7pHvflvmPL/qo4xGPXtNtiDMVdOKArb7/Ke+lS3HX3et4O/yk78dtUwUSwPcsC0lmKYfzBAntw=="
@@ -1 +1 @@
1
- window.navigationData = "eJyVlMlOwzAQht8lZ8RSdm5QigABrVjaA+LgpkNr1Y2N7QIV4t1xkqaN42XKKdLM/30ZeXv9STR86+QsuSCKpvd8BKxHBTCaQVsC0VwmW4kgemIiKSNKgdoJRrcnesZMfkqzUXK21zr53Vr524SxIUmnrq7qROlFyjYdL5yN/eFGg2xPIJ2aT3BUTyjmREf9x3zPdAbofJ5QzPkiRkSD2mxZI+HYP87leO3SC2FMpmQTrd3T473DVo26pO+dD9UEyyrGXs2ztEnmNYy7ycRcN8GiiJL9nsP1extQrQEMB1ya7fLw6yZmuuNcNAV5DeO6lx1njfMays21Z6nKKsZWR6dJV3WMf+LsE2RXaMozZ3iriZnKA91UlFWMHUgihLtryzJGmxBbuAvxbg5pMfmOFbBtRwc10Ri0+xisNbV2XFKc8j6k1sW3PLUEoqrfBVvRvBIO+il8F8KW1DNx3e1Tat6qgKdsxgXlgX4gM1ABSy0RVwVfV0sXfVYt5Uxqn8OUI5CQNNOdQx+4bGHwNZX+tVh3MUVXwpgHFUUXU/Q4Y/McCmpWCUz1yIcgtYqoVglM1R8JzoKaohtRSK72D4T88gmqHoJH6Dis8lfTXCwfXfUc/O0PmPBzbA=="
1
+ window.navigationData = "eJyVlU2P2jAQhv9Lzqh0+egHty1LVaq2oG4Lh6oHJ5mFKE7sjg0tqvrfV0mAxIkzQ6/zzvNkNNjmx9/Awh8bzIJ3wiTRZxWDXCcaZJLDHEFYhcEg0MLug1kQSWEMmGFv64u9zWQwCNIkj4PZ3ejNv8HVPxdShiJKu7pLQtKnSN46Xn8v9YWlBZzvIUoB+0f1NFFOdtT/mO9bkgE7n6eJcn7XsbBgblsr0Ux94x53tcueNJjhPe5cYvTy7eu76ahBPSRPi1+mDVZVjn1/yKM2WdQ4bpnrg22DZZElN+sOt1nfQI22EG4VpoAevg450yeldFtQ1Dhu9bDo7LiosdzBelZVVTn2cnTa9KXO8Y9KHgFX2iYq7wzvhJypOtBtRVXl2C0Krbu/2rnM0SKc1OTTIY/KeYcinLjkq4kDTf3QlIK0lqfuyht4s4EQ7cB2n51a04hpSXmfNhA5T4zjaXQwquatcxXty9dBj9p39VxJs4fWfXyMVOxd7zWkBdXV+SIyMD2WRget6n3HHR35gDtKaVQsfJYyIMAMrQ/L0BKQxiS3C+9BP0cc/CFB/xLrlFOsEHaqV1GmnGKtpDwUUK/m2sGpvqoQ0BpCde3gVJtYK9mrKVNCgenYx2I6JiHvU4cp9dRhGms/FWsKU2Y80fjbi54zBidoGjbFP8/y6B37knXwn88njdyW"
@@ -1 +1 @@
1
- window.searchData = "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";
1
+ window.searchData = "eJy1nN9v2zgSx/8X5dWbWvytvO12d3E9bG+L6137EBQHxVZTX2zLK8tpi6D/+4GUZA3JoTxKe08JTPLL4fAzQ5oW9ZQ19edjdnP7lD1s9uvsJmdmke3LXZXdZL+Ux83qdb2utm82h2q72Vcvm6ps6yZbZKdmm91kq215PFbHF8ma15/a3TZbDBWzmyz7thj6kjk797Wq98e2Oa3mq1/5TUFPi+xQNtW+nRzKaA5binHs91U71Jxrz33VHsamz7cHTsXLcru9K1cPkS1DwQ9xtCdG8uvZroQb6/3Lenc4tWW7qfdH+/+2aqv1hZ7r/Qq0WoFWz7XiVVs1Tu1tWzbtxe43Q/VjX53crzdpX1dbYgClq/6YiZ2Wp011ejTPiKFLFlGCiGQRnBBLwctP1eqhapIBhdT5IVOQ0iX5HjP8OyMuaQ8l+Nrj+qfN8afN/lPVbLrC59l6IS4njCSG6LQ1EI5LIfr/iMtnB+MPiMBnhx0t1v612VWXYg2p80PcmtIluRYz/DtjLWnP98baLFsvxNqEkcRYm7YGwvHvw7psqyNpaZyo+0NguaRPgmZqQM+IzYs2UeKUalOhczm66ufm/mxO+/VQHV/83NxPOjpfMnFu/nGzL7cJgauhELfX9pxQ3ew37SatOxbPVnZ/ErJ92WzNY1sdUpp92WzNk5vMf0xY29WYYXM4879uPv721zGQ7z6kz3/116nLFGmdK1gHN7Q3JeXfenuy7a03pvoZ6u37esS+Qr/8ftqvgl7sR5M+CTVe7Q+nNhBxn9E9W+73dVriaihObINc/wnlx3J7CrECykMxTTka+bs3ofS7NzNGHaWjoflVV5Sw6t2blKJL5yE2Z9Fz6WzddRUFz1m1L3uG5nHVpEW7wtmq1ZdDkzR1KJytapNwUnUofIbq4dQe/6jrh1OYU4G4rbMd6szuY1vXSe2+bLbmrmrLpDeGwtmqyGp1Fp3M/BOa9am17kvJjsWzlQ9lU+6SwufS2brHevtYNW+rtt3s75P6Xa3jWGt2P22ZVu/L5mvW26op96vkNMIKs9W7PUDS6LF4vvKxWr8u208vJ7OnrbUr20/Pz6JDP3aFvdjNx74SpRdkXWLvq7v3dfNQISl2LKOvVTbLv6xP+2iVjuTcgrDqqyatB/aldtun/ep1udn/Uq+/Xu7U1t6Vm/1dV/s7+nWxi22/kF5d3ektGKnPLp7/PGD0hX12devDNIOX+5yI1rBLUtyiPYZk/hEvR/YjOocrhMGzwtU0dq7zWdllVL6UXgLtcNx//vpbqG0/+p694rn95GbRdTwRYUnRvnC+Kv59dhS+9IV2ShvZI4zCk5uEKdXhu9TLeovF/djDUHFVb6eDfqq3VNyN3VwOt0A/os3ta0J99+GMSCsPdqxplauxRsLKzowUfXWzO23LCf2xBlE/9EN0BtX1MXxM90UdedPTuOrKp4+UU9qfm/JwqKIvLX4HoBK5l9Abb4dFBjnC8MroftmVX84nr5clr3bllw2sjg/FtzPdsz2SfU3rtd3sqon9OK3Hqv1UrwndDfXm9RXOVnfCGXTXfThj13bqnP07GmtA7WqoeSnmerPo+Rl2Mpmhp5Xx9RmKX1qhI/3Q4++7GAu66D/9nlwBJSZTxWBBamdaH9tDU4drticP6jyvj6a62MW5CrUHBfYxd+KsbbcYLgxelHdi0sGegEQFJFngcNh+jVYGIAXLqaL3VRv9EjhKgtIZgu708V3l/bDjaYIKc2TBoaUvd+HsMpB5PCDfMX1BWGWG9N/fruo1NjXnshli3SbB39d5iqDCDNnUL3ue9Jyf9ID89livS0TRfU4V2YGfQUeJXTO9A1QwE2z27W9YsPUls4T+tmnQCRgLZ8n92VT3dUrOFc6Se1Nvu519SvJcYZbsP+u7qmmPadlzhVmy79aHepuSdIVUueaBIzrNA6cLYOm8eSCn8+ZhfUAV1tOHAlCiPnJxaD5jMn3RHKm00gwhd0jz6hEb2lCESX1YZJv9uvqS3Txl9oDXEnmTsWt+XWSL7OOm2q7tA63DPmtV73aVO/BY16uT+/dDX61bFmzlrvaLZba4XS4Ev+aF/PBhcTs0dgXug0Fj/MQ1zLPFbb5g+pp7zfKoWe41Y9nili04uxbLwmvIoobMa8izxS3HDOVRQ+41FLihImomvGYyW9yKBRfXBWNeQxk1lF5DlS1uJdZQRQ2V11Bni1uFjVBHDbXX0OAjNFEz4zUrUlNRRA0Lf+otCRqzNI+pyQNsUtwg4Pjk5Cw1I3nMTu7Dk/PUpOQxPrnPT265MOhoY4ZyH6JcJkYbQ5T7FOUqNTt5zFHug5RbPArU4hil3GcpT8CUxzTlPk55kZyfGKjcJ4otU/PDYqKYTxRzRKE5jMVQsSAdMXy4DElHPlKMJzNZjBTzkWIuJ+XoeGOmmM8Uc0wxdLwxVszHillScr7g5poZ5TeOuWI+V8yikgt0zDFYzAeLObAkanbMFvPZYhaXHE2OLIaL+XBxy0uO5ise08V9urijCw1/HtPFfbq4owuNRB4DxoMFzwG2xKaKI2ueTxi3zLAc7TkmjPuEccsMQwnjMWHcJ4y7xIWv1DFh3CeMW2aYQBvHhHGfMG6SUcVjwrhPGHerIYonjwnjPmHCMsNQPEVMmPAJE5YZhuIpYsKET5hw+ykUTxETJnzChCMMxVPEhIlgW2WZ4WjaFcjeyidMWGZ4jrEtYsKET5iwzHAUTxETJnzCRDqHiZgw4RMmLDMcZVvEhAmfMGGZ4SjbIiZM+IRJywxH8ZQxYdInTFpmOIqnjAmTPmHSMsM1uhOOCZM+YdLt2g3aOCZM+oRJRxiKp4wJk8H23e3fUTwlsoP3CZOWGYFmTxkTJn3CpGVGoHjKmDDpEyYtMwIlTMaESZ8w6XZgKGEyJkz6hCnLjEAJUzFhyidM5UlIVEyY8glTLJkMVEyY8glTlhmBsq1iwpRPmBJJPFVMmPIJU44wNG+rmDAVfElUybVKId8TfcKUTu4MVEyY8glTJrkDVDFhyidMFcnsqWLClE+YdoSha5WOCdM+YTpNmI4J0z5h2n11RDOJjgnTPmHafXdEM4mOCdM+YdoyI9FMomPCtE+YtsxINJPomDDtE6bdOQQ6zzomTAdHEZYZiWYSjZxG+IRpy4xEM4mOCdM+YdoyI/FjkJgw7RNm3NdINCRNTJjxCTOWGYniaWLCjE+YscxIlDATE2Z8woxlRqGEmZgw4xNmRDIkTUyY8QkzMpkATUyY8QkzlhmFsm1iwoxPmNFJPE1MmAkOvCwzCg0Mg5x6+YQZy4xCl1gTE2Z8wgrLjEIDo4gJK3zCCsuMQgOjiAkrfMIKy4xCA6OICSt8wgpHGBoYRUxY4RNWWGYUGhhFTFjhE1ZYZhQaGEVMWOETVlhmNBoYRUxY4RNWWGY0imcRE1b4hBWWGY0SVsSEFcHBqmVGo4QVyNlqeLjqTldRxLoyvzn4rG9vudEoZV1Z2D44Zl1adDQKWlcWtg+OWpeWHp04HkZOW5fBcevSAqTxA9clcuK6DI5cl5YhjR9/LpFz12Vw8Lq0GBkUuq4sbB8cvi4tSQblrisL2wcHsEsLk0HR68rC9sEx7NLyZFD6urKwfcCfO7A3OH/Y+X50wG95Mjh/6Cl/wJ87ujc4f9hJf3jU747vDc4fdtrff+Z+Y3usmrZav+p+a7u97R5Lecr+0//6Nv6S95QVy+zm6du38de2m6dv4Ac3W2b7cc+lAAUJFHKaQnfLbdRgbNTgkqZhH14Zb88CexSwh9G07GPFo0KejwpMdG246f4qRVK8s2+G2dk7u4OJq+HxibGf5dgNzfOr84M3owgHniOK9M+yjhoSWKKJKvA6NXDdKJR3LXv/9e7L+09z2f/tP2e0iRpupAByAH28IIq4R+dHDQGIUcThu5eWXJpgoKtJst0NQzA6oCBojIA7KWCEIL4k1RR3LxHYooEttDhfbz4GA8qBCCcOKHxeE/gXcGtoEwduLQOrDLCKNrT+giVwD9AQNJr7i/TADjBNjJYGEa9IEIRa0FTcFQgwGOBYzvvMR+PGv54EEASJShqS1H3VYhlPAYYK2qzfV627XvpYhQlLgWkraM6yYvZ5FyBSABHavHUi7HN197l/rnCU08D7BW29ua/a/x67ZwmBDgChoM3efdV2V0X33WOEQAywWZDnD1ugIeRdy6JfDFS/GJAndSL3asBbQVsYzvd1QEQCFdabp2ij7y9Lg3EDSgRtiJvuhQNAA0wpp+Hq36sGGwdAmSBKtVWz6l4NgwUmiMucltuDOGJgM8ppwCaDSABPSVoQdbfEgYeAhOg3LIqW2vsHW4FvBHQOzTvBJRKQ4eHGgsY2uBoCdMCMGaJN3aV34CQQzoLm5+HeCDAEZGFDW4DdU7/AvxL6lybh6sNgB3PEdL997f+qPkcZWqTUaz97CuBpRVshkm+VAqoA8T6F9hk1p1ERvxQKzAmwuBftdwKMhkrtpy4JUqnuFQ0tyOv+lh8YOcilmhaS51cgAHaBSYKW1eE9aGAOnAma64cXJwBrgIggiiDLqwQBqWmoTSyjIDBzGvrjvRywQQI2GaKjh7s3QAVMlyE6yD4oXnnnFVrBTEFjx8l86h7sB0regkdb0Z1S3T3TD5Sgm5dEP1ulw/g4P1AroBoRAavWjE/xAwKWUI2W4Z3aY/fwPlCCpwNLWui75/aBBIMSNJLck/tAgkMJGkbds/tAA67mxL3O+PA+0IGrVk5btc5P7gMZiHROQzq+4Q3SGcBR00YXvKULLKoARk427bEKtoYGxlpOi7Xz+yOi/RNwu6ZBBN9FARwFF0myo7wX2oD8D8QkUcy9hw44G0gw2sC6V+AAKwBLkkak3VhOfC2A2YgW9OC1AMAwQIDstzmqP07UNENP/U1jQAIwztDohG/oA54HbmO0pHK+xgvGCAJPDucuwwkqLZH3qpeOJnOQ1RnRe8FrgYDZwIuStnoFL/8BIQUMk7QhP3avtgPfI+GhOG3F+jxciQbbDbBcmVkqfrIBa4Um8P9hMW7rbm4/fPv2P5mZpdw=";
@@ -1,10 +1,10 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BasicModelPipelineCreator | diff-grok - v1.0.10</title><meta name="description" content="Documentation for diff-grok"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">diff-grok - v1.0.10</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">BasicModelPipelineCreator</a></li></ul><h1>Class BasicModelPipelineCreator</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Pipeline creator for a model</p>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BasicModelPipelineCreator | diff-grok - v1.1.0</title><meta name="description" content="Documentation for diff-grok"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">diff-grok - v1.1.0</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">BasicModelPipelineCreator</a></li></ul><h1>Class BasicModelPipelineCreator</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Pipeline creator for a model</p>
2
2
  </div><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-3">// Here, we consider modeling queues: https://en.wikipedia.org/wiki/M/M/c_queue</span><br/><span class="hl-4">import</span><span class="hl-1"> </span><span class="hl-6">*</span><span class="hl-1"> </span><span class="hl-4">as</span><span class="hl-1"> </span><span class="hl-5">DGL</span><span class="hl-1"> </span><span class="hl-4">from</span><span class="hl-1"> </span><span class="hl-2">&#39;diff-grok&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">// 1. Model specification: the M|M|2|2 model</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">model</span><span class="hl-1"> = </span><span class="hl-2">`#name: M|M|2|2</span><br/><span class="hl-2">#description: Modelling the system with two servers &amp; two waiting places (EXPLAINED)</span><br/><br/><span class="hl-2">#equations:</span><br/><span class="hl-2"> dp0/dt = -la * p0 + mu * p1</span><br/><span class="hl-2"> dp1/dt = la * p0 - (la + mu) * p1 + 2 * mu * p2</span><br/><span class="hl-2"> dp2/dt = la * p1 - (la + 2 * mu) * p2 + 2 * mu * p3</span><br/><span class="hl-2"> dp3/dt = la * p2 - (la + 2 * mu) * p3 + 2 * mu * p4</span><br/><br/><span class="hl-2">#expressions:</span><br/><span class="hl-2"> la = 1 / arrival</span><br/><span class="hl-2"> mu = 1 / service</span><br/><span class="hl-2"> p4 = 1 - p0 - p1 - p2 - p3</span><br/><span class="hl-2"> busy = 1 - p0 - p1</span><br/><span class="hl-2"> queue = p3 + 2 * p4</span><br/><br/><span class="hl-2">#argument: t</span><br/><span class="hl-2"> _t0 = 0 {min: 0; max: 10; caption: start; category: Time; units: min} [Initial time of simulation]</span><br/><span class="hl-2"> _t1 = 60 {min: 20; max: 100; caption: finish; category: Time; units: min} [Final time of simulation]</span><br/><span class="hl-2"> _h = 1 {min: 0.01; max: 0.1; caption: step; category: Time; units: min} [Time step of simulation]</span><br/><br/><span class="hl-2">#inits:</span><br/><span class="hl-2"> p0 = 1 {min: 0; max: 1; category: Initial state; caption: empty} [Probability that initially there are NO customers]</span><br/><span class="hl-2"> p1 = 0 {min: 0; max: 1; category: Initial state; caption: single} [Probability that initially there is ONE customer]</span><br/><span class="hl-2"> p2 = 0 {min: 0; max: 1; category: Initial state; caption: two} [Probability that initially there are TWO customers]</span><br/><span class="hl-2"> p3 = 0 {min: 0; max: 1; category: Initial state; caption: three} [Probability that initially there are THREE customers]</span><br/><br/><span class="hl-2">#output:</span><br/><span class="hl-2"> t {caption: Time, min}</span><br/><span class="hl-2"> p0 {caption: P(Empty)}</span><br/><span class="hl-2"> busy {caption: P(Full load)}</span><br/><span class="hl-2"> queue {caption: E(Queue)}</span><br/><br/><span class="hl-2">#parameters:</span><br/><span class="hl-2"> arrival = 10 {min: 1; max: 100; category: Means; caption: arrival; units: min} [Mean arrival time]</span><br/><span class="hl-2"> service = 100 {min: 1; max: 100; category: Means; caption: service; units: min} [Mean service time]`</span><span class="hl-1">;</span><br/><br/><span class="hl-3">// 2. Generate IVP-objects: for the main thread &amp; for computations in webworkers</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">ivp</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getIVP</span><span class="hl-1">(</span><span class="hl-5">model</span><span class="hl-1">);</span><br/><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">ivpWW</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getIvp2WebWorker</span><span class="hl-1">(</span><span class="hl-5">ivp</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-3">// 3. Perform computations</span><br/><span class="hl-4">try</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">// 3.1) Extract names of outputs</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">outputNames</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getOutputNames</span><span class="hl-1">(</span><span class="hl-5">ivp</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">outSize</span><span class="hl-1"> = </span><span class="hl-5">outputNames</span><span class="hl-1">.</span><span class="hl-5">length</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-3">// 3.2) Set model inputs</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">inputs</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">_t0:</span><span class="hl-1"> </span><span class="hl-9">0</span><span class="hl-1">, </span><span class="hl-3">// Initial time of simulation</span><br/><span class="hl-1"> </span><span class="hl-5">_t1:</span><span class="hl-1"> </span><span class="hl-9">60</span><span class="hl-1">, </span><span class="hl-3">// Final time of simulation</span><br/><span class="hl-1"> </span><span class="hl-5">_h:</span><span class="hl-1"> </span><span class="hl-9">1</span><span class="hl-1">, </span><span class="hl-3">// Time step of simulation</span><br/><span class="hl-1"> </span><span class="hl-5">p0:</span><span class="hl-1"> </span><span class="hl-9">1</span><span class="hl-1">, </span><span class="hl-3">// Probability that initially there are NO customers</span><br/><span class="hl-1"> </span><span class="hl-5">p1:</span><span class="hl-1"> </span><span class="hl-9">0</span><span class="hl-1">, </span><span class="hl-3">// Probability that initially there is ONE customer</span><br/><span class="hl-1"> </span><span class="hl-5">p2:</span><span class="hl-1"> </span><span class="hl-9">0</span><span class="hl-1">, </span><span class="hl-3">// Probability that initially there are TWO customers</span><br/><span class="hl-1"> </span><span class="hl-5">p3:</span><span class="hl-1"> </span><span class="hl-9">0</span><span class="hl-1">, </span><span class="hl-3">// Probability that initially there are THREE customers</span><br/><span class="hl-1"> </span><span class="hl-5">arrival:</span><span class="hl-1"> </span><span class="hl-9">10</span><span class="hl-1">, </span><span class="hl-3">// Mean arrival time</span><br/><span class="hl-1"> </span><span class="hl-5">service:</span><span class="hl-1"> </span><span class="hl-9">100</span><span class="hl-1">, </span><span class="hl-3">// Mean service time</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">inputVector</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getInputVector</span><span class="hl-1">(</span><span class="hl-5">inputs</span><span class="hl-1">, </span><span class="hl-5">ivp</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-3">// 3.3) Create a pipeline</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">creator</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">getPipelineCreator</span><span class="hl-1">(</span><span class="hl-5">ivp</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">pipeline</span><span class="hl-1"> = </span><span class="hl-5">creator</span><span class="hl-1">.</span><span class="hl-0">getPipeline</span><span class="hl-1">(</span><span class="hl-5">inputVector</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-3">// 3.4) Apply pipeline to perform computations</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">solution</span><span class="hl-1"> = </span><span class="hl-7">DGL</span><span class="hl-1">.</span><span class="hl-0">applyPipeline</span><span class="hl-1">(</span><span class="hl-5">pipeline</span><span class="hl-1">, </span><span class="hl-5">ivpWW</span><span class="hl-1">, </span><span class="hl-5">inputVector</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-3">// 3.5) Print results</span><br/><br/><span class="hl-1"> </span><span class="hl-3">// 3.5.1) Table header</span><br/><span class="hl-1"> </span><span class="hl-6">let</span><span class="hl-1"> </span><span class="hl-5">line</span><span class="hl-1"> = </span><span class="hl-2">&#39;&#39;</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">outputNames</span><span class="hl-1">.</span><span class="hl-0">forEach</span><span class="hl-1">((</span><span class="hl-5">name</span><span class="hl-1">) </span><span class="hl-6">=&gt;</span><span class="hl-1"> </span><span class="hl-5">line</span><span class="hl-1"> += </span><span class="hl-5">name</span><span class="hl-1"> + </span><span class="hl-2">&#39; &#39;</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-5">line</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-3">// 3.5.2) Table with solution</span><br/><span class="hl-1"> </span><span class="hl-6">const</span><span class="hl-1"> </span><span class="hl-7">length</span><span class="hl-1"> = </span><span class="hl-5">solution</span><span class="hl-1">[</span><span class="hl-9">0</span><span class="hl-1">].</span><span class="hl-5">length</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-4">for</span><span class="hl-1"> (</span><span class="hl-6">let</span><span class="hl-1"> </span><span class="hl-5">i</span><span class="hl-1"> = </span><span class="hl-9">0</span><span class="hl-1">; </span><span class="hl-5">i</span><span class="hl-1"> &lt; </span><span class="hl-5">length</span><span class="hl-1">; ++</span><span class="hl-5">i</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-5">line</span><span class="hl-1"> = </span><span class="hl-2">&#39;&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-4">for</span><span class="hl-1"> (</span><span class="hl-6">let</span><span class="hl-1"> </span><span class="hl-5">j</span><span class="hl-1"> = </span><span class="hl-9">0</span><span class="hl-1">; </span><span class="hl-5">j</span><span class="hl-1"> &lt; </span><span class="hl-5">outSize</span><span class="hl-1">; ++</span><span class="hl-5">j</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-5">line</span><span class="hl-1"> += </span><span class="hl-5">solution</span><span class="hl-1">[</span><span class="hl-5">j</span><span class="hl-1">][</span><span class="hl-5">i</span><span class="hl-1">].</span><span class="hl-0">toFixed</span><span class="hl-1">(</span><span class="hl-9">8</span><span class="hl-1">) + </span><span class="hl-2">&#39; &#39;</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-5">line</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">} </span><span class="hl-4">catch</span><span class="hl-1"> (</span><span class="hl-5">err</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">&#39;Simulation failed: &#39;</span><span class="hl-1">, </span><span class="hl-5">err</span><span class="hl-1"> </span><span class="hl-6">instanceof</span><span class="hl-1"> </span><span class="hl-8">Error</span><span class="hl-1"> ? </span><span class="hl-5">err</span><span class="hl-1">.</span><span class="hl-5">message</span><span class="hl-1"> : </span><span class="hl-2">&#39;Unknown problem!&#39;</span><span class="hl-1">);</span><br/><span class="hl-1">}</span>
3
3
  </code><button type="button">Copy</button></pre>
4
4
 
5
- </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="306"><h4>Hierarchy (<a href="../hierarchy.html#BasicModelPipelineCreator">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="PipelineCreator.html" class="tsd-signature-type tsd-kind-class">PipelineCreator</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">BasicModelPipelineCreator</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/datagrok-ai/DiffGrok/blob/3c67f17fb9b88f69647e701ac86a3b861345124e/src/pipeline/basic-pipeline-creator.ts#L99">src/pipeline/basic-pipeline-creator.ts:99</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
5
+ </div></div></section><section class="tsd-panel tsd-hierarchy" data-refl="330"><h4>Hierarchy (<a href="../hierarchy.html#BasicModelPipelineCreator">View Summary</a>)</h4><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><a href="PipelineCreator.html" class="tsd-signature-type tsd-kind-class">PipelineCreator</a><ul class="tsd-hierarchy"><li class="tsd-hierarchy-item"><span class="tsd-hierarchy-target">BasicModelPipelineCreator</span></li></ul></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/datagrok-ai/diff-grok/blob/652d427344795ab429f0120033309f18670d3034/src/pipeline/basic-pipeline-creator.ts#L99">src/pipeline/basic-pipeline-creator.ts:99</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h5 class="tsd-index-heading uppercase">Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a>
6
6
  </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="#getpipeline" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>get<wbr/>Pipeline</span></a>
7
7
  </div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Constructors</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="constructor"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="constructorbasicmodelpipelinecreator"><span class="tsd-signature-keyword">new</span> <span class="tsd-kind-constructor-signature">BasicModelPipelineCreator</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">ivp</span><span class="tsd-signature-symbol">:</span> <a href="../types/IVP.html" class="tsd-signature-type tsd-kind-type-alias">IVP</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <a href="" class="tsd-signature-type tsd-kind-class">BasicModelPipelineCreator</a><a href="#constructorbasicmodelpipelinecreator" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">ivp</span>: <a href="../types/IVP.html" class="tsd-signature-type tsd-kind-type-alias">IVP</a></span><div class="tsd-comment tsd-typography"><p>initial value problem to be solved</p>
8
- </div></li></ul></div><h4 class="tsd-returns-title">Returns <a href="" class="tsd-signature-type tsd-kind-class">BasicModelPipelineCreator</a></h4><aside class="tsd-sources"><p>Overrides <a href="PipelineCreator.html">PipelineCreator</a>.<a href="PipelineCreator.html#constructor">constructor</a></p><ul><li>Defined in <a href="https://github.com/datagrok-ai/DiffGrok/blob/3c67f17fb9b88f69647e701ac86a3b861345124e/src/pipeline/basic-pipeline-creator.ts#L101">src/pipeline/basic-pipeline-creator.ts:101</a></li></ul></aside></div></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Methods</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="getpipeline"><span>get<wbr/>Pipeline</span><a href="#getpipeline" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="getpipeline-1"><span class="tsd-kind-call-signature">getPipeline</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">inputs</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Float64Array</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <a href="../types/Pipeline.html" class="tsd-signature-type tsd-kind-type-alias">Pipeline</a><a href="#getpipeline-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Return a pipeline corresponding to the specified input vector</p>
8
+ </div></li></ul></div><h4 class="tsd-returns-title">Returns <a href="" class="tsd-signature-type tsd-kind-class">BasicModelPipelineCreator</a></h4><aside class="tsd-sources"><p>Overrides <a href="PipelineCreator.html">PipelineCreator</a>.<a href="PipelineCreator.html#constructor">constructor</a></p><ul><li>Defined in <a href="https://github.com/datagrok-ai/diff-grok/blob/652d427344795ab429f0120033309f18670d3034/src/pipeline/basic-pipeline-creator.ts#L101">src/pipeline/basic-pipeline-creator.ts:101</a></li></ul></aside></div></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h2>Methods</h2></summary><section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="getpipeline"><span>get<wbr/>Pipeline</span><a href="#getpipeline" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="getpipeline-1"><span class="tsd-kind-call-signature">getPipeline</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">inputs</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Float64Array</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <a href="../types/Pipeline.html" class="tsd-signature-type tsd-kind-type-alias">Pipeline</a><a href="#getpipeline-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Return a pipeline corresponding to the specified input vector</p>
9
9
  </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">inputs</span>: <span class="tsd-signature-type">Float64Array</span></span><div class="tsd-comment tsd-typography"><p>a vector of the model inputs</p>
10
- </div></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/Pipeline.html" class="tsd-signature-type tsd-kind-type-alias">Pipeline</a></h4><aside class="tsd-sources"><p>Overrides <a href="PipelineCreator.html">PipelineCreator</a>.<a href="PipelineCreator.html#getpipeline">getPipeline</a></p><ul><li>Defined in <a href="https://github.com/datagrok-ai/DiffGrok/blob/3c67f17fb9b88f69647e701ac86a3b861345124e/src/pipeline/basic-pipeline-creator.ts#L108">src/pipeline/basic-pipeline-creator.ts:108</a></li></ul></aside></div></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#getpipeline"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>get<wbr/>Pipeline</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">diff-grok - v1.0.10</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
10
+ </div></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/Pipeline.html" class="tsd-signature-type tsd-kind-type-alias">Pipeline</a></h4><aside class="tsd-sources"><p>Overrides <a href="PipelineCreator.html">PipelineCreator</a>.<a href="PipelineCreator.html#getpipeline">getPipeline</a></p><ul><li>Defined in <a href="https://github.com/datagrok-ai/diff-grok/blob/652d427344795ab429f0120033309f18670d3034/src/pipeline/basic-pipeline-creator.ts#L108">src/pipeline/basic-pipeline-creator.ts:108</a></li></ul></aside></div></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#getpipeline"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>get<wbr/>Pipeline</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">diff-grok - v1.1.0</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>