From 83a51bc7c8c10b65b7f31989cf0c5b87abe3c7b7 Mon Sep 17 00:00:00 2001 From: Josh Hope-Collins Date: Wed, 16 Jul 2025 17:28:14 +0100 Subject: [PATCH] provide set of converged reasons for each PETSc object type --- petsctools/__init__.py | 14 ++++++++++++++ petsctools/reasons.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 petsctools/reasons.py diff --git a/petsctools/__init__.py b/petsctools/__init__.py index acb869d..feb1fde 100644 --- a/petsctools/__init__.py +++ b/petsctools/__init__.py @@ -32,6 +32,14 @@ is_set_from_options, inserted_options, ) + from .reasons import ( # noqa: F401 + PCReasons, + KSPReasons, + SNESReasons, + TAOReasons, + TAOLineSearchReasons, + TSReasons, + ) else: def __getattr__(name): @@ -49,6 +57,12 @@ def __getattr__(name): "set_from_options", "is_set_from_options", "inserted_options", + "PCReasons", + "KSPReasons", + "SNESReasons", + "TAOReasons", + "TAOLineSearchReasons", + "TSReasons", } if name in petsc4py_attrs: raise ImportError( diff --git a/petsctools/reasons.py b/petsctools/reasons.py new file mode 100644 index 0000000..ba98b7e --- /dev/null +++ b/petsctools/reasons.py @@ -0,0 +1,14 @@ +from petsc4py import PETSc + + +def _make_reasons(reasons): + return {getattr(reasons, r): r + for r in dir(reasons) if not r.startswith('_')} + + +PCReasons = _make_reasons(PETSc.PC.FailedReason()) +KSPReasons = _make_reasons(PETSc.KSP.ConvergedReason()) +SNESReasons = _make_reasons(PETSc.SNES.ConvergedReason()) +TAOReasons = _make_reasons(PETSc.TAO.ConvergedReason()) +TAOLineSearchReasons = _make_reasons(PETSc.TAOLineSearch.Reason()) +TSReasons = _make_reasons(PETSc.TS.ConvergedReason())