myokit 1.35.4__py3-none-any.whl → 1.36.1__py3-none-any.whl
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.
- myokit/__init__.py +5 -3
- myokit/__main__.py +9 -159
- myokit/_config.py +2 -2
- myokit/_expressions.py +6 -6
- myokit/_model_api.py +11 -7
- myokit/_myokit_version.py +1 -1
- myokit/_protocol.py +4 -0
- myokit/_sim/__init__.py +1 -0
- myokit/_sim/cvodessim.c +321 -177
- myokit/_sim/cvodessim.py +107 -43
- myokit/_sim/mcl.h +54 -0
- myokit/formats/__init__.py +63 -12
- myokit/formats/ansic/__init__.py +2 -1
- myokit/formats/ansic/_ewriter.py +159 -40
- myokit/formats/cpp/_ewriter.py +12 -1
- myokit/formats/cuda/_ewriter.py +15 -51
- myokit/formats/easyml/_ewriter.py +26 -54
- myokit/formats/heka/_patchmaster.py +15 -3
- myokit/formats/latex/_ewriter.py +103 -88
- myokit/formats/latex/_exporter.py +1 -1
- myokit/formats/mathml/_ewriter.py +2 -2
- myokit/formats/matlab/_ewriter.py +50 -28
- myokit/formats/opencl/_ewriter.py +61 -78
- myokit/formats/python/_ewriter.py +81 -50
- myokit/formats/stan/_ewriter.py +29 -37
- myokit/gui/source.py +1 -1
- myokit/lib/hh.py +3 -0
- myokit/lib/markov.py +6 -0
- myokit/tests/__init__.py +70 -0
- myokit/tests/data/decker.model +59 -59
- myokit/tests/test_formats.py +115 -7
- myokit/tests/test_formats_ansic.py +344 -0
- myokit/tests/test_formats_axon.py +17 -0
- myokit/tests/test_formats_cpp.py +97 -0
- myokit/tests/test_formats_cuda.py +226 -0
- myokit/tests/test_formats_easyml.py +169 -152
- myokit/tests/{test_formats_exporters.py → test_formats_exporters_run.py} +1 -69
- myokit/tests/test_formats_html.py +1 -3
- myokit/tests/test_formats_latex.py +211 -0
- myokit/tests/test_formats_mathml_content.py +13 -0
- myokit/tests/test_formats_mathml_presentation.py +54 -42
- myokit/tests/test_formats_matlab.py +218 -0
- myokit/tests/test_formats_opencl.py +206 -380
- myokit/tests/test_formats_python.py +557 -0
- myokit/tests/test_formats_stan.py +175 -0
- myokit/tests/test_formats_sympy.py +9 -2
- myokit/tests/test_lib_hh.py +36 -0
- myokit/tests/test_lib_plots.py +0 -16
- myokit/tests/test_model.py +21 -1
- myokit/tests/test_simulation_cvodes.py +137 -56
- myokit/tools.py +3 -2
- {myokit-1.35.4.dist-info → myokit-1.36.1.dist-info}/LICENSE.txt +1 -1
- {myokit-1.35.4.dist-info → myokit-1.36.1.dist-info}/METADATA +19 -8
- {myokit-1.35.4.dist-info → myokit-1.36.1.dist-info}/RECORD +57 -52
- {myokit-1.35.4.dist-info → myokit-1.36.1.dist-info}/WHEEL +1 -1
- myokit/tests/test_formats_expression_writers.py +0 -1281
- myokit/tests/test_formats_importers.py +0 -53
- {myokit-1.35.4.dist-info → myokit-1.36.1.dist-info}/entry_points.txt +0 -0
- {myokit-1.35.4.dist-info → myokit-1.36.1.dist-info}/top_level.txt +0 -0
myokit/tests/data/decker.model
CHANGED
|
@@ -113,7 +113,7 @@ calcium_alpha = 0.05;
|
|
|
113
113
|
calcium_beta = 0.00068;
|
|
114
114
|
csqnBar = 10.0;
|
|
115
115
|
diff_fTrap = calcium_alpha * active * (active - fTrap) - calcium_beta * fTrap;
|
|
116
|
-
diff_uCa_cal =
|
|
116
|
+
diff_uCa_cal = -ICaL * AF / (v_cal * 2.0) + CaL * v_sr / v_cal;
|
|
117
117
|
diff_uCa_i = Ca * v_sr / v_cyt - (ICab + IpCa - 2.0 * INaCa) * AF / (v_cyt * 2.0) - (Iup - Ileak) * v_nsr / v_cyt;
|
|
118
118
|
diff_uCa_jsr = Itr - Irel;
|
|
119
119
|
diff_uCa_sr = INaCaSS * AF / v_sr + Irel * v_jsr / v_sr - (Ca + CaL);
|
|
@@ -122,11 +122,11 @@ diff_uCa_sr = INaCaSS * AF / v_sr + Irel * v_jsr / v_sr - (Ca + CaL);
|
|
|
122
122
|
BSLBar = 1.124;
|
|
123
123
|
BSRBar = 0.047;
|
|
124
124
|
BS_sum = BSRBar + BSLBar;
|
|
125
|
-
Ca_cal =
|
|
125
|
+
Ca_cal = -b_2 / 3.0 + 2.0 / 3.0 * sqrt(b_2 * b_2 - 3.0 * c_2) * cos(acos((9.0 * b_2 * c_2 - 2.0 * pow(b_2, 3.0) - 27.0 * d_1) / (2.0 * pow(b_2 * b_2 - 3.0 * c_2, 1.5))) / 3.0);
|
|
126
126
|
b_2 = sum2 - uCa_cal;
|
|
127
127
|
c_2 = pro_sum2 - Km_sum2 * uCa_cal;
|
|
128
|
-
d_1 =
|
|
129
|
-
Ca_i =
|
|
128
|
+
d_1 = -Km_pro2 * uCa_cal;
|
|
129
|
+
Ca_i = -b_3 / 3.0 + 2.0 / 3.0 * sqrt(b_3 * b_3 - 3.0 * c_3) * cos(acos((9.0 * b_3 * c_3 - 2.0 * pow(b_3, 3.0) - 27.0 * d_2) / (2.0 * pow(b_3 * b_3 - 3.0 * c_3, 1.5))) / 3.0);
|
|
130
130
|
Km_cmdn = 0.00238;
|
|
131
131
|
Km_pro = Km_cmdn * Km_trpn;
|
|
132
132
|
Km_sum = Km_trpn + Km_cmdn;
|
|
@@ -134,14 +134,14 @@ Km_trpn = 0.0005;
|
|
|
134
134
|
b_3 = sum - uCa_i;
|
|
135
135
|
c_3 = pro - uCa_i * Km_sum;
|
|
136
136
|
cmdnBar = 0.05;
|
|
137
|
-
d_2 =
|
|
137
|
+
d_2 = -Km_pro * uCa_i;
|
|
138
138
|
pro = Km_pro + trpnBar * Km_cmdn + cmdnBar * Km_trpn;
|
|
139
139
|
sum = cmdnBar + trpnBar + Km_trpn + Km_cmdn;
|
|
140
140
|
trpnBar = 0.07;
|
|
141
|
-
Ca_sr =
|
|
141
|
+
Ca_sr = -b_4 / 3.0 + 2.0 / 3.0 * sqrt(b_4 * b_4 - 3.0 * c_4) * cos(acos((9.0 * b_4 * c_4 - 2.0 * pow(b_4, 3.0) - 27.0 * d_3) / (2.0 * pow(b_4 * b_4 - 3.0 * c_4, 1.5))) / 3.0);
|
|
142
142
|
b_4 = sum2 - uCa_sr;
|
|
143
143
|
c_4 = pro_sum2 - Km_sum2 * uCa_sr;
|
|
144
|
-
d_3 =
|
|
144
|
+
d_3 = -Km_pro2 * uCa_sr;
|
|
145
145
|
Km_BSL = 0.0087;
|
|
146
146
|
Km_BSR = 0.00087;
|
|
147
147
|
Km_pro2 = Km_BSR * Km_BSL;
|
|
@@ -152,7 +152,7 @@ sum2 = BS_sum + Km_sum2;
|
|
|
152
152
|
// cell
|
|
153
153
|
A = 2.0 * geoArea;
|
|
154
154
|
AF = A / F;
|
|
155
|
-
geoArea = 3.14 * 2.0 * radius * radius + 2.0 *
|
|
155
|
+
geoArea = 3.14 * 2.0 * radius * radius + 2.0 * 3.14159265358979312e+00 * radius * length;
|
|
156
156
|
length = 0.01;
|
|
157
157
|
radius = 0.0011;
|
|
158
158
|
v_cal = volume * 0.002;
|
|
@@ -181,9 +181,9 @@ z1_1 = EK - ECl;
|
|
|
181
181
|
z2_1 = 87.8251;
|
|
182
182
|
CTNaCl = NaClBar * z1_2 / (z1_2 + z2_2);
|
|
183
183
|
z1_2 = pow(ENa - ECl, 4.0);
|
|
184
|
-
z2_2 =
|
|
184
|
+
z2_2 = 5.94941976406925395e+07;
|
|
185
185
|
KClBar = 1.77e-05;
|
|
186
|
-
NaClBar =
|
|
186
|
+
NaClBar = 2.46108000000000016e-05;
|
|
187
187
|
|
|
188
188
|
// diff
|
|
189
189
|
Ca = (Ca_sr - Ca_i) / var_diff_tau_diff;
|
|
@@ -206,10 +206,10 @@ e2v_1 = exp(2.0 * vf);
|
|
|
206
206
|
// ical
|
|
207
207
|
ACT_ss = 1.0 / (1.0 + exp((p05_1 - V) / p06_1));
|
|
208
208
|
ACT_tau = p00_1 + p01_1 * exp(p02_1 * (V + p03_1)) / (1.0 + exp(p04_1 * (V + p03_1)));
|
|
209
|
-
diff_C =
|
|
210
|
-
diff_CI =
|
|
211
|
-
diff_CIs =
|
|
212
|
-
diff_Cs =
|
|
209
|
+
diff_C = -(ical_alpha + delta_1 + yy) * C + ical_beta * O + theta * Cs + xx * CI;
|
|
210
|
+
diff_CI = -(ical_alpha + delta_I + xx) * CI + yy * C + theta_I * CIs + ical_beta * OI;
|
|
211
|
+
diff_CIs = -(ical_alpha + theta_I + xs) * CIs + ys * Cs + delta_I * CI + ical_beta * OIs;
|
|
212
|
+
diff_Cs = -(ical_alpha + theta + ys) * Cs + delta_1 * C + ical_beta * Os + xs * CIs;
|
|
213
213
|
ICaL = ICaLBar * g_1;
|
|
214
214
|
ICaLBar = ((e2v_2 == 1.0) ? p21 * 4.0 * F * FRT * (gCai * Ca_cal - gCao * Cao) / (2.0 * FRT) : p21 * 4.0 * vff * (gCai * Ca_cal * e2v_2 - gCao * Cao) / (e2v_2 - 1.0));
|
|
215
215
|
e2v_2 = exp(2.0 * vf);
|
|
@@ -217,16 +217,16 @@ g_1 = O + Os;
|
|
|
217
217
|
gCai = 1.0;
|
|
218
218
|
gCao = 0.341;
|
|
219
219
|
I_V1 = p07_1 * (1.0 + exp((V + p08_1) / p09_1));
|
|
220
|
-
I_V2 = p10_1 * (1.0 + exp(
|
|
220
|
+
I_V2 = p10_1 * (1.0 + exp(-(V + p11_1) / p12_1));
|
|
221
221
|
I_Vss = (p15_1 + 1.0 / (1.0 + exp((V + p13_1) / p14_1))) / (1.0 + p15_1);
|
|
222
222
|
I_Vtau = 1.0 / (1.0 / I_V1 + 1.0 / I_V2);
|
|
223
223
|
Is_Ca = p16 - p17 / (1.0 + zz_2);
|
|
224
|
-
Is_V2 = Is_Ca * (1.0 + exp(
|
|
224
|
+
Is_V2 = Is_Ca * (1.0 + exp(-(V + p11_1) / p12_1));
|
|
225
225
|
Is_Vss = (p18 + 1.0 / (1.0 + exp((V + p13_1) / p14_1))) / (1.0 + p18);
|
|
226
226
|
Is_Vtau = 1.0 / (1.0 / I_V1 + 1.0 / Is_V2);
|
|
227
|
-
diff_O =
|
|
228
|
-
diff_OI =
|
|
229
|
-
diff_OIs =
|
|
227
|
+
diff_O = -(ical_beta + delta_1 + yy) * O + ical_alpha * C + theta * Os + xx * OI;
|
|
228
|
+
diff_OI = -(ical_beta + delta_I + xx) * OI + yy * O + theta_I * OIs + ical_alpha * CI;
|
|
229
|
+
diff_OIs = -(ical_beta + theta_I + xs) * OIs + ys * Os + delta_I * OI + ical_alpha * CIs;
|
|
230
230
|
Os = 1.0 - C - CI - CIs - Cs - O - OI - OIs;
|
|
231
231
|
ical_alpha = ACT_ss / ACT_tau;
|
|
232
232
|
ical_beta = (1.0 - ACT_ss) / ACT_tau;
|
|
@@ -255,7 +255,7 @@ p17 = 17.5;
|
|
|
255
255
|
p18 = 0.0001;
|
|
256
256
|
p19 = 3.0;
|
|
257
257
|
p20 = 1e-06;
|
|
258
|
-
p21 =
|
|
258
|
+
p21 = 1.55520000000000002e-04;
|
|
259
259
|
theta = 1.0;
|
|
260
260
|
theta_I = p20;
|
|
261
261
|
xs = Is_Vss / Is_Vtau;
|
|
@@ -274,7 +274,7 @@ Ibar_1 = ((evf == 1.0) ? 9e-07 * vff * Clo : 9e-07 * vff * (Cl_i - Clo * evf) /
|
|
|
274
274
|
KCaI = 1.0 - 1.0 / (1.0 + pow(Irel, 2.0) / 0.16);
|
|
275
275
|
diff_i_fast_1 = (ss - i_fast_1) / 8.0;
|
|
276
276
|
i_fast_alpha = 0.025 / (1.0 + exp((V + 58.0) / 5.0));
|
|
277
|
-
i_fast_beta = 1.0 / (5.0 * (1.0 + exp((V + 19.0) /
|
|
277
|
+
i_fast_beta = 1.0 / (5.0 * (1.0 + exp((V + 19.0) / -9.0)));
|
|
278
278
|
ss = i_fast_alpha / (i_fast_alpha + i_fast_beta);
|
|
279
279
|
|
|
280
280
|
// ik1
|
|
@@ -283,17 +283,17 @@ Gbar_2 = 0.5;
|
|
|
283
283
|
IK1 = GK1 * K1 * dv;
|
|
284
284
|
K1 = ak / (ak + bk);
|
|
285
285
|
ak = 1.02 / (1.0 + exp(0.2385 * (dv - 59.215)));
|
|
286
|
-
bk = (0.49124 * exp(0.08032 * (dv + 5.476)) + exp(0.06175 * (dv - 594.31))) / (1.0 + exp(
|
|
286
|
+
bk = (0.49124 * exp(0.08032 * (dv + 5.476)) + exp(0.06175 * (dv - 594.31))) / (1.0 + exp(-0.5143 * (dv + 4.753)));
|
|
287
287
|
dv = V - EK;
|
|
288
288
|
|
|
289
289
|
// ikr
|
|
290
290
|
G = Gbar_3 * sqrt(Ko / 5.4);
|
|
291
291
|
Gbar_3 = 0.0138542;
|
|
292
292
|
IKr = G * a_1 * i_1 * (V - EK);
|
|
293
|
-
a_1_inf = 1.0 / (1.0 + exp((V + 10.085) /
|
|
293
|
+
a_1_inf = 1.0 / (1.0 + exp((V + 10.085) / -4.25));
|
|
294
294
|
tau_a_1 = 1.0 / (0.0006 * ta - 0.0003 * tb);
|
|
295
295
|
ta = ((dd_1 == 0.0) ? 1.0 / 0.136 : vv_1 / dd_1);
|
|
296
|
-
dd_1 = -expm1(
|
|
296
|
+
dd_1 = -expm1(-0.136 * vv_1);
|
|
297
297
|
vv_1 = V - 1.7384;
|
|
298
298
|
tb = ((dd_2 == 0.0) ? 1.0 / 0.1522 : vv_2 / dd_2);
|
|
299
299
|
dd_2 = -expm1(0.1522 * vv_2);
|
|
@@ -318,7 +318,7 @@ diff_C8 = 2.0 * a_2 * C7 + 3.0 * b_5 * C9 + 3.0 * g_2 * C4 + 2.0 * d_4 * C11 - C
|
|
|
318
318
|
diff_C9 = a_2 * C8 + 4.0 * g_2 * C5 + 2.0 * d_4 * C12 - C9 * (3.0 * b_5 + 3.0 * g_2 + d_4);
|
|
319
319
|
GKs = p15_2 * (1.0 + 0.6 / (1.0 + pow(3.8e-05 / Ca_i, 1.4)));
|
|
320
320
|
IKs = GKs * (O1 + O2) * (V - EKs);
|
|
321
|
-
diff_O1 =
|
|
321
|
+
diff_O1 = -(e + p) * O1 + o * O2 + t * C15;
|
|
322
322
|
O2 = 1.0 - C1 - C2 - C3 - C4 - C5 - C6 - C7 - C8 - C9 - C10 - C11 - C12 - C13 - C14 - C15 - O1;
|
|
323
323
|
a_2 = p00_2 * exp(vf * p01_2);
|
|
324
324
|
b_5 = p02_2 * exp(vf * p03_2);
|
|
@@ -327,21 +327,21 @@ e = p08_2 * exp(vf * p09_2);
|
|
|
327
327
|
g_2 = p04_2 * exp(vf * p05_2);
|
|
328
328
|
o = p11_2 * exp(vf * p12_2);
|
|
329
329
|
p = p13_2 * exp(vf * p14_2);
|
|
330
|
-
p00_2 =
|
|
331
|
-
p01_2 =
|
|
332
|
-
p02_2 =
|
|
333
|
-
p03_2 =
|
|
334
|
-
p04_2 =
|
|
335
|
-
p05_2 =
|
|
336
|
-
p06_2 =
|
|
337
|
-
p07_2 =
|
|
338
|
-
p08_2 =
|
|
339
|
-
p09_2 =
|
|
340
|
-
p10_2 =
|
|
341
|
-
p11_2 =
|
|
342
|
-
p12_2 =
|
|
343
|
-
p13_2 =
|
|
344
|
-
p14_2 =
|
|
330
|
+
p00_2 = 1.48645979808599994e-02;
|
|
331
|
+
p01_2 = 2.98773012358800015e-02;
|
|
332
|
+
p02_2 = 8.39863121998299933e-02;
|
|
333
|
+
p03_2 = -5.54610571266399982e-02;
|
|
334
|
+
p04_2 = 1.46006611831600002e-02;
|
|
335
|
+
p05_2 = 2.44649530996450010e-01;
|
|
336
|
+
p06_2 = 3.11732688739999996e-03;
|
|
337
|
+
p07_2 = -4.26254519443760027e-01;
|
|
338
|
+
p08_2 = 7.73199009733099990e-02;
|
|
339
|
+
p09_2 = -6.47261224887100001e-02;
|
|
340
|
+
p10_2 = 8.95383064110199939e-02;
|
|
341
|
+
p11_2 = 7.94054599586400012e-01;
|
|
342
|
+
p12_2 = -8.01737819297699966e-02;
|
|
343
|
+
p13_2 = 5.86382286630140026e-01;
|
|
344
|
+
p14_2 = 2.82055543314960022e-01;
|
|
345
345
|
p15_2 = 0.0826;
|
|
346
346
|
t = p10_2;
|
|
347
347
|
|
|
@@ -353,14 +353,14 @@ K = 1.0 / (1.0 + exp((7.488 - V) / 5.98));
|
|
|
353
353
|
// ina
|
|
354
354
|
Gbar_5 = 9.075;
|
|
355
355
|
INa = Gbar_5 * pow(m, 3.0) * h * j * (V - ENa);
|
|
356
|
-
alpha_h = ((V >=
|
|
357
|
-
beta_h = ((V >=
|
|
358
|
-
alpha_j = ((V >=
|
|
359
|
-
beta_j = ((V >=
|
|
356
|
+
alpha_h = ((V >= -40.0) ? 0.0 : 0.135 * exp((80.0 + V) / -6.8));
|
|
357
|
+
beta_h = ((V >= -40.0) ? 1.0 / (0.13 * (1.0 + exp((V + 10.66) / -11.1))) : 3.56 * exp(0.079 * V) + 310000.0 * exp(0.35 * V));
|
|
358
|
+
alpha_j = ((V >= -40.0) ? 0.0 : (-127140.0 * exp(0.2444 * V) - 6.948e-05 * exp(-0.04391 * V)) * (V + 37.78) / (1.0 + exp(0.311 * (V + 79.23))));
|
|
359
|
+
beta_j = ((V >= -40.0) ? 0.3 * exp(-2.535e-07 * V) / (1.0 + exp(-0.1 * (V + 32.0))) : 0.1212 * exp(-0.01052 * V) / (1.0 + exp(-0.1378 * (V + 40.14))));
|
|
360
360
|
alpha_m = ((dd_3 == 0.0) ? 3.2 : 0.32 * vv_3 / dd_3);
|
|
361
|
-
dd_3 = -expm1(
|
|
361
|
+
dd_3 = -expm1(-0.1 * vv_3);
|
|
362
362
|
vv_3 = V + 47.13;
|
|
363
|
-
beta_m = 0.08 * exp(
|
|
363
|
+
beta_m = 0.08 * exp(-V / 11.0);
|
|
364
364
|
|
|
365
365
|
// inab
|
|
366
366
|
INaB = ((evf == 1.0) ? P * F * (Nai - Nao) : P * vff * (Nai * evf - Nao) / (evf - 1.0));
|
|
@@ -398,21 +398,21 @@ vMax = 4.5;
|
|
|
398
398
|
// inak
|
|
399
399
|
INaK = Ibar_2 * fv * pow(Pna, 3.0) * Pk;
|
|
400
400
|
Pna = Nai / (Nai + K_Nai);
|
|
401
|
-
fv = 1.0 / (1.0 + exp(
|
|
401
|
+
fv = 1.0 / (1.0 + exp(-phi));
|
|
402
402
|
phi = (V - VHalf) * FRT;
|
|
403
403
|
Ibar_2 = 1.4;
|
|
404
404
|
K_Ko = 1.5;
|
|
405
405
|
K_Nai = 2.6;
|
|
406
406
|
Pk = Ko / (Ko + K_Ko);
|
|
407
|
-
VHalf =
|
|
407
|
+
VHalf = -92.0;
|
|
408
408
|
|
|
409
409
|
// inal
|
|
410
410
|
Gbar_6 = 0.0065;
|
|
411
411
|
INaL = Gbar_6 * pow(a_3, 3.0) * i_2 * (V - ENa);
|
|
412
412
|
alpha_a_3 = ((dd_4 == 0.0) ? 3.2 : 0.32 * vv_4 / dd_4);
|
|
413
|
-
dd_4 = -expm1(
|
|
413
|
+
dd_4 = -expm1(-0.1 * vv_4);
|
|
414
414
|
vv_4 = V + 47.13;
|
|
415
|
-
beta_a_3 = 0.08 * exp(
|
|
415
|
+
beta_a_3 = 0.08 * exp(-V / 11.0);
|
|
416
416
|
diff_i_2 = (hLss - i_2) / 600.0;
|
|
417
417
|
hLss = 1.0 / (1.0 + exp((V + 91.0) / 6.1));
|
|
418
418
|
|
|
@@ -422,7 +422,7 @@ IpCa_bar = 0.0575;
|
|
|
422
422
|
Km_pCa = 0.0005;
|
|
423
423
|
|
|
424
424
|
// irel
|
|
425
|
-
diff_Irel =
|
|
425
|
+
diff_Irel = -(irel_inf_var + Irel) / irel_tau;
|
|
426
426
|
irel_alpha = irel_beta * 0.1125;
|
|
427
427
|
irel_beta = 4.75 * (1.0 + delta_2);
|
|
428
428
|
delta_2 = 1.0 / (1.0 + pow(0.28 / active, 10.0));
|
|
@@ -433,11 +433,11 @@ irel_tau = irel_beta / (1.0 + 0.0123 / Ca_jsr);
|
|
|
433
433
|
Gbar_7 = 0.4975;
|
|
434
434
|
ITo = Gbar_7 * pow(a_4, 3.0) * i_fast_2 * i_slow * Rto1 * (V - EK);
|
|
435
435
|
Rto1 = exp(V / 550.0);
|
|
436
|
-
ito_a_alpha = 1.0 / (1.2089 * (1.0 + exp((V - 18.4099) /
|
|
436
|
+
ito_a_alpha = 1.0 / (1.2089 * (1.0 + exp((V - 18.4099) / -29.3814)));
|
|
437
437
|
ito_a_beta = 3.5 / (1.0 + exp((V + 100.0) / 29.3814));
|
|
438
|
-
a_4_inf = 1.0 / (1.0 + exp((V + 9.437) /
|
|
438
|
+
a_4_inf = 1.0 / (1.0 + exp((V + 9.437) / -7.133));
|
|
439
439
|
tau_a_4 = 1.0 / (ito_a_alpha + ito_a_beta);
|
|
440
|
-
ito_beta_i = 1.0 / (9.7953 * (1.0 + exp((V + 19.0) /
|
|
440
|
+
ito_beta_i = 1.0 / (9.7953 * (1.0 + exp((V + 19.0) / -9.0)));
|
|
441
441
|
beta_i_fast_2 = ito_beta_i;
|
|
442
442
|
beta_i_slow = ito_beta_i;
|
|
443
443
|
alpha_i_fast_2 = 0.025 / (1.0 + exp((V + 58.0) / 5.0));
|
|
@@ -446,10 +446,10 @@ alpha_i_slow = 1.0 / (250.0 * (1.0 + exp((V + 60.0) / 5.0)));
|
|
|
446
446
|
// membrane
|
|
447
447
|
i_ion = INa_tot + IK_tot + ICa_tot + ICl_tot;
|
|
448
448
|
i_stim = 0.0 * stim_amplitude;
|
|
449
|
-
stim_amplitude =
|
|
449
|
+
stim_amplitude = -80.0;
|
|
450
450
|
|
|
451
451
|
// nernst
|
|
452
|
-
ECl =
|
|
452
|
+
ECl = -RTF * log(Clo / Cl_i);
|
|
453
453
|
EK = RTF * log(Ko / K_i);
|
|
454
454
|
EKs = RTF * log((Ko + P_NaK * Nao) / (K_i + P_NaK * Nai));
|
|
455
455
|
ENa = RTF * log(Nao / Nai);
|
|
@@ -464,14 +464,14 @@ T = 310.0;
|
|
|
464
464
|
|
|
465
465
|
// potassium
|
|
466
466
|
IK_tot = IK1 + IKr + IKs + IKur + ITo - INaK * 2.0;
|
|
467
|
-
diff_K_i =
|
|
467
|
+
diff_K_i = -IK_tot * (AF / v_cyt) + CTKCl;
|
|
468
468
|
|
|
469
469
|
// sodium
|
|
470
470
|
INa_cyt = INa + INaL + INaB + INaK * 3.0 + INaCa * 3.0;
|
|
471
471
|
INa_tot = INa_cyt + INaCaSS * 3.0;
|
|
472
|
-
diff_Na_sr =
|
|
472
|
+
diff_Na_sr = -(3.0 * INaCaSS * r1_3 + Na);
|
|
473
473
|
r1_3 = AF / v_sr;
|
|
474
|
-
diff_Nai =
|
|
474
|
+
diff_Nai = -r1_4 * INa_cyt + r2_2 * Na + CTNaCl;
|
|
475
475
|
r1_4 = AF / v_cyt;
|
|
476
476
|
r2_2 = v_sr / v_cyt;
|
|
477
477
|
|
myokit/tests/test_formats.py
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
# This file is part of Myokit.
|
|
6
6
|
# See http://myokit.org for copyright, sharing, and licensing details.
|
|
7
7
|
#
|
|
8
|
+
import os
|
|
8
9
|
import unittest
|
|
9
10
|
|
|
10
11
|
import myokit
|
|
@@ -14,9 +15,7 @@ from myokit.tests import TemporaryDirectory
|
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class FormatsTest(unittest.TestCase):
|
|
17
|
-
"""
|
|
18
|
-
Test infrastructure from the formats module.
|
|
19
|
-
"""
|
|
18
|
+
""" Test shared formats functionality. """
|
|
20
19
|
|
|
21
20
|
def test_register_external_importer(self):
|
|
22
21
|
# Tests registering an external importer.
|
|
@@ -101,10 +100,8 @@ class FormatsTest(unittest.TestCase):
|
|
|
101
100
|
|
|
102
101
|
|
|
103
102
|
class ExporterTest(unittest.TestCase):
|
|
104
|
-
"""
|
|
105
|
-
|
|
106
|
-
various exporter implementations.
|
|
107
|
-
"""
|
|
103
|
+
""" Tests shared :class:`Exporter` functionality. """
|
|
104
|
+
|
|
108
105
|
def test_writable_dir(self):
|
|
109
106
|
# Test :meth:`_test_writable_dir` for existing paths.
|
|
110
107
|
|
|
@@ -126,6 +123,117 @@ class ExporterTest(unittest.TestCase):
|
|
|
126
123
|
self.assertRaisesRegex(
|
|
127
124
|
myokit.ExportError, 'file exists', e.runnable, path, m, p)
|
|
128
125
|
|
|
126
|
+
def test_runnable_exporter(self):
|
|
127
|
+
# Test shared functionality of the TemplatedRunnableExporters.
|
|
128
|
+
|
|
129
|
+
e = myokit.formats.exporter('ansic')
|
|
130
|
+
|
|
131
|
+
# Load model, protocol
|
|
132
|
+
m, p, x = myokit.load('example')
|
|
133
|
+
|
|
134
|
+
# Create empty output directory as subdirectory of DIR_OUT
|
|
135
|
+
with TemporaryDirectory() as d:
|
|
136
|
+
path = d.path()
|
|
137
|
+
|
|
138
|
+
# Simple export
|
|
139
|
+
dpath = os.path.join(path, 'runnable1')
|
|
140
|
+
ret = e.runnable(dpath, m)
|
|
141
|
+
self.assertIsNone(ret)
|
|
142
|
+
self.assertTrue(os.path.isdir(dpath))
|
|
143
|
+
self.assertTrue(len(os.listdir(dpath)) > 0)
|
|
144
|
+
|
|
145
|
+
# Write to complex path
|
|
146
|
+
dpath = os.path.join(path, 'runnable2', 'nest', 'test')
|
|
147
|
+
ret = e.runnable(dpath, m, p)
|
|
148
|
+
self.assertIsNone(ret)
|
|
149
|
+
self.assertTrue(os.path.isdir(dpath))
|
|
150
|
+
self.assertTrue(len(os.listdir(dpath)) > 0)
|
|
151
|
+
|
|
152
|
+
# Overwrite existing path
|
|
153
|
+
ret = e.runnable(dpath, m, p)
|
|
154
|
+
self.assertIsNone(ret)
|
|
155
|
+
self.assertTrue(os.path.isdir(dpath))
|
|
156
|
+
self.assertTrue(len(os.listdir(dpath)) > 0)
|
|
157
|
+
|
|
158
|
+
# Path pointing to file
|
|
159
|
+
dpath = os.path.join(path, 'file')
|
|
160
|
+
with open(dpath, 'w') as f:
|
|
161
|
+
f.write('contents\n')
|
|
162
|
+
self.assertRaisesRegex(
|
|
163
|
+
myokit.ExportError, 'file exists', e.runnable, dpath, m, p)
|
|
164
|
+
|
|
165
|
+
# Directory exists where we're trying to write a file
|
|
166
|
+
dpath = os.path.join(path, 'runnable3')
|
|
167
|
+
fname = os.path.join(dpath, 'sim.c')
|
|
168
|
+
os.makedirs(fname)
|
|
169
|
+
self.assertRaisesRegex(
|
|
170
|
+
myokit.ExportError, 'Directory exists',
|
|
171
|
+
e.runnable, dpath, m, p)
|
|
172
|
+
|
|
173
|
+
# Directory embedded in the output file path
|
|
174
|
+
def embedded():
|
|
175
|
+
return {'sim.c': 'nested/sim.c'}
|
|
176
|
+
|
|
177
|
+
# 1. Normal operation
|
|
178
|
+
e._dict = embedded
|
|
179
|
+
dpath = os.path.join(path, 'runnable4')
|
|
180
|
+
ret = e.runnable(dpath, m, p)
|
|
181
|
+
self.assertIsNone(ret)
|
|
182
|
+
self.assertTrue(os.path.isdir(dpath))
|
|
183
|
+
self.assertTrue(len(os.listdir(dpath)) > 0)
|
|
184
|
+
|
|
185
|
+
# 2. Try to create directory where file exists
|
|
186
|
+
def embedded():
|
|
187
|
+
return {'sim.c': 'nested/sim.c/som.c'}
|
|
188
|
+
|
|
189
|
+
e._dict = embedded
|
|
190
|
+
dpath = os.path.join(path, 'runnable4')
|
|
191
|
+
self.assertRaisesRegex(
|
|
192
|
+
myokit.ExportError, 'file or link', e.runnable, dpath, m, p)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class ImporterTest(unittest.TestCase):
|
|
196
|
+
""" Test shared importer functionality. """
|
|
197
|
+
|
|
198
|
+
def test_importer_interface(self):
|
|
199
|
+
# Test listing and creating importers.
|
|
200
|
+
ims = myokit.formats.importers()
|
|
201
|
+
self.assertTrue(len(ims) > 0)
|
|
202
|
+
for i in ims:
|
|
203
|
+
self.assertIsInstance(i, str)
|
|
204
|
+
i = myokit.formats.importer(i)
|
|
205
|
+
self.assertTrue(isinstance(i, myokit.formats.Importer))
|
|
206
|
+
|
|
207
|
+
def test_unknown(self):
|
|
208
|
+
# Test requesting an unknown importer.
|
|
209
|
+
# Test fetching using importer method
|
|
210
|
+
self.assertRaisesRegex(
|
|
211
|
+
KeyError, 'Importer not found', myokit.formats.importer, 'blip')
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class EWriterTest(unittest.TestCase):
|
|
215
|
+
""" Test shared ewriter functionality. """
|
|
216
|
+
|
|
217
|
+
def test_ewriter_interface(self):
|
|
218
|
+
# Test listing and creating expression writers.
|
|
219
|
+
|
|
220
|
+
# Test listing
|
|
221
|
+
es = myokit.formats.ewriters()
|
|
222
|
+
self.assertTrue(len(es) > 0)
|
|
223
|
+
|
|
224
|
+
# Create one of each
|
|
225
|
+
for e in es:
|
|
226
|
+
self.assertIsInstance(e, str)
|
|
227
|
+
e = myokit.formats.ewriter(e)
|
|
228
|
+
self.assertTrue(isinstance(e, myokit.formats.ExpressionWriter))
|
|
229
|
+
|
|
230
|
+
def test_unknown(self):
|
|
231
|
+
# Test requesting an unknown expression writer.
|
|
232
|
+
# Test fetching using ewriter method
|
|
233
|
+
self.assertRaisesRegex(
|
|
234
|
+
KeyError, 'Expression writer not found', myokit.formats.ewriter,
|
|
235
|
+
'dada')
|
|
236
|
+
|
|
129
237
|
|
|
130
238
|
if __name__ == '__main__':
|
|
131
239
|
unittest.main()
|