mxlpy 0.23.0__py3-none-any.whl → 0.25.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.
- mxlpy/__init__.py +6 -6
- mxlpy/carousel.py +46 -1
- mxlpy/compare.py +13 -0
- mxlpy/experimental/diff.py +14 -0
- mxlpy/fit/__init__.py +9 -0
- mxlpy/fit/common.py +298 -0
- mxlpy/fit/global_.py +534 -0
- mxlpy/{fit.py → fit/local_.py} +105 -308
- mxlpy/identify.py +5 -4
- mxlpy/mc.py +63 -2
- mxlpy/meta/__init__.py +6 -1
- mxlpy/meta/codegen_latex.py +9 -0
- mxlpy/meta/codegen_model.py +53 -11
- mxlpy/meta/codegen_mxlpy.py +21 -0
- mxlpy/meta/source_tools.py +5 -0
- mxlpy/meta/sympy_tools.py +7 -1
- mxlpy/model.py +56 -11
- mxlpy/plot.py +44 -15
- mxlpy/sbml/_data.py +34 -0
- mxlpy/sbml/_export.py +4 -3
- mxlpy/scan.py +125 -7
- mxlpy/simulator.py +5 -0
- mxlpy/types.py +244 -2
- {mxlpy-0.23.0.dist-info → mxlpy-0.25.0.dist-info}/METADATA +12 -2
- {mxlpy-0.23.0.dist-info → mxlpy-0.25.0.dist-info}/RECORD +27 -24
- {mxlpy-0.23.0.dist-info → mxlpy-0.25.0.dist-info}/WHEEL +0 -0
- {mxlpy-0.23.0.dist-info → mxlpy-0.25.0.dist-info}/licenses/LICENSE +0 -0
mxlpy/types.py
CHANGED
@@ -33,6 +33,7 @@ from typing import (
|
|
33
33
|
import numpy as np
|
34
34
|
import pandas as pd
|
35
35
|
from numpy.typing import NDArray
|
36
|
+
from wadler_lindig import pformat
|
36
37
|
|
37
38
|
__all__ = [
|
38
39
|
"AbstractEstimator",
|
@@ -182,6 +183,10 @@ class Variable:
|
|
182
183
|
unit: sympy.Expr | None = None
|
183
184
|
source: str | None = None
|
184
185
|
|
186
|
+
def __repr__(self) -> str:
|
187
|
+
"""Return default representation."""
|
188
|
+
return pformat(self)
|
189
|
+
|
185
190
|
|
186
191
|
@dataclass
|
187
192
|
class Parameter:
|
@@ -191,6 +196,10 @@ class Parameter:
|
|
191
196
|
unit: sympy.Expr | None = None
|
192
197
|
source: str | None = None
|
193
198
|
|
199
|
+
def __repr__(self) -> str:
|
200
|
+
"""Return default representation."""
|
201
|
+
return pformat(self)
|
202
|
+
|
194
203
|
|
195
204
|
@dataclass(kw_only=True, slots=True)
|
196
205
|
class Derived:
|
@@ -200,6 +209,10 @@ class Derived:
|
|
200
209
|
args: list[str]
|
201
210
|
unit: sympy.Expr | None = None
|
202
211
|
|
212
|
+
def __repr__(self) -> str:
|
213
|
+
"""Return default representation."""
|
214
|
+
return pformat(self)
|
215
|
+
|
203
216
|
def calculate(self, args: dict[str, Any]) -> float:
|
204
217
|
"""Calculate the derived value.
|
205
218
|
|
@@ -231,6 +244,10 @@ class InitialAssignment:
|
|
231
244
|
args: list[str]
|
232
245
|
unit: sympy.Expr | None = None
|
233
246
|
|
247
|
+
def __repr__(self) -> str:
|
248
|
+
"""Return default representation."""
|
249
|
+
return pformat(self)
|
250
|
+
|
234
251
|
def calculate(self, args: dict[str, Any]) -> float:
|
235
252
|
"""Calculate the derived value.
|
236
253
|
|
@@ -262,6 +279,10 @@ class Readout:
|
|
262
279
|
args: list[str]
|
263
280
|
unit: sympy.Expr | None = None
|
264
281
|
|
282
|
+
def __repr__(self) -> str:
|
283
|
+
"""Return default representation."""
|
284
|
+
return pformat(self)
|
285
|
+
|
265
286
|
def calculate(self, args: dict[str, Any]) -> float:
|
266
287
|
"""Calculate the derived value.
|
267
288
|
|
@@ -294,6 +315,10 @@ class Reaction:
|
|
294
315
|
args: list[str]
|
295
316
|
unit: sympy.Expr | None = None
|
296
317
|
|
318
|
+
def __repr__(self) -> str:
|
319
|
+
"""Return default representation."""
|
320
|
+
return pformat(self)
|
321
|
+
|
297
322
|
def get_modifiers(self, model: Model) -> list[str]:
|
298
323
|
"""Get the modifiers of the reaction."""
|
299
324
|
include = set(model.get_variable_names())
|
@@ -341,6 +366,10 @@ class AbstractSurrogate:
|
|
341
366
|
outputs: list[str]
|
342
367
|
stoichiometries: dict[str, dict[str, float | Derived]] = field(default_factory=dict)
|
343
368
|
|
369
|
+
def __repr__(self) -> str:
|
370
|
+
"""Return default representation."""
|
371
|
+
return pformat(self)
|
372
|
+
|
344
373
|
@abstractmethod
|
345
374
|
def predict(
|
346
375
|
self, args: dict[str, float | pd.Series | pd.DataFrame]
|
@@ -382,6 +411,10 @@ class AbstractEstimator:
|
|
382
411
|
|
383
412
|
parameter_names: list[str]
|
384
413
|
|
414
|
+
def __repr__(self) -> str:
|
415
|
+
"""Return default representation."""
|
416
|
+
return pformat(self)
|
417
|
+
|
385
418
|
@abstractmethod
|
386
419
|
def predict(self, features: pd.Series | pd.DataFrame) -> pd.DataFrame:
|
387
420
|
"""Predict the target values for the given features."""
|
@@ -430,6 +463,10 @@ class Result:
|
|
430
463
|
raw_parameters: list[dict[str, float]]
|
431
464
|
raw_args: list[pd.DataFrame] = field(default_factory=list)
|
432
465
|
|
466
|
+
def __repr__(self) -> str:
|
467
|
+
"""Return default representation."""
|
468
|
+
return pformat(self)
|
469
|
+
|
433
470
|
@classmethod
|
434
471
|
def default(cls, model: Model, time_points: Array) -> Result:
|
435
472
|
"""Get result filled with NaNs."""
|
@@ -453,6 +490,7 @@ class Result:
|
|
453
490
|
"""Simulation variables."""
|
454
491
|
return self.get_variables(
|
455
492
|
include_derived_variables=True,
|
493
|
+
include_surrogate_variables=True,
|
456
494
|
include_readouts=True,
|
457
495
|
concatenated=True,
|
458
496
|
normalise=None,
|
@@ -461,7 +499,9 @@ class Result:
|
|
461
499
|
@property
|
462
500
|
def fluxes(self) -> pd.DataFrame:
|
463
501
|
"""Simulation fluxes."""
|
464
|
-
return self.get_fluxes(
|
502
|
+
return self.get_fluxes(
|
503
|
+
include_surrogates=True,
|
504
|
+
)
|
465
505
|
|
466
506
|
def _compute_args(self) -> list[pd.DataFrame]:
|
467
507
|
# Already computed
|
@@ -618,6 +658,7 @@ class Result:
|
|
618
658
|
*,
|
619
659
|
include_derived_variables: bool = True,
|
620
660
|
include_readouts: bool = True,
|
661
|
+
include_surrogate_variables: bool = True,
|
621
662
|
concatenated: Literal[False],
|
622
663
|
normalise: float | ArrayLike | None = None,
|
623
664
|
) -> list[pd.DataFrame]: ...
|
@@ -628,6 +669,7 @@ class Result:
|
|
628
669
|
*,
|
629
670
|
include_derived_variables: bool = True,
|
630
671
|
include_readouts: bool = True,
|
672
|
+
include_surrogate_variables: bool = True,
|
631
673
|
concatenated: Literal[True],
|
632
674
|
normalise: float | ArrayLike | None = None,
|
633
675
|
) -> pd.DataFrame: ...
|
@@ -638,6 +680,7 @@ class Result:
|
|
638
680
|
*,
|
639
681
|
include_derived_variables: bool = True,
|
640
682
|
include_readouts: bool = True,
|
683
|
+
include_surrogate_variables: bool = True,
|
641
684
|
concatenated: bool = True,
|
642
685
|
normalise: float | ArrayLike | None = None,
|
643
686
|
) -> pd.DataFrame: ...
|
@@ -647,6 +690,7 @@ class Result:
|
|
647
690
|
*,
|
648
691
|
include_derived_variables: bool = True,
|
649
692
|
include_readouts: bool = True,
|
693
|
+
include_surrogate_variables: bool = True,
|
650
694
|
concatenated: bool = True,
|
651
695
|
normalise: float | ArrayLike | None = None,
|
652
696
|
) -> pd.DataFrame | list[pd.DataFrame]:
|
@@ -660,7 +704,9 @@ class Result:
|
|
660
704
|
0.000200 0.999800 0.999800
|
661
705
|
|
662
706
|
"""
|
663
|
-
if not
|
707
|
+
if not (
|
708
|
+
include_derived_variables or include_readouts or include_surrogate_variables
|
709
|
+
):
|
664
710
|
return self._adjust_data(
|
665
711
|
self.raw_variables,
|
666
712
|
normalise=normalise,
|
@@ -671,6 +717,7 @@ class Result:
|
|
671
717
|
self._compute_args(),
|
672
718
|
include_variables=True,
|
673
719
|
include_derived_variables=include_derived_variables,
|
720
|
+
include_surrogate_variables=include_surrogate_variables,
|
674
721
|
include_readouts=include_readouts,
|
675
722
|
)
|
676
723
|
return self._adjust_data(
|
@@ -751,6 +798,177 @@ class Result:
|
|
751
798
|
"""
|
752
799
|
return pd.concat((self.variables, self.fluxes), axis=1)
|
753
800
|
|
801
|
+
@overload
|
802
|
+
def get_right_hand_side( # type: ignore
|
803
|
+
self,
|
804
|
+
*,
|
805
|
+
normalise: float | ArrayLike | None = None,
|
806
|
+
concatenated: Literal[False],
|
807
|
+
) -> list[pd.DataFrame]: ...
|
808
|
+
|
809
|
+
@overload
|
810
|
+
def get_right_hand_side(
|
811
|
+
self,
|
812
|
+
*,
|
813
|
+
normalise: float | ArrayLike | None = None,
|
814
|
+
concatenated: Literal[True],
|
815
|
+
) -> pd.DataFrame: ...
|
816
|
+
|
817
|
+
@overload
|
818
|
+
def get_right_hand_side(
|
819
|
+
self,
|
820
|
+
*,
|
821
|
+
normalise: float | ArrayLike | None = None,
|
822
|
+
concatenated: bool = True,
|
823
|
+
) -> pd.DataFrame: ...
|
824
|
+
|
825
|
+
def get_right_hand_side(
|
826
|
+
self,
|
827
|
+
*,
|
828
|
+
normalise: float | ArrayLike | None = None,
|
829
|
+
concatenated: bool = True,
|
830
|
+
) -> pd.DataFrame | list[pd.DataFrame]:
|
831
|
+
"""Get right hand side over time."""
|
832
|
+
args_by_simulation = self._compute_args()
|
833
|
+
return self._adjust_data(
|
834
|
+
[
|
835
|
+
self.model.update_parameters(p).get_right_hand_side_time_course(
|
836
|
+
args=args
|
837
|
+
)
|
838
|
+
for args, p in zip(args_by_simulation, self.raw_parameters, strict=True)
|
839
|
+
],
|
840
|
+
normalise=normalise,
|
841
|
+
concatenated=concatenated,
|
842
|
+
)
|
843
|
+
|
844
|
+
@overload
|
845
|
+
def get_producers( # type: ignore
|
846
|
+
self,
|
847
|
+
variable: str,
|
848
|
+
*,
|
849
|
+
scaled: bool = False,
|
850
|
+
normalise: float | ArrayLike | None = None,
|
851
|
+
concatenated: Literal[False],
|
852
|
+
) -> list[pd.DataFrame]: ...
|
853
|
+
|
854
|
+
@overload
|
855
|
+
def get_producers(
|
856
|
+
self,
|
857
|
+
variable: str,
|
858
|
+
*,
|
859
|
+
scaled: bool = False,
|
860
|
+
normalise: float | ArrayLike | None = None,
|
861
|
+
concatenated: Literal[True],
|
862
|
+
) -> pd.DataFrame: ...
|
863
|
+
|
864
|
+
@overload
|
865
|
+
def get_producers(
|
866
|
+
self,
|
867
|
+
variable: str,
|
868
|
+
*,
|
869
|
+
scaled: bool = False,
|
870
|
+
normalise: float | ArrayLike | None = None,
|
871
|
+
concatenated: bool = True,
|
872
|
+
) -> pd.DataFrame: ...
|
873
|
+
|
874
|
+
def get_producers(
|
875
|
+
self,
|
876
|
+
variable: str,
|
877
|
+
*,
|
878
|
+
scaled: bool = False,
|
879
|
+
normalise: float | ArrayLike | None = None,
|
880
|
+
concatenated: bool = True,
|
881
|
+
) -> pd.DataFrame | list[pd.DataFrame]:
|
882
|
+
"""Get fluxes of variable with positive stoichiometry."""
|
883
|
+
self.model.update_parameters(self.raw_parameters[0])
|
884
|
+
names = [
|
885
|
+
k
|
886
|
+
for k, v in self.model.get_stoichiometries_of_variable(variable).items()
|
887
|
+
if v > 0
|
888
|
+
]
|
889
|
+
|
890
|
+
fluxes: list[pd.DataFrame] = [
|
891
|
+
i.loc[:, names]
|
892
|
+
for i in self.get_fluxes(normalise=normalise, concatenated=False)
|
893
|
+
]
|
894
|
+
|
895
|
+
if scaled:
|
896
|
+
fluxes = [i.copy() for i in fluxes]
|
897
|
+
for v, p in zip(fluxes, self.raw_parameters, strict=True):
|
898
|
+
self.model.update_parameters(p)
|
899
|
+
stoichs = self.model.get_stoichiometries_of_variable(variable)
|
900
|
+
for k in names:
|
901
|
+
v.loc[:, k] *= stoichs[k]
|
902
|
+
|
903
|
+
self.model.update_parameters(self.raw_parameters[-1])
|
904
|
+
if concatenated:
|
905
|
+
return pd.concat(fluxes, axis=0)
|
906
|
+
return fluxes
|
907
|
+
|
908
|
+
@overload
|
909
|
+
def get_consumers( # type: ignore
|
910
|
+
self,
|
911
|
+
variable: str,
|
912
|
+
*,
|
913
|
+
scaled: bool = False,
|
914
|
+
normalise: float | ArrayLike | None = None,
|
915
|
+
concatenated: Literal[False],
|
916
|
+
) -> list[pd.DataFrame]: ...
|
917
|
+
|
918
|
+
@overload
|
919
|
+
def get_consumers(
|
920
|
+
self,
|
921
|
+
variable: str,
|
922
|
+
*,
|
923
|
+
scaled: bool = False,
|
924
|
+
normalise: float | ArrayLike | None = None,
|
925
|
+
concatenated: Literal[True],
|
926
|
+
) -> pd.DataFrame: ...
|
927
|
+
|
928
|
+
@overload
|
929
|
+
def get_consumers(
|
930
|
+
self,
|
931
|
+
variable: str,
|
932
|
+
*,
|
933
|
+
scaled: bool = False,
|
934
|
+
normalise: float | ArrayLike | None = None,
|
935
|
+
concatenated: bool = True,
|
936
|
+
) -> pd.DataFrame: ...
|
937
|
+
|
938
|
+
def get_consumers(
|
939
|
+
self,
|
940
|
+
variable: str,
|
941
|
+
*,
|
942
|
+
scaled: bool = False,
|
943
|
+
normalise: float | ArrayLike | None = None,
|
944
|
+
concatenated: bool = True,
|
945
|
+
) -> pd.DataFrame | list[pd.DataFrame]:
|
946
|
+
"""Get fluxes of variable with negative stoichiometry."""
|
947
|
+
self.model.update_parameters(self.raw_parameters[0])
|
948
|
+
names = [
|
949
|
+
k
|
950
|
+
for k, v in self.model.get_stoichiometries_of_variable(variable).items()
|
951
|
+
if v < 0
|
952
|
+
]
|
953
|
+
|
954
|
+
fluxes: list[pd.DataFrame] = [
|
955
|
+
i.loc[:, names]
|
956
|
+
for i in self.get_fluxes(normalise=normalise, concatenated=False)
|
957
|
+
]
|
958
|
+
|
959
|
+
if scaled:
|
960
|
+
fluxes = [i.copy() for i in fluxes]
|
961
|
+
for v, p in zip(fluxes, self.raw_parameters, strict=True):
|
962
|
+
self.model.update_parameters(p)
|
963
|
+
stoichs = self.model.get_stoichiometries_of_variable(variable)
|
964
|
+
for k in names:
|
965
|
+
v.loc[:, k] *= -stoichs[k]
|
966
|
+
|
967
|
+
self.model.update_parameters(self.raw_parameters[-1])
|
968
|
+
if concatenated:
|
969
|
+
return pd.concat(fluxes, axis=0)
|
970
|
+
return fluxes
|
971
|
+
|
754
972
|
def get_new_y0(self) -> dict[str, float]:
|
755
973
|
"""Get the new initial conditions after the simulation.
|
756
974
|
|
@@ -778,6 +996,10 @@ class ResponseCoefficients:
|
|
778
996
|
variables: pd.DataFrame
|
779
997
|
fluxes: pd.DataFrame
|
780
998
|
|
999
|
+
def __repr__(self) -> str:
|
1000
|
+
"""Return default representation."""
|
1001
|
+
return pformat(self)
|
1002
|
+
|
781
1003
|
@property
|
782
1004
|
def combined(self) -> pd.DataFrame:
|
783
1005
|
"""Return the response coefficients as a DataFrame."""
|
@@ -796,6 +1018,10 @@ class ResponseCoefficientsByPars:
|
|
796
1018
|
fluxes: pd.DataFrame
|
797
1019
|
parameters: pd.DataFrame
|
798
1020
|
|
1021
|
+
def __repr__(self) -> str:
|
1022
|
+
"""Return default representation."""
|
1023
|
+
return pformat(self)
|
1024
|
+
|
799
1025
|
@property
|
800
1026
|
def combined(self) -> pd.DataFrame:
|
801
1027
|
"""Return the response coefficients as a DataFrame."""
|
@@ -814,6 +1040,10 @@ class SteadyStateScan:
|
|
814
1040
|
raw_index: pd.Index | pd.MultiIndex
|
815
1041
|
raw_results: list[Result]
|
816
1042
|
|
1043
|
+
def __repr__(self) -> str:
|
1044
|
+
"""Return default representation."""
|
1045
|
+
return pformat(self)
|
1046
|
+
|
817
1047
|
@property
|
818
1048
|
def variables(self) -> pd.DataFrame:
|
819
1049
|
"""Return steady-state variables by scan."""
|
@@ -874,6 +1104,10 @@ class SteadyStateScan:
|
|
874
1104
|
class TimeCourseScan:
|
875
1105
|
"""Container for time courses by scanned values."""
|
876
1106
|
|
1107
|
+
def __repr__(self) -> str:
|
1108
|
+
"""Return default representation."""
|
1109
|
+
return pformat(self)
|
1110
|
+
|
877
1111
|
to_scan: pd.DataFrame
|
878
1112
|
raw_results: dict[Hashable, Result]
|
879
1113
|
|
@@ -953,6 +1187,10 @@ class ProtocolScan:
|
|
953
1187
|
protocol: pd.DataFrame
|
954
1188
|
raw_results: dict[Hashable, Result]
|
955
1189
|
|
1190
|
+
def __repr__(self) -> str:
|
1191
|
+
"""Return default representation."""
|
1192
|
+
return pformat(self)
|
1193
|
+
|
956
1194
|
@property
|
957
1195
|
def variables(self) -> pd.DataFrame:
|
958
1196
|
"""Return all args of the time courses."""
|
@@ -1032,6 +1270,10 @@ class McSteadyStates:
|
|
1032
1270
|
parameters: pd.DataFrame
|
1033
1271
|
mc_to_scan: pd.DataFrame
|
1034
1272
|
|
1273
|
+
def __repr__(self) -> str:
|
1274
|
+
"""Return default representation."""
|
1275
|
+
return pformat(self)
|
1276
|
+
|
1035
1277
|
@property
|
1036
1278
|
def combined(self) -> pd.DataFrame:
|
1037
1279
|
"""Return the steady states as a DataFrame."""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mxlpy
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.25.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>
|
@@ -33,7 +33,7 @@ Requires-Dist: numpy>=2.1.2
|
|
33
33
|
Requires-Dist: pandas>=2.2.3
|
34
34
|
Requires-Dist: parameteriser>=0.1.0
|
35
35
|
Requires-Dist: pebble>=5.0.7
|
36
|
-
Requires-Dist: pysbml>=0.
|
36
|
+
Requires-Dist: pysbml>=0.3.0
|
37
37
|
Requires-Dist: python-libsbml>=5.20.4
|
38
38
|
Requires-Dist: salib>=1.5.1
|
39
39
|
Requires-Dist: scipy>=1.14.1
|
@@ -121,3 +121,13 @@ You have two choices here, using `uv` (pypi-only) or using `pixi` (conda-forge,
|
|
121
121
|
- Run `pixi install --frozen`
|
122
122
|
|
123
123
|
|
124
|
+
## LLMs
|
125
|
+
|
126
|
+
We support the [llms.txt](https://llmstxt.org/) convention for making documentation available to large language models and the applications that make use of them. It is located at [docs/llms.txt](https://github.com/Computational-Biology-Aachen/MxlPy/tree/main/docs/llms.txt)
|
127
|
+
|
128
|
+
## Tool family 🏠
|
129
|
+
|
130
|
+
`MxlPy` is part of a larger family of tools that are designed with a similar set of abstractions. Check them out!
|
131
|
+
|
132
|
+
- [MxlBricks](https://github.com/Computational-Biology-Aachen/mxl-bricks) is built on top of `MxlPy` to build mechanistic models composed of pre-defined reactions (bricks)
|
133
|
+
- [MxlWeb](https://github.com/Computational-Biology-Aachen/mxl-web) brings simulation of mechanistic models to the browser!
|
@@ -1,37 +1,40 @@
|
|
1
|
-
mxlpy/__init__.py,sha256=
|
2
|
-
mxlpy/carousel.py,sha256=
|
3
|
-
mxlpy/compare.py,sha256=
|
1
|
+
mxlpy/__init__.py,sha256=coeuRJf1axEjUZEgMGLyM2CzroUutoHZfbb5fAO_1II,4544
|
2
|
+
mxlpy/carousel.py,sha256=3M2rqi2bx87y8D-oqEKTKZ6Q_clDQHbdLNdVjLJeO7c,6013
|
3
|
+
mxlpy/compare.py,sha256=rJPOXc-aX6I1EC3ERAAW5Jn04kMwrlqUqdBgbZa6LA4,8098
|
4
4
|
mxlpy/distributions.py,sha256=ce6RTqn19YzMMec-u09fSIUA8A92M6rehCuHuXWcX7A,8734
|
5
|
-
mxlpy/fit.py,sha256=3hGUqJ2tOOToZLMMaJw5M9b6_UlUJwT_MhUvfPmRBd8,22355
|
6
5
|
mxlpy/fns.py,sha256=NLxYwa3ylS7SkISBjw_TgQSKEm7WnkZF9wPigX_ZCAM,13915
|
7
|
-
mxlpy/identify.py,sha256=
|
6
|
+
mxlpy/identify.py,sha256=4odLBh6Jq7_MttQBmrmyqZ6ASVMsVxHsaEqgJz9lTMY,2265
|
8
7
|
mxlpy/label_map.py,sha256=PwYanfg07hC0ayyOOP72RFlCQNvhCTbpOhW6kZZ2GUU,17826
|
9
8
|
mxlpy/linear_label_map.py,sha256=6Ye6IziWGKkYD_5z3FmTVwnJ2T9SvVGN3U4CfXjXseo,10320
|
10
|
-
mxlpy/mc.py,sha256=
|
9
|
+
mxlpy/mc.py,sha256=uMHknTNHmK5b4REM3PtCpCjEr9LoSIBsGsCNU4_yHpg,18639
|
11
10
|
mxlpy/mca.py,sha256=IoOHJbjPnAEDqKk64OjFjgRPX5K_aE9D4RrCJ1xFIkw,9457
|
12
|
-
mxlpy/model.py,sha256=
|
11
|
+
mxlpy/model.py,sha256=ji5zM9CmNPGMYLMA2mh12DfB3-mSVbkVmZbemcUM6iE,80495
|
13
12
|
mxlpy/parallel.py,sha256=yLQLw5O4vnPVp_Zmtw1UhPWtB3483foimxQB-TwFKPg,5016
|
14
13
|
mxlpy/parameterise.py,sha256=IgbvfEnkmaqVq_5GgFjHqApGUN9CJrsVD3Fr7pg9iFA,758
|
15
14
|
mxlpy/paths.py,sha256=TK2wO4N9lG-UV1JGfeB64q48JVDbwqIUj63rl55MKuQ,1022
|
16
|
-
mxlpy/plot.py,sha256=
|
15
|
+
mxlpy/plot.py,sha256=Dng9tyga8xagINQO_OZvjLRoaYGFR8crMljDHrzwEF8,33603
|
17
16
|
mxlpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
17
|
mxlpy/report.py,sha256=v597yzKecgtoNmlNZ_nVhBCa3czNw0tksOK5mLtAQvE,10631
|
19
|
-
mxlpy/scan.py,sha256=
|
20
|
-
mxlpy/simulator.py,sha256
|
21
|
-
mxlpy/types.py,sha256=
|
18
|
+
mxlpy/scan.py,sha256=KXFdeWwgUBqJBCiOGDdMAGU5nS3PRVn7Cg0ISpzzK1U,17160
|
19
|
+
mxlpy/simulator.py,sha256=-jsSP1fEnJnHj1hcj37cAPUyyP57mP_ow2cL-xd9iw8,16699
|
20
|
+
mxlpy/types.py,sha256=zcbC9XyBd2Vp4UxOr4rI7hznlJPe_iA1XvxFGWNO1y8,38456
|
22
21
|
mxlpy/units.py,sha256=4bKXkCYsONUVWRdzV7aVcWFQSA6sxilebgXXFUEKw_c,2091
|
23
22
|
mxlpy/experimental/__init__.py,sha256=kZTE-92OErpHzNRqmgSQYH4CGXrogGJ5EL35XGZQ81M,206
|
24
|
-
mxlpy/experimental/diff.py,sha256=
|
23
|
+
mxlpy/experimental/diff.py,sha256=fmsM53lH86TD2iglQILK-XeZnIAtwHAcGC3Afs8V-tc,9457
|
24
|
+
mxlpy/fit/__init__.py,sha256=rvIlXrWzuHfz5xYKpSeZpf7wACvweyBlvl9iE7SZJ3w,121
|
25
|
+
mxlpy/fit/common.py,sha256=CQyg39oePkYACwwYxOhG3M8Yw4byf6yvG58i5Tg12XM,7600
|
26
|
+
mxlpy/fit/global_.py,sha256=kIKyn1uQKA2Sc_0zLYuDuyo0zjGya6Yg1lPXDMxoZ30,15139
|
27
|
+
mxlpy/fit/local_.py,sha256=-KtnIhCh1ytU9zORRKmkJ3bgrSsEceM-JYs5H7CJ_sU,16689
|
25
28
|
mxlpy/integrators/__init__.py,sha256=TKo2dkJqdW3_n7YrmF6k3kEjr8_kr3-7MDaLu-zFWRg,533
|
26
29
|
mxlpy/integrators/int_assimulo.py,sha256=1cvR8cOBdrl_DQs9v0o7wItSG5iyYqwZVh7EO0fg3ro,5021
|
27
30
|
mxlpy/integrators/int_diffrax.py,sha256=q_8NZgIZ6T-SRRcI8kSjEb6l-DbXqPv6rjj9KApkQac,3326
|
28
31
|
mxlpy/integrators/int_scipy.py,sha256=xKyisVN1jW5hxmVD2K_RpoQ2MwNrMxSGODsAEgEt6_I,4922
|
29
|
-
mxlpy/meta/__init__.py,sha256=
|
30
|
-
mxlpy/meta/codegen_latex.py,sha256=
|
31
|
-
mxlpy/meta/codegen_model.py,sha256=
|
32
|
-
mxlpy/meta/codegen_mxlpy.py,sha256=
|
33
|
-
mxlpy/meta/source_tools.py,sha256=
|
34
|
-
mxlpy/meta/sympy_tools.py,sha256=
|
32
|
+
mxlpy/meta/__init__.py,sha256=8-UPZan2pT6RSuN65KC4vV9WPJiAzm2ZsXz3Zu_rmww,475
|
33
|
+
mxlpy/meta/codegen_latex.py,sha256=Owj5GKDFkiqks2mIDQIXV3M_5TysGwAZgKSq8C3KBIg,23461
|
34
|
+
mxlpy/meta/codegen_model.py,sha256=FkVrAS7HOyTQPNTItgyo8jjDEylkbETGnxJgRTBDAP4,6722
|
35
|
+
mxlpy/meta/codegen_mxlpy.py,sha256=FjBw37IqziB4dv5VBAvKenFODfxjJXdW6rQqx9CqYUk,8433
|
36
|
+
mxlpy/meta/source_tools.py,sha256=e6ufIsBjgde3QuQ9OsAYES0Lib4WALw4E-0wH_2cF6Y,22442
|
37
|
+
mxlpy/meta/sympy_tools.py,sha256=mWVn63OMeiTmVlV586pXxDa3l-_Pc1VcP1G39vYRGS4,3203
|
35
38
|
mxlpy/nn/__init__.py,sha256=Qjr-ERsY2lbD75sFBOhCUwEasQDSJKcpBn_kReLZ6oA,633
|
36
39
|
mxlpy/nn/_keras.py,sha256=-5zjHRu8OjSiZeuBSIZFyB63uBsNNH5o9y4kBcPnhx8,2263
|
37
40
|
mxlpy/nn/_torch.py,sha256=GUJmLU282VU4O-fs3Sz90SEaAnfuXN2MPlBr_tHmvn4,5775
|
@@ -39,8 +42,8 @@ mxlpy/npe/__init__.py,sha256=hBHCUD2JYDBBGS2kTY8mTCfWB3u1R7m5l--wUupZt6o,1270
|
|
39
42
|
mxlpy/npe/_keras.py,sha256=ytvXMPK9KUCGOzTQm08_SgafiMb-MOIUdZQV7JjAO40,9721
|
40
43
|
mxlpy/npe/_torch.py,sha256=v3joh6lFJJxvYJj--wzmKXL9UMTaIN3h6hPNq0uX9NU,11250
|
41
44
|
mxlpy/sbml/__init__.py,sha256=Mt97CddpLi3wIrA1b_5cagLmDdNxAVF_S7QV57Pzw8s,226
|
42
|
-
mxlpy/sbml/_data.py,sha256=
|
43
|
-
mxlpy/sbml/_export.py,sha256=
|
45
|
+
mxlpy/sbml/_data.py,sha256=98w5vyhdOHilD5zjy21XFzam0FlvcW_cb1XRTsIgD_M,2019
|
46
|
+
mxlpy/sbml/_export.py,sha256=leKf7dFqpoYxO3xFu4j_mM5eAgo-lq__ywADXsmamRU,21008
|
44
47
|
mxlpy/sbml/_import.py,sha256=_4MR54YyVkIh9eVAiSMd7yijhHC_ds-3v7M_C4Zn8BY,3565
|
45
48
|
mxlpy/sbml/_name_conversion.py,sha256=93muW47M7qJoE227HKHmThWpPeWsXDN9eM8cRH2pqPs,1340
|
46
49
|
mxlpy/surrogates/__init__.py,sha256=cz9qr0ToYSutIK45IvKrMe1mPP7Lj0I_V0HYGixfpZU,916
|
@@ -51,7 +54,7 @@ mxlpy/surrogates/_torch.py,sha256=gU0secuRBYgewhNqZmSo6_Xf804dSzwWwIYmdKA7y60,63
|
|
51
54
|
mxlpy/symbolic/__init__.py,sha256=_vM5YM5I6OH0QDbFt9uGYKO8Z5Vly0wbGuvUScVrPRU,258
|
52
55
|
mxlpy/symbolic/strikepy.py,sha256=tzo3uvPpXLDex09hWTuitVzuTNwbgl7jWGjD8g6a8iI,20033
|
53
56
|
mxlpy/symbolic/symbolic_model.py,sha256=cKfWoktvFmXjuo8egE7gXKrKBq2iBUiy_BcIKIvvz8A,3026
|
54
|
-
mxlpy-0.
|
55
|
-
mxlpy-0.
|
56
|
-
mxlpy-0.
|
57
|
-
mxlpy-0.
|
57
|
+
mxlpy-0.25.0.dist-info/METADATA,sha256=ENFh6nylpjiupCmhYEhozQCuP1FuyO0vGMegm3VPyvU,5413
|
58
|
+
mxlpy-0.25.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
59
|
+
mxlpy-0.25.0.dist-info/licenses/LICENSE,sha256=lHX9Eu70g3Iv1aOxXTWNHa3vq9vaVYSPQx4jOLYmDpw,1096
|
60
|
+
mxlpy-0.25.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|