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.
- package/.claude/settings.local.json +11 -0
- package/.claude/skills/license-updater/SKILL.md +149 -0
- package/.claude/skills/license-updater/references/compatibility.md +68 -0
- package/.claude/skills/license-updater/references/templates.md +151 -0
- package/.claude/skills/license-updater/scripts/generate_license_files.py +467 -0
- package/CLAUDE.md +104 -0
- package/LICENSE +1 -1
- package/README.MD +121 -27
- package/THIRD_PARTY_LICENSES +135 -0
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/BasicModelPipelineCreator.html +4 -4
- package/docs/classes/Callback.html +5 -5
- package/docs/classes/CyclicModelPipelineCreator.html +4 -4
- package/docs/classes/IterCheckerCallback.html +5 -5
- package/docs/classes/PipelineCreator.html +4 -4
- package/docs/classes/TimeCheckerCallback.html +5 -5
- package/docs/classes/UpdatesModelPipelineCreator.html +4 -4
- package/docs/functions/ab4.html +8 -0
- package/docs/functions/ab5.html +8 -0
- package/docs/functions/applyPipeline.html +2 -2
- package/docs/functions/getCallback.html +2 -2
- package/docs/functions/getIVP.html +2 -2
- package/docs/functions/getInputVector.html +2 -2
- package/docs/functions/getIvp2WebWorker.html +2 -2
- package/docs/functions/getJScode.html +2 -2
- package/docs/functions/getOutputNames.html +2 -2
- package/docs/functions/getPipelineCreator.html +2 -2
- package/docs/functions/lsoda.html +8 -0
- package/docs/functions/mrt.html +2 -2
- package/docs/functions/printE5.html +2 -2
- package/docs/functions/printHires.html +2 -2
- package/docs/functions/printOrego.html +2 -2
- package/docs/functions/printPollution.html +2 -2
- package/docs/functions/printRobertson.html +2 -2
- package/docs/functions/printVdpol.html +2 -2
- package/docs/functions/rk3.html +8 -0
- package/docs/functions/rk4.html +8 -0
- package/docs/functions/rkdp.html +8 -0
- package/docs/functions/ros34prw.html +2 -2
- package/docs/functions/ros3prw.html +2 -2
- package/docs/functions/solveIvp.html +2 -2
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +100 -15
- package/docs/media/E5.png +0 -0
- package/docs/media/HIRES.png +0 -0
- package/docs/media/OREGO.png +0 -0
- package/docs/media/POLL-full.png +0 -0
- package/docs/media/ROBER.png +0 -0
- package/docs/media/VDP0L.png +0 -0
- package/docs/media/cyclic-model.js +3 -1
- package/docs/media/cyclic-model.js.map +1 -1
- package/docs/media/cyclic-model.ts +3 -1
- package/docs/modules.html +1 -1
- package/docs/types/Arg.html +7 -7
- package/docs/types/DifEqs.html +4 -4
- package/docs/types/Func.html +2 -2
- package/docs/types/IVP.html +20 -20
- package/docs/types/IVP2WebWorker.html +7 -7
- package/docs/types/Input.html +4 -4
- package/docs/types/Loop.html +4 -4
- package/docs/types/ODEs.html +8 -8
- package/docs/types/Output.html +4 -4
- package/docs/types/Pipeline.html +4 -4
- package/docs/types/SolverOptions.html +5 -5
- package/docs/types/Update.html +5 -5
- package/docs/types/Wrapper.html +5 -5
- package/images/E5.png +0 -0
- package/images/HIRES.png +0 -0
- package/images/OREGO.png +0 -0
- package/images/POLL-full.png +0 -0
- package/images/ROBER.png +0 -0
- package/images/VDP0L.png +0 -0
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/index.ts +2 -1
- package/jest.config.js +1 -0
- package/package.json +4 -2
- package/src/examples/check-methods.js +15 -3
- package/src/examples/check-methods.js.map +1 -1
- package/src/examples/check-methods.ts +18 -3
- package/src/examples/cyclic-model.js +3 -1
- package/src/examples/cyclic-model.js.map +1 -1
- package/src/examples/cyclic-model.ts +3 -1
- package/src/solver-tools/ab4-method.js +332 -0
- package/src/solver-tools/ab4-method.js.map +1 -0
- package/src/solver-tools/ab4-method.ts +395 -0
- package/src/solver-tools/ab5-method.js +334 -0
- package/src/solver-tools/ab5-method.js.map +1 -0
- package/src/solver-tools/ab5-method.ts +397 -0
- package/src/solver-tools/cvode/common.js +487 -0
- package/src/solver-tools/cvode/common.js.map +1 -0
- package/src/solver-tools/cvode/common.ts +549 -0
- package/src/solver-tools/cvode/cvode.js +1062 -0
- package/src/solver-tools/cvode/cvode.js.map +1 -0
- package/src/solver-tools/cvode/cvode.ts +1226 -0
- package/src/solver-tools/cvode/cvode_adams.js +124 -0
- package/src/solver-tools/cvode/cvode_adams.js.map +1 -0
- package/src/solver-tools/cvode/cvode_adams.ts +142 -0
- package/src/solver-tools/cvode/cvode_bdf.js +153 -0
- package/src/solver-tools/cvode/cvode_bdf.js.map +1 -0
- package/src/solver-tools/cvode/cvode_bdf.ts +164 -0
- package/src/solver-tools/cvode/cvode_class.js +158 -0
- package/src/solver-tools/cvode/cvode_class.js.map +1 -0
- package/src/solver-tools/cvode/cvode_class.ts +271 -0
- package/src/solver-tools/cvode/cvode_hin.js +119 -0
- package/src/solver-tools/cvode/cvode_hin.js.map +1 -0
- package/src/solver-tools/cvode/cvode_hin.ts +150 -0
- package/src/solver-tools/cvode/cvode_io.js +203 -0
- package/src/solver-tools/cvode/cvode_io.js.map +1 -0
- package/src/solver-tools/cvode/cvode_io.ts +258 -0
- package/src/solver-tools/cvode/cvode_ls.js +210 -0
- package/src/solver-tools/cvode/cvode_ls.js.map +1 -0
- package/src/solver-tools/cvode/cvode_ls.ts +249 -0
- package/src/solver-tools/cvode/cvode_nls.js +220 -0
- package/src/solver-tools/cvode/cvode_nls.js.map +1 -0
- package/src/solver-tools/cvode/cvode_nls.ts +259 -0
- package/src/solver-tools/cvode/cvode_root.js +415 -0
- package/src/solver-tools/cvode/cvode_root.js.map +1 -0
- package/src/solver-tools/cvode/cvode_root.ts +503 -0
- package/src/solver-tools/cvode/dense_linalg.js +131 -0
- package/src/solver-tools/cvode/dense_linalg.js.map +1 -0
- package/src/solver-tools/cvode/dense_linalg.ts +144 -0
- package/src/solver-tools/cvode/index.js +26 -0
- package/src/solver-tools/cvode/index.js.map +1 -0
- package/src/solver-tools/cvode/index.ts +64 -0
- package/src/solver-tools/cvode-method.js +114 -0
- package/src/solver-tools/cvode-method.js.map +1 -0
- package/src/solver-tools/cvode-method.ts +129 -0
- package/src/solver-tools/index.js +7 -0
- package/src/solver-tools/index.js.map +1 -1
- package/src/solver-tools/index.ts +7 -0
- package/src/solver-tools/lsoda/blas.js +257 -0
- package/src/solver-tools/lsoda/blas.js.map +1 -0
- package/src/solver-tools/lsoda/blas.ts +279 -0
- package/src/solver-tools/lsoda/cfode.js +84 -0
- package/src/solver-tools/lsoda/cfode.js.map +1 -0
- package/src/solver-tools/lsoda/cfode.ts +95 -0
- package/src/solver-tools/lsoda/common.js +94 -0
- package/src/solver-tools/lsoda/common.js.map +1 -0
- package/src/solver-tools/lsoda/common.ts +135 -0
- package/src/solver-tools/lsoda/corfailure.js +36 -0
- package/src/solver-tools/lsoda/corfailure.js.map +1 -0
- package/src/solver-tools/lsoda/corfailure.ts +42 -0
- package/src/solver-tools/lsoda/correction.js +112 -0
- package/src/solver-tools/lsoda/correction.js.map +1 -0
- package/src/solver-tools/lsoda/correction.ts +131 -0
- package/src/solver-tools/lsoda/dense.js +121 -0
- package/src/solver-tools/lsoda/dense.js.map +1 -0
- package/src/solver-tools/lsoda/dense.ts +141 -0
- package/src/solver-tools/lsoda/index.js +15 -0
- package/src/solver-tools/lsoda/index.js.map +1 -0
- package/src/solver-tools/lsoda/index.ts +17 -0
- package/src/solver-tools/lsoda/intdy.js +54 -0
- package/src/solver-tools/lsoda/intdy.js.map +1 -0
- package/src/solver-tools/lsoda/intdy.ts +62 -0
- package/src/solver-tools/lsoda/lsoda.js +578 -0
- package/src/solver-tools/lsoda/lsoda.js.map +1 -0
- package/src/solver-tools/lsoda/lsoda.ts +644 -0
- package/src/solver-tools/lsoda/methodswitch.js +108 -0
- package/src/solver-tools/lsoda/methodswitch.js.map +1 -0
- package/src/solver-tools/lsoda/methodswitch.ts +119 -0
- package/src/solver-tools/lsoda/orderswitch.js +97 -0
- package/src/solver-tools/lsoda/orderswitch.js.map +1 -0
- package/src/solver-tools/lsoda/orderswitch.ts +107 -0
- package/src/solver-tools/lsoda/prja.js +54 -0
- package/src/solver-tools/lsoda/prja.js.map +1 -0
- package/src/solver-tools/lsoda/prja.ts +61 -0
- package/src/solver-tools/lsoda/scaleh.js +41 -0
- package/src/solver-tools/lsoda/scaleh.js.map +1 -0
- package/src/solver-tools/lsoda/scaleh.ts +45 -0
- package/src/solver-tools/lsoda/solsy.js +25 -0
- package/src/solver-tools/lsoda/solsy.js.map +1 -0
- package/src/solver-tools/lsoda/solsy.ts +30 -0
- package/src/solver-tools/lsoda/stoda.js +270 -0
- package/src/solver-tools/lsoda/stoda.js.map +1 -0
- package/src/solver-tools/lsoda/stoda.ts +298 -0
- package/src/solver-tools/lsoda-method.js +134 -0
- package/src/solver-tools/lsoda-method.js.map +1 -0
- package/src/solver-tools/lsoda-method.ts +154 -0
- package/src/solver-tools/mrt-method.js +81 -18
- package/src/solver-tools/mrt-method.js.map +1 -1
- package/src/solver-tools/mrt-method.ts +111 -21
- package/src/solver-tools/rk3-method.js +210 -0
- package/src/solver-tools/rk3-method.js.map +1 -0
- package/src/solver-tools/rk3-method.ts +257 -0
- package/src/solver-tools/rk4-method.js +236 -0
- package/src/solver-tools/rk4-method.js.map +1 -0
- package/src/solver-tools/rk4-method.ts +286 -0
- package/src/solver-tools/rkdp-method.js +247 -0
- package/src/solver-tools/rkdp-method.js.map +1 -0
- package/src/solver-tools/rkdp-method.ts +300 -0
- package/src/solver-tools/ros34prw-method.js +1 -1
- package/src/solver-tools/ros34prw-method.js.map +1 -1
- package/src/solver-tools/ros34prw-method.ts +1 -1
- package/src/solver-tools/ros3prw-method.js +1 -1
- package/src/solver-tools/ros3prw-method.js.map +1 -1
- package/src/solver-tools/ros3prw-method.ts +1 -1
- package/src/solver-tools/solver-defs.js +7 -0
- package/src/solver-tools/solver-defs.js.map +1 -1
- package/src/solver-tools/solver-defs.ts +7 -0
- package/src/tests/correctness.test.js +6 -4
- package/src/tests/correctness.test.js.map +1 -1
- package/src/tests/correctness.test.ts +6 -4
- package/src/tests/cvode-lib-correctness.test.js +404 -0
- package/src/tests/cvode-lib-correctness.test.js.map +1 -0
- package/src/tests/cvode-lib-correctness.test.ts +505 -0
- package/src/tests/cvode-lib-performance.test.js +103 -0
- package/src/tests/cvode-lib-performance.test.js.map +1 -0
- package/src/tests/cvode-lib-performance.test.ts +128 -0
- package/src/tests/lsoda-lib-correctness.test.js +223 -0
- package/src/tests/lsoda-lib-correctness.test.js.map +1 -0
- package/src/tests/lsoda-lib-correctness.test.ts +283 -0
- package/src/tests/lsoda-lib-performance.test.js +95 -0
- package/src/tests/lsoda-lib-performance.test.js.map +1 -0
- package/src/tests/lsoda-lib-performance.test.ts +126 -0
- package/src/tests/performance.test.js +12 -8
- package/src/tests/performance.test.js.map +1 -1
- package/src/tests/performance.test.ts +12 -8
- package/src/tests/test-defs.js +20 -1
- package/src/tests/test-defs.js.map +1 -1
- package/src/tests/test-defs.ts +22 -1
- package/src/worker-tools/solving.js +15 -1
- package/src/worker-tools/solving.js.map +1 -1
- package/src/worker-tools/solving.ts +23 -1
package/README.MD
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
1
|
# Diff Grok
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://doi.org/10.5281/zenodo.17974378)
|
|
4
|
+
[](https://datagrok-ai.github.io/diff-grok/)
|
|
5
|
+
[](https://github.com/datagrok-ai/diff-grok/blob/main/LICENSE)
|
|
6
|
+
[](https://github.com/datagrok-ai/diff-grok/actions/workflows/libraries.yaml)
|
|
7
|
+
[](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
|
-
*
|
|
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,
|
|
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
|
|
55
|
+
initial: [1],
|
|
38
56
|
func: (t: number, y: Float64Array, output: Float64Array) => {
|
|
39
|
-
|
|
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 =
|
|
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
|
|
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,
|
|
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 =
|
|
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
|
-
|
|
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
|
-

|
|
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
|

|
|
201
237
|
|
|
238
|
+
<details>
|
|
239
|
+
<summary><strong>Gallery</strong></summary>
|
|
240
|
+
|
|
241
|
+
**VDPOL**
|
|
242
|
+
|
|
243
|
+

|
|
244
|
+
|
|
245
|
+
**HIRES**
|
|
246
|
+
|
|
247
|
+

|
|
248
|
+
|
|
249
|
+
**E5**
|
|
250
|
+
|
|
251
|
+

|
|
252
|
+
|
|
253
|
+
**POLL**
|
|
254
|
+
|
|
255
|
+

|
|
256
|
+
|
|
257
|
+
**OREGO**
|
|
258
|
+
|
|
259
|
+

|
|
260
|
+
|
|
261
|
+
**Rober**
|
|
262
|
+
|
|
263
|
+

|
|
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.
|
package/docs/assets/hierarchy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "eJyVkjFPwzAQhf/LzVdw4rYhHsnEgMQAE+pg7EOx4tiVbQZU5b+jUCFZqG3i5YbTe/qe3t0JgvcpgnhvGfK6OiAE+rSkkvEugjhBy+bp5EggoJPWfkg1AMJgnAZR1Q8IX8GCAGVljBTv/zR3fRot4HkPAlLUm9m0OS8QVG+sDuRmeIMVaw4TQttkuKdEoetJDRTWkC/IF0JMCBXLia9mpALiBfkykddVRnwxR7LGURdIJh9u0f5JSwrmnCHf7pHvflvmPL/qo4xGPXtNtiDMVdOKArb7/Ke+lS3HX3et4O/yk78dtUwUSwPcsC0lmKYfzBAntw=="
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "eJyVlU2P2jAQhv9Lzqh0+egHty1LVaq2oG4Lh6oHJ5mFKE7sjg0tqvrfV0mAxIkzQ6/zzvNkNNjmx9/Awh8bzIJ3wiTRZxWDXCcaZJLDHEFYhcEg0MLug1kQSWEMmGFv64u9zWQwCNIkj4PZ3ejNv8HVPxdShiJKu7pLQtKnSN46Xn8v9YWlBZzvIUoB+0f1NFFOdtT/mO9bkgE7n6eJcn7XsbBgblsr0Ux94x53tcueNJjhPe5cYvTy7eu76ahBPSRPi1+mDVZVjn1/yKM2WdQ4bpnrg22DZZElN+sOt1nfQI22EG4VpoAevg450yeldFtQ1Dhu9bDo7LiosdzBelZVVTn2cnTa9KXO8Y9KHgFX2iYq7wzvhJypOtBtRVXl2C0Krbu/2rnM0SKc1OTTIY/KeYcinLjkq4kDTf3QlIK0lqfuyht4s4EQ7cB2n51a04hpSXmfNhA5T4zjaXQwquatcxXty9dBj9p39VxJs4fWfXyMVOxd7zWkBdXV+SIyMD2WRget6n3HHR35gDtKaVQsfJYyIMAMrQ/L0BKQxiS3C+9BP0cc/CFB/xLrlFOsEHaqV1GmnGKtpDwUUK/m2sGpvqoQ0BpCde3gVJtYK9mrKVNCgenYx2I6JiHvU4cp9dRhGms/FWsKU2Y80fjbi54zBidoGjbFP8/y6B37knXwn88njdyW"
|
package/docs/assets/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "
|
|
1
|
+
window.searchData = "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";
|
|
@@ -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
|
|
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">'diff-grok'</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 & 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 & 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">''</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">=></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">' '</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"> < </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">''</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"> < </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">' '</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">'Simulation failed: '</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">'Unknown problem!'</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="
|
|
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/
|
|
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/
|
|
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>
|