/* Generated by Cython 3.0.7 */

#ifndef __PYX_HAVE__petsc4py__PETSc
#define __PYX_HAVE__petsc4py__PETSc

#include "Python.h"
struct PyPetscCommObject;
struct PyPetscObjectObject;
struct PyPetscViewerObject;
struct PyPetscRandomObject;
struct PyPetscDeviceObject;
struct PyPetscDeviceContextObject;
struct PyPetscISObject;
struct PyPetscLGMapObject;
struct PyPetscSFObject;
struct PyPetscVecObject;
struct PyPetscSpaceObject;
struct PyPetscDualSpaceObject;
struct PyPetscFEObject;
struct PyPetscQuadObject;
struct PyPetscScatterObject;
struct PyPetscSectionObject;
struct PyPetscMatObject;
struct PyPetscMatPartitioningObject;
struct PyPetscNullSpaceObject;
struct PyPetscPCObject;
struct PyPetscKSPObject;
struct PyPetscSNESObject;
struct PyPetscTSObject;
struct PyPetscTAOObject;
struct PyPetscTAOLineSearchObject;
struct PyPetscAOObject;
struct PyPetscDMObject;
struct PyPetscDMPlexTransformObject;
struct PyPetscDSObject;
struct PyPetscPartitionerObject;
struct PyPetscDMLabelObject;

/* "petsc4py/PETSc.pxd":112
 * # --------------------------------------------------------------------
 * 
 * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
 *     type   PyPetscComm_Type,
 *     object PyPetscCommObject,
 */
struct PyPetscCommObject {
  PyObject_HEAD
  MPI_Comm comm;
  int isdup;
  PyObject *base;
};
typedef struct PyPetscCommObject PyPetscCommObject;

/* "petsc4py/PETSc.pxd":120
 *     cdef object base
 * 
 * ctypedef public api class Object [             # <<<<<<<<<<<<<<
 *     type   PyPetscObject_Type,
 *     object PyPetscObjectObject,
 */
struct PyPetscObjectObject {
  PyObject_HEAD
  struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *__pyx_vtab;
  PyObject *__weakref__;
  PyObject *__pyx___dummy__;
  PetscObject oval;
  PetscObject *obj;
};
typedef struct PyPetscObjectObject PyPetscObjectObject;

/* "petsc4py/PETSc.pxd":132
 *     cdef object get_dict(self)
 * 
 * ctypedef public api class Viewer(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscViewer_Type,
 *     object PyPetscViewerObject,
 */
struct PyPetscViewerObject {
  struct PyPetscObjectObject __pyx_base;
  PetscViewer vwr;
};
typedef struct PyPetscViewerObject PyPetscViewerObject;

/* "petsc4py/PETSc.pxd":138
 *     cdef PetscViewer vwr
 * 
 * ctypedef public api class Random(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscRandom_Type,
 *     object PyPetscRandomObject,
 */
struct PyPetscRandomObject {
  struct PyPetscObjectObject __pyx_base;
  PetscRandom rnd;
};
typedef struct PyPetscRandomObject PyPetscRandomObject;

/* "petsc4py/PETSc.pxd":144
 *     cdef PetscRandom rnd
 * 
 * ctypedef public api class Device [             # <<<<<<<<<<<<<<
 *     type   PyPetscDevice_Type,
 *     object PyPetscDeviceObject,
 */
struct PyPetscDeviceObject {
  PyObject_HEAD
  PetscDevice device;
  PyObject *__weakref__;
};
typedef struct PyPetscDeviceObject PyPetscDeviceObject;

/* "petsc4py/PETSc.pxd":151
 *     cdef object __weakref__
 * 
 * ctypedef public api class DeviceContext(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscDeviceContext_Type,
 *     object PyPetscDeviceContextObject,
 */
struct PyPetscDeviceContextObject {
  struct PyPetscObjectObject __pyx_base;
  PetscDeviceContext dctx;
};
typedef struct PyPetscDeviceContextObject PyPetscDeviceContextObject;

/* "petsc4py/PETSc.pxd":157
 *     cdef PetscDeviceContext dctx
 * 
 * ctypedef public api class IS(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscIS_Type,
 *     object PyPetscISObject,
 */
struct PyPetscISObject {
  struct PyPetscObjectObject __pyx_base;
  IS iset;
};
typedef struct PyPetscISObject PyPetscISObject;

/* "petsc4py/PETSc.pxd":163
 *     cdef PetscIS iset
 * 
 * ctypedef public api class LGMap(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscLGMap_Type,
 *     object PyPetscLGMapObject,
 */
