modelbase 1.49.2__tar.gz → 1.49.3__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 (44) hide show
  1. {modelbase-1.49.2 → modelbase-1.49.3}/PKG-INFO +2 -1
  2. {modelbase-1.49.2 → modelbase-1.49.3}/README.md +1 -0
  3. {modelbase-1.49.2 → modelbase-1.49.3}/pyproject.toml +5 -1
  4. modelbase-1.49.3/setup.py +52 -0
  5. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/__init__.py +2 -1
  6. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/parametermixin.py +12 -1
  7. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/models/model.py +9 -0
  8. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/simulators/abstract_simulator.py +2 -0
  9. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/simulators/simulator.py +5 -1
  10. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/sbml/parser.py +1 -1
  11. modelbase-1.49.2/setup.py +0 -52
  12. {modelbase-1.49.2 → modelbase-1.49.3}/LICENSE +0 -0
  13. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/__init__.py +0 -0
  14. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/algebraicmixin.py +0 -0
  15. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/basemodel.py +0 -0
  16. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/compoundmixin.py +0 -0
  17. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/ratemixin.py +0 -0
  18. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/stoichiometricmixin.py +0 -0
  19. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/core/utils.py +0 -0
  20. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/__init__.py +0 -0
  21. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/integrators/__init__.py +0 -0
  22. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/integrators/abstract_integrator.py +0 -0
  23. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/integrators/int_assimulo.py +0 -0
  24. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/integrators/int_scipy.py +0 -0
  25. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/models/__init__.py +0 -0
  26. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/models/abstract_model.py +0 -0
  27. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/models/labelmodel.py +0 -0
  28. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/models/linearlabelmodel.py +0 -0
  29. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/simulators/__init__.py +0 -0
  30. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/simulators/labelsimulator.py +0 -0
  31. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/simulators/linearlabelsimulator.py +0 -0
  32. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/utils/__init__.py +0 -0
  33. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/utils/algebraicfunctions.py +0 -0
  34. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/utils/mca.py +0 -0
  35. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/utils/ratefunctions.py +0 -0
  36. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/ode/utils/ratelaws.py +0 -0
  37. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/py.typed +0 -0
  38. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/sbml/__init__.py +0 -0
  39. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/sbml/data.py +0 -0
  40. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/sbml/mathml.py +0 -0
  41. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/sbml/unit_conversion.py +0 -0
  42. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/typing.py +0 -0
  43. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/utils/__init__.py +0 -0
  44. {modelbase-1.49.2 → modelbase-1.49.3}/src/modelbase/utils/plotting.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modelbase
3
- Version: 1.49.2
3
+ Version: 1.49.3
4
4
  Summary: A package to build metabolic models
5
5
  Home-page: https://gitlab.com/qtb-hhu/modelbase-software
6
6
  License: GPL-3.0-or-later
