diff --git a/doc/rtd_requirements.txt b/doc/rtd_requirements.txt index ce3e1d1688..1e58136155 100644 --- a/doc/rtd_requirements.txt +++ b/doc/rtd_requirements.txt @@ -8,7 +8,6 @@ setuptools>=67.7.2 # for building the documentation, we don't care whether this fully works git+https://github.com/pysb/pysb@0afeaab385e9a1d813ecf6fdaf0153f4b91358af # For forward type definition in generate_equinox -git+https://github.com/PEtab-dev/petab_sciml.git@727d177fd3f85509d0bdcc278b672e9eeafd2384#subdirectory=src/python matplotlib>=3.7.1 optax nbsphinx diff --git a/python/sdist/amici/exporters/sundials/de_export.py b/python/sdist/amici/exporters/sundials/de_export.py index c6865a57cf..e96e2fe95b 100644 --- a/python/sdist/amici/exporters/sundials/de_export.py +++ b/python/sdist/amici/exporters/sundials/de_export.py @@ -285,7 +285,13 @@ def _generate_c_code(self) -> None: if func_info.generate_body: dec = log_execution_time(f"writing {func_name}.cpp", logger) - dec(self._write_function_file)(func_name) + try: + dec(self._write_function_file)(func_name) + except Exception as e: + e.add_note( + f"Error while generating function '{func_name}'" + ) + raise for name in self.model.sym_names(): # only generate for those that have nontrivial implementation, diff --git a/python/sdist/amici/gradient_check.py b/python/sdist/amici/gradient_check.py index 0286488e33..f9195caf5b 100644 --- a/python/sdist/amici/gradient_check.py +++ b/python/sdist/amici/gradient_check.py @@ -133,17 +133,22 @@ def check_finite_difference( else: raise NotImplementedError() - _check_close( - sensi, - fd, - atol=atol, - rtol=rtol, - field=field, - ip=ip, - parameter_id=model.get_free_parameter_ids()[ip] - if model.has_free_parameter_ids() - else None, - ) + try: + _check_close( + sensi, + fd, + atol=atol, + rtol=rtol, + field=field, + ip=ip, + parameter_id=model.get_free_parameter_ids()[ip] + if model.has_free_parameter_ids() + else None, + ) + except Exception as e: + sm = SensitivityMethod(solver.get_sensitivity_method()) + e.add_note(f"Sensitivity method was {sm!r}") + raise e solver.set_sensitivity_order(og_sensitivity_order) model.set_free_parameters(og_parameters) diff --git a/python/sdist/amici/importers/pysb/__init__.py b/python/sdist/amici/importers/pysb/__init__.py index cb44744cc1..235ae8b72c 100644 --- a/python/sdist/amici/importers/pysb/__init__.py +++ b/python/sdist/amici/importers/pysb/__init__.py @@ -278,6 +278,7 @@ def pysb2amici( compiler=compiler, generate_sensitivity_code=generate_sensitivity_code, ) + # TODO: remove with https://github.com/AMICI-dev/AMICI/issues/3035 # Sympy code optimizations are incompatible with PySB objects, as # `pysb.Observable` comes with its own `.match` which overrides # `sympy.Basic.match()`, breaking `sympy.codegen.rewriting.optimize`. diff --git a/python/sdist/amici/importers/sbml/__init__.py b/python/sdist/amici/importers/sbml/__init__.py index 685836a830..931f5865f3 100644 --- a/python/sdist/amici/importers/sbml/__init__.py +++ b/python/sdist/amici/importers/sbml/__init__.py @@ -401,17 +401,23 @@ def sbml2amici( DEExporter, ) - exporter = DEExporter( - ode_model, - model_name=model_name, - outdir=output_dir, - verbose=verbose, - assume_pow_positivity=assume_pow_positivity, - compiler=compiler, - allow_reinit_fixpar_initcond=allow_reinit_fixpar_initcond, - generate_sensitivity_code=generate_sensitivity_code, - ) - exporter.generate_model_code() + try: + exporter = DEExporter( + ode_model, + model_name=model_name, + outdir=output_dir, + verbose=verbose, + assume_pow_positivity=assume_pow_positivity, + compiler=compiler, + allow_reinit_fixpar_initcond=allow_reinit_fixpar_initcond, + generate_sensitivity_code=generate_sensitivity_code, + ) + exporter.generate_model_code() + except NotImplementedError as e: + raise SBMLException( + "The SBML model contains features that are currently not " + "supported by the AMICI SBML importer." + ) from e if compile: if not has_clibs: diff --git a/tests/petab_test_suite/test_petab_v2_suite.py b/tests/petab_test_suite/test_petab_v2_suite.py index 4d3544ae30..766c64a27c 100755 --- a/tests/petab_test_suite/test_petab_v2_suite.py +++ b/tests/petab_test_suite/test_petab_v2_suite.py @@ -9,6 +9,7 @@ import pytest from _pytest.outcomes import Skipped from amici import ( + AMICI_SUCCESS, SensitivityMethod, SensitivityOrder, ) @@ -78,6 +79,10 @@ def _test_case(case, model_type, version, jax): ret = ps.simulate(problem_parameters=problem_parameters) rdatas = ret[RDATAS] + for rdata in rdatas: + assert rdata.status == AMICI_SUCCESS, ( + f"Simulation failed for {rdata.id}" + ) chi2 = sum(rdata.chi2 for rdata in rdatas) llh = ret[LLH] simulation_df = rdatas_to_simulation_df(rdatas, ps.model, pi.petab_problem)