Skip to content

Commit

Permalink
Deterministic order of event assignments
Browse files Browse the repository at this point in the history
Ensure event assignments targets are processed in deterministic order.
Otherwise the ordering of state variables may change between subsequent
model imports, which we'd like to avoid.

Closes #2241.
  • Loading branch information
dweindl committed Dec 15, 2023
1 parent 594b07e commit 4b117d9
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions python/sdist/amici/sbml_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -2776,15 +2776,17 @@ def replace_logx(math_str: Union[str, float, None]) -> Union[str, float, None]:
return re.sub(r"(^|\W)log(\d+)\(", r"\g<1>1/ln(\2)*ln(", math_str)


def _collect_event_assignment_parameter_targets(sbml_model: sbml.Model):
targets = set()
def _collect_event_assignment_parameter_targets(
sbml_model: sbml.Model,
) -> list[sp.Symbol]:
targets = []
sbml_parameters = sbml_model.getListOfParameters()
sbml_parameter_ids = [p.getId() for p in sbml_parameters]
for event in sbml_model.getListOfEvents():
for event_assignment in event.getListOfEventAssignments():
target_id = event_assignment.getVariable()
if target_id in sbml_parameter_ids:
targets.add(
targets.append(

Check warning on line 2789 in python/sdist/amici/sbml_import.py

View check run for this annotation

Codecov / codecov/patch

python/sdist/amici/sbml_import.py#L2789

Added line #L2789 was not covered by tests
_get_identifier_symbol(
sbml_parameters[sbml_parameter_ids.index(target_id)]
)
Expand Down

0 comments on commit 4b117d9

Please sign in to comment.