struct PyPetscLGMapObject {
  struct PyPetscObjectObject __pyx_base;
  ISLocalToGlobalMapping lgm;
};
typedef struct PyPetscLGMapObject PyPetscLGMapObject;

/* "petsc4py/PETSc.pxd":169
 *     cdef PetscLGMap lgm
 * 
 * ctypedef public api class SF(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscSF_Type,
 *     object PyPetscSFObject,
 */
struct PyPetscSFObject {
  struct PyPetscObjectObject __pyx_base;
  PetscSF sf;
};
typedef struct PyPetscSFObject PyPetscSFObject;

/* "petsc4py/PETSc.pxd":175
 *     cdef PetscSF sf
 * 
 * ctypedef public api class Vec(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscVec_Type,
 *     object PyPetscVecObject,
 */
struct PyPetscVecObject {
  struct PyPetscObjectObject __pyx_base;
  Vec vec;
};
typedef struct PyPetscVecObject PyPetscVecObject;

/* "petsc4py/PETSc.pxd":181
 *     cdef PetscVec vec
 * 
 * ctypedef public api class Space(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscSpace_Type,
 *     object PyPetscSpaceObject,
 */
struct PyPetscSpaceObject {
  struct PyPetscObjectObject __pyx_base;
  PetscSpace space;
};
typedef struct PyPetscSpaceObject PyPetscSpaceObject;

/* "petsc4py/PETSc.pxd":187
 *     cdef PetscSpace space
 * 
 * ctypedef public api class DualSpace(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscDualSpace_Type,
 *     object PyPetscDualSpaceObject,
 */
struct PyPetscDualSpaceObject {
  struct PyPetscObjectObject __pyx_base;
  PetscDualSpace dualspace;
};
typedef struct PyPetscDualSpaceObject PyPetscDualSpaceObject;

/* "petsc4py/PETSc.pxd":193
 *     cdef PetscDualSpace dualspace
 * 
 * ctypedef public api class FE(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscFE_Type,
 *     object PyPetscFEObject,
 */
struct PyPetscFEObject {
  struct PyPetscObjectObject __pyx_base;
  PetscFE fe;
};
typedef struct PyPetscFEObject PyPetscFEObject;

/* "petsc4py/PETSc.pxd":199
 *     cdef PetscFE fe
 * 
 * ctypedef public api class Quad(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscQuad_Type,
 *     object PyPetscQuadObject,
 */
struct PyPetscQuadObject {
  struct PyPetscObjectObject __pyx_base;
  PetscQuadrature quad;
};
typedef struct PyPetscQuadObject PyPetscQuadObject;

/* "petsc4py/PETSc.pxd":205
 *     cdef PetscQuadrature quad
 * 
 * ctypedef public api class Scatter(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscScatter_Type,
 *     object PyPetscScatterObject,
 */
struct PyPetscScatterObject {
  struct PyPetscObjectObject __pyx_base;
  VecScatter sct;
};
typedef struct PyPetscScatterObject PyPetscScatterObject;

/* "petsc4py/PETSc.pxd":211
 *     cdef PetscScatter sct
 * 
 * ctypedef public api class Section(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscSection_Type,
 *     object PyPetscSectionObject,
 */
struct PyPetscSectionObject {
  struct PyPetscObjectObject __pyx_base;
  PetscSection sec;
};
typedef struct PyPetscSectionObject PyPetscSectionObject;

/* "petsc4py/PETSc.pxd":217
 *     cdef PetscSection sec
 * 
 * ctypedef public api class Mat(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscMat_Type,
 *     object PyPetscMatObject,
 */
struct PyPetscMatObject {
  struct PyPetscObjectObject __pyx_base;
  Mat mat;
};
typedef struct PyPetscMatObject PyPetscMatObject;

/* "petsc4py/PETSc.pxd":223
 *     cdef PetscMat mat
 * 
 * ctypedef public api class MatPartitioning(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscMatPartitioning_Type,
 *     object PyPetscMatPartitioningObject,
 */
struct PyPetscMatPartitioningObject {
  struct PyPetscObjectObject __pyx_base;
  MatPartitioning part;
};
typedef struct PyPetscMatPartitioningObject PyPetscMatPartitioningObject;

/* "petsc4py/PETSc.pxd":229
 *     cdef PetscMatPartitioning part
 * 
 * ctypedef public api class NullSpace(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscNullSpace_Type,
 *     object PyPetscNullSpaceObject,
 */
