1cdef extern from * nogil: 2 3 enum: PETSC_DECIDE 4 enum: PETSC_DEFAULT 5 enum: PETSC_DETERMINE 6 enum: PETSC_CURRENT 7 enum: PETSC_UNLIMITED 8 9 PetscReal PETSC_INFINITY 10 PetscReal PETSC_NINFINITY 11 12 ctypedef enum PetscInsertMode "InsertMode": 13 PETSC_NOT_SET_VALUES "NOT_SET_VALUES" 14 PETSC_INSERT_VALUES "INSERT_VALUES" 15 PETSC_ADD_VALUES "ADD_VALUES" 16 PETSC_MAX_VALUES "MAX_VALUES" 17 PETSC_INSERT_ALL_VALUES "INSERT_ALL_VALUES" 18 PETSC_ADD_ALL_VALUES "ADD_ALL_VALUES" 19 PETSC_INSERT_BC_VALUES "INSERT_BC_VALUES" 20 PETSC_ADD_BC_VALUES "ADD_BC_VALUES" 21 22 ctypedef enum PetscScatterMode "ScatterMode": 23 PETSC_SCATTER_FORWARD "SCATTER_FORWARD" 24 PETSC_SCATTER_REVERSE "SCATTER_REVERSE" 25 PETSC_SCATTER_FORWARD_LOCAL "SCATTER_FORWARD_LOCAL" 26 PETSC_SCATTER_REVERSE_LOCAL "SCATTER_REVERSE_LOCAL" 27 28 ctypedef enum PetscNormType "NormType": 29 PETSC_NORM_1 "NORM_1" 30 PETSC_NORM_2 "NORM_2" 31 PETSC_NORM_1_AND_2 "NORM_1_AND_2" 32 PETSC_NORM_FROBENIUS "NORM_FROBENIUS" 33 PETSC_NORM_INFINITY "NORM_INFINITY" 34 PETSC_NORM_MAX "NORM_MAX" 35 36 ctypedef enum PetscCopyMode: 37 PETSC_COPY_VALUES 38 PETSC_OWN_POINTER 39 PETSC_USE_POINTER 40 41cdef inline PetscInsertMode insertmode(object mode) \ 42 except <PetscInsertMode>(-1): 43 if mode is None: return PETSC_INSERT_VALUES 44 elif mode is True: return PETSC_ADD_VALUES 45 elif mode is False: return PETSC_INSERT_VALUES 46 else: return mode 47 48cdef inline PetscScatterMode scattermode(object mode) \ 49 except <PetscScatterMode>(-1): 50 if mode is None: return PETSC_SCATTER_FORWARD 51 if mode is False: return PETSC_SCATTER_FORWARD 52 if mode is True: return PETSC_SCATTER_REVERSE 53 if isinstance(mode, str): 54 if mode == 'forward': return PETSC_SCATTER_FORWARD 55 if mode == 'reverse': return PETSC_SCATTER_REVERSE 56 else: raise ValueError("unknown scatter mode: %s" % mode) 57 return mode 58