I see cdef extern from * nogil: ctypedef enum PetscErrorCode: PETSC_SUCCESS PETSC_ERR_PLIB PETSC_ERR_SUP PETSC_ERR_USER PETSC_ERR_MEM PETSC_ERR_MPI PETSC_ERR_PYTHON
ctypedef enum PetscErrorType: PETSC_ERROR_INITIAL PETSC_ERROR_REPEAT cdef PetscErrorCode CHKERR(PetscErrorCode) except PETSC_ERR_PYTHON nogil in src/binding/petsc4py/src/petsc4py/PETSc.pxd I don't know enough about cython to know how it could be accessible from Python code. > On Nov 27, 2023, at 3:46 AM, Miguel Angel Salazar de Troya > <miguel.sala...@corintis.com> wrote: > > Hello, > > Is there any way to get the PETSc error codes in the python interface? The > test I provided below is just a simple example that I know will run out of > memory. > > Miguel > > On Wed, Nov 15, 2023 at 10:00 AM Miguel Angel Salazar de Troya > <miguel.sala...@corintis.com <mailto:miguel.sala...@corintis.com>> wrote: >> Hello, >> >> The following simple petsc4py snippet runs out of memory, but I would like >> to handle it from python with the usual try-except. Is there any way to do >> so? How can I get the PETSc error codes in the python interface? >> >> Thanks >> >> from petsc4py import PETSc >> import sys, petsc4py >> petsc4py.init(sys.argv) >> try: >> m, n = 1000000, 1000000 >> A = PETSc.Mat().createAIJ([m, n], nnz=1e6) >> >> A.assemblyBegin() >> A.assemblyEnd() >> except Exception as e: >> print(f"An error occurred: {e}") >> >> An error occurred: error code 55 >> [0] MatSeqAIJSetPreallocation() at >> /Users/miguel/repos/firedrake-glacierware/src/petsc/src/mat/impls/aij/seq/aij.c:3942 >> [0] MatSeqAIJSetPreallocation_SeqAIJ() at >> /Users/miguel/repos/firedrake-glacierware/src/petsc/src/mat/impls/aij/seq/aij.c:4008 >> [0] PetscMallocA() at >> /Users/miguel/repos/firedrake-glacierware/src/petsc/src/sys/memory/mal.c:408 >> [0] PetscMallocAlign() at >> /Users/miguel/repos/firedrake-glacierware/src/petsc/src/sys/memory/mal.c:53 >> [0] Out of memory. Allocated: 0, Used by process: 59752448 >> [0] Memory requested 18446744064984991744 >> >> >>