diff --git a/odetoolbox/singularity_detection.py b/odetoolbox/singularity_detection.py index f2233527..cf353f8c 100644 --- a/odetoolbox/singularity_detection.py +++ b/odetoolbox/singularity_detection.py @@ -24,6 +24,13 @@ import sympy.parsing.sympy_parser +class SingularityDetectionException(Exception): + """ + Thrown in case an error occurs while detecting singularities. + """ + pass + + class SingularityDetection: r"""Singularity detection for generated propagator matrix. @@ -147,8 +154,11 @@ def find_singularities(P: sympy.Matrix, A: sympy.Matrix): A : sympy.Matrix system matrix """ - conditions = SingularityDetection._generate_singularity_conditions(P) - conditions = SingularityDetection._flatten_conditions(conditions) # makes a list of conditions with each condition in the form of a dict - conditions = SingularityDetection._filter_valid_conditions(conditions, A) # filters out the invalid conditions (invalid means those for which A is not defined) + try: + conditions = SingularityDetection._generate_singularity_conditions(P) + conditions = SingularityDetection._flatten_conditions(conditions) # makes a list of conditions with each condition in the form of a dict + conditions = SingularityDetection._filter_valid_conditions(conditions, A) # filters out the invalid conditions (invalid means those for which A is not defined) + except Exception as e: + raise SingularityDetectionException() return conditions diff --git a/odetoolbox/system_of_shapes.py b/odetoolbox/system_of_shapes.py index 9a7f87b5..be7e6f50 100644 --- a/odetoolbox/system_of_shapes.py +++ b/odetoolbox/system_of_shapes.py @@ -30,7 +30,7 @@ from .config import Config from .shapes import Shape -from .singularity_detection import SingularityDetection +from .singularity_detection import SingularityDetection, SingularityDetectionException from .sympy_helpers import _custom_simplify_expr, _is_zero @@ -202,7 +202,7 @@ def generate_propagator_solver(self): logging.warning("List of all conditions that result in a singular propagator:") for cond in condition: logging.warning("\t" + r" ∧ ".join([str(k) + " = " + str(v) for k, v in cond.items()])) - except Exception as e: + except SingularityDetectionException: logging.warning("Could not check the propagator matrix for singularities.") logging.debug("System of equations:")