PyAntiGen 1.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 (39) hide show
  1. pyantigen-1.0/LICENSE +21 -0
  2. pyantigen-1.0/MANIFEST.in +8 -0
  3. pyantigen-1.0/PKG-INFO +106 -0
  4. pyantigen-1.0/PyAntiGen.egg-info/PKG-INFO +106 -0
  5. pyantigen-1.0/PyAntiGen.egg-info/SOURCES.txt +37 -0
  6. pyantigen-1.0/PyAntiGen.egg-info/dependency_links.txt +1 -0
  7. pyantigen-1.0/PyAntiGen.egg-info/top_level.txt +1 -0
  8. pyantigen-1.0/README.md +88 -0
  9. pyantigen-1.0/framework/AntimonyGen.py +48 -0
  10. pyantigen-1.0/framework/RxnDict_to_antimony.py +594 -0
  11. pyantigen-1.0/framework/TelluriumGen.py +14 -0
  12. pyantigen-1.0/framework/__init__.py +0 -0
  13. pyantigen-1.0/framework/antimony_utils.py +294 -0
  14. pyantigen-1.0/framework/cli.py +208 -0
  15. pyantigen-1.0/framework/data_interpolation.py +340 -0
  16. pyantigen-1.0/framework/isotopomer_tools.py +41 -0
  17. pyantigen-1.0/framework/model_generation.py +46 -0
  18. pyantigen-1.0/framework/models.py +189 -0
  19. pyantigen-1.0/framework/module_base.py +42 -0
  20. pyantigen-1.0/framework/pyantigen.py +51 -0
  21. pyantigen-1.0/framework/rate_laws.py +101 -0
  22. pyantigen-1.0/framework/reaction_creation.py +43 -0
  23. pyantigen-1.0/framework/template/Example/AntiGen_paths.py +23 -0
  24. pyantigen-1.0/framework/template/Example/Example_generate.py +30 -0
  25. pyantigen-1.0/framework/template/Example/Example_run.py +37 -0
  26. pyantigen-1.0/framework/template/Example/Modules/Data.py +36 -0
  27. pyantigen-1.0/framework/template/Example/Modules/Events.py +14 -0
  28. pyantigen-1.0/framework/template/Example/Modules/Experiment.py +160 -0
  29. pyantigen-1.0/framework/template/Example/Modules/Loss_config.py +12 -0
  30. pyantigen-1.0/framework/template/Example/Modules/Observed_species.py +3 -0
  31. pyantigen-1.0/framework/template/Example/Modules/Optimizer_settings.py +25 -0
  32. pyantigen-1.0/framework/template/Example/Modules/Plots.py +51 -0
  33. pyantigen-1.0/framework/template/Example/Modules/Solver_settings.py +15 -0
  34. pyantigen-1.0/framework/template/Example/Modules/Update_parameters.py +26 -0
  35. pyantigen-1.0/framework/template/data/ADneg.csv +27 -0
  36. pyantigen-1.0/framework/template/data/ADpos.csv +27 -0
  37. pyantigen-1.0/pyproject.toml +28 -0
  38. pyantigen-1.0/setup.cfg +4 -0
  39. pyantigen-1.0/setup.py +29 -0
