mxlpy 0.18.0__py3-none-any.whl → 0.20.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.
Files changed (51) hide show
  1. mxlpy/__init__.py +13 -9
  2. mxlpy/compare.py +240 -0
  3. mxlpy/experimental/diff.py +16 -4
  4. mxlpy/fit.py +6 -11
  5. mxlpy/fns.py +37 -42
  6. mxlpy/identify.py +10 -3
  7. mxlpy/integrators/__init__.py +4 -3
  8. mxlpy/integrators/int_assimulo.py +16 -9
  9. mxlpy/integrators/int_scipy.py +13 -9
  10. mxlpy/label_map.py +7 -3
  11. mxlpy/linear_label_map.py +4 -2
  12. mxlpy/mc.py +5 -14
  13. mxlpy/mca.py +4 -4
  14. mxlpy/meta/__init__.py +6 -4
  15. mxlpy/meta/codegen_latex.py +180 -87
  16. mxlpy/meta/codegen_modebase.py +3 -1
  17. mxlpy/meta/codegen_py.py +11 -3
  18. mxlpy/meta/source_tools.py +9 -5
  19. mxlpy/model.py +187 -100
  20. mxlpy/nn/__init__.py +24 -5
  21. mxlpy/nn/_keras.py +92 -0
  22. mxlpy/nn/_torch.py +25 -18
  23. mxlpy/npe/__init__.py +21 -16
  24. mxlpy/npe/_keras.py +326 -0
  25. mxlpy/npe/_torch.py +56 -60
  26. mxlpy/parallel.py +5 -2
  27. mxlpy/parameterise.py +11 -3
  28. mxlpy/plot.py +205 -52
  29. mxlpy/report.py +33 -8
  30. mxlpy/sbml/__init__.py +3 -3
  31. mxlpy/sbml/_data.py +7 -6
  32. mxlpy/sbml/_export.py +8 -1
  33. mxlpy/sbml/_mathml.py +8 -7
  34. mxlpy/sbml/_name_conversion.py +5 -1
  35. mxlpy/scan.py +14 -19
  36. mxlpy/simulator.py +34 -31
  37. mxlpy/surrogates/__init__.py +25 -17
  38. mxlpy/surrogates/_keras.py +139 -0
  39. mxlpy/surrogates/_poly.py +25 -10
  40. mxlpy/surrogates/_qss.py +34 -0
  41. mxlpy/surrogates/_torch.py +50 -32
  42. mxlpy/symbolic/__init__.py +5 -3
  43. mxlpy/symbolic/strikepy.py +5 -2
  44. mxlpy/symbolic/symbolic_model.py +14 -5
  45. mxlpy/types.py +61 -120
  46. {mxlpy-0.18.0.dist-info → mxlpy-0.20.0.dist-info}/METADATA +25 -24
  47. mxlpy-0.20.0.dist-info/RECORD +55 -0
  48. mxlpy/nn/_tensorflow.py +0 -0
  49. mxlpy-0.18.0.dist-info/RECORD +0 -51
  50. {mxlpy-0.18.0.dist-info → mxlpy-0.20.0.dist-info}/WHEEL +0 -0
  51. {mxlpy-0.18.0.dist-info → mxlpy-0.20.0.dist-info}/licenses/LICENSE +0 -0
mxlpy/types.py CHANGED
@@ -17,9 +17,13 @@ Classes:
17
17
  from __future__ import annotations
18
18
 
19
19
  from abc import abstractmethod
20
+ from collections.abc import Callable, Iterable, Iterator, Mapping
20
21
  from dataclasses import dataclass, field
22
+ from typing import TYPE_CHECKING, Any, ParamSpec, Protocol, TypeVar, cast
21
23
 
24
+ import numpy as np
22
25
  import pandas as pd
26
+ from numpy.typing import NDArray
23
27
 
