diff-grok 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/.claude/settings.local.json +11 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  5. package/.github/workflows/deploy-docs.yml +15 -0
  6. package/CLAUDE.md +98 -0
  7. package/CONTRIBUTING.md +74 -0
  8. package/README.MD +272 -18
  9. package/images/E5.png +0 -0
  10. package/images/HIRES.png +0 -0
  11. package/images/OREGO.png +0 -0
  12. package/images/POLL-full.png +0 -0
  13. package/images/POLL.png +0 -0
  14. package/images/ROBER.png +0 -0
  15. package/images/VDP0L.png +0 -0
  16. package/images/VDPOL.png +0 -0
  17. package/index.js +2 -2
  18. package/index.js.map +1 -1
  19. package/index.ts +7 -5
  20. package/jest.config.js +1 -0
  21. package/package.json +2 -1
  22. package/src/examples/bioreactor.js +125 -0
  23. package/src/examples/bioreactor.js.map +1 -0
  24. package/src/examples/bioreactor.ts +132 -0
  25. package/src/examples/check-methods.js +23 -9
  26. package/src/examples/check-methods.js.map +1 -1
  27. package/src/examples/check-methods.ts +28 -9
  28. package/src/examples/corr-probs.js +3 -1
  29. package/src/examples/corr-probs.js.map +1 -1
  30. package/src/examples/corr-probs.ts +7 -3
  31. package/src/examples/cyclic-model.js +3 -1
  32. package/src/examples/cyclic-model.js.map +1 -1
  33. package/src/examples/cyclic-model.ts +3 -1
  34. package/src/examples/e5.js +6 -0
  35. package/src/examples/e5.js.map +1 -1
  36. package/src/examples/e5.ts +7 -0
  37. package/src/examples/hires.js +10 -0
  38. package/src/examples/hires.js.map +1 -1
  39. package/src/examples/hires.ts +11 -0
  40. package/src/examples/index.js +21 -7
  41. package/src/examples/index.js.map +1 -1
  42. package/src/examples/index.ts +23 -7
  43. package/src/examples/orego.js +5 -0
  44. package/src/examples/orego.js.map +1 -1
  45. package/src/examples/orego.ts +6 -0
  46. package/src/examples/pollution.js +22 -0
  47. package/src/examples/pollution.js.map +1 -1
  48. package/src/examples/pollution.ts +23 -0
  49. package/src/examples/print-benchmark.js +581 -0
  50. package/src/examples/print-benchmark.js.map +1 -0
  51. package/src/examples/print-benchmark.ts +594 -0
  52. package/src/examples/robertson.js +6 -1
  53. package/src/examples/robertson.js.map +1 -1
  54. package/src/examples/robertson.ts +7 -1
  55. package/src/examples/scripting.js +1 -1
  56. package/src/examples/scripting.js.map +1 -1
  57. package/src/examples/scripting.ts +1 -1
  58. package/src/examples/vdpol.js +4 -0
  59. package/src/examples/vdpol.js.map +1 -1
  60. package/src/examples/vdpol.ts +5 -0
  61. package/src/pipeline/basic-pipeline-creator.js +96 -1
  62. package/src/pipeline/basic-pipeline-creator.js.map +1 -1
  63. package/src/pipeline/basic-pipeline-creator.ts +97 -1
  64. package/src/pipeline/loops-pipeline-creator.js +115 -2
  65. package/src/pipeline/loops-pipeline-creator.js.map +1 -1
  66. package/src/pipeline/loops-pipeline-creator.ts +116 -2
  67. package/src/pipeline/output.js +7 -2
  68. package/src/pipeline/output.js.map +1 -1
  69. package/src/pipeline/output.ts +7 -2
  70. package/src/pipeline/pipeline-creator.js.map +1 -1
  71. package/src/pipeline/pipeline-creator.ts +4 -0
  72. package/src/pipeline/pipeline.js +193 -2
  73. package/src/pipeline/pipeline.js.map +1 -1
  74. package/src/pipeline/pipeline.ts +206 -4
  75. package/src/pipeline/updates-pipeline-creator.js +130 -2
  76. package/src/pipeline/updates-pipeline-creator.js.map +1 -1
  77. package/src/pipeline/updates-pipeline-creator.ts +131 -2
  78. package/src/scripting-tools/constants.js +18 -4
  79. package/src/scripting-tools/constants.js.map +1 -1
  80. package/src/scripting-tools/constants.ts +22 -4
  81. package/src/scripting-tools/index.js.map +1 -1
  82. package/src/scripting-tools/index.ts +3 -2
  83. package/src/scripting-tools/model-error.js +3 -1
  84. package/src/scripting-tools/model-error.js.map +1 -1
  85. package/src/scripting-tools/model-error.ts +3 -1
  86. package/src/scripting-tools/scripting-tools.js +139 -9
  87. package/src/scripting-tools/scripting-tools.js.map +1 -1
  88. package/src/scripting-tools/scripting-tools.ts +228 -21
  89. package/src/solver-tools/ab4-method.js +332 -0
  90. package/src/solver-tools/ab4-method.js.map +1 -0
  91. package/src/solver-tools/ab4-method.ts +395 -0
  92. package/src/solver-tools/ab5-method.js +334 -0
  93. package/src/solver-tools/ab5-method.js.map +1 -0
  94. package/src/solver-tools/ab5-method.ts +397 -0
  95. package/src/solver-tools/callbacks/callback-base.js +2 -0
  96. package/src/solver-tools/callbacks/callback-base.js.map +1 -1
  97. package/src/solver-tools/callbacks/callback-base.ts +4 -0
  98. package/src/solver-tools/callbacks/callback-tools.js +3 -1
  99. package/src/solver-tools/callbacks/callback-tools.js.map +1 -1
  100. package/src/solver-tools/callbacks/callback-tools.ts +3 -1
  101. package/src/solver-tools/callbacks/iter-checker-callback.js +4 -0
  102. package/src/solver-tools/callbacks/iter-checker-callback.js.map +1 -1
  103. package/src/solver-tools/callbacks/iter-checker-callback.ts +4 -0
  104. package/src/solver-tools/callbacks/time-checker-callback.js +4 -0
  105. package/src/solver-tools/callbacks/time-checker-callback.js.map +1 -1
  106. package/src/solver-tools/callbacks/time-checker-callback.ts +4 -0
  107. package/src/solver-tools/index.js +9 -0
  108. package/src/solver-tools/index.js.map +1 -1
  109. package/src/solver-tools/index.ts +9 -0
  110. package/src/solver-tools/lsoda/blas.js +246 -0
  111. package/src/solver-tools/lsoda/blas.js.map +1 -0
  112. package/src/solver-tools/lsoda/blas.ts +267 -0
  113. package/src/solver-tools/lsoda/cfode.js +73 -0
  114. package/src/solver-tools/lsoda/cfode.js.map +1 -0
  115. package/src/solver-tools/lsoda/cfode.ts +83 -0
  116. package/src/solver-tools/lsoda/common.js +94 -0
  117. package/src/solver-tools/lsoda/common.js.map +1 -0
  118. package/src/solver-tools/lsoda/common.ts +135 -0
  119. package/src/solver-tools/lsoda/corfailure.js +25 -0
  120. package/src/solver-tools/lsoda/corfailure.js.map +1 -0
  121. package/src/solver-tools/lsoda/corfailure.ts +30 -0
  122. package/src/solver-tools/lsoda/correction.js +101 -0
  123. package/src/solver-tools/lsoda/correction.js.map +1 -0
  124. package/src/solver-tools/lsoda/correction.ts +119 -0
  125. package/src/solver-tools/lsoda/dense.js +110 -0
  126. package/src/solver-tools/lsoda/dense.js.map +1 -0
  127. package/src/solver-tools/lsoda/dense.ts +129 -0
  128. package/src/solver-tools/lsoda/index.js +4 -0
  129. package/src/solver-tools/lsoda/index.js.map +1 -0
  130. package/src/solver-tools/lsoda/index.ts +5 -0
  131. package/src/solver-tools/lsoda/intdy.js +43 -0
  132. package/src/solver-tools/lsoda/intdy.js.map +1 -0
  133. package/src/solver-tools/lsoda/intdy.ts +50 -0
  134. package/src/solver-tools/lsoda/lsoda.js +567 -0
  135. package/src/solver-tools/lsoda/lsoda.js.map +1 -0
  136. package/src/solver-tools/lsoda/lsoda.ts +632 -0
  137. package/src/solver-tools/lsoda/methodswitch.js +97 -0
  138. package/src/solver-tools/lsoda/methodswitch.js.map +1 -0
  139. package/src/solver-tools/lsoda/methodswitch.ts +107 -0
  140. package/src/solver-tools/lsoda/orderswitch.js +86 -0
  141. package/src/solver-tools/lsoda/orderswitch.js.map +1 -0
  142. package/src/solver-tools/lsoda/orderswitch.ts +95 -0
  143. package/src/solver-tools/lsoda/prja.js +43 -0
  144. package/src/solver-tools/lsoda/prja.js.map +1 -0
  145. package/src/solver-tools/lsoda/prja.ts +49 -0
  146. package/src/solver-tools/lsoda/scaleh.js +30 -0
  147. package/src/solver-tools/lsoda/scaleh.js.map +1 -0
  148. package/src/solver-tools/lsoda/scaleh.ts +33 -0
  149. package/src/solver-tools/lsoda/solsy.js +14 -0
  150. package/src/solver-tools/lsoda/solsy.js.map +1 -0
  151. package/src/solver-tools/lsoda/solsy.ts +18 -0
  152. package/src/solver-tools/lsoda/stoda.js +259 -0
  153. package/src/solver-tools/lsoda/stoda.js.map +1 -0
  154. package/src/solver-tools/lsoda/stoda.ts +286 -0
  155. package/src/solver-tools/lsoda-method.js +120 -0
  156. package/src/solver-tools/lsoda-method.js.map +1 -0
  157. package/src/solver-tools/lsoda-method.ts +136 -0
  158. package/src/solver-tools/mrt-method.js +121 -19
  159. package/src/solver-tools/mrt-method.js.map +1 -1
  160. package/src/solver-tools/mrt-method.ts +151 -22
  161. package/src/solver-tools/rk3-method.js +210 -0
  162. package/src/solver-tools/rk3-method.js.map +1 -0
  163. package/src/solver-tools/rk3-method.ts +257 -0
  164. package/src/solver-tools/rk4-method.js +236 -0
  165. package/src/solver-tools/rk4-method.js.map +1 -0
  166. package/src/solver-tools/rk4-method.ts +286 -0
  167. package/src/solver-tools/rkdp-method.js +247 -0
  168. package/src/solver-tools/rkdp-method.js.map +1 -0
  169. package/src/solver-tools/rkdp-method.ts +300 -0
  170. package/src/solver-tools/ros34prw-method.js +40 -2
  171. package/src/solver-tools/ros34prw-method.js.map +1 -1
  172. package/src/solver-tools/ros34prw-method.ts +40 -2
  173. package/src/solver-tools/ros3prw-method.js +40 -2
  174. package/src/solver-tools/ros3prw-method.js.map +1 -1
  175. package/src/solver-tools/ros3prw-method.ts +40 -2
  176. package/src/solver-tools/solver-defs.js +15 -3
  177. package/src/solver-tools/solver-defs.js.map +1 -1
  178. package/src/solver-tools/solver-defs.ts +91 -7
  179. package/src/tests/correctness.test.js +6 -4
  180. package/src/tests/correctness.test.js.map +1 -1
  181. package/src/tests/correctness.test.ts +6 -4
  182. package/src/tests/lsoda-lib-correctness.test.js +223 -0
  183. package/src/tests/lsoda-lib-correctness.test.js.map +1 -0
  184. package/src/tests/lsoda-lib-correctness.test.ts +283 -0
  185. package/src/tests/lsoda-lib-performance.test.js +95 -0
  186. package/src/tests/lsoda-lib-performance.test.js.map +1 -0
  187. package/src/tests/lsoda-lib-performance.test.ts +126 -0
  188. package/src/tests/performance.test.js +10 -8
  189. package/src/tests/performance.test.js.map +1 -1
  190. package/src/tests/performance.test.ts +10 -8
  191. package/src/tests/test-defs.js +14 -1
  192. package/src/tests/test-defs.js.map +1 -1
  193. package/src/tests/test-defs.ts +15 -1
  194. package/src/worker-tools/scripting.js +95 -1
  195. package/src/worker-tools/scripting.js.map +1 -1
  196. package/src/worker-tools/scripting.ts +104 -2
  197. package/src/worker-tools/solving.js +18 -2
  198. package/src/worker-tools/solving.js.map +1 -1
  199. package/src/worker-tools/solving.ts +25 -2
  200. 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 without loops & updates */
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":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAEnD,yDAAyD;AACzD,MAAM,OAAO,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,GAAQ;QAClB,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAEM,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
+ {"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 without loops & updates */
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":"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"}
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');
@@ -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 a code for output extraction */
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":"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"}
@@ -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 a code for output extraction */
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":"AACA,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;CAGH"}
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
  }