/* Generated by Cython 3.2.2 */

#ifndef __PYX_HAVE__mpi4py__MPI
#define __PYX_HAVE__mpi4py__MPI

#include "Python.h"
struct PyMPIDatatypeObject;
struct PyMPIStatusObject;
struct PyMPIRequestObject;
struct PyMPIPrequestObject;
struct PyMPIGrequestObject;
struct PyMPIMessageObject;
struct PyMPIOpObject;
struct PyMPIGroupObject;
struct PyMPIInfoObject;
struct PyMPIErrhandlerObject;
struct PyMPISessionObject;
struct PyMPICommObject;
struct PyMPIIntracommObject;
struct PyMPITopocommObject;
struct PyMPICartcommObject;
struct PyMPIGraphcommObject;
struct PyMPIDistgraphcommObject;
struct PyMPIIntercommObject;
struct PyMPIWinObject;
struct PyMPIFileObject;

/* "mpi4py/MPI.pxd":29
 *     ctypedef MPI_Count  Count  "MPI_Count"
 * 
 * ctypedef api class Datatype [             # <<<<<<<<<<<<<<
 *     type   PyMPIDatatype_Type,
 *     object PyMPIDatatypeObject,
*/
struct PyMPIDatatypeObject {
  PyObject_HEAD
  MPI_Datatype ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;

/* "mpi4py/MPI.pxd":37
 *     cdef object     __weakref__
 * 
 * ctypedef api class Status [             # <<<<<<<<<<<<<<
 *     type   PyMPIStatus_Type,
 *     object PyMPIStatusObject,
*/
struct PyMPIStatusObject {
  PyObject_HEAD
  MPI_Status ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIStatusObject PyMPIStatusObject;

/* "mpi4py/MPI.pxd":45
 *     cdef object   __weakref__
 * 
 * ctypedef api class Request [             # <<<<<<<<<<<<<<
 *     type   PyMPIRequest_Type,
 *     object PyMPIRequestObject,
*/
struct PyMPIRequestObject {
  PyObject_HEAD
  MPI_Request ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
  PyObject *ob_buf;
};
typedef struct PyMPIRequestObject PyMPIRequestObject;

/* "mpi4py/MPI.pxd":54
 *     cdef object      ob_buf
 * 
 * ctypedef api class Prequest(Request) [             # <<<<<<<<<<<<<<
 *     type   PyMPIPrequest_Type,
 *     object PyMPIPrequestObject,
*/
struct PyMPIPrequestObject {
  struct PyMPIRequestObject __pyx_base;
};
typedef struct PyMPIPrequestObject PyMPIPrequestObject;

/* "mpi4py/MPI.pxd":60
 *     pass
 * 
 * ctypedef api class Grequest(Request) [             # <<<<<<<<<<<<<<
 *     type   PyMPIGrequest_Type,
 *     object PyMPIGrequestObject,
*/
struct PyMPIGrequestObject {
  struct PyMPIRequestObject __pyx_base;
  MPI_Request ob_grequest;
};
typedef struct PyMPIGrequestObject PyMPIGrequestObject;

/* "mpi4py/MPI.pxd":66
 *     cdef MPI_Request ob_grequest
 * 
 * ctypedef api class Message [             # <<<<<<<<<<<<<<
 *     type   PyMPIMessage_Type,
 *     object PyMPIMessageObject,
*/
struct PyMPIMessageObject {
  PyObject_HEAD
  MPI_Message ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
  PyObject *ob_buf;
};
typedef struct PyMPIMessageObject PyMPIMessageObject;

/* "mpi4py/MPI.pxd":75
 *     cdef object      ob_buf
 * 
 * ctypedef api class Op [             # <<<<<<<<<<<<<<
 *     type   PyMPIOp_Type,
 *     object PyMPIOpObject,
*/
struct PyMPIOpObject {
  PyObject_HEAD
  MPI_Op ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIOpObject PyMPIOpObject;

/* "mpi4py/MPI.pxd":83
 *     cdef object __weakref__
 * 
 * ctypedef api class Group [             # <<<<<<<<<<<<<<
 *     type   PyMPIGroup_Type,
 *     object PyMPIGroupObject,
*/
struct PyMPIGroupObject {
  PyObject_HEAD
  MPI_Group ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIGroupObject PyMPIGroupObject;

/* "mpi4py/MPI.pxd":91
 *     cdef object  __weakref__
 * 
 * ctypedef api class Info [             # <<<<<<<<<<<<<<
 *     type   PyMPIInfo_Type,
 *     object PyMPIInfoObject,
*/
struct PyMPIInfoObject {
  PyObject_HEAD
  MPI_Info ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIInfoObject PyMPIInfoObject;

/* "mpi4py/MPI.pxd":99
 *     cdef object __weakref__
 * 
 * ctypedef api class Errhandler [             # <<<<<<<<<<<<<<
 *     type   PyMPIErrhandler_Type,
 *     object PyMPIErrhandlerObject,
*/
struct PyMPIErrhandlerObject {
  PyObject_HEAD
  MPI_Errhandler ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIErrhandlerObject PyMPIErrhandlerObject;

/* "mpi4py/MPI.pxd":107
 *     cdef object       __weakref__
 * 
 * ctypedef api class Session [             # <<<<<<<<<<<<<<
 *     type   PyMPISession_Type,
 *     object PyMPISessionObject,
*/
struct PyMPISessionObject {
  PyObject_HEAD
  MPI_Session ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPISessionObject PyMPISessionObject;

/* "mpi4py/MPI.pxd":115
 *     cdef object     __weakref__
 * 
 * ctypedef api class Comm [             # <<<<<<<<<<<<<<
 *     type   PyMPIComm_Type,
 *     object PyMPICommObject,
*/
struct PyMPICommObject {
  PyObject_HEAD
  MPI_Comm ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPICommObject PyMPICommObject;

/* "mpi4py/MPI.pxd":123
 *     cdef object __weakref__
 * 
 * ctypedef api class Intracomm(Comm) [             # <<<<<<<<<<<<<<
 *     type   PyMPIIntracomm_Type,
 *     object PyMPIIntracommObject,
*/
struct PyMPIIntracommObject {
  struct PyMPICommObject __pyx_base;
};
typedef struct PyMPIIntracommObject PyMPIIntracommObject;

/* "mpi4py/MPI.pxd":129
 *     pass
 * 
 * ctypedef api class Topocomm(Intracomm) [             # <<<<<<<<<<<<<<
 *     type   PyMPITopocomm_Type,
 *     object PyMPITopocommObject,
*/
struct PyMPITopocommObject {
  struct PyMPIIntracommObject __pyx_base;
};
typedef struct PyMPITopocommObject PyMPITopocommObject;

/* "mpi4py/MPI.pxd":135
 *     pass
 * 
 * ctypedef api class Cartcomm(Topocomm) [             # <<<<<<<<<<<<<<
 *     type   PyMPICartcomm_Type,
 *     object PyMPICartcommObject,
*/
struct PyMPICartcommObject {
  struct PyMPITopocommObject __pyx_base;
};
typedef struct PyMPICartcommObject PyMPICartcommObject;

/* "mpi4py/MPI.pxd":141
 *     pass
 * 
 * ctypedef api class Graphcomm(Topocomm) [             # <<<<<<<<<<<<<<
 *     type   PyMPIGraphcomm_Type,
 *     object PyMPIGraphcommObject,
*/
struct PyMPIGraphcommObject {
  struct PyMPITopocommObject __pyx_base;
};
typedef struct PyMPIGraphcommObject PyMPIGraphcommObject;

/* "mpi4py/MPI.pxd":147
 *     pass
 * 
 * ctypedef api class Distgraphcomm(Topocomm) [             # <<<<<<<<<<<<<<
 *     type   PyMPIDistgraphcomm_Type,
 *     object PyMPIDistgraphcommObject,
*/
struct PyMPIDistgraphcommObject {
  struct PyMPITopocommObject __pyx_base;
};
typedef struct PyMPIDistgraphcommObject PyMPIDistgraphcommObject;

/* "mpi4py/MPI.pxd":153
 *     pass
 * 
 * ctypedef api class Intercomm(Comm) [             # <<<<<<<<<<<<<<
 *     type   PyMPIIntercomm_Type,
 *     object PyMPIIntercommObject,
*/
struct PyMPIIntercommObject {
  struct PyMPICommObject __pyx_base;
};
typedef struct PyMPIIntercommObject PyMPIIntercommObject;

/* "mpi4py/MPI.pxd":159
 *     pass
 * 
 * ctypedef api class Win [             # <<<<<<<<<<<<<<
 *     type   PyMPIWin_Type,
 *     object PyMPIWinObject,
*/
struct PyMPIWinObject {
  PyObject_HEAD
  MPI_Win ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
  PyObject *ob_mem;
};
typedef struct PyMPIWinObject PyMPIWinObject;

/* "mpi4py/MPI.pxd":168
 *     cdef object   ob_mem
 * 
 * ctypedef api class File [             # <<<<<<<<<<<<<<
 *     type   PyMPIFile_Type,
 *     object PyMPIFileObject,
*/
struct PyMPIFileObject {
  PyObject_HEAD
  MPI_File ob_mpi;
  unsigned int flags;
  PyObject *__weakref__;
};
typedef struct PyMPIFileObject PyMPIFileObject;

#ifndef __PYX_HAVE_API__mpi4py__MPI

#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

#endif /* !__PYX_HAVE_API__mpi4py__MPI */

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

/* WARNING: Use PyImport_AppendInittab("MPI", PyInit_MPI) instead of calling PyInit_MPI directly from Python 3.5 */
PyMODINIT_FUNC PyInit_MPI(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(\"MPI\", PyInit_MPI) instead of calling PyInit_MPI directly.")]] inline
#elif defined(__GNUC__) || defined(__clang__)
__attribute__ ((__deprecated__("Use PyImport_AppendInittab(\"MPI\", PyInit_MPI) instead of calling PyInit_MPI directly."), __unused__)) __inline__
#elif defined(_MSC_VER)
__declspec(deprecated("Use PyImport_AppendInittab(\"MPI\", PyInit_MPI) instead of calling PyInit_MPI directly.")) __inline
#endif
static PyObject* __PYX_WARN_IF_PyInit_MPI_INIT_CALLED(PyObject* res) {
  return res;
}
#define PyInit_MPI() __PYX_WARN_IF_PyInit_MPI_INIT_CALLED(PyInit_MPI())
#endif

#endif /* !__PYX_HAVE__mpi4py__MPI */
