Skip to content

Commit f28efae

Browse files
authored
More informative exceptions (#3037)
* doc: Skip petab-sciml for now GitHub Action runners run out of disk space when installing petab-sciml with all its huge dependencies. Don't install that for now. So far, it's not used anywhere for the documentation build as far as I can see. This won't prevent enabling intersphinx later on. * More informative exceptions * Add more context to exceptions * Convert `NotImplementedError`s during SBML import to `SBMLException` as done in other places * Catch simulation errors early
1 parent 3833bb4 commit f28efae

File tree

5 files changed

+46
-23
lines changed

5 files changed

+46
-23
lines changed

python/sdist/amici/exporters/sundials/de_export.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,13 @@ def _generate_c_code(self) -> None:
285285

286286
if func_info.generate_body:
287287
dec = log_execution_time(f"writing {func_name}.cpp", logger)
288-
dec(self._write_function_file)(func_name)
288+
try:
289+
dec(self._write_function_file)(func_name)
290+
except Exception as e:
291+
e.add_note(
292+
f"Error while generating function '{func_name}'"
293+
)
294+
raise
289295

290296
for name in self.model.sym_names():
291297
# only generate for those that have nontrivial implementation,

python/sdist/amici/gradient_check.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,22 @@ def check_finite_difference(
133133
else:
134134
raise NotImplementedError()
135135

136-
_check_close(
137-
sensi,
138-
fd,
139-
atol=atol,
140-
rtol=rtol,
141-
field=field,
142-
ip=ip,
143-
parameter_id=model.get_free_parameter_ids()[ip]
144-
if model.has_free_parameter_ids()
145-
else None,
146-
)
136+
try:
137+
_check_close(
138+
sensi,
139+
fd,
140+
atol=atol,
141+
rtol=rtol,
142+
field=field,
143+
ip=ip,
144+
parameter_id=model.get_free_parameter_ids()[ip]
145+
if model.has_free_parameter_ids()
146+
else None,
147+
)
148+
except Exception as e:
149+
sm = SensitivityMethod(solver.get_sensitivity_method())
150+
e.add_note(f"Sensitivity method was {sm!r}")
151+
raise e
147152

148153
solver.set_sensitivity_order(og_sensitivity_order)
149154
model.set_free_parameters(og_parameters)

python/sdist/amici/importers/pysb/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ def pysb2amici(
278278
compiler=compiler,
279279
generate_sensitivity_code=generate_sensitivity_code,
280280
)
281+
# TODO: remove with https://github.com/AMICI-dev/AMICI/issues/3035
281282
# Sympy code optimizations are incompatible with PySB objects, as
282283
# `pysb.Observable` comes with its own `.match` which overrides
283284
# `sympy.Basic.match()`, breaking `sympy.codegen.rewriting.optimize`.

python/sdist/amici/importers/sbml/__init__.py

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -401,17 +401,23 @@ def sbml2amici(
401401
DEExporter,
402402
)
403403

404-
exporter = DEExporter(
405-
ode_model,
406-
model_name=model_name,
407-
outdir=output_dir,
408-
verbose=verbose,
409-
assume_pow_positivity=assume_pow_positivity,
410-
compiler=compiler,
411-
allow_reinit_fixpar_initcond=allow_reinit_fixpar_initcond,
412-
generate_sensitivity_code=generate_sensitivity_code,
413-
)
414-
exporter.generate_model_code()
404+
try:
405+
exporter = DEExporter(
406+
ode_model,
407+
model_name=model_name,
408+
outdir=output_dir,
409+
verbose=verbose,
410+
assume_pow_positivity=assume_pow_positivity,
411+
compiler=compiler,
412+
allow_reinit_fixpar_initcond=allow_reinit_fixpar_initcond,
413+
generate_sensitivity_code=generate_sensitivity_code,
414+
)
415+
exporter.generate_model_code()
416+
except NotImplementedError as e:
417+
raise SBMLException(
418+
"The SBML model contains features that are currently not "
419+
"supported by the AMICI SBML importer."
420+
) from e
415421

416422
if compile:
417423
if not has_clibs:

tests/petab_test_suite/test_petab_v2_suite.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import pytest
1010
from _pytest.outcomes import Skipped
1111
from amici import (
12+
AMICI_SUCCESS,
1213
SensitivityMethod,
1314
SensitivityOrder,
1415
)
@@ -78,6 +79,10 @@ def _test_case(case, model_type, version, jax):
7879
ret = ps.simulate(problem_parameters=problem_parameters)
7980

8081
rdatas = ret[RDATAS]
82+
for rdata in rdatas:
83+
assert rdata.status == AMICI_SUCCESS, (
84+
f"Simulation failed for {rdata.id}"
85+
)
8186
chi2 = sum(rdata.chi2 for rdata in rdatas)
8287
llh = ret[LLH]
8388
simulation_df = rdatas_to_simulation_df(rdatas, ps.model, pi.petab_problem)

0 commit comments

Comments
 (0)