mxlmodels 1.0.0__tar.gz → 1.2.0__tar.gz

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 (97) hide show
  1. mxlmodels-1.2.0/.gitignore +118 -0
  2. mxlmodels-1.2.0/.pre-commit-config.yaml +24 -0
  3. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/PKG-INFO +1 -1
  4. mxlmodels-1.2.0/docs/_dynamic_enterobactin.ipynb +49 -0
  5. mxlmodels-1.2.0/docs/_population_dynamics.ipynb +41 -0
  6. mxlmodels-1.2.0/docs/_tripartite_dynamics.ipynb +41 -0
  7. mxlmodels-1.2.0/docs/ebeling2026.ipynb +41 -0
  8. mxlmodels-1.2.0/docs/elowitz2000_repressilator.ipynb +43 -0
  9. mxlmodels-1.2.0/docs/lotka_volterra.ipynb +33 -0
  10. mxlmodels-1.2.0/docs/matuszynska2016_npq.ipynb +41 -0
  11. mxlmodels-1.2.0/docs/matuszynska2016_phd.ipynb +27 -0
  12. mxlmodels-1.2.0/docs/matuszynska2019.ipynb +33 -0
  13. mxlmodels-1.2.0/docs/nguyen2026_tomato.ipynb +69 -0
  14. mxlmodels-1.2.0/docs/pfennig2024_synechocystis.ipynb +58 -0
  15. mxlmodels-1.2.0/docs/poolman2000.ipynb +27 -0
  16. mxlmodels-1.2.0/docs/prigogine1968_brusselator.ipynb +43 -0
  17. mxlmodels-1.2.0/docs/saadat2021.ipynb +27 -0
  18. mxlmodels-1.2.0/docs/selkov1968_oscillator.ipynb +46 -0
  19. mxlmodels-1.2.0/docs/yokota1985.ipynb +27 -0
  20. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/pyproject.toml +19 -18
  21. mxlmodels-1.2.0/src/mxlmodels/__init__.py +55 -0
  22. mxlmodels-1.0.0/src/mxlmodels/dyn_entro.py → mxlmodels-1.2.0/src/mxlmodels/_dynamic_enterobactin.py +1 -1
  23. mxlmodels-1.2.0/src/mxlmodels/_names.py +235 -0
  24. mxlmodels-1.0.0/src/mxlmodels/pop_dyn.py → mxlmodels-1.2.0/src/mxlmodels/_population_dynamics.py +1 -1
  25. mxlmodels-1.0.0/src/mxlmodels/trip_dyn.py → mxlmodels-1.2.0/src/mxlmodels/_tripartite_dynamics.py +1 -1
  26. mxlmodels-1.2.0/src/mxlmodels/data/__init__.py +5 -0
  27. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/__init__.py +96 -0
  28. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/README.md +41 -0
  29. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/cool_white_led.csv +302 -0
  30. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/fluorescent_lamp.csv +302 -0
  31. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/halogen_lamp.csv +302 -0
  32. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/incandescent_bulb.csv +302 -0
  33. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/solar.csv +302 -0
  34. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/lights/warm_white_led.csv +302 -0
  35. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/ocp_absorption.csv +302 -0
  36. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/per_pigment/README.md +39 -0
  37. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/per_pigment/allophycocyanin.csv +302 -0
  38. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/per_pigment/beta_carotene.csv +302 -0
  39. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/per_pigment/chla.csv +302 -0
  40. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/per_pigment/phycocyanin.csv +302 -0
  41. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/photosystem_composition.csv +5 -0
  42. mxlmodels-1.2.0/src/mxlmodels/data/pfennig2024/pigment_concentrations.csv +5 -0
  43. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/ebeling2026.py +1 -1
  44. mxlmodels-1.2.0/src/mxlmodels/elowitz2000_repressilator.py +152 -0
  45. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/lotka_volterra_v1.py +1 -1
  46. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/lotka_volterra_v2.py +1 -1
  47. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/matuszynska2016_npq.py +1 -1
  48. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/matuszynska2016_phd.py +1 -1
  49. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/matuszynska2019.py +1 -1
  50. mxlmodels-1.2.0/src/mxlmodels/nguyen2026_tomato.py +1173 -0
  51. mxlmodels-1.2.0/src/mxlmodels/pfennig2024_synechocystis.py +2197 -0
  52. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/poolman2000.py +3 -1
  53. mxlmodels-1.2.0/src/mxlmodels/prigogine1968_brusselator.py +74 -0
  54. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/saadat2021.py +1 -1
  55. mxlmodels-1.2.0/src/mxlmodels/selkov1968_oscillator.py +61 -0
  56. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/yokota1985.py +1 -1
  57. mxlmodels-1.2.0/tests/__init__.py +0 -0
  58. mxlmodels-1.2.0/tests/test_dynamic_enterobactin.py +16 -0
  59. mxlmodels-1.2.0/tests/test_ebeling_2026.py +58 -0
  60. mxlmodels-1.2.0/tests/test_elowitz2000_repressilator.py +23 -0
  61. mxlmodels-1.2.0/tests/test_import.py +19 -0
  62. mxlmodels-1.2.0/tests/test_lotka_volterra_v1.py +14 -0
  63. mxlmodels-1.2.0/tests/test_lotka_volterra_v2.py +14 -0
  64. mxlmodels-1.2.0/tests/test_matuszynska2016_npq.py +23 -0
  65. mxlmodels-1.2.0/tests/test_matuszynska2016_phd.py +25 -0
  66. mxlmodels-1.2.0/tests/test_matuszynska2019.py +41 -0
  67. mxlmodels-1.2.0/tests/test_nguyen2026_tomato.py +29 -0
  68. mxlmodels-1.2.0/tests/test_pfennig2024_synechocystis.py +47 -0
  69. mxlmodels-1.2.0/tests/test_poolman2000.py +33 -0
  70. mxlmodels-1.2.0/tests/test_population_dynamics.py +14 -0
  71. mxlmodels-1.2.0/tests/test_prigogine1968_brusselator.py +14 -0
  72. mxlmodels-1.2.0/tests/test_saadat2021.py +47 -0
  73. mxlmodels-1.2.0/tests/test_selkov1968_glycolysis_oscillator.py +14 -0
  74. mxlmodels-1.2.0/tests/test_tripartite_dynamics.py +16 -0
  75. mxlmodels-1.2.0/tests/test_yokota1985.py +23 -0
  76. mxlmodels-1.2.0/uv.lock +3013 -0
  77. mxlmodels-1.0.0/.github/workflows/docs.yml +0 -43
  78. mxlmodels-1.0.0/.gitignore +0 -15
  79. mxlmodels-1.0.0/.pre-commit-config.yaml +0 -10
  80. mxlmodels-1.0.0/src/mxlmodels/__init__.py +0 -34
  81. mxlmodels-1.0.0/uv.lock +0 -1502
  82. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.gitattributes +0 -0
  83. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  84. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/ISSUE_TEMPLATE/discussion.md +0 -0
  85. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  86. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/dependabot.yml +0 -0
  87. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/workflows/python-publish.yml +0 -0
  88. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/workflows/release-to-slack.yml +0 -0
  89. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.github/workflows/tests.yml +0 -0
  90. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.python-version +0 -0
  91. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/.vscode/settings.json +0 -0
  92. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/CONTRIBUTING.md +0 -0
  93. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/LICENSE +0 -0
  94. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/README.md +0 -0
  95. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/SECURITY.md +0 -0
  96. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/docs/assets/logo.png +0 -0
  97. {mxlmodels-1.0.0 → mxlmodels-1.2.0}/src/mxlmodels/py.typed +0 -0
