modelbase2 0.1.79__py3-none-any.whl → 0.2.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.
- modelbase2/__init__.py +138 -26
- modelbase2/distributions.py +306 -0
- modelbase2/experimental/__init__.py +17 -0
- modelbase2/experimental/codegen.py +239 -0
- modelbase2/experimental/diff.py +227 -0
- modelbase2/experimental/notes.md +4 -0
- modelbase2/experimental/tex.py +521 -0
- modelbase2/fit.py +284 -0
- modelbase2/fns.py +185 -0
- modelbase2/integrators/__init__.py +19 -0
- modelbase2/integrators/int_assimulo.py +146 -0
- modelbase2/integrators/int_scipy.py +147 -0
- modelbase2/label_map.py +610 -0
- modelbase2/linear_label_map.py +301 -0
- modelbase2/mc.py +548 -0
- modelbase2/mca.py +280 -0
- modelbase2/model.py +1621 -0
- modelbase2/npe.py +343 -0
- modelbase2/parallel.py +171 -0
- modelbase2/parameterise.py +28 -0
- modelbase2/paths.py +36 -0
- modelbase2/plot.py +829 -0
- modelbase2/sbml/__init__.py +14 -0
- modelbase2/sbml/_data.py +77 -0
- modelbase2/sbml/_export.py +656 -0
- modelbase2/sbml/_import.py +585 -0
- modelbase2/sbml/_mathml.py +691 -0
- modelbase2/sbml/_name_conversion.py +52 -0
- modelbase2/sbml/_unit_conversion.py +74 -0
- modelbase2/scan.py +616 -0
- modelbase2/scope.py +96 -0
- modelbase2/simulator.py +635 -0
- modelbase2/surrogates/__init__.py +32 -0
- modelbase2/surrogates/_poly.py +66 -0
- modelbase2/surrogates/_torch.py +249 -0
- modelbase2/surrogates.py +316 -0
- modelbase2/types.py +352 -11
- modelbase2-0.2.0.dist-info/METADATA +81 -0
- modelbase2-0.2.0.dist-info/RECORD +42 -0
- {modelbase2-0.1.79.dist-info → modelbase2-0.2.0.dist-info}/WHEEL +1 -1
- modelbase2/core/__init__.py +0 -29
- modelbase2/core/algebraic_module_container.py +0 -130
- modelbase2/core/constant_container.py +0 -113
- modelbase2/core/data.py +0 -109
- modelbase2/core/name_container.py +0 -29
- modelbase2/core/reaction_container.py +0 -115
- modelbase2/core/utils.py +0 -28
- modelbase2/core/variable_container.py +0 -24
- modelbase2/ode/__init__.py +0 -13
- modelbase2/ode/integrator.py +0 -80
- modelbase2/ode/mca.py +0 -270
- modelbase2/ode/model.py +0 -470
- modelbase2/ode/simulator.py +0 -153
- modelbase2/utils/__init__.py +0 -0
- modelbase2/utils/plotting.py +0 -372
- modelbase2-0.1.79.dist-info/METADATA +0 -44
- modelbase2-0.1.79.dist-info/RECORD +0 -22
- {modelbase2-0.1.79.dist-info → modelbase2-0.2.0.dist-info/licenses}/LICENSE +0 -0
modelbase2/utils/plotting.py
DELETED
@@ -1,372 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import itertools as it
|
4
|
-
import math
|
5
|
-
import matplotlib.pyplot as plt
|
6
|
-
import numpy as np
|
7
|
-
import pandas as pd
|
8
|
-
from ..types import Axes, Figure
|
9
|
-
from matplotlib.collections import QuadMesh
|
10
|
-
from matplotlib.colors import LogNorm, Normalize, SymLogNorm
|
11
|
-
from matplotlib.colors import colorConverter as _colorConverter
|
12
|
-
from typing import Any, Iterable, Optional, Sized, Union
|
13
|
-
|
14
|
-
|
15
|
-
def _get_plot_kwargs(
|
16
|
-
figure_kwargs: Optional[dict[str, Any]],
|
17
|
-
subplot_kwargs: Optional[dict[str, Any]],
|
18
|
-
plot_kwargs: Optional[dict[str, Any]],
|
19
|
-
grid_kwargs: Optional[dict[str, Any]],
|
20
|
-
tick_kwargs: Optional[dict[str, Any]],
|
21
|
-
label_kwargs: Optional[dict[str, Any]],
|
22
|
-
title_kwargs: Optional[dict[str, Any]],
|
23
|
-
legend_kwargs: Optional[dict[str, Any]],
|
24
|
-
) -> dict[str, dict[str, Any]]:
|
25
|
-
"""Get default plot kwargs or overwrite them."""
|
26
|
-
local_figure_kwargs = {"figsize": (10, 7)}
|
27
|
-
local_subplot_kwargs = {"facecolor": "white"}
|
28
|
-
local_plot_kwargs = {"linewidth": 4}
|
29
|
-
local_grid_kwargs = {
|
30
|
-
"color": (0, 0, 0),
|
31
|
-
"alpha": 0.33,
|
32
|
-
"linestyle": "dashed",
|
33
|
-
"linewidth": 1,
|
34
|
-
}
|
35
|
-
local_tick_kwargs = {
|
36
|
-
"direction": "out",
|
37
|
-
"length": 6,
|
38
|
-
"width": 2,
|
39
|
-
"labelsize": 14,
|
40
|
-
"color": "0.15",
|
41
|
-
"pad": 7,
|
42
|
-
}
|
43
|
-
local_label_kwargs = {"fontsize": 14}
|
44
|
-
local_title_kwargs = {"fontsize": 18}
|
45
|
-
local_legend_kwargs = {
|
46
|
-
"loc": "upper left",
|
47
|
-
"bbox_to_anchor": (1.02, 1),
|
48
|
-
"borderaxespad": 0,
|
49
|
-
"ncol": 1,
|
50
|
-
"fontsize": 12,
|
51
|
-
"numpoints": 1,
|
52
|
-
"scatterpoints": 1,
|
53
|
-
"markerscale": 1,
|
54
|
-
"frameon": False,
|
55
|
-
}
|
56
|
-
if figure_kwargs is not None:
|
57
|
-
local_figure_kwargs.update(figure_kwargs)
|
58
|
-
if subplot_kwargs is not None:
|
59
|
-
local_subplot_kwargs.update(subplot_kwargs)
|
60
|
-
if plot_kwargs is not None:
|
61
|
-
local_plot_kwargs.update(plot_kwargs)
|
62
|
-
if grid_kwargs is not None:
|
63
|
-
local_grid_kwargs.update(grid_kwargs)
|
64
|
-
if tick_kwargs is not None:
|
65
|
-
local_tick_kwargs.update(tick_kwargs)
|
66
|
-
if label_kwargs is not None:
|
67
|
-
local_label_kwargs.update(label_kwargs)
|
68
|
-
if title_kwargs is not None:
|
69
|
-
local_title_kwargs.update(title_kwargs)
|
70
|
-
if legend_kwargs is not None:
|
71
|
-
local_legend_kwargs.update(legend_kwargs)
|
72
|
-
return {
|
73
|
-
"figure": local_figure_kwargs,
|
74
|
-
"subplot": local_subplot_kwargs,
|
75
|
-
"plot": local_plot_kwargs,
|
76
|
-
"grid": local_grid_kwargs,
|
77
|
-
"ticks": local_tick_kwargs,
|
78
|
-
"label": local_label_kwargs,
|
79
|
-
"title": local_title_kwargs,
|
80
|
-
"legend": local_legend_kwargs,
|
81
|
-
}
|
82
|
-
|
83
|
-
|
84
|
-
def _style_subplot(
|
85
|
-
ax: Axes,
|
86
|
-
kwargs: dict,
|
87
|
-
xlabel: str | None = None,
|
88
|
-
ylabel: str | None = None,
|
89
|
-
zlabel: str | None = None,
|
90
|
-
title: str | None = None,
|
91
|
-
legend: bool = False,
|
92
|
-
grid: bool | None = None,
|
93
|
-
) -> None:
|
94
|
-
"""Set style of the subplot."""
|
95
|
-
if grid:
|
96
|
-
ax.grid(True, which="major", axis="both", **kwargs["grid"])
|
97
|
-
if legend:
|
98
|
-
ax.legend(**kwargs["legend"])
|
99
|
-
if title is not None:
|
100
|
-
ax.set_title(title, **kwargs["title"])
|
101
|
-
if xlabel is not None:
|
102
|
-
ax.set_xlabel(xlabel, **kwargs["label"])
|
103
|
-
if ylabel is not None:
|
104
|
-
ax.set_ylabel(ylabel, **kwargs["label"])
|
105
|
-
if zlabel is not None:
|
106
|
-
ax.set_zlabel(zlabel, **kwargs["label"])
|
107
|
-
ax.tick_params(**kwargs["ticks"])
|
108
|
-
for axis in ["top", "bottom", "left", "right"]:
|
109
|
-
ax.spines[axis].set_linewidth(0)
|
110
|
-
|
111
|
-
|
112
|
-
def plot(
|
113
|
-
plot_args: Iterable,
|
114
|
-
legend: Optional[Iterable[str]] = None,
|
115
|
-
xlabel: Optional[str] = None,
|
116
|
-
ylabel: Optional[str] = None,
|
117
|
-
title: Optional[str] = None,
|
118
|
-
grid: bool = True,
|
119
|
-
tight_layout: bool = True,
|
120
|
-
ax: Optional[plt.Axes] = None,
|
121
|
-
figure_kwargs: Optional[dict[str, Any]] = None,
|
122
|
-
subplot_kwargs: Optional[dict[str, Any]] = None,
|
123
|
-
plot_kwargs: Optional[dict[str, Any]] = None,
|
124
|
-
grid_kwargs: Optional[dict[str, Any]] = None,
|
125
|
-
legend_kwargs: Optional[dict[str, Any]] = None,
|
126
|
-
tick_kwargs: Optional[dict[str, Any]] = None,
|
127
|
-
label_kwargs: Optional[dict[str, Any]] = None,
|
128
|
-
title_kwargs: Optional[dict[str, Any]] = None,
|
129
|
-
) -> tuple[Figure, plt.Axes]:
|
130
|
-
"""Plot simulation results as a grid."""
|
131
|
-
kwargs = _get_plot_kwargs(
|
132
|
-
figure_kwargs=figure_kwargs,
|
133
|
-
subplot_kwargs=subplot_kwargs,
|
134
|
-
plot_kwargs=plot_kwargs,
|
135
|
-
grid_kwargs=grid_kwargs,
|
136
|
-
tick_kwargs=tick_kwargs,
|
137
|
-
label_kwargs=label_kwargs,
|
138
|
-
title_kwargs=title_kwargs,
|
139
|
-
legend_kwargs=legend_kwargs,
|
140
|
-
)
|
141
|
-
ylabel = ylabel if ylabel is not None else "Remember to label your axes"
|
142
|
-
xlabel = xlabel if xlabel is not None else "Remember to label your axes"
|
143
|
-
|
144
|
-
if ax is None:
|
145
|
-
fig, ax = plt.subplots(
|
146
|
-
nrows=1,
|
147
|
-
ncols=1,
|
148
|
-
squeeze=True,
|
149
|
-
subplot_kw=kwargs["subplot"],
|
150
|
-
**kwargs["figure"],
|
151
|
-
)
|
152
|
-
else:
|
153
|
-
fig = ax.get_figure()
|
154
|
-
ax.plot(*plot_args, **kwargs["plot"])
|
155
|
-
if grid:
|
156
|
-
ax.grid(True, which="major", axis="both", **kwargs["grid"])
|
157
|
-
if legend is not None:
|
158
|
-
if isinstance(legend, str):
|
159
|
-
legend = [legend]
|
160
|
-
ax.legend(legend, **kwargs["legend"])
|
161
|
-
ax.set_ylabel(ylabel, **kwargs["label"])
|
162
|
-
ax.set_xlabel(xlabel, **kwargs["label"])
|
163
|
-
ax.set_title(title, **kwargs["title"])
|
164
|
-
ax.tick_params(**kwargs["ticks"])
|
165
|
-
if tight_layout:
|
166
|
-
fig.tight_layout()
|
167
|
-
return fig, ax
|
168
|
-
|
169
|
-
|
170
|
-
def plot_grid(
|
171
|
-
plot_groups: Sized,
|
172
|
-
legend_groups: Optional[Iterable] = None,
|
173
|
-
ncols: Optional[int] = None,
|
174
|
-
sharex: bool = True,
|
175
|
-
sharey: bool = True,
|
176
|
-
xlabels: Optional[Union[str, Iterable[str]]] = None,
|
177
|
-
ylabels: Optional[Union[str, Iterable[str]]] = None,
|
178
|
-
figure_title: str | None = None,
|
179
|
-
plot_titles: Optional[Union[Iterable[str], Iterable[None]]] = None,
|
180
|
-
grid: bool = True,
|
181
|
-
tight_layout: bool = True,
|
182
|
-
figure_kwargs: Optional[dict[str, Any]] = None,
|
183
|
-
subplot_kwargs: Optional[dict[str, Any]] = None,
|
184
|
-
plot_kwargs: Optional[dict[str, Any]] = None,
|
185
|
-
grid_kwargs: Optional[dict[str, Any]] = None,
|
186
|
-
legend_kwargs: Optional[dict[str, Any]] = None,
|
187
|
-
tick_kwargs: Optional[dict[str, Any]] = None,
|
188
|
-
label_kwargs: Optional[dict[str, Any]] = None,
|
189
|
-
title_kwargs: Optional[dict[str, Any]] = None,
|
190
|
-
) -> tuple[Figure, Axes]:
|
191
|
-
"""Plot simulation results as a grid."""
|
192
|
-
if ncols is None:
|
193
|
-
_, ncols = min(
|
194
|
-
(
|
195
|
-
(math.ceil(len(plot_groups) / i) * i - len(plot_groups), i)
|
196
|
-
for i in range(2, 6)
|
197
|
-
),
|
198
|
-
key=lambda x: (x[0], -x[1]),
|
199
|
-
)
|
200
|
-
nrows = math.ceil(len(plot_groups) / ncols)
|
201
|
-
if figure_kwargs is None:
|
202
|
-
figure_kwargs = {}
|
203
|
-
figure_kwargs.setdefault("figsize", (5 * ncols, 4 * nrows))
|
204
|
-
if legend_kwargs is None:
|
205
|
-
legend_kwargs = {}
|
206
|
-
legend_kwargs.setdefault("loc", "best")
|
207
|
-
legend_kwargs.setdefault("bbox_to_anchor", None)
|
208
|
-
legend_kwargs.setdefault("borderaxespad", 0.5)
|
209
|
-
kwargs = _get_plot_kwargs(
|
210
|
-
figure_kwargs=figure_kwargs,
|
211
|
-
subplot_kwargs=subplot_kwargs,
|
212
|
-
plot_kwargs=plot_kwargs,
|
213
|
-
grid_kwargs=grid_kwargs,
|
214
|
-
tick_kwargs=tick_kwargs,
|
215
|
-
label_kwargs=label_kwargs,
|
216
|
-
title_kwargs=title_kwargs,
|
217
|
-
legend_kwargs=legend_kwargs,
|
218
|
-
)
|
219
|
-
|
220
|
-
if legend_groups is None:
|
221
|
-
legend_groups = it.repeat(None)
|
222
|
-
if ylabels is None:
|
223
|
-
ylabels = it.repeat("Remember to label your axes")
|
224
|
-
else:
|
225
|
-
if isinstance(ylabels, str):
|
226
|
-
ylabels = it.repeat(ylabels)
|
227
|
-
if xlabels is None:
|
228
|
-
xlabels = it.repeat("Remember to label your axes")
|
229
|
-
else:
|
230
|
-
if isinstance(xlabels, str):
|
231
|
-
xlabels = it.repeat(xlabels)
|
232
|
-
if plot_titles is None:
|
233
|
-
plot_titles = it.repeat(None)
|
234
|
-
|
235
|
-
fig, axs = plt.subplots(
|
236
|
-
nrows=nrows,
|
237
|
-
ncols=ncols,
|
238
|
-
sharex=sharex,
|
239
|
-
sharey=sharey,
|
240
|
-
squeeze=False,
|
241
|
-
subplot_kw=kwargs["subplot"],
|
242
|
-
**kwargs["figure"],
|
243
|
-
)
|
244
|
-
for ax, plot_args, legend_args, title in zip(axs.ravel(), plot_groups, legend_groups, plot_titles): # type: ignore
|
245
|
-
ax.plot(*plot_args, **kwargs["plot"])
|
246
|
-
ax.set_title(title, **kwargs["title"])
|
247
|
-
if legend_args is not None:
|
248
|
-
ax.legend(legend_args, **kwargs["legend"])
|
249
|
-
ax.tick_params(**kwargs["ticks"])
|
250
|
-
if grid:
|
251
|
-
ax.grid(True, which="major", axis="both", **kwargs["grid"])
|
252
|
-
|
253
|
-
if sharey:
|
254
|
-
for ax, ylabel in zip(axs[:, 0], ylabels): # type: ignore
|
255
|
-
ax.set_ylabel(ylabel, **kwargs["label"])
|
256
|
-
else:
|
257
|
-
for ax, ylabel in zip(axs.ravel(), ylabels):
|
258
|
-
ax.set_ylabel(ylabel, **kwargs["label"])
|
259
|
-
if sharex:
|
260
|
-
for ax, xlabel in zip(axs[-1], xlabels): # type: ignore
|
261
|
-
ax.set_xlabel(xlabel, **kwargs["label"])
|
262
|
-
else:
|
263
|
-
for ax, xlabel in zip(axs.ravel(), xlabels):
|
264
|
-
ax.set_xlabel(xlabel, **kwargs["label"])
|
265
|
-
fig.suptitle(figure_title, y=1.025, **kwargs["title"])
|
266
|
-
if tight_layout:
|
267
|
-
fig.tight_layout()
|
268
|
-
return fig, axs
|
269
|
-
|
270
|
-
|
271
|
-
def relative_luminance(color: list[float]) -> float:
|
272
|
-
"""Calculate the relative luminance of a color."""
|
273
|
-
rgb = _colorConverter.to_rgba_array(color)[:, :3]
|
274
|
-
|
275
|
-
# If RsRGB <= 0.03928 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4
|
276
|
-
rsrgb = np.where(rgb <= 0.03928, rgb / 12.92, ((rgb + 0.055) / 1.055) ** 2.4)
|
277
|
-
|
278
|
-
# L = 0.2126 * R + 0.7152 * G + 0.0722 * B
|
279
|
-
rel_luminance: list[float] = np.matmul(rsrgb, [0.2126, 0.7152, 0.0722])
|
280
|
-
return rel_luminance[0]
|
281
|
-
|
282
|
-
|
283
|
-
def get_norm(vmin: float, vmax: float) -> plt.Normalize:
|
284
|
-
if vmax < 1000 and vmin > -1000:
|
285
|
-
norm = Normalize(vmin=vmin, vmax=vmax)
|
286
|
-
elif vmin <= 0:
|
287
|
-
norm = SymLogNorm(linthresh=1, vmin=vmin, vmax=vmax, base=10)
|
288
|
-
else:
|
289
|
-
norm = LogNorm(vmin=vmin, vmax=vmax)
|
290
|
-
return norm
|
291
|
-
|
292
|
-
|
293
|
-
def heatmap_from_dataframe(
|
294
|
-
df: pd.DataFrame,
|
295
|
-
title: Optional[str] = None,
|
296
|
-
xlabel: Optional[str] = None,
|
297
|
-
ylabel: Optional[str] = None,
|
298
|
-
annotate: bool = True,
|
299
|
-
colorbar: bool = True,
|
300
|
-
cmap: str = "viridis",
|
301
|
-
vmax: Optional[float] = None,
|
302
|
-
vmin: Optional[float] = None,
|
303
|
-
norm: plt.Normalize | None = None,
|
304
|
-
ax: Optional[Axes] = None,
|
305
|
-
cax: Optional[Axes] = None,
|
306
|
-
sci_annotation_bounds: tuple[float, float] = (0.01, 100),
|
307
|
-
annotation_style: str = "2g",
|
308
|
-
figsize: tuple[float, float] = (8, 6),
|
309
|
-
) -> tuple[Figure, plt.Axes, QuadMesh]:
|
310
|
-
data = df.values
|
311
|
-
rows = df.index
|
312
|
-
columns = df.columns
|
313
|
-
|
314
|
-
if ax is None:
|
315
|
-
fig, ax = plt.subplots(figsize=figsize)
|
316
|
-
else:
|
317
|
-
fig = ax.get_figure()
|
318
|
-
|
319
|
-
# Create norm
|
320
|
-
if norm is None:
|
321
|
-
if vmax is None:
|
322
|
-
vmax = np.nanmax(data)
|
323
|
-
if vmin is None:
|
324
|
-
vmin = np.nanmin(data)
|
325
|
-
norm = get_norm(vmin=vmin, vmax=vmax) # type: ignore
|
326
|
-
|
327
|
-
# Create heatmap
|
328
|
-
hm = ax.pcolormesh(data, norm=norm, cmap=cmap)
|
329
|
-
|
330
|
-
# Despine axis
|
331
|
-
for side in ["top", "right", "left", "bottom"]:
|
332
|
-
ax.spines[side].set_visible(False)
|
333
|
-
|
334
|
-
# Set the axis limits
|
335
|
-
ax.set(xlim=(0, data.shape[1]), ylim=(0, data.shape[0]))
|
336
|
-
|
337
|
-
# Set ticks and ticklabels
|
338
|
-
ax.set_xticks(np.arange(len(columns)) + 0.5)
|
339
|
-
ax.set_xticklabels(columns)
|
340
|
-
|
341
|
-
ax.set_yticks(np.arange(len(rows)) + 0.5)
|
342
|
-
ax.set_yticklabels(rows)
|
343
|
-
|
344
|
-
# Set title and axis labels
|
345
|
-
ax.set_title(title)
|
346
|
-
ax.set_xlabel(xlabel)
|
347
|
-
ax.set_ylabel(ylabel)
|
348
|
-
|
349
|
-
if annotate:
|
350
|
-
text_kwargs = {"ha": "center", "va": "center"}
|
351
|
-
hm.update_scalarmappable() # So that get_facecolor is an array
|
352
|
-
xpos, ypos = np.meshgrid(np.arange(len(columns)), np.arange(len(rows)))
|
353
|
-
for x, y, val, color in zip(
|
354
|
-
xpos.flat, ypos.flat, hm.get_array(), hm.get_facecolor()
|
355
|
-
):
|
356
|
-
text_kwargs["color"] = (
|
357
|
-
"black" if relative_luminance(color) > 0.45 else "white"
|
358
|
-
)
|
359
|
-
if sci_annotation_bounds[0] < abs(val) <= sci_annotation_bounds[1]:
|
360
|
-
val_text = f"{val:.{annotation_style}}"
|
361
|
-
else:
|
362
|
-
val_text = f"{val:.0e}"
|
363
|
-
ax.text(x + 0.5, y + 0.5, val_text, **text_kwargs)
|
364
|
-
|
365
|
-
if colorbar:
|
366
|
-
# Add a colorbar
|
367
|
-
cb = ax.figure.colorbar(hm, cax, ax)
|
368
|
-
cb.outline.set_linewidth(0)
|
369
|
-
|
370
|
-
# Invert the y axis to show the plot in matrix form
|
371
|
-
ax.invert_yaxis()
|
372
|
-
return fig, ax, hm
|
@@ -1,44 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: modelbase2
|
3
|
-
Version: 0.1.79
|
4
|
-
Summary: A package to build metabolic models
|
5
|
-
Home-page: https://gitlab.com/qtb-hhu/modelbase-software
|
6
|
-
License: GPL-3.0-or-later
|
7
|
-
Keywords: modelling,ode,metabolic
|
8
|
-
Author: Marvin van Aalst
|
9
|
-
Author-email: marvin.vanaalst@gmail.com
|
10
|
-
Maintainer: Marvin van Aalst
|
11
|
-
Maintainer-email: marvin.vanaalst@gmail.com
|
12
|
-
Requires-Python: >=3.8,<4.0
|
13
|
-
Classifier: Development Status :: 5 - Production/Stable
|
14
|
-
Classifier: Environment :: Console
|
15
|
-
Classifier: Intended Audience :: Developers
|
16
|
-
Classifier: Intended Audience :: Science/Research
|
17
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
18
|
-
Classifier: Operating System :: MacOS
|
19
|
-
Classifier: Operating System :: Microsoft :: Windows
|
20
|
-
Classifier: Operating System :: OS Independent
|
21
|
-
Classifier: Operating System :: POSIX
|
22
|
-
Classifier: Operating System :: Unix
|
23
|
-
Classifier: Programming Language :: Python :: 3
|
24
|
-
Classifier: Programming Language :: Python :: 3.8
|
25
|
-
Classifier: Programming Language :: Python :: 3.9
|
26
|
-
Classifier: Programming Language :: Python :: 3.10
|
27
|
-
Classifier: Programming Language :: Python :: 3.11
|
28
|
-
Classifier: Programming Language :: Python :: 3
|
29
|
-
Classifier: Programming Language :: Python :: 3.9
|
30
|
-
Classifier: Topic :: Scientific/Engineering
|
31
|
-
Classifier: Topic :: Software Development
|
32
|
-
Requires-Dist: black (>=22.3.0,<23.0.0)
|
33
|
-
Requires-Dist: ipywidgets (>=8.0.0,<9.0.0)
|
34
|
-
Requires-Dist: matplotlib (>=3.5.0,<4.0.0)
|
35
|
-
Requires-Dist: modelbase (>=1.14.0,<2.0.0)
|
36
|
-
Requires-Dist: numpy (>=1.21.4,<2.0.0)
|
37
|
-
Requires-Dist: pandas (>=1.3.4,<2.0.0)
|
38
|
-
Requires-Dist: python-libsbml (>=5.19.2,<6.0.0)
|
39
|
-
Requires-Dist: scipy (>=1.7.2,<2.0.0)
|
40
|
-
Requires-Dist: sympy (>=1.9,<2.0)
|
41
|
-
Requires-Dist: tqdm (>=4.62.3,<5.0.0)
|
42
|
-
Requires-Dist: typing-extensions (>=4.0.0,<5.0.0)
|
43
|
-
Project-URL: Documentation, https://modelbase.readthedocs.io/en/latest/
|
44
|
-
Project-URL: Repository, https://gitlab.com/qtb-hhu/modelbase-software
|
@@ -1,22 +0,0 @@
|
|
1
|
-
modelbase2/__init__.py,sha256=GCnwbRxRzlmpu5f_0oOGUjz4iYDZSClTatvMifM_cf4,723
|
2
|
-
modelbase2/core/__init__.py,sha256=5XfG_W15BXkIu1oAa8s7VYa5YS7Yb7f2BADPcXGvA7E,690
|
3
|
-
modelbase2/core/algebraic_module_container.py,sha256=vejOAUlXq7PvkVlJceqw8VSaPDD5ZutDr7DJjq7cG2g,4564
|
4
|
-
modelbase2/core/constant_container.py,sha256=endFE4d9kaphh6ireQpj5TozwmnrFJg-VfbBZO03DaA,4669
|
5
|
-
modelbase2/core/data.py,sha256=uOpFNDVRowYBWzvnR1_zVf9wGRjlnpReWmuAj0orJr4,2452
|
6
|
-
modelbase2/core/name_container.py,sha256=RheHM8Y5OuH8hNzEznbos885P9ANjJHVlDVUI90wiTs,918
|
7
|
-
modelbase2/core/reaction_container.py,sha256=U_o5LXv_F8Cd0nOzy0sbHF8EBl2L2LtB7OA-MWM4_Es,4860
|
8
|
-
modelbase2/core/utils.py,sha256=uEJBNUKmFTE_TG9Bj3vKP6JPRPg7DqRwO_szd-Z4JiI,857
|
9
|
-
modelbase2/core/variable_container.py,sha256=zww22-mW1XxiBel_4pLE1nnu-bPPqtTLN8sP5dvP1Sg,736
|
10
|
-
modelbase2/ode/__init__.py,sha256=7iAUR7B3nPVZ2YLfkOdEv3IZw-hlh1ogxDyjj6Ra4pA,217
|
11
|
-
modelbase2/ode/integrator.py,sha256=ZueqzmufHuJYTYGLMQC5KaaGOgjMPB_rkM4ZEMcHQog,2239
|
12
|
-
modelbase2/ode/mca.py,sha256=5VNSCa28aub-oGw9vctwSON_OYDtupmzZp0r_-XD4Rs,8450
|
13
|
-
modelbase2/ode/model.py,sha256=RYo3ywCfzoCG72FPun3XTl2Pj6EcCa66bN5eO-KhDUc,15618
|
14
|
-
modelbase2/ode/simulator.py,sha256=v67OAW8qCdI7iPrr4bTigBbf_lLPUgdcJgIEPpyoWKk,4880
|
15
|
-
modelbase2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
modelbase2/types.py,sha256=-h7uRV5ZC_UiUEH1tTm0SunlyLo7TRK3nwMd4-VuLDM,407
|
17
|
-
modelbase2/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
|
-
modelbase2/utils/plotting.py,sha256=NxobtfoLwPHYz01Cp4PTEefN6sUqRB1vop_EEkJK0Ac,12357
|
19
|
-
modelbase2-0.1.79.dist-info/LICENSE,sha256=qvG2VolmSkrcocL34V1ieOx-Rn-fpVcUbb25gHzVgZw,35079
|
20
|
-
modelbase2-0.1.79.dist-info/WHEEL,sha256=vxFmldFsRN_Hx10GDvsdv1wroKq8r5Lzvjp6GZ4OO8c,88
|
21
|
-
modelbase2-0.1.79.dist-info/METADATA,sha256=xjn4znhNo1vpSk79L3MIwfqWxx0o_hgI6zcv4VSDT_M,1900
|
22
|
-
modelbase2-0.1.79.dist-info/RECORD,,
|
File without changes
|