struct PyPetscNullSpaceObject {
  struct PyPetscObjectObject __pyx_base;
  MatNullSpace nsp;
};
typedef struct PyPetscNullSpaceObject PyPetscNullSpaceObject;

/* "petsc4py/PETSc.pxd":235
 *     cdef PetscNullSpace nsp
 * 
 * ctypedef public api class PC(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscPC_Type,
 *     object PyPetscPCObject,
 */
struct PyPetscPCObject {
  struct PyPetscObjectObject __pyx_base;
  PC pc;
};
typedef struct PyPetscPCObject PyPetscPCObject;

/* "petsc4py/PETSc.pxd":241
 *     cdef PetscPC pc
 * 
 * ctypedef public api class KSP(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscKSP_Type,
 *     object PyPetscKSPObject,
 */
struct PyPetscKSPObject {
  struct PyPetscObjectObject __pyx_base;
  KSP ksp;
};
typedef struct PyPetscKSPObject PyPetscKSPObject;

/* "petsc4py/PETSc.pxd":247
 *     cdef PetscKSP ksp
 * 
 * ctypedef public api class SNES(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscSNES_Type,
 *     object PyPetscSNESObject,
 */
struct PyPetscSNESObject {
  struct PyPetscObjectObject __pyx_base;
  SNES snes;
};
typedef struct PyPetscSNESObject PyPetscSNESObject;

/* "petsc4py/PETSc.pxd":253
 *     cdef PetscSNES snes
 * 
 * ctypedef public api class TS(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscTS_Type,
 *     object PyPetscTSObject,
 */
struct PyPetscTSObject {
  struct PyPetscObjectObject __pyx_base;
  TS ts;
};
typedef struct PyPetscTSObject PyPetscTSObject;

/* "petsc4py/PETSc.pxd":259
 *     cdef PetscTS ts
 * 
 * ctypedef public api class TAO(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscTAO_Type,
 *     object PyPetscTAOObject,
 */
struct PyPetscTAOObject {
  struct PyPetscObjectObject __pyx_base;
  Tao tao;
};
typedef struct PyPetscTAOObject PyPetscTAOObject;

/* "petsc4py/PETSc.pxd":265
 *     cdef PetscTAO tao
 * 
 * ctypedef public api class TAOLineSearch(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscTAOLineSearch_Type,
 *     object PyPetscTAOLineSearchObject,
 */
struct PyPetscTAOLineSearchObject {
  struct PyPetscObjectObject __pyx_base;
  TaoLineSearch taols;
};
typedef struct PyPetscTAOLineSearchObject PyPetscTAOLineSearchObject;

/* "petsc4py/PETSc.pxd":272
 * 
 * 
 * ctypedef public api class AO(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscAO_Type,
 *     object PyPetscAOObject,
 */
struct PyPetscAOObject {
  struct PyPetscObjectObject __pyx_base;
  AO ao;
};
typedef struct PyPetscAOObject PyPetscAOObject;

/* "petsc4py/PETSc.pxd":278
 *     cdef PetscAO ao
 * 
 * ctypedef public api class DM(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscDM_Type,
 *     object PyPetscDMObject,
 */
struct PyPetscDMObject {
  struct PyPetscObjectObject __pyx_base;
  DM dm;
};
typedef struct PyPetscDMObject PyPetscDMObject;

/* "petsc4py/PETSc.pxd":284
 *     cdef PetscDM dm
 * 
 * ctypedef public api class DMPlexTransform(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscDMPlexTransform_Type,
 *     object PyPetscDMPlexTransformObject,
 */
struct PyPetscDMPlexTransformObject {
  struct PyPetscObjectObject __pyx_base;
  DMPlexTransform tr;
};
typedef struct PyPetscDMPlexTransformObject PyPetscDMPlexTransformObject;

/* "petsc4py/PETSc.pxd":290
 *     cdef PetscDMPlexTransform tr
 * 
 * ctypedef public api class DS(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscDS_Type,
 *     object PyPetscDSObject,
 */
struct PyPetscDSObject {
  struct PyPetscObjectObject __pyx_base;
  PetscDS ds;
};
typedef struct PyPetscDSObject PyPetscDSObject;

/* "petsc4py/PETSc.pxd":296
 *     cdef PetscDS ds
 * 
 * ctypedef public api class Partitioner(Object) [             # <<<<<<<<<<<<<<
 *     type PyPetscPartitioner_Type,
 *     object PyPetscPartitionerObject,
 */
struct PyPetscPartitionerObject {
  struct PyPetscObjectObject __pyx_base;
  PetscPartitioner part;
};
typedef struct PyPetscPartitionerObject PyPetscPartitionerObject;