24
28
  __all__ = [
25
29
  "AbstractEstimator",
@@ -27,7 +31,6 @@ __all__ = [
27
31
  "Array",
28
32
  "ArrayLike",
29
33
  "Derived",
30
- "Float",
31
34
  "IntegratorProtocol",
32
35
  "IntegratorType",
33
36
  "McSteadyStates",
@@ -46,15 +49,7 @@ __all__ = [
46
49
  "unwrap2",
47
50
  ]
48
51
 
49
- from collections.abc import Callable, Iterator, Mapping
50
- from typing import TYPE_CHECKING, Any, ParamSpec, Protocol, TypeVar, cast
51
-
52
- import numpy as np
53
- import numpy.typing as npt
54
- from numpy.typing import NDArray
55
-
56
- type Float = npt.NDArray[np.floating[Any]] | float
57
- type RateFn = Callable[..., Float]
52
+ type RateFn = Callable[..., float]
58
53
  type Array = NDArray[np.floating[Any]]
59
54
  type ArrayLike = NDArray[np.floating[Any]] | list[float]
60
55
 
@@ -159,7 +154,7 @@ class Derived:
159
154
  fn: RateFn
160
155
  args: list[str]
161
156
 
162
- def calculate(self, dependent: dict[str, float]) -> float:
157
+ def calculate(self, dependent: dict[str, Any]) -> float:
163
158
  """Calculate the derived value.
164
159
 
165
160
  Args:
@@ -171,7 +166,7 @@ class Derived:
171
166
  """
172
167
  return cast(float, self.fn(*(dependent[arg] for arg in self.args)))
173
168
 
174
- def calculate_inpl(self, name: str, dependent: dict[str, float]) -> None:
169
+ def calculate_inpl(self, name: str, dependent: dict[str, Any]) -> None:
175
170
  """Calculate the derived value in place.
176
171
 
177
172
  Args:
@@ -181,20 +176,6 @@ class Derived:
181
176
  """
182
177
  dependent[name] = cast(float, self.fn(*(dependent[arg] for arg in self.args)))
183
178
 
184
- def calculate_inpl_time_course(self, name: str, dependent: pd.DataFrame) -> None:
185
- """Calculate the derived value in place.
186
-
187
- Args:
188
- name: Name of the derived variable.
189
- dependent: Dictionary of dependent variables.
190
-
191
- """
192
- try:
193
- dependent[name] = self.fn(*dependent.loc[:, self.args].to_numpy().T)
194
- except ValueError: # e.g. numpy.where
195
- sub = dependent.loc[:, self.args].to_numpy()
196
- dependent[name] = [self.fn(*row) for row in sub]
197
-
198
179
 
199
180
  @dataclass(kw_only=True, slots=True)
200
181
  class Readout:
@@ -203,7 +184,7 @@ class Readout:
203
184
  fn: RateFn
204
185
  args: list[str]
205
186
 
206
- def calculate(self, dependent: dict[str, float]) -> float:
187
+ def calculate(self, dependent: dict[str, Any]) -> float:
207
188
  """Calculate the derived value.
208
189
 
209
190
  Args:
@@ -215,8 +196,8 @@ class Readout:
215
196
  """
216
197
  return cast(float, self.fn(*(dependent[arg] for arg in self.args)))
217
198
 
218
- def calculate_inpl(self, name: str, dependent: dict[str, float]) -> None:
219
- """Calculate the readout in place.
199
+ def calculate_inpl(self, name: str, dependent: dict[str, Any]) -> None:
200
+ """Calculate the reaction in place.
220
201
 
221
202
  Args:
222
203
  name: Name of the derived variable.
@@ -225,20 +206,6 @@ class Readout:
225
206
  """
226
207
  dependent[name] = cast(float, self.fn(*(dependent[arg] for arg in self.args)))
227
208
 
228
- def calculate_inpl_time_course(self, name: str, dependent: pd.DataFrame) -> None:
229
- """Calculate the derived value in place.
230
-
231
- Args:
232
- name: Name of the derived variable.
233
- dependent: Dictionary of dependent variables.
234
-
235
- """
236
- try:
237
- dependent[name] = self.fn(*dependent.loc[:, self.args].to_numpy().T)
238
- except ValueError: # e.g. numpy.where
239
- sub = dependent.loc[:, self.args].to_numpy()
240
- dependent[name] = [self.fn(*row) for row in sub]
241
-
242
209
 
243
210
  @dataclass(kw_only=True, slots=True)
244
211
  class Reaction:
@@ -255,7 +222,7 @@ class Reaction:
255
222
 
256
223
  return [k for k in self.args if k in include and k not in exclude]
257
224
 
258
- def calculate(self, dependent: dict[str, float]) -> float:
225
+ def calculate(self, dependent: dict[str, Any]) -> float:
259
226
  """Calculate the derived value.
260
227
 
261
228
  Args:
@@ -267,7 +234,7 @@ class Reaction:
267
234
  """
268
235
  return cast(float, self.fn(*(dependent[arg] for arg in self.args)))
269
236
 
270
- def calculate_inpl(self, name: str, dependent: dict[str, float]) -> None:
237
+ def calculate_inpl(self, name: str, dependent: dict[str, Any]) -> None:
271
238
  """Calculate the reaction in place.
272
239
 
273
240
  Args:
@@ -277,19 +244,57 @@ class Reaction:
277
244
  """
278
245
  dependent[name] = cast(float, self.fn(*(dependent[arg] for arg in self.args)))
279
246
 
280
- def calculate_inpl_time_course(self, name: str, dependent: pd.DataFrame) -> None:
281
- """Calculate the derived value in place.
282
247
 
283
- Args:
284
- name: Name of the derived variable.
285
- dependent: Dictionary of dependent variables.
248
+ @dataclass(kw_only=True)
249
+ class AbstractSurrogate:
250
+ """Abstract base class for surrogate models.
286
251
 
287
- """
288
- try:
289
- dependent[name] = self.fn(*dependent.loc[:, self.args].to_numpy().T)
290
- except ValueError: # e.g. numpy.where
291
- sub = dependent.loc[:, self.args].to_numpy()
292
- dependent[name] = [self.fn(*row) for row in sub]
252
+ Attributes:
253
+ inputs: List of input variable names.
254
+ stoichiometries: Dictionary mapping reaction names to stoichiometries.
255
+
256
+ Methods:
257
+ predict: Abstract method to predict outputs based on input data.
258
+
259
+ """
260
+
261
+ args: list[str]
262
+ outputs: list[str]
263
+ stoichiometries: dict[str, dict[str, float | Derived]] = field(default_factory=dict)
264
+
265
+ @abstractmethod
266
+ def predict(
267
+ self, args: dict[str, float | pd.Series | pd.DataFrame]
268
+ ) -> dict[str, float]:
269
+ """Predict outputs based on input data."""
270
+
271
+ def calculate_inpl(
272
+ self,
273
+ name: str, # noqa: ARG002, for API compatibility
274
+ args: dict[str, float | pd.Series | pd.DataFrame],
275
+ ) -> None:
276
+ """Predict outputs based on input data."""
277
+ args |= self.predict(args=args)
278
+
279
+
280
+ @dataclass(kw_only=True)
281
+ class MockSurrogate(AbstractSurrogate):
282
+ """Mock surrogate model for testing purposes."""
283
+
284
+ fn: Callable[..., Iterable[float]]
285
+
286
+ def predict(
287
+ self,
288
+ args: dict[str, float | pd.Series | pd.DataFrame],
289
+ ) -> dict[str, float]:
290
+ """Predict outputs based on input data."""
291
+ return dict(
292
+ zip(
293
+ self.outputs,
294
+ self.fn(*(args[i] for i in self.args)),
295
+ strict=True,
296
+ )
297
+ ) # type: ignore
293
298
 
294
299
 
295
300
  @dataclass(kw_only=True, slots=True)
@@ -429,70 +434,6 @@ class ProtocolByPars:
429
434
  return cast(pd.DataFrame, mean.unstack().T)
430
435
 
431
436
 
432
- @dataclass(kw_only=True)
433
- class AbstractSurrogate:
434
- """Abstract base class for surrogate models.
435
-
436
- Attributes:
437
- inputs: List of input variable names.
438
- stoichiometries: Dictionary mapping reaction names to stoichiometries.
439
-
440
- Methods:
441
- predict: Abstract method to predict outputs based on input data.
442
-
443
- """
444
-
445
- args: list[str]
446
- outputs: list[str]
447
- stoichiometries: dict[str, dict[str, float]] = field(default_factory=dict)
448
-
449
- @abstractmethod
450
- def predict_raw(self, y: np.ndarray) -> np.ndarray:
451
- """Predict outputs based on input data."""
452
-
453
- def predict(self, y: np.ndarray) -> dict[str, float]:
454
- """Predict outputs based on input data."""
455
- return dict(
456
- zip(
457
- self.outputs,
458
- self.predict_raw(y),
459
- strict=True,
460
- )
461
- )
462
-
463
- def calculate_inpl(
464
- self,
465
- name: str, # noqa: ARG002, for API compatibility
466
- args: dict[str, float],
467
- ) -> None:
468
- """Predict outputs based on input data."""
469
- args |= self.predict(np.array([args[arg] for arg in self.args]))
470
-
471
- def calculate_inpl_time_course(
472
- self,
473
- name: str, # noqa: ARG002, for API compatibility
474
- args: pd.DataFrame,
475
- ) -> None:
476
- """Predict outputs based on input data."""
477
- args[self.outputs] = pd.DataFrame(
478
- [self.predict(y) for y in args.loc[:, self.args].to_numpy()],
479
- index=args.index,
480
- dtype=float,
481
- )
482
-
483
-
484
- @dataclass(kw_only=True)
485
- class MockSurrogate(AbstractSurrogate):
486
- """Mock surrogate model for testing purposes."""
487
-
488
- def predict(
489
- self,
490
- y: np.ndarray,
491
- ) -> dict[str, float]:
492
- """Predict outputs based on input data."""
493
- return dict(zip(self.outputs, y, strict=True))
494
-
495
-
496
437
  @dataclass(kw_only=True)
497
438
  class AbstractEstimator:
498
439
  """Abstract class for parameter estimation using neural networks."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mxlpy
3
- Version: 0.18.0
3
+ Version: 0.20.0
4
4
  Summary: A package to build metabolic models
5
5
  Author-email: Marvin van Aalst <marvin.vanaalst@gmail.com>
6
6
  Maintainer-email: Marvin van Aalst <marvin.vanaalst@gmail.com>
@@ -24,6 +24,7 @@ Classifier: Topic :: Software Development
24
24
  Requires-Python: >=3.12
25
25
  Requires-Dist: dill>=0.3.9
26
26
  Requires-Dist: latexify-py>=0.4.4
27
+ Requires-Dist: lazy-import>=0.2.2
27
28
  Requires-Dist: matplotlib>=3.9.2
28
29
  Requires-Dist: mike>=2.1.3
29
30
  Requires-Dist: more-itertools>=10.5.0
@@ -41,29 +42,21 @@ Requires-Dist: tabulate>=0.9.0
41
42
  Requires-Dist: toml>=0.10.2
42
43
  Requires-Dist: tqdm>=4.66.6
43
44
  Requires-Dist: typing-extensions>=4.12.2
44
- Provides-Extra: dev
45
- Requires-Dist: coverage>=7.6.4; extra == 'dev'
46
- Requires-Dist: jupyter>=1.1.1; extra == 'dev'
47
- Requires-Dist: mkdocs-jupyter>=0.25.1; extra == 'dev'
48
- Requires-Dist: mkdocs-material>=9.5.42; extra == 'dev'
49
- Requires-Dist: mkdocs>=1.6.1; extra == 'dev'
50
- Requires-Dist: pre-commit>=4.0.1; extra == 'dev'
51
- Requires-Dist: pyright>=1.1.387; extra == 'dev'
52
- Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
53
- Requires-Dist: pytest>=8.3.3; extra == 'dev'
54
- Requires-Dist: requests>=2.32.3; extra == 'dev'
55
- Requires-Dist: ruff>=0.7.1; extra == 'dev'
56
- Requires-Dist: ssort>=0.13.0; extra == 'dev'
57
- Requires-Dist: toml-sort<0.24,>=0.23.1; extra == 'dev'
45
+ Provides-Extra: keras
46
+ Requires-Dist: keras>=3.9.2; extra == 'keras'
47
+ Provides-Extra: tensorflow
48
+ Requires-Dist: tensorflow>=2.19.0; extra == 'tensorflow'
58
49
  Provides-Extra: torch
59
50
  Requires-Dist: torch>=2.5.1; extra == 'torch'
60
51
  Description-Content-Type: text/markdown
61
52
 
62
53
  <p align="center">
63
- <img src="docs/assets/logo-diagram.png" width="600px" alt='mxlpy-logo'>
54
+ <img src="https://raw.githubusercontent.com/Computational-Biology-Aachen/MxlPy/refs/heads/main/docs/assets/logo-diagram.png" width="600px" alt='mxlpy-logo'>
64
55
  </p>
65
56
 
66
- # mxlpy
57
+
58
+
59
+ # MxlPy
67
60
 
68
61
  [![pypi](https://img.shields.io/pypi/v/mxlpy.svg)](https://pypi.python.org/pypi/mxlpy)
69
62
  [![docs][docs-badge]][docs]
@@ -78,14 +71,26 @@ Description-Content-Type: text/markdown
78
71
 
79
72
  ## Installation
80
73
 
81
- You can install mxlpy using pip: `pip install mxlpy`
74
+ You can install mxlpy using pip: `pip install mxlpy`.
75
+
76
+ Due to their sizes, the machine learning packages are optional dependencies. You can install them using
77
+
78
+ ```shell
79
+ # One of them respectively
80
+ pip install mxlpy[torch]
81
+ pip install mxlpy[tensorflow]
82
+ pip install mxlpy[keras]
83
+
84
+ # together
85
+ pip install mxlpy[torch, tensorflow, keras]
86
+ ```
82
87
 
83
88
  If you want access to the sundials solver suite via the [assimulo](https://jmodelica.org/assimulo/) package, we recommend setting up a virtual environment via [pixi](https://pixi.sh/) or [mamba / conda](https://mamba.readthedocs.io/en/latest/) using the [conda-forge](https://conda-forge.org/) channel.
84
89
 
85
90
  ```bash
86
91
  pixi init
87
92
  pixi add python assimulo
88
- pixi add --pypi mxlpy[torch]
93
+ pixi add --pypi mxlpy
89
94
  ```
90
95
 
91
96
  ## How to cite
@@ -103,7 +108,7 @@ You have two choices here, using `uv` (pypi-only) or using `pixi` (conda-forge,
103
108
  ### uv
104
109
 
105
110
  - Install `uv` as described in [the docs](https://docs.astral.sh/uv/getting-started/installation/).
106
- - Run `uv sync --extra dev --extra torch` to install dependencies locally
111
+ - Run `uv sync --all-extras --all-groups` to install dependencies locally
107
112
 
108
113
  ### pixi
109
114
 
@@ -111,7 +116,3 @@ You have two choices here, using `uv` (pypi-only) or using `pixi` (conda-forge,
111
116
  - Run `pixi install --frozen`
112
117
 
113
118
 
114
- ## Notes
115
-
116
- - `uv add $package`
117
- - `uv add --optional dev $package`
@@ -0,0 +1,55 @@
1
+ mxlpy/__init__.py,sha256=4pbDeyLhQjfL76h2oXdodARzKkrkX5wESV7kEjwC3K8,4399
2
+ mxlpy/compare.py,sha256=6iIl6yKXP9guSVLgqqnaqILP_BF_oqyx7DTGbdpwAjM,7800
3
+ mxlpy/distributions.py,sha256=ce6RTqn19YzMMec-u09fSIUA8A92M6rehCuHuXWcX7A,8734
4
+ mxlpy/fit.py,sha256=i1R_2WErNJdHNf6JWPFPBDfbI7-MkY9fTaO6jgL4Pqk,12433
5
+ mxlpy/fns.py,sha256=NLxYwa3ylS7SkISBjw_TgQSKEm7WnkZF9wPigX_ZCAM,13915
6
+ mxlpy/identify.py,sha256=I136kpczw_WriN-CtTMP3cBN-K4ZKaHW6lWZCWsIQUE,2233
7
+ mxlpy/label_map.py,sha256=Zla9tey-7_POTE57XNEuCSeTqdAbMWZdj_j_OwokngY,17823
8
+ mxlpy/linear_label_map.py,sha256=5FyD0MMdSGsC3eKeBnpd1LBHyVBqIDWCDjgR8_q6XZo,10289
9
+ mxlpy/mc.py,sha256=6uN2fw4W627FoK_yVNIWbphoPa-pBA7-51nIX81CilU,17200
10
+ mxlpy/mca.py,sha256=PloMdBtyoPsiyJT-vnB0RUc1aTFkoMYwvYa7WmKA7tY,9359
11
+ mxlpy/model.py,sha256=14gncyYft39rwoiJPb5AynL3whXnZrJY3N7SLExH0Qk,62056
12
+ mxlpy/parallel.py,sha256=a69Ci7NrCplo4pq7qFQUMtOPD56SfaZ6Vz3JNplJpZ0,5013
13
+ mxlpy/parameterise.py,sha256=IgbvfEnkmaqVq_5GgFjHqApGUN9CJrsVD3Fr7pg9iFA,758
14
+ mxlpy/paths.py,sha256=TK2wO4N9lG-UV1JGfeB64q48JVDbwqIUj63rl55MKuQ,1022
15
+ mxlpy/plot.py,sha256=PA7tAmy2XXACxBLtdnfpxKUFRzi-lnCQjr7gw_nzxKU,32544
16
+ mxlpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ mxlpy/report.py,sha256=6V_kH5usFtar2lUGLjG5k7WIJjUi1TD5qIO7V_6V3Gc,8773
18
+ mxlpy/scan.py,sha256=AnDSR-ttOjFGBrvOdhMdM04URZSHVoiS049tK0oUwV8,18948
19
+ mxlpy/simulator.py,sha256=fXFRJHXvDzhZHIccxH6l5QJEZUcpYrNCeA9DUkvnN-8,21052
20
+ mxlpy/types.py,sha256=FXBkwHgQ3v_k4ER49hDqyFMIA6i1BQf8isPma97LJdg,12605
21
+ mxlpy/experimental/__init__.py,sha256=kZTE-92OErpHzNRqmgSQYH4CGXrogGJ5EL35XGZQ81M,206
22
+ mxlpy/experimental/diff.py,sha256=MoM15rbMAHa7p9Zva8NxIc7K585kHJYKFaD1LnN5e10,9088
23
+ mxlpy/integrators/__init__.py,sha256=OLdcNCDIOiD1Z2LO143YtD47cMadNJt0app41nLAx5o,456
24
+ mxlpy/integrators/int_assimulo.py,sha256=8gLR1D4zJ-TnJ9DTkfkqA2uVE0H2w_npZhZ8RoWZOX8,5013
25
+ mxlpy/integrators/int_scipy.py,sha256=MEwhTNhMMVQE2UFWxv5fifN6TKVjRsyDmyibuuNNiHI,4649
26
+ mxlpy/meta/__init__.py,sha256=Z3LnN3a9qDAJTukHZs_nF_G6DrjKXOqBvOb47rSsAsM,314
27
+ mxlpy/meta/codegen_latex.py,sha256=ocdn_mrjPXllYBwImOBQcFzjFR6LONnBs3fhRIA0yzs,22875
28
+ mxlpy/meta/codegen_modebase.py,sha256=ziUuwod1F10ak7WTj5gcuVL7MLtK65kUhqKGCxgn3mY,3131
29
+ mxlpy/meta/codegen_py.py,sha256=bpwXrGUaf8lO81VVcIh0cbtf4cd84CYDZrL3ngf1FHo,3587
30
+ mxlpy/meta/source_tools.py,sha256=8kZD0_FnO2t8MTG9FvEFOhhU52uXKNpQJW6xDOGWGck,13540
31
+ mxlpy/nn/__init__.py,sha256=Qjr-ERsY2lbD75sFBOhCUwEasQDSJKcpBn_kReLZ6oA,633
32
+ mxlpy/nn/_keras.py,sha256=-5zjHRu8OjSiZeuBSIZFyB63uBsNNH5o9y4kBcPnhx8,2263
33
+ mxlpy/nn/_torch.py,sha256=GUJmLU282VU4O-fs3Sz90SEaAnfuXN2MPlBr_tHmvn4,5775
34
+ mxlpy/npe/__init__.py,sha256=hBHCUD2JYDBBGS2kTY8mTCfWB3u1R7m5l--wUupZt6o,1270
35
+ mxlpy/npe/_keras.py,sha256=ytvXMPK9KUCGOzTQm08_SgafiMb-MOIUdZQV7JjAO40,9721
36
+ mxlpy/npe/_torch.py,sha256=v3joh6lFJJxvYJj--wzmKXL9UMTaIN3h6hPNq0uX9NU,11250
37
+ mxlpy/sbml/__init__.py,sha256=Mt97CddpLi3wIrA1b_5cagLmDdNxAVF_S7QV57Pzw8s,226
38
+ mxlpy/sbml/_data.py,sha256=yYli7ZQ1_pnH9kt5EmcuHM0moQoa43rrFVdrseXlG0o,1136
39
+ mxlpy/sbml/_export.py,sha256=4tU3SVxfEvl0E1urZWHyphkiAeH5HeRO1cODvvrczAQ,20342
40
+ mxlpy/sbml/_import.py,sha256=5odQBdpD93mQJp2bVIabmPo6NK60nxqrdSVB8fEsF_A,22099
41
+ mxlpy/sbml/_mathml.py,sha256=oaU9q5yb9jvDGxDJrqOkbOiurCB1Vv_P99oUwJ7v1VE,24437
42
+ mxlpy/sbml/_name_conversion.py,sha256=93muW47M7qJoE227HKHmThWpPeWsXDN9eM8cRH2pqPs,1340
43
+ mxlpy/sbml/_unit_conversion.py,sha256=dW_I6_Ou09ccwnp6LIdrPriIQnQUK5lJcjzM2Fawm6U,1927
44
+ mxlpy/surrogates/__init__.py,sha256=cz9qr0ToYSutIK45IvKrMe1mPP7Lj0I_V0HYGixfpZU,916
45
+ mxlpy/surrogates/_keras.py,sha256=r2pR3iTJOaMqtATbsCm5CF94TYG9b-9cKljc8kMOplQ,3852
46
+ mxlpy/surrogates/_poly.py,sha256=z2g3JTdVyQJ8dIiXP4BOun_yMZOrlYpPNvQ0wmFYDTk,3672
47
+ mxlpy/surrogates/_qss.py,sha256=9w-hPPhdcwybkyaSX0sIfYfvcKu1U5j4HHj4SlgZcYQ,723
48
+ mxlpy/surrogates/_torch.py,sha256=gU0secuRBYgewhNqZmSo6_Xf804dSzwWwIYmdKA7y60,6389
49
+ mxlpy/symbolic/__init__.py,sha256=_vM5YM5I6OH0QDbFt9uGYKO8Z5Vly0wbGuvUScVrPRU,258
50
+ mxlpy/symbolic/strikepy.py,sha256=tzo3uvPpXLDex09hWTuitVzuTNwbgl7jWGjD8g6a8iI,20033
51
+ mxlpy/symbolic/symbolic_model.py,sha256=JFzcIdyfJihvKjef748DMXU6WI8nHjgjIk5BwUuB4HQ,2543
52
+ mxlpy-0.20.0.dist-info/METADATA,sha256=oZ5kyCjoeUm28YKPxNSf0kTZx977NA3-3BfEd6riQSI,4402
53
+ mxlpy-0.20.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
54
+ mxlpy-0.20.0.dist-info/licenses/LICENSE,sha256=lHX9Eu70g3Iv1aOxXTWNHa3vq9vaVYSPQx4jOLYmDpw,1096
55
+ mxlpy-0.20.0.dist-info/RECORD,,
mxlpy/nn/_tensorflow.py DELETED
File without changes
@@ -1,51 +0,0 @@
1
- mxlpy/__init__.py,sha256=lGo7XQTVuR1p8rW1J6gZsgdQWRqfYa9AWbvZQwT8oLQ,4236
2
- mxlpy/distributions.py,sha256=ce6RTqn19YzMMec-u09fSIUA8A92M6rehCuHuXWcX7A,8734
3
- mxlpy/fit.py,sha256=WNg98wW47xkd4gNEgj3t8eNNTqfVpHEJTbXMRQBe22o,12457
4
- mxlpy/fns.py,sha256=VxDDyEdtGD7fEoT5LiiEaRqFk-0fIunRXHr1dCMpCdE,14002
5
- mxlpy/identify.py,sha256=veYYCjTDAlzibrWtciX2egfEWWgosOpqgLBgbfVj42g,2130
6
- mxlpy/label_map.py,sha256=urv-QTb0MUEKjwWvKtJSB8H2kvhLn1EKfRIH7awQQ8Y,17769
7
- mxlpy/linear_label_map.py,sha256=DqzN_akacPccZwzYAR3ANIdzAU_GU6Xe6gWV9DHAAWU,10282
8
- mxlpy/mc.py,sha256=oYd8a3ycyZLyh-ZxTYUjDRNfsCcwSQaLWssxv0yC5Cc,17399
9
- mxlpy/mca.py,sha256=1_qBX9lHI6svXSebtwvMldAMwPlLqMylAPmxMbMQdWw,9359
10
- mxlpy/model.py,sha256=H1rAKaB5pAQcMuBh5GnXuBReADTx5IDa1x0CdUZ6VlI,58411
11
- mxlpy/parallel.py,sha256=kX4Td5YoovDwZp6kX_3cfO6QtHSS9ieJ0bMZiKs3Xv8,5002
12
- mxlpy/parameterise.py,sha256=2jMhhO-bHTFP_0kXercJekeATAZYBg5FrK1MQ_mWGpk,654
13
- mxlpy/paths.py,sha256=TK2wO4N9lG-UV1JGfeB64q48JVDbwqIUj63rl55MKuQ,1022
14
- mxlpy/plot.py,sha256=Bu69ZSerqQlY_Hut-Wmn-KpqT1cwW96n8paa6dXOVrw,28853
15
- mxlpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- mxlpy/report.py,sha256=ZwnjquPAvo4A8UqK-BT19SZFSEUOy1FALqoh7uTmbAI,7793
17
- mxlpy/scan.py,sha256=FBPpjv66v4IWZ5OwG_EWUdrucLWR9gq_XEsLFC-otaw,18969
18
- mxlpy/simulator.py,sha256=9Ne4P5Jrwgx4oAlljPvCqSCCy98_5Lv1B87y1AkbI4c,21041
19
- mxlpy/types.py,sha256=EOIOPuxD2vqRjYgX4vYByclxmG7bCCR1WWXYE0Msz7A,14669
20
- mxlpy/experimental/__init__.py,sha256=kZTE-92OErpHzNRqmgSQYH4CGXrogGJ5EL35XGZQ81M,206
21
- mxlpy/experimental/diff.py,sha256=4bztagJzFMsQJM7dlun_kv-WrWssM8CIw7gcL63hFf8,8952
22
- mxlpy/integrators/__init__.py,sha256=kqmV6a0TRyLGR_XqbyAI652AfptYnXAUpqbSFg0CpP8,450
23
- mxlpy/integrators/int_assimulo.py,sha256=TCBWQd558ZeRdBba1jCNsFyLBOssKvm8dXK36Aqg4_k,4817
24
- mxlpy/integrators/int_scipy.py,sha256=dFHlYTeb2zX97f3VuNdMJdI7WEYshF4JAIgprKKk2z4,4581
25
- mxlpy/meta/__init__.py,sha256=Jyy4063fZy6iT4LSwjPyEAVr4N_3xxcLc8wDBoDPyKc,278
26
- mxlpy/meta/codegen_latex.py,sha256=vONj--_wmFM_FJpe15aAYyT06-kolqQwSe2NEbKrQWo,19934
27
- mxlpy/meta/codegen_modebase.py,sha256=_ZAW4NvXhKwJQLGz5hkwwZpL2JMAJlfG-GUWkYIiNvw,3124
28
- mxlpy/meta/codegen_py.py,sha256=xSdeuEGPGc-QKRMgJO4VSPGMlxCPEV5prkKjNQ2D2hg,3483
29
- mxlpy/meta/source_tools.py,sha256=IyiCLZ1KScSqADC9p_QSRgedoHGibs9U1RGJuXm827U,13464
30
- mxlpy/nn/__init__.py,sha256=yUc4o-iqfVVzkq9tZCstWwizrCqNlMft0YUwWGFFO-E,219
31
- mxlpy/nn/_tensorflow.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- mxlpy/nn/_torch.py,sha256=DORLixCSteCUMb7PTrIwd5FrVZ4_k0GIaLc6PI3ViwE,5796
33
- mxlpy/npe/__init__.py,sha256=IQmqUPJc5A8QXJLzp6Dq6Sjm8Hh2KAYZLrMxXQVeQP8,1181
34
- mxlpy/npe/_torch.py,sha256=pynnkdspO7NwTT3Pb_BU21jgBjJEvuLBJwaw_A-jAFg,11681
35
- mxlpy/sbml/__init__.py,sha256=AS7IwrBzBgN8coUZkyBEtiYa9ICWyY1wzp1ujVm5ItA,226
36
- mxlpy/sbml/_data.py,sha256=XwT1sSxn6KLTXYMbk4ORbEAEgZhQDBfoyrjMBDAoY_s,1135
37
- mxlpy/sbml/_export.py,sha256=Q6B9rxy-yt73DORzAYu4BpfkZXxCS3MDSDUXwpoXV6Q,19970
38
- mxlpy/sbml/_import.py,sha256=5odQBdpD93mQJp2bVIabmPo6NK60nxqrdSVB8fEsF_A,22099
39
- mxlpy/sbml/_mathml.py,sha256=bNk9RQ_NQFDhY1R354p-gwqqHaIiyAwZ1xLPHHhiguQ,24436
40
- mxlpy/sbml/_name_conversion.py,sha256=XK9DEyzhrD0GBBwwjK9RA0yORrDX5c-Uvx0VtKMR5rA,1325
41
- mxlpy/sbml/_unit_conversion.py,sha256=dW_I6_Ou09ccwnp6LIdrPriIQnQUK5lJcjzM2Fawm6U,1927
42
- mxlpy/surrogates/__init__.py,sha256=ofHPNwe0LAILP2ZUWivAQpOv9LyHHzLZc6iu1cV2LeQ,894
43
- mxlpy/surrogates/_poly.py,sha256=n1pe4xuD2A4BK8jJagzZ-17WW3kqvFBO-ZYuznmfosw,3303
44
- mxlpy/surrogates/_torch.py,sha256=dpRZL8qOD8toezniuVPJ7NFTMpA97dF9dyrXfBAcTro,5984
45
- mxlpy/symbolic/__init__.py,sha256=3hQjCMw8-6iOxeUdfnCg8449fF_BRF2u6lCM1GPpkRY,222
46
- mxlpy/symbolic/strikepy.py,sha256=UMx2LMRwCkASKjdCYEvh9tKlW9dk3nDoWM9NNJXWL_8,19960
47
- mxlpy/symbolic/symbolic_model.py,sha256=YL9noEeP3_0DoKXwMPELtfmPuP6mgNcLIJgDRCkyB7A,2434
48
- mxlpy-0.18.0.dist-info/METADATA,sha256=LgAn8m3f6oRfZl03E3X8UHak-2pJmoUdhealdJXQsJA,4567
49
- mxlpy-0.18.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
50
- mxlpy-0.18.0.dist-info/licenses/LICENSE,sha256=lHX9Eu70g3Iv1aOxXTWNHa3vq9vaVYSPQx4jOLYmDpw,1096
51
- mxlpy-0.18.0.dist-info/RECORD,,
File without changes