@@ -54,6 +54,7 @@ Description-Content-Type: text/markdown
54
54
  [![PyPi](https://img.shields.io/pypi/v/modelbase)](https://pypi.org/project/modelbase/)
55
55
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
56
56
  [![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
57
+ [![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
57
58
  [![Downloads](https://pepy.tech/badge/modelbase)](https://pepy.tech/project/modelbase)
58
59
 
59
60
 
@@ -7,6 +7,7 @@
7
7
  [![PyPi](https://img.shields.io/pypi/v/modelbase)](https://pypi.org/project/modelbase/)
8
8
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
9
9
  [![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
10
+ [![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)
10
11
  [![Downloads](https://pepy.tech/badge/modelbase)](https://pepy.tech/project/modelbase)
11
12
 
12
13
 
@@ -8,6 +8,10 @@ requires = ["poetry-core>=1.0.0"]
8
8
  line-length = 90
9
9
  target-version = ['py310']
10
10
 
11
+
12
+ [tool.bandit]
13
+ skips = ["B101", "B301", "B403", "B404", "B603", "B607"]
14
+
11
15
  [tool.isort]
12
16
  honor_noqa = true
13
17
  import_heading_firstparty = ""
@@ -55,7 +59,7 @@ maintainers = ["Marvin van Aalst <marvin.vanaalst@gmail.com>"]
55
59
  name = "modelbase"
56
60
  readme = "README.md"
57
61
  repository = "https://gitlab.com/qtb-hhu/modelbase-software"
58
- version = "1.49.2"
62
+ version = "1.49.3"
59
63
 
60
64
  [tool.poetry.dependencies]
61
65
  black = "^22.12.0"
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ from setuptools import setup
3
+
4
+ package_dir = \
5
+ {'': 'src'}
6
+
7
+ packages = \
8
+ ['modelbase',
9
+ 'modelbase.core',
10
+ 'modelbase.ode',
11
+ 'modelbase.ode.integrators',
12
+ 'modelbase.ode.models',
13
+ 'modelbase.ode.simulators',
14
+ 'modelbase.ode.utils',
15
+ 'modelbase.sbml',
16
+ 'modelbase.utils']
17
+
18
+ package_data = \
19
+ {'': ['*']}
20
+
21
+ install_requires = \
22
+ ['black>=22.12.0,<23.0.0',
23
+ 'gitchangelog>=3.0.4,<4.0.0',
24
+ 'ipywidgets>=8.0.6,<9.0.0',
25
+ 'matplotlib>=3.7.1,<4.0.0',
26
+ 'numpy>=1.25.0,<2.0.0',
27
+ 'pandas>=2.0.2,<3.0.0',
28
+ 'python-libsbml>=5.20.1,<6.0.0',
29
+ 'scipy>=1.11.0,<2.0.0',
30
+ 'sympy>=1.9,<2.0',
31
+ 'tqdm>=4.65.0,<5.0.0',
32
+ 'typing-extensions>=4.6.3,<5.0.0']
33
+
34
+ setup_kwargs = {
35
+ 'name': 'modelbase',
36
+ 'version': '1.49.3',
37
+ 'description': 'A package to build metabolic models',
38
+ 'long_description': '# modelbase\n\n[![DOI](https://img.shields.io/badge/DOI-10.1186%2Fs12859--021--04122--7-blue)](https://doi.org/10.1186/s12859-021-04122-7)\n[![pipeline status](https://gitlab.com/qtb-hhu/modelbase-software/badges/main/pipeline.svg)](https://gitlab.com/qtb-hhu/modelbase-software/-/commits/main)\n[![coverage report](https://gitlab.com/qtb-hhu/modelbase-software/badges/main/coverage.svg)](https://gitlab.com/qtb-hhu/modelbase-software/-/commits/main)\n[![Documentation](https://img.shields.io/badge/Documentation-Gitlab-success)](https://qtb-hhu.gitlab.io/modelbase-software/)\n[![PyPi](https://img.shields.io/pypi/v/modelbase)](https://pypi.org/project/modelbase/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)\n[![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)\n[![Downloads](https://pepy.tech/badge/modelbase)](https://pepy.tech/project/modelbase)\n\n\nmodelbase is a python package to help you build and analyze dynamic mathematical models of biological systems. It has originally been designed for the simulation of metabolic systems, but can be used for virtually any processes, in which some substances get converted into others.\n\nmodelbase incorporates an easy construction method to define \'reactions\'. A rate law and the stoichiometry need to be specified, and the system of differential equations is assembled automatically.\n\nmodelbase allows \'algebraic modules\', which are useful to implement rapid equilibrium or quasi steady-state approximations. In the simplest instance, they allow easy incorporation of conserved quantities.\n\nmodelbase also allows a simple construction of isotope-specific models. This class contains a constructor method that automatically construct all isotope specific versions of a particular reaction. Very cool - check it out!\n\n## Release notes\n\nVersions 1.0 and 0.4.0 introduced changes not compatible with the previous official\nrelease 0.2.5. API changes are summarised in [this notebook](docs/source/api-changes.ipynb)\n\n[Version 0.4.5](https://gitlab.com/qtb-hhu/modelbase-software/-/tags/0.4.5) was the prior stable version\n\n[Version 0.2.5](https://gitlab.com/qtb-hhu/modelbase-software/-/tags/initial-release)\nis the official release for the submission of the\nmansucript "Building mathematical models of biological systems\nwith modelbase, a Python package for semi-automatic ODE assembly\nand construction of isotope-specific models" to the Journal of Open\nResearch Software.\n\nSee changelog.md for details on changes of earlier versions.\n\n## Installation\n\nIf you quickly want to test out modelbase, or do not require assimulo support, install modelbase via\n\n```bash\npip install modelbase\n```\n\nTo enable assimulo support, the easiest way is to install modelbase via conda. We also recommend using the conda-forge channels.\n\n```bash\n# recommended to avoid package clashes\nconda config --add channels conda-forge\n\n# Create a new environment (not necessary, but recommended)\nconda create -n mb39 python=3.9\nconda install -c conda-forge modelbase\n```\n\n## License\n\n[GPL 3](https://gitlab.com/qtb-hhu/modelbase-software/blob/main/LICENSE)\n\n## Documentation\n\nThe official documentation is hosted [here on gitlab](https://qtb-hhu.gitlab.io/modelbase-software/).\n\n## Issues and support\n\nIf you experience issues using the software please contact us through our [issues](https://gitlab.com/qtb-hhu/modelbase-software/issues) page.\n\n## Contributing to modelbase\n\nAll contributions, bug reports, bug fixes, documentation improvements, enhancements and ideas are welcome. See our [contribution guide](https://gitlab.com/qtb-hhu/modelbase-software/blob/main/CONTRIBUTING.md) for more information.\n\n## How to cite\n\nIf you use this software in your scientific work, please cite [this article](https://rdcu.be/ckOSa):\n\nvan Aalst, M., Ebenhöh, O. & Matuszyńska, A. Constructing and analysing dynamic models with modelbase v1.2.3: a software update. BMC Bioinformatics 22, 203 (2021)\n\n- [doi](https://doi.org/10.1186/s12859-021-04122-7)\n- [bibtex file](https://gitlab.com/qtb-hhu/modelbase-software/blob/main/citation.bibtex)\n',
39
+ 'author': 'Marvin van Aalst',
40
+ 'author_email': 'marvin.vanaalst@gmail.com',
41
+ 'maintainer': 'Marvin van Aalst',
42
+ 'maintainer_email': 'marvin.vanaalst@gmail.com',
43
+ 'url': 'https://gitlab.com/qtb-hhu/modelbase-software',
44
+ 'package_dir': package_dir,
45
+ 'packages': packages,
46
+ 'package_data': package_data,
47
+ 'install_requires': install_requires,
48
+ 'python_requires': '>=3.9,<3.13',
49
+ }
50
+
51
+
52
+ setup(**setup_kwargs)
@@ -7,9 +7,10 @@ __all__ = [
7
7
  "ParameterMixin",
8
8
  "RateMixin",
9
9
  "StoichiometricMixin",
10
+ "Readout",
10
11
  ]
11
12
 
12
- from .algebraicmixin import AlgebraicMixin
13
+ from .algebraicmixin import AlgebraicMixin, Readout
13
14
  from .basemodel import BaseModel
14
15
  from .compoundmixin import CompoundMixin
15
16
  from .parametermixin import ParameterMixin
@@ -148,8 +148,17 @@ class ParameterMixin(BaseModel):
148
148
  self._parameters[parameter_name] = parameter_value
149
149
  return self
150
150
 
151
- def scale_parameter(self, parameter_name: str, factor: float) -> Self:
151
+ def scale_parameter(
152
+ self,
153
+ parameter_name: str,
154
+ factor: float,
155
+ verbose: bool = False,
156
+ ) -> Self:
152
157
  self.update_parameter(parameter_name, self._parameters[parameter_name] * factor)
158
+ if verbose:
159
+ print(
160
+ f"Updating parameter {parameter_name} to {self.parameters[parameter_name]:.2e}"
161
+ )
153
162
  return self
154
163
 
155
164
  def update_parameters(
@@ -300,6 +309,7 @@ class ParameterMixin(BaseModel):
300
309
  )
301
310
  for parameter in parameters:
302
311
  self._derived_from_parameters.add(parameter)
312
+ self._check_and_insert_ids([parameter_name], context="add_derived_parameter")
303
313
 
304
314
  # Initial calculation
305
315
  # self.add_parameter(
@@ -339,6 +349,7 @@ class ParameterMixin(BaseModel):
339
349
  if all(i not in j["parameters"] for j in self.derived_parameters.values()):
340
350
  self._derived_from_parameters.remove(i)
341
351
  self._sort_derived_parameters()
352
+ self._remove_ids([parameter_name])
342
353
  return self
343
354
 
344
355
  def store_parameters_to_file(
@@ -25,6 +25,7 @@ from ...core import (
25
25
  CompoundMixin,
26
26
  ParameterMixin,
27
27
  RateMixin,
28
+ Readout,
28
29
  StoichiometricMixin,
29
30
  )
30
31
  from ...core.utils import convert_id_to_sbml
@@ -204,6 +205,7 @@ class Model(_AbstractRateModel, BaseModel):
204
205
  rates: Dict[str, dict] | None = None,
205
206
  stoichiometries: Dict[str, dict] | None = None,
206
207
  functions: Dict[str, Callable] | None = None,
208
+ readouts: Dict[str, Readout] | None = None,
207
209
  ) -> Self:
208
210
  if compounds is not None:
209
211
  self.add_compounds(compounds)
@@ -217,6 +219,9 @@ class Model(_AbstractRateModel, BaseModel):
217
219
  self.add_stoichiometries(stoichiometries)
218
220
  if functions is not None:
219
221
  self.add_functions(functions)
222
+ if readouts is not None:
223
+ for name, readout in readouts.items():
224
+ self.add_readout(name, readout.function, readout.args)
220
225
  return self
221
226
 
222
227
  def update(
@@ -226,6 +231,7 @@ class Model(_AbstractRateModel, BaseModel):
226
231
  rates: Dict[str, dict] | None = None,
227
232
  stoichiometries: Dict[str, dict] | None = None,
228
233
  functions: Dict[str, Callable] | None = None,
234
+ readouts: Dict[str, Readout] | None = None,
229
235
  ) -> Self:
230
236
  if parameters is not None:
231
237
  self.update_parameters(parameters)
@@ -237,6 +243,9 @@ class Model(_AbstractRateModel, BaseModel):
237
243
  self.update_stoichiometries(stoichiometries)
238
244
  if functions is not None:
239
245
  self.update_functions(functions)
246
+ if readouts is not None:
247
+ for name, readout in readouts.items():
248
+ self.add_readout(name, readout.function, readout.args)
240
249
  return self
241
250
 
242
251
  def remove(
@@ -574,11 +574,13 @@ class _BaseRateSimulator(Generic[RATE_MODEL_TYPE], _BaseSimulator[RATE_MODEL_TYP
574
574
  self,
575
575
  parameter_name: str,
576
576
  factor: float,
577
+ verbose: bool = False,
577
578
  ) -> Self:
578
579
  """Scale a model parameter."""
579
580
  self.model.scale_parameter(
580
581
  parameter_name=parameter_name,
581
582
  factor=factor,
583
+ verbose=verbose,
582
584
  )
583
585
  return self
584
586
 
@@ -179,6 +179,7 @@ class _Simulate(_BaseRateSimulator[Model]):
179
179
  consuming_names: list[str] = []
180
180
  time = self.get_time()
181
181
  fluxes = self.get_fluxes_df()
182
+ title = compound if title is None else title
182
183
  if fluxes is None or time is None:
183
184
  return None, None
184
185
  for rate_name, factor in self.model.stoichiometries_by_compounds[
@@ -192,7 +193,10 @@ class _Simulate(_BaseRateSimulator[Model]):
192
193
  consuming_names.append(rate_name)
193
194
 
194
195
  return plot_grid(
195
- plot_groups=[(time, np.array(producing).T), (time, np.array(consuming).T)],
196
+ plot_groups=[
197
+ (time, np.array(producing).T),
198
+ (time, np.array(consuming).T),
199
+ ],
196
200
  legend_groups=[producing_names, consuming_names],
197
201
  xlabels=xlabel,
198
202
  ylabels=ylabel,
@@ -903,7 +903,7 @@ class Parser:
903
903
  ]
904
904
  )
905
905
  try:
906
- exec(func_str, globals(), None)
906
+ exec(func_str, globals(), None) # nosec
907
907
  except SyntaxError as e:
908
908
  raise SyntaxError(f"Invalid function definition: {func_str}") from e
909
909
  python_func = globals()[func.sbml_id]
modelbase-1.49.2/setup.py DELETED
@@ -1,52 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- from setuptools import setup
3
-
4
- package_dir = \
5
- {'': 'src'}
6
-
7
- packages = \
8
- ['modelbase',
9
- 'modelbase.core',
10
- 'modelbase.ode',
11
- 'modelbase.ode.integrators',
12
- 'modelbase.ode.models',
13
- 'modelbase.ode.simulators',
14
- 'modelbase.ode.utils',
15
- 'modelbase.sbml',
16
- 'modelbase.utils']
17
-
18
- package_data = \
19
- {'': ['*']}
20
-
21
- install_requires = \
22
- ['black>=22.12.0,<23.0.0',
23
- 'gitchangelog>=3.0.4,<4.0.0',
24
- 'ipywidgets>=8.0.6,<9.0.0',
25
- 'matplotlib>=3.7.1,<4.0.0',
26
- 'numpy>=1.25.0,<2.0.0',
27
- 'pandas>=2.0.2,<3.0.0',
28
- 'python-libsbml>=5.20.1,<6.0.0',
29
- 'scipy>=1.11.0,<2.0.0',
30
- 'sympy>=1.9,<2.0',
31
- 'tqdm>=4.65.0,<5.0.0',
32
- 'typing-extensions>=4.6.3,<5.0.0']
33
-
34
- setup_kwargs = {
35
- 'name': 'modelbase',
36
- 'version': '1.49.2',
37
- 'description': 'A package to build metabolic models',
38
- 'long_description': '# modelbase\n\n[![DOI](https://img.shields.io/badge/DOI-10.1186%2Fs12859--021--04122--7-blue)](https://doi.org/10.1186/s12859-021-04122-7)\n[![pipeline status](https://gitlab.com/qtb-hhu/modelbase-software/badges/main/pipeline.svg)](https://gitlab.com/qtb-hhu/modelbase-software/-/commits/main)\n[![coverage report](https://gitlab.com/qtb-hhu/modelbase-software/badges/main/coverage.svg)](https://gitlab.com/qtb-hhu/modelbase-software/-/commits/main)\n[![Documentation](https://img.shields.io/badge/Documentation-Gitlab-success)](https://qtb-hhu.gitlab.io/modelbase-software/)\n[![PyPi](https://img.shields.io/pypi/v/modelbase)](https://pypi.org/project/modelbase/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)\n[![Downloads](https://pepy.tech/badge/modelbase)](https://pepy.tech/project/modelbase)\n\n\nmodelbase is a python package to help you build and analyze dynamic mathematical models of biological systems. It has originally been designed for the simulation of metabolic systems, but can be used for virtually any processes, in which some substances get converted into others.\n\nmodelbase incorporates an easy construction method to define \'reactions\'. A rate law and the stoichiometry need to be specified, and the system of differential equations is assembled automatically.\n\nmodelbase allows \'algebraic modules\', which are useful to implement rapid equilibrium or quasi steady-state approximations. In the simplest instance, they allow easy incorporation of conserved quantities.\n\nmodelbase also allows a simple construction of isotope-specific models. This class contains a constructor method that automatically construct all isotope specific versions of a particular reaction. Very cool - check it out!\n\n## Release notes\n\nVersions 1.0 and 0.4.0 introduced changes not compatible with the previous official\nrelease 0.2.5. API changes are summarised in [this notebook](docs/source/api-changes.ipynb)\n\n[Version 0.4.5](https://gitlab.com/qtb-hhu/modelbase-software/-/tags/0.4.5) was the prior stable version\n\n[Version 0.2.5](https://gitlab.com/qtb-hhu/modelbase-software/-/tags/initial-release)\nis the official release for the submission of the\nmansucript "Building mathematical models of biological systems\nwith modelbase, a Python package for semi-automatic ODE assembly\nand construction of isotope-specific models" to the Journal of Open\nResearch Software.\n\nSee changelog.md for details on changes of earlier versions.\n\n## Installation\n\nIf you quickly want to test out modelbase, or do not require assimulo support, install modelbase via\n\n```bash\npip install modelbase\n```\n\nTo enable assimulo support, the easiest way is to install modelbase via conda. We also recommend using the conda-forge channels.\n\n```bash\n# recommended to avoid package clashes\nconda config --add channels conda-forge\n\n# Create a new environment (not necessary, but recommended)\nconda create -n mb39 python=3.9\nconda install -c conda-forge modelbase\n```\n\n## License\n\n[GPL 3](https://gitlab.com/qtb-hhu/modelbase-software/blob/main/LICENSE)\n\n## Documentation\n\nThe official documentation is hosted [here on gitlab](https://qtb-hhu.gitlab.io/modelbase-software/).\n\n## Issues and support\n\nIf you experience issues using the software please contact us through our [issues](https://gitlab.com/qtb-hhu/modelbase-software/issues) page.\n\n## Contributing to modelbase\n\nAll contributions, bug reports, bug fixes, documentation improvements, enhancements and ideas are welcome. See our [contribution guide](https://gitlab.com/qtb-hhu/modelbase-software/blob/main/CONTRIBUTING.md) for more information.\n\n## How to cite\n\nIf you use this software in your scientific work, please cite [this article](https://rdcu.be/ckOSa):\n\nvan Aalst, M., Ebenhöh, O. & Matuszyńska, A. Constructing and analysing dynamic models with modelbase v1.2.3: a software update. BMC Bioinformatics 22, 203 (2021)\n\n- [doi](https://doi.org/10.1186/s12859-021-04122-7)\n- [bibtex file](https://gitlab.com/qtb-hhu/modelbase-software/blob/main/citation.bibtex)\n',
39
- 'author': 'Marvin van Aalst',
40
- 'author_email': 'marvin.vanaalst@gmail.com',
41
- 'maintainer': 'Marvin van Aalst',
42
- 'maintainer_email': 'marvin.vanaalst@gmail.com',
43
- 'url': 'https://gitlab.com/qtb-hhu/modelbase-software',
44
- 'package_dir': package_dir,
45
- 'packages': packages,
46
- 'package_data': package_data,
47
- 'install_requires': install_requires,
48
- 'python_requires': '>=3.9,<3.13',
49
- }
50
-
51
-
52
- setup(**setup_kwargs)
File without changes