/* "petsc4py/PETSc.pxd":302
 *     cdef PetscPartitioner part
 * 
 * ctypedef public api class DMLabel(Object) [             # <<<<<<<<<<<<<<
 *     type   PyPetscDMLabel_Type,
 *     object PyPetscDMLabelObject,
 */
struct PyPetscDMLabelObject {
  struct PyPetscObjectObject __pyx_base;
  DMLabel dmlabel;
};
typedef struct PyPetscDMLabelObject PyPetscDMLabelObject;

#ifndef __PYX_HAVE_API__petsc4py__PETSc

#ifdef CYTHON_EXTERN_C
    #undef __PYX_EXTERN_C
    #define __PYX_EXTERN_C CYTHON_EXTERN_C
#elif defined(__PYX_EXTERN_C)
    #ifdef _MSC_VER
    #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
    #else
    #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
    #endif
#else
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#ifndef DL_IMPORT
  #define DL_IMPORT(_T) _T
#endif

__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscComm_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscObject_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscViewer_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscRandom_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDevice_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDeviceContext_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscIS_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscLGMap_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscSF_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscVec_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscSpace_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDualSpace_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscFE_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscQuad_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscScatter_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscSection_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscMat_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscMatPartitioning_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscNullSpace_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscPC_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscKSP_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscSNES_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscTS_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscTAO_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscTAOLineSearch_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscAO_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDM_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDMPlexTransform_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDS_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscPartitioner_Type;
__PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscDMLabel_Type;

__PYX_EXTERN_C PetscErrorCode MatPythonGetContext(Mat, void **);
__PYX_EXTERN_C PetscErrorCode MatPythonSetContext(Mat, void *);
__PYX_EXTERN_C PetscErrorCode PCPythonGetContext(PC, void **);
__PYX_EXTERN_C PetscErrorCode PCPythonSetContext(PC, void *);
__PYX_EXTERN_C PetscErrorCode KSPPythonGetContext(KSP, void **);
__PYX_EXTERN_C PetscErrorCode KSPPythonSetContext(KSP, void *);
__PYX_EXTERN_C PetscErrorCode SNESPythonGetContext(SNES, void **);
__PYX_EXTERN_C PetscErrorCode SNESPythonSetContext(SNES, void *);
__PYX_EXTERN_C PetscErrorCode TSPythonGetContext(TS, void **);
__PYX_EXTERN_C PetscErrorCode TSPythonSetContext(TS, void *);
__PYX_EXTERN_C PetscErrorCode TaoPythonGetContext(Tao, void **);
__PYX_EXTERN_C PetscErrorCode TaoPythonSetContext(Tao, void *);
__PYX_EXTERN_C PetscErrorCode PetscPythonRegisterAll(void);

#endif /* !__PYX_HAVE_API__petsc4py__PETSc */

/* WARNING: the interface of the module init function changed in CPython 3.5. */
/* It now returns a PyModuleDef instance instead of a PyModule instance. */

#if PY_MAJOR_VERSION < 3
PyMODINIT_FUNC initPETSc(void);
#else
/* WARNING: Use PyImport_AppendInittab("PETSc", PyInit_PETSc) instead of calling PyInit_PETSc directly from Python 3.5 */
PyMODINIT_FUNC PyInit_PETSc(void);

#if PY_VERSION_HEX >= 0x03050000 && (defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || (defined(__cplusplus) && __cplusplus >= 201402L))
#if defined(__cplusplus) && __cplusplus >= 201402L
[[deprecated("Use PyImport_AppendInittab(\"PETSc\", PyInit_PETSc) instead of calling PyInit_PETSc directly.")]] inline
#elif defined(__GNUC__) || defined(__clang__)
__attribute__ ((__deprecated__("Use PyImport_AppendInittab(\"PETSc\", PyInit_PETSc) instead of calling PyInit_PETSc directly."), __unused__)) __inline__
#elif defined(_MSC_VER)
__declspec(deprecated("Use PyImport_AppendInittab(\"PETSc\", PyInit_PETSc) instead of calling PyInit_PETSc directly.")) __inline
#endif
static PyObject* __PYX_WARN_IF_PyInit_PETSc_INIT_CALLED(PyObject* res) {
  return res;
}
#define PyInit_PETSc() __PYX_WARN_IF_PyInit_PETSc_INIT_CALLED(PyInit_PETSc())
#endif
#endif

#endif /* !__PYX_HAVE__petsc4py__PETSc */
