Skip to content

Commit 65f2ab7

Browse files
authored
PEtab parameter mapping: minor speedup (#2640)
Avoid repeated lookups. Saves just a few seconds for Froehlich_CellSystems2018, but better than nothing...
1 parent b7bdf63 commit 65f2ab7

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

python/sdist/amici/petab/conditions.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,16 +134,21 @@ def _get_par(model_par, value, mapping):
134134
# condition table overrides must have been handled already,
135135
# e.g. by the PEtab parameter mapping, but parameters from
136136
# InitialAssignments may still be present.
137-
if mapping[value] == model_par:
137+
if (mapped_value := mapping[value]) == model_par:
138138
# prevent infinite recursion
139139
raise
140-
return _get_par(value, mapping[value], mapping)
141-
if model_par in problem_parameters:
140+
return _get_par(value, mapped_value, mapping)
141+
142+
try:
142143
# user-provided
143144
return problem_parameters[model_par]
145+
except KeyError:
146+
pass
147+
144148
# prevent nan-propagation in derivative
145149
if np.isnan(value):
146150
return 0.0
151+
147152
# constant value
148153
return value
149154

python/sdist/amici/petab/util.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ def get_states_in_condition_table(
2626
if petab_problem.model.type_id not in (MODEL_TYPE_SBML, MODEL_TYPE_PYSB):
2727
raise NotImplementedError()
2828

29-
species_check_funs = {
29+
species_check_fun = {
3030
MODEL_TYPE_SBML: lambda x: _element_is_sbml_state(
3131
petab_problem.sbml_model, x
3232
),
3333
MODEL_TYPE_PYSB: lambda x: _element_is_pysb_pattern(
3434
petab_problem.model.model, x
3535
),
36-
}
36+
}[petab_problem.model.type_id]
37+
3738
states = {
3839
resolve_mapping(petab_problem.mapping_df, col): (None, None)
3940
if condition is None
@@ -48,9 +49,7 @@ def get_states_in_condition_table(
4849
else None,
4950
)
5051
for col in petab_problem.condition_df.columns
51-
if species_check_funs[petab_problem.model.type_id](
52-
resolve_mapping(petab_problem.mapping_df, col)
53-
)
52+
if species_check_fun(resolve_mapping(petab_problem.mapping_df, col))
5453
}
5554

5655
if petab_problem.model.type_id == MODEL_TYPE_PYSB:

0 commit comments

Comments
 (0)