@@ -0,0 +1,118 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+ MANIFEST
27
+
28
+ # PyInstaller
29
+ # Usually these files are written by a python script from a template
30
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
31
+ *.manifest
32
+ *.spec
33
+
34
+ # Installer logs
35
+ pip-log.txt
36
+ pip-delete-this-directory.txt
37
+
38
+ # Unit test / coverage reports
39
+ htmlcov/
40
+ .tox/
41
+ coverage.json
42
+ .coverage
43
+ .coverage.*
44
+ .cache
45
+ nosetests.xml
46
+ coverage.xml
47
+ *.cover
48
+ .hypothesis/
49
+ .pytest_cache/
50
+ .ruff_cache/
51
+
52
+ # Translations
53
+ *.mo
54
+ *.pot
55
+
56
+ # Django stuff:
57
+ *.log
58
+ local_settings.py
59
+ db.sqlite3
60
+
61
+ # Flask stuff:
62
+ instance/
63
+ .webassets-cache
64
+
65
+ # Scrapy stuff:
66
+ .scrapy
67
+
68
+ # Sphinx documentation
69
+ docs/_build/
70
+
71
+ # PyBuilder
72
+ target/
73
+
74
+ # Jupyter Notebook
75
+ .ipynb_checkpoints
76
+
77
+ # celery beat schedule file
78
+ celerybeat-schedule
79
+
80
+ # SageMath parsed files
81
+ *.sage.py
82
+
83
+ # Environments
84
+ .env
85
+ .venv
86
+ env/
87
+ venv/
88
+ ENV/
89
+ env.bak/
90
+ venv.bak/
91
+
92
+ # Spyder project settings
93
+ .spyderproject
94
+ .spyproject
95
+
96
+ # Rope project settings
97
+ .ropeproject
98
+
99
+ # mkdocs documentation
100
+ /site
101
+
102
+ # mypy
103
+ .mypy_cache/
104
+
105
+ # temporary files and folders
106
+ *temp*
107
+ tmp
108
+ src/mxlbricks
109
+ src/mxlweb
110
+
111
+ # pixi environments
112
+ .pixi
113
+ *.egg-info
114
+
115
+ # AI config files
116
+ .github/copilot-instructions.md
117
+ .claude
118
+ CLAUDE.md
@@ -0,0 +1,24 @@
1
+ repos:
2
+ # Lint & format
3
+ - repo: https://github.com/astral-sh/ruff-pre-commit
4
+ rev: v0.15.12
5
+ hooks:
6
+ - id: ruff
7
+ types_or: [ python, pyi, jupyter ]
8
+ args: [ --fix ]
9
+ - id: ruff-format
10
+ types_or: [ python, pyi, jupyter ]
11
+
12
+ - repo: https://github.com/aio-libs/sort-all
13
+ rev: v1.3.0
14
+ hooks:
15
+ - id: sort-all
16
+
17
+ - repo: local
18
+ hooks:
19
+ - id: jupyter-nb-clear-output
20
+ name: jupyter-nb-clear-output
21
+ files: \.ipynb$
22
+ stages: [ pre-commit ]
23
+ language: system
24
+ entry: uvx jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mxlmodels
3
- Version: 1.0.0
3
+ Version: 1.2.0
4
4
  Summary: MxlModels is a Python package of reference mechanistic models.
