mxlmodels 1.0.0__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.
@@ -0,0 +1,685 @@
1
+ """Poolman 2000 Calvin-Benson-Bassham cycle model.
2
+
3
+ Reference: Poolman, Mark G., David A. Fell, and Simon Thomas.
4
+ "Modelling photosynthesis and its control."
5
+ Journal of experimental botany 51.suppl_1 (2000): 319-328
6
+ """
7
+
8
+ from mxlpy import Model
9
+
10
+
11
+ def _moiety_1(
12
+ concentration: float,
13
+ total: float,
14
+ ) -> float:
15
+ """Conservation moiety: total - concentration."""
16
+ return total - concentration
17
+
18
+
19
+ def _pi_cbb(
20
+ phosphate_total: float,
21
+ pga: float,
22
+ bpga: float,
23
+ gap: float,
24
+ dhap: float,
25
+ fbp: float,
26
+ f6p: float,
27
+ g6p: float,
28
+ g1p: float,
29
+ sbp: float,
30
+ s7p: float,
31
+ e4p: float,
32
+ x5p: float,
33
+ r5p: float,
34
+ rubp: float,
35
+ ru5p: float,
36
+ atp: float,
37
+ ) -> float:
38
+ """Free orthophosphate from total minus all phosphorylated CBB intermediates (bisphosphates count twice)."""
39
+ return phosphate_total - (
40
+ pga
41
+ + 2 * bpga
42
+ + gap
43
+ + dhap
44
+ + 2 * fbp
45
+ + f6p
46
+ + g6p
47
+ + g1p
48
+ + 2 * sbp
49
+ + s7p
50
+ + e4p
51
+ + x5p
52
+ + r5p
53
+ + 2 * rubp
54
+ + ru5p
55
+ + atp
56
+ )
57
+
58
+
59
+ def _mass_action_1s(
60
+ s1: float,
61
+ k_fwd: float,
62
+ ) -> float:
63
+ """Mass-action rate for one substrate."""
64
+ return k_fwd * s1
65
+
66
+
67
+ def _rate_translocator(
68
+ pi: float,
69
+ pga: float,
70
+ gap: float,
71
+ dhap: float,
72
+ k_pxt: float,
73
+ p_ext: float,
74
+ k_pi: float,
75
+ k_pga: float,
76
+ k_gap: float,
77
+ k_dhap: float,
78
+ ) -> float:
79
+ """Denominator term N for the phosphate translocator shared by all triose-P export reactions."""
80
+ return 1 + (1 + k_pxt / p_ext) * (
81
+ pi / k_pi + pga / k_pga + gap / k_gap + dhap / k_dhap
82
+ )
83
+
84
+
85
+ def _rate_poolman_5i(
86
+ rubp: float,
87
+ pga: float,
88
+ co2: float,
89
+ vmax: float,
90
+ kms_rubp: float,
91
+ kms_co2: float,
92
+ # inhibitors
93
+ ki_pga: float,
94
+ fbp: float,
95
+ ki_fbp: float,
96
+ sbp: float,
97
+ ki_sbp: float,
98
+ pi: float,
99
+ ki_p: float,
100
+ nadph: float,
101
+ ki_nadph: float,
102
+ ) -> float:
103
+ """Rubisco carboxylation rate (Poolman 2000): bi-substrate with 5 competitive inhibitors."""
104
+ top = vmax * rubp * co2
105
+ btm = (
106
+ rubp
107
+ + kms_rubp
108
+ * (
109
+ 1
110
+ + pga / ki_pga
111
+ + fbp / ki_fbp
112
+ + sbp / ki_sbp
113
+ + pi / ki_p
114
+ + nadph / ki_nadph
115
+ )
116
+ ) * (co2 + kms_co2)
117
+ return top / btm
118
+
119
+
120
+ def _rapid_equilibrium_2s_2p(
121
+ s1: float,
122
+ s2: float,
123
+ p1: float,
124
+ p2: float,
125
+ k_re: float,
126
+ q: float,
127
+ ) -> float:
128
+ """Rapid-equilibrium rate for two substrates, two products."""
129
+ return k_re * (s1 * s2 - p1 * p2 / q)
130
+
131
+
132
+ def _rapid_equilibrium_3s_3p(
133
+ s1: float,
134
+ s2: float,
135
+ s3: float,
136
+ p1: float,
137
+ p2: float,
138
+ p3: float,
139
+ k_re: float,
140
+ q: float,
141
+ ) -> float:
142
+ """Rapid-equilibrium rate for three substrates, three products."""
143
+ return k_re * (s1 * s2 * s3 - p1 * p2 * p3 / q)
144
+
145
+
146
+ def _rapid_equilibrium_1s_1p(
147
+ s1: float,
148
+ p1: float,
149
+ k_re: float,
150
+ q: float,
151
+ ) -> float:
152
+ """Rapid-equilibrium rate for one substrate, one product."""
153
+ return k_re * (s1 - p1 / q)
154
+
155
+
156
+ def _rapid_equilibrium_2s_1p(
157
+ s1: float,
158
+ s2: float,
159
+ p1: float,
160
+ k_re: float,
161
+ q: float,
162
+ ) -> float:
163
+ """Rapid-equilibrium rate for two substrates, one product."""
164
+ return k_re * (s1 * s2 - p1 / q)
165
+
166
+
167
+ def _michaelis_menten_1s_2i(
168
+ s: float,
169
+ i1: float,
170
+ i2: float,
171
+ vmax: float,
172
+ km: float,
173
+ ki1: float,
174
+ ki2: float,
175
+ ) -> float:
176
+ """Irreversible Michaelis-Menten rate for one substrate with two inhibitors."""
177
+ return vmax * s / (s + km * (1 + i1 / ki1 + i2 / ki2))
178
+
179
+
180
+ def _michaelis_menten_1s_1i(
181
+ s: float,
182
+ i: float,
183
+ vmax: float,
184
+ km: float,
185
+ ki: float,
186
+ ) -> float:
187
+ """Irreversible Michaelis-Menten rate for one substrate with one inhibitor."""
188
+ return vmax * s / (s + km * (1 + i / ki))
189
+
190
+
191
+ def _rate_prk(
192
+ ru5p: float,
193
+ atp: float,
194
+ pi: float,
195
+ pga: float,
196
+ rubp: float,
197
+ adp: float,
198
+ v13: float,
199
+ km131: float,
200
+ km132: float,
201
+ ki131: float,
202
+ ki132: float,
203
+ ki133: float,
204
+ ki134: float,
205
+ ki135: float,
206
+ ) -> float:
207
+ """Phosphoribulokinase rate: ordered bi-substrate kinetics with PGA, RuBP, Pi and ADP inhibition."""
208
+ return (
209
+ v13
210
+ * ru5p
211
+ * atp
212
+ / (
213
+ (ru5p + km131 * (1 + pga / ki131 + rubp / ki132 + pi / ki133))
214
+ * (atp * (1 + adp / ki134) + km132 * (1 + adp / ki135))
215
+ )
216
+ )
217
+
218
+
219
+ def _rate_out(
220
+ s1: float,
221
+ n_total: float,
222
+ vmax_efflux: float,
223
+ k_efflux: float,
224
+ ) -> float:
225
+ """Individual substrate export rate normalised by the translocator occupancy N."""
226
+ return vmax_efflux * s1 / (n_total * k_efflux)
227
+
228
+
229
+ def _rate_starch(
230
+ g1p: float,
231
+ atp: float,
232
+ adp: float,
233
+ pi: float,
234
+ pga: float,
235
+ f6p: float,
236
+ fbp: float,
237
+ v_st: float,
238
+ kmst1: float,
239
+ kmst2: float,
240
+ ki_st: float,
241
+ kast1: float,
242
+ kast2: float,
243
+ kast3: float,
244
+ ) -> float:
245
+ """Starch synthesis rate via G1P+ATP with ADP inhibition and allosteric activation by PGA/F6P/FBP."""
246
+ return (
247
+ v_st
248
+ * g1p
249
+ * atp
250
+ / (
251
+ (g1p + kmst1)
252
+ * (
253
+ (1 + adp / ki_st) * (atp + kmst2)
254
+ + kmst2 * pi / (kast1 * pga + kast2 * f6p + kast3 * fbp)
255
+ )
256
+ )
257
+ )
258
+
259
+
260
+ def _rate_atp_synthase_2000(
261
+ adp: float,
262
+ pi: float,
263
+ v16: float,
264
+ km161: float,
265
+ km162: float,
266
+ ) -> float:
267
+ """ATP synthase rate (Poolman 2000): bi-substrate Michaelis-Menten on ADP and Pi."""
268
+ return v16 * adp * pi / ((adp + km161) * (pi + km162))
269
+
270
+
271
+ def create_model() -> Model:
272
+ """Poolman 2000 Calvin-Benson-Bassham cycle model.
273
+
274
+ Reference: Poolman, Mark G., David A. Fell, and Simon Thomas.
275
+ "Modelling photosynthesis and its control."
276
+ Journal of experimental botany 51.suppl_1 (2000): 319-328
277
+ """
278
+ m: Model = Model()
279
+ m = m.add_variable("3PGA", initial_value=0.6387788347932627)
280
+ m = m.add_variable("BPGA", initial_value=0.0013570885908749779)
281
+ m = m.add_variable("GAP", initial_value=0.011259431827358068)
282
+ m = m.add_variable("DHAP", initial_value=0.24770748227012374)
283
+ m = m.add_variable("FBP", initial_value=0.01980222074817044)
284
+ m = m.add_variable("F6P", initial_value=1.093666906864421)
285
+ m = m.add_variable("G6P", initial_value=2.5154338857582377)
286
+ m = m.add_variable("G1P", initial_value=0.14589516537322303)
287
+ m = m.add_variable("SBP", initial_value=0.09132688566151095)
288
+ m = m.add_variable("S7P", initial_value=0.23281380022778891)
289
+ m = m.add_variable("E4P", initial_value=0.02836065066520614)
290
+ m = m.add_variable("X5P", initial_value=0.03647242425941113)
291
+ m = m.add_variable("R5P", initial_value=0.06109130988031577)
292
+ m = m.add_variable("RUBP", initial_value=0.2672164362349537)
293
+ m = m.add_variable("RU5P", initial_value=0.0244365238237522)
294
+ m = m.add_variable("ATP", initial_value=0.43633201706180874)
295
+ m = m.add_parameter("CO2 (dissolved)", value=0.2)
296
+ m = m.add_parameter("NADPH", value=0.21)
297
+ m = m.add_parameter("protons", value=1.2589254117941661e-05)
298
+ m = m.add_parameter("A*P", value=0.5)
299
+ m = m.add_parameter("NADP*", value=0.5)
300
+ m = m.add_parameter("Pi_tot", value=15.0)
301
+ m = m.add_parameter("E0_rubisco_carboxylase", value=1.0)
302
+ m = m.add_parameter("kcat_rubisco_carboxylase", value=2.72)
303
+ m = m.add_parameter("km_rubisco_carboxylase_RUBP", value=0.02)
304
+ m = m.add_parameter("km_rubisco_carboxylase_CO2 (dissolved)", value=0.0107)
305
+ m = m.add_parameter("ki_rubisco_carboxylase_3PGA", value=0.04)
306
+ m = m.add_parameter("ki_rubisco_carboxylase_FBP", value=0.04)
307
+ m = m.add_parameter("ki_rubisco_carboxylase_SBP", value=0.075)
308
+ m = m.add_parameter("ki_rubisco_carboxylase_Orthophosphate", value=0.9)
309
+ m = m.add_parameter("ki_rubisco_carboxylase_NADPH", value=0.07)
310
+ m = m.add_parameter("kre_phosphoglycerate_kinase", value=800000000.0)
311
+ m = m.add_parameter("keq_phosphoglycerate_kinase", value=0.00031)
312
+ m = m.add_parameter("kre_gadph", value=800000000.0)
313
+ m = m.add_parameter("keq_gadph", value=16000000.0)
314
+ m = m.add_parameter("kre_triose_phosphate_isomerase", value=800000000.0)
315
+ m = m.add_parameter("keq_triose_phosphate_isomerase", value=22.0)
316
+ m = m.add_parameter("kre_aldolase_dhap_gap", value=800000000.0)
317
+ m = m.add_parameter("keq_aldolase_dhap_gap", value=7.1)
318
+ m = m.add_parameter("kre_aldolase_dhap_e4p", value=800000000.0)
319
+ m = m.add_parameter("keq_aldolase_dhap_e4p", value=13.0)
320
+ m = m.add_parameter("E0_fbpase", value=1.0)
321
+ m = m.add_parameter("kcat_fbpase", value=1.6)
322
+ m = m.add_parameter("km_fbpase_s", value=0.03)
323
+ m = m.add_parameter("ki_fbpase_F6P", value=0.7)
324
+ m = m.add_parameter("ki_fbpase_Orthophosphate", value=12.0)
325
+ m = m.add_parameter("kre_transketolase_gap_f6p", value=800000000.0)
326
+ m = m.add_parameter("keq_transketolase_gap_f6p", value=0.084)
327
+ m = m.add_parameter("kre_transketolase_gap_s7p", value=800000000.0)
328
+ m = m.add_parameter("keq_transketolase_gap_s7p", value=0.85)
329
+ m = m.add_parameter("E0_SBPase", value=1.0)
330
+ m = m.add_parameter("kcat_SBPase", value=0.32)
331
+ m = m.add_parameter("km_SBPase_s", value=0.013)
332
+ m = m.add_parameter("ki_SBPase_Orthophosphate", value=12.0)
333
+ m = m.add_parameter("kre_ribose_phosphate_isomerase", value=800000000.0)
334
+ m = m.add_parameter("keq_ribose_phosphate_isomerase", value=0.4)
335
+ m = m.add_parameter("kre_ribulose_phosphate_epimerase", value=800000000.0)
336
+ m = m.add_parameter("keq_ribulose_phosphate_epimerase", value=0.67)
337
+ m = m.add_parameter("E0_phosphoribulokinase", value=1.0)
338
+ m = m.add_parameter("kcat_phosphoribulokinase", value=7.9992)
339
+ m = m.add_parameter("km_phosphoribulokinase_RU5P", value=0.05)
340
+ m = m.add_parameter("km_phosphoribulokinase_ATP", value=0.05)
341
+ m = m.add_parameter("ki_phosphoribulokinase_3PGA", value=2.0)
342
+ m = m.add_parameter("ki_phosphoribulokinase_RUBP", value=0.7)
343
+ m = m.add_parameter("ki_phosphoribulokinase_Orthophosphate", value=4.0)
344
+ m = m.add_parameter("ki_phosphoribulokinase_4", value=2.5)
345
+ m = m.add_parameter("ki_phosphoribulokinase_5", value=0.4)
346
+ m = m.add_parameter("kre_g6pi", value=800000000.0)
347
+ m = m.add_parameter("keq_g6pi", value=2.3)
348
+ m = m.add_parameter("kre_phosphoglucomutase", value=800000000.0)
349
+ m = m.add_parameter("keq_phosphoglucomutase", value=0.058)
350
+ m = m.add_parameter("Orthophosphate (external)", value=0.5)
351
+ m = m.add_parameter("km_ex_pga", value=0.25)
352
+ m = m.add_parameter("km_ex_gap", value=0.075)
353
+ m = m.add_parameter("km_ex_dhap", value=0.077)
354
+ m = m.add_parameter("km_N_translocator_Orthophosphate (external)", value=0.74)
355
+ m = m.add_parameter("km_N_translocator_Orthophosphate", value=0.63)
356
+ m = m.add_parameter("kcat_N_translocator", value=2.0)
357
+ m = m.add_parameter("E0_N_translocator", value=1.0)
358
+ m = m.add_parameter("km_ex_g1p_G1P", value=0.08)
359
+ m = m.add_parameter("km_ex_g1p_ATP", value=0.08)
360
+ m = m.add_parameter("ki_ex_g1p", value=10.0)
361
+ m = m.add_parameter("ki_ex_g1p_3PGA", value=0.1)
362
+ m = m.add_parameter("ki_ex_g1p_F6P", value=0.02)
363
+ m = m.add_parameter("ki_ex_g1p_FBP", value=0.02)
364
+ m = m.add_parameter("E0_ex_g1p", value=1.0)
365
+ m = m.add_parameter("kcat_ex_g1p", value=0.32)
366
+ m = m.add_parameter("km_atp_synthase_ADP", value=0.014)
367
+ m = m.add_parameter("km_atp_synthase_Orthophosphate", value=0.3)
368
+ m = m.add_parameter("kcat_atp_synthase", value=2.8)
369
+ m = m.add_parameter("E0_atp_synthase", value=1.0)
370
+ m = m.add_derived(
371
+ "ADP",
372
+ fn=_moiety_1,
373
+ args=["ATP", "A*P"],
374
+ )
375
+ m = m.add_derived(
376
+ "NADP",
377
+ fn=_moiety_1,
378
+ args=["NADPH", "NADP*"],
379
+ )
380
+ m = m.add_derived(
381
+ "Orthophosphate",
382
+ fn=_pi_cbb,
383
+ args=[
384
+ "Pi_tot",
385
+ "3PGA",
386
+ "BPGA",
387
+ "GAP",
388
+ "DHAP",
389
+ "FBP",
390
+ "F6P",
391
+ "G6P",
392
+ "G1P",
393
+ "SBP",
394
+ "S7P",
395
+ "E4P",
396
+ "X5P",
397
+ "R5P",
398
+ "RUBP",
399
+ "RU5P",
400
+ "ATP",
401
+ ],
402
+ )
403
+ m = m.add_derived(
404
+ "vmax_rubisco_carboxylase",
405
+ fn=_mass_action_1s,
406
+ args=["kcat_rubisco_carboxylase", "E0_rubisco_carboxylase"],
407
+ )
408
+ m = m.add_derived(
409
+ "vmax_fbpase",
410
+ fn=_mass_action_1s,
411
+ args=["kcat_fbpase", "E0_fbpase"],
412
+ )
413
+ m = m.add_derived(
414
+ "vmax_SBPase",
415
+ fn=_mass_action_1s,
416
+ args=["kcat_SBPase", "E0_SBPase"],
417
+ )
418
+ m = m.add_derived(
419
+ "vmax_phosphoribulokinase",
420
+ fn=_mass_action_1s,
421
+ args=["kcat_phosphoribulokinase", "E0_phosphoribulokinase"],
422
+ )
423
+ m = m.add_derived(
424
+ "vmax_ex_pga",
425
+ fn=_mass_action_1s,
426
+ args=["kcat_N_translocator", "E0_N_translocator"],
427
+ )
428
+ m = m.add_derived(
429
+ "N_translocator",
430
+ fn=_rate_translocator,
431
+ args=[
432
+ "Orthophosphate",
433
+ "3PGA",
434
+ "GAP",
435
+ "DHAP",
436
+ "km_N_translocator_Orthophosphate (external)",
437
+ "Orthophosphate (external)",
438
+ "km_N_translocator_Orthophosphate",
439
+ "km_ex_pga",
440
+ "km_ex_gap",
441
+ "km_ex_dhap",
442
+ ],
443
+ )
444
+ m = m.add_derived(
445
+ "vmax_ex_g1p",
446
+ fn=_mass_action_1s,
447
+ args=["kcat_ex_g1p", "E0_ex_g1p"],
448
+ )
449
+ m = m.add_derived(
450
+ "vmax_atp_synthase",
451
+ fn=_mass_action_1s,
452
+ args=["kcat_atp_synthase", "E0_atp_synthase"],
453
+ )
454
+ m = m.add_reaction(
455
+ "rubisco_carboxylase",
456
+ fn=_rate_poolman_5i,
457
+ args=[
458
+ "RUBP",
459
+ "3PGA",
460
+ "CO2 (dissolved)",
461
+ "vmax_rubisco_carboxylase",
462
+ "km_rubisco_carboxylase_RUBP",
463
+ "km_rubisco_carboxylase_CO2 (dissolved)",
464
+ "ki_rubisco_carboxylase_3PGA",
465
+ "FBP",
466
+ "ki_rubisco_carboxylase_FBP",
467
+ "SBP",
468
+ "ki_rubisco_carboxylase_SBP",
469
+ "Orthophosphate",
470
+ "ki_rubisco_carboxylase_Orthophosphate",
471
+ "NADPH",
472
+ "ki_rubisco_carboxylase_NADPH",
473
+ ],
474
+ stoichiometry={"RUBP": -1.0, "3PGA": 2.0},
475
+ )
476
+ m = m.add_reaction(
477
+ "phosphoglycerate_kinase",
478
+ fn=_rapid_equilibrium_2s_2p,
479
+ args=[
480
+ "3PGA",
481
+ "ATP",
482
+ "BPGA",
483
+ "ADP",
484
+ "kre_phosphoglycerate_kinase",
485
+ "keq_phosphoglycerate_kinase",
486
+ ],
487
+ stoichiometry={"3PGA": -1.0, "ATP": -1.0, "BPGA": 1.0},
488
+ )
489
+ m = m.add_reaction(
490
+ "gadph",
491
+ fn=_rapid_equilibrium_3s_3p,
492
+ args=[
493
+ "BPGA",
494
+ "NADPH",
495
+ "protons",
496
+ "GAP",
497
+ "NADP",
498
+ "Orthophosphate",
499
+ "kre_gadph",
500
+ "keq_gadph",
501
+ ],
502
+ stoichiometry={"BPGA": -1.0, "GAP": 1.0},
503
+ )
504
+ m = m.add_reaction(
505
+ "triose_phosphate_isomerase",
506
+ fn=_rapid_equilibrium_1s_1p,
507
+ args=[
508
+ "GAP",
509
+ "DHAP",
510
+ "kre_triose_phosphate_isomerase",
511
+ "keq_triose_phosphate_isomerase",
512
+ ],
513
+ stoichiometry={"GAP": -1, "DHAP": 1},
514
+ )
515
+ m = m.add_reaction(
516
+ "aldolase_dhap_gap",
517
+ fn=_rapid_equilibrium_2s_1p,
518
+ args=["GAP", "DHAP", "FBP", "kre_aldolase_dhap_gap", "keq_aldolase_dhap_gap"],
519
+ stoichiometry={"GAP": -1, "DHAP": -1, "FBP": 1},
520
+ )
521
+ m = m.add_reaction(
522
+ "aldolase_dhap_e4p",
523
+ fn=_rapid_equilibrium_2s_1p,
524
+ args=["DHAP", "E4P", "SBP", "kre_aldolase_dhap_e4p", "keq_aldolase_dhap_e4p"],
525
+ stoichiometry={"DHAP": -1, "E4P": -1, "SBP": 1},
526
+ )
527
+ m = m.add_reaction(
528
+ "fbpase",
529
+ fn=_michaelis_menten_1s_2i,
530
+ args=[
531
+ "FBP",
532
+ "F6P",
533
+ "Orthophosphate",
534
+ "vmax_fbpase",
535
+ "km_fbpase_s",
536
+ "ki_fbpase_F6P",
537
+ "ki_fbpase_Orthophosphate",
538
+ ],
539
+ stoichiometry={"FBP": -1, "F6P": 1},
540
+ )
541
+ m = m.add_reaction(
542
+ "transketolase_gap_f6p",
543
+ fn=_rapid_equilibrium_2s_2p,
544
+ args=[
545
+ "GAP",
546
+ "F6P",
547
+ "E4P",
548
+ "X5P",
549
+ "kre_transketolase_gap_f6p",
550
+ "keq_transketolase_gap_f6p",
551
+ ],
552
+ stoichiometry={"GAP": -1, "F6P": -1, "E4P": 1, "X5P": 1},
553
+ )
554
+ m = m.add_reaction(
555
+ "transketolase_gap_s7p",
556
+ fn=_rapid_equilibrium_2s_2p,
557
+ args=[
558
+ "GAP",
559
+ "S7P",
560
+ "R5P",
561
+ "X5P",
562
+ "kre_transketolase_gap_s7p",
563
+ "keq_transketolase_gap_s7p",
564
+ ],
565
+ stoichiometry={"GAP": -1, "S7P": -1, "R5P": 1, "X5P": 1},
566
+ )
567
+ m = m.add_reaction(
568
+ "SBPase",
569
+ fn=_michaelis_menten_1s_1i,
570
+ args=[
571
+ "SBP",
572
+ "Orthophosphate",
573
+ "vmax_SBPase",
574
+ "km_SBPase_s",
575
+ "ki_SBPase_Orthophosphate",
576
+ ],
577
+ stoichiometry={"SBP": -1, "S7P": 1},
578
+ )
579
+ m = m.add_reaction(
580
+ "ribose_phosphate_isomerase",
581
+ fn=_rapid_equilibrium_1s_1p,
582
+ args=[
583
+ "R5P",
584
+ "RU5P",
585
+ "kre_ribose_phosphate_isomerase",
586
+ "keq_ribose_phosphate_isomerase",
587
+ ],
588
+ stoichiometry={"R5P": -1, "RU5P": 1},
589
+ )
590
+ m = m.add_reaction(
591
+ "ribulose_phosphate_epimerase",
592
+ fn=_rapid_equilibrium_1s_1p,
593
+ args=[
594
+ "X5P",
595
+ "RU5P",
596
+ "kre_ribulose_phosphate_epimerase",
597
+ "keq_ribulose_phosphate_epimerase",
598
+ ],
599
+ stoichiometry={"X5P": -1, "RU5P": 1},
600
+ )
601
+ m = m.add_reaction(
602
+ "phosphoribulokinase",
603
+ fn=_rate_prk,
604
+ args=[
605
+ "RU5P",
606
+ "ATP",
607
+ "Orthophosphate",
608
+ "3PGA",
609
+ "RUBP",
610
+ "ADP",
611
+ "vmax_phosphoribulokinase",
612
+ "km_phosphoribulokinase_RU5P",
613
+ "km_phosphoribulokinase_ATP",
614
+ "ki_phosphoribulokinase_3PGA",
615
+ "ki_phosphoribulokinase_RUBP",
616
+ "ki_phosphoribulokinase_Orthophosphate",
617
+ "ki_phosphoribulokinase_4",
618
+ "ki_phosphoribulokinase_5",
619
+ ],
620
+ stoichiometry={"RU5P": -1.0, "ATP": -1.0, "RUBP": 1.0},
621
+ )
622
+ m = m.add_reaction(
623
+ "g6pi",
624
+ fn=_rapid_equilibrium_1s_1p,
625
+ args=["F6P", "G6P", "kre_g6pi", "keq_g6pi"],
626
+ stoichiometry={"F6P": -1, "G6P": 1},
627
+ )
628
+ m = m.add_reaction(
629
+ "phosphoglucomutase",
630
+ fn=_rapid_equilibrium_1s_1p,
631
+ args=["G6P", "G1P", "kre_phosphoglucomutase", "keq_phosphoglucomutase"],
632
+ stoichiometry={"G6P": -1, "G1P": 1},
633
+ )
634
+ m = m.add_reaction(
635
+ "ex_pga",
636
+ fn=_rate_out,
637
+ args=["3PGA", "N_translocator", "vmax_ex_pga", "km_ex_pga"],
638
+ stoichiometry={"3PGA": -1},
639
+ )
640
+ m = m.add_reaction(
641
+ "ex_gap",
642
+ fn=_rate_out,
643
+ args=["GAP", "N_translocator", "vmax_ex_pga", "km_ex_gap"],
644
+ stoichiometry={"GAP": -1},
645
+ )
646
+ m = m.add_reaction(
647
+ "ex_dhap",
648
+ fn=_rate_out,
649
+ args=["DHAP", "N_translocator", "vmax_ex_pga", "km_ex_dhap"],
650
+ stoichiometry={"DHAP": -1},
651
+ )
652
+ m = m.add_reaction(
653
+ "ex_g1p",
654
+ fn=_rate_starch,
655
+ args=[
656
+ "G1P",
657
+ "ATP",
658
+ "ADP",
659
+ "Orthophosphate",
660
+ "3PGA",
661
+ "F6P",
662
+ "FBP",
663
+ "vmax_ex_g1p",
664
+ "km_ex_g1p_G1P",
665
+ "km_ex_g1p_ATP",
666
+ "ki_ex_g1p",
667
+ "ki_ex_g1p_3PGA",
668
+ "ki_ex_g1p_F6P",
669
+ "ki_ex_g1p_FBP",
670
+ ],
671
+ stoichiometry={"G1P": -1.0, "ATP": -1.0},
672
+ )
673
+ m = m.add_reaction(
674
+ "atp_synthase",
675
+ fn=_rate_atp_synthase_2000,
676
+ args=[
677
+ "ADP",
678
+ "Orthophosphate",
679
+ "vmax_atp_synthase",
680
+ "km_atp_synthase_ADP",
681
+ "km_atp_synthase_Orthophosphate",
682
+ ],
683
+ stoichiometry={"ATP": 1.0},
684
+ )
685
+ return m # noqa: RET504