diff-grok 1.0.9 → 1.0.10
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/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
- package/.github/workflows/deploy-docs.yml +15 -0
- package/CONTRIBUTING.md +74 -0
- package/README.MD +183 -5
- package/docs/.nojekyll +1 -0
- package/docs/assets/hierarchy.js +1 -0
- package/docs/assets/highlight.css +99 -0
- package/docs/assets/icons.js +18 -0
- package/docs/assets/icons.svg +1 -0
- package/docs/assets/main.js +60 -0
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +1633 -0
- package/docs/classes/BasicModelPipelineCreator.html +10 -0
- package/docs/classes/Callback.html +7 -0
- package/docs/classes/CyclicModelPipelineCreator.html +10 -0
- package/docs/classes/IterCheckerCallback.html +8 -0
- package/docs/classes/PipelineCreator.html +6 -0
- package/docs/classes/TimeCheckerCallback.html +8 -0
- package/docs/classes/UpdatesModelPipelineCreator.html +10 -0
- package/docs/functions/applyPipeline.html +9 -0
- package/docs/functions/getCallback.html +3 -0
- package/docs/functions/getIVP.html +6 -0
- package/docs/functions/getInputVector.html +2 -0
- package/docs/functions/getIvp2WebWorker.html +6 -0
- package/docs/functions/getJScode.html +6 -0
- package/docs/functions/getOutputNames.html +4 -0
- package/docs/functions/getPipelineCreator.html +7 -0
- package/docs/functions/mrt.html +11 -0
- package/docs/functions/printE5.html +76 -0
- package/docs/functions/printHires.html +76 -0
- package/docs/functions/printOrego.html +66 -0
- package/docs/functions/printPollution.html +163 -0
- package/docs/functions/printRobertson.html +60 -0
- package/docs/functions/printVdpol.html +66 -0
- package/docs/functions/ros34prw.html +8 -0
- package/docs/functions/ros3prw.html +8 -0
- package/docs/functions/solveIvp.html +5 -0
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +683 -0
- package/docs/media/CONTRIBUTING.md +74 -0
- package/docs/media/POLL.png +0 -0
- package/docs/media/VDPOL.png +0 -0
- package/docs/media/acid-prod.gif +0 -0
- package/docs/media/basic-use.js +40 -0
- package/docs/media/basic-use.js.map +1 -0
- package/docs/media/basic-use.ts +44 -0
- package/docs/media/check-methods.js +59 -0
- package/docs/media/check-methods.js.map +1 -0
- package/docs/media/check-methods.ts +81 -0
- package/docs/media/corr-probs.js +132 -0
- package/docs/media/corr-probs.js.map +1 -0
- package/docs/media/corr-probs.ts +155 -0
- package/docs/media/cyclic-model.js +100 -0
- package/docs/media/cyclic-model.js.map +1 -0
- package/docs/media/cyclic-model.ts +110 -0
- package/docs/media/e5.js +36 -0
- package/docs/media/e5.js.map +1 -0
- package/docs/media/e5.ts +36 -0
- package/docs/media/hires.js +39 -0
- package/docs/media/hires.js.map +1 -0
- package/docs/media/hires.ts +40 -0
- package/docs/media/model-updates.js +112 -0
- package/docs/media/model-updates.js.map +1 -0
- package/docs/media/model-updates.ts +122 -0
- package/docs/media/orego.js +24 -0
- package/docs/media/orego.js.map +1 -0
- package/docs/media/orego.ts +25 -0
- package/docs/media/pipeline-use.js +87 -0
- package/docs/media/pipeline-use.js.map +1 -0
- package/docs/media/pipeline-use.ts +98 -0
- package/docs/media/pollution.js +132 -0
- package/docs/media/pollution.js.map +1 -0
- package/docs/media/pollution.ts +133 -0
- package/docs/media/print-benchmark.js +581 -0
- package/docs/media/print-benchmark.js.map +1 -0
- package/docs/media/print-benchmark.ts +594 -0
- package/docs/media/robertson.js +19 -0
- package/docs/media/robertson.js.map +1 -0
- package/docs/media/robertson.ts +19 -0
- package/docs/media/scripting.js +30 -0
- package/docs/media/scripting.js.map +1 -0
- package/docs/media/scripting.ts +35 -0
- package/docs/media/vdpol.js +17 -0
- package/docs/media/vdpol.js.map +1 -0
- package/docs/media/vdpol.ts +17 -0
- package/docs/modules.html +1 -0
- package/docs/types/Arg.html +12 -0
- package/docs/types/DifEqs.html +8 -0
- package/docs/types/Func.html +7 -0
- package/docs/types/IVP.html +40 -0
- package/docs/types/IVP2WebWorker.html +12 -0
- package/docs/types/Input.html +8 -0
- package/docs/types/Loop.html +7 -0
- package/docs/types/ODEs.html +31 -0
- package/docs/types/Output.html +6 -0
- package/docs/types/Pipeline.html +6 -0
- package/docs/types/SolverOptions.html +8 -0
- package/docs/types/Update.html +9 -0
- package/docs/types/Wrapper.html +8 -0
- package/images/POLL.png +0 -0
- package/images/VDPOL.png +0 -0
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/index.ts +6 -5
- package/package.json +2 -1
- package/src/examples/check-methods.js +23 -9
- package/src/examples/check-methods.js.map +1 -1
- package/src/examples/check-methods.ts +28 -9
- package/src/examples/corr-probs.js +3 -1
- package/src/examples/corr-probs.js.map +1 -1
- package/src/examples/corr-probs.ts +7 -3
- package/src/examples/e5.js +6 -0
- package/src/examples/e5.js.map +1 -1
- package/src/examples/e5.ts +7 -0
- package/src/examples/hires.js +10 -0
- package/src/examples/hires.js.map +1 -1
- package/src/examples/hires.ts +11 -0
- package/src/examples/index.js +21 -7
- package/src/examples/index.js.map +1 -1
- package/src/examples/index.ts +23 -7
- package/src/examples/orego.js +5 -0
- package/src/examples/orego.js.map +1 -1
- package/src/examples/orego.ts +6 -0
- package/src/examples/pollution.js +22 -0
- package/src/examples/pollution.js.map +1 -1
- package/src/examples/pollution.ts +23 -0
- package/src/examples/print-benchmark.js +581 -0
- package/src/examples/print-benchmark.js.map +1 -0
- package/src/examples/print-benchmark.ts +594 -0
- package/src/examples/robertson.js +6 -1
- package/src/examples/robertson.js.map +1 -1
- package/src/examples/robertson.ts +7 -1
- package/src/examples/scripting.js +1 -1
- package/src/examples/scripting.js.map +1 -1
- package/src/examples/scripting.ts +1 -1
- package/src/examples/vdpol.js +4 -0
- package/src/examples/vdpol.js.map +1 -1
- package/src/examples/vdpol.ts +5 -0
- package/src/pipeline/basic-pipeline-creator.js +96 -1
- package/src/pipeline/basic-pipeline-creator.js.map +1 -1
- package/src/pipeline/basic-pipeline-creator.ts +97 -1
- package/src/pipeline/loops-pipeline-creator.js +115 -2
- package/src/pipeline/loops-pipeline-creator.js.map +1 -1
- package/src/pipeline/loops-pipeline-creator.ts +116 -2
- package/src/pipeline/output.js +7 -2
- package/src/pipeline/output.js.map +1 -1
- package/src/pipeline/output.ts +7 -2
- package/src/pipeline/pipeline-creator.js.map +1 -1
- package/src/pipeline/pipeline-creator.ts +4 -0
- package/src/pipeline/pipeline.js +193 -2
- package/src/pipeline/pipeline.js.map +1 -1
- package/src/pipeline/pipeline.ts +206 -4
- package/src/pipeline/updates-pipeline-creator.js +130 -2
- package/src/pipeline/updates-pipeline-creator.js.map +1 -1
- package/src/pipeline/updates-pipeline-creator.ts +131 -2
- package/src/scripting-tools/constants.js +18 -4
- package/src/scripting-tools/constants.js.map +1 -1
- package/src/scripting-tools/constants.ts +22 -4
- package/src/scripting-tools/index.js.map +1 -1
- package/src/scripting-tools/index.ts +3 -2
- package/src/scripting-tools/model-error.js +3 -1
- package/src/scripting-tools/model-error.js.map +1 -1
- package/src/scripting-tools/model-error.ts +3 -1
- package/src/scripting-tools/scripting-tools.js +139 -9
- package/src/scripting-tools/scripting-tools.js.map +1 -1
- package/src/scripting-tools/scripting-tools.ts +228 -21
- package/src/solver-tools/callbacks/callback-base.js +2 -0
- package/src/solver-tools/callbacks/callback-base.js.map +1 -1
- package/src/solver-tools/callbacks/callback-base.ts +4 -0
- package/src/solver-tools/callbacks/callback-tools.js +3 -1
- package/src/solver-tools/callbacks/callback-tools.js.map +1 -1
- package/src/solver-tools/callbacks/callback-tools.ts +3 -1
- package/src/solver-tools/callbacks/iter-checker-callback.js +4 -0
- package/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -1
- package/src/solver-tools/callbacks/iter-checker-callback.ts +4 -0
- package/src/solver-tools/callbacks/time-checker-callback.js +4 -0
- package/src/solver-tools/callbacks/time-checker-callback.js.map +1 -1
- package/src/solver-tools/callbacks/time-checker-callback.ts +4 -0
- package/src/solver-tools/index.js +3 -0
- package/src/solver-tools/index.js.map +1 -1
- package/src/solver-tools/index.ts +3 -0
- package/src/solver-tools/mrt-method.js +40 -1
- package/src/solver-tools/mrt-method.js.map +1 -1
- package/src/solver-tools/mrt-method.ts +40 -1
- package/src/solver-tools/ros34prw-method.js +39 -1
- package/src/solver-tools/ros34prw-method.js.map +1 -1
- package/src/solver-tools/ros34prw-method.ts +39 -1
- package/src/solver-tools/ros3prw-method.js +39 -1
- package/src/solver-tools/ros3prw-method.js.map +1 -1
- package/src/solver-tools/ros3prw-method.ts +39 -1
- package/src/solver-tools/solver-defs.js +9 -3
- package/src/solver-tools/solver-defs.js.map +1 -1
- package/src/solver-tools/solver-defs.ts +85 -7
- package/src/worker-tools/scripting.js +95 -1
- package/src/worker-tools/scripting.js.map +1 -1
- package/src/worker-tools/scripting.ts +104 -2
- package/src/worker-tools/solving.js +5 -1
- package/src/worker-tools/solving.js.map +1 -1
- package/src/worker-tools/solving.ts +5 -1
- package/typedoc.json +8 -0
|
@@ -1,10 +1,105 @@
|
|
|
1
1
|
import { getOutputCode } from './output';
|
|
2
2
|
import { PipelineCreator } from './pipeline-creator';
|
|
3
|
-
/** Pipeline creator for model
|
|
3
|
+
/** Pipeline creator for a model
|
|
4
|
+
* @example
|
|
5
|
+
* // Here, we consider modeling queues: https://en.wikipedia.org/wiki/M/M/c_queue
|
|
6
|
+
* import * as DGL from 'diff-grok';
|
|
7
|
+
*
|
|
8
|
+
* // 1. Model specification: the M|M|2|2 model
|
|
9
|
+
* const model = `#name: M|M|2|2
|
|
10
|
+
* #description: Modelling the system with two servers & two waiting places (EXPLAINED)
|
|
11
|
+
*
|
|
12
|
+
* #equations:
|
|
13
|
+
* dp0/dt = -la * p0 + mu * p1
|
|
14
|
+
* dp1/dt = la * p0 - (la + mu) * p1 + 2 * mu * p2
|
|
15
|
+
* dp2/dt = la * p1 - (la + 2 * mu) * p2 + 2 * mu * p3
|
|
16
|
+
* dp3/dt = la * p2 - (la + 2 * mu) * p3 + 2 * mu * p4
|
|
17
|
+
*
|
|
18
|
+
* #expressions:
|
|
19
|
+
* la = 1 / arrival
|
|
20
|
+
* mu = 1 / service
|
|
21
|
+
* p4 = 1 - p0 - p1 - p2 - p3
|
|
22
|
+
* busy = 1 - p0 - p1
|
|
23
|
+
* queue = p3 + 2 * p4
|
|
24
|
+
*
|
|
25
|
+
* #argument: t
|
|
26
|
+
* _t0 = 0 {min: 0; max: 10; caption: start; category: Time; units: min} [Initial time of simulation]
|
|
27
|
+
* _t1 = 60 {min: 20; max: 100; caption: finish; category: Time; units: min} [Final time of simulation]
|
|
28
|
+
* _h = 1 {min: 0.01; max: 0.1; caption: step; category: Time; units: min} [Time step of simulation]
|
|
29
|
+
*
|
|
30
|
+
* #inits:
|
|
31
|
+
* p0 = 1 {min: 0; max: 1; category: Initial state; caption: empty} [Probability that initially there are NO customers]
|
|
32
|
+
* p1 = 0 {min: 0; max: 1; category: Initial state; caption: single} [Probability that initially there is ONE customer]
|
|
33
|
+
* p2 = 0 {min: 0; max: 1; category: Initial state; caption: two} [Probability that initially there are TWO customers]
|
|
34
|
+
* p3 = 0 {min: 0; max: 1; category: Initial state; caption: three} [Probability that initially there are THREE customers]
|
|
35
|
+
*
|
|
36
|
+
* #output:
|
|
37
|
+
* t {caption: Time, min}
|
|
38
|
+
* p0 {caption: P(Empty)}
|
|
39
|
+
* busy {caption: P(Full load)}
|
|
40
|
+
* queue {caption: E(Queue)}
|
|
41
|
+
*
|
|
42
|
+
* #parameters:
|
|
43
|
+
* arrival = 10 {min: 1; max: 100; category: Means; caption: arrival; units: min} [Mean arrival time]
|
|
44
|
+
* service = 100 {min: 1; max: 100; category: Means; caption: service; units: min} [Mean service time]`;
|
|
45
|
+
*
|
|
46
|
+
* // 2. Generate IVP-objects: for the main thread & for computations in webworkers
|
|
47
|
+
* const ivp = DGL.getIVP(model);
|
|
48
|
+
* const ivpWW = DGL.getIvp2WebWorker(ivp);
|
|
49
|
+
*
|
|
50
|
+
* // 3. Perform computations
|
|
51
|
+
* try {
|
|
52
|
+
* // 3.1) Extract names of outputs
|
|
53
|
+
* const outputNames = DGL.getOutputNames(ivp);
|
|
54
|
+
* const outSize = outputNames.length;
|
|
55
|
+
*
|
|
56
|
+
* // 3.2) Set model inputs
|
|
57
|
+
* const inputs = {
|
|
58
|
+
* _t0: 0, // Initial time of simulation
|
|
59
|
+
* _t1: 60, // Final time of simulation
|
|
60
|
+
* _h: 1, // Time step of simulation
|
|
61
|
+
* p0: 1, // Probability that initially there are NO customers
|
|
62
|
+
* p1: 0, // Probability that initially there is ONE customer
|
|
63
|
+
* p2: 0, // Probability that initially there are TWO customers
|
|
64
|
+
* p3: 0, // Probability that initially there are THREE customers
|
|
65
|
+
* arrival: 10, // Mean arrival time
|
|
66
|
+
* service: 100, // Mean service time
|
|
67
|
+
* };
|
|
68
|
+
* const inputVector = DGL.getInputVector(inputs, ivp);
|
|
69
|
+
*
|
|
70
|
+
* // 3.3) Create a pipeline
|
|
71
|
+
* const creator = DGL.getPipelineCreator(ivp);
|
|
72
|
+
* const pipeline = creator.getPipeline(inputVector);
|
|
73
|
+
*
|
|
74
|
+
* // 3.4) Apply pipeline to perform computations
|
|
75
|
+
* const solution = DGL.applyPipeline(pipeline, ivpWW, inputVector);
|
|
76
|
+
* // 3.5) Print results
|
|
77
|
+
*
|
|
78
|
+
* // 3.5.1) Table header
|
|
79
|
+
* let line = '';
|
|
80
|
+
* outputNames.forEach((name) => line += name + ' ');
|
|
81
|
+
* console.log(line);
|
|
82
|
+
*
|
|
83
|
+
* // 3.5.2) Table with solution
|
|
84
|
+
* const length = solution[0].length;
|
|
85
|
+
* for (let i = 0; i < length; ++i) {
|
|
86
|
+
* line = '';
|
|
87
|
+
*
|
|
88
|
+
* for (let j = 0; j < outSize; ++j)
|
|
89
|
+
* line += solution[j][i].toFixed(8) + ' ';
|
|
90
|
+
* console.log(line);
|
|
91
|
+
* }
|
|
92
|
+
* } catch (err) {
|
|
93
|
+
* console.log('Simulation failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
94
|
+
* } */
|
|
4
95
|
export class BasicModelPipelineCreator extends PipelineCreator {
|
|
96
|
+
/** @param ivp - initial value problem to be solved */
|
|
5
97
|
constructor(ivp) {
|
|
6
98
|
super(ivp);
|
|
7
99
|
}
|
|
100
|
+
/** Return a pipeline corresponding to the specified input vector
|
|
101
|
+
* @param inputs - a vector of the model inputs
|
|
102
|
+
*/
|
|
8
103
|
getPipeline(inputs) {
|
|
9
104
|
return {
|
|
10
105
|
wrappers: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-pipeline-creator.js","sourceRoot":"","sources":["basic-pipeline-creator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"basic-pipeline-creator.js","sourceRoot":"","sources":["basic-pipeline-creator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2FO;AACP,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,sDAAsD;IACtD,YAAY,GAAQ;QAClB,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;MAEE;IACK,WAAW,CAAC,MAAoB;QACrC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,OAAO,EAAE,IAAI;oBACb,GAAG,EAAE,IAAI;oBACT,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC;IACJ,CAAC;CACF,CAAC,4BAA4B"}
|
|
@@ -1,14 +1,110 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
1
2
|
import {IVP} from '../scripting-tools';
|
|
2
3
|
import {getOutputCode} from './output';
|
|
3
4
|
import {Pipeline} from './pipeline';
|
|
4
5
|
import {PipelineCreator} from './pipeline-creator';
|
|
5
6
|
|
|
6
|
-
/** Pipeline creator for model
|
|
7
|
+
/** Pipeline creator for a model
|
|
8
|
+
* @example
|
|
9
|
+
* // Here, we consider modeling queues: https://en.wikipedia.org/wiki/M/M/c_queue
|
|
10
|
+
* import * as DGL from 'diff-grok';
|
|
11
|
+
*
|
|
12
|
+
* // 1. Model specification: the M|M|2|2 model
|
|
13
|
+
* const model = `#name: M|M|2|2
|
|
14
|
+
* #description: Modelling the system with two servers & two waiting places (EXPLAINED)
|
|
15
|
+
*
|
|
16
|
+
* #equations:
|
|
17
|
+
* dp0/dt = -la * p0 + mu * p1
|
|
18
|
+
* dp1/dt = la * p0 - (la + mu) * p1 + 2 * mu * p2
|
|
19
|
+
* dp2/dt = la * p1 - (la + 2 * mu) * p2 + 2 * mu * p3
|
|
20
|
+
* dp3/dt = la * p2 - (la + 2 * mu) * p3 + 2 * mu * p4
|
|
21
|
+
*
|
|
22
|
+
* #expressions:
|
|
23
|
+
* la = 1 / arrival
|
|
24
|
+
* mu = 1 / service
|
|
25
|
+
* p4 = 1 - p0 - p1 - p2 - p3
|
|
26
|
+
* busy = 1 - p0 - p1
|
|
27
|
+
* queue = p3 + 2 * p4
|
|
28
|
+
*
|
|
29
|
+
* #argument: t
|
|
30
|
+
* _t0 = 0 {min: 0; max: 10; caption: start; category: Time; units: min} [Initial time of simulation]
|
|
31
|
+
* _t1 = 60 {min: 20; max: 100; caption: finish; category: Time; units: min} [Final time of simulation]
|
|
32
|
+
* _h = 1 {min: 0.01; max: 0.1; caption: step; category: Time; units: min} [Time step of simulation]
|
|
33
|
+
*
|
|
34
|
+
* #inits:
|
|
35
|
+
* p0 = 1 {min: 0; max: 1; category: Initial state; caption: empty} [Probability that initially there are NO customers]
|
|
36
|
+
* p1 = 0 {min: 0; max: 1; category: Initial state; caption: single} [Probability that initially there is ONE customer]
|
|
37
|
+
* p2 = 0 {min: 0; max: 1; category: Initial state; caption: two} [Probability that initially there are TWO customers]
|
|
38
|
+
* p3 = 0 {min: 0; max: 1; category: Initial state; caption: three} [Probability that initially there are THREE customers]
|
|
39
|
+
*
|
|
40
|
+
* #output:
|
|
41
|
+
* t {caption: Time, min}
|
|
42
|
+
* p0 {caption: P(Empty)}
|
|
43
|
+
* busy {caption: P(Full load)}
|
|
44
|
+
* queue {caption: E(Queue)}
|
|
45
|
+
*
|
|
46
|
+
* #parameters:
|
|
47
|
+
* arrival = 10 {min: 1; max: 100; category: Means; caption: arrival; units: min} [Mean arrival time]
|
|
48
|
+
* service = 100 {min: 1; max: 100; category: Means; caption: service; units: min} [Mean service time]`;
|
|
49
|
+
*
|
|
50
|
+
* // 2. Generate IVP-objects: for the main thread & for computations in webworkers
|
|
51
|
+
* const ivp = DGL.getIVP(model);
|
|
52
|
+
* const ivpWW = DGL.getIvp2WebWorker(ivp);
|
|
53
|
+
*
|
|
54
|
+
* // 3. Perform computations
|
|
55
|
+
* try {
|
|
56
|
+
* // 3.1) Extract names of outputs
|
|
57
|
+
* const outputNames = DGL.getOutputNames(ivp);
|
|
58
|
+
* const outSize = outputNames.length;
|
|
59
|
+
*
|
|
60
|
+
* // 3.2) Set model inputs
|
|
61
|
+
* const inputs = {
|
|
62
|
+
* _t0: 0, // Initial time of simulation
|
|
63
|
+
* _t1: 60, // Final time of simulation
|
|
64
|
+
* _h: 1, // Time step of simulation
|
|
65
|
+
* p0: 1, // Probability that initially there are NO customers
|
|
66
|
+
* p1: 0, // Probability that initially there is ONE customer
|
|
67
|
+
* p2: 0, // Probability that initially there are TWO customers
|
|
68
|
+
* p3: 0, // Probability that initially there are THREE customers
|
|
69
|
+
* arrival: 10, // Mean arrival time
|
|
70
|
+
* service: 100, // Mean service time
|
|
71
|
+
* };
|
|
72
|
+
* const inputVector = DGL.getInputVector(inputs, ivp);
|
|
73
|
+
*
|
|
74
|
+
* // 3.3) Create a pipeline
|
|
75
|
+
* const creator = DGL.getPipelineCreator(ivp);
|
|
76
|
+
* const pipeline = creator.getPipeline(inputVector);
|
|
77
|
+
*
|
|
78
|
+
* // 3.4) Apply pipeline to perform computations
|
|
79
|
+
* const solution = DGL.applyPipeline(pipeline, ivpWW, inputVector);
|
|
80
|
+
* // 3.5) Print results
|
|
81
|
+
*
|
|
82
|
+
* // 3.5.1) Table header
|
|
83
|
+
* let line = '';
|
|
84
|
+
* outputNames.forEach((name) => line += name + ' ');
|
|
85
|
+
* console.log(line);
|
|
86
|
+
*
|
|
87
|
+
* // 3.5.2) Table with solution
|
|
88
|
+
* const length = solution[0].length;
|
|
89
|
+
* for (let i = 0; i < length; ++i) {
|
|
90
|
+
* line = '';
|
|
91
|
+
*
|
|
92
|
+
* for (let j = 0; j < outSize; ++j)
|
|
93
|
+
* line += solution[j][i].toFixed(8) + ' ';
|
|
94
|
+
* console.log(line);
|
|
95
|
+
* }
|
|
96
|
+
* } catch (err) {
|
|
97
|
+
* console.log('Simulation failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
98
|
+
* } */
|
|
7
99
|
export class BasicModelPipelineCreator extends PipelineCreator {
|
|
100
|
+
/** @param ivp - initial value problem to be solved */
|
|
8
101
|
constructor(ivp: IVP) {
|
|
9
102
|
super(ivp);
|
|
10
103
|
}
|
|
11
104
|
|
|
105
|
+
/** Return a pipeline corresponding to the specified input vector
|
|
106
|
+
* @param inputs - a vector of the model inputs
|
|
107
|
+
*/
|
|
12
108
|
public getPipeline(inputs: Float64Array): Pipeline {
|
|
13
109
|
return {
|
|
14
110
|
wrappers: [
|
|
@@ -2,14 +2,127 @@ import { MATH_CONSTS, MATH_FUNCS, POW_IDX } from '../scripting-tools/scripting-t
|
|
|
2
2
|
import { getOutputCode } from './output';
|
|
3
3
|
import { PipelineCreator } from './pipeline-creator';
|
|
4
4
|
import { argName2IdxMap, ARG, ARG_COL_IDX, CORRECTION_FACTOR, DEFAULT_CORRECTION, LOOP_MIN_COUNT } from './constants';
|
|
5
|
-
/** Pipeline creator for cyclic model
|
|
5
|
+
/** Pipeline creator for cyclic model
|
|
6
|
+
* @example
|
|
7
|
+
* // This example shows how to apply pipelines and cyclic models.
|
|
8
|
+
* // This approach can be used for in-webworkers analysis of models.
|
|
9
|
+
* // Here, we consider pharmacokinetic-pharmacodynamic (PK-PD) simulation: two-compartment model.
|
|
10
|
+
* import * as DGL from 'diff-grok';
|
|
11
|
+
*
|
|
12
|
+
* // 1. Model specification
|
|
13
|
+
* const model = `#name: PK-PD
|
|
14
|
+
* #tags: model
|
|
15
|
+
* #description: Pharmacokinetic-pharmacodynamic (PK-PD) simulation: two-compartment model
|
|
16
|
+
* #equations:
|
|
17
|
+
* d(depot)/dt = -KA * depot
|
|
18
|
+
* d(centr)/dt = KA * depot - CL * C2 - Q * C2 + Q * C3
|
|
19
|
+
* d(peri)/dt = Q * C2 - Q * C3
|
|
20
|
+
* d(eff)/dt = Kin - Kout * (1 - C2/(EC50 + C2)) * eff
|
|
21
|
+
*
|
|
22
|
+
* #expressions:
|
|
23
|
+
* C2 = centr / V2
|
|
24
|
+
* C3 = peri / V3
|
|
25
|
+
*
|
|
26
|
+
* #loop:
|
|
27
|
+
* _count = 10 {caption: count; category: Dosing; min: 1; max: 20} [Number of doses]
|
|
28
|
+
* depot += dose
|
|
29
|
+
*
|
|
30
|
+
* #argument: t
|
|
31
|
+
* _t0 = 0 {units: h; caption: begin; category: Dosing; min: 0; max: 1} [Begin of dosing interval]
|
|
32
|
+
* _t1 = 12 {units: h; caption: end; category: Dosing; min: 5; max: 15} [End of dosing interval]
|
|
33
|
+
* _h = 1 {units: h; caption: step; category: Dosing; min: 0.01; max: 0.1} [Time step of simulation]
|
|
34
|
+
*
|
|
35
|
+
* #inits:
|
|
36
|
+
* depot = 0 {category: Initial values}
|
|
37
|
+
* centr = 0 {category: Initial values} [Central]
|
|
38
|
+
* peri = 0 {category: Initial values} [Peripheral]
|
|
39
|
+
* eff = 0.2 {category: Initial values} [Effective compartment rate]
|
|
40
|
+
*
|
|
41
|
+
* #parameters:
|
|
42
|
+
* dose = 1e4 {category: Dosing; min: 1e3; max: 2e4; step: 1e3} [Dosage]
|
|
43
|
+
* KA = 0.3 {caption: rate constant; category: Parameters; min: 0.1; max: 1}
|
|
44
|
+
* CL = 2 {caption: clearance; category: Parameters; min: 1; max: 5}
|
|
45
|
+
* V2 = 4 {caption: central volume; category: Parameters; min: 1; max: 10} [Central compartment volume]
|
|
46
|
+
* Q = 1 {caption: inter rate; category: Parameters; min: 0.1; max: 1} [Intercompartmental rate]
|
|
47
|
+
* V3 = 30 {caption: peri volume; category: Parameters; min: 20; max: 40} [Peripheral compartment volume]
|
|
48
|
+
* EC50 = 8 {caption: effect; category: Parameters; min: 1; max: 10}
|
|
49
|
+
* Kin = 0.2 {caption: Kin; category: Parameters; min: 0.1; max: 0.5} [The first-order production constant]
|
|
50
|
+
* Kout = 0.2 {caption: Kout; category: Parameters; min: 0.1; max: 0.5} [The first-order dissipation rate constant]
|
|
51
|
+
*
|
|
52
|
+
* #tolerance: 1e-9`;
|
|
53
|
+
*
|
|
54
|
+
* // 2. Generate IVP-objects: for the main thread & for computations in webworkers
|
|
55
|
+
* const ivp = DGL.getIVP(model);
|
|
56
|
+
* const ivpWW = DGL.getIvp2WebWorker(ivp);
|
|
57
|
+
*
|
|
58
|
+
* // 3. Perform computations
|
|
59
|
+
* try {
|
|
60
|
+
* // 3.1) Extract names of outputs
|
|
61
|
+
* const outputNames = DGL.getOutputNames(ivp);
|
|
62
|
+
* const outSize = outputNames.length;
|
|
63
|
+
*
|
|
64
|
+
* // 3.2) Set model inputs
|
|
65
|
+
* const inputs = {
|
|
66
|
+
* _count: 10,
|
|
67
|
+
* _t0: 0,
|
|
68
|
+
* _t1: 16,
|
|
69
|
+
* _h: 1,
|
|
70
|
+
* depot: 0,
|
|
71
|
+
* centr: 0,
|
|
72
|
+
* peri: 0,
|
|
73
|
+
* eff: 0.2,
|
|
74
|
+
* dose: 10000,
|
|
75
|
+
* KA: 0.63,
|
|
76
|
+
* CL: 3.2,
|
|
77
|
+
* V2: 6.58,
|
|
78
|
+
* Q: 0.622,
|
|
79
|
+
* V3: 35.6,
|
|
80
|
+
* EC50: 5.41,
|
|
81
|
+
* Kin: 0.272,
|
|
82
|
+
* Kout: 0.276,
|
|
83
|
+
* };
|
|
84
|
+
*
|
|
85
|
+
* const inputVector = DGL.getInputVector(inputs, ivp);
|
|
86
|
+
*
|
|
87
|
+
* // 3.3) Create a pipeline
|
|
88
|
+
* const creator = DGL.getPipelineCreator(ivp);
|
|
89
|
+
* const pipeline = creator.getPipeline(inputVector);
|
|
90
|
+
*
|
|
91
|
+
* // 3.4) Apply pipeline to perform computations
|
|
92
|
+
* const solution = DGL.applyPipeline(pipeline, ivpWW, inputVector);
|
|
93
|
+
*
|
|
94
|
+
* // 3.5) Print results
|
|
95
|
+
*
|
|
96
|
+
* // 3.5.1) Table header
|
|
97
|
+
* let line = ' ';
|
|
98
|
+
* outputNames.forEach((name) => line += name + ' ');
|
|
99
|
+
* console.log(line);
|
|
100
|
+
*
|
|
101
|
+
* // 3.5.2) Table with solution
|
|
102
|
+
* const length = solution[0].length;
|
|
103
|
+
* for (let i = 0; i < length; ++i) {
|
|
104
|
+
* line = '';
|
|
105
|
+
*
|
|
106
|
+
* for (let j = 0; j < outSize; ++j)
|
|
107
|
+
* line += solution[j][i].toFixed(8) + ' ';
|
|
108
|
+
*
|
|
109
|
+
* console.log(line);
|
|
110
|
+
* }
|
|
111
|
+
* } catch (err) {
|
|
112
|
+
* console.log('Simulation failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
113
|
+
* } */
|
|
6
114
|
export class CyclicModelPipelineCreator extends PipelineCreator {
|
|
115
|
+
/**
|
|
116
|
+
* @param ivp - initial value problem to be solved
|
|
117
|
+
*/
|
|
7
118
|
constructor(ivp) {
|
|
8
119
|
super(ivp);
|
|
9
120
|
if (ivp.loop === null)
|
|
10
121
|
throw new Error('Incorrect use of CyclicModelPipelineCreator: model has no loop');
|
|
11
122
|
}
|
|
12
|
-
/** Return computations pipeline
|
|
123
|
+
/** Return computations pipeline corresponding to the given input vector
|
|
124
|
+
* @param inputs - input vector of the model
|
|
125
|
+
*/
|
|
13
126
|
getPipeline(inputs) {
|
|
14
127
|
if (this.ivp.loop === null)
|
|
15
128
|
throw new Error('Incorrect use of CyclicModelPipelineCreator: model has no loop');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loops-pipeline-creator.js","sourceRoot":"","sources":["loops-pipeline-creator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loops-pipeline-creator.js","sourceRoot":"","sources":["loops-pipeline-creator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
1
2
|
import {IVP} from '../scripting-tools';
|
|
2
3
|
import {MATH_CONSTS, MATH_FUNCS, POW_IDX} from '../scripting-tools/scripting-tools';
|
|
3
4
|
import {getOutputCode} from './output';
|
|
@@ -6,8 +7,119 @@ import {PipelineCreator} from './pipeline-creator';
|
|
|
6
7
|
|
|
7
8
|
import {argName2IdxMap, ARG, ARG_COL_IDX, CORRECTION_FACTOR, DEFAULT_CORRECTION, LOOP_MIN_COUNT} from './constants';
|
|
8
9
|
|
|
9
|
-
/** Pipeline creator for cyclic model
|
|
10
|
+
/** Pipeline creator for cyclic model
|
|
11
|
+
* @example
|
|
12
|
+
* // This example shows how to apply pipelines and cyclic models.
|
|
13
|
+
* // This approach can be used for in-webworkers analysis of models.
|
|
14
|
+
* // Here, we consider pharmacokinetic-pharmacodynamic (PK-PD) simulation: two-compartment model.
|
|
15
|
+
* import * as DGL from 'diff-grok';
|
|
16
|
+
*
|
|
17
|
+
* // 1. Model specification
|
|
18
|
+
* const model = `#name: PK-PD
|
|
19
|
+
* #tags: model
|
|
20
|
+
* #description: Pharmacokinetic-pharmacodynamic (PK-PD) simulation: two-compartment model
|
|
21
|
+
* #equations:
|
|
22
|
+
* d(depot)/dt = -KA * depot
|
|
23
|
+
* d(centr)/dt = KA * depot - CL * C2 - Q * C2 + Q * C3
|
|
24
|
+
* d(peri)/dt = Q * C2 - Q * C3
|
|
25
|
+
* d(eff)/dt = Kin - Kout * (1 - C2/(EC50 + C2)) * eff
|
|
26
|
+
*
|
|
27
|
+
* #expressions:
|
|
28
|
+
* C2 = centr / V2
|
|
29
|
+
* C3 = peri / V3
|
|
30
|
+
*
|
|
31
|
+
* #loop:
|
|
32
|
+
* _count = 10 {caption: count; category: Dosing; min: 1; max: 20} [Number of doses]
|
|
33
|
+
* depot += dose
|
|
34
|
+
*
|
|
35
|
+
* #argument: t
|
|
36
|
+
* _t0 = 0 {units: h; caption: begin; category: Dosing; min: 0; max: 1} [Begin of dosing interval]
|
|
37
|
+
* _t1 = 12 {units: h; caption: end; category: Dosing; min: 5; max: 15} [End of dosing interval]
|
|
38
|
+
* _h = 1 {units: h; caption: step; category: Dosing; min: 0.01; max: 0.1} [Time step of simulation]
|
|
39
|
+
*
|
|
40
|
+
* #inits:
|
|
41
|
+
* depot = 0 {category: Initial values}
|
|
42
|
+
* centr = 0 {category: Initial values} [Central]
|
|
43
|
+
* peri = 0 {category: Initial values} [Peripheral]
|
|
44
|
+
* eff = 0.2 {category: Initial values} [Effective compartment rate]
|
|
45
|
+
*
|
|
46
|
+
* #parameters:
|
|
47
|
+
* dose = 1e4 {category: Dosing; min: 1e3; max: 2e4; step: 1e3} [Dosage]
|
|
48
|
+
* KA = 0.3 {caption: rate constant; category: Parameters; min: 0.1; max: 1}
|
|
49
|
+
* CL = 2 {caption: clearance; category: Parameters; min: 1; max: 5}
|
|
50
|
+
* V2 = 4 {caption: central volume; category: Parameters; min: 1; max: 10} [Central compartment volume]
|
|
51
|
+
* Q = 1 {caption: inter rate; category: Parameters; min: 0.1; max: 1} [Intercompartmental rate]
|
|
52
|
+
* V3 = 30 {caption: peri volume; category: Parameters; min: 20; max: 40} [Peripheral compartment volume]
|
|
53
|
+
* EC50 = 8 {caption: effect; category: Parameters; min: 1; max: 10}
|
|
54
|
+
* Kin = 0.2 {caption: Kin; category: Parameters; min: 0.1; max: 0.5} [The first-order production constant]
|
|
55
|
+
* Kout = 0.2 {caption: Kout; category: Parameters; min: 0.1; max: 0.5} [The first-order dissipation rate constant]
|
|
56
|
+
*
|
|
57
|
+
* #tolerance: 1e-9`;
|
|
58
|
+
*
|
|
59
|
+
* // 2. Generate IVP-objects: for the main thread & for computations in webworkers
|
|
60
|
+
* const ivp = DGL.getIVP(model);
|
|
61
|
+
* const ivpWW = DGL.getIvp2WebWorker(ivp);
|
|
62
|
+
*
|
|
63
|
+
* // 3. Perform computations
|
|
64
|
+
* try {
|
|
65
|
+
* // 3.1) Extract names of outputs
|
|
66
|
+
* const outputNames = DGL.getOutputNames(ivp);
|
|
67
|
+
* const outSize = outputNames.length;
|
|
68
|
+
*
|
|
69
|
+
* // 3.2) Set model inputs
|
|
70
|
+
* const inputs = {
|
|
71
|
+
* _count: 10,
|
|
72
|
+
* _t0: 0,
|
|
73
|
+
* _t1: 16,
|
|
74
|
+
* _h: 1,
|
|
75
|
+
* depot: 0,
|
|
76
|
+
* centr: 0,
|
|
77
|
+
* peri: 0,
|
|
78
|
+
* eff: 0.2,
|
|
79
|
+
* dose: 10000,
|
|
80
|
+
* KA: 0.63,
|
|
81
|
+
* CL: 3.2,
|
|
82
|
+
* V2: 6.58,
|
|
83
|
+
* Q: 0.622,
|
|
84
|
+
* V3: 35.6,
|
|
85
|
+
* EC50: 5.41,
|
|
86
|
+
* Kin: 0.272,
|
|
87
|
+
* Kout: 0.276,
|
|
88
|
+
* };
|
|
89
|
+
*
|
|
90
|
+
* const inputVector = DGL.getInputVector(inputs, ivp);
|
|
91
|
+
*
|
|
92
|
+
* // 3.3) Create a pipeline
|
|
93
|
+
* const creator = DGL.getPipelineCreator(ivp);
|
|
94
|
+
* const pipeline = creator.getPipeline(inputVector);
|
|
95
|
+
*
|
|
96
|
+
* // 3.4) Apply pipeline to perform computations
|
|
97
|
+
* const solution = DGL.applyPipeline(pipeline, ivpWW, inputVector);
|
|
98
|
+
*
|
|
99
|
+
* // 3.5) Print results
|
|
100
|
+
*
|
|
101
|
+
* // 3.5.1) Table header
|
|
102
|
+
* let line = ' ';
|
|
103
|
+
* outputNames.forEach((name) => line += name + ' ');
|
|
104
|
+
* console.log(line);
|
|
105
|
+
*
|
|
106
|
+
* // 3.5.2) Table with solution
|
|
107
|
+
* const length = solution[0].length;
|
|
108
|
+
* for (let i = 0; i < length; ++i) {
|
|
109
|
+
* line = '';
|
|
110
|
+
*
|
|
111
|
+
* for (let j = 0; j < outSize; ++j)
|
|
112
|
+
* line += solution[j][i].toFixed(8) + ' ';
|
|
113
|
+
*
|
|
114
|
+
* console.log(line);
|
|
115
|
+
* }
|
|
116
|
+
* } catch (err) {
|
|
117
|
+
* console.log('Simulation failed: ', err instanceof Error ? err.message : 'Unknown problem!');
|
|
118
|
+
* } */
|
|
10
119
|
export class CyclicModelPipelineCreator extends PipelineCreator {
|
|
120
|
+
/**
|
|
121
|
+
* @param ivp - initial value problem to be solved
|
|
122
|
+
*/
|
|
11
123
|
constructor(ivp: IVP) {
|
|
12
124
|
super(ivp);
|
|
13
125
|
|
|
@@ -15,7 +127,9 @@ export class CyclicModelPipelineCreator extends PipelineCreator {
|
|
|
15
127
|
throw new Error('Incorrect use of CyclicModelPipelineCreator: model has no loop');
|
|
16
128
|
}
|
|
17
129
|
|
|
18
|
-
/** Return computations pipeline
|
|
130
|
+
/** Return computations pipeline corresponding to the given input vector
|
|
131
|
+
* @param inputs - input vector of the model
|
|
132
|
+
*/
|
|
19
133
|
public getPipeline(inputs: Float64Array): Pipeline {
|
|
20
134
|
if (this.ivp.loop === null)
|
|
21
135
|
throw new Error('Incorrect use of CyclicModelPipelineCreator: model has no loop');
|
package/src/pipeline/output.js
CHANGED
|
@@ -89,7 +89,9 @@ function getOutputWithExprs(ivp) {
|
|
|
89
89
|
lines.push('return solution;');
|
|
90
90
|
return lines.join('\n');
|
|
91
91
|
} // getOutputWithExprs
|
|
92
|
-
/** Return a code for output extraction
|
|
92
|
+
/** Return a code for output extraction
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
93
95
|
export function getOutputCode(ivp) {
|
|
94
96
|
const outputs = ivp.outputs;
|
|
95
97
|
if (outputs === null)
|
|
@@ -130,7 +132,10 @@ function checkApplicability(ivp) {
|
|
|
130
132
|
throw new Error('Non-supported model: expressions in output and updates');
|
|
131
133
|
}
|
|
132
134
|
} // checkApplicability
|
|
133
|
-
/** Return
|
|
135
|
+
/** Return names of the model outputs
|
|
136
|
+
* @param ivp - initial value problem
|
|
137
|
+
* @returns an array of names of the model outputs
|
|
138
|
+
*/
|
|
134
139
|
export function getOutputNames(ivp) {
|
|
135
140
|
const outputs = ivp.outputs;
|
|
136
141
|
if (outputs === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["output.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["output.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,OAAO,EAAM,WAAW,EAAE,OAAO,EAAE,UAAU,EAAC,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB,sDAAsD;AACtD,SAAS,gBAAgB,CAAC,GAAQ;IAChC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,OAAO,KAAK,IAAI;QAClB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAE7E,IAAI,cAAc,CAAC,GAAG,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAGhE,MAAM,KAAK,GAAa,CAAC,sBAAsB,CAAC,CAAC;IAEjD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QAC1B,IAAI,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI;YACvB,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;aAC3C,CAAC;YACJ,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEjD,IAAI,GAAG,GAAG,CAAC,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,8BAA8B,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC,mBAAmB;AAErB,mDAAmD;AACnD,SAAS,kBAAkB,CAAC,GAAQ;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,OAAO,KAAK,IAAI;QAClB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAExB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAG/D,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAa,CAAC,sBAAsB,CAAC,CAAC;IAEjD,kBAAkB;IAClB,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAChC,IAAI,GAAG,KAAK,OAAO;YACjB,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,GAAG,CAAC,kBAAkB,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;YAE5E,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzG,kBAAkB;IAClB,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;QACrB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAErF,mBAAmB;IACnB,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QACxD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YAC7B,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,mBAAmB,GAAG,IAAI,CAAC,CAAC;YACpD,EAAE,GAAG,CAAC;QACR,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;IAEzC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IAE5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QACxB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;QAE/B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,iCAAiC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,wBAAwB,CAAC,CAAC;IACjD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,mBAAmB,KAAK,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAC7F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;QAEnC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,IAAI,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEhB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QAC1B,IAAI,IAAI,KAAK,OAAO;YAClB,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;aAC3C,CAAC;YACJ,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEjD,IAAI,GAAG,GAAG,CAAC,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,8BAA8B,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;iBACpD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC,qBAAqB;AAEvB;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAQ;IACpC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,OAAO,KAAK,IAAI;QAClB,OAAO,IAAI,CAAC;IAEd,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,cAAc,CAAC,GAAG,CAAC;QACrB,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;;QAE/B,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC,gBAAgB;AAElB,wDAAwD;AACxD,SAAS,cAAc,CAAC,GAAQ;IAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,OAAO,KAAK,IAAI;QAClB,OAAO,KAAK,CAAC;IAEf,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,KAAK,KAAK,IAAI;QAChB,OAAO,KAAK,CAAC;IAEf,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,KAAJ,IAAI,GAAK,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;IAEvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2CAA2C;AAC3C,SAAS,kBAAkB,CAAC,GAAQ;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAE5B,IAAI,OAAO,KAAK,IAAI;QAClB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,KAAK,KAAK,IAAI;QAChB,OAAO;IAET,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,cAAc,CAAC,GAAG,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAExE,OAAO;IACT,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACzB,IAAI,cAAc,CAAC,GAAG,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC,qBAAqB;AAEvB;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAQ;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,IAAI,OAAO,KAAK,IAAI;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAS,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACzB,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;QAC5B,EAAE,GAAG,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,iBAAiB"}
|
package/src/pipeline/output.ts
CHANGED
|
@@ -123,7 +123,9 @@ function getOutputWithExprs(ivp: IVP): string {
|
|
|
123
123
|
return lines.join('\n');
|
|
124
124
|
} // getOutputWithExprs
|
|
125
125
|
|
|
126
|
-
/** Return a code for output extraction
|
|
126
|
+
/** Return a code for output extraction
|
|
127
|
+
* @internal
|
|
128
|
+
*/
|
|
127
129
|
export function getOutputCode(ivp: IVP): string | null {
|
|
128
130
|
const outputs = ivp.outputs;
|
|
129
131
|
if (outputs === null)
|
|
@@ -178,7 +180,10 @@ function checkApplicability(ivp: IVP): void {
|
|
|
178
180
|
}
|
|
179
181
|
} // checkApplicability
|
|
180
182
|
|
|
181
|
-
/** Return
|
|
183
|
+
/** Return names of the model outputs
|
|
184
|
+
* @param ivp - initial value problem
|
|
185
|
+
* @returns an array of names of the model outputs
|
|
186
|
+
*/
|
|
182
187
|
export function getOutputNames(ivp: IVP): string[] {
|
|
183
188
|
const outputs = ivp.outputs;
|
|
184
189
|
if (outputs === null)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline-creator.js","sourceRoot":"","sources":["pipeline-creator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipeline-creator.js","sourceRoot":"","sources":["pipeline-creator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,UAAU,CAAC;AAGxC,0DAA0D;AAC1D,MAAM,OAAgB,eAAe;IAInC,YAAY,GAAQ;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAAA,CAAC;CAMH"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
1
2
|
import {IVP} from '../scripting-tools';
|
|
2
3
|
import {getOutputNames} from './output';
|
|
3
4
|
import {Pipeline} from './pipeline';
|
|
@@ -12,5 +13,8 @@ export abstract class PipelineCreator {
|
|
|
12
13
|
this.outputNames = getOutputNames(ivp);
|
|
13
14
|
};
|
|
14
15
|
|
|
16
|
+
/** Return computational pipeline corresponding to the given model input
|
|
17
|
+
* @param inputs - a vector of model inputs
|
|
18
|
+
*/
|
|
15
19
|
public abstract getPipeline(inputs: Float64Array): Pipeline;
|
|
16
20
|
}
|