5
5
  Author-email: Marvin van Aalst <marvin.vanaalst@gmail.com>
6
6
  Maintainer-email: Marvin van Aalst <marvin.vanaalst@gmail.com>
@@ -0,0 +1,49 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "323f3026",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_dynamic_enterobactin, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_dynamic_enterobactin()).simulate(0.2).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2, ax3) = plot.grid_layout(3, n_cols=3)\n",
15
+ "_ = plot.lines(res.get_variables(include_derived_variables=False).iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(\n",
17
+ " res.get_args(\n",
18
+ " include_variables=False,\n",
19
+ " include_derived_variables=True,\n",
20
+ " include_reactions=False,\n",
21
+ " ).iloc[:, :10],\n",
22
+ " ax=ax2,\n",
23
+ ")\n",
24
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax3)"
25
+ ]
26
+ }
27
+ ],
28
+ "metadata": {
29
+ "kernelspec": {
30
+ "display_name": "git-mxl-meta (3.13.12)",
31
+ "language": "python",
32
+ "name": "python3"
33
+ },
34
+ "language_info": {
35
+ "codemirror_mode": {
36
+ "name": "ipython",
37
+ "version": 3
38
+ },
39
+ "file_extension": ".py",
40
+ "mimetype": "text/x-python",
41
+ "name": "python",
42
+ "nbconvert_exporter": "python",
43
+ "pygments_lexer": "ipython3",
44
+ "version": "3.13.12"
45
+ }
46
+ },
47
+ "nbformat": 4,
48
+ "nbformat_minor": 5
49
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "323f3026",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_population_dynamics, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_population_dynamics()).simulate(1).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "kernelspec": {
22
+ "display_name": "git-mxl-meta (3.13.12)",
23
+ "language": "python",
24
+ "name": "python3"
25
+ },
26
+ "language_info": {
27
+ "codemirror_mode": {
28
+ "name": "ipython",
29
+ "version": 3
30
+ },
31
+ "file_extension": ".py",
32
+ "mimetype": "text/x-python",
33
+ "name": "python",
34
+ "nbconvert_exporter": "python",
35
+ "pygments_lexer": "ipython3",
36
+ "version": "3.13.12"
37
+ }
38
+ },
39
+ "nbformat": 4,
40
+ "nbformat_minor": 5
41
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "86589195",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_tripartite_dynamics, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_tripartite_dynamics()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "kernelspec": {
22
+ "display_name": "git-mxl-meta (3.13.12)",
23
+ "language": "python",
24
+ "name": "python3"
25
+ },
26
+ "language_info": {
27
+ "codemirror_mode": {
28
+ "name": "ipython",
29
+ "version": 3
30
+ },
31
+ "file_extension": ".py",
32
+ "mimetype": "text/x-python",
33
+ "name": "python",
34
+ "nbconvert_exporter": "python",
35
+ "pygments_lexer": "ipython3",
36
+ "version": "3.13.12"
37
+ }
38
+ },
39
+ "nbformat": 4,
40
+ "nbformat_minor": 5
41
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "c496798a",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_ebeling_2026, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_ebeling_2026()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "kernelspec": {
22
+ "display_name": "git-mxl-meta (3.13.12)",
23
+ "language": "python",
24
+ "name": "python3"
25
+ },
26
+ "language_info": {
27
+ "codemirror_mode": {
28
+ "name": "ipython",
29
+ "version": 3
30
+ },
31
+ "file_extension": ".py",
32
+ "mimetype": "text/x-python",
33
+ "name": "python",
34
+ "nbconvert_exporter": "python",
35
+ "pygments_lexer": "ipython3",
36
+ "version": "3.13.12"
37
+ }
38
+ },
39
+ "nbformat": 4,
40
+ "nbformat_minor": 5
41
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "a5b6e12b",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_elowitz2000_repressilator, plot\n",
11
+ "\n",
12
+ "res = (\n",
13
+ " Simulator(get_elowitz2000_repressilator()).simulate(10).get_result().unwrap_or_err()\n",
14
+ ")\n",
15
+ "\n",
16
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
17
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
18
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
19
+ ]
20
+ }
21
+ ],
22
+ "metadata": {
23
+ "kernelspec": {
24
+ "display_name": "git-mxl-meta (3.13.12)",
25
+ "language": "python",
26
+ "name": "python3"
27
+ },
28
+ "language_info": {
29
+ "codemirror_mode": {
30
+ "name": "ipython",
31
+ "version": 3
32
+ },
33
+ "file_extension": ".py",
34
+ "mimetype": "text/x-python",
35
+ "name": "python",
36
+ "nbconvert_exporter": "python",
37
+ "pygments_lexer": "ipython3",
38
+ "version": "3.13.12"
39
+ }
40
+ },
41
+ "nbformat": 4,
42
+ "nbformat_minor": 5
43
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "023f3645",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_lotka_volterra_v1, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_lotka_volterra_v1()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "kernelspec": {
22
+ "display_name": "git-mxl-meta (3.13.12)",
23
+ "language": "python",
24
+ "name": "python3"
25
+ },
26
+ "language_info": {
27
+ "name": "python",
28
+ "version": "3.13.12"
29
+ }
30
+ },
31
+ "nbformat": 4,
32
+ "nbformat_minor": 5
33
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "f006da9a",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_matuszynska2016_npq, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_matuszynska2016_npq()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "kernelspec": {
22
+ "display_name": "git-mxl-meta (3.13.12)",
23
+ "language": "python",
24
+ "name": "python3"
25
+ },
26
+ "language_info": {
27
+ "codemirror_mode": {
28
+ "name": "ipython",
29
+ "version": 3
30
+ },
31
+ "file_extension": ".py",
32
+ "mimetype": "text/x-python",
33
+ "name": "python",
34
+ "nbconvert_exporter": "python",
35
+ "pygments_lexer": "ipython3",
36
+ "version": "3.13.12"
37
+ }
38
+ },
39
+ "nbformat": 4,
40
+ "nbformat_minor": 5
41
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "5f7d0e15",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_matuszynska2016_phd, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_matuszynska2016_phd()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "language_info": {
22
+ "name": "python"
23
+ }
24
+ },
25
+ "nbformat": 4,
26
+ "nbformat_minor": 5
27
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "f5cc7bbf",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_matuszynska2019, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_matuszynska2019()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "kernelspec": {
22
+ "display_name": "git-mxl-meta (3.13.12)",
23
+ "language": "python",
24
+ "name": "python3"
25
+ },
26
+ "language_info": {
27
+ "name": "python",
28
+ "version": "3.13.12"
29
+ }
30
+ },
31
+ "nbformat": 4,
32
+ "nbformat_minor": 5
33
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "db264b37",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_nguyen2026_tomato, plot\n",
11
+ "\n",
12
+ "res = (\n",
13
+ " Simulator(get_nguyen2026_tomato())\n",
14
+ " .update_variables(\n",
15
+ " {\n",
16
+ " \"B0\": 1.9587919653281205,\n",
17
+ " \"B1\": 5.308607566760226e-08,\n",
18
+ " \"B2\": 0.5412079539026975,\n",
19
+ " \"PQH2\": 14.753583247530687,\n",
20
+ " \"ATP\": 23.681707158359565,\n",
21
+ " \"H_lumen\": 0.004056077821448256,\n",
22
+ " \"delta_psi\": 0.02512099319259713,\n",
23
+ " \"Vx\": 0.9500845858289113,\n",
24
+ " \"PsbS\": 0.6863197475682336,\n",
25
+ " \"ATPactivity\": 1.0,\n",
26
+ " \"K_lumen\": 400.0,\n",
27
+ " \"K_stroma\": 3200.0,\n",
28
+ " }\n",
29
+ " )\n",
30
+ " .simulate(10)\n",
31
+ " .get_result()\n",
32
+ " .unwrap_or_err()\n",
33
+ ")\n",
34
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 4))\n",
35
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
36
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": null,
42
+ "id": "97322ab1",
43
+ "metadata": {},
44
+ "outputs": [],
45
+ "source": []
46
+ }
47
+ ],
48
+ "metadata": {
49
+ "kernelspec": {
50
+ "display_name": "git-mxl-meta (3.13.12)",
51
+ "language": "python",
52
+ "name": "python3"
53
+ },
54
+ "language_info": {
55
+ "codemirror_mode": {
56
+ "name": "ipython",
57
+ "version": 3
58
+ },
59
+ "file_extension": ".py",
60
+ "mimetype": "text/x-python",
61
+ "name": "python",
62
+ "nbconvert_exporter": "python",
63
+ "pygments_lexer": "ipython3",
64
+ "version": "3.13.12"
65
+ }
66
+ },
67
+ "nbformat": 4,
68
+ "nbformat_minor": 5
69
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "6b8b849e",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, data, get_pfennig2024_synechocystis, plot\n",
11
+ "\n",
12
+ "dfs = data.pfennig2024.load()\n",
13
+ "\n",
14
+ "model = get_pfennig2024_synechocystis(\n",
15
+ " light_spectrum=dfs.light_spectrum,\n",
16
+ " light_spectrum_measure=dfs.light_spectrum_measure,\n",
17
+ " ocp_absorption=dfs.ocp_absorption_per_wavelength,\n",
18
+ " abs_coef=dfs.pigment_abs_coef_per_wavelength,\n",
19
+ " molar_masses=dfs.molar_masses,\n",
20
+ " ps_comp=dfs.ps_comp,\n",
21
+ " pigment_content=dfs.pigment_content,\n",
22
+ ")\n",
23
+ "\n",
24
+ "res = Simulator(model).simulate(10).get_result().unwrap_or_err()\n",
25
+ "fig, ax = plot.lines(res.fluxes.loc[:, [\"vPS2\"]])"
26
+ ]
27
+ },
28
+ {
29
+ "cell_type": "code",
30
+ "execution_count": null,
31
+ "id": "3e475022",
32
+ "metadata": {},
33
+ "outputs": [],
34
+ "source": []
35
+ }
36
+ ],
37
+ "metadata": {
38
+ "kernelspec": {
39
+ "display_name": "git-mxl-meta (3.13.12)",
40
+ "language": "python",
41
+ "name": "python3"
42
+ },
43
+ "language_info": {
44
+ "codemirror_mode": {
45
+ "name": "ipython",
46
+ "version": 3
47
+ },
48
+ "file_extension": ".py",
49
+ "mimetype": "text/x-python",
50
+ "name": "python",
51
+ "nbconvert_exporter": "python",
52
+ "pygments_lexer": "ipython3",
53
+ "version": "3.13.12"
54
+ }
55
+ },
56
+ "nbformat": 4,
57
+ "nbformat_minor": 5
58
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "5eb68a6a",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from mxlmodels import Simulator, get_poolman2000, plot\n",
11
+ "\n",
12
+ "res = Simulator(get_poolman2000()).simulate(10).get_result().unwrap_or_err()\n",
13
+ "\n",
14
+ "fig, (ax1, ax2) = plot.two_axes(figsize=(12, 6))\n",
15
+ "_ = plot.lines(res.variables.iloc[:, :10], ax=ax1)\n",
16
+ "_ = plot.lines(res.fluxes.iloc[:, :10], ax=ax2)"
17
+ ]
18
+ }
19
+ ],
20
+ "metadata": {
21
+ "language_info": {
22
+ "name": "python"
23
+ }
24
+ },
25
+ "nbformat": 4,
26
+ "nbformat_minor": 5
27
+ }