pyantigen-1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 UW Elbert Lab
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,8 @@
1
+ # Only ship the installable package and minimal support files.
2
+ # Exclude tests and dev artifacts from the source distribution
3
+ # so they are not downloaded when users pip install.
4
+ include README.md
5
+ prune tests
6
+ prune .git
7
+ recursive-exclude __pycache__ *
8
+ recursive-exclude *.pyc *
pyantigen-1.0/PKG-INFO ADDED
@@ -0,0 +1,106 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyAntiGen
3
+ Version: 1.0
4
+ Summary: Short one-line description of what PyAntiGen does
5
+ Author: Open Source Contributor
6
+ Author-email: Don <you@example.com>
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/you/PyAntiGen
9
+ Keywords: alzheimer,immunology,simulation
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.9
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Dynamic: author
17
+ Dynamic: license-file
18
+
19
+ # PyAntiGen
20
+
21
+ PyAntiGen is a declarative, object-oriented framework for generating compartmental biological models in Antimony format. It is designed to abstract away the repetitive boilerplate of defining reactions and compartments manually, allowing researchers to build complex, scalable models using clean Python syntax.
22
+
23
+ ## Features
24
+
25
+ - **Object-Oriented Modules:** Encapsulate tissues, flows, synthesis, and excretion into reusable Python classes.
26
+ - **Dynamic Registration:** Automatically binds reactions, compartments, and species to the global model state when a module is instantiated.
27
+ - **Project Scaffolding:** Includes a CLI command to instantly spin up new modeling projects with all necessary directories.
28
+ - **Isotope Tracking:** Natively supports tracking labeled isotopes and generating corresponding parallel reactions.
29
+
30
+ ## Installation
31
+
32
+ You can install PyAntiGen globally into your preferred Python environment by cloning this repository and running pip:
33
+
34
+ ```bash
35
+ git clone https://github.com/elbert5770/PyAntiGen.git
36
+ cd PyAntiGen
37
+ pip install -e .
38
+ ```
39
+
40
+ ## Quick Start: Creating a New Model
41
+
42
+ Because PyAntiGen is installed as a system-level Python package, you don't need a copy of the framework files in your working directory.
43
+
44
+ To start a brand new modeling workspace, just open a terminal and navigate to a folder where you want it to live (not PyAntiGen) and run:
45
+
46
+ ```bash
47
+ pyantigen-create MyNewModel
48
+ ```
49
+
50
+ This will automatically scaffold the following project directory:
51
+ ```text
52
+ MyNewModel/
53
+ ├── .agents/
54
+ │ └── skills/ (agent skills, e.g. module generation, ODE conversion)
55
+ ├── scripts/
56
+ │ ├── Example/ (full example: generate, run, optimize + Modules/)
57
+ │ │ ├── Example_generate.py
58
+ │ │ ├── Example_run.py
59
+ │ │ ├── Example_optimize.py
60
+ │ │ └── Modules/ (Data, AntimonyGen, Plots, Simulate, Optimize, Experiment, Events)
61
+ │ └── MyNewModel/ (same structure, Modules/ left empty for your code)
62
+ │ ├── MyNewModel_generate.py
63
+ │ ├── MyNewModel_run.py
64
+ │ ├── MyNewModel_optimize.py
65
+ │ └── Modules/ (Data, AntimonyGen, Plots, Simulate, Optimize, Experiment, Events)
66
+ ├── modules/
67
+ │ └── __init__.py (plus Basic/ for the example)
68
+ ├── data/ (Example experiment CSVs copied for the example)
69
+ ├── antimony_models/
70
+ │ └── Example/ (Example_parameters.csv, Example_InitialConditions.csv, etc.)
71
+ ├── generated/
72
+ │ └── Example/ (reaction dict, rules, etc. after generate)
73
+ ├── results/
74
+ │ └── Example/ (plots from Example_run.py)
75
+ ├── SBML_models/
76
+ └── pyantigen_settings.json (e.g. archive_with_timestamp: false)
77
+ ```
78
+
79
+ All model-specific files are grouped under folders named by `MODEL_NAME` (e.g. `Example` or your project name). From `MyNewModel/scripts/Example/` run:
80
+
81
+ ```bash
82
+ python Example_generate.py
83
+ ```
84
+
85
+ This generates the model and writes outputs to `antimony_models/Example/` and `generated/Example/`. Edit parameters if desired in `antimony_models/Example/Example_parameters.csv`, then run:
86
+
87
+ ```bash
88
+ python Example_run.py
89
+ ```
90
+
91
+ For parameter fitting against data, run:
92
+
93
+ ```bash
94
+ python Example_optimize.py
95
+ ```
96
+
97
+ Your own model lives under `scripts/MyNewModel/` with the same files as the Example. Modify the code for your model in `scripts/MyNewModel/Modules/` and `scripts/MyNewModel/MyNewModel_generate.py`, `scripts/MyNewModel/MyNewModel_run.py`, and `scripts/MyNewModel/MyNewModel_optimize.py'. Your problem will also require new modules in folder 'modules'.
98
+
99
+ Keeping the generation and simulation steps separate gives you time to adjust parameters and inspect the generated files before running.
100
+
101
+ ### Running from an IDE (Cursor / VS Code)
102
+
103
+ The **Play** button uses whichever Python interpreter is currently selected. If your environment (conda/venv) isn’t loaded, the run may fail with import or path errors.
104
+
105
+ 1. **Select the correct interpreter**: `Ctrl+Shift+P` (or `Cmd+Shift+P` on macOS) → **Python: Select Interpreter** → choose the environment where you ran `pip install -e .` (e.g. your conda or venv).
106
+ 2. **Run from project root**: Open the *project* folder (e.g. `MyNewModel`) as the workspace. Use **Run and Debug** (or Play on `scripts/Example/Example_run.py`); the project root is resolved from the script location so `antimony_models/Example/`, `generated/Example/`, and `results/Example/` resolve correctly.
@@ -0,0 +1,106 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyAntiGen
3
+ Version: 1.0
4
+ Summary: Short one-line description of what PyAntiGen does
5
+ Author: Open Source Contributor
6
+ Author-email: Don <you@example.com>
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/you/PyAntiGen
9
+ Keywords: alzheimer,immunology,simulation
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.9
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Dynamic: author
17
+ Dynamic: license-file
18
+
19
+ # PyAntiGen
20
+
21
+ PyAntiGen is a declarative, object-oriented framework for generating compartmental biological models in Antimony format. It is designed to abstract away the repetitive boilerplate of defining reactions and compartments manually, allowing researchers to build complex, scalable models using clean Python syntax.
22
+
23
+ ## Features
24
+
25
+ - **Object-Oriented Modules:** Encapsulate tissues, flows, synthesis, and excretion into reusable Python classes.
26
+ - **Dynamic Registration:** Automatically binds reactions, compartments, and species to the global model state when a module is instantiated.
27
+ - **Project Scaffolding:** Includes a CLI command to instantly spin up new modeling projects with all necessary directories.
28
+ - **Isotope Tracking:** Natively supports tracking labeled isotopes and generating corresponding parallel reactions.
29
+
30
+ ## Installation
31
+
32
+ You can install PyAntiGen globally into your preferred Python environment by cloning this repository and running pip:
33
+
34
+ ```bash
35
+ git clone https://github.com/elbert5770/PyAntiGen.git
36
+ cd PyAntiGen
37
+ pip install -e .
38
+ ```
39
+
40
+ ## Quick Start: Creating a New Model
41
+
42
+ Because PyAntiGen is installed as a system-level Python package, you don't need a copy of the framework files in your working directory.
43
+
44
+ To start a brand new modeling workspace, just open a terminal and navigate to a folder where you want it to live (not PyAntiGen) and run:
45
+
46
+ ```bash
47
+ pyantigen-create MyNewModel
48
+ ```
49
+
50
+ This will automatically scaffold the following project directory:
51
+ ```text
52
+ MyNewModel/
53
+ ├── .agents/
54
+ │ └── skills/ (agent skills, e.g. module generation, ODE conversion)
55
+ ├── scripts/
56
+ │ ├── Example/ (full example: generate, run, optimize + Modules/)
57
+ │ │ ├── Example_generate.py
58
+ │ │ ├── Example_run.py
59
+ │ │ ├── Example_optimize.py
60
+ │ │ └── Modules/ (Data, AntimonyGen, Plots, Simulate, Optimize, Experiment, Events)
61
+ │ └── MyNewModel/ (same structure, Modules/ left empty for your code)
62
+ │ ├── MyNewModel_generate.py
63
+ │ ├── MyNewModel_run.py
64
+ │ ├── MyNewModel_optimize.py
65
+ │ └── Modules/ (Data, AntimonyGen, Plots, Simulate, Optimize, Experiment, Events)
66
+ ├── modules/
67
+ │ └── __init__.py (plus Basic/ for the example)
68
+ ├── data/ (Example experiment CSVs copied for the example)
69
+ ├── antimony_models/
70
+ │ └── Example/ (Example_parameters.csv, Example_InitialConditions.csv, etc.)
71
+ ├── generated/
72
+ │ └── Example/ (reaction dict, rules, etc. after generate)
73
+ ├── results/
74
+ │ └── Example/ (plots from Example_run.py)
75
+ ├── SBML_models/
76
+ └── pyantigen_settings.json (e.g. archive_with_timestamp: false)
77
+ ```
78
+
79
+ All model-specific files are grouped under folders named by `MODEL_NAME` (e.g. `Example` or your project name). From `MyNewModel/scripts/Example/` run:
80
+
81
+ ```bash
82
+ python Example_generate.py
83
+ ```
84
+
85
+ This generates the model and writes outputs to `antimony_models/Example/` and `generated/Example/`. Edit parameters if desired in `antimony_models/Example/Example_parameters.csv`, then run:
86
+
87
+ ```bash
88
+ python Example_run.py
89
+ ```
90
+
91
+ For parameter fitting against data, run:
92
+
93
+ ```bash
94
+ python Example_optimize.py
95
+ ```
96
+
97
+ Your own model lives under `scripts/MyNewModel/` with the same files as the Example. Modify the code for your model in `scripts/MyNewModel/Modules/` and `scripts/MyNewModel/MyNewModel_generate.py`, `scripts/MyNewModel/MyNewModel_run.py`, and `scripts/MyNewModel/MyNewModel_optimize.py'. Your problem will also require new modules in folder 'modules'.
98
+
99
+ Keeping the generation and simulation steps separate gives you time to adjust parameters and inspect the generated files before running.
100
+
101
+ ### Running from an IDE (Cursor / VS Code)
102
+
103
+ The **Play** button uses whichever Python interpreter is currently selected. If your environment (conda/venv) isn’t loaded, the run may fail with import or path errors.
104
+
105
+ 1. **Select the correct interpreter**: `Ctrl+Shift+P` (or `Cmd+Shift+P` on macOS) → **Python: Select Interpreter** → choose the environment where you ran `pip install -e .` (e.g. your conda or venv).
106
+ 2. **Run from project root**: Open the *project* folder (e.g. `MyNewModel`) as the workspace. Use **Run and Debug** (or Play on `scripts/Example/Example_run.py`); the project root is resolved from the script location so `antimony_models/Example/`, `generated/Example/`, and `results/Example/` resolve correctly.
@@ -0,0 +1,37 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ setup.py
6
+ PyAntiGen.egg-info/PKG-INFO
7
+ PyAntiGen.egg-info/SOURCES.txt
8
+ PyAntiGen.egg-info/dependency_links.txt
9
+ PyAntiGen.egg-info/top_level.txt
10
+ framework/AntimonyGen.py
11
+ framework/RxnDict_to_antimony.py
12
+ framework/TelluriumGen.py
13
+ framework/__init__.py
14
+ framework/antimony_utils.py
15
+ framework/cli.py
16
+ framework/data_interpolation.py
17
+ framework/isotopomer_tools.py
18
+ framework/model_generation.py
19
+ framework/models.py
20
+ framework/module_base.py
21
+ framework/pyantigen.py
22
+ framework/rate_laws.py
23
+ framework/reaction_creation.py
24
+ framework/template/Example/AntiGen_paths.py
25
+ framework/template/Example/Example_generate.py
26
+ framework/template/Example/Example_run.py
27
+ framework/template/Example/Modules/Data.py
28
+ framework/template/Example/Modules/Events.py
29
+ framework/template/Example/Modules/Experiment.py
30
+ framework/template/Example/Modules/Loss_config.py
31
+ framework/template/Example/Modules/Observed_species.py
32
+ framework/template/Example/Modules/Optimizer_settings.py
33
+ framework/template/Example/Modules/Plots.py
34
+ framework/template/Example/Modules/Solver_settings.py
35
+ framework/template/Example/Modules/Update_parameters.py
36
+ framework/template/data/ADneg.csv
37
+ framework/template/data/ADpos.csv
@@ -0,0 +1 @@
1
+ framework
@@ -0,0 +1,88 @@
1
+ # PyAntiGen
2
+
3
+ PyAntiGen is a declarative, object-oriented framework for generating compartmental biological models in Antimony format. It is designed to abstract away the repetitive boilerplate of defining reactions and compartments manually, allowing researchers to build complex, scalable models using clean Python syntax.
4
+
5
+ ## Features
6
+
7
+ - **Object-Oriented Modules:** Encapsulate tissues, flows, synthesis, and excretion into reusable Python classes.
8
+ - **Dynamic Registration:** Automatically binds reactions, compartments, and species to the global model state when a module is instantiated.
9
+ - **Project Scaffolding:** Includes a CLI command to instantly spin up new modeling projects with all necessary directories.
10
+ - **Isotope Tracking:** Natively supports tracking labeled isotopes and generating corresponding parallel reactions.
11
+
12
+ ## Installation
13
+
14
+ You can install PyAntiGen globally into your preferred Python environment by cloning this repository and running pip:
15
+
16
+ ```bash
17
+ git clone https://github.com/elbert5770/PyAntiGen.git
18
+ cd PyAntiGen
19
+ pip install -e .
20
+ ```
21
+
22
+ ## Quick Start: Creating a New Model
23
+
24
+ Because PyAntiGen is installed as a system-level Python package, you don't need a copy of the framework files in your working directory.
25
+
26
+ To start a brand new modeling workspace, just open a terminal and navigate to a folder where you want it to live (not PyAntiGen) and run:
27
+
28
+ ```bash
29
+ pyantigen-create MyNewModel
30
+ ```
31
+
32
+ This will automatically scaffold the following project directory:
33
+ ```text
34
+ MyNewModel/
35
+ ├── .agents/
36
+ │ └── skills/ (agent skills, e.g. module generation, ODE conversion)
37
+ ├── scripts/
38
+ │ ├── Example/ (full example: generate, run, optimize + Modules/)
39
+ │ │ ├── Example_generate.py
40
+ │ │ ├── Example_run.py
41
+ │ │ ├── Example_optimize.py
42
+ │ │ └── Modules/ (Data, AntimonyGen, Plots, Simulate, Optimize, Experiment, Events)
43
+ │ └── MyNewModel/ (same structure, Modules/ left empty for your code)
44
+ │ ├── MyNewModel_generate.py
45
+ │ ├── MyNewModel_run.py
46
+ │ ├── MyNewModel_optimize.py
47
+ │ └── Modules/ (Data, AntimonyGen, Plots, Simulate, Optimize, Experiment, Events)
48
+ ├── modules/
49
+ │ └── __init__.py (plus Basic/ for the example)
50
+ ├── data/ (Example experiment CSVs copied for the example)
51
+ ├── antimony_models/
52
+ │ └── Example/ (Example_parameters.csv, Example_InitialConditions.csv, etc.)
53
+ ├── generated/
54
+ │ └── Example/ (reaction dict, rules, etc. after generate)
55
+ ├── results/
56
+ │ └── Example/ (plots from Example_run.py)
57
+ ├── SBML_models/
58
+ └── pyantigen_settings.json (e.g. archive_with_timestamp: false)
59
+ ```
60
+
61
+ All model-specific files are grouped under folders named by `MODEL_NAME` (e.g. `Example` or your project name). From `MyNewModel/scripts/Example/` run:
62
+
63
+ ```bash
64
+ python Example_generate.py
65
+ ```
66
+
67
+ This generates the model and writes outputs to `antimony_models/Example/` and `generated/Example/`. Edit parameters if desired in `antimony_models/Example/Example_parameters.csv`, then run:
68
+
69
+ ```bash
70
+ python Example_run.py
71
+ ```
72
+
73
+ For parameter fitting against data, run:
74
+
75
+ ```bash
76
+ python Example_optimize.py
77
+ ```
78
+
79
+ Your own model lives under `scripts/MyNewModel/` with the same files as the Example. Modify the code for your model in `scripts/MyNewModel/Modules/` and `scripts/MyNewModel/MyNewModel_generate.py`, `scripts/MyNewModel/MyNewModel_run.py`, and `scripts/MyNewModel/MyNewModel_optimize.py'. Your problem will also require new modules in folder 'modules'.
80
+
81
+ Keeping the generation and simulation steps separate gives you time to adjust parameters and inspect the generated files before running.
82
+
83
+ ### Running from an IDE (Cursor / VS Code)
84
+
85
+ The **Play** button uses whichever Python interpreter is currently selected. If your environment (conda/venv) isn’t loaded, the run may fail with import or path errors.
86
+
87
+ 1. **Select the correct interpreter**: `Ctrl+Shift+P` (or `Cmd+Shift+P` on macOS) → **Python: Select Interpreter** → choose the environment where you ran `pip install -e .` (e.g. your conda or venv).
88
+ 2. **Run from project root**: Open the *project* folder (e.g. `MyNewModel`) as the workspace. Use **Run and Debug** (or Play on `scripts/Example/Example_run.py`); the project root is resolved from the script location so `antimony_models/Example/`, `generated/Example/`, and `results/Example/` resolve correctly.
@@ -0,0 +1,48 @@
1
+ import os
2
+
3
+
4
+ # from Model_Modules.Model_Events import generate_silk_events_from_data
5
+
6
+ from framework.antimony_utils import load_antimony_files
7
+
8
+ def AntimonyGen(MODEL_NAME, repo_root=None):
9
+ if repo_root is None:
10
+ current_dir = os.path.dirname(os.path.abspath(__file__))
11
+ # Fallback to current directory if not provided
12
+ repo_root = current_dir
13
+ data_path = os.path.join(repo_root, "data")
14
+ plot_path = os.path.normpath(os.path.join(repo_root, "results", MODEL_NAME))
15
+ if not os.path.exists(plot_path):
16
+ os.makedirs(plot_path)
17
+
18
+
19
+
20
+ event_block = ''
21
+
22
+
23
+ model_text = load_antimony_files(MODEL_NAME, repo_root)
24
+
25
+ if not model_text.strip():
26
+ raise RuntimeError(
27
+ f"No model content loaded. Generate the model first: python {MODEL_NAME}_generate.py"
28
+ )
29
+
30
+ events_path = os.path.join(repo_root, "generated", MODEL_NAME, MODEL_NAME + "_events.txt")
31
+
32
+ models_path = os.path.join(repo_root, "antimony_models", MODEL_NAME, f"{MODEL_NAME}_InitialConditions.csv")
33
+
34
+ project_root = os.path.join(repo_root, "Projects", MODEL_NAME)
35
+
36
+ paths = {
37
+ "MODEL_NAME": MODEL_NAME,
38
+ "data_path": data_path,
39
+ "plot_path": plot_path,
40
+ "repo_root": repo_root,
41
+ "events_path": events_path,
42
+ "models_path": models_path,
43
+ "project_root": project_root
44
+ }
45
+
46
+ return model_text,paths
47
+
48
+