physioblocks 1.0.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.
- physioblocks/__init__.py +37 -0
- physioblocks/base/__init__.py +27 -0
- physioblocks/base/operators.py +176 -0
- physioblocks/base/registers.py +108 -0
- physioblocks/computing/__init__.py +47 -0
- physioblocks/computing/assembling.py +291 -0
- physioblocks/computing/models.py +811 -0
- physioblocks/computing/quantities.py +354 -0
- physioblocks/configuration/__init__.py +38 -0
- physioblocks/configuration/aliases.py +203 -0
- physioblocks/configuration/base.py +123 -0
- physioblocks/configuration/computing/__init__.py +27 -0
- physioblocks/configuration/computing/quantities.py +56 -0
- physioblocks/configuration/constants.py +121 -0
- physioblocks/configuration/description/__init__.py +33 -0
- physioblocks/configuration/description/blocks.py +239 -0
- physioblocks/configuration/description/nets.py +155 -0
- physioblocks/configuration/functions.py +695 -0
- physioblocks/configuration/simulation/__init__.py +32 -0
- physioblocks/configuration/simulation/simulations.py +280 -0
- physioblocks/description/__init__.py +34 -0
- physioblocks/description/blocks.py +418 -0
- physioblocks/description/flux.py +157 -0
- physioblocks/description/nets.py +746 -0
- physioblocks/io/__init__.py +29 -0
- physioblocks/io/aliases.py +73 -0
- physioblocks/io/configuration.py +125 -0
- physioblocks/launcher/__main__.py +285 -0
- physioblocks/launcher/configuration.py +231 -0
- physioblocks/launcher/configure/__main__.py +99 -0
- physioblocks/launcher/constants.py +105 -0
- physioblocks/launcher/files.py +150 -0
- physioblocks/launcher/series.py +165 -0
- physioblocks/library/__init__.py +27 -0
- physioblocks/library/aliases/blocks/c_block.json +5 -0
- physioblocks/library/aliases/blocks/rc_block.json +5 -0
- physioblocks/library/aliases/blocks/rcr_block.json +5 -0
- physioblocks/library/aliases/blocks/spherical_cavity_block.json +5 -0
- physioblocks/library/aliases/blocks/valve_rl_block.json +5 -0
- physioblocks/library/aliases/flux/heart_flux_dof_couples.jsonc +4 -0
- physioblocks/library/aliases/model_components/active_law_macro_huxley_two_moments.json +5 -0
- physioblocks/library/aliases/model_components/rheology_fiber_additive.json +5 -0
- physioblocks/library/aliases/model_components/spherical_dynamics.json +5 -0
- physioblocks/library/aliases/model_components/velocity_law_hht.json +5 -0
- physioblocks/library/aliases/nets/circulation_alone_net.json +31 -0
- physioblocks/library/aliases/nets/spherical_heart_net.json +93 -0
- physioblocks/library/aliases/simulations/circulation_alone_forward_simulation.jsonc +55 -0
- physioblocks/library/aliases/simulations/default_forward_simulation.jsonc +7 -0
- physioblocks/library/aliases/simulations/default_time.jsonc +8 -0
- physioblocks/library/aliases/simulations/newton_method_solver.json +5 -0
- physioblocks/library/aliases/simulations/spherical_heart_forward_simulation.jsonc +157 -0
- physioblocks/library/aliases/simulations/spherical_heart_with_respiration_forward_simulation.jsonc +45 -0
- physioblocks/library/blocks/__init__.py +27 -0
- physioblocks/library/blocks/capacitances.py +516 -0
- physioblocks/library/blocks/cavity.py +192 -0
- physioblocks/library/blocks/valves.py +281 -0
- physioblocks/library/functions/__init__.py +27 -0
- physioblocks/library/functions/base_operations.py +129 -0
- physioblocks/library/functions/first_order.py +113 -0
- physioblocks/library/functions/piecewise.py +271 -0
- physioblocks/library/functions/trigonometric.py +78 -0
- physioblocks/library/functions/watchers.py +113 -0
- physioblocks/library/model_components/__init__.py +27 -0
- physioblocks/library/model_components/active_law.py +345 -0
- physioblocks/library/model_components/dynamics.py +986 -0
- physioblocks/library/model_components/rheology.py +160 -0
- physioblocks/library/model_components/velocity_law.py +169 -0
- physioblocks/references/circulation_alone_sim.jsonc +24 -0
- physioblocks/references/spherical_heart_respiration_sim.jsonc +33 -0
- physioblocks/references/spherical_heart_sim.jsonc +29 -0
- physioblocks/registers/__init__.py +32 -0
- physioblocks/registers/load_function_register.py +93 -0
- physioblocks/registers/save_function_register.py +106 -0
- physioblocks/registers/type_register.py +97 -0
- physioblocks/simulation/__init__.py +48 -0
- physioblocks/simulation/constants.py +30 -0
- physioblocks/simulation/functions.py +71 -0
- physioblocks/simulation/runtime.py +484 -0
- physioblocks/simulation/saved_quantities.py +129 -0
- physioblocks/simulation/setup.py +576 -0
- physioblocks/simulation/solvers.py +235 -0
- physioblocks/simulation/state.py +340 -0
- physioblocks/simulation/time_manager.py +354 -0
- physioblocks/utils/__init__.py +27 -0
- physioblocks/utils/dynamic_import_utils.py +150 -0
- physioblocks/utils/exceptions_utils.py +115 -0
- physioblocks/utils/gradient_test_utils.py +337 -0
- physioblocks/utils/math_utils.py +109 -0
- physioblocks-1.0.0.dist-info/METADATA +127 -0
- physioblocks-1.0.0.dist-info/RECORD +93 -0
- physioblocks-1.0.0.dist-info/WHEEL +4 -0
- physioblocks-1.0.0.dist-info/licenses/licenses/GPL-3.0-only.txt +674 -0
- physioblocks-1.0.0.dist-info/licenses/licenses/LGPL-3.0-only.txt +165 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright INRIA
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: LGPL-3.0-only
|
|
4
|
+
#
|
|
5
|
+
# Copyright INRIA
|
|
6
|
+
#
|
|
7
|
+
# This file is part of PhysioBlocks, a library mostly developed by the
|
|
8
|
+
# [Ananke project-team](https://team.inria.fr/ananke) at INRIA.
|
|
9
|
+
#
|
|
10
|
+
# Authors:
|
|
11
|
+
# - Colin Drieu
|
|
12
|
+
# - Dominique Chapelle
|
|
13
|
+
# - François Kimmig
|
|
14
|
+
# - Philippe Moireau
|
|
15
|
+
#
|
|
16
|
+
# PhysioBlocks is free software: you can redistribute it and/or modify it under the
|
|
17
|
+
# terms of the GNU Lesser General Public License as published by the Free Software
|
|
18
|
+
# Foundation, version 3 of the License.
|
|
19
|
+
#
|
|
20
|
+
# PhysioBlocks is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
21
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
22
|
+
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
23
|
+
#
|
|
24
|
+
# You should have received a copy of the GNU Lesser General Public License along with
|
|
25
|
+
# PhysioBlocks. If not, see <https://www.gnu.org/licenses/>.
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
Define decorators to register any type with a name in a dedicated register.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from collections.abc import Callable
|
|
32
|
+
from typing import Any, TypeVar
|
|
33
|
+
|
|
34
|
+
from physioblocks.base.registers import check_key_value_type, register
|
|
35
|
+
|
|
36
|
+
__type_register: dict[Any, Any] = {}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
T = TypeVar("T")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def register_type(type_id: str) -> Callable[[T], T]:
|
|
43
|
+
"""
|
|
44
|
+
Class decorator to register the class type with the given name.
|
|
45
|
+
|
|
46
|
+
:param type_id: the defined type id for the class type
|
|
47
|
+
:type type_id: str
|
|
48
|
+
|
|
49
|
+
:return: the class decorator
|
|
50
|
+
:rtype: Callable
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
def class_decorator(registered_type: T) -> T:
|
|
54
|
+
check_key_value_type(type_id, str, registered_type, type)
|
|
55
|
+
register(__type_register, type_id, registered_type)
|
|
56
|
+
return registered_type
|
|
57
|
+
|
|
58
|
+
return class_decorator
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_registered_type(type_id: str) -> Any:
|
|
62
|
+
"""
|
|
63
|
+
Get a registered type.
|
|
64
|
+
|
|
65
|
+
:param type_id: the registered type id
|
|
66
|
+
:type type_id: str
|
|
67
|
+
|
|
68
|
+
:return: the registered type
|
|
69
|
+
:rtype: type
|
|
70
|
+
"""
|
|
71
|
+
return __type_register[type_id]
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def get_registered_type_id(registered_type: type) -> Any:
|
|
75
|
+
"""
|
|
76
|
+
Get a registered type name for the matching type.
|
|
77
|
+
|
|
78
|
+
:param registered_type: the registered type id
|
|
79
|
+
:type registered_type: type
|
|
80
|
+
|
|
81
|
+
:return: the registered type id
|
|
82
|
+
:rtype: str
|
|
83
|
+
"""
|
|
84
|
+
return __type_register[registered_type]
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def is_registered(key: Any) -> bool:
|
|
88
|
+
"""
|
|
89
|
+
Get if the given value is registered as a type or type id.
|
|
90
|
+
|
|
91
|
+
:param key: the key to test
|
|
92
|
+
:type key: Any
|
|
93
|
+
|
|
94
|
+
:return: True if the key is registered, False otherwise
|
|
95
|
+
:rtype: bool
|
|
96
|
+
"""
|
|
97
|
+
return key in __type_register
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright INRIA
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: LGPL-3.0-only
|
|
4
|
+
#
|
|
5
|
+
# Copyright INRIA
|
|
6
|
+
#
|
|
7
|
+
# This file is part of PhysioBlocks, a library mostly developed by the
|
|
8
|
+
# [Ananke project-team](https://team.inria.fr/ananke) at INRIA.
|
|
9
|
+
#
|
|
10
|
+
# Authors:
|
|
11
|
+
# - Colin Drieu
|
|
12
|
+
# - Dominique Chapelle
|
|
13
|
+
# - François Kimmig
|
|
14
|
+
# - Philippe Moireau
|
|
15
|
+
#
|
|
16
|
+
# PhysioBlocks is free software: you can redistribute it and/or modify it under the
|
|
17
|
+
# terms of the GNU Lesser General Public License as published by the Free Software
|
|
18
|
+
# Foundation, version 3 of the License.
|
|
19
|
+
#
|
|
20
|
+
# PhysioBlocks is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
21
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
22
|
+
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
23
|
+
#
|
|
24
|
+
# You should have received a copy of the GNU Lesser General Public License along with
|
|
25
|
+
# PhysioBlocks. If not, see <https://www.gnu.org/licenses/>.
|
|
26
|
+
|
|
27
|
+
"""
|
|
28
|
+
Define methods to setup a simulation and run it.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
__all__ = [
|
|
32
|
+
"AbstractFunction",
|
|
33
|
+
"AbstractSimulation",
|
|
34
|
+
"ForwardSimulation",
|
|
35
|
+
"SimulationError",
|
|
36
|
+
"SimulationFactory",
|
|
37
|
+
"State",
|
|
38
|
+
"Time",
|
|
39
|
+
]
|
|
40
|
+
from physioblocks.simulation.functions import AbstractFunction
|
|
41
|
+
from physioblocks.simulation.runtime import (
|
|
42
|
+
AbstractSimulation,
|
|
43
|
+
ForwardSimulation,
|
|
44
|
+
SimulationError,
|
|
45
|
+
)
|
|
46
|
+
from physioblocks.simulation.setup import SimulationFactory
|
|
47
|
+
from physioblocks.simulation.state import State
|
|
48
|
+
from physioblocks.simulation.time_manager import Time
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright INRIA
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: LGPL-3.0-only
|
|
4
|
+
#
|
|
5
|
+
# Copyright INRIA
|
|
6
|
+
#
|
|
7
|
+
# This file is part of PhysioBlocks, a library mostly developed by the
|
|
8
|
+
# [Ananke project-team](https://team.inria.fr/ananke) at INRIA.
|
|
9
|
+
#
|
|
10
|
+
# Authors:
|
|
11
|
+
# - Colin Drieu
|
|
12
|
+
# - Dominique Chapelle
|
|
13
|
+
# - François Kimmig
|
|
14
|
+
# - Philippe Moireau
|
|
15
|
+
#
|
|
16
|
+
# PhysioBlocks is free software: you can redistribute it and/or modify it under the
|
|
17
|
+
# terms of the GNU Lesser General Public License as published by the Free Software
|
|
18
|
+
# Foundation, version 3 of the License.
|
|
19
|
+
#
|
|
20
|
+
# PhysioBlocks is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
21
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
22
|
+
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
23
|
+
#
|
|
24
|
+
# You should have received a copy of the GNU Lesser General Public License along with
|
|
25
|
+
# PhysioBlocks. If not, see <https://www.gnu.org/licenses/>.
|
|
26
|
+
|
|
27
|
+
"""Define constants in the simulation module"""
|
|
28
|
+
|
|
29
|
+
SCHEME_TIME_SHIFT_PREFIX = "scheme_ts"
|
|
30
|
+
"""Prefix for time shift quantities ids."""
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright INRIA
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: LGPL-3.0-only
|
|
4
|
+
#
|
|
5
|
+
# Copyright INRIA
|
|
6
|
+
#
|
|
7
|
+
# This file is part of PhysioBlocks, a library mostly developed by the
|
|
8
|
+
# [Ananke project-team](https://team.inria.fr/ananke) at INRIA.
|
|
9
|
+
#
|
|
10
|
+
# Authors:
|
|
11
|
+
# - Colin Drieu
|
|
12
|
+
# - Dominique Chapelle
|
|
13
|
+
# - François Kimmig
|
|
14
|
+
# - Philippe Moireau
|
|
15
|
+
#
|
|
16
|
+
# PhysioBlocks is free software: you can redistribute it and/or modify it under the
|
|
17
|
+
# terms of the GNU Lesser General Public License as published by the Free Software
|
|
18
|
+
# Foundation, version 3 of the License.
|
|
19
|
+
#
|
|
20
|
+
# PhysioBlocks is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
21
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
22
|
+
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
23
|
+
#
|
|
24
|
+
# You should have received a copy of the GNU Lesser General Public License along with
|
|
25
|
+
# PhysioBlocks. If not, see <https://www.gnu.org/licenses/>.
|
|
26
|
+
|
|
27
|
+
"""Declare base functions to write functions used during the simulation."""
|
|
28
|
+
|
|
29
|
+
from abc import ABC, abstractmethod
|
|
30
|
+
from inspect import signature
|
|
31
|
+
from typing import Any
|
|
32
|
+
|
|
33
|
+
from physioblocks.simulation.state import STATE_NAME_ID
|
|
34
|
+
from physioblocks.simulation.time_manager import TIME_QUANTITY_ID
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class AbstractFunction(ABC):
|
|
38
|
+
"""Base class for functions that update quantities during the simulation."""
|
|
39
|
+
|
|
40
|
+
@abstractmethod
|
|
41
|
+
def eval(self, *args: Any, **kwargs: Any) -> Any:
|
|
42
|
+
"""Child Functions have to overwrite this method to compute the
|
|
43
|
+
function result."""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def is_time_function(tested_function: AbstractFunction) -> bool:
|
|
47
|
+
"""Test if the simulation function needs simulation time parameter.
|
|
48
|
+
|
|
49
|
+
:param tested_function: the function
|
|
50
|
+
:type tested_function: AbstractFunction
|
|
51
|
+
|
|
52
|
+
:return: True if the function needs time, False otherwise
|
|
53
|
+
:rtype: bool
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
sig = signature(tested_function.eval)
|
|
57
|
+
return TIME_QUANTITY_ID in sig.parameters
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def is_state_function(tested_function: AbstractFunction) -> bool:
|
|
61
|
+
"""Test if the simulation function needs the state.
|
|
62
|
+
|
|
63
|
+
:param function: the simulation function
|
|
64
|
+
:type function: AbstractFunction
|
|
65
|
+
|
|
66
|
+
:return: True if the function needs the state, False otherwise
|
|
67
|
+
:rtype: bool
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
sig = signature(tested_function.eval)
|
|
71
|
+
return STATE_NAME_ID in sig.parameters
|